Message ID | 20230314111724.1520178-2-festevam@denx.de |
---|---|
State | Accepted |
Commit | e2945e6c5111726536c6046eaa1b840636e066a8 |
Headers | show |
Series | None | expand |
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 --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);
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(+)