diff options
author | Naveen Kumar Gaddipati <naveen.gaddipati@stericsson.com> | 2010-06-01 18:03:51 +0530 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2010-09-02 22:45:32 -0600 |
commit | ce731e3682788935e9d9b9889f9a15b4ea7d1785 (patch) | |
tree | a0c03319b2ec90e77fa5b66beeefd96f6d6eaf69 /include | |
parent | f344d5b7119e8729bcab6f7aed8541276f82759e (diff) |
bu21013: Driver for new dual touch controllers support
Adding bu21013 dual touch controllers driver and
support for it in mach-ux500.
ST-Ericsson ID: WP 257134
Signed-off-by: Naveen Kumar Gaddipati <naveen.gaddipati@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/413
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Tested-by: Jonas ABERG <jonas.aberg@stericsson.com>
Signed-off-by: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com>
Change-Id: If084c45539cd18982ddf210cf2b80be2e8da4dd3
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/2390
Diffstat (limited to 'include')
-rwxr-xr-x | include/linux/bu21013.h | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/include/linux/bu21013.h b/include/linux/bu21013.h new file mode 100755 index 00000000000..1dcc841ff3f --- /dev/null +++ b/include/linux/bu21013.h @@ -0,0 +1,284 @@ +/* + * Copyright (C) ST-Ericsson SA 2009 + * Author: Naveen Kumar G <naveen.gaddipati@stericsson.com> for ST-Ericsson + * License terms:GNU General Public License (GPL) version 2 + */ + +#ifndef _BU21013_H +#define _BU21013_H + +/* + * Touch screen register offsets + */ +#define BU21013_SENSORS_BTN_0_7 0x70 +#define BU21013_SENSORS_BTN_8_15 0x71 +#define BU21013_SENSORS_BTN_16_23 0x72 +#define BU21013_X1_POS_MSB 0x73 +#define BU21013_X1_POS_LSB 0x74 +#define BU21013_Y1_POS_MSB 0x75 +#define BU21013_Y1_POS_LSB 0x76 +#define BU21013_X2_POS_MSB 0x77 +#define BU21013_X2_POS_LSB 0x78 +#define BU21013_Y2_POS_MSB 0x79 +#define BU21013_Y2_POS_LSB 0x7A +#define BU21013_INT_CLR 0xE8 +#define BU21013_INT_MODE 0xE9 +#define BU21013_GAIN 0xEA +#define BU21013_OFFSET_MODE 0xEB +#define BU21013_XY_EDGE 0xEC +#define BU21013_RESET 0xED +#define BU21013_CALIB 0xEE +#define BU21013_REG_DONE 0xEF +#define BU21013_SENSOR_0_7 0xF0 +#define BU21013_SENSOR_8_15 0xF1 +#define BU21013_SENSOR_16_23 0xF2 +#define BU21013_POS_MODE1 0xF3 +#define BU21013_POS_MODE2 0xF4 +#define BU21013_CLK_MODE 0xF5 +#define BU21013_IDLE 0xFA +#define BU21013_FILTER 0xFB +#define BU21013_TH_ON 0xFC +#define BU21013_TH_OFF 0xFD + +/* + * Touch screen register offset values + */ +#define BU21013_INTR_CLEAR 0x01 +#define BU21013_INTR_ENABLE 0x00 +#define BU21013_CALIB_ENABLE 0x01 + +#define BU21013_RESET_ENABLE 0x01 + +/* Sensors Configuration */ +#define BU21013_SENSORS_EN_0_7 0x3F +#define BU21013_SENSORS_EN_8_15 0xFC +#define BU21013_SENSORS_EN_16_23 0x1F + +/* Position mode1 */ +#define BU21013_POS_MODE1_0 0x02 +#define BU21013_POS_MODE1_1 0x04 +#define BU21013_POS_MODE1_2 0x08 + +/* Position mode2 */ +#define BU21013_POS_MODE2_ZERO 0x01 +#define BU21013_POS_MODE2_AVG1 0x02 +#define BU21013_POS_MODE2_AVG2 0x04 +#define BU21013_POS_MODE2_EN_XY 0x08 +#define BU21013_POS_MODE2_EN_RAW 0x10 +#define BU21013_POS_MODE2_MULTI 0x80 + +/* Clock mode */ +#define BU21013_CLK_MODE_DIV 0x01 +#define BU21013_CLK_MODE_EXT 0x02 +#define BU21013_CLK_MODE_CALIB 0x80 + +/* IDLE time */ +#define BU21013_IDLET_0 0x01 +#define BU21013_IDLET_1 0x02 +#define BU21013_IDLET_2 0x04 +#define BU21013_IDLET_3 0x08 +#define BU21013_IDLE_INTERMIT_EN 0x10 + +/* FILTER reg values */ +#define BU21013_DELTA_0_6 0x7F +#define BU21013_FILTER_EN 0x80 + +/* interrupt mode */ +#define BU21013_INT_MODE_LEVEL 0x00 +#define BU21013_INT_MODE_EDGE 0x01 + +/* Gain reg values */ +#define BU21013_GAIN_0 0x01 +#define BU21013_GAIN_1 0x02 +#define BU21013_GAIN_2 0x04 + +/* OFFSET mode */ +#define BU21013_OFFSET_MODE_DEFAULT 0x00 +#define BU21013_OFFSET_MODE_MOVE 0x01 +#define BU21013_OFFSET_MODE_DISABLE 0x02 + +/* Threshold ON values */ +#define BU21013_TH_ON_0 0x01 +#define BU21013_TH_ON_1 0x02 +#define BU21013_TH_ON_2 0x04 +#define BU21013_TH_ON_3 0x08 +#define BU21013_TH_ON_4 0x10 +#define BU21013_TH_ON_5 0x20 +#define BU21013_TH_ON_6 0x40 +#define BU21013_TH_ON_7 0x80 + +#define BU21013_TH_ON_MAX 0xFF + +/* Threshold OFF values */ +#define BU21013_TH_OFF_0 0x01 +#define BU21013_TH_OFF_1 0x02 +#define BU21013_TH_OFF_2 0x04 +#define BU21013_TH_OFF_3 0x08 +#define BU21013_TH_OFF_4 0x10 +#define BU21013_TH_OFF_5 0x20 +#define BU21013_TH_OFF_6 0x40 +#define BU21013_TH_OFF_7 0x80 + +#define BU21013_TH_OFF_MAX 0xFF + +/* FILTER reg values */ +#define BU21013_X_EDGE_0 0x01 +#define BU21013_X_EDGE_1 0x02 +#define BU21013_X_EDGE_2 0x04 +#define BU21013_X_EDGE_3 0x08 +#define BU21013_Y_EDGE_0 0x10 +#define BU21013_Y_EDGE_1 0x20 +#define BU21013_Y_EDGE_2 0x40 +#define BU21013_Y_EDGE_3 0x80 + +#define BU21013_DONE 0x01 + +/** + * struct bu21013_platform_device - Handle the platform data + * @cs_en: pointer to the cs enable function + * @cs_dis: pointer to the cs disable function + * @irq_init: pointer to the irq init function + * @irq_exit: pointer to the irq exit function + * @pirq_en: pointer to the pen irq en function + * @pirq_dis: pointer to the pen irq disable function + * @pirq_read_val: pointer to read the pen irq value function + * @board_check: pointer to the get the board version + * @x_max_res: xmax resolution + * @y_max_res: ymax resolution + * @touch_x_max: touch x max + * @touch_y_max: touch y max + * @tp_cntl: controller id + * @cs_pin: chip select pin + * @irq: irq pin + * @ext_clk_en: external clock flag + * @portrait: portrait mode flag + * @edge_mode: edge mode flag + * This is used to handle the platform data + **/ +struct bu21013_platform_device { + int (*cs_en)(int reset_pin); + int (*cs_dis)(int reset_pin); + int (*irq_init)(void (*callback)(void *parameter), void *p); + int (*irq_exit)(void); + int (*pirq_en) (void); + int (*pirq_dis)(void); + int (*pirq_read_val)(void); + bool (*board_check)(void); + int x_max_res; + int y_max_res; + int touch_x_max; + int touch_y_max; + int tp_cntl; + unsigned int cs_pin; + unsigned int irq; + bool portrait; + bool ext_clk; + bool edge_mode; +}; + +/** + * struct bu21013_touch_point - x and y co-ordinates of touch panel + * @x: x co-ordinate + * @y: y co-ordinate + * This is used to hold the x and y co-ordinates of touch panel + **/ +struct bu21013_touch_point { + signed short x; + signed short y; +}; + +/** + * struct bu21013_gesture_info - hold the gesture of the touch + * @gesture_kind: gesture kind variable + * @pt: arry to touch_point structure + * @dir: direction variable + * @times: touch times + * @speed: speed of the touch + * This is used to hold the gesture of the touch. + **/ +struct bu21013_gesture_info { + signed short gesture_kind; + struct bu21013_touch_point pt[2]; + signed short dir; + signed short times; + signed short speed; +}; + +/** + * struct bu21013_ts_data - touch panel data structure + * @client: pointer to the i2c client + * @chip: pointer to the touch panel controller + * @pin_dev: pointer to the input device structure + * @penirq_timer: variable to the timer list structure + * @touch_en: variable for reporting the co-ordinates to input device. + * @finger1_pressed: variable to indicate the first co-ordinates. + * @finger2_pressed: variable to indicate the first co-ordinates. + * @tp_timer_handler: variable to work structure for timer + * @tp_gpio_handler: variable to work structure for gpio interrupt + * @gesture_info: variable to bu21013_gesture_info structure + * @touch_count: variable to maintain sensors input count + * @touchflag: variable to indicate the touch + * @pre_tap_flag: flag to indicate the pre tap + * @flick_flag: flickering flag + * @touch_continue: to continue the touch flag + * @pre_tap_flag_level: pre tap level flag + * @x1: x1 value + * @y1: y1 vlaue + * @x2: x2 value + * @y2: y2 value + * @pinch_start: pinch start + * @tap_start_point: variable to bu21013_touch_point structure + * @dir_trace: array for data trace + * @dir_idx: id for direction + * @rotate_data: array to maintain the rotate data + * @board_flag: variable to indicate the href v1 board + * @finger2_count: count for finger2 touches + * @intr_pin: interrupt pin value + * @last_press: sensor button pressed + * @prev_press_report: last reported flag + * @touchp_kobj: variable to kernel object for touch panel + * @gain: gain value + * @th_on: threshold on value + * @th_off: threshold off value + * @penup_timer: timeout value + * + * Tocuh panel data structure + */ +struct bu21013_ts_data { + struct i2c_client *client; + struct bu21013_platform_device *chip; + struct input_dev *pin_dev; + struct timer_list penirq_timer; + bool touch_en; + bool finger1_pressed; + bool finger2_pressed; + struct work_struct tp_timer_handler; + struct work_struct tp_gpio_handler; + struct bu21013_gesture_info gesture_info; + signed long touch_count; + bool touchflag; + bool pre_tap_flag; + bool flick_flag; + bool touch_continue; + unsigned char pre_tap_flag_level; + unsigned char pinch_start; + struct bu21013_touch_point tap_start_point; + unsigned char dir_trace[38]; + unsigned char dir_idx; + unsigned char rotate_data[5][5]; + bool board_flag; + u8 finger2_count; + unsigned int intr_pin; + signed short x1; + signed short y1; + signed short x2; + signed short y2; + int last_press; + bool prev_press_report; + struct kobject touchp_kobj; + int gain; + int th_on; + int th_off; + int penup_timer; +}; +#endif |