Lines Matching refs:indio_dev
139 *iio_find_channel_from_si(struct iio_dev *indio_dev, int si) in iio_find_channel_from_si() argument
143 for (i = 0; i < indio_dev->num_channels; i++) in iio_find_channel_from_si()
144 if (indio_dev->channels[i].scan_index == si) in iio_find_channel_from_si()
145 return &indio_dev->channels[i]; in iio_find_channel_from_si()
197 struct iio_dev *indio_dev = file->private_data; in iio_debugfs_read_reg() local
203 ret = indio_dev->info->debugfs_reg_access(indio_dev, in iio_debugfs_read_reg()
204 indio_dev->cached_reg_addr, in iio_debugfs_read_reg()
207 dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__); in iio_debugfs_read_reg()
217 struct iio_dev *indio_dev = file->private_data; in iio_debugfs_write_reg() local
232 indio_dev->cached_reg_addr = reg; in iio_debugfs_write_reg()
235 indio_dev->cached_reg_addr = reg; in iio_debugfs_write_reg()
236 ret = indio_dev->info->debugfs_reg_access(indio_dev, reg, in iio_debugfs_write_reg()
239 dev_err(indio_dev->dev.parent, "%s: write failed\n", in iio_debugfs_write_reg()
257 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev) in iio_device_unregister_debugfs() argument
259 debugfs_remove_recursive(indio_dev->debugfs_dentry); in iio_device_unregister_debugfs()
262 static int iio_device_register_debugfs(struct iio_dev *indio_dev) in iio_device_register_debugfs() argument
266 if (indio_dev->info->debugfs_reg_access == NULL) in iio_device_register_debugfs()
272 indio_dev->debugfs_dentry = in iio_device_register_debugfs()
273 debugfs_create_dir(dev_name(&indio_dev->dev), in iio_device_register_debugfs()
275 if (indio_dev->debugfs_dentry == NULL) { in iio_device_register_debugfs()
276 dev_warn(indio_dev->dev.parent, in iio_device_register_debugfs()
282 indio_dev->debugfs_dentry, in iio_device_register_debugfs()
283 indio_dev, &iio_debugfs_reg_fops); in iio_device_register_debugfs()
285 iio_device_unregister_debugfs(indio_dev); in iio_device_register_debugfs()
292 static int iio_device_register_debugfs(struct iio_dev *indio_dev) in iio_device_register_debugfs() argument
297 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev) in iio_device_unregister_debugfs() argument
306 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_read_channel_ext_info() local
312 return ext_info->read(indio_dev, ext_info->private, this_attr->c, buf); in iio_read_channel_ext_info()
320 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_write_channel_ext_info() local
326 return ext_info->write(indio_dev, ext_info->private, in iio_write_channel_ext_info()
330 ssize_t iio_enum_available_read(struct iio_dev *indio_dev, in iio_enum_available_read() argument
350 ssize_t iio_enum_read(struct iio_dev *indio_dev, in iio_enum_read() argument
359 i = e->get(indio_dev, chan); in iio_enum_read()
369 ssize_t iio_enum_write(struct iio_dev *indio_dev, in iio_enum_write() argument
388 ret = e->set(indio_dev, chan, i); in iio_enum_write()
454 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_read_channel_info() local
460 if (indio_dev->info->read_raw_multi) in iio_read_channel_info()
461 ret = indio_dev->info->read_raw_multi(indio_dev, this_attr->c, in iio_read_channel_info()
466 ret = indio_dev->info->read_raw(indio_dev, this_attr->c, in iio_read_channel_info()
538 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_write_channel_info() local
544 if (!indio_dev->info->write_raw) in iio_write_channel_info()
547 if (indio_dev->info->write_raw_get_fmt) in iio_write_channel_info()
548 switch (indio_dev->info->write_raw_get_fmt(indio_dev, in iio_write_channel_info()
564 ret = indio_dev->info->write_raw(indio_dev, this_attr->c, in iio_write_channel_info()
754 static int iio_device_add_info_mask_type(struct iio_dev *indio_dev, in iio_device_add_info_mask_type() argument
770 &indio_dev->dev, in iio_device_add_info_mask_type()
771 &indio_dev->channel_attr_list); in iio_device_add_info_mask_type()
782 static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev, in iio_device_add_channel_sysfs() argument
790 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
797 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
804 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
811 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
829 &indio_dev->dev, in iio_device_add_channel_sysfs()
830 &indio_dev->channel_attr_list); in iio_device_add_channel_sysfs()
867 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_show_dev_name() local
868 return snprintf(buf, PAGE_SIZE, "%s\n", indio_dev->name); in iio_show_dev_name()
873 static int iio_device_register_sysfs(struct iio_dev *indio_dev) in iio_device_register_sysfs() argument
880 if (indio_dev->info->attrs) { in iio_device_register_sysfs()
881 attr = indio_dev->info->attrs->attrs; in iio_device_register_sysfs()
890 if (indio_dev->channels) in iio_device_register_sysfs()
891 for (i = 0; i < indio_dev->num_channels; i++) { in iio_device_register_sysfs()
892 ret = iio_device_add_channel_sysfs(indio_dev, in iio_device_register_sysfs()
893 &indio_dev in iio_device_register_sysfs()
900 if (indio_dev->name) in iio_device_register_sysfs()
903 indio_dev->chan_attr_group.attrs = kcalloc(attrcount + 1, in iio_device_register_sysfs()
904 sizeof(indio_dev->chan_attr_group.attrs[0]), in iio_device_register_sysfs()
906 if (indio_dev->chan_attr_group.attrs == NULL) { in iio_device_register_sysfs()
911 if (indio_dev->info->attrs) in iio_device_register_sysfs()
912 memcpy(indio_dev->chan_attr_group.attrs, in iio_device_register_sysfs()
913 indio_dev->info->attrs->attrs, in iio_device_register_sysfs()
914 sizeof(indio_dev->chan_attr_group.attrs[0]) in iio_device_register_sysfs()
918 list_for_each_entry(p, &indio_dev->channel_attr_list, l) in iio_device_register_sysfs()
919 indio_dev->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr; in iio_device_register_sysfs()
920 if (indio_dev->name) in iio_device_register_sysfs()
921 indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr; in iio_device_register_sysfs()
923 indio_dev->groups[indio_dev->groupcounter++] = in iio_device_register_sysfs()
924 &indio_dev->chan_attr_group; in iio_device_register_sysfs()
929 iio_free_chan_devattr_list(&indio_dev->channel_attr_list); in iio_device_register_sysfs()
934 static void iio_device_unregister_sysfs(struct iio_dev *indio_dev) in iio_device_unregister_sysfs() argument
937 iio_free_chan_devattr_list(&indio_dev->channel_attr_list); in iio_device_unregister_sysfs()
938 kfree(indio_dev->chan_attr_group.attrs); in iio_device_unregister_sysfs()
939 indio_dev->chan_attr_group.attrs = NULL; in iio_device_unregister_sysfs()
944 struct iio_dev *indio_dev = dev_to_iio_dev(device); in iio_dev_release() local
945 if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) in iio_dev_release()
946 iio_device_unregister_trigger_consumer(indio_dev); in iio_dev_release()
947 iio_device_unregister_eventset(indio_dev); in iio_dev_release()
948 iio_device_unregister_sysfs(indio_dev); in iio_dev_release()
950 iio_buffer_put(indio_dev->buffer); in iio_dev_release()
952 ida_simple_remove(&iio_ida, indio_dev->id); in iio_dev_release()
953 kfree(indio_dev); in iio_dev_release()
1088 struct iio_dev *indio_dev = container_of(inode->i_cdev, in iio_chrdev_open() local
1091 if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags)) in iio_chrdev_open()
1094 iio_device_get(indio_dev); in iio_chrdev_open()
1096 filp->private_data = indio_dev; in iio_chrdev_open()
1106 struct iio_dev *indio_dev = container_of(inode->i_cdev, in iio_chrdev_release() local
1108 clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags); in iio_chrdev_release()
1109 iio_device_put(indio_dev); in iio_chrdev_release()
1118 struct iio_dev *indio_dev = filp->private_data; in iio_ioctl() local
1122 if (!indio_dev->info) in iio_ioctl()
1126 fd = iio_event_getfd(indio_dev); in iio_ioctl()
1145 static int iio_check_unique_scan_index(struct iio_dev *indio_dev) in iio_check_unique_scan_index() argument
1148 const struct iio_chan_spec *channels = indio_dev->channels; in iio_check_unique_scan_index()
1150 if (!(indio_dev->modes & INDIO_ALL_BUFFER_MODES)) in iio_check_unique_scan_index()
1153 for (i = 0; i < indio_dev->num_channels - 1; i++) { in iio_check_unique_scan_index()
1156 for (j = i + 1; j < indio_dev->num_channels; j++) in iio_check_unique_scan_index()
1158 dev_err(&indio_dev->dev, in iio_check_unique_scan_index()
1174 int iio_device_register(struct iio_dev *indio_dev) in iio_device_register() argument
1179 if (!indio_dev->dev.of_node && indio_dev->dev.parent) in iio_device_register()
1180 indio_dev->dev.of_node = indio_dev->dev.parent->of_node; in iio_device_register()
1182 ret = iio_check_unique_scan_index(indio_dev); in iio_device_register()
1187 indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), indio_dev->id); in iio_device_register()
1189 ret = iio_device_register_debugfs(indio_dev); in iio_device_register()
1191 dev_err(indio_dev->dev.parent, in iio_device_register()
1196 ret = iio_buffer_alloc_sysfs_and_mask(indio_dev); in iio_device_register()
1198 dev_err(indio_dev->dev.parent, in iio_device_register()
1203 ret = iio_device_register_sysfs(indio_dev); in iio_device_register()
1205 dev_err(indio_dev->dev.parent, in iio_device_register()
1209 ret = iio_device_register_eventset(indio_dev); in iio_device_register()
1211 dev_err(indio_dev->dev.parent, in iio_device_register()
1215 if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) in iio_device_register()
1216 iio_device_register_trigger_consumer(indio_dev); in iio_device_register()
1218 if ((indio_dev->modes & INDIO_ALL_BUFFER_MODES) && in iio_device_register()
1219 indio_dev->setup_ops == NULL) in iio_device_register()
1220 indio_dev->setup_ops = &noop_ring_setup_ops; in iio_device_register()
1222 cdev_init(&indio_dev->chrdev, &iio_buffer_fileops); in iio_device_register()
1223 indio_dev->chrdev.owner = indio_dev->info->driver_module; in iio_device_register()
1224 indio_dev->chrdev.kobj.parent = &indio_dev->dev.kobj; in iio_device_register()
1225 ret = cdev_add(&indio_dev->chrdev, indio_dev->dev.devt, 1); in iio_device_register()
1229 ret = device_add(&indio_dev->dev); in iio_device_register()
1235 cdev_del(&indio_dev->chrdev); in iio_device_register()
1237 iio_device_unregister_eventset(indio_dev); in iio_device_register()
1239 iio_device_unregister_sysfs(indio_dev); in iio_device_register()
1241 iio_buffer_free_sysfs_and_mask(indio_dev); in iio_device_register()
1243 iio_device_unregister_debugfs(indio_dev); in iio_device_register()
1252 void iio_device_unregister(struct iio_dev *indio_dev) in iio_device_unregister() argument
1254 mutex_lock(&indio_dev->info_exist_lock); in iio_device_unregister()
1256 device_del(&indio_dev->dev); in iio_device_unregister()
1258 if (indio_dev->chrdev.dev) in iio_device_unregister()
1259 cdev_del(&indio_dev->chrdev); in iio_device_unregister()
1260 iio_device_unregister_debugfs(indio_dev); in iio_device_unregister()
1262 iio_disable_all_buffers(indio_dev); in iio_device_unregister()
1264 indio_dev->info = NULL; in iio_device_unregister()
1266 iio_device_wakeup_eventset(indio_dev); in iio_device_unregister()
1267 iio_buffer_wakeup_poll(indio_dev); in iio_device_unregister()
1269 mutex_unlock(&indio_dev->info_exist_lock); in iio_device_unregister()
1271 iio_buffer_free_sysfs_and_mask(indio_dev); in iio_device_unregister()
1296 int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev) in devm_iio_device_register() argument
1305 *ptr = indio_dev; in devm_iio_device_register()
1306 ret = iio_device_register(indio_dev); in devm_iio_device_register()
1323 void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev) in devm_iio_device_unregister() argument
1328 devm_iio_device_match, indio_dev); in devm_iio_device_unregister()