* [PATCH] video: fbdev: imxfb: ensure balanced regulator usage @ 2020-03-23 21:16 ` Uwe Kleine-König 2020-04-17 14:07 ` Bartlomiej Zolnierkiewicz 0 siblings, 1 reply; 2+ messages in thread From: Uwe Kleine-König @ 2020-03-23 21:16 UTC (permalink / raw) To: Sascha Hauer, Bartlomiej Zolnierkiewicz Cc: linux-fbdev, Shawn Guo, dri-devel, NXP Linux Team, Pengutronix Kernel Team, linux-arm-kernel The fbdev framework doesn't care to call the .set_power callback only on changes. So the driver has to care for itself that the regulator doesn't get disabled more often than enabled. This fixes the regulator warning unbalanced disables for lcd supply which can be triggered by doing echo 4 > /sys/class/lcd/imxfb-lcd/lcd_power twice. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- drivers/video/fbdev/imxfb.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c index 370bf2553d43..884b16efa7e8 100644 --- a/drivers/video/fbdev/imxfb.c +++ b/drivers/video/fbdev/imxfb.c @@ -172,6 +172,7 @@ struct imxfb_info { int num_modes; struct regulator *lcd_pwr; + int lcd_pwr_enabled; }; static const struct platform_device_id imxfb_devtype[] = { @@ -801,16 +802,30 @@ static int imxfb_lcd_get_power(struct lcd_device *lcddev) return FB_BLANK_UNBLANK; } +static int imxfb_regulator_set(struct imxfb_info *fbi, int enable) +{ + int ret; + + if (enable == fbi->lcd_pwr_enabled) + return 0; + + if (enable) + ret = regulator_enable(fbi->lcd_pwr); + else + ret = regulator_disable(fbi->lcd_pwr); + + if (ret == 0) + fbi->lcd_pwr_enabled = enable; + + return ret; +} + static int imxfb_lcd_set_power(struct lcd_device *lcddev, int power) { struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev); - if (!IS_ERR(fbi->lcd_pwr)) { - if (power == FB_BLANK_UNBLANK) - return regulator_enable(fbi->lcd_pwr); - else - return regulator_disable(fbi->lcd_pwr); - } + if (!IS_ERR(fbi->lcd_pwr)) + return imxfb_regulator_set(fbi, power == FB_BLANK_UNBLANK); return 0; } -- 2.25.1 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] video: fbdev: imxfb: ensure balanced regulator usage 2020-03-23 21:16 ` [PATCH] video: fbdev: imxfb: ensure balanced regulator usage Uwe Kleine-König @ 2020-04-17 14:07 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 2+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2020-04-17 14:07 UTC (permalink / raw) To: Uwe Kleine-König Cc: linux-fbdev, Shawn Guo, Sascha Hauer, dri-devel, NXP Linux Team, Pengutronix Kernel Team, linux-arm-kernel On 3/23/20 10:16 PM, Uwe Kleine-König wrote: > The fbdev framework doesn't care to call the .set_power callback only on > changes. So the driver has to care for itself that the regulator doesn't > get disabled more often than enabled. > > This fixes the regulator warning > > unbalanced disables for lcd supply > > which can be triggered by doing > > echo 4 > /sys/class/lcd/imxfb-lcd/lcd_power > > twice. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Patch queued for v5.8, thanks. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics > --- > drivers/video/fbdev/imxfb.c | 27 +++++++++++++++++++++------ > 1 file changed, 21 insertions(+), 6 deletions(-) > > diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c > index 370bf2553d43..884b16efa7e8 100644 > --- a/drivers/video/fbdev/imxfb.c > +++ b/drivers/video/fbdev/imxfb.c > @@ -172,6 +172,7 @@ struct imxfb_info { > int num_modes; > > struct regulator *lcd_pwr; > + int lcd_pwr_enabled; > }; > > static const struct platform_device_id imxfb_devtype[] = { > @@ -801,16 +802,30 @@ static int imxfb_lcd_get_power(struct lcd_device *lcddev) > return FB_BLANK_UNBLANK; > } > > +static int imxfb_regulator_set(struct imxfb_info *fbi, int enable) > +{ > + int ret; > + > + if (enable == fbi->lcd_pwr_enabled) > + return 0; > + > + if (enable) > + ret = regulator_enable(fbi->lcd_pwr); > + else > + ret = regulator_disable(fbi->lcd_pwr); > + > + if (ret == 0) > + fbi->lcd_pwr_enabled = enable; > + > + return ret; > +} > + > static int imxfb_lcd_set_power(struct lcd_device *lcddev, int power) > { > struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev); > > - if (!IS_ERR(fbi->lcd_pwr)) { > - if (power == FB_BLANK_UNBLANK) > - return regulator_enable(fbi->lcd_pwr); > - else > - return regulator_disable(fbi->lcd_pwr); > - } > + if (!IS_ERR(fbi->lcd_pwr)) > + return imxfb_regulator_set(fbi, power == FB_BLANK_UNBLANK); > > return 0; > } > _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-04-17 14:08 UTC | newest] Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20200323211646eucas1p270ab02024c326adba5a50b908ef8ba8a@eucas1p2.samsung.com> 2020-03-23 21:16 ` [PATCH] video: fbdev: imxfb: ensure balanced regulator usage Uwe Kleine-König 2020-04-17 14:07 ` Bartlomiej Zolnierkiewicz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).