[PATCH 1/7] drm/exynos: dp: support hotplug detection via GPIO

Ajay kumar ajaynumb at gmail.com
Fri Apr 18 12:33:07 PDT 2014


Hi Jingoo,


On Fri, Apr 18, 2014 at 1:53 PM, Jingoo Han <jg1.han at samsung.com> wrote:

> On Wednesday, April 16, 2014 11:33 PM, Ajay Kumar wrote:
> >
> > From: Andrew Bresticker <abrestic at chromium.org>
> >
> > Certain bridge chips use a GPIO to indicate the cable status instead
> > of the I_DP_HPD pin.  This adds an optional device-tree property,
> > "samsung,hpd-gpio", to the exynos-dp controller which indicates that
> > the specified GPIO should be used for hotplug detection.
> > The GPIO is then set up as an edge-triggered interrupt where the
> > rising edge indicates hotplug-in and the falling edge indicates
> hotplug-out.
> >
> > Signed-off-by: Andrew Bresticker <abrestic at chromium.org>
> > Signed-off-by: Rahul Sharma <rahul.sharma at samsung.com>
> > Signed-off-by: Ajay Kumar <ajaykumar.rs at samsung.com>
> > ---
> >  .../devicetree/bindings/video/exynos_dp.txt        |  4 +++
> >  drivers/gpu/drm/exynos/exynos_dp_core.c            | 32
> ++++++++++++++++++++--
> >  drivers/gpu/drm/exynos/exynos_dp_core.h            |  1 +
> >  drivers/gpu/drm/exynos/exynos_dp_reg.c             | 26
> ++++++++++++++++--
> >  4 files changed, 57 insertions(+), 6 deletions(-)
> >
>
> [.....]
>
> > --- a/drivers/gpu/drm/exynos/exynos_dp_reg.c
> > +++ b/drivers/gpu/drm/exynos/exynos_dp_reg.c
> > @@ -13,6 +13,7 @@
> >  #include <linux/device.h>
> >  #include <linux/io.h>
> >  #include <linux/delay.h>
> > +#include <linux/gpio.h>
> >
> >  #include "exynos_dp_core.h"
> >  #include "exynos_dp_reg.h"
> > @@ -326,6 +327,9 @@ void exynos_dp_clear_hotplug_interrupts(struct
> exynos_dp_device *dp)
> >  {
> >       u32 reg;
> >
> > +     if (gpio_is_valid(dp->hpd_gpio))
> > +             return;
> > +
> >       reg = HOTPLUG_CHG | HPD_LOST | PLUG;
> >       writel(reg, dp->reg_base + EXYNOS_DP_COMMON_INT_STA_4);
> >
> > @@ -337,6 +341,9 @@ void exynos_dp_init_hpd(struct exynos_dp_device *dp)
> >  {
> >       u32 reg;
> >
> > +     if (gpio_is_valid(dp->hpd_gpio))
> > +             return;
> > +
> >       exynos_dp_clear_hotplug_interrupts(dp);
> >
> >       reg = readl(dp->reg_base + EXYNOS_DP_SYS_CTL_3);
> > @@ -348,6 +355,14 @@ enum dp_irq_type exynos_dp_get_irq_type(struct
> exynos_dp_device *dp)
> >  {
> >       u32 reg;
> >
> > +     if (gpio_is_valid(dp->hpd_gpio)) {
> > +             reg = gpio_get_value(dp->hpd_gpio);
> > +             if (reg)
> > +                     return DP_IRQ_TYPE_HP_CABLE_IN;
> > +             else
> > +                     return DP_IRQ_TYPE_HP_CABLE_OUT;
> > +     }
> > +
>
> Please keep the style. It enhances the readability.
>
> if (gpio_is_valid(dp->hpd_gpio)) {
>         ...
> } else {
>         ...
> }
>
> Ok.

> Then, it can be as bellows.
>
> +       if (gpio_is_valid(dp->hpd_gpio)) {
> +               reg = gpio_get_value(dp->hpd_gpio);
> +               if (reg)
> +                       return DP_IRQ_TYPE_HP_CABLE_IN;
> +               else
> +                       return DP_IRQ_TYPE_HP_CABLE_OUT;
> +       } else {
> +               /* Parse hotplug interrupt status register */
> +               reg = readl(dp->reg_base + EXYNOS_DP_COMMON_INT_STA_4);
> +
> +               if (reg & PLUG)
> +                       return DP_IRQ_TYPE_HP_CABLE_IN;
> +
> +               if (reg & HPD_LOST)
> +                       return DP_IRQ_TYPE_HP_CABLE_OUT;
> +
> +               if (reg & HOTPLUG_CHG)
> +                       return DP_IRQ_TYPE_HP_CHANGE;
> +       }
>
> Will change this.

>         return DP_IRQ_TYPE_UNKNOWN;
> }
>
> Best regards,
> Jingoo Han
>
> >       /* Parse hotplug interrupt status register */
> >       reg = readl(dp->reg_base + EXYNOS_DP_COMMON_INT_STA_4);
> >
> > @@ -402,9 +417,14 @@ int exynos_dp_get_plug_in_status(struct
> exynos_dp_device *dp)
> >  {
> >       u32 reg;
> >
> > -     reg = readl(dp->reg_base + EXYNOS_DP_SYS_CTL_3);
> > -     if (reg & HPD_STATUS)
> > -             return 0;
> > +     if (gpio_is_valid(dp->hpd_gpio)) {
> > +             if (gpio_get_value(dp->hpd_gpio))
> > +                     return 0;
> > +     } else {
> > +             reg = readl(dp->reg_base + EXYNOS_DP_SYS_CTL_3);
> > +             if (reg & HPD_STATUS)
> > +                     return 0;
> > +     }
> >
> >       return -EINVAL;
> >  }
> > --
> > 1.8.1.2
>
>
Thanks and Regrads,
Ajay Kumar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140419/3c722a62/attachment-0001.html>


More information about the dri-devel mailing list