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

Commit 3aac0ef1 authored by Chris Bagwell's avatar Chris Bagwell Committed by Dmitry Torokhov
Browse files

Input: wacom - isolate input registration



Although this better co-locates input registration logic,
the main goal is to make it easier to optionally create
input devices or delay creation to later time periods.

Signed-off-by: default avatarChris Bagwell <chris@cnpbagwell.com>
Tested-by: default avatarJason Gerecke <killertofu@gmail.com>
Acked-by: default avatarPing Cheng <pingc@wacom.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 727f9b48
Loading
Loading
Loading
Loading
+33 −20
Original line number Original line Diff line number Diff line
@@ -822,6 +822,37 @@ static void wacom_destroy_leds(struct wacom *wacom)
	}
	}
}
}


static int wacom_register_input(struct wacom *wacom)
{
	struct input_dev *input_dev;
	struct usb_interface *intf = wacom->intf;
	struct usb_device *dev = interface_to_usbdev(intf);
	struct wacom_wac *wacom_wac = &(wacom->wacom_wac);
	int error;

	input_dev = input_allocate_device();
	if (!input_dev)
		return -ENOMEM;

	input_dev->name = wacom_wac->name;
	input_dev->dev.parent = &intf->dev;
	input_dev->open = wacom_open;
	input_dev->close = wacom_close;
	usb_to_input_id(dev, &input_dev->id);
	input_set_drvdata(input_dev, wacom);

	wacom_wac->input = input_dev;
	wacom_setup_input_capabilities(input_dev, wacom_wac);

	error = input_register_device(input_dev);
	if (error) {
		input_free_device(input_dev);
		wacom_wac->input = NULL;
	}

	return error;
}

static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id)
static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id)
{
{
	struct usb_device *dev = interface_to_usbdev(intf);
	struct usb_device *dev = interface_to_usbdev(intf);
@@ -829,18 +860,12 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
	struct wacom *wacom;
	struct wacom *wacom;
	struct wacom_wac *wacom_wac;
	struct wacom_wac *wacom_wac;
	struct wacom_features *features;
	struct wacom_features *features;
	struct input_dev *input_dev;
	int error;
	int error;


	if (!id->driver_info)
	if (!id->driver_info)
		return -EINVAL;
		return -EINVAL;


	wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL);
	wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL);
	input_dev = input_allocate_device();
	if (!wacom || !input_dev) {
		error = -ENOMEM;
		goto fail1;
	}


	wacom_wac = &wacom->wacom_wac;
	wacom_wac = &wacom->wacom_wac;
	wacom_wac->features = *((struct wacom_features *)id->driver_info);
	wacom_wac->features = *((struct wacom_features *)id->driver_info);
@@ -869,8 +894,6 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
	usb_make_path(dev, wacom->phys, sizeof(wacom->phys));
	usb_make_path(dev, wacom->phys, sizeof(wacom->phys));
	strlcat(wacom->phys, "/input0", sizeof(wacom->phys));
	strlcat(wacom->phys, "/input0", sizeof(wacom->phys));


	wacom_wac->input = input_dev;

	endpoint = &intf->cur_altsetting->endpoint[0].desc;
	endpoint = &intf->cur_altsetting->endpoint[0].desc;


	/* Retrieve the physical and logical size for OEM devices */
	/* Retrieve the physical and logical size for OEM devices */
@@ -894,15 +917,6 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
			goto fail3;
			goto fail3;
	}
	}


	input_dev->name = wacom_wac->name;
	input_dev->dev.parent = &intf->dev;
	input_dev->open = wacom_open;
	input_dev->close = wacom_close;
	usb_to_input_id(dev, &input_dev->id);
	input_set_drvdata(input_dev, wacom);

	wacom_setup_input_capabilities(input_dev, wacom_wac);

	usb_fill_int_urb(wacom->irq, dev,
	usb_fill_int_urb(wacom->irq, dev,
			 usb_rcvintpipe(dev, endpoint->bEndpointAddress),
			 usb_rcvintpipe(dev, endpoint->bEndpointAddress),
			 wacom_wac->data, features->pktlen,
			 wacom_wac->data, features->pktlen,
@@ -914,7 +928,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
	if (error)
	if (error)
		goto fail4;
		goto fail4;


	error = input_register_device(input_dev);
	error = wacom_register_input(wacom);
	if (error)
	if (error)
		goto fail5;
		goto fail5;


@@ -928,8 +942,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
 fail4:	wacom_remove_shared_data(wacom_wac);
 fail4:	wacom_remove_shared_data(wacom_wac);
 fail3:	usb_free_urb(wacom->irq);
 fail3:	usb_free_urb(wacom->irq);
 fail2:	usb_free_coherent(dev, WACOM_PKGLEN_MAX, wacom_wac->data, wacom->data_dma);
 fail2:	usb_free_coherent(dev, WACOM_PKGLEN_MAX, wacom_wac->data, wacom->data_dma);
 fail1:	input_free_device(input_dev);
 fail1:	kfree(wacom);
	kfree(wacom);
	return error;
	return error;
}
}