Loading drivers/video/msm/mdss/mdss.h +2 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,8 @@ struct mdss_data_type { u8 fs_ena; u8 vsync_ena; struct notifier_block gdsc_cb; u32 res_init; u32 highest_bank_bit; Loading drivers/video/msm/mdss/mdss_mdp.c +40 −0 Original line number Diff line number Diff line Loading @@ -818,6 +818,41 @@ static inline int mdss_mdp_irq_clk_register(struct mdss_data_type *mdata, return 0; } #define SEC_DEVICE_MDSS 1 static void __mdss_restore_sec_cfg(struct mdss_data_type *mdata) { int ret, scm_ret = 0; pr_debug("restoring mdss secure config\n"); mdss_mdp_clk_update(MDSS_CLK_AHB, 1); mdss_mdp_clk_update(MDSS_CLK_AXI, 1); mdss_mdp_clk_update(MDSS_CLK_MDP_CORE, 1); ret = scm_restore_sec_cfg(SEC_DEVICE_MDSS, 0, &scm_ret); if (ret || scm_ret) pr_warn("scm_restore_sec_cfg failed %d %d\n", ret, scm_ret); mdss_mdp_clk_update(MDSS_CLK_AHB, 0); mdss_mdp_clk_update(MDSS_CLK_AXI, 0); mdss_mdp_clk_update(MDSS_CLK_MDP_CORE, 0); } static int mdss_mdp_gdsc_notifier_call(struct notifier_block *self, unsigned long event, void *data) { struct mdss_data_type *mdata; mdata = container_of(self, struct mdss_data_type, gdsc_cb); if (event & REGULATOR_EVENT_ENABLE) __mdss_restore_sec_cfg(mdata); return NOTIFY_OK; } static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata) { int ret; Loading Loading @@ -847,6 +882,11 @@ static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata) } mdata->fs_ena = false; mdata->gdsc_cb.notifier_call = mdss_mdp_gdsc_notifier_call; mdata->gdsc_cb.priority = 5; if (regulator_register_notifier(mdata->fs, &(mdata->gdsc_cb))) pr_warn("GDSC notification registration failed!\n"); mdata->vdd_cx = devm_regulator_get(&mdata->pdev->dev, "vdd-cx"); if (IS_ERR_OR_NULL(mdata->vdd_cx)) { Loading Loading
drivers/video/msm/mdss/mdss.h +2 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,8 @@ struct mdss_data_type { u8 fs_ena; u8 vsync_ena; struct notifier_block gdsc_cb; u32 res_init; u32 highest_bank_bit; Loading
drivers/video/msm/mdss/mdss_mdp.c +40 −0 Original line number Diff line number Diff line Loading @@ -818,6 +818,41 @@ static inline int mdss_mdp_irq_clk_register(struct mdss_data_type *mdata, return 0; } #define SEC_DEVICE_MDSS 1 static void __mdss_restore_sec_cfg(struct mdss_data_type *mdata) { int ret, scm_ret = 0; pr_debug("restoring mdss secure config\n"); mdss_mdp_clk_update(MDSS_CLK_AHB, 1); mdss_mdp_clk_update(MDSS_CLK_AXI, 1); mdss_mdp_clk_update(MDSS_CLK_MDP_CORE, 1); ret = scm_restore_sec_cfg(SEC_DEVICE_MDSS, 0, &scm_ret); if (ret || scm_ret) pr_warn("scm_restore_sec_cfg failed %d %d\n", ret, scm_ret); mdss_mdp_clk_update(MDSS_CLK_AHB, 0); mdss_mdp_clk_update(MDSS_CLK_AXI, 0); mdss_mdp_clk_update(MDSS_CLK_MDP_CORE, 0); } static int mdss_mdp_gdsc_notifier_call(struct notifier_block *self, unsigned long event, void *data) { struct mdss_data_type *mdata; mdata = container_of(self, struct mdss_data_type, gdsc_cb); if (event & REGULATOR_EVENT_ENABLE) __mdss_restore_sec_cfg(mdata); return NOTIFY_OK; } static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata) { int ret; Loading Loading @@ -847,6 +882,11 @@ static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata) } mdata->fs_ena = false; mdata->gdsc_cb.notifier_call = mdss_mdp_gdsc_notifier_call; mdata->gdsc_cb.priority = 5; if (regulator_register_notifier(mdata->fs, &(mdata->gdsc_cb))) pr_warn("GDSC notification registration failed!\n"); mdata->vdd_cx = devm_regulator_get(&mdata->pdev->dev, "vdd-cx"); if (IS_ERR_OR_NULL(mdata->vdd_cx)) { Loading