Merge commit '6e8cfc3b5519953ede64e2819ba15327f4fa9e16'

* commit '6e8cfc3b5519953ede64e2819ba15327f4fa9e16':
  arm64: dts: rockchip: rk3588-evb: enabled rkvtunnel
  arm64: dts: rockchip: rk3588: add rkvtunnel
  arm64: configs: rockchip: add CONFIG_ROCKCHIP_VIDEO_TUNNEL
  media: rockchip: isp: add mode for rv1106 suspend without rtt

Change-Id: Ic3a735be43a31c08333687213952ed3dfb8f9a92
This commit is contained in:
Tao Huang
2023-12-04 20:28:53 +08:00
7 changed files with 28 additions and 6 deletions

View File

@@ -1080,6 +1080,10 @@
status = "okay";
};
&rkvtunnel {
status = "okay";
};
&rockchip_suspend {
status = "okay";
rockchip,sleep-debug-en = <1>;

View File

@@ -2164,6 +2164,11 @@
status = "disabled";
};
rkvtunnel: rkvtunnel {
compatible = "rockchip,video-tunnel";
status = "disabled";
};
rockchip_suspend: rockchip-suspend {
compatible = "rockchip,pm-rk3588";
status = "disabled";

View File

@@ -686,6 +686,7 @@ CONFIG_ROCKCHIP_MPP_IEP2=y
CONFIG_ROCKCHIP_MPP_JPGDEC=y
CONFIG_ROCKCHIP_MPP_AV1DEC=y
CONFIG_ROCKCHIP_MPP_VDPP=y
CONFIG_ROCKCHIP_VIDEO_TUNNEL=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_DYNAMIC_MINORS=y

View File

@@ -1058,11 +1058,6 @@ static int rkisp_pm_prepare(struct device *dev)
if (!hw->is_idle && hw->cur_dev_id == isp_dev->dev_id)
isp_dev->suspend_sync = true;
spin_unlock_irqrestore(&hw->rdbk_lock, lock_flags);
} else {
/* wait one frame for online */
isp_dev->suspend_sync = true;
if (hw->isp_size[isp_dev->dev_id].fps)
time = 1000 / hw->isp_size[isp_dev->dev_id].fps;
}
if (isp_dev->suspend_sync) {
@@ -1084,6 +1079,7 @@ static void rkisp_pm_complete(struct device *dev)
struct rkisp_pipeline *p = &isp_dev->pipe;
struct rkisp_stream *stream;
int i, on = 1, rd_mode = isp_dev->rd_mode;
u32 val;
if (isp_dev->isp_state & ISP_STOP) {
if (pm_runtime_active(dev) &&
@@ -1156,10 +1152,20 @@ static void rkisp_pm_complete(struct device *dev)
isp_dev->is_suspend = false;
isp_dev->isp_state = ISP_START | ISP_FRAME_END;
if (isp_dev->is_suspend_one_frame)
isp_dev->is_first_double = true;
if (hw->isp_ver > ISP_V20) {
val = ISP3X_YNR_FST_FRAME | ISP3X_CNR_FST_FRAME |
ISP3X_DHAZ_FST_FRAME | ISP3X_ADRC_FST_FRAME;
if (hw->isp_ver == ISP_V32)
val |= ISP32_SHP_FST_FRAME;
rkisp_unite_set_bits(isp_dev, ISP3X_ISP_CTRL1, 0, val, false);
}
for (i = 0; i < RKISP_MAX_STREAM; i++) {
stream = &isp_dev->cap_dev.stream[i];
if (i == RKISP_STREAM_VIR || !stream->streaming || !stream->curr_buf)
continue;
/* skip first frame due to hw no reference frame information */
stream->skip_frame = 1;
}
if (hw->cur_dev_id == isp_dev->dev_id)

View File

@@ -278,6 +278,7 @@ struct rkisp_device {
bool is_frame_double;
bool is_suspend;
bool suspend_sync;
bool is_suspend_one_frame;
struct rkisp_vicap_input vicap_in;

View File

@@ -35,6 +35,7 @@ enum rkisp_vicap_link {
RKISP_VICAP_ONLINE,
RKISP_VICAP_RDBK_AIQ,
RKISP_VICAP_RDBK_AUTO,
RKISP_VICAP_RDBK_AUTO_ONE_FRAME,
};
struct rkisp_vicap_mode {

View File

@@ -3394,6 +3394,7 @@ static int rkisp_set_work_mode_by_vicap(struct rkisp_device *isp_dev,
struct rkisp_hw_dev *hw = isp_dev->hw_dev;
int rd_mode = isp_dev->rd_mode;
isp_dev->is_suspend_one_frame = false;
if (vicap_mode->rdbk_mode == RKISP_VICAP_ONLINE) {
if (!hw->is_single)
return -EINVAL;
@@ -3408,7 +3409,8 @@ static int rkisp_set_work_mode_by_vicap(struct rkisp_device *isp_dev,
default:
isp_dev->rd_mode = HDR_NORMAL;
}
} else if (vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO) {
} else if (vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO ||
vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO_ONE_FRAME) {
/* switch to readback mode */
switch (rd_mode) {
case HDR_LINEX3_DDR:
@@ -3420,6 +3422,8 @@ static int rkisp_set_work_mode_by_vicap(struct rkisp_device *isp_dev,
default:
isp_dev->rd_mode = HDR_RDBK_FRAME1;
}
if (vicap_mode->rdbk_mode == RKISP_VICAP_RDBK_AUTO_ONE_FRAME)
isp_dev->is_suspend_one_frame = true;
} else {
return -EINVAL;
}