|
@@ -180,12 +180,6 @@
|
|
|
|
|
|
#define MXT_FWRESET_TIME 175 /* msec */
|
|
|
|
|
|
-/* MXT_SPT_GPIOPWM_T19 field */
|
|
|
-#define MXT_GPIO0_MASK 0x04
|
|
|
-#define MXT_GPIO1_MASK 0x08
|
|
|
-#define MXT_GPIO2_MASK 0x10
|
|
|
-#define MXT_GPIO3_MASK 0x20
|
|
|
-
|
|
|
/* Command to unlock bootloader */
|
|
|
#define MXT_UNLOCK_CMD_MSB 0xaa
|
|
|
#define MXT_UNLOCK_CMD_LSB 0xdc
|
|
@@ -250,7 +244,6 @@ struct mxt_data {
|
|
|
const struct mxt_platform_data *pdata;
|
|
|
struct mxt_object *object_table;
|
|
|
struct mxt_info info;
|
|
|
- bool is_tp;
|
|
|
|
|
|
unsigned int irq;
|
|
|
unsigned int max_x;
|
|
@@ -515,15 +508,16 @@ static int mxt_write_object(struct mxt_data *data,
|
|
|
static void mxt_input_button(struct mxt_data *data, struct mxt_message *message)
|
|
|
{
|
|
|
struct input_dev *input = data->input_dev;
|
|
|
+ const struct mxt_platform_data *pdata = data->pdata;
|
|
|
bool button;
|
|
|
int i;
|
|
|
|
|
|
/* Active-low switch */
|
|
|
- for (i = 0; i < MXT_NUM_GPIO; i++) {
|
|
|
- if (data->pdata->key_map[i] == KEY_RESERVED)
|
|
|
+ for (i = 0; i < pdata->t19_num_keys; i++) {
|
|
|
+ if (pdata->t19_keymap[i] == KEY_RESERVED)
|
|
|
continue;
|
|
|
- button = !(message->message[0] & MXT_GPIO0_MASK << i);
|
|
|
- input_report_key(input, data->pdata->key_map[i], button);
|
|
|
+ button = !(message->message[0] & (1 << i));
|
|
|
+ input_report_key(input, pdata->t19_keymap[i], button);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1084,6 +1078,8 @@ static int mxt_probe(struct i2c_client *client,
|
|
|
struct input_dev *input_dev;
|
|
|
int error;
|
|
|
unsigned int num_mt_slots;
|
|
|
+ unsigned int mt_flags = 0;
|
|
|
+ int i;
|
|
|
|
|
|
if (!pdata)
|
|
|
return -EINVAL;
|
|
@@ -1096,10 +1092,7 @@ static int mxt_probe(struct i2c_client *client,
|
|
|
goto err_free_mem;
|
|
|
}
|
|
|
|
|
|
- data->is_tp = pdata && pdata->is_tp;
|
|
|
-
|
|
|
- input_dev->name = (data->is_tp) ? "Atmel maXTouch Touchpad" :
|
|
|
- "Atmel maXTouch Touchscreen";
|
|
|
+ input_dev->name = "Atmel maXTouch Touchscreen";
|
|
|
snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
|
|
|
client->adapter->nr, client->addr);
|
|
|
|
|
@@ -1125,20 +1118,15 @@ static int mxt_probe(struct i2c_client *client,
|
|
|
__set_bit(EV_KEY, input_dev->evbit);
|
|
|
__set_bit(BTN_TOUCH, input_dev->keybit);
|
|
|
|
|
|
- if (data->is_tp) {
|
|
|
- int i;
|
|
|
- __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
|
+ if (pdata->t19_num_keys) {
|
|
|
__set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
|
|
|
|
|
|
- for (i = 0; i < MXT_NUM_GPIO; i++)
|
|
|
- if (pdata->key_map[i] != KEY_RESERVED)
|
|
|
- __set_bit(pdata->key_map[i], input_dev->keybit);
|
|
|
+ for (i = 0; i < pdata->t19_num_keys; i++)
|
|
|
+ if (pdata->t19_keymap[i] != KEY_RESERVED)
|
|
|
+ input_set_capability(input_dev, EV_KEY,
|
|
|
+ pdata->t19_keymap[i]);
|
|
|
|
|
|
- __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
|
|
|
- __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
|
|
|
- __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
|
|
|
- __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
|
|
|
- __set_bit(BTN_TOOL_QUINTTAP, input_dev->keybit);
|
|
|
+ mt_flags |= INPUT_MT_POINTER;
|
|
|
|
|
|
input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
|
|
|
input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
|
|
@@ -1146,6 +1134,8 @@ static int mxt_probe(struct i2c_client *client,
|
|
|
MXT_PIXELS_PER_MM);
|
|
|
input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
|
|
|
MXT_PIXELS_PER_MM);
|
|
|
+
|
|
|
+ input_dev->name = "Atmel maXTouch Touchpad";
|
|
|
}
|
|
|
|
|
|
/* For single touch */
|
|
@@ -1158,7 +1148,7 @@ static int mxt_probe(struct i2c_client *client,
|
|
|
|
|
|
/* For multi touch */
|
|
|
num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
|
|
|
- error = input_mt_init_slots(input_dev, num_mt_slots, 0);
|
|
|
+ error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
|
|
|
if (error)
|
|
|
goto err_free_object;
|
|
|
input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
|