Patchwork [v3] ARM: tegra: ventana: enable internal display

login
register
mail settings
Submitter Alexandre Courbot
Date Nov. 19, 2012, 9:43 a.m.
Message ID <1353318187-26484-1-git-send-email-acourbot@nvidia.com>
Download mbox | patch
Permalink /patch/199960/
State Rejected, archived
Headers show

Comments

Alexandre Courbot - Nov. 19, 2012, 9:43 a.m.
Enable host1x and add the rgb output.

Also add the power sequence that controls the backlight and panel. The
sequence strictly follows the order and timings of the panel
specification.

Currently the backlight device controls both backlight and panel, this
needs to be fixed once the panel framework supports power sequences.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
 arch/arm/boot/dts/tegra20-ventana.dts | 108 +++++++++++++++++++++++++++++++++-
 1 file changed, 105 insertions(+), 3 deletions(-)
Mark Zhang - Nov. 20, 2012, 1:37 a.m.
Great. So this means I2C2 is used for LCD and HDMI both. While HDMI is
not plugged, the EDID of LCD will be checked out, right?

Mark
On 11/19/2012 05:43 PM, Alexandre Courbot wrote:
> Enable host1x and add the rgb output.
> 
> Also add the power sequence that controls the backlight and panel. The
> sequence strictly follows the order and timings of the panel
> specification.
> 
> Currently the backlight device controls both backlight and panel, this
> needs to be fixed once the panel framework supports power sequences.
> 
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> ---
>  arch/arm/boot/dts/tegra20-ventana.dts | 108 +++++++++++++++++++++++++++++++++-
>  1 file changed, 105 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/tegra20-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts
> index adc4754..31c9c5c 100644
> --- a/arch/arm/boot/dts/tegra20-ventana.dts
> +++ b/arch/arm/boot/dts/tegra20-ventana.dts
> @@ -10,6 +10,15 @@
>  		reg = <0x00000000 0x40000000>;
>  	};
>  
> +	host1x {
> +		dc@54200000 {
> +			rgb {
> +				status = "okay";
> +				nvidia,ddc-i2c-bus = <&lcd_ddc>;
> +			};
> +		};
> +	};
> +
>  	pinmux {
>  		pinctrl-names = "default";
>  		pinctrl-0 = <&state_default>;
> @@ -341,7 +350,7 @@
>  			#size-cells = <0>;
>  		};
>  
> -		i2c@1 {
> +		lcd_ddc: i2c@1 {
>  			reg = <1>;
>  			#address-cells = <1>;
>  			#size-cells = <0>;
> @@ -516,6 +525,99 @@
>  		bus-width = <8>;
>  	};
>  
> +	backlight: backlight {
> +		compatible = "pwm-backlight";
> +		brightness-levels = <0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 255>;
> +		default-brightness-level = <12>;
> +
> +		/* resources used by the power sequences */
> +		pwms = <&pwm 2 5000000>;
> +		pwm-names = "backlight";
> +		power-supply = <&vdd_bl_reg>;
> +		panel-supply = <&vdd_panel_reg>;
> +
> +		power-sequences {
> +			power-on {
> +				/*
> +				 * Panel power and LVDS enable.
> +				 * TODO: move into the panel device as soon as
> +				 * panel framework supports power sequences.
> +				 */
> +				step0 {
> +					type = "regulator";
> +					id = "panel";
> +					enable;
> +				};
> +				step1 {
> +					type = "gpio";
> +					gpio = <&gpio 10 0>;
> +					value = <1>;
> +				};
> +				step2 {
> +					type = "delay";
> +					delay = <200000>;
> +				};
> +				/* Backlight sequence. This belongs here. */
> +				step3 {
> +					type = "regulator";
> +					id = "power";
> +					enable;
> +				};
> +				step4 {
> +					type = "delay";
> +					delay = <10000>;
> +				};
> +				step5 {
> +					type = "pwm";
> +					id = "backlight";
> +					enable;
> +				};
> +				step6 {
> +					type = "gpio";
> +					gpio = <&gpio 28 0>;
> +					value = <1>;
> +				};
> +			};
> +
> +			power-off {
> +				step0 {
> +					type = "gpio";
> +					gpio = <&gpio 28 0>;
> +					value = <0>;
> +				};
> +				step1 {
> +					type = "pwm";
> +					id = "backlight";
> +					disable;
> +				};
> +				step2 {
> +					type = "delay";
> +					delay = <10000>;
> +				};
> +				step3 {
> +					type = "regulator";
> +					id = "power";
> +					disable;
> +				};
> +				/* This also belongs to the panel sequence */
> +				step4 {
> +					type = "delay";
> +					delay = <200000>;
> +				};
> +				step5 {
> +					type = "gpio";
> +					gpio = <&gpio 10 0>;
> +					value = <0>;
> +				};
> +				step6 {
> +					type = "regulator";
> +					id = "panel";
> +					disable;
> +				};
> +			};
> +		};
> +	};
> +
>  	regulators {
>  		compatible = "simple-bus";
>  		#address-cells = <1>;
> @@ -549,7 +651,7 @@
>  			enable-active-high;
>  		};
>  
> -		regulator@3 {
> +		vdd_panel_reg: regulator@3 {
>  			compatible = "regulator-fixed";
>  			reg = <3>;
>  			regulator-name = "vdd_pnl";
> @@ -559,7 +661,7 @@
>  			enable-active-high;
>  		};
>  
> -		regulator@4 {
> +		vdd_bl_reg: regulator@4 {
>  			compatible = "regulator-fixed";
>  			reg = <4>;
>  			regulator-name = "vdd_bl";
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alexandre Courbot - Nov. 20, 2012, 1:47 a.m.
On Tuesday 20 November 2012 09:37:41 Mark Zhang wrote:
> Great. So this means I2C2 is used for LCD and HDMI both. While HDMI is
> not plugged, the EDID of LCD will be checked out, right?

Ahhh. So that's why the LCD DDC was not working during my previous tests - I 
had HDMI nodes in my DT as well as the HDMI cable plugged! Indeed, things seem 
to work as you described. I assumed the i2cmux node would set the right pin 
configuration according to whether we want to read the LCD or HDMI DDC, but 
apparently this is not totally working yet. Glad we figured it out. Adding the 
HDMI nodes to Ventana will probably require to fix this (along with other 
things, probably) first.

Alex.

--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Warren - Nov. 20, 2012, 5:08 a.m.
On 11/19/2012 06:47 PM, Alex Courbot wrote:
> On Tuesday 20 November 2012 09:37:41 Mark Zhang wrote:
>> Great. So this means I2C2 is used for LCD and HDMI both. While HDMI is
>> not plugged, the EDID of LCD will be checked out, right?
> 
> Ahhh. So that's why the LCD DDC was not working during my previous tests - I 
> had HDMI nodes in my DT as well as the HDMI cable plugged! Indeed, things seem 
> to work as you described. I assumed the i2cmux node would set the right pin 
> configuration according to whether we want to read the LCD or HDMI DDC, but 
> apparently this is not totally working yet. Glad we figured it out. Adding the 
> HDMI nodes to Ventana will probably require to fix this (along with other 
> things, probably) first.

That is kinda the whole point of the I2C mux... If it really isn't
working, can you please investigate why. i2cdump or i2cget would be
useful tools for testing this.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alexandre Courbot - Nov. 20, 2012, 5:11 a.m.
On Tuesday 20 November 2012 13:08:20 Stephen Warren wrote:
> On 11/19/2012 06:47 PM, Alex Courbot wrote:
> > On Tuesday 20 November 2012 09:37:41 Mark Zhang wrote:
> >> Great. So this means I2C2 is used for LCD and HDMI both. While HDMI is
> >> not plugged, the EDID of LCD will be checked out, right?
> > 
> > Ahhh. So that's why the LCD DDC was not working during my previous tests -
> > I had HDMI nodes in my DT as well as the HDMI cable plugged! Indeed,
> > things seem to work as you described. I assumed the i2cmux node would set
> > the right pin configuration according to whether we want to read the LCD
> > or HDMI DDC, but apparently this is not totally working yet. Glad we
> > figured it out. Adding the HDMI nodes to Ventana will probably require to
> > fix this (along with other things, probably) first.
> 
> That is kinda the whole point of the I2C mux... If it really isn't
> working, can you please investigate why. i2cdump or i2cget would be
> useful tools for testing this.

Keeping that on my TODO list. By the meantime, better not to add HDMI nodes on 
Ventana. LCD should work ok with this patch though.

Alex.

--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/arch/arm/boot/dts/tegra20-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts
index adc4754..31c9c5c 100644
--- a/arch/arm/boot/dts/tegra20-ventana.dts
+++ b/arch/arm/boot/dts/tegra20-ventana.dts
@@ -10,6 +10,15 @@ 
 		reg = <0x00000000 0x40000000>;
 	};
 
+	host1x {
+		dc@54200000 {
+			rgb {
+				status = "okay";
+				nvidia,ddc-i2c-bus = <&lcd_ddc>;
+			};
+		};
+	};
+
 	pinmux {
 		pinctrl-names = "default";
 		pinctrl-0 = <&state_default>;
@@ -341,7 +350,7 @@ 
 			#size-cells = <0>;
 		};
 
-		i2c@1 {
+		lcd_ddc: i2c@1 {
 			reg = <1>;
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -516,6 +525,99 @@ 
 		bus-width = <8>;
 	};
 
+	backlight: backlight {
+		compatible = "pwm-backlight";
+		brightness-levels = <0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 255>;
+		default-brightness-level = <12>;
+
+		/* resources used by the power sequences */
+		pwms = <&pwm 2 5000000>;
+		pwm-names = "backlight";
+		power-supply = <&vdd_bl_reg>;
+		panel-supply = <&vdd_panel_reg>;
+
+		power-sequences {
+			power-on {
+				/*
+				 * Panel power and LVDS enable.
+				 * TODO: move into the panel device as soon as
+				 * panel framework supports power sequences.
+				 */
+				step0 {
+					type = "regulator";
+					id = "panel";
+					enable;
+				};
+				step1 {
+					type = "gpio";
+					gpio = <&gpio 10 0>;
+					value = <1>;
+				};
+				step2 {
+					type = "delay";
+					delay = <200000>;
+				};
+				/* Backlight sequence. This belongs here. */
+				step3 {
+					type = "regulator";
+					id = "power";
+					enable;
+				};
+				step4 {
+					type = "delay";
+					delay = <10000>;
+				};
+				step5 {
+					type = "pwm";
+					id = "backlight";
+					enable;
+				};
+				step6 {
+					type = "gpio";
+					gpio = <&gpio 28 0>;
+					value = <1>;
+				};
+			};
+
+			power-off {
+				step0 {
+					type = "gpio";
+					gpio = <&gpio 28 0>;
+					value = <0>;
+				};
+				step1 {
+					type = "pwm";
+					id = "backlight";
+					disable;
+				};
+				step2 {
+					type = "delay";
+					delay = <10000>;
+				};
+				step3 {
+					type = "regulator";
+					id = "power";
+					disable;
+				};
+				/* This also belongs to the panel sequence */
+				step4 {
+					type = "delay";
+					delay = <200000>;
+				};
+				step5 {
+					type = "gpio";
+					gpio = <&gpio 10 0>;
+					value = <0>;
+				};
+				step6 {
+					type = "regulator";
+					id = "panel";
+					disable;
+				};
+			};
+		};
+	};
+
 	regulators {
 		compatible = "simple-bus";
 		#address-cells = <1>;
@@ -549,7 +651,7 @@ 
 			enable-active-high;
 		};
 
-		regulator@3 {
+		vdd_panel_reg: regulator@3 {
 			compatible = "regulator-fixed";
 			reg = <3>;
 			regulator-name = "vdd_pnl";
@@ -559,7 +661,7 @@ 
 			enable-active-high;
 		};
 
-		regulator@4 {
+		vdd_bl_reg: regulator@4 {
 			compatible = "regulator-fixed";
 			reg = <4>;
 			regulator-name = "vdd_bl";