diff options
| -rw-r--r-- | arch/arm/boot/dts/omap3-minnow-p0.dts | 27 | ||||
| -rw-r--r-- | arch/arm/boot/dts/omap3-minnow.dtsi | 25 | ||||
| -rw-r--r-- | drivers/video/omap2/displays/panel-minnow.c | 37 | 
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);  }  |