Commit 7aa41c3c authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: usbduxfast: rename usbduxfastsub_s variables

For aesthetic reasons, globally rename the variables used for the
struct usbduxfastsub_s * in this driver to 'devpriv'. This variable
pointes to the comedi_device private data.

Also, rename the struct to 'usbduxfast_private' to make its use
a bit clearer.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e4a8ecc0
...@@ -157,7 +157,7 @@ static const struct comedi_lrange range_usbduxfast_ai_range = { ...@@ -157,7 +157,7 @@ static const struct comedi_lrange range_usbduxfast_ai_range = {
* this is the structure which holds all the data of this driver * this is the structure which holds all the data of this driver
* one sub device just now: A/D * one sub device just now: A/D
*/ */
struct usbduxfastsub_s { struct usbduxfast_private {
int attached; /* is attached? */ int attached; /* is attached? */
int probed; /* is it associated with a subdevice? */ int probed; /* is it associated with a subdevice? */
struct usb_device *usb; /* pointer to the usb-device */ struct usb_device *usb; /* pointer to the usb-device */
...@@ -186,7 +186,7 @@ struct usbduxfastsub_s { ...@@ -186,7 +186,7 @@ struct usbduxfastsub_s {
* command is issued. The usb subsystem must be * command is issued. The usb subsystem must be
* initialised before comedi can access it. * initialised before comedi can access it.
*/ */
static struct usbduxfastsub_s usbduxfastsub[NUMUSBDUXFAST]; static struct usbduxfast_private usbduxfastsub[NUMUSBDUXFAST];
static DEFINE_SEMAPHORE(start_stop_sem); static DEFINE_SEMAPHORE(start_stop_sem);
...@@ -196,25 +196,26 @@ static DEFINE_SEMAPHORE(start_stop_sem); ...@@ -196,25 +196,26 @@ static DEFINE_SEMAPHORE(start_stop_sem);
#define SENDADCOMMANDS 0 #define SENDADCOMMANDS 0
#define SENDINITEP6 1 #define SENDINITEP6 1
static int send_dux_commands(struct usbduxfastsub_s *udfs, int cmd_type) static int send_dux_commands(struct usbduxfast_private *devpriv, int cmd_type)
{ {
int tmp, nsent; int tmp, nsent;
udfs->dux_commands[0] = cmd_type; devpriv->dux_commands[0] = cmd_type;
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi%d: usbduxfast: dux_commands: ", printk(KERN_DEBUG "comedi%d: usbduxfast: dux_commands: ",
udfs->comedidev->minor); devpriv->comedidev->minor);
for (tmp = 0; tmp < SIZEOFDUXBUFFER; tmp++) for (tmp = 0; tmp < SIZEOFDUXBUFFER; tmp++)
printk(" %02x", udfs->dux_commands[tmp]); printk(" %02x", devpriv->dux_commands[tmp]);
printk("\n"); printk("\n");
#endif #endif
tmp = usb_bulk_msg(udfs->usb, tmp = usb_bulk_msg(devpriv->usb,
usb_sndbulkpipe(udfs->usb, CHANNELLISTEP), usb_sndbulkpipe(devpriv->usb, CHANNELLISTEP),
udfs->dux_commands, SIZEOFDUXBUFFER, &nsent, 10000); devpriv->dux_commands,
SIZEOFDUXBUFFER, &nsent, 10000);
if (tmp < 0) if (tmp < 0)
dev_err(&udfs->intf->dev, dev_err(&devpriv->intf->dev,
"could not transmit dux_commands to the usb-device, err=%d\n", "could not transmit dux_commands to the usb-device, err=%d\n",
tmp); tmp);
return tmp; return tmp;
...@@ -224,15 +225,15 @@ static int send_dux_commands(struct usbduxfastsub_s *udfs, int cmd_type) ...@@ -224,15 +225,15 @@ static int send_dux_commands(struct usbduxfastsub_s *udfs, int cmd_type)
* Stops the data acquision. * Stops the data acquision.
* It should be safe to call this function from any context. * It should be safe to call this function from any context.
*/ */
static int usbduxfastsub_unlink_InURBs(struct usbduxfastsub_s *udfs) static int usbduxfastsub_unlink_InURBs(struct usbduxfast_private *devpriv)
{ {
int j = 0; int j = 0;
int err = 0; int err = 0;
if (udfs && udfs->urbIn) { if (devpriv && devpriv->urbIn) {
udfs->ai_cmd_running = 0; devpriv->ai_cmd_running = 0;
/* waits until a running transfer is over */ /* waits until a running transfer is over */
usb_kill_urb(udfs->urbIn); usb_kill_urb(devpriv->urbIn);
j = 0; j = 0;
} }
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
...@@ -246,23 +247,24 @@ static int usbduxfastsub_unlink_InURBs(struct usbduxfastsub_s *udfs) ...@@ -246,23 +247,24 @@ static int usbduxfastsub_unlink_InURBs(struct usbduxfastsub_s *udfs)
* Is called from within this driver from both the * Is called from within this driver from both the
* interrupt context and from comedi. * interrupt context and from comedi.
*/ */
static int usbduxfast_ai_stop(struct usbduxfastsub_s *udfs, int do_unlink) static int usbduxfast_ai_stop(struct usbduxfast_private *devpriv,
int do_unlink)
{ {
int ret = 0; int ret = 0;
if (!udfs) { if (!devpriv) {
pr_err("%s: udfs=NULL!\n", __func__); pr_err("%s: devpriv=NULL!\n", __func__);
return -EFAULT; return -EFAULT;
} }
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi: usbduxfast_ai_stop\n"); printk(KERN_DEBUG "comedi: usbduxfast_ai_stop\n");
#endif #endif
udfs->ai_cmd_running = 0; devpriv->ai_cmd_running = 0;
if (do_unlink) if (do_unlink)
/* stop aquistion */ /* stop aquistion */
ret = usbduxfastsub_unlink_InURBs(udfs); ret = usbduxfastsub_unlink_InURBs(devpriv);
return ret; return ret;
} }
...@@ -274,26 +276,25 @@ static int usbduxfast_ai_stop(struct usbduxfastsub_s *udfs, int do_unlink) ...@@ -274,26 +276,25 @@ static int usbduxfast_ai_stop(struct usbduxfastsub_s *udfs, int do_unlink)
static int usbduxfast_ai_cancel(struct comedi_device *dev, static int usbduxfast_ai_cancel(struct comedi_device *dev,
struct comedi_subdevice *s) struct comedi_subdevice *s)
{ {
struct usbduxfastsub_s *udfs; struct usbduxfast_private *devpriv = dev->private;
int ret; int ret;
/* force unlink of all urbs */ /* force unlink of all urbs */
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi: usbduxfast_ai_cancel\n"); printk(KERN_DEBUG "comedi: usbduxfast_ai_cancel\n");
#endif #endif
udfs = dev->private; if (!devpriv) {
if (!udfs) { dev_err(dev->class_dev, "%s: devpriv=NULL\n", __func__);
dev_err(dev->class_dev, "%s: udfs=NULL\n", __func__);
return -EFAULT; return -EFAULT;
} }
down(&udfs->sem); down(&devpriv->sem);
if (!udfs->probed) { if (!devpriv->probed) {
up(&udfs->sem); up(&devpriv->sem);
return -ENODEV; return -ENODEV;
} }
/* unlink */ /* unlink */
ret = usbduxfast_ai_stop(udfs, 1); ret = usbduxfast_ai_stop(devpriv, 1);
up(&udfs->sem); up(&devpriv->sem);
return ret; return ret;
} }
...@@ -305,7 +306,7 @@ static int usbduxfast_ai_cancel(struct comedi_device *dev, ...@@ -305,7 +306,7 @@ static int usbduxfast_ai_cancel(struct comedi_device *dev,
static void usbduxfastsub_ai_Irq(struct urb *urb) static void usbduxfastsub_ai_Irq(struct urb *urb)
{ {
int n, err; int n, err;
struct usbduxfastsub_s *udfs; struct usbduxfast_private *devpriv;
struct comedi_device *this_comedidev; struct comedi_device *this_comedidev;
struct comedi_subdevice *s; struct comedi_subdevice *s;
...@@ -320,14 +321,14 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) ...@@ -320,14 +321,14 @@ static void usbduxfastsub_ai_Irq(struct urb *urb)
pr_err("urb context is a NULL pointer!\n"); pr_err("urb context is a NULL pointer!\n");
return; return;
} }
/* the private structure of the subdevice is usbduxfastsub_s */ /* the private structure of the subdevice is usbduxfast_private */
udfs = this_comedidev->private; devpriv = this_comedidev->private;
if (!udfs) { if (!devpriv) {
pr_err("private of comedi subdev is a NULL pointer!\n"); pr_err("private of comedi subdev is a NULL pointer!\n");
return; return;
} }
/* are we running a command? */ /* are we running a command? */
if (unlikely(!udfs->ai_cmd_running)) { if (unlikely(!devpriv->ai_cmd_running)) {
/* /*
* not running a command * not running a command
* do not continue execution if no asynchronous command * do not continue execution if no asynchronous command
...@@ -336,7 +337,7 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) ...@@ -336,7 +337,7 @@ static void usbduxfastsub_ai_Irq(struct urb *urb)
return; return;
} }
if (unlikely(!udfs->attached)) { if (unlikely(!devpriv->attached)) {
/* no comedi device there */ /* no comedi device there */
return; return;
} }
...@@ -359,9 +360,9 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) ...@@ -359,9 +360,9 @@ static void usbduxfastsub_ai_Irq(struct urb *urb)
/* tell this comedi */ /* tell this comedi */
s->async->events |= COMEDI_CB_EOA; s->async->events |= COMEDI_CB_EOA;
s->async->events |= COMEDI_CB_ERROR; s->async->events |= COMEDI_CB_ERROR;
comedi_event(udfs->comedidev, s); comedi_event(devpriv->comedidev, s);
/* stop the transfer w/o unlink */ /* stop the transfer w/o unlink */
usbduxfast_ai_stop(udfs, 0); usbduxfast_ai_stop(devpriv, 0);
return; return;
default: default:
...@@ -369,54 +370,54 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) ...@@ -369,54 +370,54 @@ static void usbduxfastsub_ai_Irq(struct urb *urb)
urb->status); urb->status);
s->async->events |= COMEDI_CB_EOA; s->async->events |= COMEDI_CB_EOA;
s->async->events |= COMEDI_CB_ERROR; s->async->events |= COMEDI_CB_ERROR;
comedi_event(udfs->comedidev, s); comedi_event(devpriv->comedidev, s);
usbduxfast_ai_stop(udfs, 0); usbduxfast_ai_stop(devpriv, 0);
return; return;
} }
if (!udfs->ignore) { if (!devpriv->ignore) {
if (!udfs->ai_continous) { if (!devpriv->ai_continous) {
/* not continuous, fixed number of samples */ /* not continuous, fixed number of samples */
n = urb->actual_length / sizeof(uint16_t); n = urb->actual_length / sizeof(uint16_t);
if (unlikely(udfs->ai_sample_count < n)) { if (unlikely(devpriv->ai_sample_count < n)) {
/* /*
* we have send only a fraction of the bytes * we have send only a fraction of the bytes
* received * received
*/ */
cfc_write_array_to_buffer(s, cfc_write_array_to_buffer(s,
urb->transfer_buffer, urb->transfer_buffer,
udfs->ai_sample_count devpriv->ai_sample_count
* sizeof(uint16_t)); * sizeof(uint16_t));
usbduxfast_ai_stop(udfs, 0); usbduxfast_ai_stop(devpriv, 0);
/* tell comedi that the acquistion is over */ /* tell comedi that the acquistion is over */
s->async->events |= COMEDI_CB_EOA; s->async->events |= COMEDI_CB_EOA;
comedi_event(udfs->comedidev, s); comedi_event(devpriv->comedidev, s);
return; return;
} }
udfs->ai_sample_count -= n; devpriv->ai_sample_count -= n;
} }
/* write the full buffer to comedi */ /* write the full buffer to comedi */
err = cfc_write_array_to_buffer(s, urb->transfer_buffer, err = cfc_write_array_to_buffer(s, urb->transfer_buffer,
urb->actual_length); urb->actual_length);
if (unlikely(err == 0)) { if (unlikely(err == 0)) {
/* buffer overflow */ /* buffer overflow */
usbduxfast_ai_stop(udfs, 0); usbduxfast_ai_stop(devpriv, 0);
return; return;
} }
/* tell comedi that data is there */ /* tell comedi that data is there */
comedi_event(udfs->comedidev, s); comedi_event(devpriv->comedidev, s);
} else { } else {
/* ignore this packet */ /* ignore this packet */
udfs->ignore--; devpriv->ignore--;
} }
/* /*
* command is still running * command is still running
* resubmit urb for BULK transfer * resubmit urb for BULK transfer
*/ */
urb->dev = udfs->usb; urb->dev = devpriv->usb;
urb->status = 0; urb->status = 0;
err = usb_submit_urb(urb, GFP_ATOMIC); err = usb_submit_urb(urb, GFP_ATOMIC);
if (err < 0) { if (err < 0) {
...@@ -424,12 +425,12 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) ...@@ -424,12 +425,12 @@ static void usbduxfastsub_ai_Irq(struct urb *urb)
"urb resubm failed: %d", err); "urb resubm failed: %d", err);
s->async->events |= COMEDI_CB_EOA; s->async->events |= COMEDI_CB_EOA;
s->async->events |= COMEDI_CB_ERROR; s->async->events |= COMEDI_CB_ERROR;
comedi_event(udfs->comedidev, s); comedi_event(devpriv->comedidev, s);
usbduxfast_ai_stop(udfs, 0); usbduxfast_ai_stop(devpriv, 0);
} }
} }
static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) static int usbduxfastsub_start(struct usbduxfast_private *devpriv)
{ {
int ret; int ret;
unsigned char *local_transfer_buffer; unsigned char *local_transfer_buffer;
...@@ -441,7 +442,7 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) ...@@ -441,7 +442,7 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs)
/* 7f92 to zero */ /* 7f92 to zero */
*local_transfer_buffer = 0; *local_transfer_buffer = 0;
/* bRequest, "Firmware" */ /* bRequest, "Firmware" */
ret = usb_control_msg(udfs->usb, usb_sndctrlpipe(udfs->usb, 0), ret = usb_control_msg(devpriv->usb, usb_sndctrlpipe(devpriv->usb, 0),
USBDUXFASTSUB_FIRMWARE, USBDUXFASTSUB_FIRMWARE,
VENDOR_DIR_OUT, /* bmRequestType */ VENDOR_DIR_OUT, /* bmRequestType */
USBDUXFASTSUB_CPUCS, /* Value */ USBDUXFASTSUB_CPUCS, /* Value */
...@@ -451,14 +452,14 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) ...@@ -451,14 +452,14 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs)
1, /* Length */ 1, /* Length */
EZTIMEOUT); /* Timeout */ EZTIMEOUT); /* Timeout */
if (ret < 0) if (ret < 0)
dev_err(&udfs->intf->dev, dev_err(&devpriv->intf->dev,
"control msg failed (start)\n"); "control msg failed (start)\n");
kfree(local_transfer_buffer); kfree(local_transfer_buffer);
return ret; return ret;
} }
static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) static int usbduxfastsub_stop(struct usbduxfast_private *devpriv)
{ {
int ret; int ret;
unsigned char *local_transfer_buffer; unsigned char *local_transfer_buffer;
...@@ -470,7 +471,7 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) ...@@ -470,7 +471,7 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs)
/* 7f92 to one */ /* 7f92 to one */
*local_transfer_buffer = 1; *local_transfer_buffer = 1;
/* bRequest, "Firmware" */ /* bRequest, "Firmware" */
ret = usb_control_msg(udfs->usb, usb_sndctrlpipe(udfs->usb, 0), ret = usb_control_msg(devpriv->usb, usb_sndctrlpipe(devpriv->usb, 0),
USBDUXFASTSUB_FIRMWARE, USBDUXFASTSUB_FIRMWARE,
VENDOR_DIR_OUT, /* bmRequestType */ VENDOR_DIR_OUT, /* bmRequestType */
USBDUXFASTSUB_CPUCS, /* Value */ USBDUXFASTSUB_CPUCS, /* Value */
...@@ -478,14 +479,14 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) ...@@ -478,14 +479,14 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs)
local_transfer_buffer, 1, /* Length */ local_transfer_buffer, 1, /* Length */
EZTIMEOUT); /* Timeout */ EZTIMEOUT); /* Timeout */
if (ret < 0) if (ret < 0)
dev_err(&udfs->intf->dev, dev_err(&devpriv->intf->dev,
"control msg failed (stop)\n"); "control msg failed (stop)\n");
kfree(local_transfer_buffer); kfree(local_transfer_buffer);
return ret; return ret;
} }
static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, static int usbduxfastsub_upload(struct usbduxfast_private *devpriv,
unsigned char *local_transfer_buffer, unsigned char *local_transfer_buffer,
unsigned int startAddr, unsigned int len) unsigned int startAddr, unsigned int len)
{ {
...@@ -497,7 +498,7 @@ static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, ...@@ -497,7 +498,7 @@ static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs,
startAddr, local_transfer_buffer[0]); startAddr, local_transfer_buffer[0]);
#endif #endif
/* brequest, firmware */ /* brequest, firmware */
ret = usb_control_msg(udfs->usb, usb_sndctrlpipe(udfs->usb, 0), ret = usb_control_msg(devpriv->usb, usb_sndctrlpipe(devpriv->usb, 0),
USBDUXFASTSUB_FIRMWARE, USBDUXFASTSUB_FIRMWARE,
VENDOR_DIR_OUT, /* bmRequestType */ VENDOR_DIR_OUT, /* bmRequestType */
startAddr, /* value */ startAddr, /* value */
...@@ -512,33 +513,33 @@ static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, ...@@ -512,33 +513,33 @@ static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs,
#endif #endif
if (ret < 0) { if (ret < 0) {
dev_err(&udfs->intf->dev, "uppload failed\n"); dev_err(&devpriv->intf->dev, "uppload failed\n");
return ret; return ret;
} }
return 0; return 0;
} }
static int usbduxfastsub_submit_InURBs(struct usbduxfastsub_s *udfs) static int usbduxfastsub_submit_InURBs(struct usbduxfast_private *devpriv)
{ {
int ret; int ret;
if (!udfs) if (!devpriv)
return -EFAULT; return -EFAULT;
usb_fill_bulk_urb(udfs->urbIn, udfs->usb, usb_fill_bulk_urb(devpriv->urbIn, devpriv->usb,
usb_rcvbulkpipe(udfs->usb, BULKINEP), usb_rcvbulkpipe(devpriv->usb, BULKINEP),
udfs->transfer_buffer, devpriv->transfer_buffer,
SIZEINBUF, usbduxfastsub_ai_Irq, udfs->comedidev); SIZEINBUF, usbduxfastsub_ai_Irq, devpriv->comedidev);
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi%d: usbduxfast: submitting in-urb: " printk(KERN_DEBUG "comedi%d: usbduxfast: submitting in-urb: "
"0x%p,0x%p\n", udfs->comedidev->minor, udfs->urbIn->context, "0x%p,0x%p\n", devpriv->comedidev->minor, devpriv->urbIn->context,
udfs->urbIn->dev); devpriv->urbIn->dev);
#endif #endif
ret = usb_submit_urb(udfs->urbIn, GFP_ATOMIC); ret = usb_submit_urb(devpriv->urbIn, GFP_ATOMIC);
if (ret) { if (ret) {
dev_err(&udfs->intf->dev, dev_err(&devpriv->intf->dev,
"ai: usb_submit_urb error %d\n", ret); "ai: usb_submit_urb error %d\n", ret);
return ret; return ret;
} }
...@@ -549,12 +550,12 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev, ...@@ -549,12 +550,12 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_cmd *cmd) struct comedi_cmd *cmd)
{ {
struct usbduxfastsub_s *udfs = dev->private; struct usbduxfast_private *devpriv = dev->private;
int err = 0; int err = 0;
long int steps, tmp; long int steps, tmp;
int minSamplPer; int minSamplPer;
if (!udfs->probed) if (!devpriv->probed)
return -ENODEV; return -ENODEV;
/* Step 1 : check if triggers are trivially valid */ /* Step 1 : check if triggers are trivially valid */
...@@ -646,15 +647,15 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev, ...@@ -646,15 +647,15 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
unsigned int trignum) unsigned int trignum)
{ {
struct usbduxfast_private *devpriv = dev->private;
int ret; int ret;
struct usbduxfastsub_s *udfs = dev->private;
if (!udfs) if (!devpriv)
return -EFAULT; return -EFAULT;
down(&udfs->sem); down(&devpriv->sem);
if (!udfs->probed) { if (!devpriv->probed) {
up(&udfs->sem); up(&devpriv->sem);
return -ENODEV; return -ENODEV;
} }
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
...@@ -663,17 +664,17 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev, ...@@ -663,17 +664,17 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev,
if (trignum != 0) { if (trignum != 0) {
dev_err(dev->class_dev, "%s: invalid trignum\n", __func__); dev_err(dev->class_dev, "%s: invalid trignum\n", __func__);
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
if (!udfs->ai_cmd_running) { if (!devpriv->ai_cmd_running) {
udfs->ai_cmd_running = 1; devpriv->ai_cmd_running = 1;
ret = usbduxfastsub_submit_InURBs(udfs); ret = usbduxfastsub_submit_InURBs(devpriv);
if (ret < 0) { if (ret < 0) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"%s: urbSubmit: err=%d\n", __func__, ret); "%s: urbSubmit: err=%d\n", __func__, ret);
udfs->ai_cmd_running = 0; devpriv->ai_cmd_running = 0;
up(&udfs->sem); up(&devpriv->sem);
return ret; return ret;
} }
s->async->inttrig = NULL; s->async->inttrig = NULL;
...@@ -681,7 +682,7 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev, ...@@ -681,7 +682,7 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev,
dev_err(dev->class_dev, dev_err(dev->class_dev,
"ai_inttrig but acqu is already running\n"); "ai_inttrig but acqu is already running\n");
} }
up(&udfs->sem); up(&devpriv->sem);
return 1; return 1;
} }
...@@ -697,29 +698,28 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev, ...@@ -697,29 +698,28 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev,
static int usbduxfast_ai_cmd(struct comedi_device *dev, static int usbduxfast_ai_cmd(struct comedi_device *dev,
struct comedi_subdevice *s) struct comedi_subdevice *s)
{ {
struct usbduxfast_private *devpriv = dev->private;
struct comedi_cmd *cmd = &s->async->cmd; struct comedi_cmd *cmd = &s->async->cmd;
unsigned int chan, gain, rngmask = 0xff; unsigned int chan, gain, rngmask = 0xff;
int i, j, ret; int i, j, ret;
struct usbduxfastsub_s *udfs;
int result; int result;
long steps, steps_tmp; long steps, steps_tmp;
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi%d: usbduxfast_ai_cmd\n", dev->minor); printk(KERN_DEBUG "comedi%d: usbduxfast_ai_cmd\n", dev->minor);
#endif #endif
udfs = dev->private; if (!devpriv)
if (!udfs)
return -EFAULT; return -EFAULT;
down(&udfs->sem); down(&devpriv->sem);
if (!udfs->probed) { if (!devpriv->probed) {
up(&udfs->sem); up(&devpriv->sem);
return -ENODEV; return -ENODEV;
} }
if (udfs->ai_cmd_running) { if (devpriv->ai_cmd_running) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"ai_cmd not possible. Another ai_cmd is running.\n"); "ai_cmd not possible. Another ai_cmd is running.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EBUSY; return -EBUSY;
} }
/* set current channel of the running acquisition to zero */ /* set current channel of the running acquisition to zero */
...@@ -729,7 +729,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -729,7 +729,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
* ignore the first buffers from the device if there * ignore the first buffers from the device if there
* is an error condition * is an error condition
*/ */
udfs->ignore = PACKETS_TO_IGNORE; devpriv->ignore = PACKETS_TO_IGNORE;
if (cmd->chanlist_len > 0) { if (cmd->chanlist_len > 0) {
gain = CR_RANGE(cmd->chanlist[0]); gain = CR_RANGE(cmd->chanlist[0]);
...@@ -738,14 +738,14 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -738,14 +738,14 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
if (chan != i) { if (chan != i) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"cmd is accepting only consecutive channels.\n"); "cmd is accepting only consecutive channels.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
if ((gain != CR_RANGE(cmd->chanlist[i])) if ((gain != CR_RANGE(cmd->chanlist[i]))
&& (cmd->chanlist_len > 3)) { && (cmd->chanlist_len > 3)) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"the gain must be the same for all channels.\n"); "the gain must be the same for all channels.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
if (i >= NUMCHANNELS) { if (i >= NUMCHANNELS) {
...@@ -759,7 +759,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -759,7 +759,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
if (cmd->scan_begin_src == TRIG_TIMER) { if (cmd->scan_begin_src == TRIG_TIMER) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"scan_begin_src==TRIG_TIMER not valid.\n"); "scan_begin_src==TRIG_TIMER not valid.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
if (cmd->convert_src == TRIG_TIMER) if (cmd->convert_src == TRIG_TIMER)
...@@ -769,19 +769,19 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -769,19 +769,19 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
dev_err(dev->class_dev, dev_err(dev->class_dev,
"ai_cmd: steps=%ld, scan_begin_arg=%d. Not properly tested by cmdtest?\n", "ai_cmd: steps=%ld, scan_begin_arg=%d. Not properly tested by cmdtest?\n",
steps, cmd->scan_begin_arg); steps, cmd->scan_begin_arg);
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
if (steps > MAX_SAMPLING_PERIOD) { if (steps > MAX_SAMPLING_PERIOD) {
dev_err(dev->class_dev, "ai_cmd: sampling rate too low.\n"); dev_err(dev->class_dev, "ai_cmd: sampling rate too low.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
if ((cmd->start_src == TRIG_EXT) && (cmd->chanlist_len != 1) if ((cmd->start_src == TRIG_EXT) && (cmd->chanlist_len != 1)
&& (cmd->chanlist_len != 16)) { && (cmd->chanlist_len != 16)) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"ai_cmd: TRIG_EXT only with 1 or 16 channels possible.\n"); "ai_cmd: TRIG_EXT only with 1 or 16 channels possible.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
...@@ -808,17 +808,17 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -808,17 +808,17 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
/* we loop here until ready has been set */ /* we loop here until ready has been set */
if (cmd->start_src == TRIG_EXT) { if (cmd->start_src == TRIG_EXT) {
/* branch back to state 0 */ /* branch back to state 0 */
udfs->dux_commands[LENBASE + 0] = 0x01; devpriv->dux_commands[LENBASE + 0] = 0x01;
/* deceision state w/o data */ /* deceision state w/o data */
udfs->dux_commands[OPBASE + 0] = 0x01; devpriv->dux_commands[OPBASE + 0] = 0x01;
udfs->dux_commands[OUTBASE + 0] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 0] = 0xFF & rngmask;
/* RDY0 = 0 */ /* RDY0 = 0 */
udfs->dux_commands[LOGBASE + 0] = 0x00; devpriv->dux_commands[LOGBASE + 0] = 0x00;
} else { /* we just proceed to state 1 */ } else { /* we just proceed to state 1 */
udfs->dux_commands[LENBASE + 0] = 1; devpriv->dux_commands[LENBASE + 0] = 1;
udfs->dux_commands[OPBASE + 0] = 0; devpriv->dux_commands[OPBASE + 0] = 0;
udfs->dux_commands[OUTBASE + 0] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 0] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 0] = 0; devpriv->dux_commands[LOGBASE + 0] = 0;
} }
if (steps < MIN_SAMPLING_PERIOD) { if (steps < MIN_SAMPLING_PERIOD) {
...@@ -831,33 +831,33 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -831,33 +831,33 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
*/ */
/* branch back to state 1 */ /* branch back to state 1 */
udfs->dux_commands[LENBASE + 1] = 0x89; devpriv->dux_commands[LENBASE + 1] = 0x89;
/* deceision state with data */ /* deceision state with data */
udfs->dux_commands[OPBASE + 1] = 0x03; devpriv->dux_commands[OPBASE + 1] = 0x03;
udfs->dux_commands[OUTBASE + 1] = devpriv->dux_commands[OUTBASE + 1] =
0xFF & rngmask; 0xFF & rngmask;
/* doesn't matter */ /* doesn't matter */
udfs->dux_commands[LOGBASE + 1] = 0xFF; devpriv->dux_commands[LOGBASE + 1] = 0xFF;
} else { } else {
/* /*
* we loop through two states: data and delay * we loop through two states: data and delay
* max rate is 15MHz * max rate is 15MHz
*/ */
udfs->dux_commands[LENBASE + 1] = steps - 1; devpriv->dux_commands[LENBASE + 1] = steps - 1;
/* data */ /* data */
udfs->dux_commands[OPBASE + 1] = 0x02; devpriv->dux_commands[OPBASE + 1] = 0x02;
udfs->dux_commands[OUTBASE + 1] = devpriv->dux_commands[OUTBASE + 1] =
0xFF & rngmask; 0xFF & rngmask;
/* doesn't matter */ /* doesn't matter */
udfs->dux_commands[LOGBASE + 1] = 0; devpriv->dux_commands[LOGBASE + 1] = 0;
/* branch back to state 1 */ /* branch back to state 1 */
udfs->dux_commands[LENBASE + 2] = 0x09; devpriv->dux_commands[LENBASE + 2] = 0x09;
/* deceision state w/o data */ /* deceision state w/o data */
udfs->dux_commands[OPBASE + 2] = 0x01; devpriv->dux_commands[OPBASE + 2] = 0x01;
udfs->dux_commands[OUTBASE + 2] = devpriv->dux_commands[OUTBASE + 2] =
0xFF & rngmask; 0xFF & rngmask;
/* doesn't matter */ /* doesn't matter */
udfs->dux_commands[LOGBASE + 2] = 0xFF; devpriv->dux_commands[LOGBASE + 2] = 0xFF;
} }
} else { } else {
/* /*
...@@ -869,26 +869,26 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -869,26 +869,26 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
steps = steps - 1; steps = steps - 1;
/* do the first part of the delay */ /* do the first part of the delay */
udfs->dux_commands[LENBASE + 1] = steps / 2; devpriv->dux_commands[LENBASE + 1] = steps / 2;
udfs->dux_commands[OPBASE + 1] = 0; devpriv->dux_commands[OPBASE + 1] = 0;
udfs->dux_commands[OUTBASE + 1] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 1] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 1] = 0; devpriv->dux_commands[LOGBASE + 1] = 0;
/* and the second part */ /* and the second part */
udfs->dux_commands[LENBASE + 2] = steps - steps / 2; devpriv->dux_commands[LENBASE + 2] = steps - steps / 2;
udfs->dux_commands[OPBASE + 2] = 0; devpriv->dux_commands[OPBASE + 2] = 0;
udfs->dux_commands[OUTBASE + 2] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 2] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 2] = 0; devpriv->dux_commands[LOGBASE + 2] = 0;
/* get the data and branch back */ /* get the data and branch back */
/* branch back to state 1 */ /* branch back to state 1 */
udfs->dux_commands[LENBASE + 3] = 0x09; devpriv->dux_commands[LENBASE + 3] = 0x09;
/* deceision state w data */ /* deceision state w data */
udfs->dux_commands[OPBASE + 3] = 0x03; devpriv->dux_commands[OPBASE + 3] = 0x03;
udfs->dux_commands[OUTBASE + 3] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 3] = 0xFF & rngmask;
/* doesn't matter */ /* doesn't matter */
udfs->dux_commands[LOGBASE + 3] = 0xFF; devpriv->dux_commands[LOGBASE + 3] = 0xFF;
} }
break; break;
...@@ -903,11 +903,11 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -903,11 +903,11 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
else else
rngmask = 0xff; rngmask = 0xff;
udfs->dux_commands[LENBASE + 0] = 1; devpriv->dux_commands[LENBASE + 0] = 1;
/* data */ /* data */
udfs->dux_commands[OPBASE + 0] = 0x02; devpriv->dux_commands[OPBASE + 0] = 0x02;
udfs->dux_commands[OUTBASE + 0] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 0] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 0] = 0; devpriv->dux_commands[LOGBASE + 0] = 0;
/* we have 1 state with duration 1: state 0 */ /* we have 1 state with duration 1: state 0 */
steps_tmp = steps - 1; steps_tmp = steps - 1;
...@@ -918,23 +918,23 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -918,23 +918,23 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
rngmask = 0xff; rngmask = 0xff;
/* do the first part of the delay */ /* do the first part of the delay */
udfs->dux_commands[LENBASE + 1] = steps_tmp / 2; devpriv->dux_commands[LENBASE + 1] = steps_tmp / 2;
udfs->dux_commands[OPBASE + 1] = 0; devpriv->dux_commands[OPBASE + 1] = 0;
/* count */ /* count */
udfs->dux_commands[OUTBASE + 1] = 0xFE & rngmask; devpriv->dux_commands[OUTBASE + 1] = 0xFE & rngmask;
udfs->dux_commands[LOGBASE + 1] = 0; devpriv->dux_commands[LOGBASE + 1] = 0;
/* and the second part */ /* and the second part */
udfs->dux_commands[LENBASE + 2] = steps_tmp - steps_tmp / 2; devpriv->dux_commands[LENBASE + 2] = steps_tmp - steps_tmp / 2;
udfs->dux_commands[OPBASE + 2] = 0; devpriv->dux_commands[OPBASE + 2] = 0;
udfs->dux_commands[OUTBASE + 2] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 2] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 2] = 0; devpriv->dux_commands[LOGBASE + 2] = 0;
udfs->dux_commands[LENBASE + 3] = 1; devpriv->dux_commands[LENBASE + 3] = 1;
/* data */ /* data */
udfs->dux_commands[OPBASE + 3] = 0x02; devpriv->dux_commands[OPBASE + 3] = 0x02;
udfs->dux_commands[OUTBASE + 3] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 3] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 3] = 0; devpriv->dux_commands[LOGBASE + 3] = 0;
/* /*
* we have 2 states with duration 1: step 6 and * we have 2 states with duration 1: step 6 and
...@@ -948,22 +948,22 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -948,22 +948,22 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
rngmask = 0xff; rngmask = 0xff;
/* do the first part of the delay */ /* do the first part of the delay */
udfs->dux_commands[LENBASE + 4] = steps_tmp / 2; devpriv->dux_commands[LENBASE + 4] = steps_tmp / 2;
udfs->dux_commands[OPBASE + 4] = 0; devpriv->dux_commands[OPBASE + 4] = 0;
/* reset */ /* reset */
udfs->dux_commands[OUTBASE + 4] = (0xFF - 0x02) & rngmask; devpriv->dux_commands[OUTBASE + 4] = (0xFF - 0x02) & rngmask;
udfs->dux_commands[LOGBASE + 4] = 0; devpriv->dux_commands[LOGBASE + 4] = 0;
/* and the second part */ /* and the second part */
udfs->dux_commands[LENBASE + 5] = steps_tmp - steps_tmp / 2; devpriv->dux_commands[LENBASE + 5] = steps_tmp - steps_tmp / 2;
udfs->dux_commands[OPBASE + 5] = 0; devpriv->dux_commands[OPBASE + 5] = 0;
udfs->dux_commands[OUTBASE + 5] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 5] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 5] = 0; devpriv->dux_commands[LOGBASE + 5] = 0;
udfs->dux_commands[LENBASE + 6] = 1; devpriv->dux_commands[LENBASE + 6] = 1;
udfs->dux_commands[OPBASE + 6] = 0; devpriv->dux_commands[OPBASE + 6] = 0;
udfs->dux_commands[OUTBASE + 6] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 6] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 6] = 0; devpriv->dux_commands[LOGBASE + 6] = 0;
break; break;
case 3: case 3:
...@@ -979,12 +979,12 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -979,12 +979,12 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
* commit data to the FIFO and do the first part * commit data to the FIFO and do the first part
* of the delay * of the delay
*/ */
udfs->dux_commands[LENBASE + j * 2] = steps / 2; devpriv->dux_commands[LENBASE + j * 2] = steps / 2;
/* data */ /* data */
udfs->dux_commands[OPBASE + j * 2] = 0x02; devpriv->dux_commands[OPBASE + j * 2] = 0x02;
/* no change */ /* no change */
udfs->dux_commands[OUTBASE + j * 2] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + j * 2] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + j * 2] = 0; devpriv->dux_commands[LOGBASE + j * 2] = 0;
if (CR_RANGE(cmd->chanlist[j + 1]) > 0) if (CR_RANGE(cmd->chanlist[j + 1]) > 0)
rngmask = 0xff - 0x04; rngmask = 0xff - 0x04;
...@@ -992,25 +992,25 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -992,25 +992,25 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
rngmask = 0xff; rngmask = 0xff;
/* do the second part of the delay */ /* do the second part of the delay */
udfs->dux_commands[LENBASE + j * 2 + 1] = devpriv->dux_commands[LENBASE + j * 2 + 1] =
steps - steps / 2; steps - steps / 2;
/* no data */ /* no data */
udfs->dux_commands[OPBASE + j * 2 + 1] = 0; devpriv->dux_commands[OPBASE + j * 2 + 1] = 0;
/* count */ /* count */
udfs->dux_commands[OUTBASE + j * 2 + 1] = devpriv->dux_commands[OUTBASE + j * 2 + 1] =
0xFE & rngmask; 0xFE & rngmask;
udfs->dux_commands[LOGBASE + j * 2 + 1] = 0; devpriv->dux_commands[LOGBASE + j * 2 + 1] = 0;
} }
/* 2 steps with duration 1: the idele step and step 6: */ /* 2 steps with duration 1: the idele step and step 6: */
steps_tmp = steps - 2; steps_tmp = steps - 2;
/* commit data to the FIFO and do the first part of the delay */ /* commit data to the FIFO and do the first part of the delay */
udfs->dux_commands[LENBASE + 4] = steps_tmp / 2; devpriv->dux_commands[LENBASE + 4] = steps_tmp / 2;
/* data */ /* data */
udfs->dux_commands[OPBASE + 4] = 0x02; devpriv->dux_commands[OPBASE + 4] = 0x02;
udfs->dux_commands[OUTBASE + 4] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 4] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 4] = 0; devpriv->dux_commands[LOGBASE + 4] = 0;
if (CR_RANGE(cmd->chanlist[0]) > 0) if (CR_RANGE(cmd->chanlist[0]) > 0)
rngmask = 0xff - 0x04; rngmask = 0xff - 0x04;
...@@ -1018,17 +1018,17 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -1018,17 +1018,17 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
rngmask = 0xff; rngmask = 0xff;
/* do the second part of the delay */ /* do the second part of the delay */
udfs->dux_commands[LENBASE + 5] = steps_tmp - steps_tmp / 2; devpriv->dux_commands[LENBASE + 5] = steps_tmp - steps_tmp / 2;
/* no data */ /* no data */
udfs->dux_commands[OPBASE + 5] = 0; devpriv->dux_commands[OPBASE + 5] = 0;
/* reset */ /* reset */
udfs->dux_commands[OUTBASE + 5] = (0xFF - 0x02) & rngmask; devpriv->dux_commands[OUTBASE + 5] = (0xFF - 0x02) & rngmask;
udfs->dux_commands[LOGBASE + 5] = 0; devpriv->dux_commands[LOGBASE + 5] = 0;
udfs->dux_commands[LENBASE + 6] = 1; devpriv->dux_commands[LENBASE + 6] = 1;
udfs->dux_commands[OPBASE + 6] = 0; devpriv->dux_commands[OPBASE + 6] = 0;
udfs->dux_commands[OUTBASE + 6] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 6] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 6] = 0; devpriv->dux_commands[LOGBASE + 6] = 0;
case 16: case 16:
if (CR_RANGE(cmd->chanlist[0]) > 0) if (CR_RANGE(cmd->chanlist[0]) > 0)
...@@ -1042,63 +1042,63 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -1042,63 +1042,63 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
*/ */
/* branch back to state 0 */ /* branch back to state 0 */
udfs->dux_commands[LENBASE + 0] = 0x01; devpriv->dux_commands[LENBASE + 0] = 0x01;
/* deceision state w/o data */ /* deceision state w/o data */
udfs->dux_commands[OPBASE + 0] = 0x01; devpriv->dux_commands[OPBASE + 0] = 0x01;
/* reset */ /* reset */
udfs->dux_commands[OUTBASE + 0] = devpriv->dux_commands[OUTBASE + 0] =
(0xFF - 0x02) & rngmask; (0xFF - 0x02) & rngmask;
/* RDY0 = 0 */ /* RDY0 = 0 */
udfs->dux_commands[LOGBASE + 0] = 0x00; devpriv->dux_commands[LOGBASE + 0] = 0x00;
} else { } else {
/* /*
* we just proceed to state 1 * we just proceed to state 1
*/ */
/* 30us reset pulse */ /* 30us reset pulse */
udfs->dux_commands[LENBASE + 0] = 255; devpriv->dux_commands[LENBASE + 0] = 255;
udfs->dux_commands[OPBASE + 0] = 0; devpriv->dux_commands[OPBASE + 0] = 0;
/* reset */ /* reset */
udfs->dux_commands[OUTBASE + 0] = devpriv->dux_commands[OUTBASE + 0] =
(0xFF - 0x02) & rngmask; (0xFF - 0x02) & rngmask;
udfs->dux_commands[LOGBASE + 0] = 0; devpriv->dux_commands[LOGBASE + 0] = 0;
} }
/* commit data to the FIFO */ /* commit data to the FIFO */
udfs->dux_commands[LENBASE + 1] = 1; devpriv->dux_commands[LENBASE + 1] = 1;
/* data */ /* data */
udfs->dux_commands[OPBASE + 1] = 0x02; devpriv->dux_commands[OPBASE + 1] = 0x02;
udfs->dux_commands[OUTBASE + 1] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 1] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 1] = 0; devpriv->dux_commands[LOGBASE + 1] = 0;
/* we have 2 states with duration 1 */ /* we have 2 states with duration 1 */
steps = steps - 2; steps = steps - 2;
/* do the first part of the delay */ /* do the first part of the delay */
udfs->dux_commands[LENBASE + 2] = steps / 2; devpriv->dux_commands[LENBASE + 2] = steps / 2;
udfs->dux_commands[OPBASE + 2] = 0; devpriv->dux_commands[OPBASE + 2] = 0;
udfs->dux_commands[OUTBASE + 2] = 0xFE & rngmask; devpriv->dux_commands[OUTBASE + 2] = 0xFE & rngmask;
udfs->dux_commands[LOGBASE + 2] = 0; devpriv->dux_commands[LOGBASE + 2] = 0;
/* and the second part */ /* and the second part */
udfs->dux_commands[LENBASE + 3] = steps - steps / 2; devpriv->dux_commands[LENBASE + 3] = steps - steps / 2;
udfs->dux_commands[OPBASE + 3] = 0; devpriv->dux_commands[OPBASE + 3] = 0;
udfs->dux_commands[OUTBASE + 3] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 3] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 3] = 0; devpriv->dux_commands[LOGBASE + 3] = 0;
/* branch back to state 1 */ /* branch back to state 1 */
udfs->dux_commands[LENBASE + 4] = 0x09; devpriv->dux_commands[LENBASE + 4] = 0x09;
/* deceision state w/o data */ /* deceision state w/o data */
udfs->dux_commands[OPBASE + 4] = 0x01; devpriv->dux_commands[OPBASE + 4] = 0x01;
udfs->dux_commands[OUTBASE + 4] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 4] = 0xFF & rngmask;
/* doesn't matter */ /* doesn't matter */
udfs->dux_commands[LOGBASE + 4] = 0xFF; devpriv->dux_commands[LOGBASE + 4] = 0xFF;
break; break;
default: default:
dev_err(dev->class_dev, "unsupported combination of channels\n"); dev_err(dev->class_dev, "unsupported combination of channels\n");
up(&udfs->sem); up(&devpriv->sem);
return -EFAULT; return -EFAULT;
} }
...@@ -1107,36 +1107,36 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -1107,36 +1107,36 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
dev->minor); dev->minor);
#endif #endif
/* 0 means that the AD commands are sent */ /* 0 means that the AD commands are sent */
result = send_dux_commands(udfs, SENDADCOMMANDS); result = send_dux_commands(devpriv, SENDADCOMMANDS);
if (result < 0) { if (result < 0) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"adc command could not be submitted. Aborting...\n"); "adc command could not be submitted. Aborting...\n");
up(&udfs->sem); up(&devpriv->sem);
return result; return result;
} }
if (cmd->stop_src == TRIG_COUNT) { if (cmd->stop_src == TRIG_COUNT) {
udfs->ai_sample_count = cmd->stop_arg * cmd->scan_end_arg; devpriv->ai_sample_count = cmd->stop_arg * cmd->scan_end_arg;
if (udfs->ai_sample_count < 1) { if (devpriv->ai_sample_count < 1) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"(cmd->stop_arg)*(cmd->scan_end_arg)<1, aborting.\n"); "(cmd->stop_arg)*(cmd->scan_end_arg)<1, aborting.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EFAULT; return -EFAULT;
} }
udfs->ai_continous = 0; devpriv->ai_continous = 0;
} else { } else {
/* continous acquisition */ /* continous acquisition */
udfs->ai_continous = 1; devpriv->ai_continous = 1;
udfs->ai_sample_count = 0; devpriv->ai_sample_count = 0;
} }
if ((cmd->start_src == TRIG_NOW) || (cmd->start_src == TRIG_EXT)) { if ((cmd->start_src == TRIG_NOW) || (cmd->start_src == TRIG_EXT)) {
/* enable this acquisition operation */ /* enable this acquisition operation */
udfs->ai_cmd_running = 1; devpriv->ai_cmd_running = 1;
ret = usbduxfastsub_submit_InURBs(udfs); ret = usbduxfastsub_submit_InURBs(devpriv);
if (ret < 0) { if (ret < 0) {
udfs->ai_cmd_running = 0; devpriv->ai_cmd_running = 0;
/* fixme: unlink here?? */ /* fixme: unlink here?? */
up(&udfs->sem); up(&devpriv->sem);
return ret; return ret;
} }
s->async->inttrig = NULL; s->async->inttrig = NULL;
...@@ -1148,7 +1148,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -1148,7 +1148,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
*/ */
s->async->inttrig = usbduxfast_ai_inttrig; s->async->inttrig = usbduxfast_ai_inttrig;
} }
up(&udfs->sem); up(&devpriv->sem);
return 0; return 0;
} }
...@@ -1160,13 +1160,12 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, ...@@ -1160,13 +1160,12 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data) struct comedi_insn *insn, unsigned int *data)
{ {
struct usbduxfast_private *devpriv = dev->private;
int i, j, n, actual_length; int i, j, n, actual_length;
int chan, range, rngmask; int chan, range, rngmask;
int err; int err;
struct usbduxfastsub_s *udfs;
udfs = dev->private; if (!devpriv) {
if (!udfs) {
dev_err(dev->class_dev, "%s: no usb dev.\n", __func__); dev_err(dev->class_dev, "%s: no usb dev.\n", __func__);
return -ENODEV; return -ENODEV;
} }
...@@ -1174,15 +1173,15 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, ...@@ -1174,15 +1173,15 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev,
printk(KERN_DEBUG "comedi%d: ai_insn_read, insn->n=%d, " printk(KERN_DEBUG "comedi%d: ai_insn_read, insn->n=%d, "
"insn->subdev=%d\n", dev->minor, insn->n, insn->subdev); "insn->subdev=%d\n", dev->minor, insn->n, insn->subdev);
#endif #endif
down(&udfs->sem); down(&devpriv->sem);
if (!udfs->probed) { if (!devpriv->probed) {
up(&udfs->sem); up(&devpriv->sem);
return -ENODEV; return -ENODEV;
} }
if (udfs->ai_cmd_running) { if (devpriv->ai_cmd_running) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"ai_insn_read not possible. Async Command is running.\n"); "ai_insn_read not possible. Async Command is running.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EBUSY; return -EBUSY;
} }
/* sample one channel */ /* sample one channel */
...@@ -1196,101 +1195,101 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, ...@@ -1196,101 +1195,101 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev,
rngmask = 0xff; rngmask = 0xff;
/* commit data to the FIFO */ /* commit data to the FIFO */
udfs->dux_commands[LENBASE + 0] = 1; devpriv->dux_commands[LENBASE + 0] = 1;
/* data */ /* data */
udfs->dux_commands[OPBASE + 0] = 0x02; devpriv->dux_commands[OPBASE + 0] = 0x02;
udfs->dux_commands[OUTBASE + 0] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 0] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 0] = 0; devpriv->dux_commands[LOGBASE + 0] = 0;
/* do the first part of the delay */ /* do the first part of the delay */
udfs->dux_commands[LENBASE + 1] = 12; devpriv->dux_commands[LENBASE + 1] = 12;
udfs->dux_commands[OPBASE + 1] = 0; devpriv->dux_commands[OPBASE + 1] = 0;
udfs->dux_commands[OUTBASE + 1] = 0xFE & rngmask; devpriv->dux_commands[OUTBASE + 1] = 0xFE & rngmask;
udfs->dux_commands[LOGBASE + 1] = 0; devpriv->dux_commands[LOGBASE + 1] = 0;
udfs->dux_commands[LENBASE + 2] = 1; devpriv->dux_commands[LENBASE + 2] = 1;
udfs->dux_commands[OPBASE + 2] = 0; devpriv->dux_commands[OPBASE + 2] = 0;
udfs->dux_commands[OUTBASE + 2] = 0xFE & rngmask; devpriv->dux_commands[OUTBASE + 2] = 0xFE & rngmask;
udfs->dux_commands[LOGBASE + 2] = 0; devpriv->dux_commands[LOGBASE + 2] = 0;
udfs->dux_commands[LENBASE + 3] = 1; devpriv->dux_commands[LENBASE + 3] = 1;
udfs->dux_commands[OPBASE + 3] = 0; devpriv->dux_commands[OPBASE + 3] = 0;
udfs->dux_commands[OUTBASE + 3] = 0xFE & rngmask; devpriv->dux_commands[OUTBASE + 3] = 0xFE & rngmask;
udfs->dux_commands[LOGBASE + 3] = 0; devpriv->dux_commands[LOGBASE + 3] = 0;
udfs->dux_commands[LENBASE + 4] = 1; devpriv->dux_commands[LENBASE + 4] = 1;
udfs->dux_commands[OPBASE + 4] = 0; devpriv->dux_commands[OPBASE + 4] = 0;
udfs->dux_commands[OUTBASE + 4] = 0xFE & rngmask; devpriv->dux_commands[OUTBASE + 4] = 0xFE & rngmask;
udfs->dux_commands[LOGBASE + 4] = 0; devpriv->dux_commands[LOGBASE + 4] = 0;
/* second part */ /* second part */
udfs->dux_commands[LENBASE + 5] = 12; devpriv->dux_commands[LENBASE + 5] = 12;
udfs->dux_commands[OPBASE + 5] = 0; devpriv->dux_commands[OPBASE + 5] = 0;
udfs->dux_commands[OUTBASE + 5] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 5] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 5] = 0; devpriv->dux_commands[LOGBASE + 5] = 0;
udfs->dux_commands[LENBASE + 6] = 1; devpriv->dux_commands[LENBASE + 6] = 1;
udfs->dux_commands[OPBASE + 6] = 0; devpriv->dux_commands[OPBASE + 6] = 0;
udfs->dux_commands[OUTBASE + 6] = 0xFF & rngmask; devpriv->dux_commands[OUTBASE + 6] = 0xFF & rngmask;
udfs->dux_commands[LOGBASE + 0] = 0; devpriv->dux_commands[LOGBASE + 0] = 0;
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi %d: sending commands to the usb device\n", printk(KERN_DEBUG "comedi %d: sending commands to the usb device\n",
dev->minor); dev->minor);
#endif #endif
/* 0 means that the AD commands are sent */ /* 0 means that the AD commands are sent */
err = send_dux_commands(udfs, SENDADCOMMANDS); err = send_dux_commands(devpriv, SENDADCOMMANDS);
if (err < 0) { if (err < 0) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"adc command could not be submitted. Aborting...\n"); "adc command could not be submitted. Aborting...\n");
up(&udfs->sem); up(&devpriv->sem);
return err; return err;
} }
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi%d: usbduxfast: submitting in-urb: " printk(KERN_DEBUG "comedi%d: usbduxfast: submitting in-urb: "
"0x%p,0x%p\n", udfs->comedidev->minor, udfs->urbIn->context, "0x%p,0x%p\n", devpriv->comedidev->minor, devpriv->urbIn->context,
udfs->urbIn->dev); devpriv->urbIn->dev);
#endif #endif
for (i = 0; i < PACKETS_TO_IGNORE; i++) { for (i = 0; i < PACKETS_TO_IGNORE; i++) {
err = usb_bulk_msg(udfs->usb, err = usb_bulk_msg(devpriv->usb,
usb_rcvbulkpipe(udfs->usb, BULKINEP), usb_rcvbulkpipe(devpriv->usb, BULKINEP),
udfs->transfer_buffer, SIZEINBUF, devpriv->transfer_buffer, SIZEINBUF,
&actual_length, 10000); &actual_length, 10000);
if (err < 0) { if (err < 0) {
dev_err(dev->class_dev, "insn timeout. No data.\n"); dev_err(dev->class_dev, "insn timeout. No data.\n");
up(&udfs->sem); up(&devpriv->sem);
return err; return err;
} }
} }
/* data points */ /* data points */
for (i = 0; i < insn->n;) { for (i = 0; i < insn->n;) {
err = usb_bulk_msg(udfs->usb, err = usb_bulk_msg(devpriv->usb,
usb_rcvbulkpipe(udfs->usb, BULKINEP), usb_rcvbulkpipe(devpriv->usb, BULKINEP),
udfs->transfer_buffer, SIZEINBUF, devpriv->transfer_buffer, SIZEINBUF,
&actual_length, 10000); &actual_length, 10000);
if (err < 0) { if (err < 0) {
dev_err(dev->class_dev, "insn data error: %d\n", err); dev_err(dev->class_dev, "insn data error: %d\n", err);
up(&udfs->sem); up(&devpriv->sem);
return err; return err;
} }
n = actual_length / sizeof(uint16_t); n = actual_length / sizeof(uint16_t);
if ((n % 16) != 0) { if ((n % 16) != 0) {
dev_err(dev->class_dev, "insn data packet corrupted.\n"); dev_err(dev->class_dev, "insn data packet corrupted.\n");
up(&udfs->sem); up(&devpriv->sem);
return -EINVAL; return -EINVAL;
} }
for (j = chan; (j < n) && (i < insn->n); j = j + 16) { for (j = chan; (j < n) && (i < insn->n); j = j + 16) {
data[i] = ((uint16_t *) (udfs->transfer_buffer))[j]; data[i] = ((uint16_t *) (devpriv->transfer_buffer))[j];
i++; i++;
} }
} }
up(&udfs->sem); up(&devpriv->sem);
return i; return i;
} }
#define FIRMWARE_MAX_LEN 0x2000 #define FIRMWARE_MAX_LEN 0x2000
static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub, static int firmwareUpload(struct usbduxfast_private *devpriv,
const u8 *firmwareBinary, int sizeFirmware) const u8 *firmwareBinary, int sizeFirmware)
{ {
int ret; int ret;
...@@ -1300,7 +1299,7 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub, ...@@ -1300,7 +1299,7 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub,
return 0; return 0;
if (sizeFirmware > FIRMWARE_MAX_LEN) { if (sizeFirmware > FIRMWARE_MAX_LEN) {
dev_err(&usbduxfastsub->intf->dev, dev_err(&devpriv->intf->dev,
"comedi_: usbduxfast firmware binary it too large for FX2.\n"); "comedi_: usbduxfast firmware binary it too large for FX2.\n");
return -ENOMEM; return -ENOMEM;
} }
...@@ -1308,29 +1307,29 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub, ...@@ -1308,29 +1307,29 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub,
/* we generate a local buffer for the firmware */ /* we generate a local buffer for the firmware */
fwBuf = kmemdup(firmwareBinary, sizeFirmware, GFP_KERNEL); fwBuf = kmemdup(firmwareBinary, sizeFirmware, GFP_KERNEL);
if (!fwBuf) { if (!fwBuf) {
dev_err(&usbduxfastsub->intf->dev, dev_err(&devpriv->intf->dev,
"comedi_: mem alloc for firmware failed\n"); "comedi_: mem alloc for firmware failed\n");
return -ENOMEM; return -ENOMEM;
} }
ret = usbduxfastsub_stop(usbduxfastsub); ret = usbduxfastsub_stop(devpriv);
if (ret < 0) { if (ret < 0) {
dev_err(&usbduxfastsub->intf->dev, dev_err(&devpriv->intf->dev,
"comedi_: can not stop firmware\n"); "comedi_: can not stop firmware\n");
kfree(fwBuf); kfree(fwBuf);
return ret; return ret;
} }
ret = usbduxfastsub_upload(usbduxfastsub, fwBuf, 0, sizeFirmware); ret = usbduxfastsub_upload(devpriv, fwBuf, 0, sizeFirmware);
if (ret < 0) { if (ret < 0) {
dev_err(&usbduxfastsub->intf->dev, dev_err(&devpriv->intf->dev,
"comedi_: firmware upload failed\n"); "comedi_: firmware upload failed\n");
kfree(fwBuf); kfree(fwBuf);
return ret; return ret;
} }
ret = usbduxfastsub_start(usbduxfastsub); ret = usbduxfastsub_start(devpriv);
if (ret < 0) { if (ret < 0) {
dev_err(&usbduxfastsub->intf->dev, dev_err(&devpriv->intf->dev,
"comedi_: can not start firmware\n"); "comedi_: can not start firmware\n");
kfree(fwBuf); kfree(fwBuf);
return ret; return ret;
...@@ -1339,58 +1338,58 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub, ...@@ -1339,58 +1338,58 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub,
return 0; return 0;
} }
static void tidy_up(struct usbduxfastsub_s *udfs) static void tidy_up(struct usbduxfast_private *devpriv)
{ {
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
printk(KERN_DEBUG "comedi_: usbduxfast: tiding up\n"); printk(KERN_DEBUG "comedi_: usbduxfast: tiding up\n");
#endif #endif
if (!udfs) if (!devpriv)
return; return;
/* shows the usb subsystem that the driver is down */ /* shows the usb subsystem that the driver is down */
if (udfs->intf) if (devpriv->intf)
usb_set_intfdata(udfs->intf, NULL); usb_set_intfdata(devpriv->intf, NULL);
udfs->probed = 0; devpriv->probed = 0;
if (udfs->urbIn) { if (devpriv->urbIn) {
/* waits until a running transfer is over */ /* waits until a running transfer is over */
usb_kill_urb(udfs->urbIn); usb_kill_urb(devpriv->urbIn);
kfree(udfs->transfer_buffer); kfree(devpriv->transfer_buffer);
udfs->transfer_buffer = NULL; devpriv->transfer_buffer = NULL;
usb_free_urb(udfs->urbIn); usb_free_urb(devpriv->urbIn);
udfs->urbIn = NULL; devpriv->urbIn = NULL;
} }
kfree(udfs->insnBuffer); kfree(devpriv->insnBuffer);
udfs->insnBuffer = NULL; devpriv->insnBuffer = NULL;
kfree(udfs->dux_commands); kfree(devpriv->dux_commands);
udfs->dux_commands = NULL; devpriv->dux_commands = NULL;
udfs->ai_cmd_running = 0; devpriv->ai_cmd_running = 0;
} }
static int usbduxfast_attach_common(struct comedi_device *dev, static int usbduxfast_attach_common(struct comedi_device *dev,
struct usbduxfastsub_s *udfs) struct usbduxfast_private *devpriv)
{ {
int ret; int ret;
struct comedi_subdevice *s; struct comedi_subdevice *s;
down(&udfs->sem); down(&devpriv->sem);
/* pointer back to the corresponding comedi device */ /* pointer back to the corresponding comedi device */
udfs->comedidev = dev; devpriv->comedidev = dev;
ret = comedi_alloc_subdevices(dev, 1); ret = comedi_alloc_subdevices(dev, 1);
if (ret) { if (ret) {
up(&udfs->sem); up(&devpriv->sem);
return ret; return ret;
} }
/* private structure is also simply the usb-structure */ /* private structure is also simply the usb-structure */
dev->private = udfs; dev->private = devpriv;
/* the first subdevice is the A/D converter */ /* the first subdevice is the A/D converter */
s = &dev->subdevices[SUBDEV_AD]; s = &dev->subdevices[SUBDEV_AD];
/* /*
...@@ -1418,8 +1417,8 @@ static int usbduxfast_attach_common(struct comedi_device *dev, ...@@ -1418,8 +1417,8 @@ static int usbduxfast_attach_common(struct comedi_device *dev,
/* range table to convert to physical units */ /* range table to convert to physical units */
s->range_table = &range_usbduxfast_ai_range; s->range_table = &range_usbduxfast_ai_range;
/* finally decide that it's attached */ /* finally decide that it's attached */
udfs->attached = 1; devpriv->attached = 1;
up(&udfs->sem); up(&devpriv->sem);
dev_info(dev->class_dev, "successfully attached to usbduxfast.\n"); dev_info(dev->class_dev, "successfully attached to usbduxfast.\n");
return 0; return 0;
} }
...@@ -1428,38 +1427,38 @@ static int usbduxfast_auto_attach(struct comedi_device *dev, ...@@ -1428,38 +1427,38 @@ static int usbduxfast_auto_attach(struct comedi_device *dev,
unsigned long context_unused) unsigned long context_unused)
{ {
struct usb_interface *intf = comedi_to_usb_interface(dev); struct usb_interface *intf = comedi_to_usb_interface(dev);
struct usbduxfast_private *devpriv;
int ret; int ret;
struct usbduxfastsub_s *udfs;
dev->private = NULL; dev->private = NULL;
down(&start_stop_sem); down(&start_stop_sem);
udfs = usb_get_intfdata(intf); devpriv = usb_get_intfdata(intf);
if (!udfs || !udfs->probed) { if (!devpriv || !devpriv->probed) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"usbduxfast: error: auto_attach failed, not connected\n"); "usbduxfast: error: auto_attach failed, not connected\n");
ret = -ENODEV; ret = -ENODEV;
} else if (udfs->attached) { } else if (devpriv->attached) {
dev_err(dev->class_dev, dev_err(dev->class_dev,
"usbduxfast: error: auto_attach failed, already attached\n"); "usbduxfast: error: auto_attach failed, already attached\n");
ret = -ENODEV; ret = -ENODEV;
} else } else
ret = usbduxfast_attach_common(dev, udfs); ret = usbduxfast_attach_common(dev, devpriv);
up(&start_stop_sem); up(&start_stop_sem);
return ret; return ret;
} }
static void usbduxfast_detach(struct comedi_device *dev) static void usbduxfast_detach(struct comedi_device *dev)
{ {
struct usbduxfastsub_s *usb = dev->private; struct usbduxfast_private *devpriv = dev->private;
if (usb) { if (devpriv) {
down(&usb->sem); down(&devpriv->sem);
down(&start_stop_sem); down(&start_stop_sem);
dev->private = NULL; dev->private = NULL;
usb->attached = 0; devpriv->attached = 0;
usb->comedidev = NULL; devpriv->comedidev = NULL;
up(&start_stop_sem); up(&start_stop_sem);
up(&usb->sem); up(&devpriv->sem);
} }
} }
...@@ -1473,7 +1472,7 @@ static struct comedi_driver usbduxfast_driver = { ...@@ -1473,7 +1472,7 @@ static struct comedi_driver usbduxfast_driver = {
static int usbduxfast_request_firmware(struct usb_interface *intf) static int usbduxfast_request_firmware(struct usb_interface *intf)
{ {
struct usb_device *usb = interface_to_usbdev(intf); struct usb_device *usb = interface_to_usbdev(intf);
struct usbduxfastsub_s *devpriv = usb_get_intfdata(intf); struct usbduxfast_private *devpriv = usb_get_intfdata(intf);
const struct firmware *fw; const struct firmware *fw;
int ret; int ret;
...@@ -1491,7 +1490,7 @@ static int usbduxfast_usb_probe(struct usb_interface *intf, ...@@ -1491,7 +1490,7 @@ static int usbduxfast_usb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
struct usb_device *usb = interface_to_usbdev(intf); struct usb_device *usb = interface_to_usbdev(intf);
struct usbduxfastsub_s *devpriv = NULL; struct usbduxfast_private *devpriv = NULL;
int i; int i;
int ret; int ret;
...@@ -1580,14 +1579,14 @@ static int usbduxfast_usb_probe(struct usb_interface *intf, ...@@ -1580,14 +1579,14 @@ static int usbduxfast_usb_probe(struct usb_interface *intf,
static void usbduxfast_usb_disconnect(struct usb_interface *intf) static void usbduxfast_usb_disconnect(struct usb_interface *intf)
{ {
struct usbduxfastsub_s *udfs = usb_get_intfdata(intf); struct usbduxfast_private *devpriv = usb_get_intfdata(intf);
struct usb_device *usb = interface_to_usbdev(intf); struct usb_device *usb = interface_to_usbdev(intf);
if (!udfs) { if (!devpriv) {
dev_err(&intf->dev, "disconnect called with null pointer.\n"); dev_err(&intf->dev, "disconnect called with null pointer.\n");
return; return;
} }
if (udfs->usb != usb) { if (devpriv->usb != usb) {
dev_err(&intf->dev, "BUG! called with wrong ptr!!!\n"); dev_err(&intf->dev, "BUG! called with wrong ptr!!!\n");
return; return;
} }
...@@ -1595,9 +1594,9 @@ static void usbduxfast_usb_disconnect(struct usb_interface *intf) ...@@ -1595,9 +1594,9 @@ static void usbduxfast_usb_disconnect(struct usb_interface *intf)
comedi_usb_auto_unconfig(intf); comedi_usb_auto_unconfig(intf);
down(&start_stop_sem); down(&start_stop_sem);
down(&udfs->sem); down(&devpriv->sem);
tidy_up(udfs); tidy_up(devpriv);
up(&udfs->sem); up(&devpriv->sem);
up(&start_stop_sem); up(&start_stop_sem);
#ifdef CONFIG_COMEDI_DEBUG #ifdef CONFIG_COMEDI_DEBUG
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment