summaryrefslogtreecommitdiff
path: root/drivers/video/mxc
diff options
context:
space:
mode:
authorDanny Nold <dannynold@freescale.com>2011-11-03 13:05:36 -0500
committerJason Liu <r64343@freescale.com>2012-01-09 21:06:15 +0800
commit2e5731626d19f95480ad0a368fbd68d2b3f3ebca (patch)
tree861e24c0ee5ae9bc9e08b2757d41513f02683472 /drivers/video/mxc
parentda7e5127af69c075bce2047228a03d209c0022c2 (diff)
ENGR00143921-1 - EPDC/MAX17135: Add controls for V3P3 regulator
- Added V3P3 regulator to max17135 - Added calls to enable/disable V3P3 regulator from EPDC driver - Improved Kconfig detail for max17135 MFD and HWMON entries Signed-off-by: Danny Nold <dannynold@freescale.com>
Diffstat (limited to 'drivers/video/mxc')
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index 6e7ac35882d9..192264e8aca7 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -135,6 +135,7 @@ struct mxc_epdc_fb_data {
struct clk *epdc_clk_pix;
struct regulator *display_regulator;
struct regulator *vcom_regulator;
+ struct regulator *v3p3_regulator;
bool fw_default_load;
/* FB elements related to EPDC updates */
@@ -866,6 +867,17 @@ static void epdc_powerup(struct mxc_epdc_fb_data *fb_data)
fb_data->updates_active = true;
+ /* Enable the v3p3 regulator */
+ ret = regulator_enable(fb_data->v3p3_regulator);
+ if (IS_ERR((void *)ret)) {
+ dev_err(fb_data->dev, "Unable to enable V3P3 regulator."
+ "err = 0x%x\n", ret);
+ mutex_unlock(&fb_data->power_mutex);
+ return;
+ }
+
+ msleep(1);
+
/* Enable pins used by EPDC */
if (fb_data->pdata->enable_pins)
fb_data->pdata->enable_pins();
@@ -925,6 +937,9 @@ static void epdc_powerdown(struct mxc_epdc_fb_data *fb_data)
if (fb_data->pdata->disable_pins)
fb_data->pdata->disable_pins();
+ /* turn off the V3p3 */
+ regulator_disable(fb_data->v3p3_regulator);
+
fb_data->power_state = POWER_STATE_OFF;
fb_data->powering_down = false;
@@ -3959,6 +3974,15 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
ret = -ENODEV;
goto out_irq;
}
+ fb_data->v3p3_regulator = regulator_get(NULL, "V3P3");
+ if (IS_ERR(fb_data->v3p3_regulator)) {
+ regulator_put(fb_data->vcom_regulator);
+ regulator_put(fb_data->display_regulator);
+ dev_err(&pdev->dev, "Unable to get V3P3 regulator."
+ "err = 0x%x\n", (int)fb_data->vcom_regulator);
+ ret = -ENODEV;
+ goto out_irq;
+ }
if (device_create_file(info->dev, &fb_attrs[0]))
dev_err(&pdev->dev, "Unable to create file from fb_attrs\n");
@@ -4163,6 +4187,7 @@ static int mxc_epdc_fb_remove(struct platform_device *pdev)
regulator_put(fb_data->display_regulator);
regulator_put(fb_data->vcom_regulator);
+ regulator_put(fb_data->v3p3_regulator);
unregister_framebuffer(&fb_data->info);
free_irq(fb_data->epdc_irq, fb_data);