static void mdfld_dsi_dpi_shut_down(struct mdfld_dsi_dpi_output *output, int pipe) { struct drm_device *dev = output->dev; /*if output is on, or mode setting didn't happen, ignore this*/ if ((!output->panel_on) || output->first_boot) { output->first_boot = 0; return; } /* Wait for dpi fifo to empty */ mdfld_wait_for_DPI_CTRL_FIFO(dev, pipe); /* Clear the special packet interrupt bit if set */ if (REG_READ(MIPI_INTR_STAT_REG(pipe)) & DSI_INTR_STATE_SPL_PKG_SENT) REG_WRITE(MIPI_INTR_STAT_REG(pipe), DSI_INTR_STATE_SPL_PKG_SENT); if (REG_READ(MIPI_DPI_CONTROL_REG(pipe)) == DSI_DPI_CTRL_HS_SHUTDOWN) goto shutdown_out; REG_WRITE(MIPI_DPI_CONTROL_REG(pipe), DSI_DPI_CTRL_HS_SHUTDOWN); shutdown_out: output->panel_on = 0; output->first_boot = 0; /* FIXME the following is disabled to WA the X slow start issue for TMD panel if (pipe == 2) dev_priv->dpi_panel_on2 = false; else if (pipe == 0) dev_priv->dpi_panel_on = false; */ }
static void mdfld_dsi_dpi_shut_down(struct mdfld_dsi_dpi_output *output, int pipe) { struct drm_device *dev = output->dev; u32 reg_offset = 0; /*if output is on, or mode setting didn't happen, ignore this*/ if((!output->panel_on) || output->first_boot) { output->first_boot = 0; return; } if(pipe) reg_offset = MIPIC_REG_OFFSET; /* Wait for dpi fifo to empty */ mdfld_wait_for_DPI_CTRL_FIFO(dev, pipe); /* Clear the special packet interrupt bit if set */ if(REG_READ(MIPIA_INTR_STAT_REG + reg_offset) & DSI_INTR_STATE_SPL_PKG_SENT) { REG_WRITE((MIPIA_INTR_STAT_REG + reg_offset), DSI_INTR_STATE_SPL_PKG_SENT); } if(REG_READ(MIPIA_DPI_CONTROL_REG + reg_offset) == DSI_DPI_CTRL_HS_SHUTDOWN) { dev_warn(dev->dev, "try to send the same package again, abort!"); goto shutdown_out; } REG_WRITE((MIPIA_DPI_CONTROL_REG + reg_offset), DSI_DPI_CTRL_HS_SHUTDOWN); shutdown_out: output->panel_on = 0; output->first_boot = 0; /* FIXME the following is disabled to WA the X slow start issue for TMD panel */ /* if(pipe == 2) */ /* dev_priv->dpi_panel_on2 = false; */ /* else if (pipe == 0) */ /* dev_priv->dpi_panel_on = false; */ /* #ifdef CONFIG_PM_RUNTIME*/ /* if (drm_psb_ospm && !enable_gfx_rtpm) { */ /* pm_runtime_allow(&gpDrmDevice->pdev->dev); */ /* schedule_delayed_work(&dev_priv->rtpm_work, 30 * 1000); */ /* } */ /*if (enable_gfx_rtpm) */ /* pm_schedule_suspend(&dev->pdev->dev, gfxrtdelay); */ /* #endif */ }