152 lines
3.9 KiB
C
Executable File
152 lines
3.9 KiB
C
Executable File
#ifndef __TS_AUTO_H
|
|
#define __TS_AUTO_H
|
|
#include <linux/miscdevice.h>
|
|
|
|
#define TS_ENABLE 1
|
|
#define TS_DISABLE 0
|
|
#define TS_UNKNOW_DATA -1
|
|
#define TS_MAX_POINT 20
|
|
#define TS_MAX_VER_LEN 64
|
|
|
|
struct ts_private_data;
|
|
|
|
enum ts_bus_type{
|
|
TS_BUS_TYPE_INVALID = 0,
|
|
|
|
TS_BUS_TYPE_I2C,
|
|
TS_BUS_TYPE_SPI,
|
|
TS_BUS_TYPE_SERIAL,
|
|
|
|
TS_BUS_TYPE_NUM_ID,
|
|
};
|
|
|
|
enum ts_id {
|
|
TS_ID_INVALID = 0,
|
|
|
|
TS_ID_FT5306,
|
|
TS_ID_CT360,
|
|
TS_ID_GT8110,
|
|
TS_ID_GT828,
|
|
TS_ID_GT8005,
|
|
|
|
TS_NUM_ID,
|
|
};
|
|
|
|
struct point_data {
|
|
int status;
|
|
int id;
|
|
int x;
|
|
int y;
|
|
int press;
|
|
int last_status;
|
|
};
|
|
|
|
struct ts_event {
|
|
int touch_point;
|
|
struct point_data point[TS_MAX_POINT];
|
|
};
|
|
|
|
|
|
/* Platform data for the auto touchscreen */
|
|
struct ts_platform_data {
|
|
unsigned char slave_addr;
|
|
int irq;
|
|
int power_pin;
|
|
int reset_pin;
|
|
|
|
int (*init_platform_hw)(void);
|
|
};
|
|
|
|
struct ts_max_pixel{
|
|
int max_x;
|
|
int max_y;
|
|
};
|
|
|
|
struct ts_operate {
|
|
char *name;
|
|
char slave_addr;
|
|
int ts_id;
|
|
int bus_type;
|
|
struct ts_max_pixel pixel;
|
|
int reg_size;
|
|
int id_reg;
|
|
int id_data;
|
|
int version_reg;
|
|
char *version_data;
|
|
int version_len; //<64
|
|
int read_reg;
|
|
int read_len;
|
|
int trig; //intterupt trigger
|
|
int max_point;
|
|
int xy_swap;
|
|
int x_revert;
|
|
int y_revert;
|
|
int range[2];
|
|
int irq_enable; //if irq_enable=1 then use irq else use polling
|
|
int poll_delay_ms; //polling
|
|
int gpio_level_no_int;
|
|
int (*active)(struct ts_private_data *ts, int enable);
|
|
int (*init)(struct ts_private_data *ts);
|
|
int (*check_irq)(struct ts_private_data *ts);
|
|
int (*report)(struct ts_private_data *ts);
|
|
int (*firmware)(struct ts_private_data *ts);
|
|
int (*suspend)(struct ts_private_data *ts);
|
|
int (*resume)(struct ts_private_data *ts);
|
|
struct miscdevice *misc_dev;
|
|
};
|
|
|
|
|
|
struct ts_private_data {
|
|
struct mutex io_lock;
|
|
struct device *dev;
|
|
int (*read_dev)(struct ts_private_data *ts, unsigned short reg,
|
|
int bytes, void *dest, int reg_size);
|
|
int (*write_dev)(struct ts_private_data *ts, unsigned short reg,
|
|
int bytes, void *src, int reg_size);
|
|
void *control_data;
|
|
int irq;
|
|
//struct i2c_client *client;
|
|
struct input_dev *input_dev;
|
|
struct ts_event event;
|
|
struct work_struct work;
|
|
struct delayed_work delaywork; /*report second event*/
|
|
struct delayed_work poll_work; /*poll at last*/
|
|
char ts_data[40]; //max support40 bytes data
|
|
struct mutex data_mutex;
|
|
struct mutex ts_lock;
|
|
int devid;
|
|
struct i2c_device_id *i2c_id;
|
|
struct ts_platform_data *pdata;
|
|
struct ts_operate *ops;
|
|
struct file_operations fops;
|
|
struct miscdevice miscdev;
|
|
#ifdef CONFIG_HAS_EARLYSUSPEND
|
|
struct early_suspend early_suspend;
|
|
#endif
|
|
};
|
|
|
|
extern int ts_device_init(struct ts_private_data *ts, int type, int irq);
|
|
extern void ts_device_exit(struct ts_private_data *ts);
|
|
extern int ts_register_slave(struct ts_private_data *ts,
|
|
struct ts_platform_data *slave_pdata,
|
|
struct ts_operate *(*get_ts_ops)(void));
|
|
extern int ts_unregister_slave(struct ts_private_data *ts,
|
|
struct ts_platform_data *slave_pdata,
|
|
struct ts_operate *(*get_ts_ops)(void));
|
|
extern int ts_reg_read(struct ts_private_data *ts, unsigned short reg);
|
|
extern int ts_reg_write(struct ts_private_data *ts, unsigned short reg,
|
|
unsigned short val);
|
|
extern int ts_bulk_read(struct ts_private_data *ts, unsigned short reg,
|
|
int count, unsigned char *buf);
|
|
extern int ts_bulk_read_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate);
|
|
extern int ts_bulk_write(struct ts_private_data *ts, unsigned short reg,
|
|
int count, unsigned char *buf);
|
|
extern int ts_bulk_write_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate);
|
|
extern int ts_set_bits(struct ts_private_data *ts, unsigned short reg,
|
|
unsigned short mask, unsigned short val);
|
|
extern int ts_device_suspend(struct ts_private_data *ts);
|
|
|
|
extern int ts_device_resume(struct ts_private_data *ts);
|
|
|
|
#endif
|