Re: [PATCH] add sur40 driver for Samsung SUR40 (aka MS Surface 2.0/Pixelsense)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Florian,

On Wed, Sep 11, 2013 at 11:26:03PM +0200, Florian Echtler wrote:
> +
> +	/* allocate memory for our device state and initialize it */
> +	sur40 = kzalloc(sizeof(struct sur40_state), GFP_KERNEL);
> +	poll_dev = input_allocate_polled_device();
> +	if (!sur40 || !poll_dev)
> +		return -ENOMEM;

You are leaking memory here.

> +
> +	/* setup polled input device control struct */
> +	poll_dev->private = sur40;
> +	poll_dev->poll_interval = POLL_INTERVAL;
> +	poll_dev->open = sur40_open;
> +	poll_dev->poll = sur40_poll;
> +	poll_dev->close = sur40_close;
> +
> +	/* setup regular input device struct */
> +	sur40_input_setup(poll_dev->input);
> +
> +	poll_dev->input->name = "Samsung SUR40";
> +	usb_to_input_id(usbdev, &(poll_dev->input->id));
> +	usb_make_path(usbdev, sur40->phys, sizeof(sur40->phys));
> +	strlcat(sur40->phys, "/input0", sizeof(sur40->phys));
> +	poll_dev->input->phys = sur40->phys;
> +
> +	sur40->usbdev = usbdev;
> +	sur40->input = poll_dev;
> +
> +	/* use the bulk-in endpoint tested above */
> +	sur40->bulk_in_size = le16_to_cpu(endpoint->wMaxPacketSize);
> +	sur40->bulk_in_epaddr = endpoint->bEndpointAddress;
> +	sur40->bulk_in_buffer = kmalloc(2 * sur40->bulk_in_size, GFP_KERNEL);
> +	if (!sur40->bulk_in_buffer) {
> +		dev_err(&interface->dev, "Unable to allocate input buffer.");
> +		sur40_delete(sur40);
> +		return -ENOMEM;
> +	}
> +
> +	result = input_register_polled_device(poll_dev);
> +	if (result) {
> +		dev_err(&interface->dev,
> +			"Unable to register polled input device.");
> +		sur40_delete(sur40);
> +		return result;
> +	}
> +
> +	/* we can register the device now, as it is ready */
> +	usb_set_intfdata(interface, sur40);
> +	dev_info(&interface->dev, "%s now attached\n", DRIVER_DESC);

dev_dbg() if you must.

> +
> +	return 0;
> +}
> +
> +/* unregister device & clean up */
> +static void sur40_disconnect(struct usb_interface *interface)
> +{
> +	struct sur40_state *sur40 = usb_get_intfdata(interface);
> +
> +	input_unregister_polled_device(sur40->input);
> +
> +	usb_set_intfdata(interface, NULL);
> +
> +	sur40_delete(sur40);
> +
> +	dev_info(&interface->dev, "%s now disconnected\n", DRIVER_DESC);

Here as well.

Thanks.

-- 
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux