static int mddi_on(struct platform_device *pdev) { int ret = 0; u32 clk_rate; struct msm_fb_data_type *mfd; #ifdef ENABLE_FWD_LINK_SKEW_CALIBRATION mddi_host_type host_idx = MDDI_HOST_PRIM; u32 stat_reg; #endif mfd = platform_get_drvdata(pdev); pmdh_clk_enable(); pm_runtime_get(&pdev->dev); if (mddi_pdata && mddi_pdata->mddi_power_save) mddi_pdata->mddi_power_save(1); pmdh_clk_enable(); #ifdef ENABLE_FWD_LINK_SKEW_CALIBRATION if (mddi_client_type < 2) { /* For skew calibration, clock should be less than 50MHz */ if (!clk_set_min_rate(mddi_clk, 49000000)) { stat_reg = mddi_host_reg_in(STAT); printk(KERN_DEBUG "\n stat_reg = 0x%x", stat_reg); mddi_host_reg_out(CMD, MDDI_CMD_HIBERNATE); if (stat_reg & (0x1 << 4)) mddi_host_reg_out(CMD, MDDI_CMD_LINK_ACTIVE); mddi_host_reg_out(CMD, MDDI_CMD_SEND_RTD); mddi_send_fw_link_skew_cal(host_idx); mddi_host_reg_out(CMD, MDDI_CMD_SEND_RTD); mddi_host_reg_out(CMD, MDDI_CMD_HIBERNATE | 1); } else { printk(KERN_ERR "%s: clk_set_min_rate failed\n", __func__); } } #endif clk_rate = mfd->fbi->var.pixclock; clk_rate = min(clk_rate, mfd->panel_info.clk_max); if (mddi_pdata && mddi_pdata->mddi_sel_clk && mddi_pdata->mddi_sel_clk(&clk_rate)) printk(KERN_ERR "%s: can't select mddi io clk targate rate = %d\n", __func__, clk_rate); if (clk_set_min_rate(mddi_clk, clk_rate) < 0) printk(KERN_ERR "%s: clk_set_min_rate failed\n", __func__); ret = panel_next_on(pdev); return ret; }
void mddi_disable(int lock) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (mddi_power_locked) return; if (lock) mddi_power_locked = 1; if (mddi_host_timer.function) del_timer_sync(&mddi_host_timer); mddi_pad_ctrl = mddi_host_reg_in(PAD_CTL); mddi_host_reg_out(PAD_CTL, 0x0); if (clk_set_min_rate(mddi_clk, 0) < 0) printk(KERN_ERR "%s: clk_set_min_rate failed\n", __func__); clk_disable(mddi_clk); if (mddi_pclk) clk_disable(mddi_pclk); disable_irq(INT_MDDI_PRI); if (mddi_pdata && mddi_pdata->mddi_power_save) mddi_pdata->mddi_power_save(0); }
static int mddi_resume(struct platform_device *pdev) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (!mddi_is_in_suspend) return 0; mddi_is_in_suspend = 0; if (mddi_power_locked) return 0; #ifdef CONFIG_SHLCDC_BOARD if (no_set_power_flag == FALSE) { shlcdc_api_set_power_mode(SHLCDC_DEV_TYPE_MDDI, SHLCDC_DEV_PWR_ON); } #endif enable_irq(INT_MDDI_PRI); #ifdef CONFIG_SHLCDC_BOARD pm_qos_update_requirement(PM_QOS_SYSTEM_BUS_FREQ, "mddi", 117000); #endif clk_enable(mddi_clk); mddi_host_reg_out(PAD_CTL, mddi_pad_ctrl); if (mddi_host_timer.function) mddi_host_timer_service(0); return 0; }
static int mddi_resume(struct platform_device *pdev) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (!mddi_is_in_suspend) return 0; mddi_is_in_suspend = 0; if (mddi_power_locked) return 0; enable_irq(INT_MDDI_PRI); pmdh_clk_enable(); mddi_host_reg_out(PAD_CTL, mddi_pad_ctrl); return 0; }
void mddi_disable(int lock) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (mddi_power_locked) return; if (lock) mddi_power_locked = 1; pmdh_clk_enable(); mddi_pad_ctrl = mddi_host_reg_in(PAD_CTL); mddi_host_reg_out(PAD_CTL, 0x0); pmdh_clk_disable(); if (mddi_pdata && mddi_pdata->mddi_power_save) mddi_pdata->mddi_power_save(0); }
static int mddi_suspend(struct platform_device *pdev, pm_message_t state) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (mddi_is_in_suspend) return 0; mddi_is_in_suspend = 1; if (mddi_power_locked) return 0; pmdh_clk_enable(); mddi_pad_ctrl = mddi_host_reg_in(PAD_CTL); mddi_host_reg_out(PAD_CTL, 0x0); pmdh_clk_disable(); return 0; }
void mddi_disable(int lock) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (mddi_power_locked) return; if (lock) mddi_power_locked = 1; pmdh_clk_enable(); mddi_pad_ctrl = mddi_host_reg_in(PAD_CTL); mddi_host_reg_out(PAD_CTL, 0x0); if (clk_set_min_rate(mddi_clk, 0) < 0) printk(KERN_ERR "%s: clk_set_min_rate failed\n", __func__); pmdh_clk_disable(); if (mddi_pdata && mddi_pdata->mddi_power_save) mddi_pdata->mddi_power_save(0); }
void mddi_disable(int lock) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (mddi_power_locked) return; if (lock) mddi_power_locked = 1; if (mddi_host_timer.function) del_timer_sync(&mddi_host_timer); mddi_pad_ctrl = mddi_host_reg_in(PAD_CTL); mddi_host_reg_out(PAD_CTL, 0x0); if (clk_set_min_rate(mddi_clk, 0) < 0) printk(KERN_ERR "%s: clk_set_min_rate failed\n", __func__); clk_disable(mddi_clk); if (mddi_pclk) clk_disable(mddi_pclk); #ifdef CONFIG_SHLCDC_BOARD pm_qos_update_requirement(PM_QOS_SYSTEM_BUS_FREQ, "mddi", PM_QOS_DEFAULT_VALUE); #endif disable_irq(INT_MDDI_PRI); if (mddi_pdata && mddi_pdata->mddi_power_save) mddi_pdata->mddi_power_save(0); #ifdef CONFIG_SHLCDC_BOARD if (no_set_power_flag == FALSE) { shlcdc_api_set_power_mode(SHLCDC_DEV_TYPE_MDDI, SHLCDC_DEV_PWR_OFF); } #endif }
static int mddi_suspend(struct platform_device *pdev, pm_message_t state) { mddi_host_type host_idx = MDDI_HOST_PRIM; if (mddi_is_in_suspend) return 0; mddi_is_in_suspend = 1; if (mddi_power_locked) return 0; pmdh_clk_enable(); mddi_pad_ctrl = mddi_host_reg_in(PAD_CTL); mddi_host_reg_out(PAD_CTL, 0x0); if (clk_set_min_rate(mddi_clk, 0) < 0) printk(KERN_ERR "%s: clk_set_min_rate failed\n", __func__); pmdh_clk_disable(); return 0; }