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;
}