drm/msm/dsi: make save/restore_state phy-level functions
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Wed, 31 Mar 2021 10:57:24 +0000 (13:57 +0300)
committerRob Clark <robdclark@chromium.org>
Wed, 7 Apr 2021 18:05:45 +0000 (11:05 -0700)
Morph msm_dsi_pll_save/restore_state() into msm_dsi_phy_save/restore_state(),
thus removing last bits of knowledge about msm_dsi_pll from dsi_manager.

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-14-dmitry.baryshkov@linaro.org
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/dsi/dsi.h
drivers/gpu/drm/msm/dsi/dsi_manager.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
drivers/gpu/drm/msm/dsi/phy/dsi_phy_10nm.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
drivers/gpu/drm/msm/dsi/phy/dsi_pll.c
drivers/gpu/drm/msm/dsi/phy/dsi_pll.h

index 0970f05..7f99e12 100644 (file)
@@ -92,21 +92,6 @@ static inline bool msm_dsi_device_connected(struct msm_dsi *msm_dsi)
 
 struct drm_encoder *msm_dsi_get_encoder(struct msm_dsi *msm_dsi);
 
-/* dsi pll */
-struct msm_dsi_pll;
-#ifdef CONFIG_DRM_MSM_DSI_PLL
-void msm_dsi_pll_save_state(struct msm_dsi_pll *pll);
-int msm_dsi_pll_restore_state(struct msm_dsi_pll *pll);
-#else
-static inline void msm_dsi_pll_save_state(struct msm_dsi_pll *pll)
-{
-}
-static inline int msm_dsi_pll_restore_state(struct msm_dsi_pll *pll)
-{
-       return 0;
-}
-#endif
-
 /* dsi host */
 struct msm_dsi_host;
 int msm_dsi_host_xfer_prepare(struct mipi_dsi_host *host,
@@ -182,11 +167,12 @@ int msm_dsi_phy_enable(struct msm_dsi_phy *phy, int src_pll_id,
 void msm_dsi_phy_disable(struct msm_dsi_phy *phy);
 void msm_dsi_phy_get_shared_timings(struct msm_dsi_phy *phy,
                        struct msm_dsi_phy_shared_timings *shared_timing);
-struct msm_dsi_pll *msm_dsi_phy_get_pll(struct msm_dsi_phy *phy);
 void msm_dsi_phy_set_usecase(struct msm_dsi_phy *phy,
                             enum msm_dsi_phy_usecase uc);
 int msm_dsi_phy_get_clk_provider(struct msm_dsi_phy *phy,
        struct clk **byte_clk_provider, struct clk **pixel_clk_provider);
+void msm_dsi_phy_pll_save_state(struct msm_dsi_phy *phy);
+int msm_dsi_phy_pll_restore_state(struct msm_dsi_phy *phy);
 
 #endif /* __DSI_CONNECTOR_H__ */
 
index 86e36be..e116e5f 100644 (file)
@@ -498,7 +498,6 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
        struct msm_dsi *msm_dsi1 = dsi_mgr_get_dsi(DSI_1);
        struct mipi_dsi_host *host = msm_dsi->host;
        struct drm_panel *panel = msm_dsi->panel;
-       struct msm_dsi_pll *src_pll;
        bool is_dual_dsi = IS_DUAL_DSI();
        int ret;
 
@@ -532,9 +531,8 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
                                                                id, ret);
        }
 
-       /* Save PLL status if it is a clock source */
-       src_pll = msm_dsi_phy_get_pll(msm_dsi->phy);
-       msm_dsi_pll_save_state(src_pll);
+       /* Save PHY status if it is a clock source */
+       msm_dsi_phy_pll_save_state(msm_dsi->phy);
 
        ret = msm_dsi_host_power_off(host);
        if (ret)
index 4656143..a1360e2 100644 (file)
@@ -799,9 +799,9 @@ int msm_dsi_phy_enable(struct msm_dsi_phy *phy, int src_pll_id,
         * source.
         */
        if (phy->usecase != MSM_DSI_PHY_SLAVE) {
-               ret = msm_dsi_pll_restore_state(phy->pll);
+               ret = msm_dsi_phy_pll_restore_state(phy);
                if (ret) {
-                       DRM_DEV_ERROR(dev, "%s: failed to restore pll state, %d\n",
+                       DRM_DEV_ERROR(dev, "%s: failed to restore phy state, %d\n",
                                __func__, ret);
                        goto pll_restor_fail;
                }
@@ -838,14 +838,6 @@ void msm_dsi_phy_get_shared_timings(struct msm_dsi_phy *phy,
               sizeof(*shared_timings));
 }
 
-struct msm_dsi_pll *msm_dsi_phy_get_pll(struct msm_dsi_phy *phy)
-{
-       if (!phy)
-               return NULL;
-
-       return phy->pll;
-}
-
 void msm_dsi_phy_set_usecase(struct msm_dsi_phy *phy,
                             enum msm_dsi_phy_usecase uc)
 {
@@ -863,3 +855,26 @@ int msm_dsi_phy_get_clk_provider(struct msm_dsi_phy *phy,
 
        return -EINVAL;
 }
+
+void msm_dsi_phy_pll_save_state(struct msm_dsi_phy *phy)
+{
+       if (phy->cfg->pll_ops.save_state) {
+               phy->cfg->pll_ops.save_state(phy->pll);
+               phy->pll->state_saved = true;
+       }
+}
+
+int msm_dsi_phy_pll_restore_state(struct msm_dsi_phy *phy)
+{
+       int ret;
+
+       if (phy->cfg->pll_ops.restore_state && phy->pll->state_saved) {
+               ret = phy->cfg->pll_ops.restore_state(phy->pll);
+               if (ret)
+                       return ret;
+
+               phy->pll->state_saved = false;
+       }
+
+       return 0;
+}
index 2c51968..8133732 100644 (file)
@@ -6,6 +6,7 @@
 #ifndef __DSI_PHY_H__
 #define __DSI_PHY_H__
 
+#include <linux/clk-provider.h>
 #include <linux/regulator/consumer.h>
 
 #include "dsi.h"
 #define dsi_phy_read(offset) msm_readl((offset))
 #define dsi_phy_write(offset, data) msm_writel((data), (offset))
 
+struct msm_dsi_pll {
+       struct clk_hw   clk_hw;
+       bool            pll_on;
+       bool            state_saved;
+
+       const struct msm_dsi_phy_cfg *cfg;
+};
+
+#define hw_clk_to_pll(x) container_of(x, struct msm_dsi_pll, clk_hw)
+
 struct msm_dsi_phy_ops {
        int (*pll_init)(struct msm_dsi_phy *phy);
        int (*enable)(struct msm_dsi_phy *phy, int src_pll_id,
index 6300b92..d81cea6 100644 (file)
@@ -782,7 +782,7 @@ static int dsi_pll_10nm_init(struct msm_dsi_phy *phy)
        phy->pll = pll;
 
        /* TODO: Remove this when we have proper display handover support */
-       msm_dsi_pll_save_state(pll);
+       msm_dsi_phy_pll_save_state(phy);
 
        return 0;
 }
index c482e51..d725ceb 100644 (file)
@@ -807,7 +807,7 @@ static int dsi_pll_7nm_init(struct msm_dsi_phy *phy)
        phy->pll = pll;
 
        /* TODO: Remove this when we have proper display handover support */
-       msm_dsi_pll_save_state(pll);
+       msm_dsi_phy_pll_save_state(phy);
 
        return 0;
 }
index 96de79b..652c2d6 100644 (file)
@@ -56,29 +56,3 @@ void msm_dsi_pll_helper_clk_unprepare(struct clk_hw *hw)
 
        pll->pll_on = false;
 }
-
-/*
- * DSI PLL API
- */
-void msm_dsi_pll_save_state(struct msm_dsi_pll *pll)
-{
-       if (pll->cfg->pll_ops.save_state) {
-               pll->cfg->pll_ops.save_state(pll);
-               pll->state_saved = true;
-       }
-}
-
-int msm_dsi_pll_restore_state(struct msm_dsi_pll *pll)
-{
-       int ret;
-
-       if (pll->cfg->pll_ops.restore_state && pll->state_saved) {
-               ret = pll->cfg->pll_ops.restore_state(pll);
-               if (ret)
-                       return ret;
-
-               pll->state_saved = false;
-       }
-
-       return 0;
-}
index c94f079..eca13cf 100644 (file)
@@ -6,21 +6,10 @@
 #ifndef __DSI_PLL_H__
 #define __DSI_PLL_H__
 
-#include <linux/clk-provider.h>
 #include <linux/delay.h>
 
 #include "dsi.h"
 
-struct msm_dsi_pll {
-       struct clk_hw   clk_hw;
-       bool            pll_on;
-       bool            state_saved;
-
-       const struct msm_dsi_phy_cfg *cfg;
-};
-
-#define hw_clk_to_pll(x) container_of(x, struct msm_dsi_pll, clk_hw)
-
 static inline void pll_write(void __iomem *reg, u32 data)
 {
        msm_writel(data, reg);