Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9cf59ae authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull input subsystem fixes from Dmitry Torokhov:
 "Two small driver fixups and a documentation update for managed input
  devices"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: wacom - fix wacom_set_report retry logic
  Input: document that unregistering managed devices is not necessary
  Input: lm8323 - fix checking PWM interrupt status
parents 7c45512d 9937c026
Loading
Loading
Loading
Loading
+14 −2
Original line number Original line Diff line number Diff line
@@ -1785,12 +1785,13 @@ static void devm_input_device_release(struct device *dev, void *res)
 * its driver (or binding fails). Once managed input device is allocated,
 * its driver (or binding fails). Once managed input device is allocated,
 * it is ready to be set up and registered in the same fashion as regular
 * it is ready to be set up and registered in the same fashion as regular
 * input device. There are no special devm_input_device_[un]register()
 * input device. There are no special devm_input_device_[un]register()
 * variants, regular ones work with both managed and unmanaged devices.
 * variants, regular ones work with both managed and unmanaged devices,
 * should you need them. In most cases however, managed input device need
 * not be explicitly unregistered or freed.
 *
 *
 * NOTE: the owner device is set up as parent of input device and users
 * NOTE: the owner device is set up as parent of input device and users
 * should not override it.
 * should not override it.
 */
 */

struct input_dev *devm_input_allocate_device(struct device *dev)
struct input_dev *devm_input_allocate_device(struct device *dev)
{
{
	struct input_dev *input;
	struct input_dev *input;
@@ -2004,6 +2005,17 @@ static void devm_input_device_unregister(struct device *dev, void *res)
 * Once device has been successfully registered it can be unregistered
 * Once device has been successfully registered it can be unregistered
 * with input_unregister_device(); input_free_device() should not be
 * with input_unregister_device(); input_free_device() should not be
 * called in this case.
 * called in this case.
 *
 * Note that this function is also used to register managed input devices
 * (ones allocated with devm_input_allocate_device()). Such managed input
 * devices need not be explicitly unregistered or freed, their tear down
 * is controlled by the devres infrastructure. It is also worth noting
 * that tear down of managed input devices is internally a 2-step process:
 * registered managed input device is first unregistered, but stays in
 * memory and can still handle input_event() calls (although events will
 * not be delivered anywhere). The freeing of managed input device will
 * happen later, when devres stack is unwound to the point where device
 * allocation was made.
 */
 */
int input_register_device(struct input_dev *dev)
int input_register_device(struct input_dev *dev)
{
{
+1 −1
Original line number Original line Diff line number Diff line
@@ -398,7 +398,7 @@ static irqreturn_t lm8323_irq(int irq, void *_lm)
			lm8323_configure(lm);
			lm8323_configure(lm);
		}
		}
		for (i = 0; i < LM8323_NUM_PWMS; i++) {
		for (i = 0; i < LM8323_NUM_PWMS; i++) {
			if (ints & (1 << (INT_PWM1 + i))) {
			if (ints & (INT_PWM1 << i)) {
				dev_vdbg(&lm->client->dev,
				dev_vdbg(&lm->client->dev,
					 "pwm%d engine completed\n", i);
					 "pwm%d engine completed\n", i);
				pwm_done(&lm->pwm[i]);
				pwm_done(&lm->pwm[i]);
+3 −3
Original line number Original line Diff line number Diff line
@@ -553,10 +553,10 @@ static int wacom_set_device_mode(struct usb_interface *intf, int report_id, int
	if (!rep_data)
	if (!rep_data)
		return error;
		return error;


	do {
		rep_data[0] = report_id;
		rep_data[0] = report_id;
		rep_data[1] = mode;
		rep_data[1] = mode;


	do {
		error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT,
		error = wacom_set_report(intf, WAC_HID_FEATURE_REPORT,
		                         report_id, rep_data, length, 1);
		                         report_id, rep_data, length, 1);
		if (error >= 0)
		if (error >= 0)