mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
media: rockchip: isp1: fix clk gate but isp working
power on->isp start->restart...->power off isp reset will set clk config to default value, if isp restart clk isn't to reconfigure. Change-Id: I2b5ef9883c8ca5e9e142270d935f300395b0ea74 Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -218,6 +218,30 @@ u32 rkisp1_mbus_pixelcode_to_v4l2(u32 pixelcode)
|
||||
|
||||
/**************** register operations ****************/
|
||||
|
||||
static void rkisp1_config_clk(struct rkisp1_device *dev, int on)
|
||||
{
|
||||
u32 val = !on ? 0 :
|
||||
CIF_ICCL_ISP_CLK | CIF_ICCL_CP_CLK | CIF_ICCL_MRSZ_CLK |
|
||||
CIF_ICCL_SRSZ_CLK | CIF_ICCL_JPEG_CLK | CIF_ICCL_MI_CLK |
|
||||
CIF_ICCL_IE_CLK | CIF_ICCL_MIPI_CLK | CIF_ICCL_DCROP_CLK;
|
||||
|
||||
writel(val, dev->base_addr + CIF_ICCL);
|
||||
|
||||
#if RKISP1_RK3326_USE_OLDMIPI
|
||||
if (dev->isp_ver == ISP_V13) {
|
||||
#else
|
||||
if (dev->isp_ver == ISP_V12 || dev->isp_ver == ISP_V13) {
|
||||
#endif
|
||||
val = !on ? 0 :
|
||||
CIF_CLK_CTRL_MI_Y12 | CIF_CLK_CTRL_MI_SP |
|
||||
CIF_CLK_CTRL_MI_RAW0 | CIF_CLK_CTRL_MI_RAW1 |
|
||||
CIF_CLK_CTRL_MI_READ | CIF_CLK_CTRL_MI_RAWRD |
|
||||
CIF_CLK_CTRL_CP | CIF_CLK_CTRL_IE;
|
||||
|
||||
writel(val, dev->base_addr + CIF_VI_ISP_CLK_CTRL_V12);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Image Stabilization.
|
||||
* This should only be called when configuring CIF
|
||||
@@ -761,6 +785,8 @@ static int rkisp1_isp_stop(struct rkisp1_device *dev)
|
||||
writel(0, base + CIF_ISP_CSI0_MASK2);
|
||||
writel(0, base + CIF_ISP_CSI0_MASK3);
|
||||
}
|
||||
|
||||
rkisp1_config_clk(dev, true);
|
||||
dev->isp_state = ISP_STOP;
|
||||
|
||||
if (dev->emd_vc <= CIF_ISP_ADD_DATA_VC_MAX) {
|
||||
@@ -835,27 +861,6 @@ static int rkisp1_isp_start(struct rkisp1_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rkisp1_config_clk(struct rkisp1_device *dev)
|
||||
{
|
||||
u32 val = CIF_ICCL_ISP_CLK | CIF_ICCL_CP_CLK | CIF_ICCL_MRSZ_CLK |
|
||||
CIF_ICCL_SRSZ_CLK | CIF_ICCL_JPEG_CLK | CIF_ICCL_MI_CLK |
|
||||
CIF_ICCL_IE_CLK | CIF_ICCL_MIPI_CLK | CIF_ICCL_DCROP_CLK;
|
||||
|
||||
writel(val, dev->base_addr + CIF_ICCL);
|
||||
|
||||
#if RKISP1_RK3326_USE_OLDMIPI
|
||||
if (dev->isp_ver == ISP_V13) {
|
||||
#else
|
||||
if (dev->isp_ver == ISP_V12 || dev->isp_ver == ISP_V13) {
|
||||
#endif
|
||||
val = CIF_CLK_CTRL_MI_Y12 | CIF_CLK_CTRL_MI_SP |
|
||||
CIF_CLK_CTRL_MI_RAW0 | CIF_CLK_CTRL_MI_RAW1 |
|
||||
CIF_CLK_CTRL_MI_READ | CIF_CLK_CTRL_MI_RAWRD |
|
||||
CIF_CLK_CTRL_CP | CIF_CLK_CTRL_IE;
|
||||
writel(val, dev->base_addr + CIF_VI_ISP_CLK_CTRL_V12);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************** isp sub-devs *******************************/
|
||||
|
||||
static const struct ispsd_in_fmt rkisp1_isp_input_formats[] = {
|
||||
@@ -1434,7 +1439,7 @@ static int rkisp1_isp_sd_s_power(struct v4l2_subdev *sd, int on)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
rkisp1_config_clk(isp_dev);
|
||||
rkisp1_config_clk(isp_dev, on);
|
||||
if (isp_dev->isp_ver == ISP_V12 ||
|
||||
isp_dev->isp_ver == ISP_V13) {
|
||||
/* disable csi_rx interrupt */
|
||||
@@ -1444,6 +1449,7 @@ static int rkisp1_isp_sd_s_power(struct v4l2_subdev *sd, int on)
|
||||
writel(0, base + CIF_ISP_CSI0_MASK3);
|
||||
}
|
||||
} else {
|
||||
rkisp1_config_clk(isp_dev, on);
|
||||
ret = pm_runtime_put(isp_dev->dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user