Lines Matching refs:dev

49 int comedi_set_hw_dev(struct comedi_device *dev, struct device *hw_dev)  in comedi_set_hw_dev()  argument
51 if (hw_dev == dev->hw_dev) in comedi_set_hw_dev()
53 if (dev->hw_dev) in comedi_set_hw_dev()
55 dev->hw_dev = get_device(hw_dev); in comedi_set_hw_dev()
60 static void comedi_clear_hw_dev(struct comedi_device *dev) in comedi_clear_hw_dev() argument
62 put_device(dev->hw_dev); in comedi_clear_hw_dev()
63 dev->hw_dev = NULL; in comedi_clear_hw_dev()
77 void *comedi_alloc_devpriv(struct comedi_device *dev, size_t size) in comedi_alloc_devpriv() argument
79 dev->private = kzalloc(size, GFP_KERNEL); in comedi_alloc_devpriv()
80 return dev->private; in comedi_alloc_devpriv()
96 int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices) in comedi_alloc_subdevices() argument
107 dev->subdevices = s; in comedi_alloc_subdevices()
108 dev->n_subdevices = num_subdevices; in comedi_alloc_subdevices()
111 s = &dev->subdevices[i]; in comedi_alloc_subdevices()
112 s->device = dev; in comedi_alloc_subdevices()
156 static void comedi_device_detach_cleanup(struct comedi_device *dev) in comedi_device_detach_cleanup() argument
161 lockdep_assert_held(&dev->attach_lock); in comedi_device_detach_cleanup()
162 lockdep_assert_held(&dev->mutex); in comedi_device_detach_cleanup()
163 if (dev->subdevices) { in comedi_device_detach_cleanup()
164 for (i = 0; i < dev->n_subdevices; i++) { in comedi_device_detach_cleanup()
165 s = &dev->subdevices[i]; in comedi_device_detach_cleanup()
170 comedi_buf_alloc(dev, s, 0); in comedi_device_detach_cleanup()
175 kfree(dev->subdevices); in comedi_device_detach_cleanup()
176 dev->subdevices = NULL; in comedi_device_detach_cleanup()
177 dev->n_subdevices = 0; in comedi_device_detach_cleanup()
179 kfree(dev->private); in comedi_device_detach_cleanup()
180 kfree(dev->pacer); in comedi_device_detach_cleanup()
181 dev->private = NULL; in comedi_device_detach_cleanup()
182 dev->pacer = NULL; in comedi_device_detach_cleanup()
183 dev->driver = NULL; in comedi_device_detach_cleanup()
184 dev->board_name = NULL; in comedi_device_detach_cleanup()
185 dev->board_ptr = NULL; in comedi_device_detach_cleanup()
186 dev->mmio = NULL; in comedi_device_detach_cleanup()
187 dev->iobase = 0; in comedi_device_detach_cleanup()
188 dev->iolen = 0; in comedi_device_detach_cleanup()
189 dev->ioenabled = false; in comedi_device_detach_cleanup()
190 dev->irq = 0; in comedi_device_detach_cleanup()
191 dev->read_subdev = NULL; in comedi_device_detach_cleanup()
192 dev->write_subdev = NULL; in comedi_device_detach_cleanup()
193 dev->open = NULL; in comedi_device_detach_cleanup()
194 dev->close = NULL; in comedi_device_detach_cleanup()
195 comedi_clear_hw_dev(dev); in comedi_device_detach_cleanup()
198 void comedi_device_detach(struct comedi_device *dev) in comedi_device_detach() argument
200 lockdep_assert_held(&dev->mutex); in comedi_device_detach()
201 comedi_device_cancel_all(dev); in comedi_device_detach()
202 down_write(&dev->attach_lock); in comedi_device_detach()
203 dev->attached = false; in comedi_device_detach()
204 dev->detach_count++; in comedi_device_detach()
205 if (dev->driver) in comedi_device_detach()
206 dev->driver->detach(dev); in comedi_device_detach()
207 comedi_device_detach_cleanup(dev); in comedi_device_detach()
208 up_write(&dev->attach_lock); in comedi_device_detach()
211 static int poll_invalid(struct comedi_device *dev, struct comedi_subdevice *s) in poll_invalid() argument
216 static int insn_device_inval(struct comedi_device *dev, in insn_device_inval() argument
222 static unsigned int get_zero_valid_routes(struct comedi_device *dev, in get_zero_valid_routes() argument
229 int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, in insn_inval() argument
252 int comedi_readback_insn_read(struct comedi_device *dev, in comedi_readback_insn_read() argument
287 int comedi_timeout(struct comedi_device *dev, in comedi_timeout() argument
290 int (*cb)(struct comedi_device *dev, in comedi_timeout() argument
300 ret = cb(dev, s, insn, context); in comedi_timeout()
335 int comedi_dio_insn_config(struct comedi_device *dev, in comedi_dio_insn_config() argument
589 unsigned int comedi_handle_events(struct comedi_device *dev, in comedi_handle_events() argument
598 s->cancel(dev, s); in comedi_handle_events()
600 comedi_event(dev, s); in comedi_handle_events()
606 static int insn_rw_emulate_bits(struct comedi_device *dev, in insn_rw_emulate_bits() argument
631 ret = s->insn_bits(dev, s, &_insn, _data); in insn_rw_emulate_bits()
641 static int __comedi_device_postconfig_async(struct comedi_device *dev, in __comedi_device_postconfig_async() argument
648 lockdep_assert_held(&dev->mutex); in __comedi_device_postconfig_async()
650 dev_warn(dev->class_dev, in __comedi_device_postconfig_async()
655 dev_warn(dev->class_dev, in __comedi_device_postconfig_async()
660 dev_warn(dev->class_dev, in __comedi_device_postconfig_async()
675 if (comedi_buf_alloc(dev, s, buf_size) < 0) { in __comedi_device_postconfig_async()
676 dev_warn(dev->class_dev, "Buffer allocation failed\n"); in __comedi_device_postconfig_async()
680 ret = s->buf_change(dev, s); in __comedi_device_postconfig_async()
690 static int __comedi_device_postconfig(struct comedi_device *dev) in __comedi_device_postconfig() argument
696 lockdep_assert_held(&dev->mutex); in __comedi_device_postconfig()
697 if (!dev->insn_device_config) in __comedi_device_postconfig()
698 dev->insn_device_config = insn_device_inval; in __comedi_device_postconfig()
700 if (!dev->get_valid_routes) in __comedi_device_postconfig()
701 dev->get_valid_routes = get_zero_valid_routes; in __comedi_device_postconfig()
703 for (i = 0; i < dev->n_subdevices; i++) { in __comedi_device_postconfig()
704 s = &dev->subdevices[i]; in __comedi_device_postconfig()
720 ret = __comedi_device_postconfig_async(dev, s); in __comedi_device_postconfig()
750 static int comedi_device_postconfig(struct comedi_device *dev) in comedi_device_postconfig() argument
754 lockdep_assert_held(&dev->mutex); in comedi_device_postconfig()
755 ret = __comedi_device_postconfig(dev); in comedi_device_postconfig()
758 down_write(&dev->attach_lock); in comedi_device_postconfig()
759 dev->attached = true; in comedi_device_postconfig()
760 up_write(&dev->attach_lock); in comedi_device_postconfig()
837 int comedi_load_firmware(struct comedi_device *dev, in comedi_load_firmware() argument
840 int (*cb)(struct comedi_device *dev, in comedi_load_firmware() argument
853 ret = cb(dev, fw->data, fw->size, context); in comedi_load_firmware()
873 int __comedi_request_region(struct comedi_device *dev, in __comedi_request_region() argument
877 dev_warn(dev->class_dev, in __comedi_request_region()
879 dev->board_name); in __comedi_request_region()
883 if (!request_region(start, len, dev->board_name)) { in __comedi_request_region()
884 dev_warn(dev->class_dev, "%s: I/O port conflict (%#lx,%lu)\n", in __comedi_request_region()
885 dev->board_name, start, len); in __comedi_request_region()
908 int comedi_request_region(struct comedi_device *dev, in comedi_request_region() argument
913 ret = __comedi_request_region(dev, start, len); in comedi_request_region()
915 dev->iobase = start; in comedi_request_region()
916 dev->iolen = len; in comedi_request_region()
935 void comedi_legacy_detach(struct comedi_device *dev) in comedi_legacy_detach() argument
937 if (dev->irq) { in comedi_legacy_detach()
938 free_irq(dev->irq, dev); in comedi_legacy_detach()
939 dev->irq = 0; in comedi_legacy_detach()
941 if (dev->iobase && dev->iolen) { in comedi_legacy_detach()
942 release_region(dev->iobase, dev->iolen); in comedi_legacy_detach()
943 dev->iobase = 0; in comedi_legacy_detach()
944 dev->iolen = 0; in comedi_legacy_detach()
949 int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) in comedi_device_attach() argument
954 lockdep_assert_held(&dev->mutex); in comedi_device_attach()
955 if (dev->attached) in comedi_device_attach()
963 dev->board_ptr = comedi_recognize(driv, it->board_name); in comedi_device_attach()
964 if (dev->board_ptr) in comedi_device_attach()
985 dev_warn(dev->class_dev, in comedi_device_attach()
992 dev->driver = driv; in comedi_device_attach()
993 dev->board_name = dev->board_ptr ? *(const char **)dev->board_ptr in comedi_device_attach()
994 : dev->driver->driver_name; in comedi_device_attach()
995 ret = driv->attach(dev, it); in comedi_device_attach()
997 ret = comedi_device_postconfig(dev); in comedi_device_attach()
999 comedi_device_detach(dev); in comedi_device_attach()
1034 struct comedi_device *dev; in comedi_auto_config() local
1054 dev = comedi_alloc_board_minor(hardware_device); in comedi_auto_config()
1055 if (IS_ERR(dev)) { in comedi_auto_config()
1059 return PTR_ERR(dev); in comedi_auto_config()
1062 lockdep_assert_held(&dev->mutex); in comedi_auto_config()
1064 dev->driver = driver; in comedi_auto_config()
1065 dev->board_name = dev->driver->driver_name; in comedi_auto_config()
1066 ret = driver->auto_attach(dev, context); in comedi_auto_config()
1068 ret = comedi_device_postconfig(dev); in comedi_auto_config()
1074 mutex_unlock(&dev->mutex); in comedi_auto_config()
1081 dev_info(dev->class_dev, in comedi_auto_config()
1083 driver->driver_name, dev->board_name); in comedi_auto_config()
1084 mutex_unlock(&dev->mutex); in comedi_auto_config()
1166 struct comedi_device *dev = comedi_dev_get_from_minor(i); in comedi_driver_unregister() local
1168 if (!dev) in comedi_driver_unregister()
1171 mutex_lock(&dev->mutex); in comedi_driver_unregister()
1172 if (dev->attached && dev->driver == driver) { in comedi_driver_unregister()
1173 if (dev->use_count) in comedi_driver_unregister()
1174 dev_warn(dev->class_dev, in comedi_driver_unregister()
1176 dev->use_count); in comedi_driver_unregister()
1177 comedi_device_detach(dev); in comedi_driver_unregister()
1179 mutex_unlock(&dev->mutex); in comedi_driver_unregister()
1180 comedi_dev_put(dev); in comedi_driver_unregister()