浅析下我们修改的地方和驱动
&i2c4 {
status = "okay"; //这说明是打开 i2c4 ,RK3399的i2c4通道才可以打通
gslx680@40 { // gslx680名字随便取,这里是说在 i2c4 上有个i2c地址是 40 的gslx680名字的设备
compatible = "gslX680"; // 这个很重要,“”里面的名字必须要去驱动的 名字一致,这样才能匹配上我们的驱动!!!名字可以随便取
reg = <0x40>;//就是我们的 触摸屏i2c 地址
touch-gpio = <&gpio1 22 IRQ_TYPE_EDGE_RISING>; //touch-gpio 名字可以随便取,但是要和驱动的名字一致!gpio1 22 就是INT(IO1_C6) 脚,计算方法是, 1-7 是固定的组,后面的22 是因为RK 每一组IO(分A-F类) 每一类 A B C .. F是 0-7 共8个,所以C6 就是 A 的0-7 + B 的 8-15 +C6 的 16-22,也就是说 C6是 22号脚
所以取 gpio1 22 脚,IRQ_TYPE_EDGE_RISING 说明GPIO 是中断类型,并且是 上升沿中断
reset-gpio = <&gpio1 4 GPIO_ACTIVE_LOW>; 同理 复位脚只是普通IO ,只需要设置是默认高低即可 GPIO_ACTIVE_LOW
};
};
分析驱动我们的 驱动编成 .o 文件之后,通过
compatible = "gslX680"; 的名字来和 dts进行匹配
可以看到驱动中
static struct of_device_id gsl_ts_ids[] = {
{.compatible = "gslX680"},
{}
};
compatible 的名字都是一样的,
然后驱动才会进入我们的 probe 函数
static int gsl_ts_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
来我们看驱动代码
添加固件
static void gsl_load_fw(struct i2c_client *client)
{
函数加载我们的固件的,
ptr_fw = GSLX680_FW;
source_len = ARRAY_SIZE(GSLX680_FW);
传gslx680_pad.h 的 GSLX680_FW 进去,触摸屏FAE 调试好 固件给我们,我们替换 GSLX680_FW 数组即可
然后编译,烧写,测试是否准点!
我们可以打开设置指针,确认触摸是否准确!