Lines Matching refs:buffer
109 struct iio_buffer *rb = indio_dev->buffer; in iio_buffer_read_first_n_outer()
164 struct iio_buffer *rb = indio_dev->buffer; in iio_buffer_poll()
184 if (!indio_dev->buffer) in iio_buffer_wakeup_poll()
187 wake_up(&indio_dev->buffer->pollq); in iio_buffer_wakeup_poll()
190 void iio_buffer_init(struct iio_buffer *buffer) in iio_buffer_init() argument
192 INIT_LIST_HEAD(&buffer->demux_list); in iio_buffer_init()
193 INIT_LIST_HEAD(&buffer->buffer_list); in iio_buffer_init()
194 init_waitqueue_head(&buffer->pollq); in iio_buffer_init()
195 kref_init(&buffer->ref); in iio_buffer_init()
196 buffer->watermark = 1; in iio_buffer_init()
247 indio_dev->buffer->scan_mask); in iio_scan_el_show()
293 struct iio_buffer *buffer, int bit) in iio_scan_mask_set() argument
308 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength); in iio_scan_mask_set()
321 bitmap_copy(buffer->scan_mask, trialmask, indio_dev->masklength); in iio_scan_mask_set()
332 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit) in iio_scan_mask_clear() argument
334 clear_bit(bit, buffer->scan_mask); in iio_scan_mask_clear()
346 struct iio_buffer *buffer = indio_dev->buffer; in iio_scan_el_store() local
353 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_scan_el_store()
357 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
361 ret = iio_scan_mask_clear(buffer, this_attr->address); in iio_scan_el_store()
365 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
382 return sprintf(buf, "%d\n", indio_dev->buffer->scan_timestamp); in iio_scan_el_ts_show()
399 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_scan_el_ts_store()
403 indio_dev->buffer->scan_timestamp = state; in iio_scan_el_ts_store()
414 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_add_channel_sysfs() local
423 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
434 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
446 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
455 &buffer->scan_el_dev_attr_list); in iio_buffer_add_channel_sysfs()
468 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_read_length() local
470 return sprintf(buf, "%d\n", buffer->length); in iio_buffer_read_length()
478 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_write_length() local
486 if (val == buffer->length) in iio_buffer_write_length()
490 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_buffer_write_length()
493 buffer->access->set_length(buffer, val); in iio_buffer_write_length()
498 if (buffer->length && buffer->length < buffer->watermark) in iio_buffer_write_length()
499 buffer->watermark = buffer->length; in iio_buffer_write_length()
511 return sprintf(buf, "%d\n", iio_buffer_is_active(indio_dev->buffer)); in iio_buffer_show_enable()
548 struct iio_buffer *buffer) in iio_buffer_activate() argument
550 iio_buffer_get(buffer); in iio_buffer_activate()
551 list_add(&buffer->buffer_list, &indio_dev->buffer_list); in iio_buffer_activate()
554 static void iio_buffer_deactivate(struct iio_buffer *buffer) in iio_buffer_deactivate() argument
556 list_del_init(&buffer->buffer_list); in iio_buffer_deactivate()
557 wake_up_interruptible(&buffer->pollq); in iio_buffer_deactivate()
558 iio_buffer_put(buffer); in iio_buffer_deactivate()
563 struct iio_buffer *buffer, *_buffer; in iio_buffer_deactivate_all() local
565 list_for_each_entry_safe(buffer, _buffer, in iio_buffer_deactivate_all()
567 iio_buffer_deactivate(buffer); in iio_buffer_deactivate_all()
571 struct iio_buffer *buffer) in iio_buffer_update_bytes_per_datum() argument
575 if (!buffer->access->set_bytes_per_datum) in iio_buffer_update_bytes_per_datum()
578 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask, in iio_buffer_update_bytes_per_datum()
579 buffer->scan_timestamp); in iio_buffer_update_bytes_per_datum()
581 buffer->access->set_bytes_per_datum(buffer, bytes); in iio_buffer_update_bytes_per_datum()
585 struct iio_buffer *buffer) in iio_buffer_request_update() argument
589 iio_buffer_update_bytes_per_datum(indio_dev, buffer); in iio_buffer_request_update()
590 if (buffer->access->request_update) { in iio_buffer_request_update()
591 ret = buffer->access->request_update(buffer); in iio_buffer_request_update()
625 struct iio_buffer *buffer; in iio_verify_update() local
641 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_verify_update()
642 if (buffer == remove_buffer) in iio_verify_update()
644 modes &= buffer->access->modes; in iio_verify_update()
679 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_verify_update()
680 if (buffer == remove_buffer) in iio_verify_update()
682 bitmap_or(compound_mask, compound_mask, buffer->scan_mask, in iio_verify_update()
684 scan_timestamp |= buffer->scan_timestamp; in iio_verify_update()
919 inlist = iio_buffer_is_active(indio_dev->buffer); in iio_buffer_store_enable()
926 indio_dev->buffer, NULL); in iio_buffer_store_enable()
929 NULL, indio_dev->buffer); in iio_buffer_store_enable()
943 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_show_watermark() local
945 return sprintf(buf, "%u\n", buffer->watermark); in iio_buffer_show_watermark()
954 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_store_watermark() local
966 if (val > buffer->length) { in iio_buffer_store_watermark()
971 if (iio_buffer_is_active(indio_dev->buffer)) { in iio_buffer_store_watermark()
976 buffer->watermark = val; in iio_buffer_store_watermark()
1005 struct iio_buffer *buffer = indio_dev->buffer; in iio_buffer_alloc_sysfs_and_mask() local
1018 if (!buffer) in iio_buffer_alloc_sysfs_and_mask()
1022 if (buffer->attrs) { in iio_buffer_alloc_sysfs_and_mask()
1023 while (buffer->attrs[attrcount] != NULL) in iio_buffer_alloc_sysfs_and_mask()
1033 if (!buffer->access->set_length) in iio_buffer_alloc_sysfs_and_mask()
1036 if (buffer->attrs) in iio_buffer_alloc_sysfs_and_mask()
1037 memcpy(&attr[ARRAY_SIZE(iio_buffer_attrs)], buffer->attrs, in iio_buffer_alloc_sysfs_and_mask()
1042 buffer->buffer_group.name = "buffer"; in iio_buffer_alloc_sysfs_and_mask()
1043 buffer->buffer_group.attrs = attr; in iio_buffer_alloc_sysfs_and_mask()
1045 indio_dev->groups[indio_dev->groupcounter++] = &buffer->buffer_group; in iio_buffer_alloc_sysfs_and_mask()
1047 if (buffer->scan_el_attrs != NULL) { in iio_buffer_alloc_sysfs_and_mask()
1048 attr = buffer->scan_el_attrs->attrs; in iio_buffer_alloc_sysfs_and_mask()
1053 INIT_LIST_HEAD(&buffer->scan_el_dev_attr_list); in iio_buffer_alloc_sysfs_and_mask()
1070 if (indio_dev->masklength && buffer->scan_mask == NULL) { in iio_buffer_alloc_sysfs_and_mask()
1071 buffer->scan_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength), in iio_buffer_alloc_sysfs_and_mask()
1072 sizeof(*buffer->scan_mask), in iio_buffer_alloc_sysfs_and_mask()
1074 if (buffer->scan_mask == NULL) { in iio_buffer_alloc_sysfs_and_mask()
1081 buffer->scan_el_group.name = iio_scan_elements_group_name; in iio_buffer_alloc_sysfs_and_mask()
1083 buffer->scan_el_group.attrs = kcalloc(attrcount + 1, in iio_buffer_alloc_sysfs_and_mask()
1084 sizeof(buffer->scan_el_group.attrs[0]), in iio_buffer_alloc_sysfs_and_mask()
1086 if (buffer->scan_el_group.attrs == NULL) { in iio_buffer_alloc_sysfs_and_mask()
1090 if (buffer->scan_el_attrs) in iio_buffer_alloc_sysfs_and_mask()
1091 memcpy(buffer->scan_el_group.attrs, buffer->scan_el_attrs, in iio_buffer_alloc_sysfs_and_mask()
1092 sizeof(buffer->scan_el_group.attrs[0])*attrcount_orig); in iio_buffer_alloc_sysfs_and_mask()
1095 list_for_each_entry(p, &buffer->scan_el_dev_attr_list, l) in iio_buffer_alloc_sysfs_and_mask()
1096 buffer->scan_el_group.attrs[attrn++] = &p->dev_attr.attr; in iio_buffer_alloc_sysfs_and_mask()
1097 indio_dev->groups[indio_dev->groupcounter++] = &buffer->scan_el_group; in iio_buffer_alloc_sysfs_and_mask()
1102 kfree(buffer->scan_mask); in iio_buffer_alloc_sysfs_and_mask()
1104 iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list); in iio_buffer_alloc_sysfs_and_mask()
1105 kfree(indio_dev->buffer->buffer_group.attrs); in iio_buffer_alloc_sysfs_and_mask()
1112 if (!indio_dev->buffer) in iio_buffer_free_sysfs_and_mask()
1115 kfree(indio_dev->buffer->scan_mask); in iio_buffer_free_sysfs_and_mask()
1116 kfree(indio_dev->buffer->buffer_group.attrs); in iio_buffer_free_sysfs_and_mask()
1117 kfree(indio_dev->buffer->scan_el_group.attrs); in iio_buffer_free_sysfs_and_mask()
1118 iio_free_chan_devattr_list(&indio_dev->buffer->scan_el_dev_attr_list); in iio_buffer_free_sysfs_and_mask()
1138 struct iio_buffer *buffer, int bit) in iio_scan_mask_query() argument
1143 if (!buffer->scan_mask) in iio_scan_mask_query()
1147 return !!test_bit(bit, buffer->scan_mask); in iio_scan_mask_query()
1165 static const void *iio_demux(struct iio_buffer *buffer, in iio_demux() argument
1170 if (list_empty(&buffer->demux_list)) in iio_demux()
1172 list_for_each_entry(t, &buffer->demux_list, l) in iio_demux()
1173 memcpy(buffer->demux_bounce + t->to, in iio_demux()
1176 return buffer->demux_bounce; in iio_demux()
1179 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data) in iio_push_to_buffer() argument
1181 const void *dataout = iio_demux(buffer, data); in iio_push_to_buffer()
1184 ret = buffer->access->store_to(buffer, dataout); in iio_push_to_buffer()
1192 wake_up_interruptible_poll(&buffer->pollq, POLLIN | POLLRDNORM); in iio_push_to_buffer()
1196 static void iio_buffer_demux_free(struct iio_buffer *buffer) in iio_buffer_demux_free() argument
1199 list_for_each_entry_safe(p, q, &buffer->demux_list, l) { in iio_buffer_demux_free()
1221 static int iio_buffer_add_demux(struct iio_buffer *buffer, in iio_buffer_add_demux() argument
1236 list_add_tail(&(*p)->l, &buffer->demux_list); in iio_buffer_add_demux()
1243 struct iio_buffer *buffer) in iio_buffer_update_demux() argument
1251 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
1252 kfree(buffer->demux_bounce); in iio_buffer_update_demux()
1253 buffer->demux_bounce = NULL; in iio_buffer_update_demux()
1257 buffer->scan_mask, in iio_buffer_update_demux()
1263 buffer->scan_mask, in iio_buffer_update_demux()
1289 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
1296 if (buffer->scan_timestamp) { in iio_buffer_update_demux()
1306 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
1312 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL); in iio_buffer_update_demux()
1313 if (buffer->demux_bounce == NULL) { in iio_buffer_update_demux()
1320 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
1327 struct iio_buffer *buffer; in iio_update_demux() local
1330 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) { in iio_update_demux()
1331 ret = iio_buffer_update_demux(indio_dev, buffer); in iio_update_demux()
1338 list_for_each_entry(buffer, &indio_dev->buffer_list, buffer_list) in iio_update_demux()
1339 iio_buffer_demux_free(buffer); in iio_update_demux()
1356 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref); in iio_buffer_release() local
1358 buffer->access->release(buffer); in iio_buffer_release()
1367 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer) in iio_buffer_get() argument
1369 if (buffer) in iio_buffer_get()
1370 kref_get(&buffer->ref); in iio_buffer_get()
1372 return buffer; in iio_buffer_get()
1380 void iio_buffer_put(struct iio_buffer *buffer) in iio_buffer_put() argument
1382 if (buffer) in iio_buffer_put()
1383 kref_put(&buffer->ref, iio_buffer_release); in iio_buffer_put()