* [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP
@ 2025-12-05 9:07 Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 1/5] media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8ULP compatible string Guoniu Zhou
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Guoniu Zhou @ 2025-12-05 9:07 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel, Frank Li
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel,
Conor Dooley
The serial adds MIPI CSI-2 support for i.MX8ULP.
Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
Changes in v10:
- Make state->num_clks unsigned as suggested in bellow instead of making i signed.
https://lore.kernel.org/linux-media/20251121024714.GD11519@pendragon.ideasonboard.com/
media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks
- Rebased on latest media/next.
- Link to v9: https://lore.kernel.org/r/20251121-csi2_imx8ulp-v9-0-05b41b897e50@nxp.com
Changes in v9:
- Make state->num_clks signed int.
- Link to v8: https://lore.kernel.org/r/20251113-csi2_imx8ulp-v8-0-2ebe378f7111@nxp.com
Changes in v8:
- Rebased on latest media/next.
- Sort the conditional blocks by alphabetical order of the compatible strings
- Get esc_clk when probe and cache it in csi_state structure to avoid looking
it up multiple times at runtime.
- Make state->num_clks unsigned.
- Return error when failed to get esc_clk.
- Link to v7: https://lore.kernel.org/r/20251023-csi2_imx8ulp-v7-0-5ecb081ce79b@nxp.com
Changes in v7:
- No functional changes, only move patch 2 after patch 4 to avoid dependency issues.
- Rebased on latest media/next
- Link to v6: https://lore.kernel.org/r/20250917-csi2_imx8ulp-v6-0-23a355982eff@nxp.com
Changes in v6:
- s/existed/existing/ in patch 1 commit log.
- Delete the compatible between 8ulp and 8qxp since 8ulp need one more clock.
- Update compatible string in dts for csi node.
- Add one new patch to handle 8ulp in driver.
media: imx8mq-mipi-csi2: Add support for i.MX8ULP
- Link to v5: https://lore.kernel.org/r/20250901-csi2_imx8ulp-v5-0-67964d1471f3@nxp.com
Changes in v5:
- Delete else: block and move clock constrains to each case.
- List exact cases, but put imx8qxp/qm in one if:then: block to avoid
repetitive code since they are same.
- Link to v4: https://lore.kernel.org/all/20250828-csi2_imx8ulp-v4-0-a2f97b15bb98@nxp.com
Changes in v4:
- Change csr clock name to pclk which is more readability.
- Add restriction to i.MX8ULP and the other variants remain the same as previous versions.
- Update commit log in patch 1 to describe why add new compatible string for i.MX8ULP.
- Link to v3: https://lore.kernel.org/all/20250825-csi2_imx8ulp-v3-0-35885aba62bc@nxp.com
Changes in v3:
- Correct the order of "fsl,imx8qm-mipi-csi2","fsl,imx8qm-mipi-csi2".
- Correct the order of minItems and maxItems.
- Restict all variants.
- Change pclk clock name to csr to match IP port name.
- Align description about csr clock with IP datasheet.
- Add reasons for adding a fourth clock(csr) in patch 1 commit log.
- Link to v2: https://lore.kernel.org/all/20250822-csi2_imx8ulp-v2-0-26a444394965@nxp.com
Changes in v2:
- Add more description about pclk clock.
- Change minItems/maxItems to 2 for resets property.
- Better to handle "fsl,imx8ulp-mipi-csi2" variant.
- Move comment to the top of reset_control_deassert().
- Move dts patch as the last one.
- Add "fsl,imx8qxp-mipi-csi2" to compatible string list of csi node.
- Remove patch 5 in v1.
- Link to v1: https://lore.kernel.org/all/20250812081923.1019345-1-guoniu.zhou@oss.nxp.com
---
Guoniu Zhou (5):
media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8ULP compatible string
media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks
media: imx8mq-mipi-csi2: Explicitly release reset
media: imx8mq-mipi-csi2: Add support for i.MX8ULP
arm64: dts: imx8ulp: Add CSI and ISI Nodes
.../bindings/media/nxp,imx8mq-mipi-csi2.yaml | 49 ++++++++++++++--
arch/arm64/boot/dts/freescale/imx8ulp.dtsi | 67 ++++++++++++++++++++++
drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 64 ++++++++-------------
3 files changed, 133 insertions(+), 47 deletions(-)
---
base-commit: 1f2353f5a1af995efbf7bea44341aa0d03460b28
change-id: 20250819-csi2_imx8ulp-9db386dd6bdf
Best regards,
--
Guoniu Zhou <guoniu.zhou@nxp.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v10 1/5] media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8ULP compatible string
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
@ 2025-12-05 9:07 ` Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks Guoniu Zhou
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Guoniu Zhou @ 2025-12-05 9:07 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel, Frank Li
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel,
Conor Dooley
From: Guoniu Zhou <guoniu.zhou@nxp.com>
The CSI-2 receiver in the i.MX8ULP is almost identical to the version
present in the i.MX8QXP/QM, but i.MX8ULP CSI-2 controller needs pclk
clock as the input clock for its APB interface of Control and Status
register(CSR). So add compatible string fsl,imx8ulp-mipi-csi2 and
increase maxItems of Clocks (clock-names) to 4 from 3. And keep the
same restriction for existing compatible.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
.../bindings/media/nxp,imx8mq-mipi-csi2.yaml | 49 +++++++++++++++++++---
1 file changed, 43 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/nxp,imx8mq-mipi-csi2.yaml b/Documentation/devicetree/bindings/media/nxp,imx8mq-mipi-csi2.yaml
index 3389bab266a9adbda313c8ad795b998641df12f3..4fcfc4fd35651e0cd6e80b97cc0b12301b65b684 100644
--- a/Documentation/devicetree/bindings/media/nxp,imx8mq-mipi-csi2.yaml
+++ b/Documentation/devicetree/bindings/media/nxp,imx8mq-mipi-csi2.yaml
@@ -20,6 +20,7 @@ properties:
- enum:
- fsl,imx8mq-mipi-csi2
- fsl,imx8qxp-mipi-csi2
+ - fsl,imx8ulp-mipi-csi2
- items:
- const: fsl,imx8qm-mipi-csi2
- const: fsl,imx8qxp-mipi-csi2
@@ -39,12 +40,16 @@ properties:
clock that the RX DPHY receives.
- description: ui is the pixel clock (phy_ref up to 333Mhz).
See the reference manual for details.
+ - description: pclk is clock for csr APB interface.
+ minItems: 3
clock-names:
items:
- const: core
- const: esc
- const: ui
+ - const: pclk
+ minItems: 3
power-domains:
maxItems: 1
@@ -130,21 +135,53 @@ allOf:
compatible:
contains:
enum:
- - fsl,imx8qxp-mipi-csi2
+ - fsl,imx8mq-mipi-csi2
+ then:
+ properties:
+ reg:
+ maxItems: 1
+ resets:
+ minItems: 3
+ clocks:
+ maxItems: 3
+ clock-names:
+ maxItems: 3
+ required:
+ - fsl,mipi-phy-gpr
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: fsl,imx8qxp-mipi-csi2
then:
properties:
reg:
minItems: 2
resets:
maxItems: 1
- else:
+ clocks:
+ maxItems: 3
+ clock-names:
+ maxItems: 3
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - fsl,imx8ulp-mipi-csi2
+ then:
properties:
reg:
- maxItems: 1
+ minItems: 2
resets:
- minItems: 3
- required:
- - fsl,mipi-phy-gpr
+ minItems: 2
+ maxItems: 2
+ clocks:
+ minItems: 4
+ clock-names:
+ minItems: 4
additionalProperties: false
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 1/5] media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8ULP compatible string Guoniu Zhou
@ 2025-12-05 9:07 ` Guoniu Zhou
2026-03-19 23:23 ` Laurent Pinchart
2025-12-05 9:07 ` [PATCH v10 3/5] media: imx8mq-mipi-csi2: Explicitly release reset Guoniu Zhou
` (3 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Guoniu Zhou @ 2025-12-05 9:07 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel, Frank Li
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel
From: Guoniu Zhou <guoniu.zhou@nxp.com>
Use devm_clk_bulk_get_all() helper to simplify clock handle code.
No functional changes intended.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 55 ++++++++++-----------------
1 file changed, 20 insertions(+), 35 deletions(-)
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index 371b4e81328c107269f89da23818ab0abd0179da..0e3a41cd35edfefc51b5631e2c36fd76e3e14d83 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -71,21 +71,6 @@ enum {
ST_SUSPENDED = 4,
};
-enum imx8mq_mipi_csi_clk {
- CSI2_CLK_CORE,
- CSI2_CLK_ESC,
- CSI2_CLK_UI,
- CSI2_NUM_CLKS,
-};
-
-static const char * const imx8mq_mipi_csi_clk_id[CSI2_NUM_CLKS] = {
- [CSI2_CLK_CORE] = "core",
- [CSI2_CLK_ESC] = "esc",
- [CSI2_CLK_UI] = "ui",
-};
-
-#define CSI2_NUM_CLKS ARRAY_SIZE(imx8mq_mipi_csi_clk_id)
-
struct imx8mq_plat_data {
int (*enable)(struct csi_state *state, u32 hs_settle);
void (*disable)(struct csi_state *state);
@@ -111,7 +96,9 @@ struct csi_state {
struct device *dev;
const struct imx8mq_plat_data *pdata;
void __iomem *regs;
- struct clk_bulk_data clks[CSI2_NUM_CLKS];
+ struct clk_bulk_data *clks;
+ struct clk *esc_clk;
+ u32 num_clks;
struct reset_control *rst;
struct regulator *mipi_phy_regulator;
@@ -384,24 +371,16 @@ static void imx8mq_mipi_csi_set_params(struct csi_state *state)
CSI2RX_SEND_LEVEL);
}
-static int imx8mq_mipi_csi_clk_enable(struct csi_state *state)
-{
- return clk_bulk_prepare_enable(CSI2_NUM_CLKS, state->clks);
-}
-
-static void imx8mq_mipi_csi_clk_disable(struct csi_state *state)
-{
- clk_bulk_disable_unprepare(CSI2_NUM_CLKS, state->clks);
-}
-
-static int imx8mq_mipi_csi_clk_get(struct csi_state *state)
+static struct clk *find_esc_clk(struct csi_state *state)
{
unsigned int i;
- for (i = 0; i < CSI2_NUM_CLKS; i++)
- state->clks[i].id = imx8mq_mipi_csi_clk_id[i];
+ for (i = 0; i < state->num_clks; i++) {
+ if (!strcmp(state->clks[i].id, "esc"))
+ return state->clks[i].clk;
+ }
- return devm_clk_bulk_get(state->dev, CSI2_NUM_CLKS, state->clks);
+ return ERR_PTR(-ENODEV);
}
static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state,
@@ -456,7 +435,7 @@ static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state,
* documentation recommends picking a value away from the boundaries.
* Let's pick the average.
*/
- esc_clk_rate = clk_get_rate(state->clks[CSI2_CLK_ESC].clk);
+ esc_clk_rate = clk_get_rate(state->esc_clk);
if (!esc_clk_rate) {
dev_err(state->dev, "Could not get esc clock rate.\n");
return -EINVAL;
@@ -783,7 +762,7 @@ static void imx8mq_mipi_csi_pm_suspend(struct device *dev)
if (state->state & ST_POWERED) {
imx8mq_mipi_csi_stop_stream(state);
- imx8mq_mipi_csi_clk_disable(state);
+ clk_bulk_disable_unprepare(state->num_clks, state->clks);
state->state &= ~ST_POWERED;
}
@@ -801,7 +780,7 @@ static int imx8mq_mipi_csi_pm_resume(struct device *dev)
if (!(state->state & ST_POWERED)) {
state->state |= ST_POWERED;
- ret = imx8mq_mipi_csi_clk_enable(state);
+ ret = clk_bulk_prepare_enable(state->num_clks, state->clks);
}
if (state->state & ST_STREAMING) {
sd_state = v4l2_subdev_lock_and_get_active_state(sd);
@@ -1027,9 +1006,15 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
if (IS_ERR(state->regs))
return PTR_ERR(state->regs);
- ret = imx8mq_mipi_csi_clk_get(state);
+ ret = devm_clk_bulk_get_all(dev, &state->clks);
if (ret < 0)
- return ret;
+ return dev_err_probe(dev, ret, "Failed to get clocks\n");
+
+ state->num_clks = ret;
+
+ state->esc_clk = find_esc_clk(state);
+ if (IS_ERR(state->esc_clk))
+ return dev_err_probe(dev, PTR_ERR(state->esc_clk), "Couldn't find esc clock\n");
platform_set_drvdata(pdev, &state->sd);
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v10 3/5] media: imx8mq-mipi-csi2: Explicitly release reset
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 1/5] media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8ULP compatible string Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks Guoniu Zhou
@ 2025-12-05 9:07 ` Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 4/5] media: imx8mq-mipi-csi2: Add support for i.MX8ULP Guoniu Zhou
` (2 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Guoniu Zhou @ 2025-12-05 9:07 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel, Frank Li
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel
From: Guoniu Zhou <guoniu.zhou@nxp.com>
Call reset_control_deassert() to explicitly release reset to make sure
reset bits are cleared since platform like i.MX8ULP can't clear reset
bits automatically.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index 0e3a41cd35edfefc51b5631e2c36fd76e3e14d83..0ede273f7ff82f288404316c9fd7f1e751e169c5 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -338,18 +338,14 @@ static int imx8mq_mipi_csi_sw_reset(struct csi_state *state)
{
int ret;
- /*
- * these are most likely self-clearing reset bits. to make it
- * more clear, the reset-imx7 driver should implement the
- * .reset() operation.
- */
ret = reset_control_assert(state->rst);
if (ret < 0) {
dev_err(state->dev, "Failed to assert resets: %d\n", ret);
return ret;
}
- return 0;
+ /* Explicitly release reset to make sure reset bits are cleared. */
+ return reset_control_deassert(state->rst);
}
static void imx8mq_mipi_csi_set_params(struct csi_state *state)
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v10 4/5] media: imx8mq-mipi-csi2: Add support for i.MX8ULP
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
` (2 preceding siblings ...)
2025-12-05 9:07 ` [PATCH v10 3/5] media: imx8mq-mipi-csi2: Explicitly release reset Guoniu Zhou
@ 2025-12-05 9:07 ` Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes Guoniu Zhou
2026-03-26 15:20 ` (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Frank Li
5 siblings, 0 replies; 12+ messages in thread
From: Guoniu Zhou @ 2025-12-05 9:07 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel, Frank Li
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel
From: Guoniu Zhou <guoniu.zhou@nxp.com>
The CSI-2 receiver in i.MX8ULP is almost same as i.MX8QXP/QM except
clocks and resets, so add compatible string for i.MX8ULP to handle
the difference and reuse platform data of i.MX8QXP/QM.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index 0ede273f7ff82f288404316c9fd7f1e751e169c5..1b80e872cf38293c03d216cbee869eaa02e55458 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -1076,6 +1076,7 @@ static void imx8mq_mipi_csi_remove(struct platform_device *pdev)
static const struct of_device_id imx8mq_mipi_csi_of_match[] = {
{ .compatible = "fsl,imx8mq-mipi-csi2", .data = &imx8mq_data },
{ .compatible = "fsl,imx8qxp-mipi-csi2", .data = &imx8qxp_data },
+ { .compatible = "fsl,imx8ulp-mipi-csi2", .data = &imx8qxp_data },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, imx8mq_mipi_csi_of_match);
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v10 5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
` (3 preceding siblings ...)
2025-12-05 9:07 ` [PATCH v10 4/5] media: imx8mq-mipi-csi2: Add support for i.MX8ULP Guoniu Zhou
@ 2025-12-05 9:07 ` Guoniu Zhou
2026-03-26 15:20 ` (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Frank Li
5 siblings, 0 replies; 12+ messages in thread
From: Guoniu Zhou @ 2025-12-05 9:07 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel, Frank Li
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel
From: Guoniu Zhou <guoniu.zhou@nxp.com>
The CSI-2 in the i.MX8ULP is almost identical to the version present
in the i.MX8QXP/QM and is routed to the ISI. Add both the ISI and CSI
nodes and mark them as disabled by default since capture is dependent
on an attached camera.
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
arch/arm64/boot/dts/freescale/imx8ulp.dtsi | 67 ++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx8ulp.dtsi b/arch/arm64/boot/dts/freescale/imx8ulp.dtsi
index 13b01f3aa2a4950c37e72e04f6bfb5995dc19178..99271d55dfb60ed2cbfe664d928be179eb257674 100644
--- a/arch/arm64/boot/dts/freescale/imx8ulp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8ulp.dtsi
@@ -7,6 +7,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/power/imx8ulp-power.h>
+#include <dt-bindings/reset/imx8ulp-pcc-reset.h>
#include <dt-bindings/thermal/thermal.h>
#include "imx8ulp-pinfunc.h"
@@ -842,6 +843,72 @@ spdif: spdif@2dab0000 {
dma-names = "rx", "tx";
status = "disabled";
};
+
+ isi: isi@2dac0000 {
+ compatible = "fsl,imx8ulp-isi";
+ reg = <0x2dac0000 0x10000>;
+ interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&pcc5 IMX8ULP_CLK_ISI>,
+ <&cgc2 IMX8ULP_CLK_LPAV_AXI_DIV>;
+ clock-names = "axi", "apb";
+ power-domains = <&scmi_devpd IMX8ULP_PD_ISI>;
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ isi_in: endpoint {
+ remote-endpoint = <&mipi_csi_out>;
+ };
+ };
+ };
+ };
+
+ mipi_csi: csi@2daf0000 {
+ compatible = "fsl,imx8ulp-mipi-csi2";
+ reg = <0x2daf0000 0x10000>,
+ <0x2dad0000 0x10000>;
+ clocks = <&pcc5 IMX8ULP_CLK_CSI>,
+ <&pcc5 IMX8ULP_CLK_CSI_CLK_ESC>,
+ <&pcc5 IMX8ULP_CLK_CSI_CLK_UI>,
+ <&pcc5 IMX8ULP_CLK_CSI_REGS>;
+ clock-names = "core", "esc", "ui", "pclk";
+ assigned-clocks = <&pcc5 IMX8ULP_CLK_CSI>,
+ <&pcc5 IMX8ULP_CLK_CSI_CLK_ESC>,
+ <&pcc5 IMX8ULP_CLK_CSI_CLK_UI>,
+ <&pcc5 IMX8ULP_CLK_CSI_REGS>;
+ assigned-clock-parents = <&cgc2 IMX8ULP_CLK_PLL4_PFD1_DIV1>,
+ <&cgc2 IMX8ULP_CLK_PLL4_PFD1_DIV2>,
+ <&cgc2 IMX8ULP_CLK_PLL4_PFD0_DIV1>;
+ assigned-clock-rates = <200000000>,
+ <80000000>,
+ <100000000>,
+ <79200000>;
+ power-domains = <&scmi_devpd IMX8ULP_PD_MIPI_CSI>;
+ resets = <&pcc5 PCC5_CSI_SWRST>,
+ <&pcc5 PCC5_CSI_REGS_SWRST>;
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ };
+
+ port@1 {
+ reg = <1>;
+
+ mipi_csi_out: endpoint {
+ remote-endpoint = <&isi_in>;
+ };
+ };
+ };
+ };
};
gpiod: gpio@2e200000 {
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* RE: [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks
[not found] ` <20251205-csi2_imx8ulp-v10-2-69b5c4cebcf8@nxp.com>
@ 2026-03-02 2:09 ` G.N. Zhou (OSS)
0 siblings, 0 replies; 12+ messages in thread
From: G.N. Zhou (OSS) @ 2026-03-02 2:09 UTC (permalink / raw)
To: G.N. Zhou (OSS), Rui Miguel Silva, Laurent Pinchart,
Martin Kepplinger, Purism Kernel Team, Mauro Carvalho Chehab,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Philipp Zabel, Frank Li
Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, G.N. Zhou
Hi Laurent,
Sorry for bother you again.
May I ask if you have any other comments on this patch or the serials? If not, could we make it forward? Thanks.
Best Regards
G.N Zhou
> -----Original Message-----
> From: G.N. Zhou (OSS) <guoniu.zhou@oss.nxp.com>
> Sent: Friday, December 5, 2025 5:05 PM
> To: Rui Miguel Silva <rmfrfs@gmail.com>; Laurent Pinchart
> <laurent.pinchart@ideasonboard.com>; Martin Kepplinger
> <martink@posteo.de>; Purism Kernel Team <kernel@puri.sm>; Mauro
> Carvalho Chehab <mchehab@kernel.org>; Rob Herring <robh@kernel.org>;
> Krzysztof Kozlowski <krzk+dt@kernel.org>; Conor Dooley
> <conor+dt@kernel.org>; Shawn Guo <shawnguo@kernel.org>; Sascha Hauer
> <s.hauer@pengutronix.de>; Pengutronix Kernel Team
> <kernel@pengutronix.de>; Fabio Estevam <festevam@gmail.com>; Philipp
> Zabel <p.zabel@pengutronix.de>; Frank Li <frank.li@nxp.com>
> Cc: linux-media@vger.kernel.org; devicetree@vger.kernel.org;
> imx@lists.linux.dev; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org; G.N. Zhou <guoniu.zhou@nxp.com>
> Subject: [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use
> devm_clk_bulk_get_all() to fetch clocks
>
> From: Guoniu Zhou <guoniu.zhou@nxp.com>
>
> Use devm_clk_bulk_get_all() helper to simplify clock handle code.
>
> No functional changes intended.
>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
> ---
> drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 55 ++++++++++----------------
> -
> 1 file changed, 20 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> index
> 371b4e81328c107269f89da23818ab0abd0179da..0e3a41cd35edfefc51b5631
> e2c36fd76e3e14d83 100644
> --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> @@ -71,21 +71,6 @@ enum {
> ST_SUSPENDED = 4,
> };
>
> -enum imx8mq_mipi_csi_clk {
> - CSI2_CLK_CORE,
> - CSI2_CLK_ESC,
> - CSI2_CLK_UI,
> - CSI2_NUM_CLKS,
> -};
> -
> -static const char * const imx8mq_mipi_csi_clk_id[CSI2_NUM_CLKS] = {
> - [CSI2_CLK_CORE] = "core",
> - [CSI2_CLK_ESC] = "esc",
> - [CSI2_CLK_UI] = "ui",
> -};
> -
> -#define CSI2_NUM_CLKS ARRAY_SIZE(imx8mq_mipi_csi_clk_id)
> -
> struct imx8mq_plat_data {
> int (*enable)(struct csi_state *state, u32 hs_settle);
> void (*disable)(struct csi_state *state); @@ -111,7 +96,9 @@ struct
> csi_state {
> struct device *dev;
> const struct imx8mq_plat_data *pdata;
> void __iomem *regs;
> - struct clk_bulk_data clks[CSI2_NUM_CLKS];
> + struct clk_bulk_data *clks;
> + struct clk *esc_clk;
> + u32 num_clks;
> struct reset_control *rst;
> struct regulator *mipi_phy_regulator;
>
> @@ -384,24 +371,16 @@ static void imx8mq_mipi_csi_set_params(struct
> csi_state *state)
> CSI2RX_SEND_LEVEL);
> }
>
> -static int imx8mq_mipi_csi_clk_enable(struct csi_state *state) -{
> - return clk_bulk_prepare_enable(CSI2_NUM_CLKS, state->clks);
> -}
> -
> -static void imx8mq_mipi_csi_clk_disable(struct csi_state *state) -{
> - clk_bulk_disable_unprepare(CSI2_NUM_CLKS, state->clks);
> -}
> -
> -static int imx8mq_mipi_csi_clk_get(struct csi_state *state)
> +static struct clk *find_esc_clk(struct csi_state *state)
> {
> unsigned int i;
>
> - for (i = 0; i < CSI2_NUM_CLKS; i++)
> - state->clks[i].id = imx8mq_mipi_csi_clk_id[i];
> + for (i = 0; i < state->num_clks; i++) {
> + if (!strcmp(state->clks[i].id, "esc"))
> + return state->clks[i].clk;
> + }
>
> - return devm_clk_bulk_get(state->dev, CSI2_NUM_CLKS, state->clks);
> + return ERR_PTR(-ENODEV);
> }
>
> static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state, @@ -456,7
> +435,7 @@ static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state,
> * documentation recommends picking a value away from the
> boundaries.
> * Let's pick the average.
> */
> - esc_clk_rate = clk_get_rate(state->clks[CSI2_CLK_ESC].clk);
> + esc_clk_rate = clk_get_rate(state->esc_clk);
> if (!esc_clk_rate) {
> dev_err(state->dev, "Could not get esc clock rate.\n");
> return -EINVAL;
> @@ -783,7 +762,7 @@ static void imx8mq_mipi_csi_pm_suspend(struct
> device *dev)
>
> if (state->state & ST_POWERED) {
> imx8mq_mipi_csi_stop_stream(state);
> - imx8mq_mipi_csi_clk_disable(state);
> + clk_bulk_disable_unprepare(state->num_clks, state->clks);
> state->state &= ~ST_POWERED;
> }
>
> @@ -801,7 +780,7 @@ static int imx8mq_mipi_csi_pm_resume(struct device
> *dev)
>
> if (!(state->state & ST_POWERED)) {
> state->state |= ST_POWERED;
> - ret = imx8mq_mipi_csi_clk_enable(state);
> + ret = clk_bulk_prepare_enable(state->num_clks, state->clks);
> }
> if (state->state & ST_STREAMING) {
> sd_state = v4l2_subdev_lock_and_get_active_state(sd);
> @@ -1027,9 +1006,15 @@ static int imx8mq_mipi_csi_probe(struct
> platform_device *pdev)
> if (IS_ERR(state->regs))
> return PTR_ERR(state->regs);
>
> - ret = imx8mq_mipi_csi_clk_get(state);
> + ret = devm_clk_bulk_get_all(dev, &state->clks);
> if (ret < 0)
> - return ret;
> + return dev_err_probe(dev, ret, "Failed to get clocks\n");
> +
> + state->num_clks = ret;
> +
> + state->esc_clk = find_esc_clk(state);
> + if (IS_ERR(state->esc_clk))
> + return dev_err_probe(dev, PTR_ERR(state->esc_clk), "Couldn't
> find esc
> +clock\n");
>
> platform_set_drvdata(pdev, &state->sd);
>
>
> --
> 2.34.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks
2025-12-05 9:07 ` [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks Guoniu Zhou
@ 2026-03-19 23:23 ` Laurent Pinchart
2026-03-23 8:35 ` G.N. Zhou (OSS)
0 siblings, 1 reply; 12+ messages in thread
From: Laurent Pinchart @ 2026-03-19 23:23 UTC (permalink / raw)
To: Guoniu Zhou
Cc: Rui Miguel Silva, Martin Kepplinger, Purism Kernel Team,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam, Philipp Zabel, Frank Li, linux-media, devicetree,
imx, linux-arm-kernel, linux-kernel
Hi Guoniu,
Thank you for the patch.
On Fri, Dec 05, 2025 at 05:07:44PM +0800, Guoniu Zhou wrote:
> From: Guoniu Zhou <guoniu.zhou@nxp.com>
>
> Use devm_clk_bulk_get_all() helper to simplify clock handle code.
>
> No functional changes intended.
>
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
> ---
> drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 55 ++++++++++-----------------
> 1 file changed, 20 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> index 371b4e81328c107269f89da23818ab0abd0179da..0e3a41cd35edfefc51b5631e2c36fd76e3e14d83 100644
> --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> @@ -71,21 +71,6 @@ enum {
> ST_SUSPENDED = 4,
> };
>
> -enum imx8mq_mipi_csi_clk {
> - CSI2_CLK_CORE,
> - CSI2_CLK_ESC,
> - CSI2_CLK_UI,
> - CSI2_NUM_CLKS,
> -};
> -
> -static const char * const imx8mq_mipi_csi_clk_id[CSI2_NUM_CLKS] = {
> - [CSI2_CLK_CORE] = "core",
> - [CSI2_CLK_ESC] = "esc",
> - [CSI2_CLK_UI] = "ui",
> -};
> -
> -#define CSI2_NUM_CLKS ARRAY_SIZE(imx8mq_mipi_csi_clk_id)
> -
> struct imx8mq_plat_data {
> int (*enable)(struct csi_state *state, u32 hs_settle);
> void (*disable)(struct csi_state *state);
> @@ -111,7 +96,9 @@ struct csi_state {
> struct device *dev;
> const struct imx8mq_plat_data *pdata;
> void __iomem *regs;
> - struct clk_bulk_data clks[CSI2_NUM_CLKS];
> + struct clk_bulk_data *clks;
> + struct clk *esc_clk;
> + u32 num_clks;
> struct reset_control *rst;
> struct regulator *mipi_phy_regulator;
>
> @@ -384,24 +371,16 @@ static void imx8mq_mipi_csi_set_params(struct csi_state *state)
> CSI2RX_SEND_LEVEL);
> }
>
> -static int imx8mq_mipi_csi_clk_enable(struct csi_state *state)
> -{
> - return clk_bulk_prepare_enable(CSI2_NUM_CLKS, state->clks);
> -}
> -
> -static void imx8mq_mipi_csi_clk_disable(struct csi_state *state)
> -{
> - clk_bulk_disable_unprepare(CSI2_NUM_CLKS, state->clks);
> -}
> -
> -static int imx8mq_mipi_csi_clk_get(struct csi_state *state)
> +static struct clk *find_esc_clk(struct csi_state *state)
imx8mq_mipi_csi_find_esc_clk().
> {
> unsigned int i;
>
> - for (i = 0; i < CSI2_NUM_CLKS; i++)
> - state->clks[i].id = imx8mq_mipi_csi_clk_id[i];
> + for (i = 0; i < state->num_clks; i++) {
> + if (!strcmp(state->clks[i].id, "esc"))
> + return state->clks[i].clk;
> + }
>
> - return devm_clk_bulk_get(state->dev, CSI2_NUM_CLKS, state->clks);
> + return ERR_PTR(-ENODEV);
> }
>
> static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state,
> @@ -456,7 +435,7 @@ static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state,
> * documentation recommends picking a value away from the boundaries.
> * Let's pick the average.
> */
> - esc_clk_rate = clk_get_rate(state->clks[CSI2_CLK_ESC].clk);
> + esc_clk_rate = clk_get_rate(state->esc_clk);
> if (!esc_clk_rate) {
> dev_err(state->dev, "Could not get esc clock rate.\n");
> return -EINVAL;
> @@ -783,7 +762,7 @@ static void imx8mq_mipi_csi_pm_suspend(struct device *dev)
>
> if (state->state & ST_POWERED) {
> imx8mq_mipi_csi_stop_stream(state);
> - imx8mq_mipi_csi_clk_disable(state);
> + clk_bulk_disable_unprepare(state->num_clks, state->clks);
> state->state &= ~ST_POWERED;
> }
>
> @@ -801,7 +780,7 @@ static int imx8mq_mipi_csi_pm_resume(struct device *dev)
>
> if (!(state->state & ST_POWERED)) {
> state->state |= ST_POWERED;
> - ret = imx8mq_mipi_csi_clk_enable(state);
> + ret = clk_bulk_prepare_enable(state->num_clks, state->clks);
> }
> if (state->state & ST_STREAMING) {
> sd_state = v4l2_subdev_lock_and_get_active_state(sd);
> @@ -1027,9 +1006,15 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
> if (IS_ERR(state->regs))
> return PTR_ERR(state->regs);
>
> - ret = imx8mq_mipi_csi_clk_get(state);
> + ret = devm_clk_bulk_get_all(dev, &state->clks);
> if (ret < 0)
> - return ret;
> + return dev_err_probe(dev, ret, "Failed to get clocks\n");
> +
> + state->num_clks = ret;
> +
> + state->esc_clk = find_esc_clk(state);
> + if (IS_ERR(state->esc_clk))
> + return dev_err_probe(dev, PTR_ERR(state->esc_clk), "Couldn't find esc clock\n");
This could be line-wrapped.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
I can make those small changes when applying if there's no other need to
submit a new version.
>
> platform_set_drvdata(pdev, &state->sd);
>
>
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks
2026-03-19 23:23 ` Laurent Pinchart
@ 2026-03-23 8:35 ` G.N. Zhou (OSS)
0 siblings, 0 replies; 12+ messages in thread
From: G.N. Zhou (OSS) @ 2026-03-23 8:35 UTC (permalink / raw)
To: Laurent Pinchart, G.N. Zhou (OSS)
Cc: Rui Miguel Silva, Martin Kepplinger, Purism Kernel Team,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam, Philipp Zabel, Frank Li,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Hi Laurent,
Thanks for your review.
> -----Original Message-----
> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Sent: Friday, March 20, 2026 7:23 AM
> To: G.N. Zhou (OSS) <guoniu.zhou@oss.nxp.com>
> Cc: Rui Miguel Silva <rmfrfs@gmail.com>; Martin Kepplinger
> <martink@posteo.de>; Purism Kernel Team <kernel@puri.sm>; Mauro
> Carvalho Chehab <mchehab@kernel.org>; Rob Herring <robh@kernel.org>;
> Krzysztof Kozlowski <krzk+dt@kernel.org>; Conor Dooley
> <conor+dt@kernel.org>; Shawn Guo <shawnguo@kernel.org>; Sascha Hauer
> <s.hauer@pengutronix.de>; Pengutronix Kernel Team
> <kernel@pengutronix.de>; Fabio Estevam <festevam@gmail.com>; Philipp
> Zabel <p.zabel@pengutronix.de>; Frank Li <frank.li@nxp.com>; linux-
> media@vger.kernel.org; devicetree@vger.kernel.org; imx@lists.linux.dev; linux-
> arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use
> devm_clk_bulk_get_all() to fetch clocks
>
> Hi Guoniu,
>
> Thank you for the patch.
>
> On Fri, Dec 05, 2025 at 05:07:44PM +0800, Guoniu Zhou wrote:
> > From: Guoniu Zhou <guoniu.zhou@nxp.com>
> >
> > Use devm_clk_bulk_get_all() helper to simplify clock handle code.
> >
> > No functional changes intended.
> >
> > Reviewed-by: Frank Li <Frank.Li@nxp.com>
> > Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
> > ---
> > drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 55
> > ++++++++++-----------------
> > 1 file changed, 20 insertions(+), 35 deletions(-)
> >
> > diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > index
> >
> 371b4e81328c107269f89da23818ab0abd0179da..0e3a41cd35edfefc51b5631
> e2c36
> > fd76e3e14d83 100644
> > --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > @@ -71,21 +71,6 @@ enum {
> > ST_SUSPENDED = 4,
> > };
> >
> > -enum imx8mq_mipi_csi_clk {
> > - CSI2_CLK_CORE,
> > - CSI2_CLK_ESC,
> > - CSI2_CLK_UI,
> > - CSI2_NUM_CLKS,
> > -};
> > -
> > -static const char * const imx8mq_mipi_csi_clk_id[CSI2_NUM_CLKS] = {
> > - [CSI2_CLK_CORE] = "core",
> > - [CSI2_CLK_ESC] = "esc",
> > - [CSI2_CLK_UI] = "ui",
> > -};
> > -
> > -#define CSI2_NUM_CLKS ARRAY_SIZE(imx8mq_mipi_csi_clk_id)
> > -
> > struct imx8mq_plat_data {
> > int (*enable)(struct csi_state *state, u32 hs_settle);
> > void (*disable)(struct csi_state *state); @@ -111,7 +96,9 @@ struct
> > csi_state {
> > struct device *dev;
> > const struct imx8mq_plat_data *pdata;
> > void __iomem *regs;
> > - struct clk_bulk_data clks[CSI2_NUM_CLKS];
> > + struct clk_bulk_data *clks;
> > + struct clk *esc_clk;
> > + u32 num_clks;
> > struct reset_control *rst;
> > struct regulator *mipi_phy_regulator;
> >
> > @@ -384,24 +371,16 @@ static void imx8mq_mipi_csi_set_params(struct
> csi_state *state)
> > CSI2RX_SEND_LEVEL);
> > }
> >
> > -static int imx8mq_mipi_csi_clk_enable(struct csi_state *state) -{
> > - return clk_bulk_prepare_enable(CSI2_NUM_CLKS, state->clks);
> > -}
> > -
> > -static void imx8mq_mipi_csi_clk_disable(struct csi_state *state) -{
> > - clk_bulk_disable_unprepare(CSI2_NUM_CLKS, state->clks);
> > -}
> > -
> > -static int imx8mq_mipi_csi_clk_get(struct csi_state *state)
> > +static struct clk *find_esc_clk(struct csi_state *state)
>
> imx8mq_mipi_csi_find_esc_clk().
>
> > {
> > unsigned int i;
> >
> > - for (i = 0; i < CSI2_NUM_CLKS; i++)
> > - state->clks[i].id = imx8mq_mipi_csi_clk_id[i];
> > + for (i = 0; i < state->num_clks; i++) {
> > + if (!strcmp(state->clks[i].id, "esc"))
> > + return state->clks[i].clk;
> > + }
> >
> > - return devm_clk_bulk_get(state->dev, CSI2_NUM_CLKS, state->clks);
> > + return ERR_PTR(-ENODEV);
> > }
> >
> > static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state *state, @@
> > -456,7 +435,7 @@ static int imx8mq_mipi_csi_calc_hs_settle(struct csi_state
> *state,
> > * documentation recommends picking a value away from the
> boundaries.
> > * Let's pick the average.
> > */
> > - esc_clk_rate = clk_get_rate(state->clks[CSI2_CLK_ESC].clk);
> > + esc_clk_rate = clk_get_rate(state->esc_clk);
> > if (!esc_clk_rate) {
> > dev_err(state->dev, "Could not get esc clock rate.\n");
> > return -EINVAL;
> > @@ -783,7 +762,7 @@ static void imx8mq_mipi_csi_pm_suspend(struct
> > device *dev)
> >
> > if (state->state & ST_POWERED) {
> > imx8mq_mipi_csi_stop_stream(state);
> > - imx8mq_mipi_csi_clk_disable(state);
> > + clk_bulk_disable_unprepare(state->num_clks, state->clks);
> > state->state &= ~ST_POWERED;
> > }
> >
> > @@ -801,7 +780,7 @@ static int imx8mq_mipi_csi_pm_resume(struct
> device
> > *dev)
> >
> > if (!(state->state & ST_POWERED)) {
> > state->state |= ST_POWERED;
> > - ret = imx8mq_mipi_csi_clk_enable(state);
> > + ret = clk_bulk_prepare_enable(state->num_clks, state->clks);
> > }
> > if (state->state & ST_STREAMING) {
> > sd_state = v4l2_subdev_lock_and_get_active_state(sd);
> > @@ -1027,9 +1006,15 @@ static int imx8mq_mipi_csi_probe(struct
> platform_device *pdev)
> > if (IS_ERR(state->regs))
> > return PTR_ERR(state->regs);
> >
> > - ret = imx8mq_mipi_csi_clk_get(state);
> > + ret = devm_clk_bulk_get_all(dev, &state->clks);
> > if (ret < 0)
> > - return ret;
> > + return dev_err_probe(dev, ret, "Failed to get clocks\n");
> > +
> > + state->num_clks = ret;
> > +
> > + state->esc_clk = find_esc_clk(state);
> > + if (IS_ERR(state->esc_clk))
> > + return dev_err_probe(dev, PTR_ERR(state->esc_clk), "Couldn't
> find
> > +esc clock\n");
>
> This could be line-wrapped.
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> I can make those small changes when applying if there's no other need to
> submit a new version.
Thank you for the review and offer! I have no other changes, so please feel free
to make those adjustments when applying.
>
> >
> > platform_set_drvdata(pdev, &state->sd);
> >
> >
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
` (4 preceding siblings ...)
2025-12-05 9:07 ` [PATCH v10 5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes Guoniu Zhou
@ 2026-03-26 15:20 ` Frank Li
2026-03-26 15:57 ` Frank Li
5 siblings, 1 reply; 12+ messages in thread
From: Frank Li @ 2026-03-26 15:20 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel,
Guoniu Zhou
Cc: Frank Li, linux-media, devicetree, imx, linux-arm-kernel,
linux-kernel, Conor Dooley
On Fri, 05 Dec 2025 17:07:42 +0800, Guoniu Zhou wrote:
> The serial adds MIPI CSI-2 support for i.MX8ULP.
>
>
Applied, thanks!
[5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes
commit: 73f3ca0f85285b2fc4ea05affb9a44bf899cd595
Add extra empty line between reg and child node.
Best regards,
--
Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP
2026-03-26 15:20 ` (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Frank Li
@ 2026-03-26 15:57 ` Frank Li
2026-03-27 3:07 ` G.N. Zhou (OSS)
0 siblings, 1 reply; 12+ messages in thread
From: Frank Li @ 2026-03-26 15:57 UTC (permalink / raw)
To: Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel,
Guoniu Zhou
Cc: linux-media, devicetree, imx, linux-arm-kernel, linux-kernel,
Conor Dooley
On Thu, Mar 26, 2026 at 11:20:54AM -0400, Frank Li wrote:
>
> On Fri, 05 Dec 2025 17:07:42 +0800, Guoniu Zhou wrote:
> > The serial adds MIPI CSI-2 support for i.MX8ULP.
> >
> >
>
> Applied, thanks!
>
> [5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes
> commit: 73f3ca0f85285b2fc4ea05affb9a44bf899cd595
>
> Add extra empty line between reg and child node.
Guoniu Zhou:
I have to drop this one because miss <dt-bindings/reset/imx8ulp-pcc-reset.h>
Do you miss some dependence?
Frank
>
> Best regards,
> --
> Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP
2026-03-26 15:57 ` Frank Li
@ 2026-03-27 3:07 ` G.N. Zhou (OSS)
0 siblings, 0 replies; 12+ messages in thread
From: G.N. Zhou (OSS) @ 2026-03-27 3:07 UTC (permalink / raw)
To: Frank Li, Rui Miguel Silva, Laurent Pinchart, Martin Kepplinger,
Purism Kernel Team, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Philipp Zabel,
G.N. Zhou (OSS)
Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Conor Dooley
Hi Frank,
> -----Original Message-----
> From: Frank Li <frank.li@nxp.com>
> Sent: Thursday, March 26, 2026 11:58 PM
> To: Rui Miguel Silva <rmfrfs@gmail.com>; Laurent Pinchart
> <laurent.pinchart@ideasonboard.com>; Martin Kepplinger
> <martink@posteo.de>; Purism Kernel Team <kernel@puri.sm>; Mauro
> Carvalho Chehab <mchehab@kernel.org>; Rob Herring <robh@kernel.org>;
> Krzysztof Kozlowski <krzk+dt@kernel.org>; Conor Dooley
> <conor+dt@kernel.org>; Shawn Guo <shawnguo@kernel.org>; Sascha Hauer
> <s.hauer@pengutronix.de>; Pengutronix Kernel Team
> <kernel@pengutronix.de>; Fabio Estevam <festevam@gmail.com>; Philipp
> Zabel <p.zabel@pengutronix.de>; G.N. Zhou (OSS)
> <guoniu.zhou@oss.nxp.com>
> Cc: linux-media@vger.kernel.org; devicetree@vger.kernel.org;
> imx@lists.linux.dev; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org; Conor Dooley <conor.dooley@microchip.com>
> Subject: Re: (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP
>
> On Thu, Mar 26, 2026 at 11:20:54AM -0400, Frank Li wrote:
> >
> > On Fri, 05 Dec 2025 17:07:42 +0800, Guoniu Zhou wrote:
> > > The serial adds MIPI CSI-2 support for i.MX8ULP.
> > >
> > >
> >
> > Applied, thanks!
> >
> > [5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes
> > commit: 73f3ca0f85285b2fc4ea05affb9a44bf899cd595
> >
> > Add extra empty line between reg and child node.
>
> Guoniu Zhou:
>
> I have to drop this one because miss <dt-bindings/reset/imx8ulp-pcc-reset.h>
>
> Do you miss some dependence?
Thanks for reporting this issue. You're right that this patch was based on a
tree that still contained include/dt-bindings/reset/imx8ulp-pcc-reset.h.
However, Rob's recent series [1] removed this header file as part of the
dt-bindings cleanup work. I'll send a new version that addresses this change.
[1] https://lore.kernel.org/all/20251212231203.727227-1-robh@kernel.org/
>
> Frank
> >
> > Best regards,
> > --
> > Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-03-27 3:07 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-05 9:07 [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 1/5] media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8ULP compatible string Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks Guoniu Zhou
2026-03-19 23:23 ` Laurent Pinchart
2026-03-23 8:35 ` G.N. Zhou (OSS)
2025-12-05 9:07 ` [PATCH v10 3/5] media: imx8mq-mipi-csi2: Explicitly release reset Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 4/5] media: imx8mq-mipi-csi2: Add support for i.MX8ULP Guoniu Zhou
2025-12-05 9:07 ` [PATCH v10 5/5] arm64: dts: imx8ulp: Add CSI and ISI Nodes Guoniu Zhou
2026-03-26 15:20 ` (subset) [PATCH v10 0/5] Add MIPI CSI-2 support for i.MX8ULP Frank Li
2026-03-26 15:57 ` Frank Li
2026-03-27 3:07 ` G.N. Zhou (OSS)
[not found] <20251205-csi2_imx8ulp-v10-0-69b5c4cebcf8@nxp.com>
[not found] ` <20251205-csi2_imx8ulp-v10-2-69b5c4cebcf8@nxp.com>
2026-03-02 2:09 ` [PATCH v10 2/5] media: imx8mq-mipi-csi2: Use devm_clk_bulk_get_all() to fetch clocks G.N. Zhou (OSS)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox