天天看点

全志平台Android10 mipi屏幕调试

作者:SC的Linux1024

全志的方案目前应用的比较广泛,而且性价比高,很多人在入手全志android开发的时候会比较难入手,平板第一功能是什么?屏幕!下面给大家介绍一下在全志平台开发屏幕的全过程。

屏幕调试首先要拿到屏厂的屏幕参数,比如下面这个图片:

全志平台Android10 mipi屏幕调试

这些参数怎么用?看下面这些公式:

全志平台Android10 mipi屏幕调试

要调试屏幕,肯定会涉及到驱动开发和适配,驱动代码的添加必须在内核和uboot同时添加,否则会导致屏幕异常,对应的路径为:

内核路径:longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/

Uboot路径:longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/

设备树配置,主要配置disp、lcd0这两个节点:

disp: disp@06000000 {

disp_init_enable = <1>;

disp_mode = <0>;

screen0_output_type = <1>;

screen0_output_mode = <4>;

screen1_output_type = <1>;

screen1_output_mode = <4>;

screen1_output_format = <0>;

screen1_output_bits = <0>;

screen1_output_eotf = <4>;

screen1_output_cs = <257>;

screen1_output_dvi_hdmi = <2>;

screen1_output_range = <2>;

screen1_output_scan = <0>;

screen1_output_aspect_ratio = <8>;

dev0_output_type = <1>;

dev0_output_mode = <4>;

dev0_screen_id = <0>;

dev0_do_hpd = <0>;

dev1_output_type = <4>;

dev1_output_mode = <10>;

dev1_screen_id = <1>;

dev1_do_hpd = <1>;

def_output_dev = <0>;

hdmi_mode_check = <1>;

fb0_format = <0>;

fb0_width = <480>;

fb0_height = <800>;

fb1_format = <0>;

fb1_width = <0>;

fb1_height = <0>;

chn_cfg_mode = <1>;

disp_para_zone = <1>;

dc1sw-supply = <®_dc1sw>;

eldo3-supply = <®_eldo3>;

dcdc1-supply = <®_dcdc1>;

};

lcd0: lcd0@01c0c000 {

lcd_used = <1>;

lcd_driver_name = "mipi_gc9503v";

lcd_backlight = <50>;

lcd_if = <4>;

lcd_x = <480>;

lcd_y = <800>;

lcd_width = <117>;

lcd_height = <39>;

lcd_dclk_freq = <30>;

lcd_pwm_used = <1>;

lcd_pwm_ch = <3>;

lcd_pwm_freq = <50000>;

lcd_pwm_pol = <1>;

lcd_pwm_max_limit = <255>;

lcd_hbp = <60>;

lcd_ht = <580>;

lcd_hspw = <20>;

lcd_vbp = <38>;

lcd_vt = <858>;

lcd_vspw = <8>;

lcd_frm = <0>;

lcd_gamma_en = <0>;

lcd_bright_curve_en = <0>;

lcd_cmap_en = <0>;

deu_mode = <0>;

lcdgamma4iep = <22>;

smart_color = <90>;

lcd_dsi_if = <0>;

lcd_dsi_lane = <2>;

lcd_dsi_format = <0>;

lcd_dsi_te = <0>;

lcd_dsi_eotp = <0>;

lcd_pin_power = "dcdc1";

lcd_pin_power1 = "eldo3";

lcd_power = "dc1sw";

lcd_gpio_0 = <&r_pio PL 11 1 0 3 1>;

pinctrl-0 = <&dsi2lane_pins_a>;

pinctrl-1 = <&dsi2lane_pins_b>;

};

修改相关文件,因为硬件是两线制,所以需要添加dsi2lane_pins_a这个节点,引脚根据原理图添加就可以了,这里引脚都放到这个节点下,就是复用为摄像头功能:

longan/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw10p1-pinctrl.dtsi

dsi2lane_pins_a: dsi2lane@0 {

allwinner,pins = "PD0", "PD1", "PD2", "PD3","PD6", "PD7";

allwinner,pname = "PD0", "PD1", "PD2", "PD3","PD6", "PD7";

allwinner,function = "dsi2lane";

allwinner,muxsel = <4>;

allwinner,drive = <3>;

allwinner,pull = <0>;

};

dsi2lane_pins_b: dsi2lane@1 {

allwinner,pins = "PD0", "PD1", "PD2", "PD3","PD6", "PD7";

allwinner,pname = "PD0", "PD1", "PD2", "PD3","PD6", "PD7";

allwinner,function = "dsi2lane_suspend";

allwinner,muxsel = <7>;

allwinner,drive = <1>;

allwinner,pull = <0>;

};

longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/Makefile

全志平台Android10 mipi屏幕调试

longan/brandy/brandy-2.0/u-boot-2018/configs/sun50iw10p1_defconfig

CONFIG_LCD_SUPPORT_MIPI_GC9503V=y

longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/panels.h

extern __lcd_panel_t mipi_gc9503v_panel;

longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/Makefile

disp-y += lcd/mipi_gc9503v.o

longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/panels.c

&mipi_gc9503v_panel,

longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/panels.c

&mipi_gc9503v_panel,

longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/panels.h

extern struct __lcd_panel mipi_800x1280_panel;

前面这部分只是按照平台的要求去做了配置,更重要的是把驱动写好,如果驱动没写好也会出现各种问题,比如屏幕亮不起来。如果uboot中没有添加驱动,那么连背光都不亮。下面看驱动代码:

平常就给出了如下其他平台的操作代码,需要按照全志平台修改

全志平台Android10 mipi屏幕调试
全志平台Android10 mipi屏幕调试

全志平台修改代码如下,主要涵盖是修改这部分代码,当然数组的形式也改变了,细心的读者可以重点对比一下,避免踩坑:

全志平台Android10 mipi屏幕调试
全志平台Android10 mipi屏幕调试

继续阅读