[PATCH v2 15/50] drm/bridge: tfp410: Replace manual connector handling with bridge

Boris Brezillon boris.brezillon at collabora.com
Thu Aug 22 17:15:33 UTC 2019


On Thu, 22 Aug 2019 19:54:56 +0300
Laurent Pinchart <laurent.pinchart at ideasonboard.com> wrote:

> Hi Boris,
> 
> On Thu, Aug 22, 2019 at 06:36:45PM +0200, Boris Brezillon wrote:
> > On Tue, 20 Aug 2019 04:16:46 +0300 Laurent Pinchart wrote:
> >   
> > > Now that a driver is available for display connectors, replace the
> > > manual connector handling code with usage of the DRM bridge API. The
> > > tfp410 driver doesn't deal with the display connector directly anymore,
> > > but still delegates drm_connector operations to the next bridge. This
> > > brings us one step closer to having the tfp410 driver handling the
> > > TFP410 only.
> > > 
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > > ---
> > >  drivers/gpu/drm/bridge/ti-tfp410.c | 195 ++++++++++-------------------
> > >  1 file changed, 68 insertions(+), 127 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
> > > index 4a468f44ef69..65651ae6c553 100644
> > > --- a/drivers/gpu/drm/bridge/ti-tfp410.c
> > > +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
> > > @@ -4,14 +4,12 @@
> > >   * Author: Jyri Sarha <jsarha at ti.com>
> > >   */
> > >  
> > > -#include <linux/delay.h>
> > > -#include <linux/fwnode.h>
> > >  #include <linux/gpio/consumer.h>
> > >  #include <linux/i2c.h>
> > > -#include <linux/irq.h>
> > >  #include <linux/module.h>
> > >  #include <linux/of_graph.h>
> > >  #include <linux/platform_device.h>
> > > +#include <linux/workqueue.h>
> > >  
> > >  #include <drm/drm_atomic_helper.h>
> > >  #include <drm/drm_bridge.h>
> > > @@ -24,16 +22,13 @@
> > >  struct tfp410 {
> > >  	struct drm_bridge	bridge;
> > >  	struct drm_connector	connector;
> > > -	unsigned int		connector_type;
> > >  
> > >  	u32			bus_format;
> > > -	struct i2c_adapter	*ddc;
> > > -	struct gpio_desc	*hpd;
> > > -	int			hpd_irq;
> > >  	struct delayed_work	hpd_work;
> > >  	struct gpio_desc	*powerdown;
> > >  
> > >  	struct drm_bridge_timings timings;
> > > +	struct drm_bridge	*next_bridge;
> > >  
> > >  	struct device *dev;
> > >  };
> > > @@ -56,10 +51,10 @@ static int tfp410_get_modes(struct drm_connector *connector)
> > >  	struct edid *edid;
> > >  	int ret;
> > >  
> > > -	if (!dvi->ddc)
> > > +	if (!(dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID))
> > >  		goto fallback;
> > >  
> > > -	edid = drm_get_edid(connector, dvi->ddc);
> > > +	edid = dvi->next_bridge->funcs->get_edid(dvi->next_bridge, connector);  
> > 
> > Can we create a drm_bridge_get_edid() wrapper for that?
> > Something like:
> > 
> > int drm_bridge_get_edid(struct drm_bridge *bridge,
> > 			struct drm_connector *conn)
> > {
> > 	if (!(dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID))
> > 		return -ENOTSUPP;  
> 
> I assume you mean ERR_PTR(-ENOTSUPP) with the return type changed to
> struct drm_edid *.
> 
> > 
> > 	return bridge->funcs->get_edid(bridge, connector);
> > }  
> 
> I've thought about it, but I'm not sure it's worth it. These operations
> are not meant to be called manually by bridges like in here. This is an
> interim solution until support for drm_connector can be dropped from the
> tfp410 driver, once its users will be converted. Do you think I should
> still create a wrapper (which I would make static inline then) ?

Well, this conversion is likely to take time, not to mention that other
drivers will go through the same process. And every time a bridge
driver is converted, it requires patching all display controller drivers
that are known to be connected to it before you can get rid of this
temporary solution. So yes, I still think it's worth adding those
helpers, maybe with a comment explaining that they should only be used
during the conversion phase (IOW, until the driver starts rejecting
the !DRM_BRIDGE_ATTACH_NO_CONNECTOR case).



More information about the dri-devel mailing list