当前位置: 首页 > 工具软件 > LCD-Linux > 使用案例 >

【Linux驱动开发】LCD

董建茗
2023-12-01

framebuffer,帧缓冲fb是一种机制,将系统中所有跟显示有关的硬件和软件集合起来,虚拟出一个fb设备,LCD驱动生成/dev/fbx的设备,应用程序通过访问/dev/fbx设备即可以访问LCD。

不同分辨率的LCD屏幕eLCDIF控制器驱动代码相同,只需要修改好对应的屏幕参数。

Linux内核将所有framebuffer抽象为一个fb_info结构体,fb_info包含framebuffer设备的完整属性和操作集合,编写LCD驱动就是构建fb_info并向系统注册fb_info的过程。

设备树文件内容

/ {
    backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm1 0 5000000>;
		brightness-levels = <0 4 8 16 32 64 128 255>;
		default-brightness-level = <7>;
		status = "okay";
	};
};

&iomuxc {   
 	imx6ul-evk {
        pinctrl_lcdif_dat: lcdifdatgrp {
			fsl,pins = <
				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x49
				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x49
				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x49
				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x49
				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x49
				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x49
				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x49
				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x51
				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x49
				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x49
				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x49
				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x49
				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x49
				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x49
				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x49
				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x51
				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x49
				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x49
				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x49
				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x49
				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x49
				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x49
				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x49
				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x51
			>;
		};

		pinctrl_lcdif_ctrl: lcdifctrlgrp {
			fsl,pins = <
				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x49
				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x49
				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x49
				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x49
			>;
		};

		pinctrl_pwm1: pwm1grp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
			>;
		};
    };
};

&iomuxc_snvs {
    imx6ul-evk {
		pinctrl_lcdif_reset: lcdifresetgrp {
            fsl,pins = <
                /* used for lcd reset */
                MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09  0x49
                >;
        };
    };
};

&pwm1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm1>;
	status = "okay";
};

&lcdif {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_lcdif_dat
		         &pinctrl_lcdif_ctrl
                 &pinctrl_lcdif_reset>;
	display = <&display0>;        
	status = "okay";

        display0: display {               /* LCD 属性信息 */
                bits-per-pixel = <16>;    /* 一个像素占用几个 bit */
                bus-width = <24>;         /* 总线宽度 */

                display-timings {
                        native-mode = <&timing0>;     /* 时序信息 */
                        timing0: timing0 {
                        clock-frequency = <35500000>; /* LCD 像素时钟,单位 Hz */
                        hactive = <800>;              /* LCD X 轴像素个数 */
                        vactive = <480>;              /* LCD Y 轴像素个数 */
                        hfront-porch = <210>;         /* LCD hfp 参数 */
                        hback-porch = <46>;           /* LCD hbp 参数 */
                        hsync-len = <20>;             /* LCD hspw 参数 */
                        vback-porch = <23>;           /* LCD vbp 参数 */
                        vfront-porch = <22>;          /* LCD vfp 参数 */
                        vsync-len = <3>;              /* LCD vspw 参数 */

                        hsync-active = <0>;           /* hsync 数据线极性 */
                        vsync-active = <0>;           /* vsync 数据线极性 */
                        de-active = <1>;              /* de 数据线极性 */
			            /* rgb to hdmi: pixelclk-ative should be set to 1 */
                        pixelclk-active = <0>;        /* clk 数据线极性 */
                        };
                };
        };
};
  • 节点backlight,描述Linux系统使用那个pwm控制LCD背光
  • 子节点pinctrl_lcdif_dat,为RGB LCD的24根数据线配置项。
  • 子节点pinctrl_lcdif_ctrl,RGB LCD的4根控制线配置项,包括CLK、ENABLE、VSYNC和 HSYNC。
  • 子节点pinctrl_pwm1,LCD背光PWM引脚配置项。LCD的背光IO尽量和半导体厂商的官方开发板一致。

 

 类似资料: