硬件电路分析
RK3568 CPU通过I2C与触控板外设wdt87xx连接。
首先要根据电路图获取如下I2C的信息:
项目 | Value |
---|---|
接在哪个I2C | i2c1 |
I2C 寄存器地址 | 0x2c |
HID 地址 | 0x20 |
中断 | B5 |
1、接在哪个I2C
如图,1接在I2C1:
2、使用哪个GPIO引脚接收触控板的中断
如图:
CPU使用的是GPIO 0 B5引脚来接收触控板的中断
3、I2C1的寄存器地址0x2c
这个需要硬件工程师给出。
可以通过i2cdetect -r 1检测一下。
root@RK356X:/# i2cdetect -r 1
I2C1的0X2C位置挂载了一个I2C设备,就是本次的WD87XX触控。
I2C2的0X50位置挂载了一个I2C设备,这是RK628D。
4、HID 地址
查3568手册确认地址。
配置设备树
735 &i2c1 {
736 status = “okay”;
737
738 i2c-scl-rising-time-ns = <345>;
739 i2c-scl-falling-time-ns = <11>;
740 clock-frequency = <400000>;
741
742 touchpad: touchpad@2c {
743 compatible = “hid-over-i2c”;
744 interrupt-parent = <&gpio0>;
745 interrupts = <RK_PB5 IRQ_TYPE_LEVEL_LOW>;
746 pinctrl-names = “default”;
747 pinctrl-0 = <&touchpad_irq_gpio>;
748 reg = <0x2c>;
749 hid-descr-addr = <0x0020>;
750 };
751 };
其中,touchpad_irq_gpio定义:
491 touchpad {
492 touchpad_irq_gpio: touchpad-irq-gpio {
493 rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
494 };
495 };
为什么要这么配?
1、确定TOUCHPAD的寄存器地址REG=2c
2、确定TP挂在I2C1,因此要修改I2C的信息,通过 &i2c1来引用并加以修改。
3、和供应商确认支持的驱动程序是hid-over-i2c
4、HID地址可以向供应商索取相关的模板。
三、驱动工作
1、drivers hid hid-over-i2c 在工作
2、中断
cat /proc/interrupts| grep hid-over-i2c
122: 2 0 0 0 gpio0 13 Level hid-over-i2c
证实其工作正常。触发产生了中断。