RE: [PATCH 2/7] USB: serial: xr: use a table for device-specific settings

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

 




> -----Original Message-----
> From: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> On Behalf Of Mauro
> Carvalho Chehab
> 
>  static int xr_probe(struct usb_serial *serial, const struct usb_device_id *id)
>  {
> +	struct xr_port_private *port_priv;
> +
>  	/* Don't bind to control interface */
>  	if (serial->interface->cur_altsetting->desc.bInterfaceNumber == 0)
>  		return -ENODEV;
> 
> +	port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
> +	if (!port_priv)
> +		return -ENOMEM;
> +
> +	port_priv->model = id->driver_info;
> +
> +	usb_set_serial_data(serial, port_priv);
> +
>  	return 0;
>  }
> 
> +static void xr_disconnect(struct usb_serial *serial)
> +{
> +	struct xr_port_private *port_priv = usb_get_serial_data(serial);
> +
> +	kfree(port_priv);
> +	usb_set_serial_data(serial, 0);

Probably a nitpick, but shouldn't usb_set_serral_data() be called before kfree()?

> +}
> +
>  static const struct usb_device_id id_table[] = {
> -	{ USB_DEVICE(0x04e2, 0x1410) }, /* XR21V141X */
> +	{ USB_DEVICE(0x04e2, 0x1410), .driver_info = XR21V141X},
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(usb, id_table);
> @@ -566,6 +640,7 @@ static struct usb_serial_driver xr_device = {
>  	.id_table		= id_table,
>  	.num_ports		= 1,
>  	.probe			= xr_probe,
> +	.disconnect		= xr_disconnect,
>  	.open			= xr_open,
>  	.close			= xr_close,
>  	.break_ctl		= xr_break_ctl,
> --
> 2.29.2





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux