struct panel_funcs *p_funcs = dbi_output->p_funcs;
struct mdfld_dsi_hw_registers *regs = NULL;
struct mdfld_dsi_hw_context *ctx = NULL;
- struct drm_device *dev = encoder->dev;
- struct drm_psb_private *dev_priv = dev->dev_private;
int err = 0;
- if (!dev_priv->dsi_init_done)
- return 0;
-
if (!dsi_config)
return -EINVAL;
mdfld_dsi_encoder_get_config(dsi_encoder);
struct panel_funcs *p_funcs = dbi_output->p_funcs;
struct mdfld_dsi_hw_context *ctx;
- struct drm_device *dev = encoder->dev;
- struct drm_psb_private *dev_priv = dev->dev_private;
int err = 0;
- if (!dev_priv->dsi_init_done)
- return 0;
-
if (!dsi_config)
return -EINVAL;
rect.height = 480;
#endif
+ if (dbi_output->channel_num == 1) {
+ dev_priv->dsr_fb_update |= MDFLD_DSR_2D_3D_2;
+#ifdef CONFIG_MDFLD_DSI_DPU
+ /* if dpu enabled report a fullscreen damage */
+ mdfld_dbi_dpu_report_damage(dev, MDFLD_PLANEC, &rect);
+#endif
+ } else {
+ dev_priv->dsr_fb_update |= MDFLD_DSR_2D_3D_0;
+
+#ifdef CONFIG_MDFLD_DSI_DPU
+ mdfld_dbi_dpu_report_damage(dev, MDFLD_PLANEA, &rect);
+ /* start dpu timer */
+ if (dev_priv->platform_rev_id == MDFLD_PNW_A0)
+ mdfld_dbi_dpu_timer_start(dev_priv->dbi_dpu_info);
+#else
+ if (dev_priv->platform_rev_id == MDFLD_PNW_A0)
+ mdfld_dbi_dsr_timer_start(dev_priv->dbi_dsr_info);
+#endif
+ }
+
dbi_output->mode_flags |= MODE_SETTING_ENCODER_DONE;
}
if (bdispoff)
mdfld_dsi_dbi_exit_dsr(dev, MDFLD_DSR_2D_3D, 0, 0);
- mdfld_auo_dsi_dbi_set_power(encoder, true);
+ mdfld_dsi_dbi_set_power(encoder, true);
if (gbgfxsuspended)
gbgfxsuspended = false;
* turn rpm on since we still have a lot of CRTC turnning
* on work to do.
*/
- mdfld_auo_dsi_dbi_set_power(encoder, false);
+ mdfld_dsi_dbi_set_power(encoder, false);
bdispoff = true;
gbdispstatus = false;
}
void mdfld_auo_dsi_dbi_save(struct drm_encoder *encoder)
{
- struct drm_device *dev = encoder->dev;
- struct drm_psb_private *dev_priv = dev->dev_private;
-
if (!encoder)
return;
- if (!dev_priv->dsi_init_done)
- return;
-
/*turn off*/
mdfld_auo_dsi_dbi_set_power(encoder, false);
}
{
struct mdfld_dsi_encoder *dsi_encoder = NULL;
struct mdfld_dsi_config *dsi_config = NULL;
- struct drm_device *dev = encoder->dev;
- struct drm_psb_private *dev_priv = dev->dev_private;
if (!encoder)
return;
- if (!dev_priv->dsi_init_done)
- return;
-
dsi_encoder = MDFLD_DSI_ENCODER(encoder);
dsi_config = mdfld_dsi_encoder_get_config(dsi_encoder);
struct mdfld_dsi_pkg_sender *sender =
mdfld_dsi_encoder_get_pkg_sender(&dbi_output->base);
struct drm_device *dev = dbi_output->dev;
- struct drm_psb_private *dev_priv = dev->dev_private;
struct drm_crtc *crtc = dbi_output->base.base.crtc;
struct psb_intel_crtc *psb_crtc =
(crtc) ? to_psb_intel_crtc(crtc) : NULL;
u32 dsplinoff_reg = DSPALINOFF;
u32 dspsurf_reg = DSPASURF;
- if (!dev_priv->dsi_init_done)
- return;
-
/* if mode setting on-going, back off */
if ((dbi_output->mode_flags & MODE_SETTING_ON_GOING) ||
(psb_crtc &&
}
b_gpio_required[dsi_config->pipe] = true;
-
- goto fun_exit;
}
if (b_gpio_required[dsi_config->pipe]) {
}
/*init DSI controller*/
- if (p_funcs->dsi_controller_init) {
- if (get_panel_type(dev, pipe) == AUO_SC1_CMD)
- p_funcs->dsi_controller_init(dsi_config, pipe, false);
- else
- p_funcs->dsi_controller_init(dsi_config, pipe, true);
- }
+ if (p_funcs->dsi_controller_init)
+ p_funcs->dsi_controller_init(dsi_config, pipe, true);
+
if (dsi_connector->status == connector_status_connected) {
if (pipe == 0)
dev_priv->panel_desc |= DISPLAY_A;
dev_priv->dsr_fb_update = 0;
dev_priv->b_dsr_enable = false;
- dev_priv->b_async_flip_enable = false;
+ dev_priv->b_async_flip_enable = true;
dev_priv->exit_idle = mdfld_dsi_dbi_exit_dsr;
dev_priv->async_flip_update_fb = mdfld_dsi_dbi_async_flip_fb_update;
dev_priv->async_check_fifo_empty = mdfld_dsi_dbi_async_check_fifo_empty;