diff mbox series

[2/2] drm/panel: seiko-43wvf1g: Add the 'enable-gpios' property

Message ID 20230314111724.1520178-2-festevam@denx.de
State Accepted
Commit e2945e6c5111726536c6046eaa1b840636e066a8
Headers show
Series None | expand

Commit Message

Fabio Estevam March 14, 2023, 11:17 a.m. UTC
Sometimes a GPIO is needed to turn on/off the display.

Add support for this usecase by introducing the optional 'enable-gpios'
property.

Tested on a imx53qsb board.

Signed-off-by: Fabio Estevam <festevam@denx.de>
---
 drivers/gpu/drm/panel/panel-seiko-43wvf1g.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Neil Armstrong March 15, 2023, 9:09 a.m. UTC | #1
On 14/03/2023 12:17, Fabio Estevam wrote:
> Sometimes a GPIO is needed to turn on/off the display.
> 
> Add support for this usecase by introducing the optional 'enable-gpios'
> property.
> 
> Tested on a imx53qsb board.
> 
> Signed-off-by: Fabio Estevam <festevam@denx.de>
> ---
>   drivers/gpu/drm/panel/panel-seiko-43wvf1g.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> index 76160e5d43bd..c250ca36a5b3 100644
> --- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> +++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> @@ -7,6 +7,7 @@
>    */
>   
>   #include <linux/delay.h>
> +#include <linux/gpio/consumer.h>
>   #include <linux/media-bus-format.h>
>   #include <linux/module.h>
>   #include <linux/of.h>
> @@ -48,6 +49,7 @@ struct seiko_panel {
>   	const struct seiko_panel_desc *desc;
>   	struct regulator *dvdd;
>   	struct regulator *avdd;
> +	struct gpio_desc *enable_gpio;
>   };
>   
>   static inline struct seiko_panel *to_seiko_panel(struct drm_panel *panel)
> @@ -139,6 +141,8 @@ static int seiko_panel_unprepare(struct drm_panel *panel)
>   	if (!p->prepared)
>   		return 0;
>   
> +	gpiod_set_value_cansleep(p->enable_gpio, 0);
> +
>   	regulator_disable(p->avdd);
>   
>   	/* Add a 100ms delay as per the panel datasheet */
> @@ -174,6 +178,8 @@ static int seiko_panel_prepare(struct drm_panel *panel)
>   		goto disable_dvdd;
>   	}
>   
> +	gpiod_set_value_cansleep(p->enable_gpio, 1);
> +
>   	p->prepared = true;
>   
>   	return 0;
> @@ -252,6 +258,12 @@ static int seiko_panel_probe(struct device *dev,
>   	if (IS_ERR(panel->avdd))
>   		return PTR_ERR(panel->avdd);
>   
> +	panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
> +						     GPIOD_OUT_LOW);
> +	if (IS_ERR(panel->enable_gpio))
> +		return dev_err_probe(dev, PTR_ERR(panel->enable_gpio),
> +				     "failed to request GPIO\n");
> +
>   	drm_panel_init(&panel->base, dev, &seiko_panel_funcs,
>   		       DRM_MODE_CONNECTOR_DPI);
>   


Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
index 76160e5d43bd..c250ca36a5b3 100644
--- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
+++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
@@ -7,6 +7,7 @@ 
  */
 
 #include <linux/delay.h>
+#include <linux/gpio/consumer.h>
 #include <linux/media-bus-format.h>
 #include <linux/module.h>
 #include <linux/of.h>
@@ -48,6 +49,7 @@  struct seiko_panel {
 	const struct seiko_panel_desc *desc;
 	struct regulator *dvdd;
 	struct regulator *avdd;
+	struct gpio_desc *enable_gpio;
 };
 
 static inline struct seiko_panel *to_seiko_panel(struct drm_panel *panel)
@@ -139,6 +141,8 @@  static int seiko_panel_unprepare(struct drm_panel *panel)
 	if (!p->prepared)
 		return 0;
 
+	gpiod_set_value_cansleep(p->enable_gpio, 0);
+
 	regulator_disable(p->avdd);
 
 	/* Add a 100ms delay as per the panel datasheet */
@@ -174,6 +178,8 @@  static int seiko_panel_prepare(struct drm_panel *panel)
 		goto disable_dvdd;
 	}
 
+	gpiod_set_value_cansleep(p->enable_gpio, 1);
+
 	p->prepared = true;
 
 	return 0;
@@ -252,6 +258,12 @@  static int seiko_panel_probe(struct device *dev,
 	if (IS_ERR(panel->avdd))
 		return PTR_ERR(panel->avdd);
 
+	panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
+						     GPIOD_OUT_LOW);
+	if (IS_ERR(panel->enable_gpio))
+		return dev_err_probe(dev, PTR_ERR(panel->enable_gpio),
+				     "failed to request GPIO\n");
+
 	drm_panel_init(&panel->base, dev, &seiko_panel_funcs,
 		       DRM_MODE_CONNECTOR_DPI);