《RK3588-kernel中RK806驱动代码解析》主要涉及RK806电源管理集成电路(PMIC)的驱动实现,该驱动代码分布在`kernel-5.10\drivers\mfd\rk806-core.c`和`kernel-5.10\drivers\mfd\rk806-spi.c`两个文件中。本文将深入解析这两个文件中的关键功能和流程。
**SPI初始化与通信**
`rk806-spi.c`文件主要负责初始化SPI通信接口,设置SPI接口的基本配置,并注册SPI读写函数。初始化过程包括对SPI设备的配置以及调用`rk806_device_init`函数,将控制权转移到`rk806-core.c`中的核心驱动代码。
**寄存器初始化**
`rk806-core.c`文件中,初始化了寄存器数组`rk806_reg_fields`,用于管理和配置RK806 PMIC的各个寄存器。例如,会读取芯片信息,如芯片名称、版本和OTP版本。对于版本为VERSION_AB的芯片,会设置寄存器位ABNORDET_EN为0x01。
**DTS属性配置**
驱动代码还解析设备树(Device Tree,DTS)中的属性,以配置PMIC的工作参数。例如,设置关机电压阈值、过温关机和高温预警温度、强制关机使能等。此外,还会读取`low_voltage_threshold`、`shutdown_voltage_threshold`、`shutdown_temperature_threshold`和`hotdie_temperature_threshold`等属性,根据DTS中的设置来调整相关参数。
**中断与事件处理**
中断配置是驱动的重要部分,包括设置中断有效极性、添加中断资源到系统,并绑定中断事件。例如,设置中断事件的中断状态寄存器和中断处理程序。中断事件包括电源键按下和释放等。
**驱动组件**
驱动还包含了其他相关驱动的绑定,如`rk806-pinctrl`用于配置PMIC引脚功能,`rk805-pwrkey`处理电源按键中断事件,而`rk806-regulator`用于管理电源开关和电压设定。`rk805-pwrkey`资源包括电源键按下和释放的中断事件。
**Pinctrl初始化**
在Pinctrl初始化过程中,读取DTS中的`pinctrl-names`,并对PMIC寄存器进行配置。
**电源管理**
驱动还涉及到电源管理,例如,根据`force_shutdown_enable`设置欠压时PMIC强制关机,以及根据`hotdie_temperature_threshold`设置过温关机的温度值。
**中断注册与处理**
注册了低电中断事件,并预留了中断处理函数的接口,虽然当前驱动中尚未实现具体的中断处理。
**sysfs接口**
驱动创建了sysfs文件系统中的文件节点,如`rk806single`,提供了对PMIC的调试接口。`rk806_master_store`函数用于处理对sysfs文件的写入操作,允许外部对PMIC进行控制。
RK3588_kernel中的RK806驱动主要关注SPI通信、寄存器配置、DTS属性解析、中断管理、电源管理以及sysfs接口的实现,为RK806 PMIC提供了全面的软件支持。这些功能确保了PMIC能够正常工作,并提供了灵活的配置和调试选项。