Lines Matching refs:s

98 	struct comedi_subdevice *s;  in comedi_alloc_subdevices()  local
104 s = kzalloc_objs(*s, num_subdevices); in comedi_alloc_subdevices()
105 if (!s) in comedi_alloc_subdevices()
107 dev->subdevices = s; in comedi_alloc_subdevices()
111 s = &dev->subdevices[i]; in comedi_alloc_subdevices()
112 s->device = dev; in comedi_alloc_subdevices()
113 s->index = i; in comedi_alloc_subdevices()
114 s->async_dma_dir = DMA_NONE; in comedi_alloc_subdevices()
115 spin_lock_init(&s->spin_lock); in comedi_alloc_subdevices()
116 s->minor = -1; in comedi_alloc_subdevices()
140 int comedi_alloc_subdev_readback(struct comedi_subdevice *s) in comedi_alloc_subdev_readback() argument
142 if (!s->n_chan) in comedi_alloc_subdev_readback()
145 s->readback = kcalloc(s->n_chan, sizeof(*s->readback), GFP_KERNEL); in comedi_alloc_subdev_readback()
146 if (!s->readback) in comedi_alloc_subdev_readback()
149 if (!s->insn_read) in comedi_alloc_subdev_readback()
150 s->insn_read = comedi_readback_insn_read; in comedi_alloc_subdev_readback()
159 struct comedi_subdevice *s; in comedi_device_detach_cleanup() local
165 s = &dev->subdevices[i]; in comedi_device_detach_cleanup()
166 if (comedi_can_auto_free_spriv(s)) in comedi_device_detach_cleanup()
167 kfree(s->private); in comedi_device_detach_cleanup()
168 comedi_free_subdevice_minor(s); in comedi_device_detach_cleanup()
169 if (s->async) { in comedi_device_detach_cleanup()
170 comedi_buf_alloc(dev, s, 0); in comedi_device_detach_cleanup()
171 kfree(s->async); in comedi_device_detach_cleanup()
173 kfree(s->readback); in comedi_device_detach_cleanup()
219 static int poll_invalid(struct comedi_device *dev, struct comedi_subdevice *s) in poll_invalid() argument
237 int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, in insn_inval() argument
261 struct comedi_subdevice *s, in comedi_readback_insn_read() argument
268 if (!s->readback) in comedi_readback_insn_read()
272 data[i] = s->readback[chan]; in comedi_readback_insn_read()
296 struct comedi_subdevice *s, in comedi_timeout() argument
299 struct comedi_subdevice *s, in comedi_timeout()
308 ret = cb(dev, s, insn, context); in comedi_timeout()
344 struct comedi_subdevice *s, in comedi_dio_insn_config() argument
356 s->io_bits &= ~mask; in comedi_dio_insn_config()
360 s->io_bits |= mask; in comedi_dio_insn_config()
364 data[1] = (s->io_bits & mask) ? COMEDI_OUTPUT : COMEDI_INPUT; in comedi_dio_insn_config()
389 unsigned int comedi_dio_update_state(struct comedi_subdevice *s, in comedi_dio_update_state() argument
392 unsigned int chanmask = (s->n_chan < 32) ? ((1U << s->n_chan) - 1) in comedi_dio_update_state()
398 s->state &= ~mask; in comedi_dio_update_state()
399 s->state |= (bits & mask); in comedi_dio_update_state()
423 unsigned int comedi_bytes_per_scan_cmd(struct comedi_subdevice *s, in comedi_bytes_per_scan_cmd() argument
429 switch (s->type) { in comedi_bytes_per_scan_cmd()
433 bits_per_sample = 8 * comedi_bytes_per_sample(s); in comedi_bytes_per_scan_cmd()
440 return comedi_samples_to_bytes(s, num_samples); in comedi_bytes_per_scan_cmd()
444 static unsigned int _comedi_bytes_per_scan(struct comedi_subdevice *s) in _comedi_bytes_per_scan() argument
446 struct comedi_cmd *cmd = &s->async->cmd; in _comedi_bytes_per_scan()
448 return comedi_bytes_per_scan_cmd(s, cmd); in _comedi_bytes_per_scan()
466 unsigned int comedi_bytes_per_scan(struct comedi_subdevice *s) in comedi_bytes_per_scan() argument
470 if (comedi_get_is_subdevice_running(s)) { in comedi_bytes_per_scan()
471 num_bytes = _comedi_bytes_per_scan(s); in comedi_bytes_per_scan()
472 comedi_put_is_subdevice_running(s); in comedi_bytes_per_scan()
475 num_bytes = comedi_samples_to_bytes(s, 1); in comedi_bytes_per_scan()
481 static unsigned int __comedi_nscans_left(struct comedi_subdevice *s, in __comedi_nscans_left() argument
484 struct comedi_async *async = s->async; in __comedi_nscans_left()
499 static unsigned int _comedi_nscans_left(struct comedi_subdevice *s, in _comedi_nscans_left() argument
503 unsigned int nbytes = _comedi_buf_read_n_available(s); in _comedi_nscans_left()
505 nscans = nbytes / _comedi_bytes_per_scan(s); in _comedi_nscans_left()
507 return __comedi_nscans_left(s, nscans); in _comedi_nscans_left()
524 unsigned int comedi_nscans_left(struct comedi_subdevice *s, in comedi_nscans_left() argument
527 if (comedi_get_is_subdevice_running(s)) { in comedi_nscans_left()
528 nscans = _comedi_nscans_left(s, nscans); in comedi_nscans_left()
529 comedi_put_is_subdevice_running(s); in comedi_nscans_left()
537 static unsigned int _comedi_nsamples_left(struct comedi_subdevice *s, in _comedi_nsamples_left() argument
540 struct comedi_async *async = s->async; in _comedi_nsamples_left()
548 scans_left = __comedi_nscans_left(s, cmd->stop_arg); in _comedi_nsamples_left()
553 comedi_bytes_to_samples(s, async->scan_progress); in _comedi_nsamples_left()
568 unsigned int comedi_nsamples_left(struct comedi_subdevice *s, in comedi_nsamples_left() argument
571 if (comedi_get_is_subdevice_running(s)) { in comedi_nsamples_left()
572 nsamples = _comedi_nsamples_left(s, nsamples); in comedi_nsamples_left()
573 comedi_put_is_subdevice_running(s); in comedi_nsamples_left()
581 void _comedi_inc_scan_progress(struct comedi_subdevice *s, in _comedi_inc_scan_progress() argument
584 struct comedi_async *async = s->async; in _comedi_inc_scan_progress()
586 unsigned int scan_length = _comedi_bytes_per_scan(s); in _comedi_inc_scan_progress()
589 if (!(s->subdev_flags & SDF_PACKED)) { in _comedi_inc_scan_progress()
590 async->cur_chan += comedi_bytes_to_samples(s, num_bytes); in _comedi_inc_scan_progress()
618 void comedi_inc_scan_progress(struct comedi_subdevice *s, in comedi_inc_scan_progress() argument
621 if (comedi_get_is_subdevice_running(s)) { in comedi_inc_scan_progress()
622 _comedi_inc_scan_progress(s, num_bytes); in comedi_inc_scan_progress()
623 comedi_put_is_subdevice_running(s); in comedi_inc_scan_progress()
629 struct comedi_subdevice *s) in _comedi_handle_events() argument
631 unsigned int events = s->async->events; in _comedi_handle_events()
636 if ((events & COMEDI_CB_CANCEL_MASK) && s->cancel) in _comedi_handle_events()
637 s->cancel(dev, s); in _comedi_handle_events()
639 _comedi_event(dev, s); in _comedi_handle_events()
661 struct comedi_subdevice *s) in comedi_handle_events() argument
665 if (comedi_get_is_subdevice_running(s)) { in comedi_handle_events()
666 events = _comedi_handle_events(dev, s); in comedi_handle_events()
667 comedi_put_is_subdevice_running(s); in comedi_handle_events()
676 struct comedi_subdevice *s, in insn_rw_emulate_bits() argument
695 if (!(s->subdev_flags & SDF_WRITABLE)) in insn_rw_emulate_bits()
703 ret = s->insn_bits(dev, s, &_insn, _data); in insn_rw_emulate_bits()
715 struct comedi_subdevice *s) in __comedi_device_postconfig_async() argument
722 if ((s->subdev_flags & (SDF_CMD_READ | SDF_CMD_WRITE)) == 0) { in __comedi_device_postconfig_async()
727 if (!s->do_cmdtest) { in __comedi_device_postconfig_async()
732 if (!s->cancel) in __comedi_device_postconfig_async()
742 s->async = async; in __comedi_device_postconfig_async()
749 if (comedi_buf_alloc(dev, s, buf_size) < 0) { in __comedi_device_postconfig_async()
753 if (s->buf_change) { in __comedi_device_postconfig_async()
754 ret = s->buf_change(dev, s); in __comedi_device_postconfig_async()
759 comedi_alloc_subdevice_minor(s); in __comedi_device_postconfig_async()
766 struct comedi_subdevice *s; in __comedi_device_postconfig() local
778 s = &dev->subdevices[i]; in __comedi_device_postconfig()
780 if (s->type == COMEDI_SUBD_UNUSED) in __comedi_device_postconfig()
783 if (s->type == COMEDI_SUBD_DO) { in __comedi_device_postconfig()
784 if (s->n_chan < 32) in __comedi_device_postconfig()
785 s->io_bits = (1U << s->n_chan) - 1; in __comedi_device_postconfig()
787 s->io_bits = 0xffffffff; in __comedi_device_postconfig()
790 if (s->len_chanlist == 0) in __comedi_device_postconfig()
791 s->len_chanlist = 1; in __comedi_device_postconfig()
793 if (s->do_cmd) { in __comedi_device_postconfig()
794 ret = __comedi_device_postconfig_async(dev, s); in __comedi_device_postconfig()
799 if (!s->range_table && !s->range_table_list) in __comedi_device_postconfig()
800 s->range_table = &range_unknown; in __comedi_device_postconfig()
802 if (!s->insn_read && s->insn_bits) in __comedi_device_postconfig()
803 s->insn_read = insn_rw_emulate_bits; in __comedi_device_postconfig()
804 if (!s->insn_write && s->insn_bits) in __comedi_device_postconfig()
805 s->insn_write = insn_rw_emulate_bits; in __comedi_device_postconfig()
807 if (!s->insn_read) in __comedi_device_postconfig()
808 s->insn_read = insn_inval; in __comedi_device_postconfig()
809 if (!s->insn_write) in __comedi_device_postconfig()
810 s->insn_write = insn_inval; in __comedi_device_postconfig()
811 if (!s->insn_bits) in __comedi_device_postconfig()
812 s->insn_bits = insn_inval; in __comedi_device_postconfig()
813 if (!s->insn_config) in __comedi_device_postconfig()
814 s->insn_config = insn_inval; in __comedi_device_postconfig()
816 if (!s->poll) in __comedi_device_postconfig()
817 s->poll = poll_invalid; in __comedi_device_postconfig()