天天看點

全志平台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螢幕調試

繼續閱讀