USBHID之内核抢占USB驱动问题

本文基于mstar801平台Linux2.6.35.11内核版本。

  前些天调试一个elan的USB触摸板,发现插上USB dongle后、加载的驱动总是不对。

  后经同事分析,是加载了错误的驱动导致;USB发现机制里边根据设备VID和PID匹配了USBHID设备。

  因此,要解决这个问题需要在USBHID忽略列表里边添加自己elan USB触摸板的VID和PID;具体做法如下:

1.获得本设备VID和PID

  通过插入USB dongle后看串口输出的VID和PID;

  或在驱动代码中查找:

kernel2.6.35.11/drivers/input/elan_tp/elan_tp.c

#define VENDOR_ID			0x1D5A
#define PRODUCT_ID		0xC0B3	

#define VENDOR_ID_1		0x201e
#define PRODUCT_ID_1		0x003c

#define VENDOR_ID_2		0x04f3
#define PRODUCT_ID_2		0x0726

2.在USBHID设备忽略列表中加上这些VID和PID

  kernel2.6.35.11/driver/hid/usbhid/hid-core.c

static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)
{       ......
	dbg_hid("HID probe called for ifnum %d\n",
			intf->altsetting->desc.bInterfaceNumber);
        //add by tank
	if ((dev->descriptor.idVendor == 0x1D5A)&&(dev->descriptor.idProduct == 0xC0B3)) {
			return -ENODEV ;
	}
        if ((dev->descriptor.idVendor == 0x201e)&&(dev->descriptor.idProduct == 0x003c)) {
			return -ENODEV ;
	}
	if ((dev->descriptor.idVendor == 0x04f3)&&(dev->descriptor.idProduct == 0726)) {
			return -ENODEV ;
	}
	printk("hid-core.c idVendor = %x , idProduct=%x\n",dev->descriptor.idVendor,dev->descriptor.idProduct);
	printk("hid-core.c interface->desc.bInterfaceNumber:%d desc.bNumEndpoints:%d\n",interface->desc.bInterfaceNumber,interface->desc.bNumEndpoints);
        //end by tank
	for (n = 0; n < interface->desc.bNumEndpoints; n++)
		if (usb_endpoint_is_int_in(&interface->endpoint[n].desc))
			has_in++;
        ......
}

  或kernel2.6.35.11/driver/hid/hid-core.c

static const struct hid_device_id hid_ignore_list[] = {
  .....
  //add by tank
        { HID_USB_DEVICE(0x1D5A, 0xC0B3) },
        { HID_USB_DEVICE(0x201e, 0x003c) },
        { HID_USB_DEVICE(0x04f3, 0x0726) },
  //end by tank
        { }
}

3.补充-HID设备支持情况

  kernel2.6.35.11/drivers/hid/hid-id.h

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值