From: Paul Elder <paul.elder@ideasonboard.com> To: linux-media@vger.kernel.org Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>, dafna@fastmail.com, heiko@sntech.de, jeanmichel.hautbois@ideasonboard.com, jacopo@jmondi.org, djrscally@gmail.com, helen.koike@collabora.com, linux-rockchip@lists.infradead.org Subject: [PATCH 49/55] media: rkisp1: Configure gasket on i.MX8MP Date: Wed, 15 Jun 2022 04:11:21 +0900 [thread overview] Message-ID: <20220614191127.3420492-50-paul.elder@ideasonboard.com> (raw) In-Reply-To: <20220614191127.3420492-1-paul.elder@ideasonboard.com> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> The i.MX8MP has a gasket between the CSI-2 receiver and the ISP. Configure and enable it when starting the ISP, and disable it when stopping. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- .../platform/rockchip/rkisp1/rkisp1-common.h | 5 + .../platform/rockchip/rkisp1/rkisp1-dev.c | 16 +++ .../platform/rockchip/rkisp1/rkisp1-isp.c | 128 +++++++++++++++++- 3 files changed, 147 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h index eccdd3f9bc89..667fca0fef95 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h @@ -24,6 +24,7 @@ #include "rkisp1-regs.h" struct dentry; +struct regmap; /* * flags on the 'direction' field in struct rkisp1_mbus_info' that indicate @@ -451,6 +452,8 @@ struct rkisp1_debug { * @dev: a pointer to the struct device * @clk_size: number of clocks * @clks: array of clocks + * @gasket: the gasket - i.MX8MP only + * @gasket_id: the gasket ID (0 or 1) - i.MX8MP only * @v4l2_dev: v4l2_device variable * @media_dev: media_device variable * @notifier: a notifier to register on the v4l2-async API to be notified on the sensor @@ -471,6 +474,8 @@ struct rkisp1_device { struct device *dev; unsigned int clk_size; struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK]; + struct regmap *gasket; + unsigned int gasket_id; struct v4l2_device v4l2_dev; struct media_device media_dev; struct v4l2_async_notifier notifier; diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c index 3a0115bdcee5..a4496ee2e9b4 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c @@ -10,6 +10,7 @@ #include <linux/clk.h> #include <linux/interrupt.h> +#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_graph.h> @@ -569,6 +570,21 @@ static int rkisp1_probe(struct platform_device *pdev) return ret; rkisp1->clk_size = info->clk_size; + if (info->isp_ver == IMX8MP_V10) { + unsigned int id; + + rkisp1->gasket = syscon_regmap_lookup_by_phandle_args(dev->of_node, + "fsl,blk-ctrl", + 1, &id); + if (IS_ERR(rkisp1->gasket)) { + ret = PTR_ERR(rkisp1->gasket); + dev_err(dev, "failed to get gasket: %d\n", ret); + return ret; + } + + rkisp1->gasket_id = id; + } + pm_runtime_enable(&pdev->dev); ret = pm_runtime_resume_and_get(&pdev->dev); diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c index 8268331faca9..ddad36ab4389 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c @@ -10,6 +10,7 @@ #include <linux/iopoll.h> #include <linux/pm_runtime.h> +#include <linux/regmap.h> #include <linux/videodev2.h> #include <linux/vmalloc.h> @@ -87,6 +88,115 @@ rkisp1_isp_get_pad_crop(struct rkisp1_isp *isp, return v4l2_subdev_get_try_crop(&isp->sd, &state, pad); } +/* ----------------------------------------------------------------------------- + * Media block control (i.MX8MP only) + */ + +#define ISP_DEWARP_CONTROL 0x0138 + +#define ISP_DEWARP_CONTROL_MIPI_CSI2_HS_POLARITY BIT(22) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_RISING (0 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_NEGATIVE (1 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_POSITIVE (2 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_FALLING (3 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_MASK GENMASK(21, 20) +#define ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE BIT(19) +#define ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE(dt) ((dt) << 13) +#define ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE_MASK GENMASK(18, 13) + +#define ISP_DEWARP_CONTROL_MIPI_CSI1_HS_POLARITY BIT(12) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_RISING (0 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_NEGATIVE (1 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_POSITIVE (2 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_FALLING (3 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_MASK GENMASK(11, 10) +#define ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE BIT(9) +#define ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE(dt) ((dt) << 3) +#define ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE_MASK GENMASK(8, 3) + +#define ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE BIT(1) +#define ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE BIT(0) + +static int rkisp1_gasket_enable(struct rkisp1_device *rkisp1, + struct media_pad *source) +{ + struct v4l2_subdev *source_sd; + struct v4l2_mbus_frame_desc fd; + unsigned int dt; + u32 mask; + u32 val; + int ret; + + /* + * Configure and enable the gasket with the CSI-2 data type. Set the + * vsync polarity as active high, as that is what the ISP is configured + * to expect in ISP_ACQ_PROP. Enable left justification, as the i.MX8MP + * ISP has a 16-bit wide input and expects data to be left-aligned. + */ + + source_sd = media_entity_to_v4l2_subdev(source->entity); + ret = v4l2_subdev_call(source_sd, pad, get_frame_desc, + source->index, &fd); + if (ret) { + dev_err(rkisp1->dev, + "failed to get frame descriptor from '%s':%u: %d\n", + source_sd->name, 0, ret); + return ret; + } + + if (fd.num_entries != 1) { + dev_err(rkisp1->dev, "invalid frame descriptor for '%s':%u\n", + source_sd->name, 0); + return -EINVAL; + } + + dt = fd.entry[0].bus.csi2.dt; + + if (rkisp1->gasket_id == 0) { + mask = ISP_DEWARP_CONTROL_MIPI_CSI1_HS_POLARITY + | ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_MASK + | ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE; + val = ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_POSITIVE + | ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE(dt); + } else { + mask = ISP_DEWARP_CONTROL_MIPI_CSI2_HS_POLARITY + | ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_MASK + | ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE; + val = ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_POSITIVE + | ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE(dt); + } + + regmap_update_bits(rkisp1->gasket, ISP_DEWARP_CONTROL, mask, val); + + return 0; +} + +static void rkisp1_gasket_disable(struct rkisp1_device *rkisp1) +{ + u32 mask; + u32 val; + + if (rkisp1->gasket_id == 1) { + mask = ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE; + val = ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE; + } else { + mask = ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE; + val = ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE; + } + + regmap_update_bits(rkisp1->gasket, ISP_DEWARP_CONTROL, mask, val); +} + /* ---------------------------------------------------------------------------- * Camera Interface registers configurations */ @@ -303,6 +413,9 @@ static void rkisp1_isp_stop(struct rkisp1_isp *isp) RKISP1_CIF_VI_IRCL_MIPI_SW_RST | RKISP1_CIF_VI_IRCL_ISP_SW_RST); rkisp1_write(rkisp1, RKISP1_CIF_VI_IRCL, 0x0); + + if (rkisp1->info->isp_ver == IMX8MP_V10) + rkisp1_gasket_disable(rkisp1); } static void rkisp1_config_clk(struct rkisp1_isp *isp) @@ -327,19 +440,28 @@ static void rkisp1_config_clk(struct rkisp1_isp *isp) } } -static void rkisp1_isp_start(struct rkisp1_isp *isp) +static int rkisp1_isp_start(struct rkisp1_isp *isp, struct media_pad *source) { struct rkisp1_device *rkisp1 = isp->rkisp1; u32 val; + int ret; rkisp1_config_clk(isp); + if (rkisp1->info->isp_ver == IMX8MP_V10) { + ret = rkisp1_gasket_enable(rkisp1, source); + if (ret) + return ret; + } + /* Activate ISP */ val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_CTRL); val |= RKISP1_CIF_ISP_CTRL_ISP_CFG_UPD | RKISP1_CIF_ISP_CTRL_ISP_ENABLE | RKISP1_CIF_ISP_CTRL_ISP_INFORM_ENABLE; rkisp1_write(rkisp1, RKISP1_CIF_ISP_CTRL, val); + + return 0; } /* ---------------------------------------------------------------------------- @@ -770,7 +892,9 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable) if (ret) goto mutex_unlock; - rkisp1_isp_start(isp); + ret = rkisp1_isp_start(isp, source_pad); + if (ret) + goto mutex_unlock; ret = v4l2_subdev_call(rkisp1->source, video, s_stream, true); if (ret) { -- 2.30.2
WARNING: multiple messages have this Message-ID (diff)
From: Paul Elder <paul.elder@ideasonboard.com> To: linux-media@vger.kernel.org Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>, dafna@fastmail.com, heiko@sntech.de, jeanmichel.hautbois@ideasonboard.com, jacopo@jmondi.org, djrscally@gmail.com, helen.koike@collabora.com, linux-rockchip@lists.infradead.org Subject: [PATCH 49/55] media: rkisp1: Configure gasket on i.MX8MP Date: Wed, 15 Jun 2022 04:11:21 +0900 [thread overview] Message-ID: <20220614191127.3420492-50-paul.elder@ideasonboard.com> (raw) In-Reply-To: <20220614191127.3420492-1-paul.elder@ideasonboard.com> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> The i.MX8MP has a gasket between the CSI-2 receiver and the ISP. Configure and enable it when starting the ISP, and disable it when stopping. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- .../platform/rockchip/rkisp1/rkisp1-common.h | 5 + .../platform/rockchip/rkisp1/rkisp1-dev.c | 16 +++ .../platform/rockchip/rkisp1/rkisp1-isp.c | 128 +++++++++++++++++- 3 files changed, 147 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h index eccdd3f9bc89..667fca0fef95 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h @@ -24,6 +24,7 @@ #include "rkisp1-regs.h" struct dentry; +struct regmap; /* * flags on the 'direction' field in struct rkisp1_mbus_info' that indicate @@ -451,6 +452,8 @@ struct rkisp1_debug { * @dev: a pointer to the struct device * @clk_size: number of clocks * @clks: array of clocks + * @gasket: the gasket - i.MX8MP only + * @gasket_id: the gasket ID (0 or 1) - i.MX8MP only * @v4l2_dev: v4l2_device variable * @media_dev: media_device variable * @notifier: a notifier to register on the v4l2-async API to be notified on the sensor @@ -471,6 +474,8 @@ struct rkisp1_device { struct device *dev; unsigned int clk_size; struct clk_bulk_data clks[RKISP1_MAX_BUS_CLK]; + struct regmap *gasket; + unsigned int gasket_id; struct v4l2_device v4l2_dev; struct media_device media_dev; struct v4l2_async_notifier notifier; diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c index 3a0115bdcee5..a4496ee2e9b4 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c @@ -10,6 +10,7 @@ #include <linux/clk.h> #include <linux/interrupt.h> +#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_graph.h> @@ -569,6 +570,21 @@ static int rkisp1_probe(struct platform_device *pdev) return ret; rkisp1->clk_size = info->clk_size; + if (info->isp_ver == IMX8MP_V10) { + unsigned int id; + + rkisp1->gasket = syscon_regmap_lookup_by_phandle_args(dev->of_node, + "fsl,blk-ctrl", + 1, &id); + if (IS_ERR(rkisp1->gasket)) { + ret = PTR_ERR(rkisp1->gasket); + dev_err(dev, "failed to get gasket: %d\n", ret); + return ret; + } + + rkisp1->gasket_id = id; + } + pm_runtime_enable(&pdev->dev); ret = pm_runtime_resume_and_get(&pdev->dev); diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c index 8268331faca9..ddad36ab4389 100644 --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c @@ -10,6 +10,7 @@ #include <linux/iopoll.h> #include <linux/pm_runtime.h> +#include <linux/regmap.h> #include <linux/videodev2.h> #include <linux/vmalloc.h> @@ -87,6 +88,115 @@ rkisp1_isp_get_pad_crop(struct rkisp1_isp *isp, return v4l2_subdev_get_try_crop(&isp->sd, &state, pad); } +/* ----------------------------------------------------------------------------- + * Media block control (i.MX8MP only) + */ + +#define ISP_DEWARP_CONTROL 0x0138 + +#define ISP_DEWARP_CONTROL_MIPI_CSI2_HS_POLARITY BIT(22) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_RISING (0 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_NEGATIVE (1 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_POSITIVE (2 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_FALLING (3 << 20) +#define ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_MASK GENMASK(21, 20) +#define ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE BIT(19) +#define ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE(dt) ((dt) << 13) +#define ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE_MASK GENMASK(18, 13) + +#define ISP_DEWARP_CONTROL_MIPI_CSI1_HS_POLARITY BIT(12) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_RISING (0 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_NEGATIVE (1 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_POSITIVE (2 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_FALLING (3 << 10) +#define ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_MASK GENMASK(11, 10) +#define ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE BIT(9) +#define ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE(dt) ((dt) << 3) +#define ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE_MASK GENMASK(8, 3) + +#define ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE BIT(1) +#define ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE BIT(0) + +static int rkisp1_gasket_enable(struct rkisp1_device *rkisp1, + struct media_pad *source) +{ + struct v4l2_subdev *source_sd; + struct v4l2_mbus_frame_desc fd; + unsigned int dt; + u32 mask; + u32 val; + int ret; + + /* + * Configure and enable the gasket with the CSI-2 data type. Set the + * vsync polarity as active high, as that is what the ISP is configured + * to expect in ISP_ACQ_PROP. Enable left justification, as the i.MX8MP + * ISP has a 16-bit wide input and expects data to be left-aligned. + */ + + source_sd = media_entity_to_v4l2_subdev(source->entity); + ret = v4l2_subdev_call(source_sd, pad, get_frame_desc, + source->index, &fd); + if (ret) { + dev_err(rkisp1->dev, + "failed to get frame descriptor from '%s':%u: %d\n", + source_sd->name, 0, ret); + return ret; + } + + if (fd.num_entries != 1) { + dev_err(rkisp1->dev, "invalid frame descriptor for '%s':%u\n", + source_sd->name, 0); + return -EINVAL; + } + + dt = fd.entry[0].bus.csi2.dt; + + if (rkisp1->gasket_id == 0) { + mask = ISP_DEWARP_CONTROL_MIPI_CSI1_HS_POLARITY + | ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_MASK + | ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE; + val = ISP_DEWARP_CONTROL_MIPI_CSI1_VS_SEL_POSITIVE + | ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE(dt); + } else { + mask = ISP_DEWARP_CONTROL_MIPI_CSI2_HS_POLARITY + | ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_MASK + | ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE; + val = ISP_DEWARP_CONTROL_MIPI_CSI2_VS_SEL_POSITIVE + | ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE(dt); + } + + regmap_update_bits(rkisp1->gasket, ISP_DEWARP_CONTROL, mask, val); + + return 0; +} + +static void rkisp1_gasket_disable(struct rkisp1_device *rkisp1) +{ + u32 mask; + u32 val; + + if (rkisp1->gasket_id == 1) { + mask = ISP_DEWARP_CONTROL_MIPI_ISP2_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP2_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE; + val = ISP_DEWARP_CONTROL_GPR_ISP_1_DISABLE; + } else { + mask = ISP_DEWARP_CONTROL_MIPI_ISP1_LEFT_JUST_MODE + | ISP_DEWARP_CONTROL_MIPI_ISP1_DATA_TYPE_MASK + | ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE; + val = ISP_DEWARP_CONTROL_GPR_ISP_0_DISABLE; + } + + regmap_update_bits(rkisp1->gasket, ISP_DEWARP_CONTROL, mask, val); +} + /* ---------------------------------------------------------------------------- * Camera Interface registers configurations */ @@ -303,6 +413,9 @@ static void rkisp1_isp_stop(struct rkisp1_isp *isp) RKISP1_CIF_VI_IRCL_MIPI_SW_RST | RKISP1_CIF_VI_IRCL_ISP_SW_RST); rkisp1_write(rkisp1, RKISP1_CIF_VI_IRCL, 0x0); + + if (rkisp1->info->isp_ver == IMX8MP_V10) + rkisp1_gasket_disable(rkisp1); } static void rkisp1_config_clk(struct rkisp1_isp *isp) @@ -327,19 +440,28 @@ static void rkisp1_config_clk(struct rkisp1_isp *isp) } } -static void rkisp1_isp_start(struct rkisp1_isp *isp) +static int rkisp1_isp_start(struct rkisp1_isp *isp, struct media_pad *source) { struct rkisp1_device *rkisp1 = isp->rkisp1; u32 val; + int ret; rkisp1_config_clk(isp); + if (rkisp1->info->isp_ver == IMX8MP_V10) { + ret = rkisp1_gasket_enable(rkisp1, source); + if (ret) + return ret; + } + /* Activate ISP */ val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_CTRL); val |= RKISP1_CIF_ISP_CTRL_ISP_CFG_UPD | RKISP1_CIF_ISP_CTRL_ISP_ENABLE | RKISP1_CIF_ISP_CTRL_ISP_INFORM_ENABLE; rkisp1_write(rkisp1, RKISP1_CIF_ISP_CTRL, val); + + return 0; } /* ---------------------------------------------------------------------------- @@ -770,7 +892,9 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable) if (ret) goto mutex_unlock; - rkisp1_isp_start(isp); + ret = rkisp1_isp_start(isp, source_pad); + if (ret) + goto mutex_unlock; ret = v4l2_subdev_call(rkisp1->source, video, s_stream, true); if (ret) { -- 2.30.2 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip
next prev parent reply other threads:[~2022-06-14 19:15 UTC|newest] Thread overview: 298+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-06-14 19:10 [PATCH 00/55] media: rkisp1: Cleanups and add support for i.MX8MP Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-14 19:10 ` [PATCH 01/55] media: rkisp1: debug: Add dump file in debugfs for MI buffer registers Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-15 22:41 ` Laurent Pinchart 2022-06-15 22:41 ` Laurent Pinchart 2022-06-25 17:59 ` Laurent Pinchart 2022-06-25 17:59 ` Laurent Pinchart 2022-07-04 3:46 ` paul.elder 2022-07-04 3:46 ` paul.elder 2022-06-14 19:10 ` [PATCH 02/55] media: rkisp1: Enable compilation on ARCH_MXC Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 14:17 ` Dafna Hirschfeld 2022-06-24 14:17 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 03/55] media: rkisp1: debug: Add debugfs files to monitor MI and ISP interrupts Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-16 0:44 ` Laurent Pinchart 2022-06-16 0:44 ` Laurent Pinchart 2022-07-04 3:47 ` paul.elder 2022-07-04 3:47 ` paul.elder 2022-06-14 19:10 ` [PATCH 04/55] media: rkisp1: Disable runtime PM in probe error path Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 14:21 ` Dafna Hirschfeld 2022-06-24 14:21 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 05/55] media: rkisp1: Read the ID register at probe time instead of streamon Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 14:26 ` Dafna Hirschfeld 2022-06-24 14:26 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 06/55] media: rkisp1: Rename rkisp1_match_data to rkisp1_info Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 14:29 ` Dafna Hirschfeld 2022-06-24 14:29 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 07/55] media: rkisp1: Save info pointer in rkisp1_device Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 14:34 ` Dafna Hirschfeld 2022-06-24 14:34 ` Dafna Hirschfeld 2022-06-24 14:47 ` Laurent Pinchart 2022-06-24 14:47 ` Laurent Pinchart 2022-06-30 21:28 ` Dafna Hirschfeld 2022-06-30 21:28 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 08/55] media: rkisp1: Access ISP version from info pointer Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 14:35 ` Dafna Hirschfeld 2022-06-24 14:35 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 09/55] media: rkisp1: Make rkisp1_isp_mbus_info common Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-16 0:50 ` Laurent Pinchart 2022-06-16 0:50 ` Laurent Pinchart 2022-06-24 14:54 ` Dafna Hirschfeld 2022-06-24 14:54 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 10/55] media: rkisp1: cap: Print debug message on failed link validation Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-16 7:32 ` (EXT) " Alexander Stein 2022-06-16 7:32 ` Alexander Stein 2022-06-16 7:41 ` Laurent Pinchart 2022-06-16 7:41 ` Laurent Pinchart 2022-06-16 7:59 ` (EXT) " Alexander Stein 2022-06-16 7:59 ` Alexander Stein 2022-06-24 15:00 ` Dafna Hirschfeld 2022-06-24 15:00 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 11/55] media: rkisp1: Move sensor .s_stream() call to ISP Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 15:14 ` Dafna Hirschfeld 2022-06-24 15:14 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 12/55] media: rkisp1: Reject sensors without pixel rate control at bound time Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 18:20 ` Dafna Hirschfeld 2022-06-24 18:20 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 13/55] media: rkisp1: Create link from sensor to ISP at notifier " Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 18:40 ` Dafna Hirschfeld 2022-06-24 18:40 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 14/55] media: rkisp1: Create internal links at probe time Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 18:43 ` Dafna Hirschfeld 2022-06-24 18:43 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 15/55] media: rkisp1: Rename rkisp1_subdev_notifier() to rkisp1_subdev_notifier_register() Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-24 18:44 ` Dafna Hirschfeld 2022-06-24 18:44 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 16/55] media: v4l2-async: Add notifier operation to destroy asd instances Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-15 22:36 ` Laurent Pinchart 2022-06-15 22:36 ` Laurent Pinchart 2022-06-20 14:27 ` Hans Verkuil 2022-06-20 14:27 ` Hans Verkuil 2022-06-14 19:10 ` [PATCH 17/55] media: rkisp1: Fix sensor source pad retrieval at bound time Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-07-01 4:36 ` Dafna Hirschfeld 2022-07-01 4:36 ` Dafna Hirschfeld 2022-07-01 11:29 ` Laurent Pinchart 2022-07-01 11:29 ` Laurent Pinchart 2022-06-14 19:10 ` [PATCH 18/55] media: rkisp1: Split CSI handling to separate file Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 3:48 ` Dafna Hirschfeld 2022-06-25 3:48 ` Dafna Hirschfeld 2022-06-25 10:18 ` Laurent Pinchart 2022-06-25 10:18 ` Laurent Pinchart 2022-06-14 19:10 ` [PATCH 19/55] media: rkisp1: isp: Start CSI-2 receiver before ISP Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 3:51 ` Dafna Hirschfeld 2022-06-25 3:51 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 20/55] media: rkisp1: csi: Handle CSI-2 RX configuration fully in rkisp1-csi.c Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:00 ` Dafna Hirschfeld 2022-06-25 4:00 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 21/55] media: rkisp1: csi: Rename CSI functions with a common rkisp1_csi prefix Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:03 ` Dafna Hirschfeld 2022-06-25 4:03 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 22/55] media: rkisp1: csi: Move start delay to rkisp1_csi_start() Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:05 ` Dafna Hirschfeld 2022-06-25 4:05 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 23/55] media: rkisp1: csi: Pass sensor pointer to rkisp1_csi_config() Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:28 ` Dafna Hirschfeld 2022-06-25 4:28 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 24/55] media: rkisp1: csi: Constify argument to rkisp1_csi_start() Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:29 ` Dafna Hirschfeld 2022-06-25 4:29 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 25/55] media: rkisp1: isp: Don't initialize ret to 0 in rkisp1_isp_s_stream() Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:46 ` Dafna Hirschfeld 2022-06-25 4:46 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 26/55] media: rkisp1: isp: Pass mbus type and flags to rkisp1_config_cif() Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-25 4:32 ` Dafna Hirschfeld 2022-06-25 4:32 ` Dafna Hirschfeld 2022-06-14 19:10 ` [PATCH 27/55] media: rkisp1: isp: Rename rkisp1_device.active_sensor to source Paul Elder 2022-06-14 19:10 ` Paul Elder 2022-06-30 21:57 ` Dafna Hirschfeld 2022-06-30 21:57 ` Dafna Hirschfeld 2022-07-01 4:42 ` Dafna Hirschfeld 2022-07-01 4:42 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 28/55] media: rkisp1: isp: Add container_of wrapper to cast subdev to rkisp1_isp Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 4:48 ` Dafna Hirschfeld 2022-06-25 4:48 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 29/55] media: rkisp1: isp: Add rkisp1_device backpointer " Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 4:50 ` Dafna Hirschfeld 2022-06-25 4:50 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 30/55] media: rkisp1: isp: Pass rkisp1_isp pointer to internal ISP functions Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 4:52 ` Dafna Hirschfeld 2022-06-25 4:52 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 31/55] media: rkisp1: isp: Move input configuration to rkisp1_config_isp() Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 5:00 ` Dafna Hirschfeld 2022-06-25 5:00 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 32/55] media: rkisp1: isp: Merge ISP_ACQ_PROP configuration in single variable Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 5:03 ` Dafna Hirschfeld 2022-06-25 5:03 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 33/55] media: rkisp1: isp: Initialize some variables at declaration time Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 5:04 ` Dafna Hirschfeld 2022-06-25 5:04 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 34/55] media: rkisp1: isp: Fix whitespace issues Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 5:05 ` Dafna Hirschfeld 2022-06-25 5:05 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 35/55] media: rkisp1: isp: Constify various local variables Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 5:07 ` Dafna Hirschfeld 2022-06-25 5:07 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 36/55] media: rkisp1: isp: Rename rkisp1_get_remote_source() Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 5:09 ` Dafna Hirschfeld 2022-06-25 5:09 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 37/55] media: mc-entity: Add a new helper function to get a remote pad Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-15 22:38 ` Laurent Pinchart 2022-06-15 22:38 ` Laurent Pinchart 2022-06-17 11:38 ` Hans Verkuil 2022-06-17 11:38 ` Hans Verkuil 2022-06-17 11:48 ` Hans Verkuil 2022-06-17 11:48 ` Hans Verkuil 2022-06-25 17:00 ` Laurent Pinchart 2022-06-25 17:00 ` Laurent Pinchart 2022-06-25 17:28 ` Laurent Pinchart 2022-06-25 17:28 ` Laurent Pinchart 2022-07-07 6:52 ` Hans Verkuil 2022-07-07 6:52 ` Hans Verkuil 2022-07-07 11:50 ` Laurent Pinchart 2022-07-07 11:50 ` Laurent Pinchart 2022-06-17 21:34 ` Daniel Scally 2022-06-17 21:34 ` Daniel Scally 2022-06-17 22:33 ` Daniel Scally 2022-06-17 22:33 ` Daniel Scally 2022-06-17 22:40 ` Laurent Pinchart 2022-06-17 22:40 ` Laurent Pinchart 2022-06-18 9:35 ` Daniel Scally 2022-06-18 9:35 ` Daniel Scally 2022-06-25 17:34 ` Laurent Pinchart 2022-06-25 17:34 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 38/55] media: mc-entity: Add a new helper function to get a remote pad for a pad Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-15 22:38 ` Laurent Pinchart 2022-06-15 22:38 ` Laurent Pinchart 2022-06-17 11:41 ` Hans Verkuil 2022-06-17 11:41 ` Hans Verkuil 2022-06-17 11:48 ` Laurent Pinchart 2022-06-17 11:48 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 39/55] media: rkisp1: isp: Disallow multiple active sources Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-14 19:11 ` [PATCH 40/55] media: rkisp1: csi: Implement a V4L2 subdev for the CSI receiver Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-25 7:00 ` Dafna Hirschfeld 2022-06-25 7:00 ` Dafna Hirschfeld 2022-06-25 11:03 ` Laurent Pinchart 2022-06-25 11:03 ` Laurent Pinchart 2022-07-01 4:48 ` Dafna Hirschfeld 2022-07-01 4:48 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 41/55] media: rkisp1: csi: Plumb the CSI RX subdev Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-15 23:10 ` Laurent Pinchart 2022-06-15 23:10 ` Laurent Pinchart 2022-06-25 7:45 ` Dafna Hirschfeld 2022-06-25 7:45 ` Dafna Hirschfeld 2022-06-25 16:07 ` Laurent Pinchart 2022-06-25 16:07 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 42/55] media: rkisp1: Use fwnode_graph_for_each_endpoint Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-17 22:56 ` Laurent Pinchart 2022-06-17 22:56 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 43/55] dt-bindings: media: rkisp1: Add port for parallel interface Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-17 23:13 ` Laurent Pinchart 2022-06-17 23:13 ` Laurent Pinchart 2022-07-01 5:22 ` Dafna Hirschfeld 2022-07-01 5:22 ` Dafna Hirschfeld 2022-07-01 9:19 ` Laurent Pinchart 2022-07-01 9:19 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 44/55] media: rkisp1: Support the ISP parallel input Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-14 19:11 ` [PATCH 45/55] media: rkisp1: Add infrastructure to support ISP features Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-14 19:11 ` [PATCH 46/55] media: rkisp1: Make the internal CSI-2 receiver optional Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-14 19:11 ` [PATCH 47/55] dt-bindings: media: rkisp1: Add i.MX8MP ISP to compatible Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-17 23:14 ` Laurent Pinchart 2022-06-17 23:14 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 48/55] media: rkisp1: Add match data for i.MX8MP ISP Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-17 23:26 ` Laurent Pinchart 2022-06-17 23:26 ` Laurent Pinchart 2022-06-26 4:05 ` Dafna Hirschfeld 2022-06-26 4:05 ` Dafna Hirschfeld 2022-06-26 11:07 ` Laurent Pinchart 2022-06-26 11:07 ` Laurent Pinchart 2022-07-04 10:36 ` paul.elder 2022-07-04 10:36 ` paul.elder 2022-06-14 19:11 ` Paul Elder [this message] 2022-06-14 19:11 ` [PATCH 49/55] media: rkisp1: Configure gasket on i.MX8MP Paul Elder 2022-06-14 19:11 ` [PATCH 50/55] media: rkisp1: Add and set registers for crop for i.MX8MP Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-26 11:59 ` Laurent Pinchart 2022-06-26 11:59 ` Laurent Pinchart 2022-07-04 10:37 ` paul.elder 2022-07-04 10:37 ` paul.elder 2022-07-01 5:37 ` Dafna Hirschfeld 2022-07-01 5:37 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 51/55] media: rkisp1: Add and set registers for output size config on i.MX8MP Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-26 11:46 ` Laurent Pinchart 2022-06-26 11:46 ` Laurent Pinchart 2022-07-01 5:40 ` Dafna Hirschfeld 2022-07-01 5:40 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 52/55] media: rkisp1: Add i.MX8MP-specific registers for MI and resizer Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-07-01 5:45 ` Dafna Hirschfeld 2022-07-01 5:45 ` Dafna Hirschfeld 2022-06-14 19:11 ` [PATCH 53/55] media: rkisp1: Shift DMA buffer addresses on i.MX8MP Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-26 11:38 ` Laurent Pinchart 2022-06-26 11:38 ` Laurent Pinchart 2022-07-01 5:53 ` Dafna Hirschfeld 2022-07-01 5:53 ` Dafna Hirschfeld 2022-07-01 8:38 ` Laurent Pinchart 2022-07-01 8:38 ` Laurent Pinchart 2022-06-14 19:11 ` [PATCH 54/55] media: rkisp1: Add register definitions for the test pattern generator Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-14 19:11 ` [PATCH 55/55] media: rkisp1: Fix RSZ_CTRL bits for i.MX8MP Paul Elder 2022-06-14 19:11 ` Paul Elder 2022-06-16 8:05 ` (EXT) " Alexander Stein 2022-06-16 8:05 ` Alexander Stein 2022-06-17 23:03 ` Laurent Pinchart 2022-06-17 23:03 ` Laurent Pinchart 2022-06-26 11:40 ` Laurent Pinchart 2022-06-26 11:40 ` Laurent Pinchart 2022-07-04 10:40 ` paul.elder 2022-07-04 10:40 ` paul.elder 2022-06-16 0:19 ` [PATCH 00/55] media: rkisp1: Cleanups and add support " Laurent Pinchart 2022-06-16 0:19 ` Laurent Pinchart
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220614191127.3420492-50-paul.elder@ideasonboard.com \ --to=paul.elder@ideasonboard.com \ --cc=dafna@fastmail.com \ --cc=djrscally@gmail.com \ --cc=heiko@sntech.de \ --cc=helen.koike@collabora.com \ --cc=jacopo@jmondi.org \ --cc=jeanmichel.hautbois@ideasonboard.com \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-media@vger.kernel.org \ --cc=linux-rockchip@lists.infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.