diff options
| -rw-r--r-- | drivers/media/v4l2-core/videobuf2-core.c | 24 | ||||
| -rw-r--r-- | include/media/videobuf2-core.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 349e659d75fb..7c4489c42365 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c | |||
| @@ -1200,6 +1200,30 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) | |||
| 1200 | EXPORT_SYMBOL_GPL(vb2_buffer_done); | 1200 | EXPORT_SYMBOL_GPL(vb2_buffer_done); |
| 1201 | 1201 | ||
| 1202 | /** | 1202 | /** |
| 1203 | * vb2_discard_done() - discard all buffers marked as DONE | ||
| 1204 | * @q: videobuf2 queue | ||
| 1205 | * | ||
| 1206 | * This function is intended to be used with suspend/resume operations. It | ||
| 1207 | * discards all 'done' buffers as they would be too old to be requested after | ||
| 1208 | * resume. | ||
| 1209 | * | ||
| 1210 | * Drivers must stop the hardware and synchronize with interrupt handlers and/or | ||
| 1211 | * delayed works before calling this function to make sure no buffer will be | ||
| 1212 | * touched by the driver and/or hardware. | ||
| 1213 | */ | ||
| 1214 | void vb2_discard_done(struct vb2_queue *q) | ||
| 1215 | { | ||
| 1216 | struct vb2_buffer *vb; | ||
| 1217 | unsigned long flags; | ||
| 1218 | |||
| 1219 | spin_lock_irqsave(&q->done_lock, flags); | ||
| 1220 | list_for_each_entry(vb, &q->done_list, done_entry) | ||
| 1221 | vb->state = VB2_BUF_STATE_ERROR; | ||
| 1222 | spin_unlock_irqrestore(&q->done_lock, flags); | ||
| 1223 | } | ||
| 1224 | EXPORT_SYMBOL_GPL(vb2_discard_done); | ||
| 1225 | |||
| 1226 | /** | ||
| 1203 | * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a | 1227 | * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a |
| 1204 | * v4l2_buffer by the userspace. The caller has already verified that struct | 1228 | * v4l2_buffer by the userspace. The caller has already verified that struct |
| 1205 | * v4l2_buffer has a valid number of planes. | 1229 | * v4l2_buffer has a valid number of planes. |
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h index bca25dc53f9d..8fab6fa0dbfb 100644 --- a/include/media/videobuf2-core.h +++ b/include/media/videobuf2-core.h | |||
| @@ -432,6 +432,7 @@ void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no); | |||
| 432 | void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no); | 432 | void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no); |
| 433 | 433 | ||
| 434 | void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state); | 434 | void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state); |
| 435 | void vb2_discard_done(struct vb2_queue *q); | ||
| 435 | int vb2_wait_for_all_buffers(struct vb2_queue *q); | 436 | int vb2_wait_for_all_buffers(struct vb2_queue *q); |
| 436 | 437 | ||
| 437 | int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); | 438 | int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); |
