说明
ROCKCHIP 系列芯片为客户提供了标准 I2C 总线,方便客户实现对不同外接设备的控制和访问。I2C 总线控制器通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。
Rockchip I2C 控制器支持下列功能︰
- 兼容 I2C 与 SMBus 总线
- 仅支持主模式下的 I2C 总线
- 软件可编程时钟频率支持到 400kbps,部分芯片可高达1000kbps
- 支持 7 位和 10 位寻址模式
- 一次中断或轮询至多 32 个字节的数据传输
RK3568有 6 个片上 I2C 控制器,各个 I2C 的使用情况如下表:
配置 I2C 可分为两大步骤:
定义和注册 I2C 设备
定义和注册 I2C 驱动
定义和注册 I2C 设备
在注册 I2C 设备时,需要结构体 i2c_client 来描述 I2C 设备。而在标准 Linux 中,只需要提供相应的 I2C 设备信息,Linux 就会根据所提供的信息构造 i2c_client 结构体。
所提供的 I2C 设备信息以节点的形式写到 DTS 文件中,修改dts,添加新的i2c设备。
在 arch/arm/boot/dts/rk3568-firefly-aioj-mipi101_JDM101014_BE40_A1.dts中添加i2c设备的相关信息:
&i2c1 {
status = "okay";
clock-frequency = <100000>;
focaltech@38 {
status = "okay";
compatible = "focaltech,ft8201";
reg = <0x38>;
//focaltech,power-gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;
focaltech,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;
focaltech,reset-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>;
focaltech,display-coords = <0 0 800 1280>;// x_min, y_min, x_max, y_max
focaltech,max-touch-number = <5>;
//focaltech,have-key;
//focaltech,key-number = <3>;
};
};
定义和注册 I2C 驱动
定义 I2C 驱动
在定义 I2C 驱动之前,用户首先要定义变量 of_device_id 和 i2c_device_id。
of_device_id 用于在驱动中调用 DTS 文件中定义的设备信息,其定义如下所示:
static const struct of_device_id fts_dt_match[] = {
{
.compatible = "focaltech,ft8201", }