Platform: ROCKCHIP
Chip: RK3399
OS: Android7.1.2
Kernel: 4.4.126
调试步骤
1.增加驱动,Viewsonic_I2C_Driver.c
2.修改Kconfig与Makefile以及defconfig(程序所用的),扩展io芯片是PCA9534:放开 PCA953X的宏
--- a/kernel/arch/arm64/configs/rockchip_defconfig
+++ b/kernel/arch/arm64/configs/rockchip_defconfig
-809,3 +809,6 @@ CONFIG_CRYPTO_GHASH_ARM64_CE=y
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_CRC32_ARM64=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
+CONFIG_TOUCHSCREEN_VIEWSONIC=y
No newline at end of file
diff --git a/kernel/drivers/input/touchscreen/Kconfig b/kernel/drivers/input/touchscreen/Kconfig
old mode 100644
new mode 100755
index 4f569b3..3213bf2
--- a/kernel/drivers/input/touchscreen/Kconfig
+++ b/kernel/drivers/input/touchscreen/Kconfig
@@ -1160,4 +1160,11 @@ config TOUCHSCREEN_VTL_CT36X
config TOUCHSCREEN_GT1X
tristate "GT1X touchscreens support"
+config TOUCHSCREEN_VIEWSONIC
+ bool "ViewSonic Electromagne
tic Pen I2C Driver "
+ default n
+ help
+ ViewSonic Electromagnetic Pen I2C Driver Integration for Android
+
+
endif
diff --git a/kernel/drivers/input/touchscreen/Makefile b/kernel/drivers/input/touchscreen/Makefile
old mode 100644
new mode 100755
index a56eba4..3c9e774
--- a/kernel/drivers/input/touchscreen/Makefile
+++ b/kernel/drivers/input/touchscreen/Makefile
@@ -99,5 +99,6 @@ obj-$(CONFIG_TOUCHSCREEN_TPS6507X) += tps6507x-ts.o
obj-$(CONFIG_TOUCHSCREEN_ZFORCE) += ***orce_ts.o
obj-$(CONFIG_TOUCHSCREEN_COLIBRI_VF50) += colibri-vf50-ts.o
obj-$(CONFIG_TOUCHSCREEN_ROHM_BU21023) += rohm_bu21023.o
+obj-$(CONFIG_TOUCHSCREEN_VIEWSONIC) += Viewsonic_I2C_Driver.o
obj-$(CONFIG_TOUCHSCREEN_VTL_CT36X) += vtl_ts/
3.在板级dts上根据原理图找在哪个i2c下以及IRQ RST对应的管脚
1)多了一个
电源管脚,故在源码Viewsonic_I2C_Driver.c里添加配置:看源码里并没有对电源脚进行操作,故需要把电源脚拉高
2)可以看出电磁屏以及PCA9534芯片都挂在i2c4上
3)RST脚与POWER脚是pca 9534扩展出来的IO脚;
PCA9534 i2c地址是linux代码里面的是实际的除以2故为0X20
4.故板级dts上添加如下
设备树里添加扩展IO的节点pca9534_gpio以及电磁屏的节点viewsonic
&i2c4{
status = "okay";
/*扩展IO配置*/
pca9534_gpio:pca9534_gpio@20 {
compatible = "nxp,pca9534";
reg = <0x20>;
#gpio-cells = <0x2>;
pinctrl-names = "default";
//interrupt-parent = <&gpio3>;
//interrupts = <23 IRQ_TYPE_LEVEL_LOW>;
status = "okay";
};
//viewsonic 电磁屏
viewsonic:viewsonic@37{
compatible = "viewsonic_i2c";
reg = <0x37>;
power_gpio = <&pca9534_gpio 2 GPIO_ACTIVE_HIGH>;
irq_gpio = <&gpio1 23 IRQ_TYPE_LEVEL_LOW>;//gpio1_c7
reset_gpio = <&pca9534_gpio 1 GPIO_ACTIVE_LOW>;
//cfg_gpio = <&gpio7 10 IRQ_TYPE_LEVEL_LOW>;//<&touch_cfg_gpio>;//
status = "okay";
};
};
原作者:泡芙44