Message ID | 20220606044720.945964-2-hsinyi@chromium.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add a panel API to return panel orientation | expand |
Hi, On Sun, Jun 5, 2022 at 9:47 PM Hsin-Yi Wang <hsinyi@chromium.org> wrote: > > Panels usually call drm_connector_set_panel_orientation(), which is > later than drm/kms driver calling drm_dev_register(). This leads to a > WARN(). > > The orientation property is known earlier. For example, some panels > parse the property through device tree during probe. > > Add an API to return the property from panel to drm/kms driver, so the > drivers are able to call drm_connector_set_panel_orientation() before > drm_dev_register(). > > Suggested-by: Hans de Goede <hdegoede@redhat.com> > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Hans de Goede <hdegoede@redhat.com> > --- > v2->v3: no change > --- > drivers/gpu/drm/drm_panel.c | 8 ++++++++ > include/drm/drm_panel.h | 10 ++++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > index f634371c717a..4a512ca80673 100644 > --- a/drivers/gpu/drm/drm_panel.c > +++ b/drivers/gpu/drm/drm_panel.c > @@ -223,6 +223,14 @@ int drm_panel_get_modes(struct drm_panel *panel, > } > EXPORT_SYMBOL(drm_panel_get_modes); > > +enum drm_panel_orientation drm_panel_get_orientation(struct drm_panel *panel) > +{ > + if (panel && panel->funcs && panel->funcs->get_orientation) > + return panel->funcs->get_orientation(panel); > + > + return DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > +} > +EXPORT_SYMBOL(drm_panel_get_orientation); > #ifdef CONFIG_OF nit: there used to be a blank line before the #ifdef but there no longer is after your patch. Other than that... Reviewed-by: Douglas Anderson <dianders@chromium.org>
On Mon, Jun 6, 2022 at 10:21 PM Doug Anderson <dianders@chromium.org> wrote: > > Hi, > > On Sun, Jun 5, 2022 at 9:47 PM Hsin-Yi Wang <hsinyi@chromium.org> wrote: > > > > Panels usually call drm_connector_set_panel_orientation(), which is > > later than drm/kms driver calling drm_dev_register(). This leads to a > > WARN(). > > > > The orientation property is known earlier. For example, some panels > > parse the property through device tree during probe. > > > > Add an API to return the property from panel to drm/kms driver, so the > > drivers are able to call drm_connector_set_panel_orientation() before > > drm_dev_register(). > > > > Suggested-by: Hans de Goede <hdegoede@redhat.com> > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > > Reviewed-by: Hans de Goede <hdegoede@redhat.com> > > --- > > v2->v3: no change > > --- > > drivers/gpu/drm/drm_panel.c | 8 ++++++++ > > include/drm/drm_panel.h | 10 ++++++++++ > > 2 files changed, 18 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > > index f634371c717a..4a512ca80673 100644 > > --- a/drivers/gpu/drm/drm_panel.c > > +++ b/drivers/gpu/drm/drm_panel.c > > @@ -223,6 +223,14 @@ int drm_panel_get_modes(struct drm_panel *panel, > > } > > EXPORT_SYMBOL(drm_panel_get_modes); > > > > +enum drm_panel_orientation drm_panel_get_orientation(struct drm_panel *panel) > > +{ > > + if (panel && panel->funcs && panel->funcs->get_orientation) > > + return panel->funcs->get_orientation(panel); > > + > > + return DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > > +} > > +EXPORT_SYMBOL(drm_panel_get_orientation); > > #ifdef CONFIG_OF > > nit: there used to be a blank line before the #ifdef but there no > longer is after your patch. > Added in v4. > Other than that... > > Reviewed-by: Douglas Anderson <dianders@chromium.org>
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index f634371c717a..4a512ca80673 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -223,6 +223,14 @@ int drm_panel_get_modes(struct drm_panel *panel, } EXPORT_SYMBOL(drm_panel_get_modes); +enum drm_panel_orientation drm_panel_get_orientation(struct drm_panel *panel) +{ + if (panel && panel->funcs && panel->funcs->get_orientation) + return panel->funcs->get_orientation(panel); + + return DRM_MODE_PANEL_ORIENTATION_UNKNOWN; +} +EXPORT_SYMBOL(drm_panel_get_orientation); #ifdef CONFIG_OF /** * of_drm_find_panel - look up a panel using a device tree node diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 1ba2d424a53f..d1bd3be4bbdf 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -133,6 +133,15 @@ struct drm_panel_funcs { * Allows panels to create panels-specific debugfs files. */ void (*debugfs_init)(struct drm_panel *panel, struct dentry *root); + + /** + * @get_orientation: + * + * Return the panel orientation set by device tree or EDID. + * + * This function is optional. + */ + enum drm_panel_orientation (*get_orientation)(struct drm_panel *panel); }; /** @@ -195,6 +204,7 @@ int drm_panel_enable(struct drm_panel *panel); int drm_panel_disable(struct drm_panel *panel); int drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector); +enum drm_panel_orientation drm_panel_get_orientation(struct drm_panel *panel); #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) struct drm_panel *of_drm_find_panel(const struct device_node *np);