1、rk3288 android7.1.2 屏通用驱动

        drivers/gpu/drm/panel/panel-simple.c

2、屏幕配置

        方式一:

把timings写在drivers/gpu/drm/panel/panel-simple.c中, 直接以短字符匹配, 该方式为upstream推荐的使用方式.
    Device Tree
        panel: panel {
            compatible = "cptt,claa101wb01";
            ddc-i2c-bus = <&panelddc>;
            power-supply = <&vdd_pnl_reg>;
            enable-gpios = <&gpio 90 0>;
            backlight = <&backlight>;
            delay,prepare = <10>;
            delay,enable = <10>;
            delay,disable = <10>;
            delay,unprepare = <10>;
        };
    drivers/gpu/drm/panel/panel-simple.c:
        static const struct drm_display_mode lg_lp097qx1_spa1_mode = {
            .clock = 205210,
            .hdisplay = 2048,
            .hsync_start = 2048 + 150,
            .hsync_end = 2048 + 150 + 5,
            .htotal = 2048 + 150 + 5 + 5,
            .vdisplay = 1536,
            .vsync_start = 1536 + 3,
            .vsync_end = 1536 + 3 + 1,
            .vtotal = 1536 + 3 + 1 + 9,
            .vrefresh = 60,
        };
        static const struct panel_desc lg_lp097qx1_spa1 = {
            .modes = &lg_lp097qx1_spa1_mode,
            .num_modes = 1,
            .size = {
                .width = 320,
                .height = 187,
            },
        };
        static const struct of_device_id platform_of_match[] = {
            [...]
            }, {
            .compatible = "lg,lp097qx1-spa1",
            .data = &lg_lp097qx1_spa1,
            }, {
            [...]
        }

        方式二:

使用display-timings结构, 直接把timing写在dts文件中, 这类适用于简单的屏配置
        panel: panel {
            compatible = "simple-panel-dsi";
            ddc-i2c-bus = <&panelddc>;
            power-supply = <&vdd_pnl_reg>;
            enable-gpios = <&gpio 90 0>;
            backlight = <&backlight>;
            dsi,flags = <MIPI_DSI_MODE_VIDEO |
            MIPI_DSI_MODE_VIDEO_BURST |
            MIPI_DSI_MODE_VIDEO_SYNC_PULSE>;
            dsi,format = <MIPI_DSI_FMT_RGB888>;
            dsi,lanes = <4>;
            delay,prepare = <10>;
            delay,enable = <10>;
            delay,disable = <10>;
            delay,unprepare = <10>;
            display-timings {
                native-mode = <&timing0>;
                timing0: timing0 {
                    clock-frequency = <160000000>;
                    hactive = <1200>;
                    vactive = <1920>;
                    hback-porch = <21>;
                    hfront-porch = <120>;
                    vback-porch = <18>;
                    vfront-porch = <21>;
                    hsync-len = <20>;
                    vsync-len = <3>;
                    hsync-active = <0>;
                    vsync-active = <0>;
                    de-active = <0>;
                    pixelclk-active = <0>;
                };
            };
        };

        方式三:

不填写任何timing, 直接使用edid来获取timing
        panel: panel {
            compatible = "simple-panel-dsi";
            //compatible = "simple-panel";
            ddc-i2c-bus = <&panelddc>;
            power-supply = <&vdd_pnl_reg>;
            enable-gpios = <&gpio 90 0>;
            backlight = <&backlight>;
            delay,prepare = <10>;
            delay,enable = <10>;
            delay,disable = <10>;
            delay,unprepare = <10>;
        };

示例代码:

/dts-v1/;
    #include "rk3399-excavator-sapphire.dtsi"
    #include "rk3399-android.dtsi"
    #include "rk3399-vop-clk-set.dtsi"
    
    / {
    	model = "Rockchip RK3399 Excavator Board edp (Android)";
    	compatible = "rockchip,android", "rockchip,rk3399-excavator-edp", "rockchip,rk3399";
    
    	edp_panel: edp-panel {
    		compatible = "auo,b125han03", "panel-simple";
    		status = "okay";
    		backlight = <&backlight>;
    		power-supply = <&vcc_lcd>;
    		enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
    		pinctrl-names = "default";
    		pinctrl-0 = <&lcd_panel_reset>;
    		ports {
    			panel_in_edp: endpoint {
    				remote-endpoint = <&edp_out_panel>;
    			};
    		};
    	};
    	
    	vcc_lcd: vcc-lcd {
    		compatible = "regulator-fixed";
    		regulator-name = "vcc_lcd";
    		//gpio = <&gpio4 30 GPIO_ACTIVE_HIGH>;
    		gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
    		startup-delay-us = <20000>;
    		enable-active-high;
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-boot-on;
    		vin-supply = <&vcc5v0_sys>;
    	};
    
    	panel: panel {
    		compatible = "simple-panel";
    		backlight = <&backlight>;
    		power-supply = <&vcc_lcd>;
    		enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
    		init-delay-ms = <120>;
    		prepare-delay-ms = <500>;
    		enable-delay-ms = <500>;
    
    
    		ports {
    			panel_in: endpoint {
    				remote-endpoint = <&edp_out>;
    			};
    		};
    	};
    
    	test-power {
    		status = "okay";
    	};
    
    	rt5651-sound {
    		status = "okay";
    	};
    
    	hdmiin-sound {
    		compatible = "rockchip,rockchip-rt5651-tc358749x-sound";
    		rockchip,cpu = <&i2s0 &rt5651>;
    		rockchip,codec = <&rt5651 &tc358749x>;
    		status = "disabled";
    	};
    };
    
    &backlight {
    	status = "okay";
    };
    /*
    &edp {
    	status = "disabled";
    	force-hpd;
    
    	ports {
    		port@1 {
    			reg = <1>;
    
    			edp_out: endpoint {
    				remote-endpoint = <&panel_in>;
    			};
    		};
    	};
    };
    */
    
    &display_subsystem {
    	status = "okay";
    
    	ports = <&vopb_out>, <&vopl_out>;
    	logo-memory-region = <&drm_logo>;
    
    	route {
    		route_hdmi: route-hdmi {
    			status = "disabled";
    			logo,uboot = "logo.bmp";
    			logo,kernel = "logo_kernel.bmp";
    			logo,mode = "fullscreen";
    			charge_logo,mode = "center";
    			connect = <&vopl_out_hdmi>;
    		};
    
    		route_edp: route-edp {
    			status = "okay";
    			logo,uboot = "logo.bmp";
    			logo,kernel = "logo_kernel.bmp";
    			logo,mode = "fullscreen";
    			charge_logo,mode = "center";
    			connect = <&vopb_out_edp>;
    		};
    	};
    };
    
    &edp {
    	status = "okay";
    	force-hpd;
    	ports {
    		edp_out: port@1 {
    			reg = <1>;
    			#address-cells = <1>;
    			#size-cells = <0>;
    
    			edp_out_panel: endpoint@0 {
    				reg = <0>;
    				remote-endpoint = <&panel_in_edp>;
    			};
    		};
    	};
    };
    
    &edp_in_vopb {
    	status = "okay";
    };
    
    &edp_in_vopl {
    	status = "disabled";
    };
    
    &hdmi {
    	status = "disabled";
    };
    
    
    &hdmi_in_vopb {
    	status = "disabled";
    };
    
    &rt5651 {
    	status = "disabled";
    };
    
    &cdn_dp {
    	status = "disabled";
    	extcon = <&fusb0>;
    	phys = <&tcphy0_dp>;
    };
    
    &dp_in_vopl {
    	status = "disabled";
    };
    
    &i2s2 {
    	status = "okay";
    };
    
    &i2c1 {
    	status = "okay";
    /*
    	gsl3673: gsl3673@40 {
    		compatible = "GSL,GSL3673";
    		reg = <0x40>;
    		screen_max_x = <1536>;
    		screen_max_y = <2048>;
    		irq_gpio_number = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;
    		rst_gpio_number = <&gpio4 22 GPIO_ACTIVE_HIGH>;
    	};
    */
    	tc358749x: tc358749x@0f {
    		compatible = "toshiba,tc358749x";
    		reg = <0x0f>;
    	//	power-gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
    	//	power18-gpios = <&gpio2 9 GPIO_ACTIVE_HIGH>;
    		power33-gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>;
    //		csi-ctl-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;
    		stanby-gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>;
    		reset-gpios = <&gpio4 4 GPIO_ACTIVE_HIGH>;
    		int-gpios = <&gpio4 5 GPIO_ACTIVE_HIGH>;
    		pinctrl-names = "default";
    		pinctrl-0 = <&hdmiin_gpios>;
    		status = "disabled";
    	};
    
    };
    
    &i2c4 {
            status = "okay";
            i2c-scl-rising-time-ns = <150>;
            i2c-scl-falling-time-ns = <30>;
            clock-frequency = <400000>;
    
            gt9xx: gt9xx@14 {
                    compatible = "goodix,gt9xx";
                    reg = <0x14>;
                    touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;
                    reset-gpio = <&gpio4 22 GPIO_ACTIVE_HIGH>;
                    max-x = <2560>;
                    max-y = <1600>;
                    tp-size = <89>;
                    tp-supply = <&vcc3v0_tp>;
            };
    };
    
    &i2c6 {
    	cw2015@62 {
    		status = "disabled";
    		compatible = "cw201x";
    		reg = <0x62>;
    		bat_config_info = <0x15 0x42 0x60 0x59 0x52 0x58 0x4D 0x48
    				   0x48 0x44 0x44 0x46 0x49 0x48 0x32 0x24
    				   0x20 0x17 0x13 0x0F 0x19 0x3E 0x51 0x45
    				   0x08 0x76 0x0B 0x85 0x0E 0x1C 0x2E 0x3E
    				   0x4D 0x52 0x52 0x57 0x3D 0x1B 0x6A 0x2D
    				   0x25 0x43 0x52 0x87 0x8F 0x91 0x94 0x52
    				   0x82 0x8C 0x92 0x96 0xFF 0x7B 0xBB 0xCB
    				   0x2F 0x7D 0x72 0xA5 0xB5 0xC1 0x46 0xAE>;
    		monitor_sec = <5>;
    		virtual_power = <0>;
    	};
    };
    
    &isp0 {
    	status = "okay";
    };
    
    &isp1 {
    	status = "okay";
    };
    
    &isp0_mmu {
    	status = "okay";
    };
    
    &isp1_mmu {
    	status = "okay";
    };
    
    &vopb {
    	assigned-clocks = <&cru DCLK_VOP0_DIV>;
    	assigned-clock-parents = <&cru PLL_CPLL>;
    };
    
    &vopl {
    	assigned-clocks = <&cru DCLK_VOP1_DIV>;
    	assigned-clock-parents = <&cru PLL_VPLL>;
    };
    
    &pcie_phy {
    	status = "okay";
    };
    
    &pcie0 {
    	ep-gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
    	num-lanes = <4>;
    	pinctrl-names = "default";
    	pinctrl-0 = <&pcie_clkreqn>;
    	status = "okay";
    };
    
    &hdmi_dp_sound {
    	status = "disabled";
    };
    &pinctrl {
    	lcd-panel {
    		lcd_panel_reset: lcd-panel-reset {
    			rockchip,pins = <2 5 RK_FUNC_GPIO &pcfg_pull_up>;
    		};
    	};
    
    	hdmiin {
    		hdmiin_gpios: hdmiin_gpios {
    		rockchip,pins =
    				//<2 5 RK_FUNC_GPIO &pcfg_pull_none>,
    				<2 6 RK_FUNC_GPIO &pcfg_pull_none>,
    				<2 7 RK_FUNC_GPIO &pcfg_pull_none>,
    				<2 8 RK_FUNC_GPIO &pcfg_pull_none>,
    				<2 9 RK_FUNC_GPIO &pcfg_pull_none>,
    				<2 12 RK_FUNC_GPIO &pcfg_pull_none>;
    		};
    	};
    };

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐