diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi index 5e906fa3b980..10fbfbeb5639 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi @@ -5199,7 +5199,7 @@ hdptxphy_hdmi: hdmiphy@2b000000 { compatible = "rockchip,rk3576-hdptx-phy-hdmi", "rockchip,rk3588-hdptx-phy-hdmi"; reg = <0x0 0x2b000000 0x0 0x2000>; - clocks = <&cru CLK_PHY_REF_SRC>, <&cru PCLK_PMUPHY_ROOT>; + clocks = <&cru CLK_PHY_REF_SRC>, <&cru PCLK_HDPTX_APB>; clock-names = "ref", "apb"; clock-output-names = "clk_hdmiphy_pixel0"; #clock-cells = <0>; diff --git a/drivers/clk/rockchip/clk-rk3576.c b/drivers/clk/rockchip/clk-rk3576.c index abbbab4df754..cfc52555ce8f 100644 --- a/drivers/clk/rockchip/clk-rk3576.c +++ b/drivers/clk/rockchip/clk-rk3576.c @@ -1594,6 +1594,8 @@ static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = { RK3576_PMU_CLKGATE_CON(4), 2, GFLAGS), GATE(PCLK_PMUPHY_ROOT, "pclk_pmuphy_root", "pclk_pmu1_root", CLK_IS_CRITICAL, RK3576_PMU_CLKGATE_CON(5), 0, GFLAGS), + GATE(PCLK_HDPTX_APB, "pclk_hdptx_apb", "pclk_pmuphy_root", 0, + RK3576_PMU_CLKGATE_CON(0), 1, GFLAGS), GATE(PCLK_MIPI_DCPHY, "pclk_mipi_dcphy", "pclk_pmuphy_root", 0, RK3576_PMU_CLKGATE_CON(0), 2, GFLAGS), GATE(PCLK_CSIDPHY, "pclk_csidphy", "pclk_pmuphy_root", 0, diff --git a/drivers/media/platform/rockchip/isp/capture_v39.c b/drivers/media/platform/rockchip/isp/capture_v39.c index 442ccd28039d..1ed0b0a11ac7 100644 --- a/drivers/media/platform/rockchip/isp/capture_v39.c +++ b/drivers/media/platform/rockchip/isp/capture_v39.c @@ -1814,7 +1814,13 @@ end: void rkisp_stream_ldc_end_v39(struct rkisp_device *dev) { struct rkisp_stream *stream = &dev->cap_dev.stream[RKISP_STREAM_LDC]; + u32 val = rkisp_read(dev, ISP39_LDCV_CTRL, true); + /* ldcv_irq: ldcv enable is frame end other frame input */ + if (val & ISP39_LDCV_MAP_ERROR) { + v4l2_err(&dev->v4l2_dev, "ldcv map data error\n"); + return; + } if (stream->stopping) { if (!dev->hw_dev->is_single) { stream->stopping = false; @@ -1826,7 +1832,7 @@ void rkisp_stream_ldc_end_v39(struct rkisp_device *dev) stream->streaming = false; wake_up(&stream->done); } - } else { + } else if (stream->streaming) { mi_frame_end(stream, FRAME_IRQ); } rkisp_check_idle(dev, ISP_FRAME_LDC); diff --git a/drivers/media/platform/rockchip/isp/regs_v3x.h b/drivers/media/platform/rockchip/isp/regs_v3x.h index 31f023918c2f..3ad0ae284b7c 100644 --- a/drivers/media/platform/rockchip/isp/regs_v3x.h +++ b/drivers/media/platform/rockchip/isp/regs_v3x.h @@ -2533,6 +2533,8 @@ #define ISP39_LDCV_UV_SWAP BIT(4) #define ISP39_LDCV_LUT_MODE(x) ((x & 0x3) << 24) #define ISP39_LDCV_FORCE_UPD BIT(26) +#define ISP39_LDCV_MAP_ERROR BIT(28) +#define ISP39_LDCV_WORKING BIT(30) #define ISP39_LDCV_EN_SHD BIT(31) /* mi interrupt */ diff --git a/include/dt-bindings/clock/rockchip,rk3576-cru.h b/include/dt-bindings/clock/rockchip,rk3576-cru.h index 4d262a77aa1f..19d25f082dc5 100644 --- a/include/dt-bindings/clock/rockchip,rk3576-cru.h +++ b/include/dt-bindings/clock/rockchip,rk3576-cru.h @@ -557,6 +557,7 @@ #define CLK_AUDIO_FRAC_1_SRC 555 #define CLK_AUDIO_FRAC_2_SRC 556 #define CLK_AUDIO_FRAC_3_SRC 557 +#define PCLK_HDPTX_APB 558 /* secure clk */ #define CLK_STIMER0_ROOT 600