mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
media: rockchip: isp: support multiple wrap
Change-Id: Ic0388b6ff7595799164d1872c1303da4107397f2 Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -1155,12 +1155,8 @@ static int rkisp_set_wrap_line(struct rkisp_stream *stream, struct rkisp_wrap_in
|
||||
{
|
||||
struct rkisp_device *dev = stream->ispdev;
|
||||
|
||||
if (dev->isp_ver != ISP_V32 ||
|
||||
dev->hw_dev->dev_link_num > 1 ||
|
||||
!stream->ops->set_wrap ||
|
||||
dev->hw_dev->unite) {
|
||||
v4l2_err(&dev->v4l2_dev,
|
||||
"wrap only support for single sensor and mainpath\n");
|
||||
if (!stream->ops->set_wrap) {
|
||||
v4l2_err(&dev->v4l2_dev, "no support wrap\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
dev->cap_dev.wrap_width = arg->width;
|
||||
|
||||
@@ -1364,11 +1364,6 @@ static int mi_frame_start(struct rkisp_stream *stream, u32 mis)
|
||||
unsigned long lock_flags = 0;
|
||||
u32 val;
|
||||
|
||||
if (stream->streaming && dev->isp_ver == ISP_V32) {
|
||||
rkisp_rockit_buf_done(stream, ROCKIT_DVBM_START);
|
||||
rkisp_rockit_ctrl_fps(stream);
|
||||
}
|
||||
|
||||
/* readback start to update stream buf if null */
|
||||
spin_lock_irqsave(&stream->vbq_lock, lock_flags);
|
||||
if (stream->streaming) {
|
||||
|
||||
@@ -30,7 +30,7 @@ void rkisp_rockit_buf_state_clear(struct rkisp_stream *stream);
|
||||
int rkisp_rockit_buf_free(struct rkisp_stream *stream);
|
||||
void rkisp_rockit_dev_init(struct rkisp_device *dev);
|
||||
void rkisp_rockit_dev_deinit(void);
|
||||
bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream);
|
||||
void rkisp_rockit_frame_start(struct rkisp_device *dev);
|
||||
int rkisp_rockit_fps_set(int *dst_fps, struct rkisp_stream *stream);
|
||||
int rkisp_rockit_fps_get(int *dst_fps, struct rkisp_stream *stream);
|
||||
int rkisp_rockit_buf_done(struct rkisp_stream *stream, int cmd);
|
||||
@@ -44,7 +44,7 @@ static inline void rkisp_rockit_buf_state_clear(struct rkisp_stream *stream) { r
|
||||
static inline int rkisp_rockit_buf_free(struct rkisp_stream *stream) { return -EINVAL; }
|
||||
static inline void rkisp_rockit_dev_init(struct rkisp_device *dev) { return; }
|
||||
static inline void rkisp_rockit_dev_deinit(void) {}
|
||||
static inline bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream) { return false; }
|
||||
static inline void rkisp_rockit_frame_start(struct rkisp_device *dev) {}
|
||||
static inline int rkisp_rockit_fps_set(int *dst_fps, struct rkisp_stream *stream) { return -EINVAL; }
|
||||
static inline int rkisp_rockit_fps_get(int *dst_fps, struct rkisp_stream *stream) { return -EINVAL; }
|
||||
static inline int rkisp_rockit_buf_done(struct rkisp_stream *stream, int cmd) { return -EINVAL; }
|
||||
|
||||
@@ -598,7 +598,7 @@ int rkisp_rockit_fps_get(int *dst_fps, struct rkisp_stream *stream)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream)
|
||||
static bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream)
|
||||
{
|
||||
struct rkisp_device *dev = stream->ispdev;
|
||||
struct rkisp_sensor_info *sensor = NULL;
|
||||
@@ -676,6 +676,25 @@ bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream)
|
||||
return true;
|
||||
}
|
||||
|
||||
void rkisp_rockit_frame_start(struct rkisp_device *dev)
|
||||
{
|
||||
struct rkisp_stream *stream;
|
||||
int i;
|
||||
|
||||
if (rockit_cfg == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < RKISP_MAX_STREAM; i++) {
|
||||
if (i == RKISP_STREAM_VIR || i == RKISP_STREAM_LUMA)
|
||||
continue;
|
||||
stream = &dev->cap_dev.stream[i];
|
||||
if (!stream->streaming)
|
||||
continue;
|
||||
rkisp_rockit_buf_done(stream, ROCKIT_DVBM_START);
|
||||
rkisp_rockit_ctrl_fps(stream);
|
||||
}
|
||||
}
|
||||
|
||||
void *rkisp_rockit_function_register(void *function, int cmd)
|
||||
{
|
||||
if (rockit_cfg == NULL) {
|
||||
|
||||
@@ -724,6 +724,8 @@ void rkisp_trigger_read_back(struct rkisp_device *dev, u8 dma2frm, u32 mode, boo
|
||||
params_vdev->rdbk_times = dma2frm + 1;
|
||||
|
||||
run_next:
|
||||
if (!dev->sw_rd_cnt)
|
||||
rkisp_rockit_frame_start(dev);
|
||||
rkisp_params_cfgsram(params_vdev, true);
|
||||
stats_vdev->rdbk_drop = false;
|
||||
if (dev->is_frame_double) {
|
||||
@@ -4191,6 +4193,7 @@ void rkisp_isp_isr(unsigned int isp_mis,
|
||||
dev->isp_sdev.frm_timestamp = rkisp_time_get_ns(dev);
|
||||
rkisp_isp_queue_event_sof(&dev->isp_sdev);
|
||||
rkisp_stream_frame_start(dev, isp_mis);
|
||||
rkisp_rockit_frame_start(dev);
|
||||
}
|
||||
vs_skip:
|
||||
writel(CIF_ISP_V_START, base + CIF_ISP_ICR);
|
||||
@@ -4345,6 +4348,7 @@ vs_skip:
|
||||
dev->isp_sdev.frm_timestamp = rkisp_time_get_ns(dev);
|
||||
rkisp_isp_queue_event_sof(&dev->isp_sdev);
|
||||
rkisp_stream_frame_start(dev, isp_mis);
|
||||
rkisp_rockit_frame_start(dev);
|
||||
}
|
||||
|
||||
if (isp_mis & ISP3X_OUT_FRM_QUARTER) {
|
||||
|
||||
Reference in New Issue
Block a user