Commit a15d60f8 authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: lifebook - adjust initialization routines to be in line with

       the rest of protocols in preparation to dynamic protocol
       switching.
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 14e94143
...@@ -63,7 +63,7 @@ static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_re ...@@ -63,7 +63,7 @@ static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_re
return PSMOUSE_FULL_PACKET; return PSMOUSE_FULL_PACKET;
} }
static int lifebook_initialize(struct psmouse *psmouse) static int lifebook_absolute_mode(struct psmouse *psmouse)
{ {
struct ps2dev *ps2dev = &psmouse->ps2dev; struct ps2dev *ps2dev = &psmouse->ps2dev;
unsigned char param; unsigned char param;
...@@ -87,27 +87,36 @@ static void lifebook_disconnect(struct psmouse *psmouse) ...@@ -87,27 +87,36 @@ static void lifebook_disconnect(struct psmouse *psmouse)
psmouse_reset(psmouse); psmouse_reset(psmouse);
} }
int lifebook_detect(struct psmouse *psmouse, unsigned int max_proto, int lifebook_detect(struct psmouse *psmouse, int set_properties)
int set_properties)
{ {
if (!dmi_check_system(lifebook_dmi_table) && max_proto != PSMOUSE_LIFEBOOK) if (!dmi_check_system(lifebook_dmi_table))
return -1; return -1;
if (set_properties) { if (set_properties) {
psmouse->vendor = "Fujitsu Lifebook"; psmouse->vendor = "Fujitsu";
psmouse->name = "TouchScreen"; psmouse->name = "Lifebook TouchScreen";
psmouse->dev.evbit[0] = BIT(EV_ABS) | BIT(EV_KEY) | BIT(EV_REL);
psmouse->dev.keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
psmouse->dev.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
psmouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);
input_set_abs_params(&psmouse->dev, ABS_X, 0, 1024, 0, 0);
input_set_abs_params(&psmouse->dev, ABS_Y, 0, 1024, 0, 0);
psmouse->protocol_handler = lifebook_process_byte;
psmouse->disconnect = lifebook_disconnect;
psmouse->reconnect = lifebook_initialize;
psmouse->pktsize = 3;
} }
return lifebook_initialize(psmouse); return 0;
} }
int lifebook_init(struct psmouse *psmouse)
{
if (lifebook_absolute_mode(psmouse))
return -1;
psmouse->dev.evbit[0] = BIT(EV_ABS) | BIT(EV_KEY) | BIT(EV_REL);
psmouse->dev.keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
psmouse->dev.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
psmouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);
input_set_abs_params(&psmouse->dev, ABS_X, 0, 1024, 0, 0);
input_set_abs_params(&psmouse->dev, ABS_Y, 0, 1024, 0, 0);
psmouse->protocol_handler = lifebook_process_byte;
psmouse->disconnect = lifebook_disconnect;
psmouse->reconnect = lifebook_absolute_mode;
psmouse->pktsize = 3;
return 0;
}
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#ifndef _LIFEBOOK_H #ifndef _LIFEBOOK_H
#define _LIFEBOOK_H #define _LIFEBOOK_H
int lifebook_detect(struct psmouse *psmouse, unsigned int max_proto, int lifebook_detect(struct psmouse *psmouse, int set_properties);
int set_properties); int lifebook_init(struct psmouse *psmouse);
#endif #endif
...@@ -424,8 +424,18 @@ static int psmouse_extensions(struct psmouse *psmouse, ...@@ -424,8 +424,18 @@ static int psmouse_extensions(struct psmouse *psmouse,
{ {
int synaptics_hardware = 0; int synaptics_hardware = 0;
if (lifebook_detect(psmouse, max_proto, set_properties) == 0) /*
return PSMOUSE_LIFEBOOK; * We always check for lifebook because it does not disturb mouse
* (it only checks DMI information).
*/
if (lifebook_detect(psmouse, set_properties) == 0 ||
max_proto == PSMOUSE_LIFEBOOK) {
if (max_proto > PSMOUSE_IMEX) {
if (!set_properties || lifebook_init(psmouse) == 0)
return PSMOUSE_LIFEBOOK;
}
}
/* /*
* Try Kensington ThinkingMouse (we try first, because synaptics probe * Try Kensington ThinkingMouse (we try first, because synaptics probe
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment