disp: msm: dsi: Add new phy comaptible string for cape
Cape uses phy version 4.3 but requires programming of different values for vreg_ctrl_0 and vreg_ctrl_1 to configure LDO setting. Add new phy compatible string to distinguish cape from other chipsets and program the registers accordingly. Change-Id: I68b266cc6e179d211ee0fd05584a605f39b4d31d Signed-off-by: Srihitha Tangudu <quic_tangudu@quicinc.com>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
46849f2f19
commit
25beb2fccc
@@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
@@ -265,6 +266,7 @@ int dsi_catalog_phy_setup(struct dsi_phy_hw *phy,
|
|||||||
case DSI_PHY_VERSION_4_1:
|
case DSI_PHY_VERSION_4_1:
|
||||||
case DSI_PHY_VERSION_4_2:
|
case DSI_PHY_VERSION_4_2:
|
||||||
case DSI_PHY_VERSION_4_3:
|
case DSI_PHY_VERSION_4_3:
|
||||||
|
case DSI_PHY_VERSION_4_3_2:
|
||||||
dsi_catalog_phy_4_0_init(phy);
|
dsi_catalog_phy_4_0_init(phy);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
@@ -71,6 +72,14 @@ static const struct dsi_ver_spec_info dsi_phy_v4_3 = {
|
|||||||
.timing_cfg_count = 14,
|
.timing_cfg_count = 14,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct dsi_ver_spec_info dsi_phy_v4_3_2 = {
|
||||||
|
.version = DSI_PHY_VERSION_4_3_2,
|
||||||
|
.lane_cfg_count = 4,
|
||||||
|
.strength_cfg_count = 2,
|
||||||
|
.regulator_cfg_count = 0,
|
||||||
|
.timing_cfg_count = 14,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct of_device_id msm_dsi_phy_of_match[] = {
|
static const struct of_device_id msm_dsi_phy_of_match[] = {
|
||||||
{ .compatible = "qcom,dsi-phy-v3.0",
|
{ .compatible = "qcom,dsi-phy-v3.0",
|
||||||
.data = &dsi_phy_v3_0,},
|
.data = &dsi_phy_v3_0,},
|
||||||
@@ -82,6 +91,8 @@ static const struct of_device_id msm_dsi_phy_of_match[] = {
|
|||||||
.data = &dsi_phy_v4_2,},
|
.data = &dsi_phy_v4_2,},
|
||||||
{ .compatible = "qcom,dsi-phy-v4.3",
|
{ .compatible = "qcom,dsi-phy-v4.3",
|
||||||
.data = &dsi_phy_v4_3,},
|
.data = &dsi_phy_v4_3,},
|
||||||
|
{ .compatible = "qcom,dsi-phy-v4.3.2",
|
||||||
|
.data = &dsi_phy_v4_3_2,},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _DSI_PHY_HW_H_
|
#ifndef _DSI_PHY_HW_H_
|
||||||
@@ -34,6 +35,7 @@
|
|||||||
* @DSI_PHY_VERSION_4_1: 7nm
|
* @DSI_PHY_VERSION_4_1: 7nm
|
||||||
* @DSI_PHY_VERSION_4_2: 5nm
|
* @DSI_PHY_VERSION_4_2: 5nm
|
||||||
* @DSI_PHY_VERSION_4_3: 5nm
|
* @DSI_PHY_VERSION_4_3: 5nm
|
||||||
|
* @DSI_PHY_VERSION_4_3_2: 4nm (v4.3 specific to SM8475)
|
||||||
* @DSI_PHY_VERSION_MAX:
|
* @DSI_PHY_VERSION_MAX:
|
||||||
*/
|
*/
|
||||||
enum dsi_phy_version {
|
enum dsi_phy_version {
|
||||||
@@ -43,6 +45,7 @@ enum dsi_phy_version {
|
|||||||
DSI_PHY_VERSION_4_1, /* 7nm */
|
DSI_PHY_VERSION_4_1, /* 7nm */
|
||||||
DSI_PHY_VERSION_4_2, /* 5nm */
|
DSI_PHY_VERSION_4_2, /* 5nm */
|
||||||
DSI_PHY_VERSION_4_3, /* 5nm */
|
DSI_PHY_VERSION_4_3, /* 5nm */
|
||||||
|
DSI_PHY_VERSION_4_3_2, /* 4nm */
|
||||||
DSI_PHY_VERSION_MAX
|
DSI_PHY_VERSION_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/math64.h>
|
#include <linux/math64.h>
|
||||||
@@ -247,6 +248,7 @@ static void dsi_phy_hw_cphy_enable(struct dsi_phy_hw *phy,
|
|||||||
u32 minor_ver = 0;
|
u32 minor_ver = 0;
|
||||||
/* For C-PHY, no low power settings for lower clk rate */
|
/* For C-PHY, no low power settings for lower clk rate */
|
||||||
u32 vreg_ctrl_0 = 0x51;
|
u32 vreg_ctrl_0 = 0x51;
|
||||||
|
u32 vreg_ctrl_1 = 0x55;
|
||||||
u32 glbl_str_swi_cal_sel_ctrl = 0;
|
u32 glbl_str_swi_cal_sel_ctrl = 0;
|
||||||
u32 glbl_hstx_str_ctrl_0 = 0;
|
u32 glbl_hstx_str_ctrl_0 = 0;
|
||||||
u32 glbl_rescode_top_ctrl = 0;
|
u32 glbl_rescode_top_ctrl = 0;
|
||||||
@@ -272,6 +274,11 @@ static void dsi_phy_hw_cphy_enable(struct dsi_phy_hw *phy,
|
|||||||
glbl_rescode_bot_ctrl = 0x3c;
|
glbl_rescode_bot_ctrl = 0x3c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (phy->version == DSI_PHY_VERSION_4_3_2) {
|
||||||
|
vreg_ctrl_0 = 0x45;
|
||||||
|
vreg_ctrl_1 = 0x41;
|
||||||
|
}
|
||||||
|
|
||||||
/* de-assert digital and pll power down */
|
/* de-assert digital and pll power down */
|
||||||
data = BIT(6) | BIT(5);
|
data = BIT(6) | BIT(5);
|
||||||
DSI_W32(phy, DSIPHY_CMN_CTRL_0, data);
|
DSI_W32(phy, DSIPHY_CMN_CTRL_0, data);
|
||||||
@@ -295,7 +302,7 @@ static void dsi_phy_hw_cphy_enable(struct dsi_phy_hw *phy,
|
|||||||
|
|
||||||
/* Enable LDO */
|
/* Enable LDO */
|
||||||
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_0, vreg_ctrl_0);
|
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_0, vreg_ctrl_0);
|
||||||
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_1, 0x55);
|
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_1, vreg_ctrl_1);
|
||||||
DSI_W32(phy, DSIPHY_CMN_GLBL_STR_SWI_CAL_SEL_CTRL,
|
DSI_W32(phy, DSIPHY_CMN_GLBL_STR_SWI_CAL_SEL_CTRL,
|
||||||
glbl_str_swi_cal_sel_ctrl);
|
glbl_str_swi_cal_sel_ctrl);
|
||||||
DSI_W32(phy, DSIPHY_CMN_GLBL_HSTX_STR_CTRL_0, glbl_hstx_str_ctrl_0);
|
DSI_W32(phy, DSIPHY_CMN_GLBL_HSTX_STR_CTRL_0, glbl_hstx_str_ctrl_0);
|
||||||
@@ -356,6 +363,7 @@ static void dsi_phy_hw_dphy_enable(struct dsi_phy_hw *phy,
|
|||||||
u32 minor_ver = 0;
|
u32 minor_ver = 0;
|
||||||
bool less_than_1500_mhz = false;
|
bool less_than_1500_mhz = false;
|
||||||
u32 vreg_ctrl_0 = 0;
|
u32 vreg_ctrl_0 = 0;
|
||||||
|
u32 vreg_ctrl_1 = 0x5c;
|
||||||
u32 glbl_str_swi_cal_sel_ctrl = 0;
|
u32 glbl_str_swi_cal_sel_ctrl = 0;
|
||||||
u32 glbl_hstx_str_ctrl_0 = 0;
|
u32 glbl_hstx_str_ctrl_0 = 0;
|
||||||
u32 glbl_rescode_top_ctrl = 0;
|
u32 glbl_rescode_top_ctrl = 0;
|
||||||
@@ -390,6 +398,11 @@ static void dsi_phy_hw_dphy_enable(struct dsi_phy_hw *phy,
|
|||||||
if (phy->version >= DSI_PHY_VERSION_4_3)
|
if (phy->version >= DSI_PHY_VERSION_4_3)
|
||||||
glbl_rescode_top_ctrl = less_than_1500_mhz ? 0x3d : 0x01;
|
glbl_rescode_top_ctrl = less_than_1500_mhz ? 0x3d : 0x01;
|
||||||
|
|
||||||
|
if (phy->version == DSI_PHY_VERSION_4_3_2){
|
||||||
|
vreg_ctrl_0 = 0x19;
|
||||||
|
vreg_ctrl_1 = 0x44;
|
||||||
|
}
|
||||||
|
|
||||||
split_link_enabled = cfg->split_link.enabled;
|
split_link_enabled = cfg->split_link.enabled;
|
||||||
lanes_per_sublink = cfg->split_link.lanes_per_sublink;
|
lanes_per_sublink = cfg->split_link.lanes_per_sublink;
|
||||||
/* de-assert digital and pll power down */
|
/* de-assert digital and pll power down */
|
||||||
@@ -418,7 +431,7 @@ static void dsi_phy_hw_dphy_enable(struct dsi_phy_hw *phy,
|
|||||||
|
|
||||||
/* Enable LDO */
|
/* Enable LDO */
|
||||||
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_0, vreg_ctrl_0);
|
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_0, vreg_ctrl_0);
|
||||||
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_1, 0x5c);
|
DSI_W32(phy, DSIPHY_CMN_VREG_CTRL_1, vreg_ctrl_1);
|
||||||
DSI_W32(phy, DSIPHY_CMN_CTRL_3, 0x00);
|
DSI_W32(phy, DSIPHY_CMN_CTRL_3, 0x00);
|
||||||
DSI_W32(phy, DSIPHY_CMN_GLBL_STR_SWI_CAL_SEL_CTRL,
|
DSI_W32(phy, DSIPHY_CMN_GLBL_STR_SWI_CAL_SEL_CTRL,
|
||||||
glbl_str_swi_cal_sel_ctrl);
|
glbl_str_swi_cal_sel_ctrl);
|
||||||
@@ -491,7 +504,7 @@ void dsi_phy_hw_v4_0_enable(struct dsi_phy_hw *phy,
|
|||||||
pr_warn("PLL turned on before configuring PHY\n");
|
pr_warn("PLL turned on before configuring PHY\n");
|
||||||
|
|
||||||
/* Request for REFGEN ready */
|
/* Request for REFGEN ready */
|
||||||
if (phy->version == DSI_PHY_VERSION_4_3) {
|
if (phy->version >= DSI_PHY_VERSION_4_3) {
|
||||||
DSI_W32(phy, DSIPHY_CMN_GLBL_DIGTOP_SPARE10, 0x1);
|
DSI_W32(phy, DSIPHY_CMN_GLBL_DIGTOP_SPARE10, 0x1);
|
||||||
udelay(500);
|
udelay(500);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dsi_phy_timing_calc.h"
|
#include "dsi_phy_timing_calc.h"
|
||||||
@@ -994,6 +995,7 @@ int dsi_phy_timing_calc_init(struct dsi_phy_hw *phy,
|
|||||||
case DSI_PHY_VERSION_4_1:
|
case DSI_PHY_VERSION_4_1:
|
||||||
case DSI_PHY_VERSION_4_2:
|
case DSI_PHY_VERSION_4_2:
|
||||||
case DSI_PHY_VERSION_4_3:
|
case DSI_PHY_VERSION_4_3:
|
||||||
|
case DSI_PHY_VERSION_4_3_2:
|
||||||
ops->get_default_phy_params =
|
ops->get_default_phy_params =
|
||||||
dsi_phy_hw_v4_0_get_default_phy_params;
|
dsi_phy_hw_v4_0_get_default_phy_params;
|
||||||
ops->calc_clk_zero =
|
ops->calc_clk_zero =
|
||||||
|
Reference in New Issue
Block a user