i2c_get_clientdata和to_i2c_client 的使用获取平台设备
struct mxt224_data {
struct i2c_client *client;
struct input_dev *input_dev;
struct early_suspend early_suspend;
u8 family_id;
u32 finger_mask;
int gpio_read_done;
struct object_t *objects;
u8 objects_len;
u8 tsp_version;
const u8 *power_cfg;
const u8 *noise_suppression_cfg_ta;
const u8 *noise_suppression_cfg;
const u8 *noise_suppression_cfg_t46_ta;
const u8 *noise_suppression_cfg_t46;
u8 finger_type;
u16 msg_proc;
u16 cmd_proc;
u16 msg_object_size;
u32 x_dropbits:2;
u32 y_dropbits:2;
void (*power_on)(void);
void (*power_off)(void);
//void (*register_cb)(void*);
void (*read_ta_status)(void*);
int num_fingers;
struct finger_info fingers[MXT224_MAX_MT_FINGERS];
struct timer_list autocal_timer;
};
static struct workqueue_struct *cal_check_wq;
static struct work_struct cal_check_work;
#define CLEAR_MEDIAN_FILTER_ERROR
#ifdef CLEAR_MEDIAN_FILTER_ERROR
typedef enum
{
ERR_RTN_CONDITION_T9,
ERR_RTN_CONDITION_T48,
ERR_RTN_CONDITION_IDLE,
ERR_RTN_CONDITION_MAX
}ERR_RTN_CONTIOIN;
ERR_RTN_CONTIOIN gErrCondition = ERR_RTN_CONDITION_IDLE;
static t48_median_config_t noise_median = {0}; //110927 gumi noise
#endif
struct mxt224_data *copy_data;
extern struct class *sec_class;
static int mxt224_suspend(struct device *dev)
{struct i2c_client *client = to_i2c_client(dev); 从dev 获取 i2c client .
struct mxt224_data *data = i2c_get_clientdata(client); 从i2c client 获取平台设备 data
//cal_check_work_queue
int ret;
ret = cancel_work_sync(&cal_check_work);
mxt224_enabled = 0;
touch_is_pressed = 0;
Doing_calibration_falg = 0;
return mxt224_internal_suspend(data);
}