linux设备树-LCD驱动程序

发布时间 2023-05-03 23:55:18作者: 大奥特曼打小怪兽

一、修改设备树

1.1 硬件接线

1.2 修改s3c2440-pinctrl.dtsi

修改内核arch/arm/boot/dts/s3c2440-pinctrl.dtsi文件,在pinctrl节点下添加两个引脚配置节点:

lcd_pinctrl: lcd_pinctrl {
    samsung,pins = "gpc-8", "gpc-9", "gpc-10", "gpc-11", "gpc-12", "gpc-13", "gpc-14", "gpc-15",
            "gpd-0", "gpd-1", "gpd-2", "gpd-3", "gpd-4", "gpd-5", "gpd-6", "gpd-7",
            "gpd-8", "gpd-9", "gpd-10", "gpd-11", "gpd-12", "gpd-13", "gpd-14", "gpd-15",
            "gpc-1", "gpc-2", "gpc-3", "gpc-4";
    samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
};

lcd_backlight: lcd_backlight {
    samsung,pins = "gpg-4";
    samsung,pin-function = <3>;
};

lcd_pinctrl:配置GPC8、GPC9、GPC10等引脚功能为LCD。

lcd_backlight:配置GPG4引脚功能为LCD电源。

1.3 修改s3c2440-smdk2440.dts

在内核arch/arm/boot/dts/s3c2440-smdk2440.dts文件中添加fb0设备节点:

fb0: fb@4d000000{
    compatible = "tq2440,lcd";
    reg = <0x4D000000 0x60>;
    interrupts = <0 0 16 3>;
    clocks = <&clocks HCLK_LCD>;
    clock-names = "lcd";
    pinctrl-names = "default";
    pinctrl-0 = <&lcd_pinctrl &lcd_backlight>;
    status = "okay";

    lcdcon5 = <0xb09>;
    type = <0x60>;
    width = /bits/ 16 <480>;
    height = /bits/ 16 <272>;
    pixclock = <100000>;
    xres = /bits/ 16 <480>;
    yres = /bits/ 16 <272>;
    bpp = /bits/ 16 <16>;
    left_margin = /bits/ 16 <2>;
    right_margin =/bits/ 16  <2>;
    hsync_len = /bits/ 16 <41>;
    upper_margin = /bits/ 16 <2>;
    lower_margin = /bits/ 16 <2>;
    vsync_len = /bits/ 16 <10>;
};

当platform设备和驱动匹配,就会调用pinctrl_bind_pins函数,该函数通过调用pinctrl_lookup_state函数获取状态名为default和init的状态,并分别保存到default_state和init_state成员变量中。如果找不到init状态,则选择default状态作为设备引脚的状态。

二、修改驱动程序

 

参考文章

[1]linux驱动移植-LCD驱动基础

[2]linux驱动移植-LCD设备驱动

[3]linux驱动移植-LCD触摸屏设备驱动

[4]第六课:在LCD驱动中使用设备树

[5]基于设备树的TQ2440触摸屏驱动移植

[6]tq2440_dt/drivers/video/fbdev/s3c2410fb.c

[7] tq2440_dt/arch/arm/boot/dts/s3c2440-tq2440-dt.dts

[8]tq2440_dt/arch/arm/boot/dts/s3c2440-pinctrl.dtsi

[9]Mini2440裸机开发之LCD基础

[10]Mini2440裸机开发之LCD编程(GB2312、ASCII字库制作)