The following reply was made to PR kern/107665; it has been noted by GNATS.

From: Steinar Hamre <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Cc:  
Subject: Re: kern/107665: [usb] [patch] uscanner support for epson stylus 
DX5050 MFP
Date: Wed, 10 Jan 2007 01:20:28 +0100

 --HlL+5n6rz5pIUxbD
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 
 Hi.
 
 I have reworked the uscanner module so that it can use the device
 simultaniously with the ulpt and umass modules.
 
 The revised patch is attached.
 
        Steinar
 
 --HlL+5n6rz5pIUxbD
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="epson_dx5000.patch"
 
 --- usbdevs.orig       Mon Jan  8 00:00:26 2007
 +++ usbdevs    Mon Jan  8 00:02:25 2007
 @@ -907,6 +907,7 @@
  product EPSON 3500            0x080e  CX-3500/3600/3650 MFP
  product EPSON RX425           0x080f  Stylus Photo RX425 scanner
  product EPSON 4200            0x0820  CX4200 MP scanner
 +product EPSON 5000            0x082b  DX-50x0 MFP
  
  /* e-TEK Labs products */
  product ETEK 1COM             0x8007  Serial
 --- uscanner.c.orig    Mon Jan  8 00:00:42 2007
 +++ uscanner.c Wed Jan 10 01:07:55 2007
 @@ -217,6 +217,7 @@
   {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_3590 }, 0 },
   {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_4200 }, 0 },
   {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_4990 }, 0 },
 + {{ USB_VENDOR_EPSON, USB_PRODUCT_EPSON_5000 }, 0 },
  
    /* UMAX */
   {{ USB_VENDOR_UMAX, USB_PRODUCT_UMAX_ASTRA1220U }, 0 },
 @@ -309,13 +310,28 @@
  
  USB_MATCH(uscanner)
  {
 +      usb_interface_descriptor_t *id;
        USB_MATCH_START(uscanner, uaa);
  
 -      if (uaa->iface != NULL)
 -              return UMATCH_NONE;
 +      if (uaa->iface == NULL)
 +              return (UMATCH_NONE);
 +      
 +      if(uscanner_lookup(uaa->vendor, uaa->product) == NULL)
 +              return (UMATCH_NONE);
 +      
 +      id = usbd_get_interface_descriptor(uaa->iface);
 +      if (id == NULL)
 +              return (UMATCH_NONE);
 +
 +      /* Current ATTACH use the first interface,
 +       * so claim only this. Must be changed to support
 +       * multi function devices where the scanner is not
 +       * the first interface. */
 + 
 +      if (id->bInterfaceNumber == 0)
 +              return (UMATCH_VENDOR_PRODUCT);
  
 -      return (uscanner_lookup(uaa->vendor, uaa->product) != NULL ?
 -              UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
 +      return (UMATCH_NONE);
  }
  
  USB_ATTACH(uscanner)
 @@ -330,16 +346,22 @@
        usbd_devinfo(uaa->device, 0, devinfo);
        USB_ATTACH_SETUP;
  
 +      sc->dev = NULL;
        sc->sc_dev_flags = uscanner_lookup(uaa->vendor, uaa->product)->flags;
  
        sc->sc_udev = uaa->device;
  
 +#if 0
 +      /* This shouldn't really be necessary and breaks all multi
 +       * function devices. If any scanner needs this, use a quirk
 +         * for only that scanner? */
        err = usbd_set_config_no(uaa->device, 1, 1); /* XXX */
        if (err) {
                printf("%s: setting config no failed\n",
                    USBDEVNAME(sc->sc_dev));
                USB_ATTACH_ERROR_RETURN;
        }
 +#endif
  
        /* XXX We only check the first interface */
        err = usbd_device2interface_handle(sc->sc_udev, 0, &sc->sc_iface);
 @@ -664,7 +686,7 @@
        s = splusb();
        if (--sc->sc_refcnt >= 0) {
                /* Wait for processes to go away. */
 -              usb_detach_wait(USBDEV(sc->sc_dev));
 +              if (sc->dev) usb_detach_wait(USBDEV(sc->sc_dev));
        }
        splx(s);
  
 @@ -679,7 +701,7 @@
        vdevgone(maj, mn, mn + USB_MAX_ENDPOINTS - 1, VCHR);
  #elif defined(__FreeBSD__)
        /* destroy the device for the control endpoint */
 -      destroy_dev(sc->dev);
 +      if (sc->dev) destroy_dev(sc->dev);
  #endif
  
        usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->sc_udev,
 
 --HlL+5n6rz5pIUxbD--
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to