Commit 1b74a868 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull input layer fixes from Dmitry Torokhov:
 "Two fixes for regressions in Wacom driver and fixes for drivers using
  threaded IRQ framework without specifying IRQF_ONESHOT."

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: request threaded-only IRQs with IRQF_ONESHOT
  Input: wacom - don't retrieve touch_max when it is predefined
  Input: wacom - fix retrieving touch_max bug
  Input: fix input.h kernel-doc warning
parents c4aed353 9b7e31bb
...@@ -282,7 +282,8 @@ static int __devinit as5011_probe(struct i2c_client *client, ...@@ -282,7 +282,8 @@ static int __devinit as5011_probe(struct i2c_client *client,
error = request_threaded_irq(as5011->button_irq, error = request_threaded_irq(as5011->button_irq,
NULL, as5011_button_interrupt, NULL, as5011_button_interrupt,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, IRQF_TRIGGER_RISING |
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"as5011_button", as5011); "as5011_button", as5011);
if (error < 0) { if (error < 0) {
dev_err(&client->dev, dev_err(&client->dev,
...@@ -296,7 +297,7 @@ static int __devinit as5011_probe(struct i2c_client *client, ...@@ -296,7 +297,7 @@ static int __devinit as5011_probe(struct i2c_client *client,
error = request_threaded_irq(as5011->axis_irq, NULL, error = request_threaded_irq(as5011->axis_irq, NULL,
as5011_axis_interrupt, as5011_axis_interrupt,
plat_data->axis_irqflags, plat_data->axis_irqflags | IRQF_ONESHOT,
"as5011_joystick", as5011); "as5011_joystick", as5011);
if (error) { if (error) {
dev_err(&client->dev, dev_err(&client->dev,
......
...@@ -178,7 +178,8 @@ static int __devinit mcs_touchkey_probe(struct i2c_client *client, ...@@ -178,7 +178,8 @@ static int __devinit mcs_touchkey_probe(struct i2c_client *client,
} }
error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt, error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt,
IRQF_TRIGGER_FALLING, client->dev.driver->name, data); IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
client->dev.driver->name, data);
if (error) { if (error) {
dev_err(&client->dev, "Failed to register interrupt\n"); dev_err(&client->dev, "Failed to register interrupt\n");
goto err_free_mem; goto err_free_mem;
......
...@@ -248,7 +248,7 @@ static int __devinit mpr_touchkey_probe(struct i2c_client *client, ...@@ -248,7 +248,7 @@ static int __devinit mpr_touchkey_probe(struct i2c_client *client,
error = request_threaded_irq(client->irq, NULL, error = request_threaded_irq(client->irq, NULL,
mpr_touchkey_interrupt, mpr_touchkey_interrupt,
IRQF_TRIGGER_FALLING, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
client->dev.driver->name, mpr121); client->dev.driver->name, mpr121);
if (error) { if (error) {
dev_err(&client->dev, "Failed to register interrupt\n"); dev_err(&client->dev, "Failed to register interrupt\n");
......
...@@ -201,7 +201,8 @@ static int __devinit qt1070_probe(struct i2c_client *client, ...@@ -201,7 +201,8 @@ static int __devinit qt1070_probe(struct i2c_client *client,
msleep(QT1070_RESET_TIME); msleep(QT1070_RESET_TIME);
err = request_threaded_irq(client->irq, NULL, qt1070_interrupt, err = request_threaded_irq(client->irq, NULL, qt1070_interrupt,
IRQF_TRIGGER_NONE, client->dev.driver->name, data); IRQF_TRIGGER_NONE | IRQF_ONESHOT,
client->dev.driver->name, data);
if (err) { if (err) {
dev_err(&client->dev, "fail to request irq\n"); dev_err(&client->dev, "fail to request irq\n");
goto err_free_mem; goto err_free_mem;
......
...@@ -278,7 +278,8 @@ static int __devinit tca6416_keypad_probe(struct i2c_client *client, ...@@ -278,7 +278,8 @@ static int __devinit tca6416_keypad_probe(struct i2c_client *client,
error = request_threaded_irq(chip->irqnum, NULL, error = request_threaded_irq(chip->irqnum, NULL,
tca6416_keys_isr, tca6416_keys_isr,
IRQF_TRIGGER_FALLING, IRQF_TRIGGER_FALLING |
IRQF_ONESHOT,
"tca6416-keypad", chip); "tca6416-keypad", chip);
if (error) { if (error) {
dev_dbg(&client->dev, dev_dbg(&client->dev,
......
...@@ -360,7 +360,7 @@ static int __devinit tca8418_keypad_probe(struct i2c_client *client, ...@@ -360,7 +360,7 @@ static int __devinit tca8418_keypad_probe(struct i2c_client *client,
client->irq = gpio_to_irq(client->irq); client->irq = gpio_to_irq(client->irq);
error = request_threaded_irq(client->irq, NULL, tca8418_irq_handler, error = request_threaded_irq(client->irq, NULL, tca8418_irq_handler,
IRQF_TRIGGER_FALLING, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
client->name, keypad_data); client->name, keypad_data);
if (error) { if (error) {
dev_dbg(&client->dev, dev_dbg(&client->dev,
......
...@@ -227,15 +227,15 @@ static int __devinit keypad_probe(struct platform_device *pdev) ...@@ -227,15 +227,15 @@ static int __devinit keypad_probe(struct platform_device *pdev)
goto error_clk; goto error_clk;
} }
error = request_threaded_irq(kp->irq_press, NULL, keypad_irq, 0, error = request_threaded_irq(kp->irq_press, NULL, keypad_irq,
dev_name(dev), kp); IRQF_ONESHOT, dev_name(dev), kp);
if (error < 0) { if (error < 0) {
dev_err(kp->dev, "Could not allocate keypad press key irq\n"); dev_err(kp->dev, "Could not allocate keypad press key irq\n");
goto error_irq_press; goto error_irq_press;
} }
error = request_threaded_irq(kp->irq_release, NULL, keypad_irq, 0, error = request_threaded_irq(kp->irq_release, NULL, keypad_irq,
dev_name(dev), kp); IRQF_ONESHOT, dev_name(dev), kp);
if (error < 0) { if (error < 0) {
dev_err(kp->dev, "Could not allocate keypad release key irq\n"); dev_err(kp->dev, "Could not allocate keypad release key irq\n");
goto error_irq_release; goto error_irq_release;
......
...@@ -972,6 +972,7 @@ struct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq, ...@@ -972,6 +972,7 @@ struct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq,
struct ad714x_platform_data *plat_data = dev->platform_data; struct ad714x_platform_data *plat_data = dev->platform_data;
struct ad714x_chip *ad714x; struct ad714x_chip *ad714x;
void *drv_mem; void *drv_mem;
unsigned long irqflags;
struct ad714x_button_drv *bt_drv; struct ad714x_button_drv *bt_drv;
struct ad714x_slider_drv *sd_drv; struct ad714x_slider_drv *sd_drv;
...@@ -1162,10 +1163,11 @@ struct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq, ...@@ -1162,10 +1163,11 @@ struct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq,
alloc_idx++; alloc_idx++;
} }
irqflags = plat_data->irqflags ?: IRQF_TRIGGER_FALLING;
irqflags |= IRQF_ONESHOT;
error = request_threaded_irq(ad714x->irq, NULL, ad714x_interrupt_thread, error = request_threaded_irq(ad714x->irq, NULL, ad714x_interrupt_thread,
plat_data->irqflags ? irqflags, "ad714x_captouch", ad714x);
plat_data->irqflags : IRQF_TRIGGER_FALLING,
"ad714x_captouch", ad714x);
if (error) { if (error) {
dev_err(dev, "can't allocate irq %d\n", ad714x->irq); dev_err(dev, "can't allocate irq %d\n", ad714x->irq);
goto err_unreg_dev; goto err_unreg_dev;
......
...@@ -213,7 +213,8 @@ static int __devinit dm355evm_keys_probe(struct platform_device *pdev) ...@@ -213,7 +213,8 @@ static int __devinit dm355evm_keys_probe(struct platform_device *pdev)
/* REVISIT: flush the event queue? */ /* REVISIT: flush the event queue? */
status = request_threaded_irq(keys->irq, NULL, dm355evm_keys_irq, status = request_threaded_irq(keys->irq, NULL, dm355evm_keys_irq,
IRQF_TRIGGER_FALLING, dev_name(&pdev->dev), keys); IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
dev_name(&pdev->dev), keys);
if (status < 0) if (status < 0)
goto fail2; goto fail2;
......
...@@ -216,7 +216,7 @@ static void wacom_retrieve_report_data(struct usb_interface *intf, ...@@ -216,7 +216,7 @@ static void wacom_retrieve_report_data(struct usb_interface *intf,
rep_data[0] = 12; rep_data[0] = 12;
result = wacom_get_report(intf, WAC_HID_FEATURE_REPORT, result = wacom_get_report(intf, WAC_HID_FEATURE_REPORT,
rep_data[0], &rep_data, 2, rep_data[0], rep_data, 2,
WAC_MSG_RETRIES); WAC_MSG_RETRIES);
if (result >= 0 && rep_data[1] > 2) if (result >= 0 && rep_data[1] > 2)
...@@ -401,7 +401,9 @@ static int wacom_parse_hid(struct usb_interface *intf, ...@@ -401,7 +401,9 @@ static int wacom_parse_hid(struct usb_interface *intf,
break; break;
case HID_USAGE_CONTACTMAX: case HID_USAGE_CONTACTMAX:
wacom_retrieve_report_data(intf, features); /* leave touch_max as is if predefined */
if (!features->touch_max)
wacom_retrieve_report_data(intf, features);
i++; i++;
break; break;
} }
......
...@@ -597,7 +597,7 @@ struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned int irq, ...@@ -597,7 +597,7 @@ struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned int irq,
AD7879_TMR(ts->pen_down_acc_interval); AD7879_TMR(ts->pen_down_acc_interval);
err = request_threaded_irq(ts->irq, NULL, ad7879_irq, err = request_threaded_irq(ts->irq, NULL, ad7879_irq,
IRQF_TRIGGER_FALLING, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
dev_name(dev), ts); dev_name(dev), ts);
if (err) { if (err) {
dev_err(dev, "irq %d busy?\n", ts->irq); dev_err(dev, "irq %d busy?\n", ts->irq);
......
...@@ -1149,7 +1149,8 @@ static int __devinit mxt_probe(struct i2c_client *client, ...@@ -1149,7 +1149,8 @@ static int __devinit mxt_probe(struct i2c_client *client,
goto err_free_object; goto err_free_object;
error = request_threaded_irq(client->irq, NULL, mxt_interrupt, error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
pdata->irqflags, client->dev.driver->name, data); pdata->irqflags | IRQF_ONESHOT,
client->dev.driver->name, data);
if (error) { if (error) {
dev_err(&client->dev, "Failed to register interrupt\n"); dev_err(&client->dev, "Failed to register interrupt\n");
goto err_free_object; goto err_free_object;
......
...@@ -509,7 +509,8 @@ static int __devinit bu21013_probe(struct i2c_client *client, ...@@ -509,7 +509,8 @@ static int __devinit bu21013_probe(struct i2c_client *client,
input_set_drvdata(in_dev, bu21013_data); input_set_drvdata(in_dev, bu21013_data);
error = request_threaded_irq(pdata->irq, NULL, bu21013_gpio_irq, error = request_threaded_irq(pdata->irq, NULL, bu21013_gpio_irq,
IRQF_TRIGGER_FALLING | IRQF_SHARED, IRQF_TRIGGER_FALLING | IRQF_SHARED |
IRQF_ONESHOT,
DRIVER_TP, bu21013_data); DRIVER_TP, bu21013_data);
if (error) { if (error) {
dev_err(&client->dev, "request irq %d failed\n", pdata->irq); dev_err(&client->dev, "request irq %d failed\n", pdata->irq);
......
...@@ -251,7 +251,8 @@ static int __devinit cy8ctmg110_probe(struct i2c_client *client, ...@@ -251,7 +251,8 @@ static int __devinit cy8ctmg110_probe(struct i2c_client *client,
} }
err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread, err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread,
IRQF_TRIGGER_RISING, "touch_reset_key", ts); IRQF_TRIGGER_RISING | IRQF_ONESHOT,
"touch_reset_key", ts);
if (err < 0) { if (err < 0) {
dev_err(&client->dev, dev_err(&client->dev,
"irq %d busy? error %d\n", client->irq, err); "irq %d busy? error %d\n", client->irq, err);
......
...@@ -620,7 +620,7 @@ static int __devinit mrstouch_probe(struct platform_device *pdev) ...@@ -620,7 +620,7 @@ static int __devinit mrstouch_probe(struct platform_device *pdev)
MRST_PRESSURE_MIN, MRST_PRESSURE_MAX, 0, 0); MRST_PRESSURE_MIN, MRST_PRESSURE_MAX, 0, 0);
err = request_threaded_irq(tsdev->irq, NULL, mrstouch_pendet_irq, err = request_threaded_irq(tsdev->irq, NULL, mrstouch_pendet_irq,
0, "mrstouch", tsdev); IRQF_ONESHOT, "mrstouch", tsdev);
if (err) { if (err) {
dev_err(tsdev->dev, "unable to allocate irq\n"); dev_err(tsdev->dev, "unable to allocate irq\n");
goto err_free_mem; goto err_free_mem;
......
...@@ -165,7 +165,7 @@ static int __devinit pixcir_i2c_ts_probe(struct i2c_client *client, ...@@ -165,7 +165,7 @@ static int __devinit pixcir_i2c_ts_probe(struct i2c_client *client,
input_set_drvdata(input, tsdata); input_set_drvdata(input, tsdata);
error = request_threaded_irq(client->irq, NULL, pixcir_ts_isr, error = request_threaded_irq(client->irq, NULL, pixcir_ts_isr,
IRQF_TRIGGER_FALLING, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
client->name, tsdata); client->name, tsdata);
if (error) { if (error) {
dev_err(&client->dev, "Unable to request touchscreen IRQ.\n"); dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
......
...@@ -297,7 +297,7 @@ static int __devinit tsc_probe(struct platform_device *pdev) ...@@ -297,7 +297,7 @@ static int __devinit tsc_probe(struct platform_device *pdev)
goto error_clk; goto error_clk;
} }
error = request_threaded_irq(ts->tsc_irq, NULL, tsc_irq, 0, error = request_threaded_irq(ts->tsc_irq, NULL, tsc_irq, IRQF_ONESHOT,
dev_name(dev), ts); dev_name(dev), ts);
if (error < 0) { if (error < 0) {
dev_err(ts->dev, "Could not allocate ts irq\n"); dev_err(ts->dev, "Could not allocate ts irq\n");
......
...@@ -650,7 +650,8 @@ static int __devinit tsc2005_probe(struct spi_device *spi) ...@@ -650,7 +650,8 @@ static int __devinit tsc2005_probe(struct spi_device *spi)
tsc2005_stop_scan(ts); tsc2005_stop_scan(ts);
error = request_threaded_irq(spi->irq, NULL, tsc2005_irq_thread, error = request_threaded_irq(spi->irq, NULL, tsc2005_irq_thread,
IRQF_TRIGGER_RISING, "tsc2005", ts); IRQF_TRIGGER_RISING | IRQF_ONESHOT,
"tsc2005", ts);
if (error) { if (error) {
dev_err(&spi->dev, "Failed to request irq, err: %d\n", error); dev_err(&spi->dev, "Failed to request irq, err: %d\n", error);
goto err_free_mem; goto err_free_mem;
......
...@@ -116,6 +116,7 @@ struct input_keymap_entry { ...@@ -116,6 +116,7 @@ struct input_keymap_entry {
/** /**
* EVIOCGMTSLOTS(len) - get MT slot values * EVIOCGMTSLOTS(len) - get MT slot values
* @len: size of the data buffer in bytes
* *
* The ioctl buffer argument should be binary equivalent to * The ioctl buffer argument should be binary equivalent to
* *
......
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