4

I'm working on a device driver for Linux. It's a USB pen tablet. The problem is that the driver's probe callback never gets called. dmesg just shows:

generic-usb: probe of 0003:099A:2620.000F failed with error -22

and i never get to connect to the device. It seems like the systems drivers are overriding my driver in some way?

My code is registering & unregistering correctly using insmod / rmmod:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/usb.h>
#include <linux/slab.h>

MODULE_DEVICE_TABLE (usb, id_table);
struct usb_device_id id_table[] =
{
    {USB_DEVICE(0x099a, 0x2620)}, //Zippy Technology Corp. Digi Tablet
    {0}
};

void dt_disconnect(struct usb_interface *interface)
{
    printk("dt_disconnect called\n");
}

int dt_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
    printk("dt_probe called\n");
    return 0;
}

static struct usb_driver dt_driver =
{
    .name = "Zippy Technology Corp. Digi Tablet",
    .probe = dt_probe,
    .disconnect = dt_disconnect,
    .id_table = id_table
};

static int __init dt_init(void)
{
    //0 means success
    int error = usb_register(&dt_driver);
    if(error)
        printk("dt_init failed\n");

    return 0;
}

static void __exit dt_exit(void)
{
    //void
    usb_deregister(&dt_driver);
}

module_init(dt_init);
module_exit(dt_exit);

MODULE_LICENSE("GPL");

dt_probe is never called. I'm using Linux 2.6.40 (Fedora 15's version of 3.0) and most documentation about this stuff is very old so I thought I'd ask here. Any thoughts?

Alex
  • 41
  • 1
  • 2

1 Answers1

3

Yes, usbhid driver overrides your driver. You need to remove the usbhid driver from the running kernel. First deattach your device from the system and use "modprobe -r usbhid" to remove the usbhid module. Now insert your module and attach the device, then your driver will be taken.

rulingminds
  • 176
  • 1
  • 1
    `modprobe -r usbhid` did not work but i get the idea. I did some more research and found that the pen tablet has three interfaces: HID Keyboard, HID Mouse and HID something using protocol 0x3 (this is the pen-mode protocol i have sniffed from Windows). So it just got messed up with that usbhid overriding my driver. usbhid seems to get the mouse and keyboard installed into xinput but it doesn't really work. Do you think i should dig into usbhid for a patch or just try to override usbhid in some other way? Im not sure usbhid needs to be patched but i just can't get the tablet to work. – Alex Aug 26 '11 at 17:19
  • http://stackoverflow.com/questions/3389192/register-bind-match-a-device-with-a-driver is the exact same question.. – Alex Aug 26 '11 at 17:39