diff options
Diffstat (limited to 'kernel/drivers/input')
-rw-r--r-- | kernel/drivers/input/keyboard/gpio_keys_polled.c | 2 | ||||
-rw-r--r-- | kernel/drivers/input/mouse/alps.c | 8 | ||||
-rw-r--r-- | kernel/drivers/input/mouse/synaptics.c | 2 | ||||
-rw-r--r-- | kernel/drivers/input/touchscreen/usbtouchscreen.c | 3 |
4 files changed, 11 insertions, 4 deletions
diff --git a/kernel/drivers/input/keyboard/gpio_keys_polled.c b/kernel/drivers/input/keyboard/gpio_keys_polled.c index 097d7216d..c6dc644aa 100644 --- a/kernel/drivers/input/keyboard/gpio_keys_polled.c +++ b/kernel/drivers/input/keyboard/gpio_keys_polled.c @@ -246,7 +246,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) * convert it to descriptor. */ if (!button->gpiod && gpio_is_valid(button->gpio)) { - unsigned flags = 0; + unsigned flags = GPIOF_IN; if (button->active_low) flags |= GPIOF_ACTIVE_LOW; diff --git a/kernel/drivers/input/mouse/alps.c b/kernel/drivers/input/mouse/alps.c index a353b7de6..bc7eed679 100644 --- a/kernel/drivers/input/mouse/alps.c +++ b/kernel/drivers/input/mouse/alps.c @@ -20,6 +20,7 @@ #include <linux/input/mt.h> #include <linux/serio.h> #include <linux/libps2.h> +#include <linux/dmi.h> #include "psmouse.h" #include "alps.h" @@ -99,6 +100,7 @@ static const struct alps_nibble_commands alps_v6_nibble_commands[] = { #define ALPS_FOUR_BUTTONS 0x40 /* 4 direction button present */ #define ALPS_PS2_INTERLEAVED 0x80 /* 3-byte PS/2 packet interleaved with 6-byte ALPS packet */ +#define ALPS_DELL 0x100 /* device is a Dell laptop */ #define ALPS_BUTTONPAD 0x200 /* device is a clickpad */ static const struct alps_model_info alps_model_data[] = { @@ -251,9 +253,9 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse) return; } - /* Non interleaved V2 dualpoint has separate stick button bits */ + /* Dell non interleaved V2 dualpoint has separate stick button bits */ if (priv->proto_version == ALPS_PROTO_V2 && - priv->flags == (ALPS_PASS | ALPS_DUALPOINT)) { + priv->flags == (ALPS_DELL | ALPS_PASS | ALPS_DUALPOINT)) { left |= packet[0] & 1; right |= packet[0] & 2; middle |= packet[0] & 4; @@ -2542,6 +2544,8 @@ static int alps_set_protocol(struct psmouse *psmouse, priv->byte0 = protocol->byte0; priv->mask0 = protocol->mask0; priv->flags = protocol->flags; + if (dmi_name_in_vendors("Dell")) + priv->flags |= ALPS_DELL; priv->x_max = 2000; priv->y_max = 1400; diff --git a/kernel/drivers/input/mouse/synaptics.c b/kernel/drivers/input/mouse/synaptics.c index 35c8d0cea..3a32caf06 100644 --- a/kernel/drivers/input/mouse/synaptics.c +++ b/kernel/drivers/input/mouse/synaptics.c @@ -1199,7 +1199,7 @@ static void set_input_params(struct psmouse *psmouse, ABS_MT_POSITION_Y); /* Image sensors can report per-contact pressure */ input_set_abs_params(dev, ABS_MT_PRESSURE, 0, 255, 0, 0); - input_mt_init_slots(dev, 3, INPUT_MT_POINTER | INPUT_MT_TRACK); + input_mt_init_slots(dev, 2, INPUT_MT_POINTER | INPUT_MT_TRACK); /* Image sensors can signal 4 and 5 finger clicks */ __set_bit(BTN_TOOL_QUADTAP, dev->keybit); diff --git a/kernel/drivers/input/touchscreen/usbtouchscreen.c b/kernel/drivers/input/touchscreen/usbtouchscreen.c index f2c6c352c..2c4110724 100644 --- a/kernel/drivers/input/touchscreen/usbtouchscreen.c +++ b/kernel/drivers/input/touchscreen/usbtouchscreen.c @@ -627,6 +627,9 @@ static int dmc_tsc10_init(struct usbtouch_usb *usbtouch) goto err_out; } + /* TSC-25 data sheet specifies a delay after the RESET command */ + msleep(150); + /* set coordinate output rate */ buf[0] = buf[1] = 0xFF; ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0), |