diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index f5631dc561f4a957cf11b0f8af292133a347d728..bbc8e9525ec688c9512f1f75508504d6c2f34a22 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -12043,16 +12043,29 @@ unsigned int rkcif_irq_global(struct rkcif_device *cif_dev) else return intstat_glb; - /* VICAP_GLB_INTST frame_end_toisp (all channels on both ISPs), see TRM1 page 2085-2086 */ - if (intstat_glb & GENMASK(25,20)) { - int val = gpiod_get_value(cif_dev->hw_dev->frame_end_gpio); - gpiod_set_value(cif_dev->hw_dev->frame_end_gpio, !val); + /* VICAP_GLB_INTST frame_end_toisp1_chX (all channels on ISP1), see TRM1 page 2085-2086 */ + if (intstat_glb & GENMASK(25,23)) { + int val = gpiod_get_value(cif_dev->hw_dev->isp0_frame_end_gpio); + gpiod_set_value(cif_dev->hw_dev->isp0_frame_end_gpio, !val); } - /* VICAP_GLB_INTST frame_start_toisp (all channels on both ISPs), see TRM1 page 2085-2086 */ - if (intstat_glb & GENMASK(19,14)) { - int val = gpiod_get_value(cif_dev->hw_dev->frame_start_gpio); - gpiod_set_value(cif_dev->hw_dev->frame_start_gpio, !val); + /* VICAP_GLB_INTST frame_end_toisp0_chX (all channels on ISP0), see TRM1 page 2085-2086 */ + if (intstat_glb & GENMASK(22,20)) { + int val = gpiod_get_value(cif_dev->hw_dev->isp0_frame_end_gpio); + gpiod_set_value(cif_dev->hw_dev->isp0_frame_end_gpio, !val); + } + + /* VICAP_GLB_INTST frame_start_toisp1_chX (all channels on ISP1), see TRM1 page 2085-2086 */ + if (intstat_glb & GENMASK(19,17)) { + int val = gpiod_get_value(cif_dev->hw_dev->isp0_frame_start_gpio); + gpiod_set_value(cif_dev->hw_dev->isp0_frame_start_gpio, !val); + } + + + /* VICAP_GLB_INTST frame_start_toisp0_chX (all channels on ISP0), see TRM1 page 2085-2086 */ + if (intstat_glb & GENMASK(16,14)) { + int val = gpiod_get_value(cif_dev->hw_dev->isp0_frame_start_gpio); + gpiod_set_value(cif_dev->hw_dev->isp0_frame_start_gpio, !val); } if (intstat_glb & SCALE_TOISP_AXI0_ERR) { diff --git a/drivers/media/platform/rockchip/cif/hw.c b/drivers/media/platform/rockchip/cif/hw.c index 4c0937c9a62ccfb2c0c90b035138e2bd23e4f5eb..840f619690e647fb01185b1e5dda47a510eb62b3 100644 --- a/drivers/media/platform/rockchip/cif/hw.c +++ b/drivers/media/platform/rockchip/cif/hw.c @@ -1473,12 +1473,18 @@ static int rkcif_plat_hw_probe(struct platform_device *pdev) if (irq < 0) return irq; - cif_hw->frame_start_gpio = gpiod_get_optional(dev, "frame-start-notify", GPIOD_OUT_LOW); - if (IS_ERR(cif_hw->frame_start_gpio)) - return dev_err_probe(dev, PTR_ERR(cif_hw->frame_start_gpio), "failed to get frame start notify GPIO"); - cif_hw->frame_end_gpio = gpiod_get_optional(dev, "frame-end-notify", GPIOD_OUT_LOW); - if (IS_ERR(cif_hw->frame_end_gpio)) - return dev_err_probe(dev, PTR_ERR(cif_hw->frame_end_gpio), "failed to get frame end notify GPIO"); + cif_hw->isp0_frame_start_gpio = gpiod_get_optional(dev, "isp0-frame-start-notify", GPIOD_OUT_LOW); + if (IS_ERR(cif_hw->isp0_frame_start_gpio)) + return dev_err_probe(dev, PTR_ERR(cif_hw->isp0_frame_start_gpio), "failed to get frame start notify GPIO"); + cif_hw->isp0_frame_end_gpio = gpiod_get_optional(dev, "isp0-frame-end-notify", GPIOD_OUT_LOW); + if (IS_ERR(cif_hw->isp0_frame_end_gpio)) + return dev_err_probe(dev, PTR_ERR(cif_hw->isp0_frame_end_gpio), "failed to get frame end notify GPIO"); + cif_hw->isp1_frame_start_gpio = gpiod_get_optional(dev, "isp1-frame-start-notify", GPIOD_OUT_LOW); + if (IS_ERR(cif_hw->isp1_frame_start_gpio)) + return dev_err_probe(dev, PTR_ERR(cif_hw->isp1_frame_start_gpio), "failed to get frame start notify GPIO"); + cif_hw->isp1_frame_end_gpio = gpiod_get_optional(dev, "isp1-frame-end-notify", GPIOD_OUT_LOW); + if (IS_ERR(cif_hw->isp1_frame_end_gpio)) + return dev_err_probe(dev, PTR_ERR(cif_hw->isp1_frame_end_gpio), "failed to get frame end notify GPIO"); ret = devm_request_irq(dev, irq, rkcif_irq_handler, IRQF_SHARED, diff --git a/drivers/media/platform/rockchip/cif/hw.h b/drivers/media/platform/rockchip/cif/hw.h index 04dcd24fbff9b9e41db18ad24fdb046d390cece9..95a1a2c579e8109b845c3c7847f1ce4403a67f88 100644 --- a/drivers/media/platform/rockchip/cif/hw.h +++ b/drivers/media/platform/rockchip/cif/hw.h @@ -154,8 +154,10 @@ struct rkcif_hw { bool adapt_to_usbcamerahal; u64 irq_time; bool is_rk3588s2; - struct gpio_desc *frame_start_gpio; - struct gpio_desc *frame_end_gpio; + struct gpio_desc *isp0_frame_start_gpio; + struct gpio_desc *isp0_frame_end_gpio; + struct gpio_desc *isp1_frame_start_gpio; + struct gpio_desc *isp1_frame_end_gpio; }; void rkcif_hw_soft_reset(struct rkcif_hw *cif_hw, bool is_rst_iommu);