Tomi, Do you have any thought on how to approach adding sleep/delay functions? I have a display that requires a small delay before and after the enable gpio toggle. I assume that some may require a delay after the regulator starts for it to be be ready. For now I have a temp hack that just inserts a blanket 300mS wait, but I'd rather have something mainstreamed in the device tree, but I don't want to walk over someone else's work either. I'd love to help if you have an idea of how you vision it. adam On Wed, Dec 16, 2015 at 11:38 AM, Tomi Valkeinen <tomi.valkeinen@xxxxxx> wrote: > > > On 10/12/15 15:11, Uwe Kleine-König wrote: >> From: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> >> >> To allow supporting displays that need some logic to enable power to the >> display add support for a vcc-supply property to drive a regulator. >> >> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> >> --- >> Documentation/devicetree/bindings/video/panel-dpi.txt | 1 + >> drivers/video/fbdev/omap2/displays-new/panel-dpi.c | 13 +++++++++++++ >> 2 files changed, 14 insertions(+) > > Same comments here about the bindings. > >> diff --git a/Documentation/devicetree/bindings/video/panel-dpi.txt b/Documentation/devicetree/bindings/video/panel-dpi.txt >> index 1a1d8f6f884f..eaa39d1b1279 100644 >> --- a/Documentation/devicetree/bindings/video/panel-dpi.txt >> +++ b/Documentation/devicetree/bindings/video/panel-dpi.txt >> @@ -8,6 +8,7 @@ Optional properties: >> - label: a symbolic name for the panel >> - enable-gpios: panel enable gpio >> - reset-gpios: GPIO to control the RESET pin >> +- vcc-supply: phandle of regulator that will be used to enable power to the display >> >> Required nodes: >> - "panel-timing" containing video timings >> diff --git a/drivers/video/fbdev/omap2/displays-new/panel-dpi.c b/drivers/video/fbdev/omap2/displays-new/panel-dpi.c >> index 7e2f9e0813dc..65c6d9e6862b 100644 >> --- a/drivers/video/fbdev/omap2/displays-new/panel-dpi.c >> +++ b/drivers/video/fbdev/omap2/displays-new/panel-dpi.c >> @@ -15,6 +15,7 @@ >> #include <linux/slab.h> >> #include <linux/of.h> >> #include <linux/of_gpio.h> >> +#include <linux/regulator/consumer.h> >> >> #include <video/omapdss.h> >> #include <video/omap-panel-data.h> >> @@ -33,6 +34,7 @@ struct panel_drv_data { >> >> struct gpio_desc *enable_gpio; >> struct gpio_desc *reset_gpio; >> + struct regulator *vcc_supply; >> }; >> >> #define to_panel_data(p) container_of(p, struct panel_drv_data, dssdev) >> @@ -84,6 +86,12 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev) >> if (r) >> return r; >> >> + r = regulator_enable(ddata->vcc_supply); >> + if (r) { >> + in->ops.dpi->disable(in); >> + return r; >> + } >> + >> gpiod_set_value_cansleep(ddata->reset_gpio, 0); >> gpiod_set_value_cansleep(ddata->enable_gpio, 1); >> >> @@ -107,6 +115,7 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev) >> gpio_set_value_cansleep(ddata->backlight_gpio, 0); >> >> gpiod_set_value_cansleep(ddata->enable_gpio, 0); >> + regulator_disable(ddata->vcc_supply); >> >> in->ops.dpi->disable(in); >> >> @@ -218,6 +227,10 @@ static int panel_dpi_probe_of(struct platform_device *pdev) >> if (IS_ERR(ddata->reset_gpio)) >> return PTR_ERR(ddata->reset_gpio); >> >> + ddata->vcc_supply = devm_regulator_get(&pdev->dev, "vcc"); >> + if (IS_ERR(ddata->vcc_supply)) >> + return PTR_ERR(ddata->vcc_supply); >> + >> ddata->backlight_gpio = -ENOENT; >> >> r = of_get_display_timing(node, "panel-timing", &timing); > > Some panels might need to sleep before/after the regulator, but the same > goes for enable gpio. And we don't have a sane way to handle that at the > moment, so I think this is fine. > > Tomi > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html