From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Wed, 03 Jan 2024 09:43:39 +0000 Subject: [PATCH] update kernel to 5.10.198 --- kernel/drivers/media/platform/rockchip/cif/mipi-csi2.c | 33 ++++++++++++++++++++++++++------- 1 files changed, 26 insertions(+), 7 deletions(-) diff --git a/kernel/drivers/media/platform/rockchip/cif/mipi-csi2.c b/kernel/drivers/media/platform/rockchip/cif/mipi-csi2.c index f526b43..57d8166 100644 --- a/kernel/drivers/media/platform/rockchip/cif/mipi-csi2.c +++ b/kernel/drivers/media/platform/rockchip/cif/mipi-csi2.c @@ -141,7 +141,7 @@ break; default: v4l2_warn(&csi2->sd, "lane num is invalid\n"); - csi2->bus.num_data_lanes = 0; + csi2->bus.num_data_lanes = 4; break; } @@ -252,6 +252,8 @@ v4l2_err(&csi2->sd, "%s: enable clks failed\n", __func__); return ret; } + enable_irq(csi2->csi2_hw[csi_idx]->irq1); + enable_irq(csi2->csi2_hw[csi_idx]->irq2); csi2_enable(csi2->csi2_hw[csi_idx], host_type); } @@ -269,6 +271,8 @@ err_assert_reset: for (i = 0; i < csi2->csi_info.csi_num; i++) { csi_idx = csi2->csi_info.csi_idx[i]; + disable_irq(csi2->csi2_hw[csi_idx]->irq1); + disable_irq(csi2->csi2_hw[csi_idx]->irq2); csi2_disable(csi2->csi2_hw[csi_idx]); csi2_disable_clks(csi2->csi2_hw[csi_idx]); } @@ -286,6 +290,8 @@ for (i = 0; i < csi2->csi_info.csi_num; i++) { csi_idx = csi2->csi_info.csi_idx[i]; + disable_irq(csi2->csi2_hw[csi_idx]->irq1); + disable_irq(csi2->csi2_hw[csi_idx]->irq2); csi2_disable(csi2->csi2_hw[csi_idx]); csi2_hw_do_reset(csi2->csi2_hw[csi_idx]); csi2_disable_clks(csi2->csi2_hw[csi_idx]); @@ -399,6 +405,7 @@ csi2->crop.left = 0; csi2->crop.width = RKCIF_DEFAULT_WIDTH; csi2->crop.height = RKCIF_DEFAULT_HEIGHT; + csi2->bus.num_data_lanes = 4; return media_entity_pads_init(&sd->entity, num_pads, csi2->pad); } @@ -664,15 +671,10 @@ struct v4l2_fwnode_endpoint *vep, struct v4l2_async_subdev *asd) { - struct v4l2_subdev *sd = dev_get_drvdata(dev); - struct csi2_dev *csi2 = sd_to_dev(sd); - if (vep->base.port != 0) { dev_err(dev, "The csi host node needs to parse port 0\n"); return -EINVAL; } - - csi2->bus = vep->bus.mipi_csi2; return 0; } @@ -777,7 +779,7 @@ { struct device *dev = ctx; struct csi2_hw *csi2_hw = dev_get_drvdata(dev); - struct csi2_dev *csi2 = csi2_hw->csi2; + struct csi2_dev *csi2 = NULL; struct csi2_err_stats *err_list = NULL; unsigned long err_stat = 0; u32 val; @@ -786,6 +788,16 @@ char vc_info[CSI_VCINFO_LEN] = {0}; bool is_add_cnt = false; + if (!csi2_hw) { + disable_irq_nosync(irq); + return IRQ_HANDLED; + } + + csi2 = csi2_hw->csi2; + if (!csi2) { + disable_irq_nosync(irq); + return IRQ_HANDLED; + } val = read_csihost_reg(csi2_hw->base, CSIHOST_ERR1); if (val) { if (val & CSIHOST_ERR1_PHYERR_SPTSYNCHS) { @@ -885,6 +897,11 @@ char cur_str[CSI_ERRSTR_LEN] = {0}; char err_str[CSI_ERRSTR_LEN] = {0}; char vc_info[CSI_VCINFO_LEN] = {0}; + + if (!csi2_hw) { + disable_irq_nosync(irq); + return IRQ_HANDLED; + } val = read_csihost_reg(csi2_hw->base, CSIHOST_ERR2); if (val) { @@ -1262,6 +1279,7 @@ irq = platform_get_irq_byname(pdev, "csi-intr1"); if (irq > 0) { + irq_set_status_flags(irq, IRQ_NOAUTOEN); ret = devm_request_irq(&pdev->dev, irq, rk_csirx_irq1_handler, 0, dev_driver_string(&pdev->dev), @@ -1276,6 +1294,7 @@ irq = platform_get_irq_byname(pdev, "csi-intr2"); if (irq > 0) { + irq_set_status_flags(irq, IRQ_NOAUTOEN); ret = devm_request_irq(&pdev->dev, irq, rk_csirx_irq2_handler, 0, dev_driver_string(&pdev->dev), -- Gitblit v1.6.2