Lines Matching refs:buffer

101 	struct iio_buffer *rb = indio_dev->buffer;  in iio_buffer_read_first_n_outer()
151 struct iio_buffer *rb = indio_dev->buffer; in iio_buffer_poll()
171 if (!indio_dev->buffer) in iio_buffer_wakeup_poll()
174 wake_up(&indio_dev->buffer->pollq); in iio_buffer_wakeup_poll()
177 void iio_buffer_init(struct iio_buffer *buffer) in iio_buffer_init() argument
179 INIT_LIST_HEAD(&buffer->demux_list); in iio_buffer_init()
180 INIT_LIST_HEAD(&buffer->buffer_list); in iio_buffer_init()
181 init_waitqueue_head(&buffer->pollq); in iio_buffer_init()
182 kref_init(&buffer->ref); in iio_buffer_init()
183 buffer->watermark = 1; in iio_buffer_init()
234 indio_dev->buffer->scan_mask); in iio_scan_el_show()
274 struct iio_buffer *buffer, int bit) in iio_scan_mask_set() argument
289 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength); in iio_scan_mask_set()
302 bitmap_copy(buffer->scan_mask, trialmask, indio_dev->masklength); in iio_scan_mask_set()
313 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit) in iio_scan_mask_clear() argument
315 clear_bit(bit, buffer->scan_mask); in iio_scan_mask_clear()
327 struct iio_buffer *buffer = indio_dev->buffer; in iio_scan_el_store() local
334 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_scan_el_store()
338 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
342 ret = iio_scan_mask_clear(buffer, this_attr->address); in iio_scan_el_store()
346 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
363 return sprintf(buf, "%d\n", indio_dev->buffer->scan_timestamp); in iio_scan_el_ts_show()
380 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_scan_el_ts_store()
384 indio_dev->buffer->scan_timestamp = state; in iio_scan_el_ts_store()
395 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_add_channel_sysfs() local
404 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
415 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
427 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
436 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
449 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_read_length() local
451 return sprintf(buf, "%d\n", buffer->length); in iio_buffer_read_length()
459 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_write_length() local
467 if (val == buffer->length) in iio_buffer_write_length()
471 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_buffer_write_length()
474 buffer->access->set_length(buffer, val); in iio_buffer_write_length()
479 if (buffer->length && buffer->length < buffer->watermark) in iio_buffer_write_length()
480 buffer->watermark = buffer->length; in iio_buffer_write_length()
492 return sprintf(buf, "%d\n", iio_buffer_is_active(indio_dev->buffer)); in iio_buffer_show_enable()
529 struct iio_buffer *buffer) in iio_buffer_activate() argument
531 iio_buffer_get(buffer); in iio_buffer_activate()
532 list_add(&buffer->buffer_list, &indio_dev->buffer_list); in iio_buffer_activate()
535 static void iio_buffer_deactivate(struct iio_buffer *buffer) in iio_buffer_deactivate() argument
537 list_del_init(&buffer->buffer_list); in iio_buffer_deactivate()
538 wake_up_interruptible(&buffer->pollq); in iio_buffer_deactivate()
539 iio_buffer_put(buffer); in iio_buffer_deactivate()
544 struct iio_buffer *buffer, *_buffer; in iio_disable_all_buffers() local
552 list_for_each_entry_safe(buffer, _buffer, in iio_disable_all_buffers()
554 iio_buffer_deactivate(buffer); in iio_disable_all_buffers()
565 struct iio_buffer *buffer) in iio_buffer_update_bytes_per_datum() argument
569 if (!buffer->access->set_bytes_per_datum) in iio_buffer_update_bytes_per_datum()
572 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask, in iio_buffer_update_bytes_per_datum()
573 buffer->scan_timestamp); in iio_buffer_update_bytes_per_datum()
575 buffer->access->set_bytes_per_datum(buffer, bytes); in iio_buffer_update_bytes_per_datum()
584 struct iio_buffer *buffer; in __iio_update_buffers() local
630 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in __iio_update_buffers()
631 bitmap_or(compound_mask, compound_mask, buffer->scan_mask, in __iio_update_buffers()
633 indio_dev->scan_timestamp |= buffer->scan_timestamp; in __iio_update_buffers()
675 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in __iio_update_buffers()
676 iio_buffer_update_bytes_per_datum(indio_dev, buffer); in __iio_update_buffers()
677 if (buffer->access->request_update) { in __iio_update_buffers()
678 ret = buffer->access->request_update(buffer); in __iio_update_buffers()
797 inlist = iio_buffer_is_active(indio_dev->buffer); in iio_buffer_store_enable()
804 indio_dev->buffer, NULL); in iio_buffer_store_enable()
807 NULL, indio_dev->buffer); in iio_buffer_store_enable()
823 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_show_watermark() local
825 return sprintf(buf, "%u\n", buffer->watermark); in iio_buffer_show_watermark()
834 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_store_watermark() local
846 if (val > buffer->length) { in iio_buffer_store_watermark()
851 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_buffer_store_watermark()
856 buffer->watermark = val; in iio_buffer_store_watermark()
885 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_alloc_sysfs_and_mask() local
889 if (!buffer) in iio_buffer_alloc_sysfs_and_mask()
893 if (buffer->attrs) { in iio_buffer_alloc_sysfs_and_mask()
894 while (buffer->attrs[attrcount] != NULL) in iio_buffer_alloc_sysfs_and_mask()
904 if (!buffer->access->set_length) in iio_buffer_alloc_sysfs_and_mask()
907 if (buffer->attrs) in iio_buffer_alloc_sysfs_and_mask()
908 memcpy(&attr[ARRAY_SIZE(iio_buffer_attrs)], buffer->attrs, in iio_buffer_alloc_sysfs_and_mask()
913 buffer->buffer_group.name = "buffer"; in iio_buffer_alloc_sysfs_and_mask()
914 buffer->buffer_group.attrs = attr; in iio_buffer_alloc_sysfs_and_mask()
916 indio_dev->groups[indio_dev->groupcounter++] = &buffer->buffer_group; in iio_buffer_alloc_sysfs_and_mask()
918 if (buffer->scan_el_attrs != NULL) { in iio_buffer_alloc_sysfs_and_mask()
919 attr = buffer->scan_el_attrs->attrs; in iio_buffer_alloc_sysfs_and_mask()
924 INIT_LIST_HEAD(&buffer->scan_el_dev_attr_list); in iio_buffer_alloc_sysfs_and_mask()
947 if (indio_dev->masklength && buffer->scan_mask == NULL) { in iio_buffer_alloc_sysfs_and_mask()
948 buffer->scan_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength), in iio_buffer_alloc_sysfs_and_mask()
949 sizeof(*buffer->scan_mask), in iio_buffer_alloc_sysfs_and_mask()
951 if (buffer->scan_mask == NULL) { in iio_buffer_alloc_sysfs_and_mask()
958 buffer->scan_el_group.name = iio_scan_elements_group_name; in iio_buffer_alloc_sysfs_and_mask()
960 buffer->scan_el_group.attrs = kcalloc(attrcount + 1, in iio_buffer_alloc_sysfs_and_mask()
961 sizeof(buffer->scan_el_group.attrs[0]), in iio_buffer_alloc_sysfs_and_mask()
963 if (buffer->scan_el_group.attrs == NULL) { in iio_buffer_alloc_sysfs_and_mask()
967 if (buffer->scan_el_attrs) in iio_buffer_alloc_sysfs_and_mask()
968 memcpy(buffer->scan_el_group.attrs, buffer->scan_el_attrs, in iio_buffer_alloc_sysfs_and_mask()
969 sizeof(buffer->scan_el_group.attrs[0])*attrcount_orig); in iio_buffer_alloc_sysfs_and_mask()
972 list_for_each_entry(p, &buffer->scan_el_dev_attr_list, l) in iio_buffer_alloc_sysfs_and_mask()
973 buffer->scan_el_group.attrs[attrn++] = &p->dev_attr.attr; in iio_buffer_alloc_sysfs_and_mask()
974 indio_dev->groups[indio_dev->groupcounter++] = &buffer->scan_el_group; in iio_buffer_alloc_sysfs_and_mask()
979 kfree(buffer->scan_mask); in iio_buffer_alloc_sysfs_and_mask()
981 iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list); in iio_buffer_alloc_sysfs_and_mask()
982 kfree(indio_dev->buffer->buffer_group.attrs); in iio_buffer_alloc_sysfs_and_mask()
989 if (!indio_dev->buffer) in iio_buffer_free_sysfs_and_mask()
992 kfree(indio_dev->buffer->scan_mask); in iio_buffer_free_sysfs_and_mask()
993 kfree(indio_dev->buffer->buffer_group.attrs); in iio_buffer_free_sysfs_and_mask()
994 kfree(indio_dev->buffer->scan_el_group.attrs); in iio_buffer_free_sysfs_and_mask()
995 iio_free_chan_devattr_list(&indio_dev->buffer->scan_el_dev_attr_list); in iio_buffer_free_sysfs_and_mask()
1015 struct iio_buffer *buffer, int bit) in iio_scan_mask_query() argument
1020 if (!buffer->scan_mask) in iio_scan_mask_query()
1024 return !!test_bit(bit, buffer->scan_mask); in iio_scan_mask_query()
1042 static const void *iio_demux(struct iio_buffer *buffer, in iio_demux() argument
1047 if (list_empty(&buffer->demux_list)) in iio_demux()
1049 list_for_each_entry(t, &buffer->demux_list, l) in iio_demux()
1050 memcpy(buffer->demux_bounce + t->to, in iio_demux()
1053 return buffer->demux_bounce; in iio_demux()
1056 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data) in iio_push_to_buffer() argument
1058 const void *dataout = iio_demux(buffer, data); in iio_push_to_buffer()
1061 ret = buffer->access->store_to(buffer, dataout); in iio_push_to_buffer()
1069 wake_up_interruptible_poll(&buffer->pollq, POLLIN | POLLRDNORM); in iio_push_to_buffer()
1073 static void iio_buffer_demux_free(struct iio_buffer *buffer) in iio_buffer_demux_free() argument
1076 list_for_each_entry_safe(p, q, &buffer->demux_list, l) { in iio_buffer_demux_free()
1098 static int iio_buffer_add_demux(struct iio_buffer *buffer, in iio_buffer_add_demux() argument
1113 list_add_tail(&(*p)->l, &buffer->demux_list); in iio_buffer_add_demux()
1120 struct iio_buffer *buffer) in iio_buffer_update_demux() argument
1128 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
1129 kfree(buffer->demux_bounce); in iio_buffer_update_demux()
1130 buffer->demux_bounce = NULL; in iio_buffer_update_demux()
1134 buffer->scan_mask, in iio_buffer_update_demux()
1140 buffer->scan_mask, in iio_buffer_update_demux()
1166 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
1173 if (buffer->scan_timestamp) { in iio_buffer_update_demux()
1183 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
1189 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL); in iio_buffer_update_demux()
1190 if (buffer->demux_bounce == NULL) { in iio_buffer_update_demux()
1197 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
1204 struct iio_buffer *buffer; in iio_update_demux() local
1207 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_update_demux()
1208 ret = iio_buffer_update_demux(indio_dev, buffer); in iio_update_demux()
1215 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) in iio_update_demux()
1216 iio_buffer_demux_free(buffer); in iio_update_demux()
1233 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref); in iio_buffer_release() local
1235 buffer->access->release(buffer); in iio_buffer_release()
1244 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer) in iio_buffer_get() argument
1246 if (buffer) in iio_buffer_get()
1247 kref_get(&buffer->ref); in iio_buffer_get()
1249 return buffer; in iio_buffer_get()
1257 void iio_buffer_put(struct iio_buffer *buffer) in iio_buffer_put() argument
1259 if (buffer) in iio_buffer_put()
1260 kref_put(&buffer->ref, iio_buffer_release); in iio_buffer_put()