Re: [PATCH v2 09/50] drm/bridge: simple-bridge: Add support for enable GPIO

2019-08-26 Thread Maxime Ripard
On Tue, Aug 20, 2019 at 04:16:40AM +0300, Laurent Pinchart wrote:
> If an enable GPIO is declared in the firmware, assert it when enabling
> the bridge and deassert it when disabling it.
>
> Signed-off-by: Laurent Pinchart 
> Reviewed-by: Andrzej Hajda 
> Reviewed-by: Stefan Agner 

Reviewed-by: Maxime Ripard 

Maxime

--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


signature.asc
Description: PGP signature
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Re: [PATCH v2 09/50] drm/bridge: simple-bridge: Add support for enable GPIO

2019-08-22 Thread Boris Brezillon
On Tue, 20 Aug 2019 04:16:40 +0300
Laurent Pinchart  wrote:

> If an enable GPIO is declared in the firmware, assert it when enabling
> the bridge and deassert it when disabling it.
> 
> Signed-off-by: Laurent Pinchart 
> Reviewed-by: Andrzej Hajda 
> Reviewed-by: Stefan Agner 

Reviewed-by: Boris Brezillon 

> ---
>  drivers/gpu/drm/bridge/simple-bridge.c | 22 ++
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/simple-bridge.c 
> b/drivers/gpu/drm/bridge/simple-bridge.c
> index 85aa852eafb4..3e5031833368 100644
> --- a/drivers/gpu/drm/bridge/simple-bridge.c
> +++ b/drivers/gpu/drm/bridge/simple-bridge.c
> @@ -6,6 +6,7 @@
>   * Maxime Ripard 
>   */
>  
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -29,6 +30,7 @@ struct simple_bridge {
>  
>   struct i2c_adapter  *ddc;
>   struct regulator*vdd;
> + struct gpio_desc*enable;
>  };
>  
>  static inline struct simple_bridge *
> @@ -140,19 +142,23 @@ static int simple_bridge_attach(struct drm_bridge 
> *bridge,
>  static void simple_bridge_enable(struct drm_bridge *bridge)
>  {
>   struct simple_bridge *sbridge = drm_bridge_to_simple_bridge(bridge);
> - int ret = 0;
> + int ret;
>  
> - if (sbridge->vdd)
> + if (sbridge->vdd) {
>   ret = regulator_enable(sbridge->vdd);
> + if (ret)
> + DRM_ERROR("Failed to enable vdd regulator: %d\n", ret);
> + }
>  
> - if (ret)
> - DRM_ERROR("Failed to enable vdd regulator: %d\n", ret);
> + gpiod_set_value_cansleep(sbridge->enable, 1);
>  }
>  
>  static void simple_bridge_disable(struct drm_bridge *bridge)
>  {
>   struct simple_bridge *sbridge = drm_bridge_to_simple_bridge(bridge);
>  
> + gpiod_set_value_cansleep(sbridge->enable, 0);
> +
>   if (sbridge->vdd)
>   regulator_disable(sbridge->vdd);
>  }
> @@ -205,6 +211,14 @@ static int simple_bridge_probe(struct platform_device 
> *pdev)
>   dev_dbg(&pdev->dev, "No vdd regulator found: %d\n", ret);
>   }
>  
> + sbridge->enable = devm_gpiod_get_optional(&pdev->dev, "enable",
> +   GPIOD_OUT_LOW);
> + if (IS_ERR(sbridge->enable)) {
> + if (PTR_ERR(sbridge->enable) != -EPROBE_DEFER)
> + dev_err(&pdev->dev, "Unable to retrieve enable GPIO\n");
> + return PTR_ERR(sbridge->enable);
> + }
> +
>   sbridge->ddc = simple_bridge_retrieve_ddc(&pdev->dev);
>   if (IS_ERR(sbridge->ddc)) {
>   if (PTR_ERR(sbridge->ddc) == -ENODEV) {

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

[PATCH v2 09/50] drm/bridge: simple-bridge: Add support for enable GPIO

2019-08-19 Thread Laurent Pinchart
If an enable GPIO is declared in the firmware, assert it when enabling
the bridge and deassert it when disabling it.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Andrzej Hajda 
Reviewed-by: Stefan Agner 
---
 drivers/gpu/drm/bridge/simple-bridge.c | 22 ++
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/simple-bridge.c 
b/drivers/gpu/drm/bridge/simple-bridge.c
index 85aa852eafb4..3e5031833368 100644
--- a/drivers/gpu/drm/bridge/simple-bridge.c
+++ b/drivers/gpu/drm/bridge/simple-bridge.c
@@ -6,6 +6,7 @@
  * Maxime Ripard 
  */
 
+#include 
 #include 
 #include 
 #include 
@@ -29,6 +30,7 @@ struct simple_bridge {
 
struct i2c_adapter  *ddc;
struct regulator*vdd;
+   struct gpio_desc*enable;
 };
 
 static inline struct simple_bridge *
@@ -140,19 +142,23 @@ static int simple_bridge_attach(struct drm_bridge *bridge,
 static void simple_bridge_enable(struct drm_bridge *bridge)
 {
struct simple_bridge *sbridge = drm_bridge_to_simple_bridge(bridge);
-   int ret = 0;
+   int ret;
 
-   if (sbridge->vdd)
+   if (sbridge->vdd) {
ret = regulator_enable(sbridge->vdd);
+   if (ret)
+   DRM_ERROR("Failed to enable vdd regulator: %d\n", ret);
+   }
 
-   if (ret)
-   DRM_ERROR("Failed to enable vdd regulator: %d\n", ret);
+   gpiod_set_value_cansleep(sbridge->enable, 1);
 }
 
 static void simple_bridge_disable(struct drm_bridge *bridge)
 {
struct simple_bridge *sbridge = drm_bridge_to_simple_bridge(bridge);
 
+   gpiod_set_value_cansleep(sbridge->enable, 0);
+
if (sbridge->vdd)
regulator_disable(sbridge->vdd);
 }
@@ -205,6 +211,14 @@ static int simple_bridge_probe(struct platform_device 
*pdev)
dev_dbg(&pdev->dev, "No vdd regulator found: %d\n", ret);
}
 
+   sbridge->enable = devm_gpiod_get_optional(&pdev->dev, "enable",
+ GPIOD_OUT_LOW);
+   if (IS_ERR(sbridge->enable)) {
+   if (PTR_ERR(sbridge->enable) != -EPROBE_DEFER)
+   dev_err(&pdev->dev, "Unable to retrieve enable GPIO\n");
+   return PTR_ERR(sbridge->enable);
+   }
+
sbridge->ddc = simple_bridge_retrieve_ddc(&pdev->dev);
if (IS_ERR(sbridge->ddc)) {
if (PTR_ERR(sbridge->ddc) == -ENODEV) {
-- 
Regards,

Laurent Pinchart

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel