硬件平台:RK3128
Android版本:6.0
Android版本:6.0
Kernel版本:3.10.92
I2C转UART芯片SC16IS752,支持I2C转接成双UART口,ttySC0和ttySC1,调试时发现,ttySC0可用,但ttySC1始终不可用,代码是kernel 3.16内核代码,后来找到原因,是因为在读写寄存器时有问题。
原代码:
regmap_raw_read(s->regmap, SC16IS7XX_RHR_REG, s->buf, rxlen);
regmap_raw_write(s->regmap, SC16IS7XX_THR_REG, s->buf, to_send);
修改:
regmap_raw_read(s->regmap, (SC16IS7XX_RHR_REG << SC16IS7XX_REG_SHIFT) | port->line, s->buf, rxlen);
regmap_raw_write(s->regmap, (SC16IS7XX_THR_REG << SC16IS7XX_REG_SHIFT) | port->line, s->buf, to_send);
port->line即是uart num,读写寄存器时必须指定端口。
说明linux 3.16内核中此处代码有问题,但是在linux 4.x的版本中已经修正。