Hi Peter,

On Tue, Apr 02, 2019 at 04:10:41PM +0300, Peter Ujfalusi wrote:
> On 02/04/2019 14.21, Laurent Pinchart wrote:
> > On Mon, Apr 01, 2019 at 03:33:42PM +0300, Peter Ujfalusi wrote:
> >> In case either the HPD gpio is not specified or when the HPD gpio can not
> >> be used as interrupt we should tell the core that the HPD needs to be
> >> polled for detecting hotplug.
> >>
> >> Signed-off-by: Peter Ujfalusi <peter.ujfal...@ti.com>
> >> ---
> >>  drivers/gpu/drm/bridge/ti-tfp410.c | 14 +++++++++++---
> >>  1 file changed, 11 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c 
> >> b/drivers/gpu/drm/bridge/ti-tfp410.c
> >> index 285be4a0f4bd..6fc831eb3804 100644
> >> --- a/drivers/gpu/drm/bridge/ti-tfp410.c
> >> +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
> >> @@ -31,6 +31,7 @@ struct tfp410 {
> >>  
> >>    struct i2c_adapter      *ddc;
> >>    struct gpio_desc        *hpd;
> >> +  int                     hpd_irq;
> >>    struct delayed_work     hpd_work;
> >>    struct gpio_desc        *powerdown;
> >>  
> >> @@ -124,8 +125,10 @@ static int tfp410_attach(struct drm_bridge *bridge)
> >>            return -ENODEV;
> >>    }
> >>  
> >> -  if (dvi->hpd)
> >> +  if (dvi->hpd_irq >= 0)
> > 
> > Do you need a new hpd_irq field ? Can't you just test dvi->hpd as done
> > today, simply adding the else clause to this if ?
> 
> We can have hpd GPIO, but the GPIO might not be usable for interrupt.

Ah, good point. I hadn't understood that from the commit message. Maybe
an additional sentence pointing out that not all GPIOs can be used as
IRQs would be useful.

Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>

> >>            dvi->connector.polled = DRM_CONNECTOR_POLL_HPD;
> >> +  else
> >> +          dvi->connector.polled = DRM_CONNECTOR_POLL_CONNECT | 
> >> DRM_CONNECTOR_POLL_DISCONNECT;
> >>  
> >>    drm_connector_helper_add(&dvi->connector,
> >>                             &tfp410_con_helper_funcs);
> >> @@ -324,10 +327,15 @@ static int tfp410_init(struct device *dev, bool i2c)
> >>            return PTR_ERR(dvi->powerdown);
> >>    }
> >>  
> >> -  if (dvi->hpd) {
> >> +  if (dvi->hpd)
> >> +          dvi->hpd_irq = gpiod_to_irq(dvi->hpd);
> >> +  else
> >> +          dvi->hpd_irq = -ENXIO;
> >> +
> >> +  if (dvi->hpd_irq >= 0) {
> >>            INIT_DELAYED_WORK(&dvi->hpd_work, tfp410_hpd_work_func);
> >>  
> >> -          ret = devm_request_threaded_irq(dev, gpiod_to_irq(dvi->hpd),
> >> +          ret = devm_request_threaded_irq(dev, dvi->hpd_irq,
> >>                    NULL, tfp410_hpd_irq_thread, IRQF_TRIGGER_RISING |
> >>                    IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> >>                    "hdmi-hpd", dvi);

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to