summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Zobel <dzobel1@motorola.com>2014-02-03 14:46:22 -0600
committerJames Wylder <jwylder@motorola.com>2014-03-05 17:47:14 -0600
commit448cd1ef9dfb050ee9fcd4eecc2abe9fa0ce187d (patch)
tree97efed0037be443852a3afd38d21166f723c4a13
parent78a9d8de6bbc527f72abbfbcaf12268f0b9e13c2 (diff)
downloadolio-linux-3.10-448cd1ef9dfb050ee9fcd4eecc2abe9fa0ce187d.tar.xz
olio-linux-3.10-448cd1ef9dfb050ee9fcd4eecc2abe9fa0ce187d.zip
IKXCLOCK-158 Display driver should dynamically enable/disable regulators
Panel and bridge IC regulators need to be enabled and disabled dynamicly by the display driver instead of depending on them being on all the time. Change-Id: I3df350844443e71320c56471bbf2a45f631d6f2f Reviewed-on: http://gerrit.pcs.mot.com/607910 SLTApproved: Slta Waiver <sltawvr@motorola.com> Tested-by: Jira Key <jirakey@motorola.com> Reviewed-by: Jee Su Chang <w20740@motorola.com> Submit-Approved: Jira Key <jirakey@motorola.com>
-rw-r--r--arch/arm/boot/dts/omap3-minnow-p0.dts27
-rw-r--r--arch/arm/boot/dts/omap3-minnow.dtsi25
-rw-r--r--drivers/video/omap2/displays/panel-minnow.c37
3 files changed, 64 insertions, 25 deletions
diff --git a/arch/arm/boot/dts/omap3-minnow-p0.dts b/arch/arm/boot/dts/omap3-minnow-p0.dts
index 09b1714a7a8..8a588a43372 100644
--- a/arch/arm/boot/dts/omap3-minnow-p0.dts
+++ b/arch/arm/boot/dts/omap3-minnow-p0.dts
@@ -18,6 +18,33 @@
0x02 /* Minnow P1B portable */
>;
+ Display@0 {
+ compatible = "mot,minnow-panel-dsi-cm";
+ bridge-supply = <&ldo1_reg>;
+ panel-supply = <&ldo7_reg>;
+ /* 0: MINNOW_PANEL_CM_220X176
+ * 1: MINNOW_PANEL_CM_220X220
+ * 2: MINNOW_PANEL_CM_BRIDGE_320X320
+ */
+ id_panel = <2>;
+ gpio_panel_reset = <&gpio1 14 0>; /* RESET gpio-14 */
+ gpio_bridge_reset = <&gpio1 23 0>; /* RESET gpio-23 */
+ gpio_clk_en = <&gpio6 17 0>; /* RESET gpio-177 */
+ /* declare it if ext_te enable */
+ //gpio_te = <&gpio1 0 0>; /* EXT_TE gpio-0 */
+ //pins = <0 1 2 3>; /* DSI Pin config */
+ //esd_interval = <0>; /* ESD_INTERVAL */
+ //pixel_clock = <4608>; /* kHZ = 320*240*60/1000*/
+ /* 0: RGB888
+ * 1: RGB666
+ * 2: RGB666_PACKED
+ * 3: RGB565
+ */
+ //pixel_format = <1>;
+ //hs_clk = <90000000 150000000>; /* min max*/
+ //lp_clk = <7000000 9000000>; /* min max*/
+ };
+
c55-ctrl@0 {
compatible = "ti,c55-ctrl";
reg = <0 0>;
diff --git a/arch/arm/boot/dts/omap3-minnow.dtsi b/arch/arm/boot/dts/omap3-minnow.dtsi
index aa0e16abd1d..a387d98b01d 100644
--- a/arch/arm/boot/dts/omap3-minnow.dtsi
+++ b/arch/arm/boot/dts/omap3-minnow.dtsi
@@ -11,31 +11,6 @@
model = "Motorola OMAP3 Platform";
compatible = "mot,omap3-minnow", "ti,omap3";
- Display@0 {
- compatible = "mot,minnow-panel-dsi-cm";
- /* 0: MINNOW_PANEL_CM_220X176
- * 1: MINNOW_PANEL_CM_220X220
- * 2: MINNOW_PANEL_CM_BRIDGE_320X320
- */
- id_panel = <2>;
- gpio_panel_reset = <&gpio1 14 0>; /* RESET gpio-14 */
- gpio_bridge_reset = <&gpio1 23 0>; /* RESET gpio-23 */
- gpio_clk_en = <&gpio6 17 0>; /* RESET gpio-177 */
- /* declare it if ext_te enable */
- //gpio_te = <&gpio1 0 0>; /* EXT_TE gpio-0 */
- //pins = <0 1 2 3>; /* DSI Pin config */
- //esd_interval = <0>; /* ESD_INTERVAL */
- //pixel_clock = <4608>; /* kHZ = 320*240*60/1000*/
- /* 0: RGB888
- * 1: RGB666
- * 2: RGB666_PACKED
- * 3: RGB565
- */
- //pixel_format = <1>;
- //hs_clk = <90000000 150000000>; /* min max*/
- //lp_clk = <7000000 9000000>; /* min max*/
- };
-
/* FIXME: this dummy regulator is only needed as
a reference, but is enough to let devices
reference something. The regulator_get will
diff --git a/drivers/video/omap2/displays/panel-minnow.c b/drivers/video/omap2/displays/panel-minnow.c
index 1ac9125034d..be78aea50b3 100644
--- a/drivers/video/omap2/displays/panel-minnow.c
+++ b/drivers/video/omap2/displays/panel-minnow.c
@@ -31,6 +31,7 @@
#include <linux/workqueue.h>
#include <linux/slab.h>
#include <linux/mutex.h>
+#include <linux/regulator/consumer.h>
#include <video/omapdss.h>
#include <video/omap-panel-data.h>
@@ -309,6 +310,8 @@ struct minnow_panel_data {
int clk_en_gpio;
struct minnow_panel_hw_reset hw_reset[MINNOW_RESET_MAX];
struct minnow_panel_hw_reset bridge_reset;
+ struct regulator *bridge_regulator;
+ struct regulator *panel_regulator;
bool use_dsi_backlight;
@@ -1192,6 +1195,9 @@ static int minnow_panel_dt_init(struct minnow_panel_data *mpd)
return -ENODEV;
}
+ /* Save the dt node entry to the device */
+ mpd->dssdev->dev.of_node = dt_node;
+
if (of_property_read_u32(dt_node, "id_panel", &value) \
|| (value >= MINNOW_PANEL_MAX)) {
dev_err(&mpd->dssdev->dev, \
@@ -1400,6 +1406,18 @@ static int minnow_panel_probe(struct omap_dss_device *dssdev)
dev_dbg(&dssdev->dev, "Using GPIO TE\n");
}
+ mpd->bridge_regulator = devm_regulator_get(&dssdev->dev, "bridge");
+ if (IS_ERR(mpd->bridge_regulator)) {
+ mpd->bridge_regulator = NULL;
+ dev_info(&dssdev->dev, "Could not get bridge regulator\n");
+ }
+
+ mpd->panel_regulator = devm_regulator_get(&dssdev->dev, "panel");
+ if (IS_ERR(mpd->panel_regulator)) {
+ mpd->panel_regulator = NULL;
+ dev_info(&dssdev->dev, "Could not get panel regulator\n");
+ }
+
mpd->workqueue = create_singlethread_workqueue("minnow_panel_esd");
if (mpd->workqueue == NULL) {
dev_err(&dssdev->dev, "can't create ESD workqueue\n");
@@ -1610,6 +1628,19 @@ static int minnow_panel_enable(struct omap_dss_device *dssdev)
goto err;
}
+ if (mpd->bridge_regulator) {
+ if (regulator_enable(mpd->bridge_regulator)) {
+ r = -ENODEV;
+ goto err;
+ }
+ }
+ if (mpd->panel_regulator) {
+ if (regulator_enable(mpd->panel_regulator)) {
+ r = -ENODEV;
+ goto err;
+ }
+ }
+
dsi_bus_lock(dssdev);
r = minnow_panel_power_on(dssdev);
@@ -1657,6 +1688,12 @@ static void minnow_panel_disable(struct omap_dss_device *dssdev)
dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
+ if (mpd->panel_regulator)
+ regulator_disable(mpd->panel_regulator);
+
+ if (mpd->bridge_regulator)
+ regulator_disable(mpd->bridge_regulator);
+
mutex_unlock(&mpd->lock);
}