一、现象:今天更新了一个新版本的buildroot linux sdk ,调试两个mipi 屏幕,这两个屏幕之前在其他的sdk都调好了的,所有直接把配置搬过来。但是有一个屏幕可以正常显示,有一个屏幕开机时候不显示,开机后按power 按键休眠唤醒就可以显示,真是百思不得其解。
二、经过分析,出现这样的问题原因是reset gpio 被复用了,有的屏幕内部有reset了,有的屏幕没有reset。在u-boot运行的时候u-boot\drivers\video\drm\rockchip_panel.c 里面就对mipi 屏幕进行初始化了,如果在kernel里面才正确的配置gpio,那就会出现这种情况。 下面的LCD_RST_1V8 连接到GPIO1_B5.
三、解决方法一,
root@xxx:/# io -4 -r 0xff14000c
ff14000c: 00001111 发现是被设置成flash_wrn。
在uboot里面强制配置复用的脚是gpio,writel(0xf00000, 0xff14000c) ,如何得来呢,看datasheet。
二、解决方案二,在kernel下的dts里面增加下面的代码,设置gpio1_b5 默认为gpio。实际测试,在开机运行后uboot里面处置化mipi屏幕也是可以的。正常天亮mipi屏幕。
&dsi {status = "okay";rockchip,lane-rate = <600>;panel@0 {compatible = "simple-panel-dsi";status = "okay";reg = <0>;power-supply = <&vcc3v3_lcd>;backlight = <&backlight>;pinctrl-names = "default";pinctrl-0 = <&mipilcd_rst_gpio>;&pinctrl {mipilcd_ctl {mipilcd_rst_gpio: mipilcd-rst-gpioo {rockchip,pins =<1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;};};
};