[BUG] dw-mipi-dsi-rockchip display corruption with dsi panel

Heiko Stübner heiko at sntech.de
Tue Aug 10 16:11:29 PDT 2021


Hi Peter,

Am Mittwoch, 11. August 2021, 00:31:24 CEST schrieb Peter Geis:
> Good Evening,
> 
> I've been attempting to light off the feiyang fy07024di26a30d panel on
> the rockpro64. This is the official panel from the Pine64 store.
> I've confirmed it works with the downstream kernel on both the rk3399
> and rk3566, but on the mainline driver the display is partially
> corrupted (see attached photo: [1]).
> 
> As you can see, the left half of the display is fine, but the right half
> of the display is corrupted with the pixels smearing horizontally.
> 
> I saw when the panel was added, some additional code was added to
> handle burst mode in the sun6_mipi_dsi driver [2].
> I've seen that the dw-mipi-dsi driver appears to already support burst
> mode and I can't find anything out of place there.
> I also haven't had much success finding anything obviously different in
> the downstream driver vs the upstream driver that would explain this.
> 
> Attached below is the in-progress dts changes for an example of how the
> panel is plugged in.

is that really a dual-dsi panel needing two dsi controllers to drive it?

With that tiny resultion of 1024x600 I definitly wouldn't expect this,
in contrast to say the 2048x1536 dual-dsi displays used in the
Gru-Scarlet ChromeOS tablets.

So maybe just drop the 2nd dsi controller connection in a first step?
Because I really don't think that is the case on the hardware.

The dual-dsi setup means that you have one vop supplying half of its
display data to each of the 2 involved dsi controllers. And you're missing
in fact half of your display data.


Heiko



> I admit, I have little understanding of the mipi-dsi internal workings,
> so I'm reaching out to the experts on how to correct this.
> 
> Thank you for your time,
> Peter Geis
> 
> [1] https://photos.app.goo.gl/LBA9M2WcweGaEb4cA
> [2] https://patchwork.kernel.org/project/linux-arm-kernel/cover/20181116163916.29621-1-jagan@amarulasolutions.com/
> 
> diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
> index 687a5afa5d2c..af55a30297ae 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
> @@ -20,6 +20,13 @@ chosen {
>  		stdout-path = "serial2:1500000n8";
>  	};
>  
> +	backlight: backlight {
> +		compatible = "pwm-backlight";
> +		pwms = <&pwm0 0 1000000 0>;
> +		brightness-levels = <0 4 8 16 32 64 128 255>;
> +		default-brightness-level = <128>;
> +	};
> +
>  	clkin_gmac: external-gmac-clock {
>  		compatible = "fixed-clock";
>  		clock-frequency = <125000000>;
> @@ -69,7 +76,7 @@ diy_led: led-1 {
>  
>  	fan: pwm-fan {
>  		compatible = "pwm-fan";
> -		cooling-levels = <0 150 200 255>;
> +		cooling-levels = <0 100 150 255>;
>  		#cooling-cells = <2>;
>  		fan-supply = <&vcc12v_dcin>;
>  		pwms = <&pwm1 0 50000 0>;
> @@ -220,6 +227,16 @@ vdd_log: vdd-log {
>  		regulator-max-microvolt = <1700000>;
>  		vin-supply = <&vcc5v0_sys>;
>  	};
> +
> +	avdd: avdd {
> +		compatible = "regulator-fixed";
> +		regulator-name = "avdd";
> +		regulator-always-on;
> +		regulator-boot-on;
> +		regulator-min-microvolt = <11000000>;
> +		regulator-max-microvolt = <11000000>;
> +		vin-supply = <&vcc3v3_s0>;
> +	};
>  };
>  
>  &cpu_l0 {
> @@ -428,8 +445,8 @@ regulator-state-mem {
>  
>  			vcc3v0_touch: LDO_REG2 {
>  				regulator-name = "vcc3v0_touch";
> -				regulator-always-on;
> -				regulator-boot-on;
> +//				regulator-always-on;
> +//				regulator-boot-on;
>  				regulator-min-microvolt = <3000000>;
>  				regulator-max-microvolt = <3000000>;
>  				regulator-state-mem {
> @@ -518,8 +535,8 @@ regulator-state-mem {
>  
>  			vcc3v3_s0: SWITCH_REG2 {
>  				regulator-name = "vcc3v3_s0";
> -				regulator-always-on;
> -				regulator-boot-on;
> +//				regulator-always-on;
> +//				regulator-boot-on;
>  				regulator-state-mem {
>  					regulator-off-in-suspend;
>  				};
> @@ -593,6 +610,19 @@ fusb0: typec-portc at 22 {
>  		vbus-supply = <&vcc5v0_typec>;
>  		status = "okay";
>  	};
> +
> +	touch: touchscreen at 5d {
> +		compatible = "goodix,gt911";
> +		reg = <0x5d>;
> +		AVDD28-supply = <&vcc3v0_touch>;
> +		VDDIO-supply = <&vcc3v0_touch>;
> +		interrupt-parent = <&gpio4>;
> +		interrupts = <RK_PD5 IRQ_TYPE_EDGE_FALLING>;
> +		irq-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>;
> +		reset-gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_HIGH>;
> +//		touchscreen-inverted-x;
> +//		touchscreen-inverted-y;
> +	};
>  };
>  
>  &i2s0 {
> @@ -628,6 +658,88 @@ &io_domains {
>  	gpio1830-supply = <&vcc_3v0>;
>  };
>  
> +&mipi_dsi {
> +	status = "okay";
> +	clock-master;
> +
> +	ports {
> +		mipi_out: port at 1 {
> +			reg = <1>;
> +
> +			mipi_out_panel: endpoint {
> +				remote-endpoint = <&mipi_in_panel>;
> +			};
> +		};
> +	};
> +
> +	mipi_panel: panel at 0 {
> +		compatible = "feiyang,fy07024di26a30d";
> +		reg = <0>;
> +		backlight = <&backlight>;
> +		reset-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
> +//		enable-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
> +		width-mm = <154>;
> +		height-mm = <86>;
> +		rotation = <0>;
> +		avdd-supply = <&avdd>;
> +		dvdd-supply = <&vcc3v3_s0>;
> +
> +		display-timings {
> +			native-mode = <&timing0>;
> +			timing0: timing0 {
> +				clock-frequency = <50000000>;
> +				hactive = <1024>;
> +				vactive = <600>;
> +				hfront-porch = <160>;
> +				hback-porch = <160>;
> +				hsync-len = <10>;
> +				vback-porch = <23>;
> +				vfront-porch = <12>;
> +				vsync-len = <1>;
> +				hsync-active = <0>;
> +				vsync-active = <0>;
> +				pixelclk-active = <0>;
> +				de-active = <0>;
> +			};
> +		};
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			port at 0 {
> +				reg = <0>;
> +
> +				mipi_in_panel: endpoint {
> +					remote-endpoint = <&mipi_out_panel>;
> +				};
> +			};
> +
> +			port at 1 {
> +				reg = <1>;
> +
> +				mipi1_in_panel: endpoint at 1 {
> +					remote-endpoint = <&mipi1_out_panel>;
> +				};
> +			};
> +		};
> +	};
> +};
> +
> +&mipi_dsi1 {
> +	status = "okay";
> +
> +	ports {
> +		mipi1_out: port at 1 {
> +			reg = <1>;
> +
> +			mipi1_out_panel: endpoint {
> +				remote-endpoint = <&mipi1_in_panel>;
> +			};
> +		};
> +	};
> +};
> +
>  &pcie0 {
>  	ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>;
>  	num-lanes = <4>;
> 







More information about the Linux-rockchip mailing list