Loading drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.c +58 −1 Original line number Diff line number Diff line /* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -755,6 +755,62 @@ static int msm_isp_buf_divert(struct msm_isp_buf_mgr *buf_mgr, return 0; } static int msm_isp_buf_err(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id, uint32_t output_format) { int rc = 0; unsigned long flags; struct msm_isp_bufq *bufq = NULL; struct msm_isp_buffer *buf_info = NULL; enum msm_isp_buffer_state state; bufq = msm_isp_get_bufq(buf_mgr, bufq_handle); if (!bufq) { pr_err("Invalid bufq\n"); return -EINVAL; } buf_info = msm_isp_get_buf_ptr(buf_mgr, bufq_handle, buf_index); if (!buf_info) { pr_err("%s: buf not found\n", __func__); return -EINVAL; } spin_lock_irqsave(&bufq->bufq_lock, flags); state = buf_info->state; if (BUF_SRC(bufq->stream_id) == MSM_ISP_BUFFER_SRC_HAL) { if (state == MSM_ISP_BUFFER_STATE_DEQUEUED) { buf_info->state = MSM_ISP_BUFFER_STATE_DISPATCHED; spin_unlock_irqrestore(&bufq->bufq_lock, flags); buf_mgr->vb2_ops->buf_error(buf_info->vb2_v4l2_buf, bufq->session_id, bufq->stream_id, frame_id, tv, output_format); } else { spin_unlock_irqrestore(&bufq->bufq_lock, flags); } goto done; } /* * For native buffer put the diverted buffer back to queue since caller * is not going to send it to CPP, this is error case like * drop_frame/empty_buffer */ if (state == MSM_ISP_BUFFER_STATE_DIVERTED) { buf_info->state = MSM_ISP_BUFFER_STATE_PREPARED; rc = msm_isp_put_buf_unsafe(buf_mgr, buf_info->bufq_handle, buf_info->buf_idx); if (rc < 0) pr_err("%s: Buf put failed\n", __func__); } spin_unlock_irqrestore(&bufq->bufq_lock, flags); done: return rc; } static int msm_isp_buf_done(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id, uint32_t output_format) Loading Loading @@ -1503,6 +1559,7 @@ static struct msm_isp_buf_ops isp_buf_ops = { .buf_mgr_debug = msm_isp_buf_mgr_debug, .get_bufq = msm_isp_get_bufq, .buf_divert = msm_isp_buf_divert, .buf_err = msm_isp_buf_err, }; int msm_isp_create_isp_buf_mgr( Loading drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.h +4 −1 Original line number Diff line number Diff line /* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -180,6 +180,9 @@ struct msm_isp_buf_ops { int (*buf_divert)(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id); int (*buf_err)(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id, uint32_t output_format); }; struct msm_isp_buf_mgr { Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +1 −1 Original line number Diff line number Diff line Loading @@ -3669,7 +3669,7 @@ static int msm_isp_return_empty_buffer(struct vfe_device *vfe_dev, buf->buf_debug.put_state[buf->buf_debug.put_state_last] = MSM_ISP_BUFFER_STATE_DROP_REG; buf->buf_debug.put_state_last ^= 1; rc = vfe_dev->buf_mgr->ops->buf_done(vfe_dev->buf_mgr, rc = vfe_dev->buf_mgr->ops->buf_err(vfe_dev->buf_mgr, buf->bufq_handle, buf->buf_idx, ×tamp.buf_time, frame_id, stream_info->runtime_output_format); Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.c +58 −1 Original line number Diff line number Diff line /* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -755,6 +755,62 @@ static int msm_isp_buf_divert(struct msm_isp_buf_mgr *buf_mgr, return 0; } static int msm_isp_buf_err(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id, uint32_t output_format) { int rc = 0; unsigned long flags; struct msm_isp_bufq *bufq = NULL; struct msm_isp_buffer *buf_info = NULL; enum msm_isp_buffer_state state; bufq = msm_isp_get_bufq(buf_mgr, bufq_handle); if (!bufq) { pr_err("Invalid bufq\n"); return -EINVAL; } buf_info = msm_isp_get_buf_ptr(buf_mgr, bufq_handle, buf_index); if (!buf_info) { pr_err("%s: buf not found\n", __func__); return -EINVAL; } spin_lock_irqsave(&bufq->bufq_lock, flags); state = buf_info->state; if (BUF_SRC(bufq->stream_id) == MSM_ISP_BUFFER_SRC_HAL) { if (state == MSM_ISP_BUFFER_STATE_DEQUEUED) { buf_info->state = MSM_ISP_BUFFER_STATE_DISPATCHED; spin_unlock_irqrestore(&bufq->bufq_lock, flags); buf_mgr->vb2_ops->buf_error(buf_info->vb2_v4l2_buf, bufq->session_id, bufq->stream_id, frame_id, tv, output_format); } else { spin_unlock_irqrestore(&bufq->bufq_lock, flags); } goto done; } /* * For native buffer put the diverted buffer back to queue since caller * is not going to send it to CPP, this is error case like * drop_frame/empty_buffer */ if (state == MSM_ISP_BUFFER_STATE_DIVERTED) { buf_info->state = MSM_ISP_BUFFER_STATE_PREPARED; rc = msm_isp_put_buf_unsafe(buf_mgr, buf_info->bufq_handle, buf_info->buf_idx); if (rc < 0) pr_err("%s: Buf put failed\n", __func__); } spin_unlock_irqrestore(&bufq->bufq_lock, flags); done: return rc; } static int msm_isp_buf_done(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id, uint32_t output_format) Loading Loading @@ -1503,6 +1559,7 @@ static struct msm_isp_buf_ops isp_buf_ops = { .buf_mgr_debug = msm_isp_buf_mgr_debug, .get_bufq = msm_isp_get_bufq, .buf_divert = msm_isp_buf_divert, .buf_err = msm_isp_buf_err, }; int msm_isp_create_isp_buf_mgr( Loading
drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.h +4 −1 Original line number Diff line number Diff line /* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -180,6 +180,9 @@ struct msm_isp_buf_ops { int (*buf_divert)(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id); int (*buf_err)(struct msm_isp_buf_mgr *buf_mgr, uint32_t bufq_handle, uint32_t buf_index, struct timeval *tv, uint32_t frame_id, uint32_t output_format); }; struct msm_isp_buf_mgr { Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +1 −1 Original line number Diff line number Diff line Loading @@ -3669,7 +3669,7 @@ static int msm_isp_return_empty_buffer(struct vfe_device *vfe_dev, buf->buf_debug.put_state[buf->buf_debug.put_state_last] = MSM_ISP_BUFFER_STATE_DROP_REG; buf->buf_debug.put_state_last ^= 1; rc = vfe_dev->buf_mgr->ops->buf_done(vfe_dev->buf_mgr, rc = vfe_dev->buf_mgr->ops->buf_err(vfe_dev->buf_mgr, buf->bufq_handle, buf->buf_idx, ×tamp.buf_time, frame_id, stream_info->runtime_output_format); Loading