diff options
author | markster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2003-01-30 19:12:01 +0000 |
---|---|---|
committer | markster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2003-01-30 19:12:01 +0000 |
commit | eafd604d74acd879c8ee1208115d4abf8100228b (patch) | |
tree | d10abdc535a26a5f0ab27b31734174afe6244d9d /wcusb.c | |
parent | 53f0cc03561b24992fc7554778a301bbe96ebe95 (diff) |
Version 0.4.0 from FTP
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@145 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'wcusb.c')
-rwxr-xr-x | wcusb.c | 59 |
1 files changed, 55 insertions, 4 deletions
@@ -38,6 +38,12 @@ #include <linux/init.h> #include <linux/usb.h> #include <linux/errno.h> + +#include <linux/version.h> +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,19) +#define USB2420 +#endif + #ifdef STANDALONE_ZAPATA #include "zaptel.h" @@ -172,9 +178,15 @@ static int Wcusb_ReadWcRegs(struct usb_device *dev, unsigned char index, return 0; } +#ifdef USB2420 +static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)); +static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)); +static void wcusb_async_control(struct urb *urb); +#else static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)); static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)); static void wcusb_async_control(urb_t *urb); +#endif static void proslic_read_direct_async(struct wc_usb_pvt *p, unsigned char address) { @@ -196,13 +208,19 @@ static void proslic_write_direct_async(struct wc_usb_pvt *p, unsigned char addre wcusb_async_write(p, WCUSB_SPORT0, p->wcregbuf, 4, STATE_WCWRITE_WRITERES, wcusb_async_control); } +#ifdef USB2420 +static void wcusb_async_control(struct urb *urb) +#else static void wcusb_async_control(urb_t *urb) +#endif { struct wc_usb_pvt *p = urb->context; p->urbcount--; if (urb->status) { printk("Error in transfer...\n"); /* return is the "right thing", but don't... */ + p->timer = 50; + return; } if (!(p->flags & FLAG_RUNNING)) { return; @@ -278,7 +296,11 @@ static void wcusb_async_control(urb_t *urb) } } +#ifdef USB2420 +static void keypad_check_done(struct urb *urb) +#else static void keypad_check_done(urb_t *urb) +#endif { struct wc_usb_pvt *p = urb->context; struct wc_keypad_data *d = p->pvt_data; @@ -387,12 +409,25 @@ static void wcusb_check_interrupt(struct wc_usb_pvt *p) return; } +#ifdef USB2420 +static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)) +#else static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)) +#endif { - urb_t *urb = &p->control; __u16 size = len; __u16 ind = index; - +#ifdef USB2420 + struct urb *urb = &p->control; + memset(urb, 0, sizeof(struct urb)); + + p->dr.bRequestType = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE; + p->dr.bRequest = REQUEST_NORMAL; + p->dr.wValue = 0; + p->dr.wIndex = cpu_to_le16(ind); + p->dr.wLength = cpu_to_le16(size); +#else + urb_t *urb = &p->control; memset(urb, 0, sizeof(urb_t)); p->dr.requesttype = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE; @@ -400,10 +435,12 @@ static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned p->dr.value = 0; p->dr.index = cpu_to_le16(ind); p->dr.length = cpu_to_le16(size); +#endif FILL_CONTROL_URB(urb, p->dev, usb_rcvctrlpipe(p->dev, 0), (unsigned char *)&p->dr, data, len, complete, p); if (usb_submit_urb(urb)) { printk("wcusb_async_read: control URB died\n"); + p->timer = 50; return -1; } p->controlstate = state; @@ -411,12 +448,25 @@ static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned return 0; } +#ifdef USB2420 +static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)) +#else static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)) +#endif { - urb_t *urb = &p->control; __u16 size = len; __u16 ind = index; - +#ifdef USB2420 + struct urb *urb = &p->control; + memset(urb, 0, sizeof(struct urb)); + + p->dr.bRequestType = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE; + p->dr.bRequest = REQUEST_NORMAL; + p->dr.wValue = 0; + p->dr.wIndex = cpu_to_le16(ind); + p->dr.wLength = cpu_to_le16(size); +#else + urb_t *urb = &p->control; memset(urb, 0, sizeof(urb_t)); p->dr.requesttype = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE; @@ -424,6 +474,7 @@ static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned p->dr.value = 0; p->dr.index = cpu_to_le16(ind); p->dr.length = cpu_to_le16(size); +#endif FILL_CONTROL_URB(urb, p->dev, usb_sndctrlpipe(p->dev, 0), (unsigned char *)&p->dr, data, len, complete, p); if (usb_submit_urb(urb)) { |