<div dir="ltr">Hi Jingoo,<br><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 18, 2014 at 1:53 PM, Jingoo Han <span dir="ltr"><<a href="mailto:jg1.han@samsung.com" target="_blank">jg1.han@samsung.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On Wednesday, April 16, 2014 11:33 PM, Ajay Kumar wrote:<br>
><br>
> From: Andrew Bresticker <<a href="mailto:abrestic@chromium.org">abrestic@chromium.org</a>><br>
><br>
> Certain bridge chips use a GPIO to indicate the cable status instead<br>
> of the I_DP_HPD pin.  This adds an optional device-tree property,<br>
> "samsung,hpd-gpio", to the exynos-dp controller which indicates that<br>
> the specified GPIO should be used for hotplug detection.<br>
> The GPIO is then set up as an edge-triggered interrupt where the<br>
> rising edge indicates hotplug-in and the falling edge indicates hotplug-out.<br>
><br>
> Signed-off-by: Andrew Bresticker <<a href="mailto:abrestic@chromium.org">abrestic@chromium.org</a>><br>
> Signed-off-by: Rahul Sharma <<a href="mailto:rahul.sharma@samsung.com">rahul.sharma@samsung.com</a>><br>
> Signed-off-by: Ajay Kumar <<a href="mailto:ajaykumar.rs@samsung.com">ajaykumar.rs@samsung.com</a>><br>
> ---<br>
>  .../devicetree/bindings/video/exynos_dp.txt        |  4 +++<br>
>  drivers/gpu/drm/exynos/exynos_dp_core.c            | 32 ++++++++++++++++++++--<br>
>  drivers/gpu/drm/exynos/exynos_dp_core.h            |  1 +<br>
>  drivers/gpu/drm/exynos/exynos_dp_reg.c             | 26 ++++++++++++++++--<br>
>  4 files changed, 57 insertions(+), 6 deletions(-)<br>
><br>
<br>
</div>[.....]<br>
<div><div class="h5"><br>
> --- a/drivers/gpu/drm/exynos/exynos_dp_reg.c<br>
> +++ b/drivers/gpu/drm/exynos/exynos_dp_reg.c<br>
> @@ -13,6 +13,7 @@<br>
>  #include <linux/device.h><br>
>  #include <linux/io.h><br>
>  #include <linux/delay.h><br>
> +#include <linux/gpio.h><br>
><br>
>  #include "exynos_dp_core.h"<br>
>  #include "exynos_dp_reg.h"<br>
> @@ -326,6 +327,9 @@ void exynos_dp_clear_hotplug_interrupts(struct exynos_dp_device *dp)<br>
>  {<br>
>       u32 reg;<br>
><br>
> +     if (gpio_is_valid(dp->hpd_gpio))<br>
> +             return;<br>
> +<br>
>       reg = HOTPLUG_CHG | HPD_LOST | PLUG;<br>
>       writel(reg, dp->reg_base + EXYNOS_DP_COMMON_INT_STA_4);<br>
><br>
> @@ -337,6 +341,9 @@ void exynos_dp_init_hpd(struct exynos_dp_device *dp)<br>
>  {<br>
>       u32 reg;<br>
><br>
> +     if (gpio_is_valid(dp->hpd_gpio))<br>
> +             return;<br>
> +<br>
>       exynos_dp_clear_hotplug_interrupts(dp);<br>
><br>
>       reg = readl(dp->reg_base + EXYNOS_DP_SYS_CTL_3);<br>
> @@ -348,6 +355,14 @@ enum dp_irq_type exynos_dp_get_irq_type(struct exynos_dp_device *dp)<br>
>  {<br>
>       u32 reg;<br>
><br>
> +     if (gpio_is_valid(dp->hpd_gpio)) {<br>
> +             reg = gpio_get_value(dp->hpd_gpio);<br>
> +             if (reg)<br>
> +                     return DP_IRQ_TYPE_HP_CABLE_IN;<br>
> +             else<br>
> +                     return DP_IRQ_TYPE_HP_CABLE_OUT;<br>
> +     }<br>
> +<br>
<br>
</div></div>Please keep the style. It enhances the readability.<br>
<br>
if (gpio_is_valid(dp->hpd_gpio)) {<br>
        ...<br>
} else {<br>
        ...<br>
}<br>
<br></blockquote><div>Ok. <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Then, it can be as bellows.<br>
<div class=""><br>
+       if (gpio_is_valid(dp->hpd_gpio)) {<br>
+               reg = gpio_get_value(dp->hpd_gpio);<br>
+               if (reg)<br>
+                       return DP_IRQ_TYPE_HP_CABLE_IN;<br>
+               else<br>
+                       return DP_IRQ_TYPE_HP_CABLE_OUT;<br>
</div>+       } else {<br>
<div class="">+               /* Parse hotplug interrupt status register */<br>
</div>+               reg = readl(dp->reg_base + EXYNOS_DP_COMMON_INT_STA_4);<br>
+<br>
+               if (reg & PLUG)<br>
+                       return DP_IRQ_TYPE_HP_CABLE_IN;<br>
+<br>
+               if (reg & HPD_LOST)<br>
+                       return DP_IRQ_TYPE_HP_CABLE_OUT;<br>
+<br>
+               if (reg & HOTPLUG_CHG)<br>
+                       return DP_IRQ_TYPE_HP_CHANGE;<br>
+       }<br>
<br></blockquote><div>Will change this. <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
        return DP_IRQ_TYPE_UNKNOWN;<br>
}<br>
<br>
Best regards,<br>
Jingoo Han<br>
<div class="HOEnZb"><div class="h5"><br>
>       /* Parse hotplug interrupt status register */<br>
>       reg = readl(dp->reg_base + EXYNOS_DP_COMMON_INT_STA_4);<br>
><br>
> @@ -402,9 +417,14 @@ int exynos_dp_get_plug_in_status(struct exynos_dp_device *dp)<br>
>  {<br>
>       u32 reg;<br>
><br>
> -     reg = readl(dp->reg_base + EXYNOS_DP_SYS_CTL_3);<br>
> -     if (reg & HPD_STATUS)<br>
> -             return 0;<br>
> +     if (gpio_is_valid(dp->hpd_gpio)) {<br>
> +             if (gpio_get_value(dp->hpd_gpio))<br>
> +                     return 0;<br>
> +     } else {<br>
> +             reg = readl(dp->reg_base + EXYNOS_DP_SYS_CTL_3);<br>
> +             if (reg & HPD_STATUS)<br>
> +                     return 0;<br>
> +     }<br>
><br>
>       return -EINVAL;<br>
>  }<br>
> --<br>
> 1.8.1.2<br>
<br>
</div></div></blockquote></div><br></div><div class="gmail_extra">Thanks and Regrads,<br></div><div class="gmail_extra">Ajay Kumar<br></div></div></div>