diff options
author | Danny Nold <dannynold@freescale.com> | 2011-11-03 13:05:36 -0500 |
---|---|---|
committer | Jason Liu <r64343@freescale.com> | 2012-01-09 21:06:15 +0800 |
commit | 2e5731626d19f95480ad0a368fbd68d2b3f3ebca (patch) | |
tree | 861e24c0ee5ae9bc9e08b2757d41513f02683472 /drivers/video/mxc | |
parent | da7e5127af69c075bce2047228a03d209c0022c2 (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.c | 25 |
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); |