diff options
| -rw-r--r-- | tools/hid2hci.c | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/tools/hid2hci.c b/tools/hid2hci.c index 124829fb..eee6da8f 100644 --- a/tools/hid2hci.c +++ b/tools/hid2hci.c @@ -211,6 +211,37 @@ static int switch_logitech(struct device_info *devinfo)  	return err;  } +static int switch_dell(struct device_info *devinfo) +{ +	char report[] = { 0x7f, 0x13, 0x00, 0x00 }; + +	struct usb_dev_handle *handle; +	int err; + +	handle = usb_open(devinfo->dev); +	if (handle) { +		usb_claim_interface(handle, 0); +		usb_detach_kernel_driver_np(handle, 0); +	} + +	err = usb_control_msg(handle, +			USB_ENDPOINT_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, +			0x09, 0x7f | (0x03 << 8), 0, +			report, sizeof(report), 10000); + +	if (err == 0) { +		err = -1; +		errno = EALREADY; +	} else { +		if (errno == ETIMEDOUT) +			err = 0; +	} + +	usb_close(handle); + +	return err; +} +  static struct device_id device_list[] = {  	{ HCI, 0x0a12, 0x1000, switch_hidproxy },  	{ HID, 0x0a12, 0x0001, switch_hidproxy }, @@ -229,6 +260,8 @@ static struct device_id device_list[] = {  	{ HCI, 0x046d, 0xc70e, switch_logitech },	/* Logitech diNovo keyboard */  	{ HCI, 0x046d, 0xc713, switch_logitech },	/* Logitech diNovo Edge */  	{ HCI, 0x046d, 0xc714, switch_logitech },	/* Logitech diNovo Edge */ +	{ HCI, 0x413c, 0x8158, switch_dell     },	/* Dell Wireless 370 */ +	{ HCI, 0x413c, 0x8154, switch_dell     },	/* Dell Wireless 410 */  	{ -1 }  }; | 
