diff options
Diffstat (limited to 'drivers/staging/comedi/drivers/comedi_test.c')
-rw-r--r-- | drivers/staging/comedi/drivers/comedi_test.c | 143 |
1 files changed, 83 insertions, 60 deletions
diff --git a/drivers/staging/comedi/drivers/comedi_test.c b/drivers/staging/comedi/drivers/comedi_test.c index 9b8cf62973be..ef83a1a445ba 100644 --- a/drivers/staging/comedi/drivers/comedi_test.c +++ b/drivers/staging/comedi/drivers/comedi_test.c @@ -69,11 +69,11 @@ struct waveform_board { static const struct waveform_board waveform_boards[] = { { - .name = "comedi_test", - .ai_chans = N_CHANS, - .ai_bits = 16, - .have_dio = 0, - }, + .name = "comedi_test", + .ai_chans = N_CHANS, + .ai_bits = 16, + .have_dio = 0, + }, }; #define thisboard ((const struct waveform_board *)dev->board_ptr) @@ -84,7 +84,7 @@ struct waveform_private { struct timeval last; /* time at which last timer interrupt occured */ unsigned int uvolt_amplitude; /* waveform amplitude in microvolts */ unsigned long usec_period; /* waveform period in microseconds */ - unsigned long usec_current; /* current time (modulo waveform period) */ + unsigned long usec_current; /* current time (modulo waveform period) */ unsigned long usec_remainder; /* usec since last scan; */ unsigned long ai_count; /* number of conversions remaining */ unsigned int scan_period; /* scan period in usec */ @@ -94,36 +94,42 @@ struct waveform_private { }; #define devpriv ((struct waveform_private *)dev->private) -static int waveform_attach(struct comedi_device *dev, struct comedi_devconfig *it); +static int waveform_attach(struct comedi_device *dev, + struct comedi_devconfig *it); static int waveform_detach(struct comedi_device *dev); static struct comedi_driver driver_waveform = { - .driver_name = "comedi_test", - .module = THIS_MODULE, - .attach = waveform_attach, - .detach = waveform_detach, - .board_name = &waveform_boards[0].name, - .offset = sizeof(struct waveform_board), - .num_names = ARRAY_SIZE(waveform_boards), + .driver_name = "comedi_test", + .module = THIS_MODULE, + .attach = waveform_attach, + .detach = waveform_detach, + .board_name = &waveform_boards[0].name, + .offset = sizeof(struct waveform_board), + .num_names = ARRAY_SIZE(waveform_boards), }; COMEDI_INITCLEANUP(driver_waveform); -static int waveform_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, +static int waveform_ai_cmdtest(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_cmd *cmd); -static int waveform_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s); -static int waveform_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s); -static int waveform_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, +static int waveform_ai_cmd(struct comedi_device *dev, + struct comedi_subdevice *s); +static int waveform_ai_cancel(struct comedi_device *dev, + struct comedi_subdevice *s); +static int waveform_ai_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); -static int waveform_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, +static int waveform_ao_insn_write(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); static short fake_sawtooth(struct comedi_device *dev, unsigned int range, - unsigned long current_time); + unsigned long current_time); static short fake_squarewave(struct comedi_device *dev, unsigned int range, - unsigned long current_time); -static short fake_flatline(struct comedi_device *dev, unsigned int range, unsigned long current_time); +static short fake_flatline(struct comedi_device *dev, unsigned int range, + unsigned long current_time); static short fake_waveform(struct comedi_device *dev, unsigned int channel, - unsigned int range, unsigned long current_time); + unsigned int range, unsigned long current_time); /* 1000 nanosec in a microsec */ static const int nano_per_micro = 1000; @@ -132,9 +138,9 @@ static const int nano_per_micro = 1000; static const struct comedi_lrange waveform_ai_ranges = { 2, { - BIP_RANGE(10), - BIP_RANGE(5), - } + BIP_RANGE(10), + BIP_RANGE(5), + } }; /* @@ -144,7 +150,7 @@ static const struct comedi_lrange waveform_ai_ranges = { */ static void waveform_ai_interrupt(unsigned long arg) { - struct comedi_device *dev = (struct comedi_device *) arg; + struct comedi_device *dev = (struct comedi_device *)arg; struct comedi_async *async = dev->read_subdev->async; struct comedi_cmd *cmd = &async->cmd; unsigned int i, j; @@ -156,27 +162,34 @@ static void waveform_ai_interrupt(unsigned long arg) do_gettimeofday(&now); elapsed_time = - 1000000 * (now.tv_sec - devpriv->last.tv_sec) + now.tv_usec - - devpriv->last.tv_usec; + 1000000 * (now.tv_sec - devpriv->last.tv_sec) + now.tv_usec - + devpriv->last.tv_usec; devpriv->last = now; num_scans = - (devpriv->usec_remainder + elapsed_time) / devpriv->scan_period; + (devpriv->usec_remainder + elapsed_time) / devpriv->scan_period; devpriv->usec_remainder = - (devpriv->usec_remainder + elapsed_time) % devpriv->scan_period; + (devpriv->usec_remainder + elapsed_time) % devpriv->scan_period; async->events = 0; for (i = 0; i < num_scans; i++) { for (j = 0; j < cmd->chanlist_len; j++) { cfc_write_to_buffer(dev->read_subdev, - fake_waveform(dev, CR_CHAN(cmd->chanlist[j]), - CR_RANGE(cmd->chanlist[j]), - devpriv->usec_current + - i * devpriv->scan_period + - j * devpriv->convert_period)); + fake_waveform(dev, + CR_CHAN(cmd-> + chanlist[j]), + CR_RANGE(cmd-> + chanlist[j]), + devpriv-> + usec_current + + i * + devpriv->scan_period + + j * + devpriv-> + convert_period)); } devpriv->ai_count++; if (cmd->stop_src == TRIG_COUNT - && devpriv->ai_count >= cmd->stop_arg) { + && devpriv->ai_count >= cmd->stop_arg) { async->events |= COMEDI_CB_EOA; break; } @@ -193,7 +206,8 @@ static void waveform_ai_interrupt(unsigned long arg) comedi_event(dev, dev->read_subdev); } -static int waveform_attach(struct comedi_device *dev, struct comedi_devconfig *it) +static int waveform_attach(struct comedi_device *dev, + struct comedi_devconfig *it) { struct comedi_subdevice *s; int amplitude = it->options[0]; @@ -255,8 +269,8 @@ static int waveform_attach(struct comedi_device *dev, struct comedi_devconfig *i devpriv->timer.data = (unsigned long)dev; printk(KERN_INFO "comedi%d: comedi_test: " - "%i microvolt, %li microsecond waveform attached\n", dev->minor, - devpriv->uvolt_amplitude, devpriv->usec_period); + "%i microvolt, %li microsecond waveform attached\n", dev->minor, + devpriv->uvolt_amplitude, devpriv->usec_period); return 1; } @@ -270,7 +284,8 @@ static int waveform_detach(struct comedi_device *dev) return 0; } -static int waveform_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, +static int waveform_ai_cmdtest(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_cmd *cmd) { int err = 0; @@ -336,10 +351,10 @@ static int waveform_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevic err++; } if (cmd->convert_src == TRIG_TIMER && - cmd->scan_begin_arg < - cmd->convert_arg * cmd->chanlist_len) { + cmd->scan_begin_arg < + cmd->convert_arg * cmd->chanlist_len) { cmd->scan_begin_arg = - cmd->convert_arg * cmd->chanlist_len; + cmd->convert_arg * cmd->chanlist_len; err++; } } @@ -377,8 +392,8 @@ static int waveform_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevic tmp = cmd->scan_begin_arg; /* round to nearest microsec */ cmd->scan_begin_arg = - nano_per_micro * ((tmp + - (nano_per_micro / 2)) / nano_per_micro); + nano_per_micro * ((tmp + + (nano_per_micro / 2)) / nano_per_micro); if (tmp != cmd->scan_begin_arg) err++; } @@ -386,8 +401,8 @@ static int waveform_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevic tmp = cmd->convert_arg; /* round to nearest microsec */ cmd->convert_arg = - nano_per_micro * ((tmp + - (nano_per_micro / 2)) / nano_per_micro); + nano_per_micro * ((tmp + + (nano_per_micro / 2)) / nano_per_micro); if (tmp != cmd->convert_arg) err++; } @@ -398,13 +413,14 @@ static int waveform_ai_cmdtest(struct comedi_device *dev, struct comedi_subdevic return 0; } -static int waveform_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) +static int waveform_ai_cmd(struct comedi_device *dev, + struct comedi_subdevice *s) { struct comedi_cmd *cmd = &s->async->cmd; if (cmd->flags & TRIG_RT) { comedi_error(dev, - "commands at RT priority not supported in this driver"); + "commands at RT priority not supported in this driver"); return -1; } @@ -430,7 +446,8 @@ static int waveform_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s return 0; } -static int waveform_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) +static int waveform_ai_cancel(struct comedi_device *dev, + struct comedi_subdevice *s) { devpriv->timer_running = 0; del_timer(&devpriv->timer); @@ -438,12 +455,13 @@ static int waveform_ai_cancel(struct comedi_device *dev, struct comedi_subdevice } static short fake_sawtooth(struct comedi_device *dev, unsigned int range_index, - unsigned long current_time) + unsigned long current_time) { struct comedi_subdevice *s = dev->read_subdev; unsigned int offset = s->maxdata / 2; u64 value; - const struct comedi_krange *krange = &s->range_table->range[range_index]; + const struct comedi_krange *krange = + &s->range_table->range[range_index]; u64 binary_amplitude; binary_amplitude = s->maxdata; @@ -458,13 +476,16 @@ static short fake_sawtooth(struct comedi_device *dev, unsigned int range_index, return offset + value; } -static short fake_squarewave(struct comedi_device *dev, unsigned int range_index, - unsigned long current_time) + +static short fake_squarewave(struct comedi_device *dev, + unsigned int range_index, + unsigned long current_time) { struct comedi_subdevice *s = dev->read_subdev; unsigned int offset = s->maxdata / 2; u64 value; - const struct comedi_krange *krange = &s->range_table->range[range_index]; + const struct comedi_krange *krange = + &s->range_table->range[range_index]; current_time %= devpriv->usec_period; value = s->maxdata; @@ -478,14 +499,14 @@ static short fake_squarewave(struct comedi_device *dev, unsigned int range_index } static short fake_flatline(struct comedi_device *dev, unsigned int range_index, - unsigned long current_time) + unsigned long current_time) { return dev->read_subdev->maxdata / 2; } /* generates a different waveform depending on what channel is read */ static short fake_waveform(struct comedi_device *dev, unsigned int channel, - unsigned int range, unsigned long current_time) + unsigned int range, unsigned long current_time) { enum { SAWTOOTH_CHAN, @@ -505,7 +526,8 @@ static short fake_waveform(struct comedi_device *dev, unsigned int channel, return fake_flatline(dev, range, current_time); } -static int waveform_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, +static int waveform_ai_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { int i, chan = CR_CHAN(insn->chanspec); @@ -516,7 +538,8 @@ static int waveform_ai_insn_read(struct comedi_device *dev, struct comedi_subdev return insn->n; } -static int waveform_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, +static int waveform_ao_insn_write(struct comedi_device *dev, + struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { int i, chan = CR_CHAN(insn->chanspec); |