271
272static const struct file_operations lcd_fops = {
273 .owner = THIS_MODULE,
274 .read = lcd_read,
275 .write = lcd_write,
276 .open = lcd_open,
277 .unlocked_ioctl = lcd_ioctl,
278 .release = lcd_release,
279};
280
281
282
283
284
285static struct usb_class_driver lcd_class = {
286 .name = "lcd%d",
287 .fops = &lcd_fops,
288 .minor_base = USBLCD_MINOR,
289};
290
291static int lcd_probe(struct usb_interface *interface, const struct usb_device_id *id)
292{
293 struct usb_lcd *dev = NULL;
294 struct usb_host_interface *iface_desc;
295 struct usb_endpoint_descriptor *endpoint;
296 size_t buffer_size;
297 int i;
298 int retval = -ENOMEM;
299
300
301 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
302 if (dev == NULL) {
303 err("Out of memory");
304 goto error;
305 }
306 kref_init(&dev->kref);
307 sema_init(&dev->limit_sem, USB_LCD_CONCURRENT_WRITES);
308 init_usb_anchor(&dev->submitted);
309
310 dev->udev = usb_get_dev(interface_to_usbdev(interface));
311 dev->interface = interface;