static void guitar_reset(s32 ms) { GPIO_DIRECTION_OUTPUT(RESET_PORT, 0); GPIO_SET_VALUE(RESET_PORT, 0); msleep(ms); GPIO_DIRECTION_INPUT(RESET_PORT); GPIO_PULL_UPDOWN(RESET_PORT, 0); msleep(20); return; }
static void guitar_reset(s32 ms) { GPIO_DIRECTION_OUTPUT(GPIO_CTP_RST_PIN, 0); GPIO_SET_VALUE(GPIO_CTP_RST_PIN, 0); msleep(ms); GPIO_DIRECTION_INPUT(GPIO_CTP_RST_PIN); GPIO_PULL_UPDOWN(GPIO_CTP_RST_PIN, 0); msleep(20); return; }
/* * Steps of reset guitar *1. INT脚输出低,延时5ms *2. RESET脚拉低100ms,转输入悬浮态 *3. I2C寻址GUITAR *4. 延时100ms读取0xff(3、4轮询80次,直至成功) *5. Oxff等于0x55则返回成功,否则失败 */ static int guitar_update_mode( struct goodix_ts_data *ts ) { int ret = 1; u8 retry; unsigned char inbuf[3] = {0,0xff,0}; // step 1 GPIO_DIRECTION_OUTPUT(INT_PORT, 0); GPIO_SET_VALUE(INT_PORT, 0); msleep(5); //step 2 guitar_reset(100); for(retry=0;retry < 80; retry++) { //step 3 ret =i2c_write_bytes(ts->client, inbuf, 0); //Test I2C connection. if (ret > 0) { DEBUG_UPDATE("<Set update mode>I2C is OK!\n"); //step 4 msleep(100); ret =i2c_read_bytes(ts->client, inbuf, 3); if (ret > 0) { DEBUG_UPDATE("The value of 0x00ff is 0x%02x\n", inbuf[2]); //step 5 if(inbuf[2] == 0x55) { return success; } } } msleep(10); } DEBUG_UPDATE(KERN_INFO"Detect address %0X\n", ts->client->addr); return fail; }