Linux驱动开发LCD

Posted XXX_UUU_XXX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux驱动开发LCD相关的知识,希望对你有一定的参考价值。

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尽量和半导体厂商的官方开发板一致。

 

以上是关于Linux驱动开发LCD的主要内容,如果未能解决你的问题,请参考以下文章

Linux驱动开发LCD

Linux驱动开发LCD

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真

液晶屏幕的驱动方式是啥?

iTOP-4412开发板驱动lcd显卡以及linux开机log的修改方法

linux驱动开发:用户空间操作LCD显示简单的图片