aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
diff options
context:
space:
mode:
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>2021-03-31 13:57:17 +0300
committerRob Clark <robdclark@chromium.org>2021-04-07 11:05:45 -0700
commit93cf7d6289f993ff1c1a6e6c4621e33b5f31ccec (patch)
treeba265adab12b34dfc01c52a2d3f3d396da56a698 /drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
parentdrm/msm/dsi: drop multiple pll enable_seq support (diff)
downloadlinux-dev-93cf7d6289f993ff1c1a6e6c4621e33b5f31ccec.tar.xz
linux-dev-93cf7d6289f993ff1c1a6e6c4621e33b5f31ccec.zip
drm/msm/dsi: move all PLL callbacks into PHY config struct
Move all PLL-related callbacks into struct msm_dsi_phy_cfg. This limits the amount of data in the struct msm_dsi_pll. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Abhinav Kumar <abhinavk@codeaurora.org> Tested-by: Stephen Boyd <swboyd@chromium.org> # on sc7180 lazor Link: https://lore.kernel.org/r/20210331105735.3690009-7-dmitry.baryshkov@linaro.org Signed-off-by: Rob Clark <robdclark@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c')
-rw-r--r--drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c65
1 files changed, 43 insertions, 22 deletions
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
index 760cf7956fa2..fb6e19d9495d 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
@@ -597,19 +597,20 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm)
return 0;
}
-struct msm_dsi_pll *msm_dsi_pll_28nm_init(struct platform_device *pdev,
- enum msm_dsi_phy_type type, int id)
+static int dsi_pll_28nm_init(struct msm_dsi_phy *phy)
{
+ struct platform_device *pdev = phy->pdev;
+ int id = phy->id;
struct dsi_pll_28nm *pll_28nm;
struct msm_dsi_pll *pll;
int ret;
if (!pdev)
- return ERR_PTR(-ENODEV);
+ return -ENODEV;
pll_28nm = devm_kzalloc(&pdev->dev, sizeof(*pll_28nm), GFP_KERNEL);
if (!pll_28nm)
- return ERR_PTR(-ENOMEM);
+ return -ENOMEM;
pll_28nm->pdev = pdev;
pll_28nm->id = id;
@@ -617,40 +618,33 @@ struct msm_dsi_pll *msm_dsi_pll_28nm_init(struct platform_device *pdev,
pll_28nm->mmio = msm_ioremap(pdev, "dsi_pll", "DSI_PLL");
if (IS_ERR_OR_NULL(pll_28nm->mmio)) {
DRM_DEV_ERROR(&pdev->dev, "%s: failed to map pll base\n", __func__);
- return ERR_PTR(-ENOMEM);
+ return -ENOMEM;
}
pll = &pll_28nm->base;
pll->min_rate = VCO_MIN_RATE;
pll->max_rate = VCO_MAX_RATE;
- pll->get_provider = dsi_pll_28nm_get_provider;
- pll->destroy = dsi_pll_28nm_destroy;
- pll->disable_seq = dsi_pll_28nm_disable_seq;
- pll->save_state = dsi_pll_28nm_save_state;
- pll->restore_state = dsi_pll_28nm_restore_state;
-
- if (type == MSM_DSI_PHY_28NM_HPM) {
+ if (phy->cfg->type == MSM_DSI_PHY_28NM_HPM) {
pll_28nm->vco_delay = 1;
-
- pll->enable_seq = dsi_pll_28nm_enable_seq_hpm;
- } else if (type == MSM_DSI_PHY_28NM_LP) {
+ } else if (phy->cfg->type == MSM_DSI_PHY_28NM_LP) {
pll_28nm->vco_delay = 1000;
-
- pll->enable_seq = dsi_pll_28nm_enable_seq_lp;
} else {
- DRM_DEV_ERROR(&pdev->dev, "phy type (%d) is not 28nm\n", type);
- return ERR_PTR(-EINVAL);
+ DRM_DEV_ERROR(&pdev->dev, "phy type (%d) is not 28nm\n", phy->cfg->type);
+ return -EINVAL;
}
+ pll->cfg = phy->cfg;
+
ret = pll_28nm_register(pll_28nm);
if (ret) {
DRM_DEV_ERROR(&pdev->dev, "failed to register PLL: %d\n", ret);
- return ERR_PTR(ret);
+ return ret;
}
- return pll;
-}
+ phy->pll = pll;
+ return 0;
+}
static void dsi_28nm_dphy_set_timing(struct msm_dsi_phy *phy,
struct msm_dsi_dphy_timing *timing)
@@ -809,6 +803,15 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_hpm_cfgs = {
.ops = {
.enable = dsi_28nm_phy_enable,
.disable = dsi_28nm_phy_disable,
+ .pll_init = dsi_pll_28nm_init,
+ },
+ .pll_ops = {
+ .get_provider = dsi_pll_28nm_get_provider,
+ .destroy = dsi_pll_28nm_destroy,
+ .save_state = dsi_pll_28nm_save_state,
+ .restore_state = dsi_pll_28nm_restore_state,
+ .disable_seq = dsi_pll_28nm_disable_seq,
+ .enable_seq = dsi_pll_28nm_enable_seq_hpm,
},
.io_start = { 0xfd922b00, 0xfd923100 },
.num_dsi_phy = 2,
@@ -827,6 +830,15 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_hpm_famb_cfgs = {
.ops = {
.enable = dsi_28nm_phy_enable,
.disable = dsi_28nm_phy_disable,
+ .pll_init = dsi_pll_28nm_init,
+ },
+ .pll_ops = {
+ .get_provider = dsi_pll_28nm_get_provider,
+ .destroy = dsi_pll_28nm_destroy,
+ .save_state = dsi_pll_28nm_save_state,
+ .restore_state = dsi_pll_28nm_restore_state,
+ .disable_seq = dsi_pll_28nm_disable_seq,
+ .enable_seq = dsi_pll_28nm_enable_seq_hpm,
},
.io_start = { 0x1a94400, 0x1a96400 },
.num_dsi_phy = 2,
@@ -845,6 +857,15 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_lp_cfgs = {
.ops = {
.enable = dsi_28nm_phy_enable,
.disable = dsi_28nm_phy_disable,
+ .pll_init = dsi_pll_28nm_init,
+ },
+ .pll_ops = {
+ .get_provider = dsi_pll_28nm_get_provider,
+ .destroy = dsi_pll_28nm_destroy,
+ .save_state = dsi_pll_28nm_save_state,
+ .restore_state = dsi_pll_28nm_restore_state,
+ .disable_seq = dsi_pll_28nm_disable_seq,
+ .enable_seq = dsi_pll_28nm_enable_seq_lp,
},
.io_start = { 0x1a98500 },
.num_dsi_phy = 1,