有没有人做过不同IC的TP兼容,求指点
通过I2C地址区分,两个都去加载,有一个必定失败,把两个都编进去。
你直接编译两个ic驱动就是,MTK已经做好了的,要是不行,你检查一下你的挂载函数看看,我在15上兼容MSG2133和gt868的是没有问题的。
关注这个变量的状态------------------tpd_load_status
我做过 你是哪个平台?
MTK6577 你有msg2133的驱动代码吗? probe函数里边应该怎么写
我在功能机 展讯6800做的 ,但是在展讯6530的时候 两个就不能兼容了 因为两个TP的工作引脚拉高拉低不同。 你先要看看两个TP工作方式是否一样。在GPIO那块是否能写成一样。
你好,直接编译两个ic驱动果然可以,但是请教一下ft5206-probe函数里边这段代码什么意思?这个去掉为什么msg2133就不行了?
buf[0] = 0x00;
i2c_client->addr = (i2c_client->addr& I2C_MASK_FLAG) | I2C_WR_FLAG |I2C_RS_FLAG;
if( i2c_master_send(i2c_client, &buf[0], (1<<8)|1) < 0) {
if (reset_count < 3) {
reset_count++;
goto reset_proc;
}
return -1;
}
这个就是判断ft5206是否挂载成功的,要是失败了就return -1,然后再去挂载下一个。
嗯,谢谢
顺便再问一下,ft5206是读0x00进行判断的,那如果在msg2133-probe中也添加一个判断,应该读哪个寄存器进行判断?
这个值并不是都id的了,每个ic设备的地址是不一样的,要是一样就不能区分了,那个buf[0]就是写TP的0寄存器了,看他有没有应答,要是3次都没有应答就认为失败,对于其他tp也可以这么判断,但不一定是第0寄存器的
这不就是根据I2C可不可以通信来判断吗? 随便读一个寄存器就可以吧? 你的msg2133代码可以给共享下吗?
舞漢(315572706) 14:11:14
什么原理啊。是不是把所有Tp的模块都加载,一个一个的版本号识别,用strncmp比较,匹配好的话,就用全局变量标记,其它的不再比较,在init时就return了
没有配对好的,要注销申请有i2c ?
鍚鍚(876143050) 14:13:54
tp兼容关注这个变量tpd_load_status
舞漢(315572706) 14:14:48
你那个是把所有的TP都放在在一个文件里处理的吧
雨流星(43440994) 14:15:01
设备初始化时进行I2C通讯判断,成功则注册,不成功就注销
舞漢(315572706) 14:15:43
我现在遇到的问题是,注销成功不了。
鍚鍚(876143050) 14:16:03
把所有文件都放在一个文件夹里就好了。
舞漢(315572706) 14:16:29
TP的文件本来就都在一个文件夹里
你们做的是是不是所有的TP模块都insmod了?
舞漢(315572706) 14:19:05
设备初始化时进行I2C通讯判断,成功则注册,不成功就注销,这样做有问题的,有些公司的I2C用的是同一个地址,,那怎么办呢?
只有发相应的命令取版本号,配对版本号才最准确有
maingg(173936797) 14:20:13
再判断PID?
舞漢(315572706) 14:22:31
不是的,TP的IC里有配置文件,发命令读配置文件里的信息,再配对
雨流星(43440994) 14:23:18
在相同的I2C总线上用相同I2C地址的设备,本身就控制不了
舞漢(315572706) 14:23:21
static int goodix_read_version(struct goodix_ts_data *ts, char **version){int ret = -1, count = 0;char *version_data;char *p;*version = (char *)vmalloc(18);version_data = *version;if(!version_data)return -ENOMEM;p = version_data;memset(version_data, 0, sizeof(version_data));version_data[0]=240;if(ts->green_wake_mode)//WAKEUP GREEN MODE{disable_irq(ts->client->irq);sun4i_set_ph21_output(); //gpio_direction_output(INT_PORT, 0);msleep(5);sun4i_set_ph21_int(); //s3c_gpio_cfgpin(INT_PORT, INT_CFG);enable_irq(ts->client->irq);}ret=i2c_read_bytes(ts->client,version_data, 17);if (ret < 0) return ret;version_data[17]='\0';if(*p == '\0')return 0; do {if((*p > 122) || (*p < 48 && *p != 32) || (*p >57 && *p < 65) ||(*p > 90 && *p < 97 && *p != '_'))//check illeqal charactercount++;}while(*++p != '\0' );if(count > 2)return 0;else return 1;}
看这家的
就是version_data了
鍚鍚(876143050) 14:25:11
如果是相同的i2c地址的话,你都注册不上去了,但是同一家的话,只是芯片的升级的话,应该可以写在一个文件里的。
舞漢(315572706) 14:25:11
static ssize_t goodix_debug_version_show(struct device *dev,struct device_attribute *attr, char *buf){int ret = 0;char *version_info = NULL;struct goodix_ts_data *ts;ts = i2c_get_clientdata(i2c_connect_client);if(ts==NULL)return 0;ret = goodix_read_version(ts, &version_info);if(ret <= 0){printk("Read version data failed!\n");vfree(version_info);return 0;}printk("Goodix TouchScreen Version:%s\n", (version_info+1));sprintf(buf,"Goodix TouchScreen Version:%s\n",(version_info+1));vfree(version_info);ret = strlen(buf);return ret;}
舞漢(315572706) 14:26:13
所以要一家一家的IC去访问,不成功就是注销,
相同的IC也是一样的
你们做的是在同一个文件夹,还是不同的文件夹
TP兼容这个问题,你解决了没?
