Loading msm/dp/dp_display.c +2 −1 Original line number Diff line number Diff line Loading @@ -1213,7 +1213,8 @@ static int dp_init_sub_modules(struct dp_display_private *dp) goto error_power; } rc = dp->power->power_client_init(dp->power, &dp->priv->phandle); rc = dp->power->power_client_init(dp->power, &dp->priv->phandle, dp->dp_display.drm_dev); if (rc) { pr_err("Power client create failed\n"); goto error_aux; Loading msm/dp/dp_power.c +12 −29 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ #define pr_fmt(fmt) "[drm-dp] %s: " fmt, __func__ #include <linux/clk.h> #include <linux/pm_runtime.h> #include <drm/drmP.h> #include "dp_power.h" #include "dp_catalog.h" Loading @@ -20,8 +22,6 @@ struct dp_power_private { struct clk *pixel1_parent; struct dp_power dp_power; struct sde_power_client *dp_core_client; struct sde_power_handle *phandle; bool core_clks_on; bool link_clks_on; Loading Loading @@ -458,14 +458,13 @@ static int dp_power_config_gpios(struct dp_power_private *power, bool flip, } static int dp_power_client_init(struct dp_power *dp_power, struct sde_power_handle *phandle) struct sde_power_handle *phandle, struct drm_device *drm_dev) { int rc = 0; struct dp_power_private *power; char dp_client_name[DP_CLIENT_NAME_SIZE]; if (!dp_power) { pr_err("invalid power data\n"); if (!drm_dev) { pr_err("invalid drm_dev\n"); return -EINVAL; } Loading @@ -482,20 +481,11 @@ static int dp_power_client_init(struct dp_power *dp_power, pr_err("failed to init clocks\n"); goto error_clk; } dp_power->phandle = phandle; dp_power->drm_dev = drm_dev; power->phandle = phandle; snprintf(dp_client_name, DP_CLIENT_NAME_SIZE, "dp_core_client"); power->dp_core_client = sde_power_client_create(phandle, dp_client_name); if (IS_ERR_OR_NULL(power->dp_core_client)) { pr_err("[%s] client creation failed for DP\n", dp_client_name); rc = -EINVAL; goto error_client; } return 0; error_client: dp_power_clk_init(power, false); error_clk: dp_power_regulator_deinit(power); error_power: Loading @@ -513,7 +503,6 @@ static void dp_power_client_deinit(struct dp_power *dp_power) power = container_of(dp_power, struct dp_power_private, dp_power); sde_power_client_destroy(power->phandle, power->dp_core_client); dp_power_clk_init(power, false); dp_power_regulator_deinit(power); } Loading Loading @@ -559,7 +548,7 @@ static u64 dp_power_clk_get_rate(struct dp_power *dp_power, char *clk_name) } power = container_of(dp_power, struct dp_power_private, dp_power); mp = &power->phandle->mp; mp = &dp_power->phandle->mp; for (i = 0; i < mp->num_clk; i++) { if (!strcmp(mp->clk_config[i].clk_name, clk_name)) { rate = clk_get_rate(mp->clk_config[i].clk); Loading Loading @@ -613,9 +602,8 @@ static int dp_power_init(struct dp_power *dp_power, bool flip) goto err_gpio; } rc = sde_power_resource_enable(power->phandle, power->dp_core_client, true); if (rc) { rc = pm_runtime_get_sync(dp_power->drm_dev->dev); if (rc < 0) { pr_err("Power resource enable failed\n"); goto err_sde_power; } Loading @@ -629,7 +617,7 @@ static int dp_power_init(struct dp_power *dp_power, bool flip) return 0; err_clk: sde_power_resource_enable(power->phandle, power->dp_core_client, false); pm_runtime_put_sync(dp_power->drm_dev->dev); err_sde_power: dp_power_config_gpios(power, flip, false); err_gpio: Loading Loading @@ -657,13 +645,8 @@ static int dp_power_deinit(struct dp_power *dp_power) dp_power_clk_enable(dp_power, DP_LINK_PM, false); dp_power_clk_enable(dp_power, DP_CORE_PM, false); pm_runtime_put_sync(dp_power->drm_dev->dev); rc = sde_power_resource_enable(power->phandle, power->dp_core_client, false); if (rc) { pr_err("Power resource disable failed, rc=%d\n", rc); goto exit; } dp_power_config_gpios(power, false, false); dp_power_pinctrl_set(power, false); dp_power_regulator_ctrl(power, false); Loading msm/dp/dp_power.h +4 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ * @clk_get_rate: get the current rate for provided clk_name */ struct dp_power { struct drm_device *drm_dev; struct sde_power_handle *phandle; int (*init)(struct dp_power *power, bool flip); int (*deinit)(struct dp_power *power); int (*clk_enable)(struct dp_power *power, enum dp_pm_type pm_type, Loading @@ -26,7 +28,8 @@ struct dp_power { int (*set_pixel_clk_parent)(struct dp_power *power, u32 stream_id); u64 (*clk_get_rate)(struct dp_power *power, char *clk_name); int (*power_client_init)(struct dp_power *power, struct sde_power_handle *phandle); struct sde_power_handle *phandle, struct drm_device *drm_dev); void (*power_client_deinit)(struct dp_power *power); }; Loading msm/dsi/dsi_clk.h +3 −5 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ #include <linux/platform_device.h> #include <linux/types.h> #include <linux/clk.h> #include "sde_power_handle.h" #include <drm/drmP.h> #define MAX_STRING_LEN 32 #define MAX_DSI_CTRL 2 Loading Loading @@ -72,8 +72,7 @@ struct clk_ctrl_cb { * @core_mmss_clk: Handle to MMSS core clock. * @bus_clk: Handle to bus clock. * @mnoc_clk: Handle to MMSS NOC clock. * @dsi_core_client: Pointer to SDE power client * @phandle: Pointer to SDE power handle * @drm: Pointer to drm device node */ struct dsi_core_clk_info { struct clk *mdp_core_clk; Loading @@ -81,8 +80,7 @@ struct dsi_core_clk_info { struct clk *core_mmss_clk; struct clk *bus_clk; struct clk *mnoc_clk; struct sde_power_client *dsi_core_client; struct sde_power_handle *phandle; struct drm_device *drm; }; /** Loading msm/dsi/dsi_clk_manager.c +9 −20 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include <linux/delay.h> #include <linux/slab.h> #include <linux/msm-bus.h> #include <linux/pm_runtime.h> #include "dsi_clk.h" struct dsi_core_clks { Loading Loading @@ -554,10 +555,9 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, */ m_clks = &clks[master_ndx]; rc = sde_power_resource_enable(m_clks->clks.phandle, m_clks->clks.dsi_core_client, true); if (rc) { rc = pm_runtime_get_sync(m_clks->clks.drm->dev); if (rc < 0) { pr_err("Power resource enable failed, rc=%d\n", rc); goto error; } Loading @@ -574,9 +574,8 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, if (!clk || (clk == m_clks)) continue; rc = sde_power_resource_enable(clk->clks.phandle, clk->clks.dsi_core_client, true); if (rc) { rc = pm_runtime_get_sync(m_clks->clks.drm->dev); if (rc < 0) { pr_err("Power resource enable failed, rc=%d\n", rc); goto error_disable_master; } Loading @@ -584,8 +583,7 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, rc = dsi_core_clk_start(clk); if (rc) { pr_err("failed to turn on clocks, rc=%d\n", rc); (void)sde_power_resource_enable(clk->clks.phandle, clk->clks.dsi_core_client, false); pm_runtime_put_sync(m_clks->clks.drm->dev); goto error_disable_master; } } Loading @@ -594,8 +592,7 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, (void)dsi_core_clk_stop(m_clks); error_disable_master_resource: (void)sde_power_resource_enable(m_clks->clks.phandle, m_clks->clks.dsi_core_client, false); pm_runtime_put_sync(m_clks->clks.drm->dev); error: return rc; } Loading Loading @@ -697,12 +694,7 @@ static int dsi_display_core_clk_disable(struct dsi_core_clks *clks, goto error; } rc = sde_power_resource_enable(clk->clks.phandle, clk->clks.dsi_core_client, false); if (rc) { pr_err("Power resource disable failed: %d\n", rc); goto error; } pm_runtime_put_sync(m_clks->clks.drm->dev); } rc = dsi_core_clk_stop(m_clks); Loading @@ -711,10 +703,7 @@ static int dsi_display_core_clk_disable(struct dsi_core_clks *clks, goto error; } rc = sde_power_resource_enable(m_clks->clks.phandle, m_clks->clks.dsi_core_client, false); if (rc) pr_err("Power resource disable failed: %d\n", rc); pm_runtime_put_sync(m_clks->clks.drm->dev); error: return rc; } Loading Loading
msm/dp/dp_display.c +2 −1 Original line number Diff line number Diff line Loading @@ -1213,7 +1213,8 @@ static int dp_init_sub_modules(struct dp_display_private *dp) goto error_power; } rc = dp->power->power_client_init(dp->power, &dp->priv->phandle); rc = dp->power->power_client_init(dp->power, &dp->priv->phandle, dp->dp_display.drm_dev); if (rc) { pr_err("Power client create failed\n"); goto error_aux; Loading
msm/dp/dp_power.c +12 −29 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ #define pr_fmt(fmt) "[drm-dp] %s: " fmt, __func__ #include <linux/clk.h> #include <linux/pm_runtime.h> #include <drm/drmP.h> #include "dp_power.h" #include "dp_catalog.h" Loading @@ -20,8 +22,6 @@ struct dp_power_private { struct clk *pixel1_parent; struct dp_power dp_power; struct sde_power_client *dp_core_client; struct sde_power_handle *phandle; bool core_clks_on; bool link_clks_on; Loading Loading @@ -458,14 +458,13 @@ static int dp_power_config_gpios(struct dp_power_private *power, bool flip, } static int dp_power_client_init(struct dp_power *dp_power, struct sde_power_handle *phandle) struct sde_power_handle *phandle, struct drm_device *drm_dev) { int rc = 0; struct dp_power_private *power; char dp_client_name[DP_CLIENT_NAME_SIZE]; if (!dp_power) { pr_err("invalid power data\n"); if (!drm_dev) { pr_err("invalid drm_dev\n"); return -EINVAL; } Loading @@ -482,20 +481,11 @@ static int dp_power_client_init(struct dp_power *dp_power, pr_err("failed to init clocks\n"); goto error_clk; } dp_power->phandle = phandle; dp_power->drm_dev = drm_dev; power->phandle = phandle; snprintf(dp_client_name, DP_CLIENT_NAME_SIZE, "dp_core_client"); power->dp_core_client = sde_power_client_create(phandle, dp_client_name); if (IS_ERR_OR_NULL(power->dp_core_client)) { pr_err("[%s] client creation failed for DP\n", dp_client_name); rc = -EINVAL; goto error_client; } return 0; error_client: dp_power_clk_init(power, false); error_clk: dp_power_regulator_deinit(power); error_power: Loading @@ -513,7 +503,6 @@ static void dp_power_client_deinit(struct dp_power *dp_power) power = container_of(dp_power, struct dp_power_private, dp_power); sde_power_client_destroy(power->phandle, power->dp_core_client); dp_power_clk_init(power, false); dp_power_regulator_deinit(power); } Loading Loading @@ -559,7 +548,7 @@ static u64 dp_power_clk_get_rate(struct dp_power *dp_power, char *clk_name) } power = container_of(dp_power, struct dp_power_private, dp_power); mp = &power->phandle->mp; mp = &dp_power->phandle->mp; for (i = 0; i < mp->num_clk; i++) { if (!strcmp(mp->clk_config[i].clk_name, clk_name)) { rate = clk_get_rate(mp->clk_config[i].clk); Loading Loading @@ -613,9 +602,8 @@ static int dp_power_init(struct dp_power *dp_power, bool flip) goto err_gpio; } rc = sde_power_resource_enable(power->phandle, power->dp_core_client, true); if (rc) { rc = pm_runtime_get_sync(dp_power->drm_dev->dev); if (rc < 0) { pr_err("Power resource enable failed\n"); goto err_sde_power; } Loading @@ -629,7 +617,7 @@ static int dp_power_init(struct dp_power *dp_power, bool flip) return 0; err_clk: sde_power_resource_enable(power->phandle, power->dp_core_client, false); pm_runtime_put_sync(dp_power->drm_dev->dev); err_sde_power: dp_power_config_gpios(power, flip, false); err_gpio: Loading Loading @@ -657,13 +645,8 @@ static int dp_power_deinit(struct dp_power *dp_power) dp_power_clk_enable(dp_power, DP_LINK_PM, false); dp_power_clk_enable(dp_power, DP_CORE_PM, false); pm_runtime_put_sync(dp_power->drm_dev->dev); rc = sde_power_resource_enable(power->phandle, power->dp_core_client, false); if (rc) { pr_err("Power resource disable failed, rc=%d\n", rc); goto exit; } dp_power_config_gpios(power, false, false); dp_power_pinctrl_set(power, false); dp_power_regulator_ctrl(power, false); Loading
msm/dp/dp_power.h +4 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ * @clk_get_rate: get the current rate for provided clk_name */ struct dp_power { struct drm_device *drm_dev; struct sde_power_handle *phandle; int (*init)(struct dp_power *power, bool flip); int (*deinit)(struct dp_power *power); int (*clk_enable)(struct dp_power *power, enum dp_pm_type pm_type, Loading @@ -26,7 +28,8 @@ struct dp_power { int (*set_pixel_clk_parent)(struct dp_power *power, u32 stream_id); u64 (*clk_get_rate)(struct dp_power *power, char *clk_name); int (*power_client_init)(struct dp_power *power, struct sde_power_handle *phandle); struct sde_power_handle *phandle, struct drm_device *drm_dev); void (*power_client_deinit)(struct dp_power *power); }; Loading
msm/dsi/dsi_clk.h +3 −5 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ #include <linux/platform_device.h> #include <linux/types.h> #include <linux/clk.h> #include "sde_power_handle.h" #include <drm/drmP.h> #define MAX_STRING_LEN 32 #define MAX_DSI_CTRL 2 Loading Loading @@ -72,8 +72,7 @@ struct clk_ctrl_cb { * @core_mmss_clk: Handle to MMSS core clock. * @bus_clk: Handle to bus clock. * @mnoc_clk: Handle to MMSS NOC clock. * @dsi_core_client: Pointer to SDE power client * @phandle: Pointer to SDE power handle * @drm: Pointer to drm device node */ struct dsi_core_clk_info { struct clk *mdp_core_clk; Loading @@ -81,8 +80,7 @@ struct dsi_core_clk_info { struct clk *core_mmss_clk; struct clk *bus_clk; struct clk *mnoc_clk; struct sde_power_client *dsi_core_client; struct sde_power_handle *phandle; struct drm_device *drm; }; /** Loading
msm/dsi/dsi_clk_manager.c +9 −20 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include <linux/delay.h> #include <linux/slab.h> #include <linux/msm-bus.h> #include <linux/pm_runtime.h> #include "dsi_clk.h" struct dsi_core_clks { Loading Loading @@ -554,10 +555,9 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, */ m_clks = &clks[master_ndx]; rc = sde_power_resource_enable(m_clks->clks.phandle, m_clks->clks.dsi_core_client, true); if (rc) { rc = pm_runtime_get_sync(m_clks->clks.drm->dev); if (rc < 0) { pr_err("Power resource enable failed, rc=%d\n", rc); goto error; } Loading @@ -574,9 +574,8 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, if (!clk || (clk == m_clks)) continue; rc = sde_power_resource_enable(clk->clks.phandle, clk->clks.dsi_core_client, true); if (rc) { rc = pm_runtime_get_sync(m_clks->clks.drm->dev); if (rc < 0) { pr_err("Power resource enable failed, rc=%d\n", rc); goto error_disable_master; } Loading @@ -584,8 +583,7 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, rc = dsi_core_clk_start(clk); if (rc) { pr_err("failed to turn on clocks, rc=%d\n", rc); (void)sde_power_resource_enable(clk->clks.phandle, clk->clks.dsi_core_client, false); pm_runtime_put_sync(m_clks->clks.drm->dev); goto error_disable_master; } } Loading @@ -594,8 +592,7 @@ static int dsi_display_core_clk_enable(struct dsi_core_clks *clks, (void)dsi_core_clk_stop(m_clks); error_disable_master_resource: (void)sde_power_resource_enable(m_clks->clks.phandle, m_clks->clks.dsi_core_client, false); pm_runtime_put_sync(m_clks->clks.drm->dev); error: return rc; } Loading Loading @@ -697,12 +694,7 @@ static int dsi_display_core_clk_disable(struct dsi_core_clks *clks, goto error; } rc = sde_power_resource_enable(clk->clks.phandle, clk->clks.dsi_core_client, false); if (rc) { pr_err("Power resource disable failed: %d\n", rc); goto error; } pm_runtime_put_sync(m_clks->clks.drm->dev); } rc = dsi_core_clk_stop(m_clks); Loading @@ -711,10 +703,7 @@ static int dsi_display_core_clk_disable(struct dsi_core_clks *clks, goto error; } rc = sde_power_resource_enable(m_clks->clks.phandle, m_clks->clks.dsi_core_client, false); if (rc) pr_err("Power resource disable failed: %d\n", rc); pm_runtime_put_sync(m_clks->clks.drm->dev); error: return rc; } Loading