diff options
Diffstat (limited to 'drivers/usb/input/powermate.c')
| -rw-r--r-- | drivers/usb/input/powermate.c | 27 | 
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/usb/input/powermate.c b/drivers/usb/input/powermate.c index fea97e5437f..4f93a760fae 100644 --- a/drivers/usb/input/powermate.c +++ b/drivers/usb/input/powermate.c @@ -252,7 +252,7 @@ static void powermate_pulse_led(struct powermate_device *pm, int static_brightne  static int powermate_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int _value)  {  	unsigned int command = (unsigned int)_value; -	struct powermate_device *pm = dev->private; +	struct powermate_device *pm = input_get_drvdata(dev);  	if (type == EV_MSC && code == MSC_PULSELED){  		/* @@ -308,7 +308,7 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i  	struct powermate_device *pm;  	struct input_dev *input_dev;  	int pipe, maxp; -	int err = -ENOMEM; +	int error = -ENOMEM;  	interface = intf->cur_altsetting;  	endpoint = &interface->endpoint[0].desc; @@ -359,8 +359,9 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i  	input_dev->phys = pm->phys;  	usb_to_input_id(udev, &input_dev->id); -	input_dev->cdev.dev = &intf->dev; -	input_dev->private = pm; +	input_dev->dev.parent = &intf->dev; + +	input_set_drvdata(input_dev, pm);  	input_dev->event = powermate_input_event; @@ -387,11 +388,14 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i  	/* register our interrupt URB with the USB system */  	if (usb_submit_urb(pm->irq, GFP_KERNEL)) { -		err = -EIO; +		error = -EIO;  		goto fail4;  	} -	input_register_device(pm->input); +	error = input_register_device(pm->input); +	if (error) +		goto fail5; +  	/* force an update of everything */  	pm->requires_update = UPDATE_PULSE_ASLEEP | UPDATE_PULSE_AWAKE | UPDATE_PULSE_MODE | UPDATE_STATIC_BRIGHTNESS; @@ -400,12 +404,13 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i  	usb_set_intfdata(intf, pm);  	return 0; -fail4:	usb_free_urb(pm->config); -fail3:	usb_free_urb(pm->irq); -fail2:	powermate_free_buffers(udev, pm); -fail1:	input_free_device(input_dev); + fail5:	usb_kill_urb(pm->irq); + fail4:	usb_free_urb(pm->config); + fail3:	usb_free_urb(pm->irq); + fail2:	powermate_free_buffers(udev, pm); + fail1:	input_free_device(input_dev);  	kfree(pm); -	return err; +	return error;  }  /* Called when a USB device we've accepted ownership of is removed */  |