Hi Sam, thanks for pointing out the potential conflict. On Tue, Jul 23, 2019 at 2:19 AM Sam Ravnborg <sam@xxxxxxxxxxxx> wrote: > > Hi Derek. > > On Tue, Jul 09, 2019 at 07:16:57PM -0700, Derek Basehore wrote: > > Devicetree systems can set panel orientation via a panel binding, but > > there's no way, as is, to propagate this setting to the connector, > > where the property need to be added. > > To address this, this patch sets orientation, as well as other fixed > > values for the panel, in the drm_panel_attach function. These values > > are stored from probe in the drm_panel struct. > > This approch seems to conflict with work done by Laurent where the > ownership/creation of the connector will be moved to the display controller. > > If I understand it correct then there should not be a 1:1 relation > between a panel and a connector anymore. Can you point me to this work? I still see the lone drm_display_info struct in the drm_connector struct. This seems to indicate that the kernel still assume one display per connector. > > We should not try to work in two different directions with this. > Laurent, can you comment on this? > > If we move forard with this patch, then all fields in drm_panel needs > kernel-doc - preferably inline. > > Sam > > > > > Signed-off-by: Derek Basehore <dbasehore@xxxxxxxxxxxx> > > --- > > drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ > > include/drm/drm_panel.h | 14 ++++++++++++++ > > 2 files changed, 42 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > > index 169bab54d52d..ca01095470a9 100644 > > --- a/drivers/gpu/drm/drm_panel.c > > +++ b/drivers/gpu/drm/drm_panel.c > > @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); > > */ > > int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) > > { > > + struct drm_display_info *info; > > + > > if (panel->connector) > > return -EBUSY; > > > > panel->connector = connector; > > panel->drm = connector->dev; > > + info = &connector->display_info; > > + info->width_mm = panel->width_mm; > > + info->height_mm = panel->height_mm; > > + info->bpc = panel->bpc; > > + info->panel_orientation = panel->orientation; > > + info->bus_flags = panel->bus_flags; > > + if (panel->bus_formats) > > + drm_display_info_set_bus_formats(&connector->display_info, > > + panel->bus_formats, > > + panel->num_bus_formats); > > > > return 0; > > } > > @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); > > */ > > int drm_panel_detach(struct drm_panel *panel) > > { > > + struct drm_display_info *info; > > + > > + if (!panel->connector) > > + goto out; > > + > > + info = &panel->connector->display_info; > > + info->width_mm = 0; > > + info->height_mm = 0; > > + info->bpc = 0; > > + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > > + info->bus_flags = 0; > > + kfree(info->bus_formats); > > + info->bus_formats = NULL; > > + info->num_bus_formats = 0; > > + > > +out: > > panel->connector = NULL; > > panel->drm = NULL; > > > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > > index fc7da55f41d9..a6a881b987dd 100644 > > --- a/include/drm/drm_panel.h > > +++ b/include/drm/drm_panel.h > > @@ -39,6 +39,8 @@ enum drm_panel_orientation; > > * struct drm_panel_funcs - perform operations on a given panel > > * @disable: disable panel (turn off back light, etc.) > > * @unprepare: turn off panel > > + * @detach: detach panel->connector (clear internal state, etc.) > > + * @attach: attach panel->connector (update internal state, etc.) > > * @prepare: turn on panel and perform set up > > * @enable: enable panel (turn on back light, etc.) > > * @get_modes: add modes to the connector that the panel is attached to and > > @@ -95,6 +97,18 @@ struct drm_panel { > > > > const struct drm_panel_funcs *funcs; > > > > + /* > > + * panel information to be set in the connector when the panel is > > + * attached. > > + */ > > + unsigned int width_mm; > > + unsigned int height_mm; > > + unsigned int bpc; > > + int orientation; > > + const u32 *bus_formats; > > + unsigned int num_bus_formats; > > + u32 bus_flags; > > + > > struct list_head list; > > }; > > > > -- > > 2.22.0.410.gd8fdbe21b5-goog > > > > _______________________________________________ > > dri-devel mailing list > > dri-devel@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel