Lines Matching refs:indio_dev
157 *iio_find_channel_from_si(struct iio_dev *indio_dev, int si) in iio_find_channel_from_si() argument
161 for (i = 0; i < indio_dev->num_channels; i++) in iio_find_channel_from_si()
162 if (indio_dev->channels[i].scan_index == si) in iio_find_channel_from_si()
163 return &indio_dev->channels[i]; in iio_find_channel_from_si()
215 struct iio_dev *indio_dev = file->private_data; in iio_debugfs_read_reg() local
221 ret = indio_dev->info->debugfs_reg_access(indio_dev, in iio_debugfs_read_reg()
222 indio_dev->cached_reg_addr, in iio_debugfs_read_reg()
225 dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__); in iio_debugfs_read_reg()
235 struct iio_dev *indio_dev = file->private_data; in iio_debugfs_write_reg() local
250 indio_dev->cached_reg_addr = reg; in iio_debugfs_write_reg()
253 indio_dev->cached_reg_addr = reg; in iio_debugfs_write_reg()
254 ret = indio_dev->info->debugfs_reg_access(indio_dev, reg, in iio_debugfs_write_reg()
257 dev_err(indio_dev->dev.parent, "%s: write failed\n", in iio_debugfs_write_reg()
275 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev) in iio_device_unregister_debugfs() argument
277 debugfs_remove_recursive(indio_dev->debugfs_dentry); in iio_device_unregister_debugfs()
280 static int iio_device_register_debugfs(struct iio_dev *indio_dev) in iio_device_register_debugfs() argument
284 if (indio_dev->info->debugfs_reg_access == NULL) in iio_device_register_debugfs()
290 indio_dev->debugfs_dentry = in iio_device_register_debugfs()
291 debugfs_create_dir(dev_name(&indio_dev->dev), in iio_device_register_debugfs()
293 if (indio_dev->debugfs_dentry == NULL) { in iio_device_register_debugfs()
294 dev_warn(indio_dev->dev.parent, in iio_device_register_debugfs()
300 indio_dev->debugfs_dentry, in iio_device_register_debugfs()
301 indio_dev, &iio_debugfs_reg_fops); in iio_device_register_debugfs()
303 iio_device_unregister_debugfs(indio_dev); in iio_device_register_debugfs()
310 static int iio_device_register_debugfs(struct iio_dev *indio_dev) in iio_device_register_debugfs() argument
315 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev) in iio_device_unregister_debugfs() argument
324 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_read_channel_ext_info() local
330 return ext_info->read(indio_dev, ext_info->private, this_attr->c, buf); in iio_read_channel_ext_info()
338 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_write_channel_ext_info() local
344 return ext_info->write(indio_dev, ext_info->private, in iio_write_channel_ext_info()
348 ssize_t iio_enum_available_read(struct iio_dev *indio_dev, in iio_enum_available_read() argument
368 ssize_t iio_enum_read(struct iio_dev *indio_dev, in iio_enum_read() argument
377 i = e->get(indio_dev, chan); in iio_enum_read()
387 ssize_t iio_enum_write(struct iio_dev *indio_dev, in iio_enum_write() argument
406 ret = e->set(indio_dev, chan, i); in iio_enum_write()
478 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_read_channel_info() local
484 if (indio_dev->info->read_raw_multi) in iio_read_channel_info()
485 ret = indio_dev->info->read_raw_multi(indio_dev, this_attr->c, in iio_read_channel_info()
490 ret = indio_dev->info->read_raw(indio_dev, this_attr->c, in iio_read_channel_info()
562 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_write_channel_info() local
568 if (!indio_dev->info->write_raw) in iio_write_channel_info()
571 if (indio_dev->info->write_raw_get_fmt) in iio_write_channel_info()
572 switch (indio_dev->info->write_raw_get_fmt(indio_dev, in iio_write_channel_info()
588 ret = indio_dev->info->write_raw(indio_dev, this_attr->c, in iio_write_channel_info()
778 static int iio_device_add_info_mask_type(struct iio_dev *indio_dev, in iio_device_add_info_mask_type() argument
794 &indio_dev->dev, in iio_device_add_info_mask_type()
795 &indio_dev->channel_attr_list); in iio_device_add_info_mask_type()
806 static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev, in iio_device_add_channel_sysfs() argument
814 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
821 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
828 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
835 ret = iio_device_add_info_mask_type(indio_dev, chan, in iio_device_add_channel_sysfs()
853 &indio_dev->dev, in iio_device_add_channel_sysfs()
854 &indio_dev->channel_attr_list); in iio_device_add_channel_sysfs()
891 struct iio_dev *indio_dev = dev_to_iio_dev(dev); in iio_show_dev_name() local
892 return snprintf(buf, PAGE_SIZE, "%s\n", indio_dev->name); in iio_show_dev_name()
897 static int iio_device_register_sysfs(struct iio_dev *indio_dev) in iio_device_register_sysfs() argument
904 if (indio_dev->info->attrs) { in iio_device_register_sysfs()
905 attr = indio_dev->info->attrs->attrs; in iio_device_register_sysfs()
914 if (indio_dev->channels) in iio_device_register_sysfs()
915 for (i = 0; i < indio_dev->num_channels; i++) { in iio_device_register_sysfs()
916 ret = iio_device_add_channel_sysfs(indio_dev, in iio_device_register_sysfs()
917 &indio_dev in iio_device_register_sysfs()
924 if (indio_dev->name) in iio_device_register_sysfs()
927 indio_dev->chan_attr_group.attrs = kcalloc(attrcount + 1, in iio_device_register_sysfs()
928 sizeof(indio_dev->chan_attr_group.attrs[0]), in iio_device_register_sysfs()
930 if (indio_dev->chan_attr_group.attrs == NULL) { in iio_device_register_sysfs()
935 if (indio_dev->info->attrs) in iio_device_register_sysfs()
936 memcpy(indio_dev->chan_attr_group.attrs, in iio_device_register_sysfs()
937 indio_dev->info->attrs->attrs, in iio_device_register_sysfs()
938 sizeof(indio_dev->chan_attr_group.attrs[0]) in iio_device_register_sysfs()
942 list_for_each_entry(p, &indio_dev->channel_attr_list, l) in iio_device_register_sysfs()
943 indio_dev->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr; in iio_device_register_sysfs()
944 if (indio_dev->name) in iio_device_register_sysfs()
945 indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr; in iio_device_register_sysfs()
947 indio_dev->groups[indio_dev->groupcounter++] = in iio_device_register_sysfs()
948 &indio_dev->chan_attr_group; in iio_device_register_sysfs()
953 iio_free_chan_devattr_list(&indio_dev->channel_attr_list); in iio_device_register_sysfs()
958 static void iio_device_unregister_sysfs(struct iio_dev *indio_dev) in iio_device_unregister_sysfs() argument
961 iio_free_chan_devattr_list(&indio_dev->channel_attr_list); in iio_device_unregister_sysfs()
962 kfree(indio_dev->chan_attr_group.attrs); in iio_device_unregister_sysfs()
963 indio_dev->chan_attr_group.attrs = NULL; in iio_device_unregister_sysfs()
968 struct iio_dev *indio_dev = dev_to_iio_dev(device); in iio_dev_release() local
969 if (indio_dev->modes & (INDIO_BUFFER_TRIGGERED | INDIO_EVENT_TRIGGERED)) in iio_dev_release()
970 iio_device_unregister_trigger_consumer(indio_dev); in iio_dev_release()
971 iio_device_unregister_eventset(indio_dev); in iio_dev_release()
972 iio_device_unregister_sysfs(indio_dev); in iio_dev_release()
974 iio_buffer_put(indio_dev->buffer); in iio_dev_release()
976 ida_simple_remove(&iio_ida, indio_dev->id); in iio_dev_release()
977 kfree(indio_dev); in iio_dev_release()
1117 struct iio_dev *indio_dev = container_of(inode->i_cdev, in iio_chrdev_open() local
1120 if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags)) in iio_chrdev_open()
1123 iio_device_get(indio_dev); in iio_chrdev_open()
1125 filp->private_data = indio_dev; in iio_chrdev_open()
1139 struct iio_dev *indio_dev = container_of(inode->i_cdev, in iio_chrdev_release() local
1141 clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags); in iio_chrdev_release()
1142 iio_device_put(indio_dev); in iio_chrdev_release()
1151 struct iio_dev *indio_dev = filp->private_data; in iio_ioctl() local
1155 if (!indio_dev->info) in iio_ioctl()
1159 fd = iio_event_getfd(indio_dev); in iio_ioctl()
1180 static int iio_check_unique_scan_index(struct iio_dev *indio_dev) in iio_check_unique_scan_index() argument
1183 const struct iio_chan_spec *channels = indio_dev->channels; in iio_check_unique_scan_index()
1185 if (!(indio_dev->modes & INDIO_ALL_BUFFER_MODES)) in iio_check_unique_scan_index()
1188 for (i = 0; i < indio_dev->num_channels - 1; i++) { in iio_check_unique_scan_index()
1191 for (j = i + 1; j < indio_dev->num_channels; j++) in iio_check_unique_scan_index()
1193 dev_err(&indio_dev->dev, in iio_check_unique_scan_index()
1209 int iio_device_register(struct iio_dev *indio_dev) in iio_device_register() argument
1214 if (!indio_dev->dev.of_node && indio_dev->dev.parent) in iio_device_register()
1215 indio_dev->dev.of_node = indio_dev->dev.parent->of_node; in iio_device_register()
1217 ret = iio_check_unique_scan_index(indio_dev); in iio_device_register()
1222 indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), indio_dev->id); in iio_device_register()
1224 ret = iio_device_register_debugfs(indio_dev); in iio_device_register()
1226 dev_err(indio_dev->dev.parent, in iio_device_register()
1231 ret = iio_buffer_alloc_sysfs_and_mask(indio_dev); in iio_device_register()
1233 dev_err(indio_dev->dev.parent, in iio_device_register()
1238 ret = iio_device_register_sysfs(indio_dev); in iio_device_register()
1240 dev_err(indio_dev->dev.parent, in iio_device_register()
1244 ret = iio_device_register_eventset(indio_dev); in iio_device_register()
1246 dev_err(indio_dev->dev.parent, in iio_device_register()
1250 if (indio_dev->modes & (INDIO_BUFFER_TRIGGERED | INDIO_EVENT_TRIGGERED)) in iio_device_register()
1251 iio_device_register_trigger_consumer(indio_dev); in iio_device_register()
1253 if ((indio_dev->modes & INDIO_ALL_BUFFER_MODES) && in iio_device_register()
1254 indio_dev->setup_ops == NULL) in iio_device_register()
1255 indio_dev->setup_ops = &noop_ring_setup_ops; in iio_device_register()
1257 cdev_init(&indio_dev->chrdev, &iio_buffer_fileops); in iio_device_register()
1258 indio_dev->chrdev.owner = indio_dev->info->driver_module; in iio_device_register()
1259 indio_dev->chrdev.kobj.parent = &indio_dev->dev.kobj; in iio_device_register()
1260 ret = cdev_add(&indio_dev->chrdev, indio_dev->dev.devt, 1); in iio_device_register()
1264 ret = device_add(&indio_dev->dev); in iio_device_register()
1270 cdev_del(&indio_dev->chrdev); in iio_device_register()
1272 iio_device_unregister_eventset(indio_dev); in iio_device_register()
1274 iio_device_unregister_sysfs(indio_dev); in iio_device_register()
1276 iio_buffer_free_sysfs_and_mask(indio_dev); in iio_device_register()
1278 iio_device_unregister_debugfs(indio_dev); in iio_device_register()
1287 void iio_device_unregister(struct iio_dev *indio_dev) in iio_device_unregister() argument
1289 mutex_lock(&indio_dev->info_exist_lock); in iio_device_unregister()
1291 device_del(&indio_dev->dev); in iio_device_unregister()
1293 if (indio_dev->chrdev.dev) in iio_device_unregister()
1294 cdev_del(&indio_dev->chrdev); in iio_device_unregister()
1295 iio_device_unregister_debugfs(indio_dev); in iio_device_unregister()
1297 iio_disable_all_buffers(indio_dev); in iio_device_unregister()
1299 indio_dev->info = NULL; in iio_device_unregister()
1301 iio_device_wakeup_eventset(indio_dev); in iio_device_unregister()
1302 iio_buffer_wakeup_poll(indio_dev); in iio_device_unregister()
1304 mutex_unlock(&indio_dev->info_exist_lock); in iio_device_unregister()
1306 iio_buffer_free_sysfs_and_mask(indio_dev); in iio_device_unregister()
1331 int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev) in devm_iio_device_register() argument
1340 *ptr = indio_dev; in devm_iio_device_register()
1341 ret = iio_device_register(indio_dev); in devm_iio_device_register()
1358 void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev) in devm_iio_device_unregister() argument
1363 devm_iio_device_match, indio_dev); in devm_iio_device_unregister()