Part Number:DS90UB941AS-Q1
结构如下图:
目前Linux系统启动后,通过脚本命令写UB941/8的寄存器,屏幕已经正常显示。
现在要把脚本命令转换成Linux驱动,执行时发现UB941的寄存器能正常写入,但是UB948的寄存器写是失败的。
测试发现在机器完全启动后,也就是等7~8秒才能去写UB948的寄存器(948的I2C地址才会显现出来)。
下面是我写的寄存器:
#define UB941_ADDR 0x1a
#define UB948_ADDR 0x2c
ds90ub94x_write_reg(UB941_ADDR, 0x01, 0x0F); /* Reset ub941, Disable DSI */
ds90ub94x_write_reg(UB941_ADDR, 0x5B, 0x0C); /* FPD3_TX_MODE=Single or Replicate, Align on DE */
ds90ub94x_write_reg(UB941_ADDR, 0x4F, 0x8C); /* Set DSI_CONTINUOUS_CLOCK, 4 lanes, DSI Port 0 */
ds90ub94x_write_reg(UB941_ADDR, 0x40, 0x04); /* Select DSI Port 0 digital registers */
ds90ub94x_write_reg(UB941_ADDR, 0x41, 0x21); /* Select DSI_CONFIG_1 register */
ds90ub94x_write_reg(UB941_ADDR, 0x42, 0x60); /* Set DSI_CONFIG_1: DSI_VS_POLARITY=DSI_HS_POLARITY=1 */
ds90ub94x_write_reg(UB941_ADDR, 0x40, 0x04); /* Select DSI Port 0 digital registers */
ds90ub94x_write_reg(UB941_ADDR, 0x41, 0x05); /* Select DPHY_SKIP_TIMING register */
ds90ub94x_write_reg(UB941_ADDR, 0x42, 0x16); /* Write DPHY_SKIP_TIMING: TSKIP_CNT value */
ds90ub94x_write_reg(UB941_ADDR, 0x01, 0x00); /* Enable DSI */
ds90ub94x_write_reg(UB941_ADDR, 0x1E, 0x01); /* Select FPD-Link III Port 0 */
ds90ub94x_write_reg(UB941_ADDR, 0x03, 0x9A); /* Enable I2C_PASSTHROUGH, FPD-Link III Port 0 */
ds90ub94x_write_reg(UB948_ADDR, 0x01, 0x03); /* Reset ub948 */
ds90ub94x_write_reg(UB948_ADDR, 0x1E, 0x90); /* lcd_led_pwm, Pull up*/
ds90ub94x_write_reg(UB948_ADDR, 0x1F, 0x09); /* lcd_led_en, Pull up */
请问是否和寄存器值有关系呢?
Kailyn Chen:
您好,我对Linux 驱动不是很熟悉,但是根据您的描述,我认为和寄存器的值没有关系. 上电初始化的过程应该都是一样的,.
脚本命令换成linux驱动之后, 7~8秒才能写948的寄存器,除了有延迟之外,屏幕能正常显示吗?
,
relax:
屏幕是能正常显示的。
目前临时的解决方法:是在驱动要写948的位置加上定时,10S后再去写948的寄存器。