From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> To: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: linux-media@vger.kernel.org, Tomi Valkeinen <tomi.valkeinen@ti.com>, dri-devel@lists.freedesktop.org, linux-omap@vger.kernel.org, Sekhar Nori <nsekhar@ti.com>, Tony Lindgren <tony@atomide.com> Subject: Re: [PATCH 1/5] drm: drm_bridge: add cec_init/exit bridge ops Date: Fri, 19 Feb 2021 14:02:17 +0200 [thread overview] Message-ID: <YC+oyavcOV0uFJUb@pendragon.ideasonboard.com> (raw) In-Reply-To: <20210211103703.444625-2-hverkuil-cisco@xs4all.nl> Hi Hans, Thank you for the patch. On Thu, Feb 11, 2021 at 11:36:59AM +0100, Hans Verkuil wrote: > Add bridge cec_init/exit ops. These ops will be responsible for > creating and destroying the CEC adapter for the bridge that supports > CEC. > > Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> > --- > drivers/gpu/drm/drm_bridge_connector.c | 23 +++++++++++++++++++ > include/drm/drm_bridge.h | 31 ++++++++++++++++++++++++++ > 2 files changed, 54 insertions(+) > > diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c > index 791379816837..2ff90f5e468c 100644 > --- a/drivers/gpu/drm/drm_bridge_connector.c > +++ b/drivers/gpu/drm/drm_bridge_connector.c > @@ -84,6 +84,13 @@ struct drm_bridge_connector { > * connector modes detection, if any (see &DRM_BRIDGE_OP_MODES). > */ > struct drm_bridge *bridge_modes; > + /** > + * @bridge_cec: > + * > + * The last bridge in the chain (closest to the connector) that provides > + * cec adapter support, if any (see &DRM_BRIDGE_OP_CEC). > + */ > + struct drm_bridge *bridge_cec; > }; > > #define to_drm_bridge_connector(x) \ > @@ -204,6 +211,11 @@ static void drm_bridge_connector_destroy(struct drm_connector *connector) > struct drm_bridge_connector *bridge_connector = > to_drm_bridge_connector(connector); > > + if (bridge_connector->bridge_cec) { > + struct drm_bridge *cec = bridge_connector->bridge_cec; > + > + cec->funcs->cec_exit(cec); > + } > if (bridge_connector->bridge_hpd) { > struct drm_bridge *hpd = bridge_connector->bridge_hpd; > > @@ -352,6 +364,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > bridge_connector->bridge_detect = bridge; > if (bridge->ops & DRM_BRIDGE_OP_MODES) > bridge_connector->bridge_modes = bridge; > + if (bridge->ops & DRM_BRIDGE_OP_CEC) > + bridge_connector->bridge_cec = bridge; > > if (!drm_bridge_get_next_bridge(bridge)) > connector_type = bridge->type; > @@ -374,6 +388,15 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > else if (bridge_connector->bridge_detect) > connector->polled = DRM_CONNECTOR_POLL_CONNECT > | DRM_CONNECTOR_POLL_DISCONNECT; > + if (bridge_connector->bridge_cec) { > + struct drm_bridge *bridge = bridge_connector->bridge_cec; > + int ret = bridge->funcs->cec_init(bridge, connector); > + > + if (ret) { > + drm_bridge_connector_destroy(connector); > + return ERR_PTR(ret); > + } > + } > > return connector; > } > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 2195daa289d2..4c83c2657e87 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -629,6 +629,30 @@ struct drm_bridge_funcs { > * the DRM_BRIDGE_OP_HPD flag in their &drm_bridge->ops. > */ > void (*hpd_disable)(struct drm_bridge *bridge); > + > + /** > + * @cec_init: > + * > + * Initialize the CEC adapter. > + * > + * This callback is optional and shall only be implemented by bridges > + * that support a CEC adapter. Bridges that implement it shall also > + * implement the @cec_exit callback and set the DRM_BRIDGE_OP_CEC flag > + * in their &drm_bridge->ops. > + */ > + int (*cec_init)(struct drm_bridge *bridge, struct drm_connector *conn); > + > + /** > + * @cec_exit: > + * > + * Terminate the CEC adapter. > + * > + * This callback is optional and shall only be implemented by bridges > + * that support a CEC adapter. Bridges that implement it shall also > + * implement the @cec_init callback and set the DRM_BRIDGE_OP_CEC flag > + * in their &drm_bridge->ops. > + */ > + void (*cec_exit)(struct drm_bridge *bridge); These are very ad-hoc operations. Would it make sense to have something that could also be reused for other type of intiialization and cleanup that require access to the drm_connector ? > }; > > /** > @@ -698,6 +722,13 @@ enum drm_bridge_ops { > * this flag shall implement the &drm_bridge_funcs->get_modes callback. > */ > DRM_BRIDGE_OP_MODES = BIT(3), > + /** > + * @DRM_BRIDGE_OP_CEC: The bridge supports a CEC adapter. > + * Bridges that set this flag shall implement the > + * &drm_bridge_funcs->cec_init and &drm_bridge_funcs->cec_exit > + * callbacks. > + */ > + DRM_BRIDGE_OP_CEC = BIT(4), > }; > > /** -- Regards, Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> To: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: Tony Lindgren <tony@atomide.com>, Sekhar Nori <nsekhar@ti.com>, dri-devel@lists.freedesktop.org, Tomi Valkeinen <tomi.valkeinen@ti.com>, linux-omap@vger.kernel.org, linux-media@vger.kernel.org Subject: Re: [PATCH 1/5] drm: drm_bridge: add cec_init/exit bridge ops Date: Fri, 19 Feb 2021 14:02:17 +0200 [thread overview] Message-ID: <YC+oyavcOV0uFJUb@pendragon.ideasonboard.com> (raw) In-Reply-To: <20210211103703.444625-2-hverkuil-cisco@xs4all.nl> Hi Hans, Thank you for the patch. On Thu, Feb 11, 2021 at 11:36:59AM +0100, Hans Verkuil wrote: > Add bridge cec_init/exit ops. These ops will be responsible for > creating and destroying the CEC adapter for the bridge that supports > CEC. > > Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> > --- > drivers/gpu/drm/drm_bridge_connector.c | 23 +++++++++++++++++++ > include/drm/drm_bridge.h | 31 ++++++++++++++++++++++++++ > 2 files changed, 54 insertions(+) > > diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c > index 791379816837..2ff90f5e468c 100644 > --- a/drivers/gpu/drm/drm_bridge_connector.c > +++ b/drivers/gpu/drm/drm_bridge_connector.c > @@ -84,6 +84,13 @@ struct drm_bridge_connector { > * connector modes detection, if any (see &DRM_BRIDGE_OP_MODES). > */ > struct drm_bridge *bridge_modes; > + /** > + * @bridge_cec: > + * > + * The last bridge in the chain (closest to the connector) that provides > + * cec adapter support, if any (see &DRM_BRIDGE_OP_CEC). > + */ > + struct drm_bridge *bridge_cec; > }; > > #define to_drm_bridge_connector(x) \ > @@ -204,6 +211,11 @@ static void drm_bridge_connector_destroy(struct drm_connector *connector) > struct drm_bridge_connector *bridge_connector = > to_drm_bridge_connector(connector); > > + if (bridge_connector->bridge_cec) { > + struct drm_bridge *cec = bridge_connector->bridge_cec; > + > + cec->funcs->cec_exit(cec); > + } > if (bridge_connector->bridge_hpd) { > struct drm_bridge *hpd = bridge_connector->bridge_hpd; > > @@ -352,6 +364,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > bridge_connector->bridge_detect = bridge; > if (bridge->ops & DRM_BRIDGE_OP_MODES) > bridge_connector->bridge_modes = bridge; > + if (bridge->ops & DRM_BRIDGE_OP_CEC) > + bridge_connector->bridge_cec = bridge; > > if (!drm_bridge_get_next_bridge(bridge)) > connector_type = bridge->type; > @@ -374,6 +388,15 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > else if (bridge_connector->bridge_detect) > connector->polled = DRM_CONNECTOR_POLL_CONNECT > | DRM_CONNECTOR_POLL_DISCONNECT; > + if (bridge_connector->bridge_cec) { > + struct drm_bridge *bridge = bridge_connector->bridge_cec; > + int ret = bridge->funcs->cec_init(bridge, connector); > + > + if (ret) { > + drm_bridge_connector_destroy(connector); > + return ERR_PTR(ret); > + } > + } > > return connector; > } > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 2195daa289d2..4c83c2657e87 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -629,6 +629,30 @@ struct drm_bridge_funcs { > * the DRM_BRIDGE_OP_HPD flag in their &drm_bridge->ops. > */ > void (*hpd_disable)(struct drm_bridge *bridge); > + > + /** > + * @cec_init: > + * > + * Initialize the CEC adapter. > + * > + * This callback is optional and shall only be implemented by bridges > + * that support a CEC adapter. Bridges that implement it shall also > + * implement the @cec_exit callback and set the DRM_BRIDGE_OP_CEC flag > + * in their &drm_bridge->ops. > + */ > + int (*cec_init)(struct drm_bridge *bridge, struct drm_connector *conn); > + > + /** > + * @cec_exit: > + * > + * Terminate the CEC adapter. > + * > + * This callback is optional and shall only be implemented by bridges > + * that support a CEC adapter. Bridges that implement it shall also > + * implement the @cec_init callback and set the DRM_BRIDGE_OP_CEC flag > + * in their &drm_bridge->ops. > + */ > + void (*cec_exit)(struct drm_bridge *bridge); These are very ad-hoc operations. Would it make sense to have something that could also be reused for other type of intiialization and cleanup that require access to the drm_connector ? > }; > > /** > @@ -698,6 +722,13 @@ enum drm_bridge_ops { > * this flag shall implement the &drm_bridge_funcs->get_modes callback. > */ > DRM_BRIDGE_OP_MODES = BIT(3), > + /** > + * @DRM_BRIDGE_OP_CEC: The bridge supports a CEC adapter. > + * Bridges that set this flag shall implement the > + * &drm_bridge_funcs->cec_init and &drm_bridge_funcs->cec_exit > + * callbacks. > + */ > + DRM_BRIDGE_OP_CEC = BIT(4), > }; > > /** -- Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2021-02-19 12:05 UTC|newest] Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-11 10:36 [PATCH 0/5] drm/omap: hdmi: improve hdmi4 CEC, add CEC for hdmi5 Hans Verkuil 2021-02-11 10:36 ` Hans Verkuil 2021-02-11 10:36 ` [PATCH 1/5] drm: drm_bridge: add cec_init/exit bridge ops Hans Verkuil 2021-02-11 10:36 ` Hans Verkuil 2021-02-19 11:12 ` Tomi Valkeinen 2021-02-19 11:12 ` Tomi Valkeinen 2021-02-19 12:02 ` Laurent Pinchart [this message] 2021-02-19 12:02 ` Laurent Pinchart 2021-03-01 10:56 ` Hans Verkuil 2021-03-01 10:56 ` Hans Verkuil 2021-03-01 16:25 ` Laurent Pinchart 2021-03-01 16:25 ` Laurent Pinchart 2021-02-11 10:37 ` [PATCH 2/5] drm/omap: hdmi4: switch to the cec " Hans Verkuil 2021-02-11 10:37 ` Hans Verkuil 2021-02-19 11:12 ` Tomi Valkeinen 2021-02-19 11:12 ` Tomi Valkeinen 2021-02-19 12:07 ` Laurent Pinchart 2021-02-19 12:07 ` Laurent Pinchart 2021-03-01 11:07 ` Hans Verkuil 2021-03-01 11:07 ` Hans Verkuil 2021-03-01 16:26 ` Laurent Pinchart 2021-03-01 16:26 ` Laurent Pinchart 2021-02-11 10:37 ` [PATCH 3/5] drm/omap: hdmi4: simplify CEC Phys Addr handling Hans Verkuil 2021-02-11 10:37 ` Hans Verkuil 2021-02-19 11:13 ` Tomi Valkeinen 2021-02-19 11:13 ` Tomi Valkeinen 2021-02-11 10:37 ` [PATCH 4/5] drm/omap: hdmi5: add CEC support Hans Verkuil 2021-02-11 10:37 ` Hans Verkuil 2021-02-19 11:09 ` Tomi Valkeinen 2021-02-19 11:09 ` Tomi Valkeinen 2021-03-01 12:00 ` Hans Verkuil 2021-03-01 12:00 ` Hans Verkuil 2021-02-11 10:37 ` [PATCH 5/5] ARM: dts: dra7/omap5: add cec clock Hans Verkuil 2021-02-11 10:37 ` Hans Verkuil 2021-02-15 8:31 ` Tony Lindgren 2021-02-15 8:31 ` Tony Lindgren 2021-02-19 10:33 ` Tomi Valkeinen 2021-02-19 10:33 ` Tomi Valkeinen 2021-02-15 11:11 ` [PATCH 0/5] drm/omap: hdmi: improve hdmi4 CEC, add CEC for hdmi5 H. Nikolaus Schaller 2021-02-19 11:27 ` Tomi Valkeinen 2021-02-19 11:27 ` Tomi Valkeinen
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=YC+oyavcOV0uFJUb@pendragon.ideasonboard.com \ --to=laurent.pinchart@ideasonboard.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=hverkuil-cisco@xs4all.nl \ --cc=linux-media@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=nsekhar@ti.com \ --cc=tomi.valkeinen@ti.com \ --cc=tony@atomide.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.