Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input fixes from Dmitry Torokhov: - add sanity checks to USB endpoints in various dirvers - max77650-onkey was missing an OF table which was preventing module autoloading - a revert and a different fix for F54 handling in Synaptics dirver - a fixup for handling register in pm8xxx vibrator driver * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: pm8xxx-vib - fix handling of separate enable register Input: keyspan-remote - fix control-message timeouts Input: max77650-onkey - add of_match table Input: rmi_f54 - read from FIFO in 32 byte blocks Revert "Input: synaptics-rmi4 - don't increment rmiaddr for SMBus transfers" Input: sur40 - fix interface sanity checks Input: gtco - drop redundant variable reinit Input: gtco - fix extra-descriptor debug message Input: gtco - fix endpoint sanity check Input: aiptek - use descriptors of current altsetting Input: aiptek - fix endpoint sanity check Input: pegasus_notetaker - fix endpoint sanity check Input: sun4i-ts - add a check for devm_thermal_zone_of_sensor_register Input: evdev - convert kzalloc()/vzalloc() to kvzalloc()
This commit is contained in:
commit
d5d359b0ac
|
@ -484,10 +484,7 @@ static int evdev_open(struct inode *inode, struct file *file)
|
|||
struct evdev_client *client;
|
||||
int error;
|
||||
|
||||
client = kzalloc(struct_size(client, buffer, bufsize),
|
||||
GFP_KERNEL | __GFP_NOWARN);
|
||||
if (!client)
|
||||
client = vzalloc(struct_size(client, buffer, bufsize));
|
||||
client = kvzalloc(struct_size(client, buffer, bufsize), GFP_KERNEL);
|
||||
if (!client)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
@ -336,7 +336,8 @@ static int keyspan_setup(struct usb_device* dev)
|
|||
int retval = 0;
|
||||
|
||||
retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
0x11, 0x40, 0x5601, 0x0, NULL, 0, 0);
|
||||
0x11, 0x40, 0x5601, 0x0, NULL, 0,
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
if (retval) {
|
||||
dev_dbg(&dev->dev, "%s - failed to set bit rate due to error: %d\n",
|
||||
__func__, retval);
|
||||
|
@ -344,7 +345,8 @@ static int keyspan_setup(struct usb_device* dev)
|
|||
}
|
||||
|
||||
retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
0x44, 0x40, 0x0, 0x0, NULL, 0, 0);
|
||||
0x44, 0x40, 0x0, 0x0, NULL, 0,
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
if (retval) {
|
||||
dev_dbg(&dev->dev, "%s - failed to set resume sensitivity due to error: %d\n",
|
||||
__func__, retval);
|
||||
|
@ -352,7 +354,8 @@ static int keyspan_setup(struct usb_device* dev)
|
|||
}
|
||||
|
||||
retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
0x22, 0x40, 0x0, 0x0, NULL, 0, 0);
|
||||
0x22, 0x40, 0x0, 0x0, NULL, 0,
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
if (retval) {
|
||||
dev_dbg(&dev->dev, "%s - failed to turn receive on due to error: %d\n",
|
||||
__func__, retval);
|
||||
|
|
|
@ -108,9 +108,16 @@ static int max77650_onkey_probe(struct platform_device *pdev)
|
|||
return input_register_device(onkey->input);
|
||||
}
|
||||
|
||||
static const struct of_device_id max77650_onkey_of_match[] = {
|
||||
{ .compatible = "maxim,max77650-onkey" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, max77650_onkey_of_match);
|
||||
|
||||
static struct platform_driver max77650_onkey_driver = {
|
||||
.driver = {
|
||||
.name = "max77650-onkey",
|
||||
.of_match_table = max77650_onkey_of_match,
|
||||
},
|
||||
.probe = max77650_onkey_probe,
|
||||
};
|
||||
|
|
|
@ -90,7 +90,7 @@ static int pm8xxx_vib_set(struct pm8xxx_vib *vib, bool on)
|
|||
|
||||
if (regs->enable_mask)
|
||||
rc = regmap_update_bits(vib->regmap, regs->enable_addr,
|
||||
on ? regs->enable_mask : 0, val);
|
||||
regs->enable_mask, on ? ~0 : 0);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,12 @@
|
|||
#define F54_NUM_TX_OFFSET 1
|
||||
#define F54_NUM_RX_OFFSET 0
|
||||
|
||||
/*
|
||||
* The smbus protocol can read only 32 bytes max at a time.
|
||||
* But this should be fine for i2c/spi as well.
|
||||
*/
|
||||
#define F54_REPORT_DATA_SIZE 32
|
||||
|
||||
/* F54 commands */
|
||||
#define F54_GET_REPORT 1
|
||||
#define F54_FORCE_CAL 2
|
||||
|
@ -526,6 +532,7 @@ static void rmi_f54_work(struct work_struct *work)
|
|||
int report_size;
|
||||
u8 command;
|
||||
int error;
|
||||
int i;
|
||||
|
||||
report_size = rmi_f54_get_report_size(f54);
|
||||
if (report_size == 0) {
|
||||
|
@ -558,23 +565,27 @@ static void rmi_f54_work(struct work_struct *work)
|
|||
|
||||
rmi_dbg(RMI_DEBUG_FN, &fn->dev, "Get report command completed, reading data\n");
|
||||
|
||||
fifo[0] = 0;
|
||||
fifo[1] = 0;
|
||||
error = rmi_write_block(fn->rmi_dev,
|
||||
fn->fd.data_base_addr + F54_FIFO_OFFSET,
|
||||
fifo, sizeof(fifo));
|
||||
if (error) {
|
||||
dev_err(&fn->dev, "Failed to set fifo start offset\n");
|
||||
goto abort;
|
||||
}
|
||||
for (i = 0; i < report_size; i += F54_REPORT_DATA_SIZE) {
|
||||
int size = min(F54_REPORT_DATA_SIZE, report_size - i);
|
||||
|
||||
error = rmi_read_block(fn->rmi_dev, fn->fd.data_base_addr +
|
||||
F54_REPORT_DATA_OFFSET, f54->report_data,
|
||||
report_size);
|
||||
if (error) {
|
||||
dev_err(&fn->dev, "%s: read [%d bytes] returned %d\n",
|
||||
__func__, report_size, error);
|
||||
goto abort;
|
||||
fifo[0] = i & 0xff;
|
||||
fifo[1] = i >> 8;
|
||||
error = rmi_write_block(fn->rmi_dev,
|
||||
fn->fd.data_base_addr + F54_FIFO_OFFSET,
|
||||
fifo, sizeof(fifo));
|
||||
if (error) {
|
||||
dev_err(&fn->dev, "Failed to set fifo start offset\n");
|
||||
goto abort;
|
||||
}
|
||||
|
||||
error = rmi_read_block(fn->rmi_dev, fn->fd.data_base_addr +
|
||||
F54_REPORT_DATA_OFFSET,
|
||||
f54->report_data + i, size);
|
||||
if (error) {
|
||||
dev_err(&fn->dev, "%s: read [%d bytes] returned %d\n",
|
||||
__func__, size, error);
|
||||
goto abort;
|
||||
}
|
||||
}
|
||||
|
||||
abort:
|
||||
|
|
|
@ -163,6 +163,7 @@ static int rmi_smb_write_block(struct rmi_transport_dev *xport, u16 rmiaddr,
|
|||
/* prepare to write next block of bytes */
|
||||
cur_len -= SMB_MAX_COUNT;
|
||||
databuff += SMB_MAX_COUNT;
|
||||
rmiaddr += SMB_MAX_COUNT;
|
||||
}
|
||||
exit:
|
||||
mutex_unlock(&rmi_smb->page_mutex);
|
||||
|
@ -214,6 +215,7 @@ static int rmi_smb_read_block(struct rmi_transport_dev *xport, u16 rmiaddr,
|
|||
/* prepare to read next block of bytes */
|
||||
cur_len -= SMB_MAX_COUNT;
|
||||
databuff += SMB_MAX_COUNT;
|
||||
rmiaddr += SMB_MAX_COUNT;
|
||||
}
|
||||
|
||||
retval = 0;
|
||||
|
|
|
@ -1713,7 +1713,7 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
|
||||
aiptek->inputdev = inputdev;
|
||||
aiptek->intf = intf;
|
||||
aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber;
|
||||
aiptek->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
|
||||
aiptek->inDelay = 0;
|
||||
aiptek->endDelay = 0;
|
||||
aiptek->previousJitterable = 0;
|
||||
|
@ -1802,14 +1802,14 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
input_set_abs_params(inputdev, ABS_WHEEL, AIPTEK_WHEEL_MIN, AIPTEK_WHEEL_MAX - 1, 0, 0);
|
||||
|
||||
/* Verify that a device really has an endpoint */
|
||||
if (intf->altsetting[0].desc.bNumEndpoints < 1) {
|
||||
if (intf->cur_altsetting->desc.bNumEndpoints < 1) {
|
||||
dev_err(&intf->dev,
|
||||
"interface has %d endpoints, but must have minimum 1\n",
|
||||
intf->altsetting[0].desc.bNumEndpoints);
|
||||
intf->cur_altsetting->desc.bNumEndpoints);
|
||||
err = -EINVAL;
|
||||
goto fail3;
|
||||
}
|
||||
endpoint = &intf->altsetting[0].endpoint[0].desc;
|
||||
endpoint = &intf->cur_altsetting->endpoint[0].desc;
|
||||
|
||||
/* Go set up our URB, which is called when the tablet receives
|
||||
* input.
|
||||
|
|
|
@ -875,18 +875,14 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
|||
}
|
||||
|
||||
/* Sanity check that a device has an endpoint */
|
||||
if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) {
|
||||
if (usbinterface->cur_altsetting->desc.bNumEndpoints < 1) {
|
||||
dev_err(&usbinterface->dev,
|
||||
"Invalid number of endpoints\n");
|
||||
error = -EINVAL;
|
||||
goto err_free_urb;
|
||||
}
|
||||
|
||||
/*
|
||||
* The endpoint is always altsetting 0, we know this since we know
|
||||
* this device only has one interrupt endpoint
|
||||
*/
|
||||
endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
|
||||
endpoint = &usbinterface->cur_altsetting->endpoint[0].desc;
|
||||
|
||||
/* Some debug */
|
||||
dev_dbg(&usbinterface->dev, "gtco # interfaces: %d\n", usbinterface->num_altsetting);
|
||||
|
@ -896,7 +892,8 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
|||
if (usb_endpoint_xfer_int(endpoint))
|
||||
dev_dbg(&usbinterface->dev, "endpoint: we have interrupt endpoint\n");
|
||||
|
||||
dev_dbg(&usbinterface->dev, "endpoint extra len:%d\n", usbinterface->altsetting[0].extralen);
|
||||
dev_dbg(&usbinterface->dev, "interface extra len:%d\n",
|
||||
usbinterface->cur_altsetting->extralen);
|
||||
|
||||
/*
|
||||
* Find the HID descriptor so we can find out the size of the
|
||||
|
@ -973,8 +970,6 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
|||
input_dev->dev.parent = &usbinterface->dev;
|
||||
|
||||
/* Setup the URB, it will be posted later on open of input device */
|
||||
endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
|
||||
|
||||
usb_fill_int_urb(gtco->urbinfo,
|
||||
udev,
|
||||
usb_rcvintpipe(udev,
|
||||
|
|
|
@ -275,7 +275,7 @@ static int pegasus_probe(struct usb_interface *intf,
|
|||
return -ENODEV;
|
||||
|
||||
/* Sanity check that the device has an endpoint */
|
||||
if (intf->altsetting[0].desc.bNumEndpoints < 1) {
|
||||
if (intf->cur_altsetting->desc.bNumEndpoints < 1) {
|
||||
dev_err(&intf->dev, "Invalid number of endpoints\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -237,6 +237,7 @@ static int sun4i_ts_probe(struct platform_device *pdev)
|
|||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct device *hwmon;
|
||||
struct thermal_zone_device *thermal;
|
||||
int error;
|
||||
u32 reg;
|
||||
bool ts_attached;
|
||||
|
@ -355,7 +356,10 @@ static int sun4i_ts_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(hwmon))
|
||||
return PTR_ERR(hwmon);
|
||||
|
||||
devm_thermal_zone_of_sensor_register(ts->dev, 0, ts, &sun4i_ts_tz_ops);
|
||||
thermal = devm_thermal_zone_of_sensor_register(ts->dev, 0, ts,
|
||||
&sun4i_ts_tz_ops);
|
||||
if (IS_ERR(thermal))
|
||||
return PTR_ERR(thermal);
|
||||
|
||||
writel(TEMP_IRQ_EN(1), ts->base + TP_INT_FIFOC);
|
||||
|
||||
|
|
|
@ -661,7 +661,7 @@ static int sur40_probe(struct usb_interface *interface,
|
|||
int error;
|
||||
|
||||
/* Check if we really have the right interface. */
|
||||
iface_desc = &interface->altsetting[0];
|
||||
iface_desc = interface->cur_altsetting;
|
||||
if (iface_desc->desc.bInterfaceClass != 0xFF)
|
||||
return -ENODEV;
|
||||
|
||||
|
|
Loading…
Reference in New Issue