Lines Matching refs:buffer

106 	struct iio_buffer *rb = indio_dev->buffer;  in iio_buffer_read_first_n_outer()
172 struct iio_buffer *rb = indio_dev->buffer; in iio_buffer_poll()
192 if (!indio_dev->buffer) in iio_buffer_wakeup_poll()
195 wake_up(&indio_dev->buffer->pollq); in iio_buffer_wakeup_poll()
198 void iio_buffer_init(struct iio_buffer *buffer) in iio_buffer_init() argument
200 INIT_LIST_HEAD(&buffer->demux_list); in iio_buffer_init()
201 INIT_LIST_HEAD(&buffer->buffer_list); in iio_buffer_init()
202 init_waitqueue_head(&buffer->pollq); in iio_buffer_init()
203 kref_init(&buffer->ref); in iio_buffer_init()
204 if (!buffer->watermark) in iio_buffer_init()
205 buffer->watermark = 1; in iio_buffer_init()
214 void iio_buffer_set_attrs(struct iio_buffer *buffer, in iio_buffer_set_attrs() argument
217 buffer->attrs = attrs; in iio_buffer_set_attrs()
268 indio_dev->buffer->scan_mask); in iio_scan_el_show()
314 struct iio_buffer *buffer, int bit) in iio_scan_mask_set() argument
327 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength); in iio_scan_mask_set()
340 bitmap_copy(buffer->scan_mask, trialmask, indio_dev->masklength); in iio_scan_mask_set()
351 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit) in iio_scan_mask_clear() argument
353 clear_bit(bit, buffer->scan_mask); in iio_scan_mask_clear()
358 struct iio_buffer *buffer, int bit) in iio_scan_mask_query() argument
363 if (!buffer->scan_mask) in iio_scan_mask_query()
367 return !!test_bit(bit, buffer->scan_mask); in iio_scan_mask_query()
378 struct iio_buffer *buffer = indio_dev->buffer; in iio_scan_el_store() local
385 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_scan_el_store()
389 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
393 ret = iio_scan_mask_clear(buffer, this_attr->address); in iio_scan_el_store()
397 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
414 return sprintf(buf, "%d\n", indio_dev->buffer->scan_timestamp); in iio_scan_el_ts_show()
431 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_scan_el_ts_store()
435 indio_dev->buffer->scan_timestamp = state; in iio_scan_el_ts_store()
446 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_add_channel_sysfs() local
455 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
466 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
478 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
487 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
500 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_read_length() local
502 return sprintf(buf, "%d\n", buffer->length); in iio_buffer_read_length()
510 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_write_length() local
518 if (val == buffer->length) in iio_buffer_write_length()
522 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_buffer_write_length()
525 buffer->access->set_length(buffer, val); in iio_buffer_write_length()
530 if (buffer->length && buffer->length < buffer->watermark) in iio_buffer_write_length()
531 buffer->watermark = buffer->length; in iio_buffer_write_length()
543 return sprintf(buf, "%d\n", iio_buffer_is_active(indio_dev->buffer)); in iio_buffer_show_enable()
588 struct iio_buffer *buffer) in iio_buffer_activate() argument
590 iio_buffer_get(buffer); in iio_buffer_activate()
591 list_add(&buffer->buffer_list, &indio_dev->buffer_list); in iio_buffer_activate()
594 static void iio_buffer_deactivate(struct iio_buffer *buffer) in iio_buffer_deactivate() argument
596 list_del_init(&buffer->buffer_list); in iio_buffer_deactivate()
597 wake_up_interruptible(&buffer->pollq); in iio_buffer_deactivate()
598 iio_buffer_put(buffer); in iio_buffer_deactivate()
603 struct iio_buffer *buffer, *_buffer; in iio_buffer_deactivate_all() local
605 list_for_each_entry_safe(buffer, _buffer, in iio_buffer_deactivate_all()
607 iio_buffer_deactivate(buffer); in iio_buffer_deactivate_all()
610 static int iio_buffer_enable(struct iio_buffer *buffer, in iio_buffer_enable() argument
613 if (!buffer->access->enable) in iio_buffer_enable()
615 return buffer->access->enable(buffer, indio_dev); in iio_buffer_enable()
618 static int iio_buffer_disable(struct iio_buffer *buffer, in iio_buffer_disable() argument
621 if (!buffer->access->disable) in iio_buffer_disable()
623 return buffer->access->disable(buffer, indio_dev); in iio_buffer_disable()
627 struct iio_buffer *buffer) in iio_buffer_update_bytes_per_datum() argument
631 if (!buffer->access->set_bytes_per_datum) in iio_buffer_update_bytes_per_datum()
634 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask, in iio_buffer_update_bytes_per_datum()
635 buffer->scan_timestamp); in iio_buffer_update_bytes_per_datum()
637 buffer->access->set_bytes_per_datum(buffer, bytes); in iio_buffer_update_bytes_per_datum()
641 struct iio_buffer *buffer) in iio_buffer_request_update() argument
645 iio_buffer_update_bytes_per_datum(indio_dev, buffer); in iio_buffer_request_update()
646 if (buffer->access->request_update) { in iio_buffer_request_update()
647 ret = buffer->access->request_update(buffer); in iio_buffer_request_update()
682 struct iio_buffer *buffer; in iio_verify_update() local
699 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_verify_update()
700 if (buffer == remove_buffer) in iio_verify_update()
702 modes &= buffer->access->modes; in iio_verify_update()
703 config->watermark = min(config->watermark, buffer->watermark); in iio_verify_update()
740 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_verify_update()
741 if (buffer == remove_buffer) in iio_verify_update()
743 bitmap_or(compound_mask, compound_mask, buffer->scan_mask, in iio_verify_update()
745 scan_timestamp |= buffer->scan_timestamp; in iio_verify_update()
788 static void iio_buffer_demux_free(struct iio_buffer *buffer) in iio_buffer_demux_free() argument
791 list_for_each_entry_safe(p, q, &buffer->demux_list, l) { in iio_buffer_demux_free()
797 static int iio_buffer_add_demux(struct iio_buffer *buffer, in iio_buffer_add_demux() argument
812 list_add_tail(&(*p)->l, &buffer->demux_list); in iio_buffer_add_demux()
819 struct iio_buffer *buffer) in iio_buffer_update_demux() argument
826 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
827 kfree(buffer->demux_bounce); in iio_buffer_update_demux()
828 buffer->demux_bounce = NULL; in iio_buffer_update_demux()
832 buffer->scan_mask, in iio_buffer_update_demux()
838 buffer->scan_mask, in iio_buffer_update_demux()
854 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
861 if (buffer->scan_timestamp) { in iio_buffer_update_demux()
865 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
871 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL); in iio_buffer_update_demux()
872 if (buffer->demux_bounce == NULL) { in iio_buffer_update_demux()
879 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
886 struct iio_buffer *buffer; in iio_update_demux() local
889 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_update_demux()
890 ret = iio_buffer_update_demux(indio_dev, buffer); in iio_update_demux()
897 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) in iio_update_demux()
898 iio_buffer_demux_free(buffer); in iio_update_demux()
906 struct iio_buffer *buffer; in iio_enable_buffers() local
941 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_enable_buffers()
942 ret = iio_buffer_enable(buffer, indio_dev); in iio_enable_buffers()
961 list_for_each_entry_continue_reverse(buffer, &indio_dev->buffer_list, in iio_enable_buffers()
963 iio_buffer_disable(buffer, indio_dev); in iio_enable_buffers()
976 struct iio_buffer *buffer; in iio_disable_buffers() local
997 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_disable_buffers()
998 ret2 = iio_buffer_disable(buffer, indio_dev); in iio_disable_buffers()
1131 inlist = iio_buffer_is_active(indio_dev->buffer); in iio_buffer_store_enable()
1138 indio_dev->buffer, NULL); in iio_buffer_store_enable()
1141 NULL, indio_dev->buffer); in iio_buffer_store_enable()
1155 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_show_watermark() local
1157 return sprintf(buf, "%u\n", buffer->watermark); in iio_buffer_show_watermark()
1166 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_store_watermark() local
1178 if (val > buffer->length) { in iio_buffer_store_watermark()
1183 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_buffer_store_watermark()
1188 buffer->watermark = val; in iio_buffer_store_watermark()
1202 bytes = iio_buffer_data_available(indio_dev->buffer); in iio_dma_show_data_available()
1231 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_alloc_sysfs_and_mask() local
1244 if (!buffer) in iio_buffer_alloc_sysfs_and_mask()
1248 if (buffer->attrs) { in iio_buffer_alloc_sysfs_and_mask()
1249 while (buffer->attrs[attrcount] != NULL) in iio_buffer_alloc_sysfs_and_mask()
1259 if (!buffer->access->set_length) in iio_buffer_alloc_sysfs_and_mask()
1262 if (buffer->access->flags & INDIO_BUFFER_FLAG_FIXED_WATERMARK) in iio_buffer_alloc_sysfs_and_mask()
1265 if (buffer->attrs) in iio_buffer_alloc_sysfs_and_mask()
1266 memcpy(&attr[ARRAY_SIZE(iio_buffer_attrs)], buffer->attrs, in iio_buffer_alloc_sysfs_and_mask()
1271 buffer->buffer_group.name = "buffer"; in iio_buffer_alloc_sysfs_and_mask()
1272 buffer->buffer_group.attrs = attr; in iio_buffer_alloc_sysfs_and_mask()
1274 indio_dev->groups[indio_dev->groupcounter++] = &buffer->buffer_group; in iio_buffer_alloc_sysfs_and_mask()
1276 if (buffer->scan_el_attrs != NULL) { in iio_buffer_alloc_sysfs_and_mask()
1277 attr = buffer->scan_el_attrs->attrs; in iio_buffer_alloc_sysfs_and_mask()
1282 INIT_LIST_HEAD(&buffer->scan_el_dev_attr_list); in iio_buffer_alloc_sysfs_and_mask()
1299 if (indio_dev->masklength && buffer->scan_mask == NULL) { in iio_buffer_alloc_sysfs_and_mask()
1300 buffer->scan_mask = bitmap_zalloc(indio_dev->masklength, in iio_buffer_alloc_sysfs_and_mask()
1302 if (buffer->scan_mask == NULL) { in iio_buffer_alloc_sysfs_and_mask()
1309 buffer->scan_el_group.name = iio_scan_elements_group_name; in iio_buffer_alloc_sysfs_and_mask()
1311 buffer->scan_el_group.attrs = kcalloc(attrcount + 1, in iio_buffer_alloc_sysfs_and_mask()
1312 sizeof(buffer->scan_el_group.attrs[0]), in iio_buffer_alloc_sysfs_and_mask()
1314 if (buffer->scan_el_group.attrs == NULL) { in iio_buffer_alloc_sysfs_and_mask()
1318 if (buffer->scan_el_attrs) in iio_buffer_alloc_sysfs_and_mask()
1319 memcpy(buffer->scan_el_group.attrs, buffer->scan_el_attrs, in iio_buffer_alloc_sysfs_and_mask()
1320 sizeof(buffer->scan_el_group.attrs[0])*attrcount_orig); in iio_buffer_alloc_sysfs_and_mask()
1323 list_for_each_entry(p, &buffer->scan_el_dev_attr_list, l) in iio_buffer_alloc_sysfs_and_mask()
1324 buffer->scan_el_group.attrs[attrn++] = &p->dev_attr.attr; in iio_buffer_alloc_sysfs_and_mask()
1325 indio_dev->groups[indio_dev->groupcounter++] = &buffer->scan_el_group; in iio_buffer_alloc_sysfs_and_mask()
1330 bitmap_free(buffer->scan_mask); in iio_buffer_alloc_sysfs_and_mask()
1332 iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list); in iio_buffer_alloc_sysfs_and_mask()
1333 kfree(indio_dev->buffer->buffer_group.attrs); in iio_buffer_alloc_sysfs_and_mask()
1340 if (!indio_dev->buffer) in iio_buffer_free_sysfs_and_mask()
1343 bitmap_free(indio_dev->buffer->scan_mask); in iio_buffer_free_sysfs_and_mask()
1344 kfree(indio_dev->buffer->buffer_group.attrs); in iio_buffer_free_sysfs_and_mask()
1345 kfree(indio_dev->buffer->scan_el_group.attrs); in iio_buffer_free_sysfs_and_mask()
1346 iio_free_chan_devattr_list(&indio_dev->buffer->scan_el_dev_attr_list); in iio_buffer_free_sysfs_and_mask()
1365 static const void *iio_demux(struct iio_buffer *buffer, in iio_demux() argument
1370 if (list_empty(&buffer->demux_list)) in iio_demux()
1372 list_for_each_entry(t, &buffer->demux_list, l) in iio_demux()
1373 memcpy(buffer->demux_bounce + t->to, in iio_demux()
1376 return buffer->demux_bounce; in iio_demux()
1379 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data) in iio_push_to_buffer() argument
1381 const void *dataout = iio_demux(buffer, data); in iio_push_to_buffer()
1384 ret = buffer->access->store_to(buffer, dataout); in iio_push_to_buffer()
1392 wake_up_interruptible_poll(&buffer->pollq, EPOLLIN | EPOLLRDNORM); in iio_push_to_buffer()
1427 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref); in iio_buffer_release() local
1429 buffer->access->release(buffer); in iio_buffer_release()
1438 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer) in iio_buffer_get() argument
1440 if (buffer) in iio_buffer_get()
1441 kref_get(&buffer->ref); in iio_buffer_get()
1443 return buffer; in iio_buffer_get()
1451 void iio_buffer_put(struct iio_buffer *buffer) in iio_buffer_put() argument
1453 if (buffer) in iio_buffer_put()
1454 kref_put(&buffer->ref, iio_buffer_release); in iio_buffer_put()
1468 struct iio_buffer *buffer) in iio_device_attach_buffer() argument
1470 indio_dev->buffer = iio_buffer_get(buffer); in iio_device_attach_buffer()