struct auo_pixcir_ts {
        struct i2c_client       *client;
        struct input_dev        *input;
+       const struct auo_pixcir_ts_platdata *pdata;
        char                    phys[32];
 
        /* special handling for touch_indicate interupt mode */
                                   struct auo_point_t *point)
 {
        struct i2c_client *client = ts->client;
-       const struct auo_pixcir_ts_platdata *pdata = client->dev.platform_data;
+       const struct auo_pixcir_ts_platdata *pdata = ts->pdata;
        uint8_t raw_coord[8];
        uint8_t raw_area[4];
        int i, ret;
 static irqreturn_t auo_pixcir_interrupt(int irq, void *dev_id)
 {
        struct auo_pixcir_ts *ts = dev_id;
-       struct i2c_client *client = ts->client;
-       const struct auo_pixcir_ts_platdata *pdata = client->dev.platform_data;
+       const struct auo_pixcir_ts_platdata *pdata = ts->pdata;
        struct auo_point_t point[AUO_PIXCIR_REPORT_POINTS];
        int i;
        int ret;
                                           int int_setting)
 {
        struct i2c_client *client = ts->client;
-       struct auo_pixcir_ts_platdata *pdata = client->dev.platform_data;
+       const struct auo_pixcir_ts_platdata *pdata = ts->pdata;
        int ret;
 
        ret = i2c_smbus_read_byte_data(client, AUO_PIXCIR_REG_INT_SETTING);
 
        msleep(200);
 
+       ts->pdata = pdata;
        ts->client = client;
        ts->touch_ind_mode = 0;
        init_waitqueue_head(&ts->wait);
 static int auo_pixcir_remove(struct i2c_client *client)
 {
        struct auo_pixcir_ts *ts = i2c_get_clientdata(client);
-       const struct auo_pixcir_ts_platdata *pdata = client->dev.platform_data;
+       const struct auo_pixcir_ts_platdata *pdata = ts->pdata;
 
        free_irq(client->irq, ts);