提交 899631c7 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: rpckbd - fix a leak of the IRQ during init failure
  Input: wacom - add support for Lenovo tablet ID (0xE6)
  Input: i8042 - downgrade selftest error message to dbg()
  Input: synaptics - fix crash in synaptics_module_init()
  Input: spear-keyboard - fix inverted condition in interrupt handler
  Input: uinput - allow for 0/0 min/max on absolute axes.
  Input: sparse-keymap - report KEY_UNKNOWN for unknown scan codes
  Input: sparse-keymap - report scancodes with key events
  Input: h3600_ts_input - fix a spelling error
  Input: wacom - report resolution for pen devices
  Input: wacom - constify wacom_features for a new missed Bamboo models
...@@ -69,7 +69,7 @@ static irqreturn_t spear_kbd_interrupt(int irq, void *dev_id) ...@@ -69,7 +69,7 @@ static irqreturn_t spear_kbd_interrupt(int irq, void *dev_id)
u8 sts, val; u8 sts, val;
sts = readb(kbd->io_base + STATUS_REG); sts = readb(kbd->io_base + STATUS_REG);
if (sts & DATA_AVAIL) if (!(sts & DATA_AVAIL))
return IRQ_NONE; return IRQ_NONE;
if (kbd->last_key != KEY_RESERVED) { if (kbd->last_key != KEY_RESERVED) {
......
...@@ -302,10 +302,14 @@ static int uinput_validate_absbits(struct input_dev *dev) ...@@ -302,10 +302,14 @@ static int uinput_validate_absbits(struct input_dev *dev)
int retval = 0; int retval = 0;
for (cnt = 0; cnt < ABS_CNT; cnt++) { for (cnt = 0; cnt < ABS_CNT; cnt++) {
int min, max;
if (!test_bit(cnt, dev->absbit)) if (!test_bit(cnt, dev->absbit))
continue; continue;
if (input_abs_get_max(dev, cnt) <= input_abs_get_min(dev, cnt)) { min = input_abs_get_min(dev, cnt);
max = input_abs_get_max(dev, cnt);
if ((min != 0 || max != 0) && max <= min) {
printk(KERN_DEBUG printk(KERN_DEBUG
"%s: invalid abs[%02x] min:%d max:%d\n", "%s: invalid abs[%02x] min:%d max:%d\n",
UINPUT_NAME, cnt, UINPUT_NAME, cnt,
......
...@@ -836,8 +836,8 @@ static const struct dmi_system_id __initconst toshiba_dmi_table[] = { ...@@ -836,8 +836,8 @@ static const struct dmi_system_id __initconst toshiba_dmi_table[] = {
}, },
}, },
{ }
#endif #endif
{ }
}; };
static bool broken_olpc_ec; static bool broken_olpc_ec;
...@@ -851,8 +851,8 @@ static const struct dmi_system_id __initconst olpc_dmi_table[] = { ...@@ -851,8 +851,8 @@ static const struct dmi_system_id __initconst olpc_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "XO"), DMI_MATCH(DMI_PRODUCT_NAME, "XO"),
}, },
}, },
{ }
#endif #endif
{ }
}; };
void __init synaptics_module_init(void) void __init synaptics_module_init(void)
......
...@@ -869,15 +869,15 @@ static int i8042_controller_selftest(void) ...@@ -869,15 +869,15 @@ static int i8042_controller_selftest(void)
do { do {
if (i8042_command(&param, I8042_CMD_CTL_TEST)) { if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
pr_err("i8042 controller self test timeout\n"); pr_err("i8042 controller selftest timeout\n");
return -ENODEV; return -ENODEV;
} }
if (param == I8042_RET_CTL_TEST) if (param == I8042_RET_CTL_TEST)
return 0; return 0;
pr_err("i8042 controller selftest failed. (%#x != %#x)\n", dbg("i8042 controller selftest: %#x != %#x\n",
param, I8042_RET_CTL_TEST); param, I8042_RET_CTL_TEST);
msleep(50); msleep(50);
} while (i++ < 5); } while (i++ < 5);
...@@ -891,6 +891,7 @@ static int i8042_controller_selftest(void) ...@@ -891,6 +891,7 @@ static int i8042_controller_selftest(void)
pr_info("giving up on controller selftest, continuing anyway...\n"); pr_info("giving up on controller selftest, continuing anyway...\n");
return 0; return 0;
#else #else
pr_err("i8042 controller selftest failed\n");
return -EIO; return -EIO;
#endif #endif
} }
......
...@@ -90,7 +90,7 @@ static int rpckbd_open(struct serio *port) ...@@ -90,7 +90,7 @@ static int rpckbd_open(struct serio *port)
if (request_irq(IRQ_KEYBOARDTX, rpckbd_tx, 0, "rpckbd", port) != 0) { if (request_irq(IRQ_KEYBOARDTX, rpckbd_tx, 0, "rpckbd", port) != 0) {
printk(KERN_ERR "rpckbd.c: Could not allocate keyboard transmit IRQ\n"); printk(KERN_ERR "rpckbd.c: Could not allocate keyboard transmit IRQ\n");
free_irq(IRQ_KEYBOARDRX, NULL); free_irq(IRQ_KEYBOARDRX, port);
return -EBUSY; return -EBUSY;
} }
......
...@@ -208,6 +208,12 @@ int sparse_keymap_setup(struct input_dev *dev, ...@@ -208,6 +208,12 @@ int sparse_keymap_setup(struct input_dev *dev,
} }
} }
if (test_bit(EV_KEY, dev->evbit)) {
__set_bit(KEY_UNKNOWN, dev->keybit);
__set_bit(EV_MSC, dev->evbit);
__set_bit(MSC_SCAN, dev->mscbit);
}
dev->keycode = map; dev->keycode = map;
dev->keycodemax = map_size; dev->keycodemax = map_size;
dev->getkeycode = sparse_keymap_getkeycode; dev->getkeycode = sparse_keymap_getkeycode;
...@@ -268,6 +274,7 @@ void sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *k ...@@ -268,6 +274,7 @@ void sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *k
{ {
switch (ke->type) { switch (ke->type) {
case KE_KEY: case KE_KEY:
input_event(dev, EV_MSC, MSC_SCAN, ke->code);
input_report_key(dev, ke->keycode, value); input_report_key(dev, ke->keycode, value);
input_sync(dev); input_sync(dev);
if (value && autorelease) { if (value && autorelease) {
...@@ -305,12 +312,19 @@ bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, ...@@ -305,12 +312,19 @@ bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code,
{ {
const struct key_entry *ke = const struct key_entry *ke =
sparse_keymap_entry_from_scancode(dev, code); sparse_keymap_entry_from_scancode(dev, code);
struct key_entry unknown_ke;
if (ke) { if (ke) {
sparse_keymap_report_entry(dev, ke, value, autorelease); sparse_keymap_report_entry(dev, ke, value, autorelease);
return true; return true;
} }
/* Report an unknown key event as a debugging aid */
unknown_ke.type = KE_KEY;
unknown_ke.code = code;
unknown_ke.keycode = KEY_UNKNOWN;
sparse_keymap_report_entry(dev, &unknown_ke, value, true);
return false; return false;
} }
EXPORT_SYMBOL(sparse_keymap_report_event); EXPORT_SYMBOL(sparse_keymap_report_event);
......
此差异已折叠。
...@@ -74,6 +74,8 @@ struct wacom_features { ...@@ -74,6 +74,8 @@ struct wacom_features {
int pressure_max; int pressure_max;
int distance_max; int distance_max;
int type; int type;
int x_resolution;
int y_resolution;
int device_type; int device_type;
int x_phy; int x_phy;
int y_phy; int y_phy;
......
...@@ -62,7 +62,7 @@ MODULE_LICENSE("GPL"); ...@@ -62,7 +62,7 @@ MODULE_LICENSE("GPL");
Programmer has no control over these numbers. Programmer has no control over these numbers.
TODO there are holes - specifically 1,7,0x0a TODO there are holes - specifically 1,7,0x0a
*/ */
#define VERSION_ID 0 /* Get Version (request/respose) */ #define VERSION_ID 0 /* Get Version (request/response) */
#define KEYBD_ID 2 /* Keyboard (event) */ #define KEYBD_ID 2 /* Keyboard (event) */
#define TOUCHS_ID 3 /* Touch Screen (event)*/ #define TOUCHS_ID 3 /* Touch Screen (event)*/
#define EEPROM_READ_ID 4 /* (request/response) */ #define EEPROM_READ_ID 4 /* (request/response) */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册