全志的方案目前應用的比較廣泛,而且成本效益高,很多人在入手全志android開發的時候會比較難入手,平闆第一功能是什麼?螢幕!下面給大家介紹一下在全志平台開發螢幕的全過程。
螢幕調試首先要拿到屏廠的螢幕參數,比如下面這個圖檔:
這些參數怎麼用?看下面這些公式:
要調試螢幕,肯定會涉及到驅動開發和适配,驅動代碼的添加必須在核心和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
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中沒有添加驅動,那麼連背光都不亮。下面看驅動代碼:
平常就給出了如下其他平台的操作代碼,需要按照全志平台修改
全志平台修改代碼如下,主要涵蓋是修改這部分代碼,當然數組的形式也改變了,細心的讀者可以重點對比一下,避免踩坑: