From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Sekhar Nori <nsekhar@ti.com>, Kevin Hilman <khilman@kernel.org>,
Lee Jones <lee.jones@linaro.org>,
Daniel Thompson <daniel.thompson@linaro.org>,
Jingoo Han <jingoohan1@gmail.com>,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
David Lechner <david@lechnology.com>,
Linus Walleij <linus.walleij@linaro.org>
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-fbdev@vger.kernel.org,
Bartosz Golaszewski <bgolaszewski@baylibre.com>
Subject: [PATCH 07/12] fbdev: da8xx: add support for a regulator
Date: Tue, 25 Jun 2019 16:34:29 +0000 [thread overview]
Message-ID: <20190625163434.13620-8-brgl@bgdev.pl> (raw)
In-Reply-To: <20190625163434.13620-1-brgl@bgdev.pl>
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
We want to remove the hacky platform data callback for power control.
Add a regulator to the driver data and enable/disable it next to
the current panel_power_ctrl() calls. We will use it in subsequent
patch on da850-evm.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
drivers/video/fbdev/da8xx-fb.c | 54 ++++++++++++++++++++++++++++++----
1 file changed, 49 insertions(+), 5 deletions(-)
diff --git a/drivers/video/fbdev/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c
index 9ea817ac1d81..4fa99ff79f3b 100644
--- a/drivers/video/fbdev/da8xx-fb.c
+++ b/drivers/video/fbdev/da8xx-fb.c
@@ -19,6 +19,7 @@
#include <linux/clk.h>
#include <linux/cpufreq.h>
#include <linux/console.h>
+#include <linux/regulator/consumer.h>
#include <linux/spinlock.h>
#include <linux/slab.h>
#include <linux/delay.h>
@@ -165,6 +166,7 @@ struct da8xx_fb_par {
#endif
unsigned int lcdc_clk_rate;
void (*panel_power_ctrl)(int);
+ struct regulator *lcd_supply;
u32 pseudo_palette[16];
struct fb_videomode mode;
struct lcd_ctrl_config cfg;
@@ -1066,6 +1068,7 @@ static void lcd_da8xx_cpufreq_deregister(struct da8xx_fb_par *par)
static int fb_remove(struct platform_device *dev)
{
struct fb_info *info = dev_get_drvdata(&dev->dev);
+ int ret;
if (info) {
struct da8xx_fb_par *par = info->par;
@@ -1073,8 +1076,13 @@ static int fb_remove(struct platform_device *dev)
#ifdef CONFIG_CPU_FREQ
lcd_da8xx_cpufreq_deregister(par);
#endif
- if (par->panel_power_ctrl)
+ if (par->panel_power_ctrl) {
par->panel_power_ctrl(0);
+ } else if (par->lcd_supply) {
+ ret = regulator_disable(par->lcd_supply);
+ if (ret)
+ return ret;
+ }
lcd_disable_raster(DA8XX_FRAME_WAIT);
lcdc_write(0, LCD_RASTER_CTRL_REG);
@@ -1179,15 +1187,25 @@ static int cfb_blank(int blank, struct fb_info *info)
case FB_BLANK_UNBLANK:
lcd_enable_raster();
- if (par->panel_power_ctrl)
+ if (par->panel_power_ctrl) {
par->panel_power_ctrl(1);
+ } else if (par->lcd_supply) {
+ ret = regulator_enable(par->lcd_supply);
+ if (ret)
+ return ret;
+ }
break;
case FB_BLANK_NORMAL:
case FB_BLANK_VSYNC_SUSPEND:
case FB_BLANK_HSYNC_SUSPEND:
case FB_BLANK_POWERDOWN:
- if (par->panel_power_ctrl)
+ if (par->panel_power_ctrl) {
par->panel_power_ctrl(0);
+ } else if (par->lcd_supply) {
+ ret = regulator_disable(par->lcd_supply);
+ if (ret)
+ return ret;
+ }
lcd_disable_raster(DA8XX_FRAME_WAIT);
break;
@@ -1401,6 +1419,20 @@ static int fb_probe(struct platform_device *device)
par->panel_power_ctrl(1);
}
+ par->lcd_supply = devm_regulator_get_optional(&device->dev, "lcd");
+ if (IS_ERR(par->lcd_supply)) {
+ if (PTR_ERR(par->lcd_supply) = -EPROBE_DEFER) {
+ ret = -EPROBE_DEFER;
+ goto err_pm_runtime_disable;
+ }
+
+ par->lcd_supply = NULL;
+ } else {
+ ret = regulator_enable(par->lcd_supply);
+ if (ret)
+ goto err_pm_runtime_disable;
+ }
+
fb_videomode_to_var(&da8xx_fb_var, lcdc_info);
par->cfg = *lcd_cfg;
@@ -1604,10 +1636,16 @@ static int fb_suspend(struct device *dev)
{
struct fb_info *info = dev_get_drvdata(dev);
struct da8xx_fb_par *par = info->par;
+ int ret;
console_lock();
- if (par->panel_power_ctrl)
+ if (par->panel_power_ctrl) {
par->panel_power_ctrl(0);
+ } else if (par->lcd_supply) {
+ ret = regulator_disable(par->lcd_supply);
+ if (ret)
+ return ret;
+ }
fb_set_suspend(info, 1);
lcd_disable_raster(DA8XX_FRAME_WAIT);
@@ -1621,6 +1659,7 @@ static int fb_resume(struct device *dev)
{
struct fb_info *info = dev_get_drvdata(dev);
struct da8xx_fb_par *par = info->par;
+ int ret;
console_lock();
pm_runtime_get_sync(dev);
@@ -1628,8 +1667,13 @@ static int fb_resume(struct device *dev)
if (par->blank = FB_BLANK_UNBLANK) {
lcd_enable_raster();
- if (par->panel_power_ctrl)
+ if (par->panel_power_ctrl) {
par->panel_power_ctrl(1);
+ } else if (par->lcd_supply) {
+ ret = regulator_enable(par->lcd_supply);
+ if (ret)
+ return ret;
+ }
}
fb_set_suspend(info, 0);
--
2.21.0
next prev parent reply other threads:[~2019-06-25 16:34 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-25 16:34 [PATCH 00/12] ARM: davinci: da850-evm: remove more legacy GPIO calls Bartosz Golaszewski
2019-06-25 16:34 ` [PATCH 01/12] backlight: gpio: allow to probe non-pdata devices from board files Bartosz Golaszewski
2019-06-28 12:58 ` Bartlomiej Zolnierkiewicz
2019-07-02 9:02 ` Daniel Thompson
2019-06-25 16:34 ` [PATCH 02/12] backlight: gpio: use a helper variable for &pdev->dev Bartosz Golaszewski
2019-06-28 12:59 ` Bartlomiej Zolnierkiewicz
2019-07-02 9:05 ` Daniel Thompson
2019-06-25 16:34 ` [PATCH 03/12] backlight: gpio: pull the non-pdata device probing code into probe() Bartosz Golaszewski
2019-06-27 11:14 ` Linus Walleij
2019-06-28 12:59 ` Bartlomiej Zolnierkiewicz
2019-07-02 9:11 ` Daniel Thompson
2019-06-25 16:34 ` [PATCH 04/12] ARM: davinci: refresh davinci_all_defconfig Bartosz Golaszewski
2019-06-25 16:34 ` [PATCH 05/12] ARM: davinci_all_defconfig: enable GPIO backlight Bartosz Golaszewski
2019-06-25 16:34 ` [PATCH 06/12] ARM: davinci: da850-evm: model the backlight GPIO as an actual device Bartosz Golaszewski
2019-06-27 11:16 ` Linus Walleij
2019-06-25 16:34 ` Bartosz Golaszewski [this message]
2019-06-28 13:03 ` [PATCH 07/12] fbdev: da8xx: add support for a regulator Bartlomiej Zolnierkiewicz
2019-06-25 16:34 ` [PATCH 08/12] ARM: davinci: da850-evm: switch to using a fixed regulator for lcdc Bartosz Golaszewski
2019-06-27 11:18 ` Linus Walleij
2019-06-25 16:34 ` [PATCH 10/12] fbdev: da8xx-fb: use devm_platform_ioremap_resource() Bartosz Golaszewski
2019-06-28 13:04 ` Bartlomiej Zolnierkiewicz
2019-06-25 16:34 ` [PATCH 11/12] fbdev: da8xx-fb: drop a redundant if Bartosz Golaszewski
2019-06-28 13:05 ` Bartlomiej Zolnierkiewicz
2019-06-25 16:34 ` [PATCH 12/12] fbdev: da8xx: use resource management for dma Bartosz Golaszewski
2019-06-28 13:06 ` Bartlomiej Zolnierkiewicz
2019-07-01 14:52 ` [PATCH 00/12] ARM: davinci: da850-evm: remove more legacy GPIO calls Sekhar Nori
2019-07-02 6:36 ` Lee Jones
2019-07-02 10:06 ` Daniel Thompson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190625163434.13620-8-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=b.zolnierkie@samsung.com \
--cc=bgolaszewski@baylibre.com \
--cc=daniel.thompson@linaro.org \
--cc=david@lechnology.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jingoohan1@gmail.com \
--cc=khilman@kernel.org \
--cc=lee.jones@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nsekhar@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).