Message ID | 20201105120333.947408-33-tomi.valkeinen@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Convert DSI code to use drm_mipi_dsi and drm_panel | expand |
Hi Tomi and Sebastian, Thank you for the patch. On Thu, Nov 05, 2020 at 02:03:09PM +0200, Tomi Valkeinen wrote: > From: Sebastian Reichel <sebastian.reichel@collabora.com> > > Due to previous changes the DSI encoder gets the capabilities > via DSI client's mode_flags and no longer needs the omapdss > specific caps. The core code now checks if the DSI encoder > is actually configured into command mode instead of just checking > the panel capabilities. > > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > --- > drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 3 --- > drivers/gpu/drm/omapdrm/dss/dsi.c | 8 ++++++++ > drivers/gpu/drm/omapdrm/dss/omapdss.h | 8 +------- > drivers/gpu/drm/omapdrm/omap_crtc.c | 17 ++++++++--------- > 4 files changed, 17 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > index 45d417870498..d9b3444b4faf 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > @@ -599,9 +599,6 @@ static int dsicm_probe(struct mipi_dsi_device *dsi) > dssdev->of_port = 0; > dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > - dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE | > - OMAP_DSS_DISPLAY_CAP_TEAR_ELIM; > - > omapdss_display_init(dssdev); > omapdss_device_register(dssdev); > > diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c > index 0aa0d21cf896..620cef8bb1f2 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dsi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c > @@ -4727,6 +4727,13 @@ static bool dsi_vm_calc(struct dsi_data *dsi, > dsi_vm_calc_pll_cb, ctx); > } > > +static bool dsi_is_video_mode(struct omap_dss_device *dssdev) > +{ > + struct dsi_data *dsi = to_dsi_data(dssdev); > + > + return (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE); No need for parentheses. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > +} > + > static int dsi_set_config(struct omap_dss_device *dssdev, > const struct omap_dss_dsi_config *config) > { > @@ -4947,6 +4954,7 @@ static const struct omap_dss_device_ops dsi_ops = { > .disable_video_output = dsi_disable_video_output, > > .update = dsi_update_all, > + .is_video_mode = dsi_is_video_mode, > }, > }; > > diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h > index de4c779c358a..4200611525d5 100644 > --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h > +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h > @@ -123,11 +123,6 @@ enum omap_dss_dsi_mode { > OMAP_DSS_DSI_VIDEO_MODE, > }; > > -enum omap_display_caps { > - OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE = 1 << 0, > - OMAP_DSS_DISPLAY_CAP_TEAR_ELIM = 1 << 1, > -}; > - > enum omap_dss_display_state { > OMAP_DSS_DISPLAY_DISABLED = 0, > OMAP_DSS_DISPLAY_ACTIVE, > @@ -282,6 +277,7 @@ struct omap_dss_writeback_info { > > struct omapdss_dsi_ops { > int (*update)(struct omap_dss_device *dssdev); > + bool (*is_video_mode)(struct omap_dss_device *dssdev); > > /* legacy API used by omapdss panels */ > int (*set_config)(struct omap_dss_device *dssdev, > @@ -354,8 +350,6 @@ struct omap_dss_device { > unsigned long ops_flags; > u32 bus_flags; > > - enum omap_display_caps caps; > - > enum omap_dss_display_state state; > > /* OMAP DSS output specific fields */ > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c > index 3068e4fffa16..f6b968060cf0 100644 > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c > @@ -496,8 +496,7 @@ static enum drm_mode_status omap_crtc_mode_valid(struct drm_crtc *crtc, > * valid DISPC mode. DSI will calculate and configure the > * proper DISPC mode later. > */ > - if (omap_crtc->pipe->output->next == NULL || > - omap_crtc->pipe->output->next->type != OMAP_DISPLAY_TYPE_DSI) { > + if (omap_crtc->pipe->output->type != OMAP_DISPLAY_TYPE_DSI) { > r = priv->dispc_ops->mgr_check_timings(priv->dispc, > omap_crtc->channel, > &vm); > @@ -549,17 +548,17 @@ static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc) > static bool omap_crtc_is_manually_updated(struct drm_crtc *crtc) > { > struct omap_crtc *omap_crtc = to_omap_crtc(crtc); > - struct omap_dss_device *display = omap_crtc->pipe->output->next; > + struct omap_dss_device *dssdev = omap_crtc->pipe->output; > > - if (!display) > + if (dssdev->type != OMAP_DISPLAY_TYPE_DSI || > + !dssdev->ops->dsi.is_video_mode) > return false; > > - if (display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { > - DBG("detected manually updated display!"); > - return true; > - } > + if (dssdev->ops->dsi.is_video_mode(dssdev)) > + return false; > > - return false; > + DBG("detected manually updated display!"); > + return true; > } > > static int omap_crtc_atomic_check(struct drm_crtc *crtc,
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c index 45d417870498..d9b3444b4faf 100644 --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c @@ -599,9 +599,6 @@ static int dsicm_probe(struct mipi_dsi_device *dsi) dssdev->of_port = 0; dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; - dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE | - OMAP_DSS_DISPLAY_CAP_TEAR_ELIM; - omapdss_display_init(dssdev); omapdss_device_register(dssdev); diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index 0aa0d21cf896..620cef8bb1f2 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -4727,6 +4727,13 @@ static bool dsi_vm_calc(struct dsi_data *dsi, dsi_vm_calc_pll_cb, ctx); } +static bool dsi_is_video_mode(struct omap_dss_device *dssdev) +{ + struct dsi_data *dsi = to_dsi_data(dssdev); + + return (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE); +} + static int dsi_set_config(struct omap_dss_device *dssdev, const struct omap_dss_dsi_config *config) { @@ -4947,6 +4954,7 @@ static const struct omap_dss_device_ops dsi_ops = { .disable_video_output = dsi_disable_video_output, .update = dsi_update_all, + .is_video_mode = dsi_is_video_mode, }, }; diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h index de4c779c358a..4200611525d5 100644 --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h @@ -123,11 +123,6 @@ enum omap_dss_dsi_mode { OMAP_DSS_DSI_VIDEO_MODE, }; -enum omap_display_caps { - OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE = 1 << 0, - OMAP_DSS_DISPLAY_CAP_TEAR_ELIM = 1 << 1, -}; - enum omap_dss_display_state { OMAP_DSS_DISPLAY_DISABLED = 0, OMAP_DSS_DISPLAY_ACTIVE, @@ -282,6 +277,7 @@ struct omap_dss_writeback_info { struct omapdss_dsi_ops { int (*update)(struct omap_dss_device *dssdev); + bool (*is_video_mode)(struct omap_dss_device *dssdev); /* legacy API used by omapdss panels */ int (*set_config)(struct omap_dss_device *dssdev, @@ -354,8 +350,6 @@ struct omap_dss_device { unsigned long ops_flags; u32 bus_flags; - enum omap_display_caps caps; - enum omap_dss_display_state state; /* OMAP DSS output specific fields */ diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c index 3068e4fffa16..f6b968060cf0 100644 --- a/drivers/gpu/drm/omapdrm/omap_crtc.c +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c @@ -496,8 +496,7 @@ static enum drm_mode_status omap_crtc_mode_valid(struct drm_crtc *crtc, * valid DISPC mode. DSI will calculate and configure the * proper DISPC mode later. */ - if (omap_crtc->pipe->output->next == NULL || - omap_crtc->pipe->output->next->type != OMAP_DISPLAY_TYPE_DSI) { + if (omap_crtc->pipe->output->type != OMAP_DISPLAY_TYPE_DSI) { r = priv->dispc_ops->mgr_check_timings(priv->dispc, omap_crtc->channel, &vm); @@ -549,17 +548,17 @@ static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc) static bool omap_crtc_is_manually_updated(struct drm_crtc *crtc) { struct omap_crtc *omap_crtc = to_omap_crtc(crtc); - struct omap_dss_device *display = omap_crtc->pipe->output->next; + struct omap_dss_device *dssdev = omap_crtc->pipe->output; - if (!display) + if (dssdev->type != OMAP_DISPLAY_TYPE_DSI || + !dssdev->ops->dsi.is_video_mode) return false; - if (display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { - DBG("detected manually updated display!"); - return true; - } + if (dssdev->ops->dsi.is_video_mode(dssdev)) + return false; - return false; + DBG("detected manually updated display!"); + return true; } static int omap_crtc_atomic_check(struct drm_crtc *crtc,