Hi Tomi and Sebastian, Thank you for the patch. On Thu, Nov 05, 2020 at 02:03:26PM +0200, Tomi Valkeinen wrote: > From: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> > > Move dsi_ops into the main structure, since all other ops > are gone. Instead of checking the device type we can simply > check if dsi_ops are set. > > Signed-off-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/omapdrm/dss/dsi.c | 10 ++++------ > drivers/gpu/drm/omapdrm/dss/omapdss.h | 6 +----- > drivers/gpu/drm/omapdrm/omap_crtc.c | 16 ++++------------ > 3 files changed, 9 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c > index bbcdb62e1571..f47d7e3bb631 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dsi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c > @@ -5011,11 +5011,9 @@ static int dsi_get_clocks(struct dsi_data *dsi) > return 0; > } > > -static const struct omap_dss_device_ops dsi_ops = { > - .dsi = { > - .update = dsi_update_all, > - .is_video_mode = dsi_is_video_mode, > - }, > +static const struct omapdss_dsi_ops dsi_ops = { > + .update = dsi_update_all, > + .is_video_mode = dsi_is_video_mode, > }; > > static irqreturn_t omap_dsi_te_irq_handler(int irq, void *dev_id) > @@ -5450,7 +5448,7 @@ static int dsi_init_output(struct dsi_data *dsi) > out->type = OMAP_DISPLAY_TYPE_DSI; > out->name = dsi->module_id == 0 ? "dsi.0" : "dsi.1"; > out->dispc_channel = dsi_get_channel(dsi); > - out->ops = &dsi_ops; > + out->dsi_ops = &dsi_ops; > out->owner = THIS_MODULE; > out->of_port = 0; > out->bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE > diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h > index c2199c4946ec..a1236b8ef7ea 100644 > --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h > +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h > @@ -275,10 +275,6 @@ struct omapdss_dsi_ops { > bool (*is_video_mode)(struct omap_dss_device *dssdev); > }; > > -struct omap_dss_device_ops { > - const struct omapdss_dsi_ops dsi; > -}; > - > struct omap_dss_device { > struct device *dev; > > @@ -300,7 +296,7 @@ struct omap_dss_device { > > const char *name; > > - const struct omap_dss_device_ops *ops; > + const struct omapdss_dsi_ops *dsi_ops; > u32 bus_flags; > > /* OMAP DSS output specific fields */ > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c > index f6b968060cf0..5ab557c477ef 100644 > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c > @@ -366,17 +366,10 @@ static void omap_crtc_manual_display_update(struct work_struct *data) > struct drm_device *dev = omap_crtc->base.dev; > int ret; > > - if (!dssdev) { > - dev_err_once(dev->dev, "missing display dssdev!"); > + if (!dssdev || !dssdev->dsi_ops || !dssdev->dsi_ops->update) > return; > - } > - > - if (dssdev->type != OMAP_DISPLAY_TYPE_DSI || !dssdev->ops->dsi.update) { > - dev_err_once(dev->dev, "no DSI update callback found!"); > - return; > - } > > - ret = dssdev->ops->dsi.update(dssdev); > + ret = dssdev->dsi_ops->update(dssdev); > if (ret < 0) { > spin_lock_irq(&dev->event_lock); > omap_crtc->pending = false; > @@ -550,11 +543,10 @@ static bool omap_crtc_is_manually_updated(struct drm_crtc *crtc) > struct omap_crtc *omap_crtc = to_omap_crtc(crtc); > struct omap_dss_device *dssdev = omap_crtc->pipe->output; > > - if (dssdev->type != OMAP_DISPLAY_TYPE_DSI || > - !dssdev->ops->dsi.is_video_mode) > + if (!dssdev || !dssdev->dsi_ops || !dssdev->dsi_ops->is_video_mode) > return false; > > - if (dssdev->ops->dsi.is_video_mode(dssdev)) > + if (dssdev->dsi_ops->is_video_mode(dssdev)) > return false; > > DBG("detected manually updated display!"); -- Regards, Laurent Pinchart