aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/hid/hid-rmi.c
diff options
context:
space:
mode:
authorAndrew Duggan <aduggan@synaptics.com>2014-08-06 13:37:40 -0700
committerJiri Kosina <jkosina@suse.cz>2014-08-14 11:41:56 +0200
commitdaebdd7ee30b4ec7dd6a4e90f1f66c86ec113bbc (patch)
tree4e06bc878fba105be6c1894d55dde20802699ae6 /drivers/hid/hid-rmi.c
parentHID: hid-sensor-hub: use devm_ functions consistently (diff)
downloadwireguard-linux-daebdd7ee30b4ec7dd6a4e90f1f66c86ec113bbc.tar.xz
wireguard-linux-daebdd7ee30b4ec7dd6a4e90f1f66c86ec113bbc.zip
HID: rmi: print an error if F11 is not found instead of stopping the device
Currently rmi_probe will return -EIO if the device doesn't report that it has F11. This would indicate that something happened and the device is in the bootloader. We can recover the device using a userspace firmware update tool, but it needs access to the device through the hidraw device file. If the probe returns -EIO the hidraw device won't be created. So instead of failing the probe, just print an error message, but leave the device accessible from userspace. Signed-off-by: Andrew Duggan <aduggan@synaptics.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/hid-rmi.c')
-rw-r--r--drivers/hid/hid-rmi.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
index 0dc25142f451..8389e8109218 100644
--- a/drivers/hid/hid-rmi.c
+++ b/drivers/hid/hid-rmi.c
@@ -909,10 +909,15 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
return ret;
}
- if (!test_bit(RMI_STARTED, &data->flags)) {
- hid_hw_stop(hdev);
- return -EIO;
- }
+ if (!test_bit(RMI_STARTED, &data->flags))
+ /*
+ * The device maybe in the bootloader if rmi_input_configured
+ * failed to find F11 in the PDT. Print an error, but don't
+ * return an error from rmi_probe so that hidraw will be
+ * accessible from userspace. That way a userspace tool
+ * can be used to reload working firmware on the touchpad.
+ */
+ hid_err(hdev, "Device failed to be properly configured\n");
return 0;
}