public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces
@ 2025-12-15 22:49 Frank Li
  2025-12-15 22:49 ` [PATCH v3 1/5] media: nxp: use devm_mutex_init() simple code Frank Li
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Frank Li @ 2025-12-15 22:49 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li

Some trivial patch to reduce goto at probe functions.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Changes in v3:
- rebase to v6.19-rc1
- avoid use __free() == NULL according to cleanup.h
- Link to v2: https://lore.kernel.org/r/20251119-cam_cleanup-v2-0-df732cc83ff1@nxp.com

Changes in v2:
- add new patch media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers
- detail change see each patch's change log.
- Link to v1: https://lore.kernel.org/r/20251117-cam_cleanup-v1-0-6cd42872db79@nxp.com

---
Frank Li (5):
      media: nxp: use devm_mutex_init() simple code
      media: nxp: use dev_err_probe() to simplify code
      media: nxp: imx8-isi: use devm_pm_runtime_enable() to simplify code
      media: nxp: use cleanup  __free(fwnode_handle) simplify code
      media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers

 drivers/media/platform/nxp/imx-mipi-csis.c         | 54 ++++++-------
 drivers/media/platform/nxp/imx-pxp.c               |  5 +-
 drivers/media/platform/nxp/imx7-media-csi.c        | 14 ++--
 .../media/platform/nxp/imx8-isi/imx8-isi-core.c    | 16 ++--
 drivers/media/platform/nxp/imx8mq-mipi-csi2.c      | 88 ++++++++++------------
 drivers/media/platform/nxp/mx2_emmaprp.c           |  7 +-
 6 files changed, 83 insertions(+), 101 deletions(-)
---
base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
change-id: 20250807-cam_cleanup-b6d90ba9dac3

Best regards,
--
Frank Li <Frank.Li@nxp.com>



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 1/5] media: nxp: use devm_mutex_init() simple code
  2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
@ 2025-12-15 22:49 ` Frank Li
  2025-12-15 22:49 ` [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code Frank Li
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Frank Li @ 2025-12-15 22:49 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li

Use devm_mutex_init() simple code. No functional change.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/media/platform/nxp/imx-pxp.c          |  5 ++++-
 drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 11 +++++------
 drivers/media/platform/nxp/mx2_emmaprp.c      |  7 +++----
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/media/platform/nxp/imx-pxp.c b/drivers/media/platform/nxp/imx-pxp.c
index 3f9a67a6bd4d268841f85f9b69af03138300d188..32d39c8013c7eef1f9629f971cc74afecd463ac7 100644
--- a/drivers/media/platform/nxp/imx-pxp.c
+++ b/drivers/media/platform/nxp/imx-pxp.c
@@ -1805,6 +1805,10 @@ static int pxp_probe(struct platform_device *pdev)
 
 	spin_lock_init(&dev->irqlock);
 
+	ret = devm_mutex_init(&pdev->dev, &dev->dev_mutex);
+	if (ret)
+		return ret;
+
 	ret = devm_request_irq(&pdev->dev, irq, pxp_irq_handler, 0,
 			       dev_name(&pdev->dev), dev);
 	if (ret < 0) {
@@ -1831,7 +1835,6 @@ static int pxp_probe(struct platform_device *pdev)
 		goto err_clk;
 
 	atomic_set(&dev->num_inst, 0);
-	mutex_init(&dev->dev_mutex);
 
 	dev->vfd = pxp_videodev;
 	vfd = &dev->vfd;
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index 371b4e81328c107269f89da23818ab0abd0179da..0851f4a9ae52d3096f454da643cfdc5017e000b1 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -1033,15 +1033,17 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, &state->sd);
 
-	mutex_init(&state->lock);
+	ret = devm_mutex_init(dev, &state->lock);
+	if (ret)
+		return ret;
 
 	ret = imx8mq_mipi_csi_subdev_init(state);
 	if (ret < 0)
-		goto mutex;
+		return ret;
 
 	ret = imx8mq_mipi_csi_init_icc(pdev);
 	if (ret)
-		goto mutex;
+		return ret;
 
 	/* Enable runtime PM. */
 	pm_runtime_enable(dev);
@@ -1068,8 +1070,6 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
 	v4l2_async_unregister_subdev(&state->sd);
 icc:
 	imx8mq_mipi_csi_release_icc(pdev);
-mutex:
-	mutex_destroy(&state->lock);
 
 	return ret;
 }
@@ -1087,7 +1087,6 @@ static void imx8mq_mipi_csi_remove(struct platform_device *pdev)
 	imx8mq_mipi_csi_runtime_suspend(&pdev->dev);
 	media_entity_cleanup(&state->sd.entity);
 	v4l2_subdev_cleanup(&state->sd);
-	mutex_destroy(&state->lock);
 	pm_runtime_set_suspended(&pdev->dev);
 	imx8mq_mipi_csi_release_icc(pdev);
 }
diff --git a/drivers/media/platform/nxp/mx2_emmaprp.c b/drivers/media/platform/nxp/mx2_emmaprp.c
index 02d57229b9b3a600303cc0429e102139385071d6..384a2672884e96d17cca542ef51fbef62328b66a 100644
--- a/drivers/media/platform/nxp/mx2_emmaprp.c
+++ b/drivers/media/platform/nxp/mx2_emmaprp.c
@@ -824,7 +824,9 @@ static int emmaprp_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	mutex_init(&pcdev->dev_mutex);
+	ret = devm_mutex_init(&pdev->dev, &pcdev->dev_mutex);
+	if (ret)
+		return ret;
 
 	vfd = video_device_alloc();
 	if (!vfd) {
@@ -878,8 +880,6 @@ static int emmaprp_probe(struct platform_device *pdev)
 unreg_dev:
 	v4l2_device_unregister(&pcdev->v4l2_dev);
 
-	mutex_destroy(&pcdev->dev_mutex);
-
 	return ret;
 }
 
@@ -892,7 +892,6 @@ static void emmaprp_remove(struct platform_device *pdev)
 	video_unregister_device(pcdev->vfd);
 	v4l2_m2m_release(pcdev->m2m_dev);
 	v4l2_device_unregister(&pcdev->v4l2_dev);
-	mutex_destroy(&pcdev->dev_mutex);
 }
 
 static struct platform_driver emmaprp_pdrv = {

-- 
2.34.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code
  2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
  2025-12-15 22:49 ` [PATCH v3 1/5] media: nxp: use devm_mutex_init() simple code Frank Li
@ 2025-12-15 22:49 ` Frank Li
  2025-12-16  7:34   ` Alexander Stein
  2025-12-15 22:49 ` [PATCH v3 3/5] media: nxp: imx8-isi: use devm_pm_runtime_enable() " Frank Li
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Frank Li @ 2025-12-15 22:49 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li

Use dev_err_probe() to simplify the code. Drop the explicit error message
after returning from imx8mq_mipi_csi_parse_dt(), as the error is already
reported by this helper.

No functional change.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
change in v2:
- add  Laurent Pinchart review tags
- wrap error message to new line
- remove error code print in dev_err_probe();
- drop error messaage at imx8mq_mipi_csi_parse_dt()
---
 drivers/media/platform/nxp/imx-mipi-csis.c    |  6 ++---
 drivers/media/platform/nxp/imx7-media-csi.c   | 14 ++++--------
 drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 33 ++++++++++++---------------
 3 files changed, 21 insertions(+), 32 deletions(-)

diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
index 088b2945aee33731c565f049dd17721356300b84..ce93d868746f002c22e2f86b1e0aa84ec1a76061 100644
--- a/drivers/media/platform/nxp/imx-mipi-csis.c
+++ b/drivers/media/platform/nxp/imx-mipi-csis.c
@@ -1547,10 +1547,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
 	/* Now that the hardware is initialized, request the interrupt. */
 	ret = devm_request_irq(dev, irq, mipi_csis_irq_handler, 0,
 			       dev_name(dev), csis);
-	if (ret) {
-		dev_err(dev, "Interrupt request failed\n");
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "Interrupt request failed\n");
 
 	/* Initialize and register the subdev. */
 	ret = mipi_csis_subdev_init(csis);
diff --git a/drivers/media/platform/nxp/imx7-media-csi.c b/drivers/media/platform/nxp/imx7-media-csi.c
index 933a5f39f9f4c9b43ca8d2a1819d0145981266e6..7ddc7ba06e3d4e007013821f67d783898a15461f 100644
--- a/drivers/media/platform/nxp/imx7-media-csi.c
+++ b/drivers/media/platform/nxp/imx7-media-csi.c
@@ -2218,11 +2218,9 @@ static int imx7_csi_probe(struct platform_device *pdev)
 
 	/* Acquire resources and install interrupt handler. */
 	csi->mclk = devm_clk_get(&pdev->dev, "mclk");
-	if (IS_ERR(csi->mclk)) {
-		ret = PTR_ERR(csi->mclk);
-		dev_err(dev, "Failed to get mclk: %d", ret);
-		return ret;
-	}
+	if (IS_ERR(csi->mclk))
+		return dev_err_probe(dev, PTR_ERR(csi->mclk),
+				     "Failed to get mclk\n");
 
 	csi->irq = platform_get_irq(pdev, 0);
 	if (csi->irq < 0)
@@ -2236,10 +2234,8 @@ static int imx7_csi_probe(struct platform_device *pdev)
 
 	ret = devm_request_irq(dev, csi->irq, imx7_csi_irq_handler, 0, "csi",
 			       (void *)csi);
-	if (ret < 0) {
-		dev_err(dev, "Request CSI IRQ failed.\n");
-		return ret;
-	}
+	if (ret < 0)
+		return dev_err_probe(dev, ret, "Request CSI IRQ failed.\n");
 
 	/* Initialize all the media device infrastructure. */
 	ret = imx7_csi_media_init(csi);
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index 0851f4a9ae52d3096f454da643cfdc5017e000b1..a007c582b4d91660a97910a6a0d53c9b6fcd73e9 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -951,10 +951,9 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
 	int ret = 0;
 
 	state->rst = devm_reset_control_array_get_exclusive(dev);
-	if (IS_ERR(state->rst)) {
-		dev_err(dev, "Failed to get reset: %pe\n", state->rst);
-		return PTR_ERR(state->rst);
-	}
+	if (IS_ERR(state->rst))
+		return dev_err_probe(dev, PTR_ERR(state->rst),
+				     "Failed to get reset\n");
 
 	if (state->pdata->use_reg_csr) {
 		const struct regmap_config regmap_config = {
@@ -977,24 +976,22 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
 
 	ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val,
 					 ARRAY_SIZE(out_val));
-	if (ret) {
-		dev_err(dev, "no fsl,mipi-phy-gpr property found: %d\n", ret);
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "no %s property found\n",
+				    "fsl,mipi-phy-gpr");
 
 	ph = *out_val;
 
 	node = of_find_node_by_phandle(ph);
-	if (!node) {
-		dev_err(dev, "Error finding node by phandle\n");
-		return -ENODEV;
-	}
+	if (!node)
+		return dev_err_probe(dev, -ENODEV,
+				     "Error finding node by phandle\n");
+
 	state->phy_gpr = syscon_node_to_regmap(node);
 	of_node_put(node);
-	if (IS_ERR(state->phy_gpr)) {
-		dev_err(dev, "failed to get gpr regmap: %pe\n", state->phy_gpr);
-		return PTR_ERR(state->phy_gpr);
-	}
+	if (IS_ERR(state->phy_gpr))
+		return dev_err_probe(dev, PTR_ERR(state->phy_gpr),
+				     "failed to get gpr regmap\n");
 
 	state->phy_gpr_reg = out_val[1];
 	dev_dbg(dev, "phy gpr register set to 0x%x\n", state->phy_gpr_reg);
@@ -1017,10 +1014,8 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
 	state->pdata = of_device_get_match_data(dev);
 
 	ret = imx8mq_mipi_csi_parse_dt(state);
-	if (ret < 0) {
-		dev_err(dev, "Failed to parse device tree: %d\n", ret);
+	if (ret < 0)
 		return ret;
-	}
 
 	/* Acquire resources. */
 	state->regs = devm_platform_ioremap_resource(pdev, 0);

-- 
2.34.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 3/5] media: nxp: imx8-isi: use devm_pm_runtime_enable() to simplify code
  2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
  2025-12-15 22:49 ` [PATCH v3 1/5] media: nxp: use devm_mutex_init() simple code Frank Li
  2025-12-15 22:49 ` [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code Frank Li
@ 2025-12-15 22:49 ` Frank Li
  2025-12-15 22:49 ` [PATCH v3 4/5] media: nxp: use cleanup __free(fwnode_handle) " Frank Li
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Frank Li @ 2025-12-15 22:49 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li

Use devm_pm_runtime_enable() to simplify code. Change to use
dev_err_probe() because previous goto change to return.

No functional change.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
change in v2
- remove error code print at dev_err_probe.
---
 drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
index c3d411ddf492eb27b372763ce5d344a90c6ec524..486092511d1f9381c250ddcf844fc74c61a789b7 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
@@ -499,13 +499,14 @@ static int mxc_isi_probe(struct platform_device *pdev)
 	dma_size = isi->pdata->has_36bit_dma ? 36 : 32;
 	dma_set_mask_and_coherent(dev, DMA_BIT_MASK(dma_size));
 
-	pm_runtime_enable(dev);
+	ret = devm_pm_runtime_enable(dev);
+	if (ret)
+		return ret;
 
 	ret = mxc_isi_crossbar_init(isi);
-	if (ret) {
-		dev_err(dev, "Failed to initialize crossbar: %d\n", ret);
-		goto err_pm;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret,
+				     "Failed to initialize crossbar\n");
 
 	for (i = 0; i < isi->pdata->num_channels; ++i) {
 		ret = mxc_isi_pipe_init(isi, i);
@@ -528,8 +529,7 @@ static int mxc_isi_probe(struct platform_device *pdev)
 
 err_xbar:
 	mxc_isi_crossbar_cleanup(&isi->crossbar);
-err_pm:
-	pm_runtime_disable(isi->dev);
+
 	return ret;
 }
 
@@ -548,8 +548,6 @@ static void mxc_isi_remove(struct platform_device *pdev)
 
 	mxc_isi_crossbar_cleanup(&isi->crossbar);
 	mxc_isi_v4l2_cleanup(isi);
-
-	pm_runtime_disable(isi->dev);
 }
 
 static const struct of_device_id mxc_isi_of_match[] = {

-- 
2.34.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 4/5] media: nxp: use cleanup __free(fwnode_handle) simplify code
  2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
                   ` (2 preceding siblings ...)
  2025-12-15 22:49 ` [PATCH v3 3/5] media: nxp: imx8-isi: use devm_pm_runtime_enable() " Frank Li
@ 2025-12-15 22:49 ` Frank Li
  2025-12-15 22:49 ` [PATCH v3 5/5] media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers Frank Li
  2026-01-12 15:06 ` [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
  5 siblings, 0 replies; 12+ messages in thread
From: Frank Li @ 2025-12-15 22:49 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li

Use cleanup __free(fwnode_handle) simplify code. No functional change.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
change in v3
- Rollback to v1 version to align guide at cleanup.h.
- Ref similar link

    Link: https://lore.kernel.org/r/20240904044825.1048256-1-dmitry.torokhov@gmail.com
    Link: https://patch.msgid.link/20251208020750.4727-3-krzysztof.kozlowski@oss.qualcomm.com

452e0adff2618 Input: iqs7222 - use cleanup facility for fwnodes
52776177d8b7e Input: iqs626a - use cleanup facility for fwnodes
9a540b67a9c26 Input: iqs269a - use cleanup facility for fwnodes
cc3b18f9fedec i3c: master: Fix confusing cleanup.h syntax

change in v2.
- move variable define to top.
- remove dev_err_probe() change
---
 drivers/media/platform/nxp/imx-mipi-csis.c    | 25 ++++++++-----------------
 drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 25 ++++++++-----------------
 2 files changed, 16 insertions(+), 34 deletions(-)

diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
index ce93d868746f002c22e2f86b1e0aa84ec1a76061..9a43fd1eb0bcee7ac0c47f28ad89012de45a70d9 100644
--- a/drivers/media/platform/nxp/imx-mipi-csis.c
+++ b/drivers/media/platform/nxp/imx-mipi-csis.c
@@ -12,6 +12,7 @@
  *
  */
 
+#include <linux/cleanup.h>
 #include <linux/clk.h>
 #include <linux/debugfs.h>
 #include <linux/delay.h>
@@ -1349,27 +1350,26 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
 		.bus_type = V4L2_MBUS_CSI2_DPHY,
 	};
 	struct v4l2_async_connection *asd;
-	struct fwnode_handle *ep;
 	unsigned int i;
 	int ret;
 
 	v4l2_async_subdev_nf_init(&csis->notifier, &csis->sd);
 
-	ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(csis->dev), 0, 0,
-					     FWNODE_GRAPH_ENDPOINT_NEXT);
+	struct fwnode_handle *ep __free(fwnode_handle) =
+		fwnode_graph_get_endpoint_by_id(dev_fwnode(csis->dev), 0, 0,
+						FWNODE_GRAPH_ENDPOINT_NEXT);
 	if (!ep)
 		return -ENOTCONN;
 
 	ret = v4l2_fwnode_endpoint_parse(ep, &vep);
 	if (ret)
-		goto err_parse;
+		return ret;
 
 	for (i = 0; i < vep.bus.mipi_csi2.num_data_lanes; ++i) {
 		if (vep.bus.mipi_csi2.data_lanes[i] != i + 1) {
 			dev_err(csis->dev,
 				"data lanes reordering is not supported");
-			ret = -EINVAL;
-			goto err_parse;
+			return -EINVAL;
 		}
 	}
 
@@ -1381,12 +1381,8 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
 
 	asd = v4l2_async_nf_add_fwnode_remote(&csis->notifier, ep,
 					      struct v4l2_async_connection);
-	if (IS_ERR(asd)) {
-		ret = PTR_ERR(asd);
-		goto err_parse;
-	}
-
-	fwnode_handle_put(ep);
+	if (IS_ERR(asd))
+		return PTR_ERR(asd);
 
 	csis->notifier.ops = &mipi_csis_notify_ops;
 
@@ -1395,11 +1391,6 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
 		return ret;
 
 	return v4l2_async_register_subdev(&csis->sd);
-
-err_parse:
-	fwnode_handle_put(ep);
-
-	return ret;
 }
 
 /* -----------------------------------------------------------------------------
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index a007c582b4d91660a97910a6a0d53c9b6fcd73e9..550f9f725cc18fae910282ad72aa1dde37af0b47 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -6,6 +6,7 @@
  */
 
 #include <linux/bitfield.h>
+#include <linux/cleanup.h>
 #include <linux/clk.h>
 #include <linux/clk-provider.h>
 #include <linux/delay.h>
@@ -717,27 +718,26 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
 		.bus_type = V4L2_MBUS_CSI2_DPHY,
 	};
 	struct v4l2_async_connection *asd;
-	struct fwnode_handle *ep;
 	unsigned int i;
 	int ret;
 
 	v4l2_async_subdev_nf_init(&state->notifier, &state->sd);
 
-	ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
-					     FWNODE_GRAPH_ENDPOINT_NEXT);
+	struct fwnode_handle *ep __free(fwnode_handle) =
+		fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
+						FWNODE_GRAPH_ENDPOINT_NEXT);
 	if (!ep)
 		return -ENOTCONN;
 
 	ret = v4l2_fwnode_endpoint_parse(ep, &vep);
 	if (ret)
-		goto err_parse;
+		return ret;
 
 	for (i = 0; i < vep.bus.mipi_csi2.num_data_lanes; ++i) {
 		if (vep.bus.mipi_csi2.data_lanes[i] != i + 1) {
 			dev_err(state->dev,
 				"data lanes reordering is not supported");
-			ret = -EINVAL;
-			goto err_parse;
+			return -EINVAL;
 		}
 	}
 
@@ -749,12 +749,8 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
 
 	asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep,
 					      struct v4l2_async_connection);
-	if (IS_ERR(asd)) {
-		ret = PTR_ERR(asd);
-		goto err_parse;
-	}
-
-	fwnode_handle_put(ep);
+	if (IS_ERR(asd))
+		return PTR_ERR(asd);
 
 	state->notifier.ops = &imx8mq_mipi_csi_notify_ops;
 
@@ -763,11 +759,6 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
 		return ret;
 
 	return v4l2_async_register_subdev(&state->sd);
-
-err_parse:
-	fwnode_handle_put(ep);
-
-	return ret;
 }
 
 /* -----------------------------------------------------------------------------

-- 
2.34.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 5/5] media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers
  2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
                   ` (3 preceding siblings ...)
  2025-12-15 22:49 ` [PATCH v3 4/5] media: nxp: use cleanup __free(fwnode_handle) " Frank Li
@ 2025-12-15 22:49 ` Frank Li
  2026-01-12 15:06 ` [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
  5 siblings, 0 replies; 12+ messages in thread
From: Frank Li @ 2025-12-15 22:49 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li

Add dev_err_probe() to all error branches in the *async_register() helpers
to provide clearer diagnostic information when device registration fails.

Drop the explicit error message after returning from
mipi_csis_async_register(), as the error is already reported by this
helper.

No functional change.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
change in v2
- new patch
---
 drivers/media/platform/nxp/imx-mipi-csis.c    | 31 ++++++++++++++++-----------
 drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 27 ++++++++++++++---------
 2 files changed, 35 insertions(+), 23 deletions(-)

diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
index 9a43fd1eb0bcee7ac0c47f28ad89012de45a70d9..85098824f4917b3cda3aa71c4ed0a41939283e12 100644
--- a/drivers/media/platform/nxp/imx-mipi-csis.c
+++ b/drivers/media/platform/nxp/imx-mipi-csis.c
@@ -1359,18 +1359,18 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
 		fwnode_graph_get_endpoint_by_id(dev_fwnode(csis->dev), 0, 0,
 						FWNODE_GRAPH_ENDPOINT_NEXT);
 	if (!ep)
-		return -ENOTCONN;
+		return dev_err_probe(csis->dev, -ENOTCONN,
+				     "failed to get remote endpoint\n");
 
 	ret = v4l2_fwnode_endpoint_parse(ep, &vep);
 	if (ret)
-		return ret;
+		return dev_err_probe(csis->dev, ret,
+				     "failed to parse endpoint\n");
 
 	for (i = 0; i < vep.bus.mipi_csi2.num_data_lanes; ++i) {
-		if (vep.bus.mipi_csi2.data_lanes[i] != i + 1) {
-			dev_err(csis->dev,
-				"data lanes reordering is not supported");
-			return -EINVAL;
-		}
+		if (vep.bus.mipi_csi2.data_lanes[i] != i + 1)
+			return dev_err_probe(csis->dev, -EINVAL,
+					     "data lanes reordering is not supported");
 	}
 
 	csis->bus = vep.bus.mipi_csi2;
@@ -1382,15 +1382,22 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
 	asd = v4l2_async_nf_add_fwnode_remote(&csis->notifier, ep,
 					      struct v4l2_async_connection);
 	if (IS_ERR(asd))
-		return PTR_ERR(asd);
+		return dev_err_probe(csis->dev, PTR_ERR(asd),
+				     "failed to add remote fwmode to notifier\n");
 
 	csis->notifier.ops = &mipi_csis_notify_ops;
 
 	ret = v4l2_async_nf_register(&csis->notifier);
 	if (ret)
-		return ret;
+		return dev_err_probe(csis->dev, ret,
+				     "failed to register notifier\n");
 
-	return v4l2_async_register_subdev(&csis->sd);
+	ret = v4l2_async_register_subdev(&csis->sd);
+	if (ret)
+		return dev_err_probe(csis->dev, ret,
+				     "failed to register subdev\n");
+
+	return 0;
 }
 
 /* -----------------------------------------------------------------------------
@@ -1549,10 +1556,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, &csis->sd);
 
 	ret = mipi_csis_async_register(csis);
-	if (ret < 0) {
-		dev_err(dev, "async register failed: %d\n", ret);
+	if (ret < 0)
 		goto err_cleanup;
-	}
 
 	/* Initialize debugfs. */
 	mipi_csis_debugfs_init(csis);
diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
index 550f9f725cc18fae910282ad72aa1dde37af0b47..f63e0fb1f3091d560dba10dec92523fc74fb6384 100644
--- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
+++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
@@ -727,18 +727,18 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
 		fwnode_graph_get_endpoint_by_id(dev_fwnode(state->dev), 0, 0,
 						FWNODE_GRAPH_ENDPOINT_NEXT);
 	if (!ep)
-		return -ENOTCONN;
+		return dev_err_probe(state->dev, -ENOTCONN,
+				     "failed to get remote endpoint fwnode\n");
 
 	ret = v4l2_fwnode_endpoint_parse(ep, &vep);
 	if (ret)
-		return ret;
+		return dev_err_probe(state->dev, ret,
+				     "failed parse endpoint fwnode\n");
 
 	for (i = 0; i < vep.bus.mipi_csi2.num_data_lanes; ++i) {
-		if (vep.bus.mipi_csi2.data_lanes[i] != i + 1) {
-			dev_err(state->dev,
-				"data lanes reordering is not supported");
-			return -EINVAL;
-		}
+		if (vep.bus.mipi_csi2.data_lanes[i] != i + 1)
+			return dev_err_probe(state->dev, -EINVAL,
+					     "data lanes reordering is not supported");
 	}
 
 	state->bus = vep.bus.mipi_csi2;
@@ -750,15 +750,22 @@ static int imx8mq_mipi_csi_async_register(struct csi_state *state)
 	asd = v4l2_async_nf_add_fwnode_remote(&state->notifier, ep,
 					      struct v4l2_async_connection);
 	if (IS_ERR(asd))
-		return PTR_ERR(asd);
+		return dev_err_probe(state->dev, PTR_ERR(asd),
+				     "failed add fwnode to notifier\n");
 
 	state->notifier.ops = &imx8mq_mipi_csi_notify_ops;
 
 	ret = v4l2_async_nf_register(&state->notifier);
 	if (ret)
-		return ret;
+		return dev_err_probe(state->dev, ret,
+				     "failed to register notifier\n");
 
-	return v4l2_async_register_subdev(&state->sd);
+	ret = v4l2_async_register_subdev(&state->sd);
+	if (ret)
+		return dev_err_probe(state->dev, ret,
+				     "failed to register subdev\n");
+
+	return 0;
 }
 
 /* -----------------------------------------------------------------------------

-- 
2.34.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code
  2025-12-15 22:49 ` [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code Frank Li
@ 2025-12-16  7:34   ` Alexander Stein
  2025-12-16 14:46     ` Frank Li
  0 siblings, 1 reply; 12+ messages in thread
From: Alexander Stein @ 2025-12-16  7:34 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team,
	linux-arm-kernel
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel, Frank Li,
	Frank Li

[-- Attachment #1: Type: text/plain, Size: 5921 bytes --]

Hi,

Am Montag, 15. Dezember 2025, 23:49:53 CET schrieb Frank Li:
> Use dev_err_probe() to simplify the code. Drop the explicit error message
> after returning from imx8mq_mipi_csi_parse_dt(), as the error is already
> reported by this helper.
> 
> No functional change.
> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> change in v2:
> - add  Laurent Pinchart review tags
> - wrap error message to new line
> - remove error code print in dev_err_probe();
> - drop error messaage at imx8mq_mipi_csi_parse_dt()
> ---
>  drivers/media/platform/nxp/imx-mipi-csis.c    |  6 ++---
>  drivers/media/platform/nxp/imx7-media-csi.c   | 14 ++++--------
>  drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 33 ++++++++++++---------------
>  3 files changed, 21 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
> index 088b2945aee33731c565f049dd17721356300b84..ce93d868746f002c22e2f86b1e0aa84ec1a76061 100644
> --- a/drivers/media/platform/nxp/imx-mipi-csis.c
> +++ b/drivers/media/platform/nxp/imx-mipi-csis.c
> @@ -1547,10 +1547,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
>  	/* Now that the hardware is initialized, request the interrupt. */
>  	ret = devm_request_irq(dev, irq, mipi_csis_irq_handler, 0,
>  			       dev_name(dev), csis);
> -	if (ret) {
> -		dev_err(dev, "Interrupt request failed\n");
> -		return ret;
> -	}
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Interrupt request failed\n");
>  
>  	/* Initialize and register the subdev. */
>  	ret = mipi_csis_subdev_init(csis);
> diff --git a/drivers/media/platform/nxp/imx7-media-csi.c b/drivers/media/platform/nxp/imx7-media-csi.c
> index 933a5f39f9f4c9b43ca8d2a1819d0145981266e6..7ddc7ba06e3d4e007013821f67d783898a15461f 100644
> --- a/drivers/media/platform/nxp/imx7-media-csi.c
> +++ b/drivers/media/platform/nxp/imx7-media-csi.c
> @@ -2218,11 +2218,9 @@ static int imx7_csi_probe(struct platform_device *pdev)
>  
>  	/* Acquire resources and install interrupt handler. */
>  	csi->mclk = devm_clk_get(&pdev->dev, "mclk");
> -	if (IS_ERR(csi->mclk)) {
> -		ret = PTR_ERR(csi->mclk);
> -		dev_err(dev, "Failed to get mclk: %d", ret);
> -		return ret;
> -	}
> +	if (IS_ERR(csi->mclk))
> +		return dev_err_probe(dev, PTR_ERR(csi->mclk),
> +				     "Failed to get mclk\n");
>  
>  	csi->irq = platform_get_irq(pdev, 0);
>  	if (csi->irq < 0)
> @@ -2236,10 +2234,8 @@ static int imx7_csi_probe(struct platform_device *pdev)
>  
>  	ret = devm_request_irq(dev, csi->irq, imx7_csi_irq_handler, 0, "csi",
>  			       (void *)csi);
> -	if (ret < 0) {
> -		dev_err(dev, "Request CSI IRQ failed.\n");
> -		return ret;
> -	}
> +	if (ret < 0)
> +		return dev_err_probe(dev, ret, "Request CSI IRQ failed.\n");
>  
>  	/* Initialize all the media device infrastructure. */
>  	ret = imx7_csi_media_init(csi);
> diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> index 0851f4a9ae52d3096f454da643cfdc5017e000b1..a007c582b4d91660a97910a6a0d53c9b6fcd73e9 100644
> --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> @@ -951,10 +951,9 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
>  	int ret = 0;
>  
>  	state->rst = devm_reset_control_array_get_exclusive(dev);
> -	if (IS_ERR(state->rst)) {
> -		dev_err(dev, "Failed to get reset: %pe\n", state->rst);
> -		return PTR_ERR(state->rst);
> -	}
> +	if (IS_ERR(state->rst))
> +		return dev_err_probe(dev, PTR_ERR(state->rst),
> +				     "Failed to get reset\n");
>  
>  	if (state->pdata->use_reg_csr) {
>  		const struct regmap_config regmap_config = {
> @@ -977,24 +976,22 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
>  
>  	ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val,
>  					 ARRAY_SIZE(out_val));
> -	if (ret) {
> -		dev_err(dev, "no fsl,mipi-phy-gpr property found: %d\n", ret);
> -		return ret;
> -	}
> +	if (ret)
> +		return dev_err_probe(dev, ret, "no %s property found\n",
> +				    "fsl,mipi-phy-gpr");

Do you really need to pass the (fixed) property name as an argument? Why
not move into the const string directly? I would also rephrase it a bit:
"property fsl,mipi-phy-gpr not found"

With that fixed:
Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>

>  
>  	ph = *out_val;
>  
>  	node = of_find_node_by_phandle(ph);
> -	if (!node) {
> -		dev_err(dev, "Error finding node by phandle\n");
> -		return -ENODEV;
> -	}
> +	if (!node)
> +		return dev_err_probe(dev, -ENODEV,
> +				     "Error finding node by phandle\n");
> +
>  	state->phy_gpr = syscon_node_to_regmap(node);
>  	of_node_put(node);
> -	if (IS_ERR(state->phy_gpr)) {
> -		dev_err(dev, "failed to get gpr regmap: %pe\n", state->phy_gpr);
> -		return PTR_ERR(state->phy_gpr);
> -	}
> +	if (IS_ERR(state->phy_gpr))
> +		return dev_err_probe(dev, PTR_ERR(state->phy_gpr),
> +				     "failed to get gpr regmap\n");
>  
>  	state->phy_gpr_reg = out_val[1];
>  	dev_dbg(dev, "phy gpr register set to 0x%x\n", state->phy_gpr_reg);
> @@ -1017,10 +1014,8 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
>  	state->pdata = of_device_get_match_data(dev);
>  
>  	ret = imx8mq_mipi_csi_parse_dt(state);
> -	if (ret < 0) {
> -		dev_err(dev, "Failed to parse device tree: %d\n", ret);
> +	if (ret < 0)
>  		return ret;
> -	}
>  
>  	/* Acquire resources. */
>  	state->regs = devm_platform_ioremap_resource(pdev, 0);
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code
  2025-12-16  7:34   ` Alexander Stein
@ 2025-12-16 14:46     ` Frank Li
  2025-12-16 14:50       ` Alexander Stein
  0 siblings, 1 reply; 12+ messages in thread
From: Frank Li @ 2025-12-16 14:46 UTC (permalink / raw)
  To: Alexander Stein
  Cc: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team,
	linux-arm-kernel, linux-media, imx, linux-kernel

On Tue, Dec 16, 2025 at 08:34:18AM +0100, Alexander Stein wrote:
> Hi,
>
> Am Montag, 15. Dezember 2025, 23:49:53 CET schrieb Frank Li:
> > Use dev_err_probe() to simplify the code. Drop the explicit error message
> > after returning from imx8mq_mipi_csi_parse_dt(), as the error is already
> > reported by this helper.
> >
> > No functional change.
> >
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > ---
> > change in v2:
> > - add  Laurent Pinchart review tags
> > - wrap error message to new line
> > - remove error code print in dev_err_probe();
> > - drop error messaage at imx8mq_mipi_csi_parse_dt()
> > ---
> >  drivers/media/platform/nxp/imx-mipi-csis.c    |  6 ++---
> >  drivers/media/platform/nxp/imx7-media-csi.c   | 14 ++++--------
> >  drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 33 ++++++++++++---------------
> >  3 files changed, 21 insertions(+), 32 deletions(-)
> >
> > diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
> > index 088b2945aee33731c565f049dd17721356300b84..ce93d868746f002c22e2f86b1e0aa84ec1a76061 100644
> > --- a/drivers/media/platform/nxp/imx-mipi-csis.c
> > +++ b/drivers/media/platform/nxp/imx-mipi-csis.c
> > @@ -1547,10 +1547,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
> >  	/* Now that the hardware is initialized, request the interrupt. */
> >  	ret = devm_request_irq(dev, irq, mipi_csis_irq_handler, 0,
> >  			       dev_name(dev), csis);
> > -	if (ret) {
> > -		dev_err(dev, "Interrupt request failed\n");
> > -		return ret;
> > -	}
> > +	if (ret)
> > +		return dev_err_probe(dev, ret, "Interrupt request failed\n");
> >
> >  	/* Initialize and register the subdev. */
> >  	ret = mipi_csis_subdev_init(csis);
> > diff --git a/drivers/media/platform/nxp/imx7-media-csi.c b/drivers/media/platform/nxp/imx7-media-csi.c
> > index 933a5f39f9f4c9b43ca8d2a1819d0145981266e6..7ddc7ba06e3d4e007013821f67d783898a15461f 100644
> > --- a/drivers/media/platform/nxp/imx7-media-csi.c
> > +++ b/drivers/media/platform/nxp/imx7-media-csi.c
> > @@ -2218,11 +2218,9 @@ static int imx7_csi_probe(struct platform_device *pdev)
> >
> >  	/* Acquire resources and install interrupt handler. */
> >  	csi->mclk = devm_clk_get(&pdev->dev, "mclk");
> > -	if (IS_ERR(csi->mclk)) {
> > -		ret = PTR_ERR(csi->mclk);
> > -		dev_err(dev, "Failed to get mclk: %d", ret);
> > -		return ret;
> > -	}
> > +	if (IS_ERR(csi->mclk))
> > +		return dev_err_probe(dev, PTR_ERR(csi->mclk),
> > +				     "Failed to get mclk\n");
> >
> >  	csi->irq = platform_get_irq(pdev, 0);
> >  	if (csi->irq < 0)
> > @@ -2236,10 +2234,8 @@ static int imx7_csi_probe(struct platform_device *pdev)
> >
> >  	ret = devm_request_irq(dev, csi->irq, imx7_csi_irq_handler, 0, "csi",
> >  			       (void *)csi);
> > -	if (ret < 0) {
> > -		dev_err(dev, "Request CSI IRQ failed.\n");
> > -		return ret;
> > -	}
> > +	if (ret < 0)
> > +		return dev_err_probe(dev, ret, "Request CSI IRQ failed.\n");
> >
> >  	/* Initialize all the media device infrastructure. */
> >  	ret = imx7_csi_media_init(csi);
> > diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > index 0851f4a9ae52d3096f454da643cfdc5017e000b1..a007c582b4d91660a97910a6a0d53c9b6fcd73e9 100644
> > --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > @@ -951,10 +951,9 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> >  	int ret = 0;
> >
> >  	state->rst = devm_reset_control_array_get_exclusive(dev);
> > -	if (IS_ERR(state->rst)) {
> > -		dev_err(dev, "Failed to get reset: %pe\n", state->rst);
> > -		return PTR_ERR(state->rst);
> > -	}
> > +	if (IS_ERR(state->rst))
> > +		return dev_err_probe(dev, PTR_ERR(state->rst),
> > +				     "Failed to get reset\n");
> >
> >  	if (state->pdata->use_reg_csr) {
> >  		const struct regmap_config regmap_config = {
> > @@ -977,24 +976,22 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> >
> >  	ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val,
> >  					 ARRAY_SIZE(out_val));
> > -	if (ret) {
> > -		dev_err(dev, "no fsl,mipi-phy-gpr property found: %d\n", ret);
> > -		return ret;
> > -	}
> > +	if (ret)
> > +		return dev_err_probe(dev, ret, "no %s property found\n",
> > +				    "fsl,mipi-phy-gpr");
>
> Do you really need to pass the (fixed) property name as an argument? Why
> not move into the const string directly? I would also rephrase it a bit:
> "property fsl,mipi-phy-gpr not found"

Laurent Pinchart provide comments at previous version. The same
"fsl,mipi-phy-gpr" share one entry at RO region. slice save RO region
space.

https://lore.kernel.org/imx/20251119043307.GH17526@pendragon.ideasonboard.com/

Frank

>
> With that fixed:
> Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
>
> >
> >  	ph = *out_val;
> >
> >  	node = of_find_node_by_phandle(ph);
> > -	if (!node) {
> > -		dev_err(dev, "Error finding node by phandle\n");
> > -		return -ENODEV;
> > -	}
> > +	if (!node)
> > +		return dev_err_probe(dev, -ENODEV,
> > +				     "Error finding node by phandle\n");
> > +
> >  	state->phy_gpr = syscon_node_to_regmap(node);
> >  	of_node_put(node);
> > -	if (IS_ERR(state->phy_gpr)) {
> > -		dev_err(dev, "failed to get gpr regmap: %pe\n", state->phy_gpr);
> > -		return PTR_ERR(state->phy_gpr);
> > -	}
> > +	if (IS_ERR(state->phy_gpr))
> > +		return dev_err_probe(dev, PTR_ERR(state->phy_gpr),
> > +				     "failed to get gpr regmap\n");
> >
> >  	state->phy_gpr_reg = out_val[1];
> >  	dev_dbg(dev, "phy gpr register set to 0x%x\n", state->phy_gpr_reg);
> > @@ -1017,10 +1014,8 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
> >  	state->pdata = of_device_get_match_data(dev);
> >
> >  	ret = imx8mq_mipi_csi_parse_dt(state);
> > -	if (ret < 0) {
> > -		dev_err(dev, "Failed to parse device tree: %d\n", ret);
> > +	if (ret < 0)
> >  		return ret;
> > -	}
> >
> >  	/* Acquire resources. */
> >  	state->regs = devm_platform_ioremap_resource(pdev, 0);
> >
> >
>
>
> --
> TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> Amtsgericht München, HRB 105018
> Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> http://www.tq-group.com/




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code
  2025-12-16 14:46     ` Frank Li
@ 2025-12-16 14:50       ` Alexander Stein
  2025-12-16 15:41         ` Frank Li
  0 siblings, 1 reply; 12+ messages in thread
From: Alexander Stein @ 2025-12-16 14:50 UTC (permalink / raw)
  To: Frank Li
  Cc: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team,
	linux-arm-kernel, linux-media, imx, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 7320 bytes --]

Hi Frank,

Am Dienstag, 16. Dezember 2025, 15:46:00 CET schrieb Frank Li:
> On Tue, Dec 16, 2025 at 08:34:18AM +0100, Alexander Stein wrote:
> > Hi,
> >
> > Am Montag, 15. Dezember 2025, 23:49:53 CET schrieb Frank Li:
> > > Use dev_err_probe() to simplify the code. Drop the explicit error message
> > > after returning from imx8mq_mipi_csi_parse_dt(), as the error is already
> > > reported by this helper.
> > >
> > > No functional change.
> > >
> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > > ---
> > > change in v2:
> > > - add  Laurent Pinchart review tags
> > > - wrap error message to new line
> > > - remove error code print in dev_err_probe();
> > > - drop error messaage at imx8mq_mipi_csi_parse_dt()
> > > ---
> > >  drivers/media/platform/nxp/imx-mipi-csis.c    |  6 ++---
> > >  drivers/media/platform/nxp/imx7-media-csi.c   | 14 ++++--------
> > >  drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 33 ++++++++++++---------------
> > >  3 files changed, 21 insertions(+), 32 deletions(-)
> > >
> > > diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
> > > index 088b2945aee33731c565f049dd17721356300b84..ce93d868746f002c22e2f86b1e0aa84ec1a76061 100644
> > > --- a/drivers/media/platform/nxp/imx-mipi-csis.c
> > > +++ b/drivers/media/platform/nxp/imx-mipi-csis.c
> > > @@ -1547,10 +1547,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
> > >  	/* Now that the hardware is initialized, request the interrupt. */
> > >  	ret = devm_request_irq(dev, irq, mipi_csis_irq_handler, 0,
> > >  			       dev_name(dev), csis);
> > > -	if (ret) {
> > > -		dev_err(dev, "Interrupt request failed\n");
> > > -		return ret;
> > > -	}
> > > +	if (ret)
> > > +		return dev_err_probe(dev, ret, "Interrupt request failed\n");
> > >
> > >  	/* Initialize and register the subdev. */
> > >  	ret = mipi_csis_subdev_init(csis);
> > > diff --git a/drivers/media/platform/nxp/imx7-media-csi.c b/drivers/media/platform/nxp/imx7-media-csi.c
> > > index 933a5f39f9f4c9b43ca8d2a1819d0145981266e6..7ddc7ba06e3d4e007013821f67d783898a15461f 100644
> > > --- a/drivers/media/platform/nxp/imx7-media-csi.c
> > > +++ b/drivers/media/platform/nxp/imx7-media-csi.c
> > > @@ -2218,11 +2218,9 @@ static int imx7_csi_probe(struct platform_device *pdev)
> > >
> > >  	/* Acquire resources and install interrupt handler. */
> > >  	csi->mclk = devm_clk_get(&pdev->dev, "mclk");
> > > -	if (IS_ERR(csi->mclk)) {
> > > -		ret = PTR_ERR(csi->mclk);
> > > -		dev_err(dev, "Failed to get mclk: %d", ret);
> > > -		return ret;
> > > -	}
> > > +	if (IS_ERR(csi->mclk))
> > > +		return dev_err_probe(dev, PTR_ERR(csi->mclk),
> > > +				     "Failed to get mclk\n");
> > >
> > >  	csi->irq = platform_get_irq(pdev, 0);
> > >  	if (csi->irq < 0)
> > > @@ -2236,10 +2234,8 @@ static int imx7_csi_probe(struct platform_device *pdev)
> > >
> > >  	ret = devm_request_irq(dev, csi->irq, imx7_csi_irq_handler, 0, "csi",
> > >  			       (void *)csi);
> > > -	if (ret < 0) {
> > > -		dev_err(dev, "Request CSI IRQ failed.\n");
> > > -		return ret;
> > > -	}
> > > +	if (ret < 0)
> > > +		return dev_err_probe(dev, ret, "Request CSI IRQ failed.\n");
> > >
> > >  	/* Initialize all the media device infrastructure. */
> > >  	ret = imx7_csi_media_init(csi);
> > > diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > index 0851f4a9ae52d3096f454da643cfdc5017e000b1..a007c582b4d91660a97910a6a0d53c9b6fcd73e9 100644
> > > --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > @@ -951,10 +951,9 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> > >  	int ret = 0;
> > >
> > >  	state->rst = devm_reset_control_array_get_exclusive(dev);
> > > -	if (IS_ERR(state->rst)) {
> > > -		dev_err(dev, "Failed to get reset: %pe\n", state->rst);
> > > -		return PTR_ERR(state->rst);
> > > -	}
> > > +	if (IS_ERR(state->rst))
> > > +		return dev_err_probe(dev, PTR_ERR(state->rst),
> > > +				     "Failed to get reset\n");
> > >
> > >  	if (state->pdata->use_reg_csr) {
> > >  		const struct regmap_config regmap_config = {
> > > @@ -977,24 +976,22 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> > >
> > >  	ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val,
> > >  					 ARRAY_SIZE(out_val));
> > > -	if (ret) {
> > > -		dev_err(dev, "no fsl,mipi-phy-gpr property found: %d\n", ret);
> > > -		return ret;
> > > -	}
> > > +	if (ret)
> > > +		return dev_err_probe(dev, ret, "no %s property found\n",
> > > +				    "fsl,mipi-phy-gpr");
> >
> > Do you really need to pass the (fixed) property name as an argument? Why
> > not move into the const string directly? I would also rephrase it a bit:
> > "property fsl,mipi-phy-gpr not found"
> 
> Laurent Pinchart provide comments at previous version. The same
> "fsl,mipi-phy-gpr" share one entry at RO region. slice save RO region
> space.
> 
> https://lore.kernel.org/imx/20251119043307.GH17526@pendragon.ideasonboard.com/

"assuming it's worth it". Do you have any numbers? I doubt there is a
significant benefit, but I don't have strong opinion here.
But the grammar should still be improved.

Best regards
Alexander

> Frank
> 
> >
> > With that fixed:
> > Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> >
> > >
> > >  	ph = *out_val;
> > >
> > >  	node = of_find_node_by_phandle(ph);
> > > -	if (!node) {
> > > -		dev_err(dev, "Error finding node by phandle\n");
> > > -		return -ENODEV;
> > > -	}
> > > +	if (!node)
> > > +		return dev_err_probe(dev, -ENODEV,
> > > +				     "Error finding node by phandle\n");
> > > +
> > >  	state->phy_gpr = syscon_node_to_regmap(node);
> > >  	of_node_put(node);
> > > -	if (IS_ERR(state->phy_gpr)) {
> > > -		dev_err(dev, "failed to get gpr regmap: %pe\n", state->phy_gpr);
> > > -		return PTR_ERR(state->phy_gpr);
> > > -	}
> > > +	if (IS_ERR(state->phy_gpr))
> > > +		return dev_err_probe(dev, PTR_ERR(state->phy_gpr),
> > > +				     "failed to get gpr regmap\n");
> > >
> > >  	state->phy_gpr_reg = out_val[1];
> > >  	dev_dbg(dev, "phy gpr register set to 0x%x\n", state->phy_gpr_reg);
> > > @@ -1017,10 +1014,8 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
> > >  	state->pdata = of_device_get_match_data(dev);
> > >
> > >  	ret = imx8mq_mipi_csi_parse_dt(state);
> > > -	if (ret < 0) {
> > > -		dev_err(dev, "Failed to parse device tree: %d\n", ret);
> > > +	if (ret < 0)
> > >  		return ret;
> > > -	}
> > >
> > >  	/* Acquire resources. */
> > >  	state->regs = devm_platform_ioremap_resource(pdev, 0);
> > >
> > >
> >
> >
> > --
> > TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> > Amtsgericht München, HRB 105018
> > Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> > http://www.tq-group.com/
> 
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code
  2025-12-16 14:50       ` Alexander Stein
@ 2025-12-16 15:41         ` Frank Li
  2025-12-16 15:51           ` Alexander Stein
  0 siblings, 1 reply; 12+ messages in thread
From: Frank Li @ 2025-12-16 15:41 UTC (permalink / raw)
  To: Alexander Stein
  Cc: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team,
	linux-arm-kernel, linux-media, imx, linux-kernel

On Tue, Dec 16, 2025 at 03:50:17PM +0100, Alexander Stein wrote:
> Hi Frank,
>
> Am Dienstag, 16. Dezember 2025, 15:46:00 CET schrieb Frank Li:
> > On Tue, Dec 16, 2025 at 08:34:18AM +0100, Alexander Stein wrote:
> > > Hi,
> > >
> > > Am Montag, 15. Dezember 2025, 23:49:53 CET schrieb Frank Li:
> > > > Use dev_err_probe() to simplify the code. Drop the explicit error message
> > > > after returning from imx8mq_mipi_csi_parse_dt(), as the error is already
> > > > reported by this helper.
> > > >
> > > > No functional change.
> > > >
> > > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > > > ---
> > > > change in v2:
> > > > - add  Laurent Pinchart review tags
> > > > - wrap error message to new line
> > > > - remove error code print in dev_err_probe();
> > > > - drop error messaage at imx8mq_mipi_csi_parse_dt()
> > > > ---
> > > >  drivers/media/platform/nxp/imx-mipi-csis.c    |  6 ++---
> > > >  drivers/media/platform/nxp/imx7-media-csi.c   | 14 ++++--------
> > > >  drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 33 ++++++++++++---------------
> > > >  3 files changed, 21 insertions(+), 32 deletions(-)
> > > >
> > > > diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
> > > > index 088b2945aee33731c565f049dd17721356300b84..ce93d868746f002c22e2f86b1e0aa84ec1a76061 100644
> > > > --- a/drivers/media/platform/nxp/imx-mipi-csis.c
> > > > +++ b/drivers/media/platform/nxp/imx-mipi-csis.c
> > > > @@ -1547,10 +1547,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
> > > >  	/* Now that the hardware is initialized, request the interrupt. */
> > > >  	ret = devm_request_irq(dev, irq, mipi_csis_irq_handler, 0,
> > > >  			       dev_name(dev), csis);
> > > > -	if (ret) {
> > > > -		dev_err(dev, "Interrupt request failed\n");
> > > > -		return ret;
> > > > -	}
> > > > +	if (ret)
> > > > +		return dev_err_probe(dev, ret, "Interrupt request failed\n");
> > > >
> > > >  	/* Initialize and register the subdev. */
> > > >  	ret = mipi_csis_subdev_init(csis);
> > > > diff --git a/drivers/media/platform/nxp/imx7-media-csi.c b/drivers/media/platform/nxp/imx7-media-csi.c
> > > > index 933a5f39f9f4c9b43ca8d2a1819d0145981266e6..7ddc7ba06e3d4e007013821f67d783898a15461f 100644
> > > > --- a/drivers/media/platform/nxp/imx7-media-csi.c
> > > > +++ b/drivers/media/platform/nxp/imx7-media-csi.c
> > > > @@ -2218,11 +2218,9 @@ static int imx7_csi_probe(struct platform_device *pdev)
> > > >
> > > >  	/* Acquire resources and install interrupt handler. */
> > > >  	csi->mclk = devm_clk_get(&pdev->dev, "mclk");
> > > > -	if (IS_ERR(csi->mclk)) {
> > > > -		ret = PTR_ERR(csi->mclk);
> > > > -		dev_err(dev, "Failed to get mclk: %d", ret);
> > > > -		return ret;
> > > > -	}
> > > > +	if (IS_ERR(csi->mclk))
> > > > +		return dev_err_probe(dev, PTR_ERR(csi->mclk),
> > > > +				     "Failed to get mclk\n");
> > > >
> > > >  	csi->irq = platform_get_irq(pdev, 0);
> > > >  	if (csi->irq < 0)
> > > > @@ -2236,10 +2234,8 @@ static int imx7_csi_probe(struct platform_device *pdev)
> > > >
> > > >  	ret = devm_request_irq(dev, csi->irq, imx7_csi_irq_handler, 0, "csi",
> > > >  			       (void *)csi);
> > > > -	if (ret < 0) {
> > > > -		dev_err(dev, "Request CSI IRQ failed.\n");
> > > > -		return ret;
> > > > -	}
> > > > +	if (ret < 0)
> > > > +		return dev_err_probe(dev, ret, "Request CSI IRQ failed.\n");
> > > >
> > > >  	/* Initialize all the media device infrastructure. */
> > > >  	ret = imx7_csi_media_init(csi);
> > > > diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > > index 0851f4a9ae52d3096f454da643cfdc5017e000b1..a007c582b4d91660a97910a6a0d53c9b6fcd73e9 100644
> > > > --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > > +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > > @@ -951,10 +951,9 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> > > >  	int ret = 0;
> > > >
> > > >  	state->rst = devm_reset_control_array_get_exclusive(dev);
> > > > -	if (IS_ERR(state->rst)) {
> > > > -		dev_err(dev, "Failed to get reset: %pe\n", state->rst);
> > > > -		return PTR_ERR(state->rst);
> > > > -	}
> > > > +	if (IS_ERR(state->rst))
> > > > +		return dev_err_probe(dev, PTR_ERR(state->rst),
> > > > +				     "Failed to get reset\n");
> > > >
> > > >  	if (state->pdata->use_reg_csr) {
> > > >  		const struct regmap_config regmap_config = {
> > > > @@ -977,24 +976,22 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> > > >
> > > >  	ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val,
> > > >  					 ARRAY_SIZE(out_val));
> > > > -	if (ret) {
> > > > -		dev_err(dev, "no fsl,mipi-phy-gpr property found: %d\n", ret);
> > > > -		return ret;
> > > > -	}
> > > > +	if (ret)
> > > > +		return dev_err_probe(dev, ret, "no %s property found\n",
> > > > +				    "fsl,mipi-phy-gpr");
> > >
> > > Do you really need to pass the (fixed) property name as an argument? Why
> > > not move into the const string directly? I would also rephrase it a bit:
> > > "property fsl,mipi-phy-gpr not found"
> >
> > Laurent Pinchart provide comments at previous version. The same
> > "fsl,mipi-phy-gpr" share one entry at RO region. slice save RO region
> > space.
> >
> > https://lore.kernel.org/imx/20251119043307.GH17526@pendragon.ideasonboard.com/
>
> "assuming it's worth it". Do you have any numbers? I doubt there is a
> significant benefit, but I don't have strong opinion here.

Yes, only few byte. But no worth to argue this. Laurent Pinchart, who pick
patches.

> But the grammar should still be improved.

Okay, will update it.

Frank

>
> Best regards
> Alexander
>
> > Frank
> >
> > >
> > > With that fixed:
> > > Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> > >
> > > >
> > > >  	ph = *out_val;
> > > >
> > > >  	node = of_find_node_by_phandle(ph);
> > > > -	if (!node) {
> > > > -		dev_err(dev, "Error finding node by phandle\n");
> > > > -		return -ENODEV;
> > > > -	}
> > > > +	if (!node)
> > > > +		return dev_err_probe(dev, -ENODEV,
> > > > +				     "Error finding node by phandle\n");
> > > > +
> > > >  	state->phy_gpr = syscon_node_to_regmap(node);
> > > >  	of_node_put(node);
> > > > -	if (IS_ERR(state->phy_gpr)) {
> > > > -		dev_err(dev, "failed to get gpr regmap: %pe\n", state->phy_gpr);
> > > > -		return PTR_ERR(state->phy_gpr);
> > > > -	}
> > > > +	if (IS_ERR(state->phy_gpr))
> > > > +		return dev_err_probe(dev, PTR_ERR(state->phy_gpr),
> > > > +				     "failed to get gpr regmap\n");
> > > >
> > > >  	state->phy_gpr_reg = out_val[1];
> > > >  	dev_dbg(dev, "phy gpr register set to 0x%x\n", state->phy_gpr_reg);
> > > > @@ -1017,10 +1014,8 @@ static int imx8mq_mipi_csi_probe(struct platform_device *pdev)
> > > >  	state->pdata = of_device_get_match_data(dev);
> > > >
> > > >  	ret = imx8mq_mipi_csi_parse_dt(state);
> > > > -	if (ret < 0) {
> > > > -		dev_err(dev, "Failed to parse device tree: %d\n", ret);
> > > > +	if (ret < 0)
> > > >  		return ret;
> > > > -	}
> > > >
> > > >  	/* Acquire resources. */
> > > >  	state->regs = devm_platform_ioremap_resource(pdev, 0);
> > > >
> > > >
> > >
> > >
> > > --
> > > TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> > > Amtsgericht München, HRB 105018
> > > Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> > > http://www.tq-group.com/
> >
> >
> >
>
>
> --
> TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> Amtsgericht München, HRB 105018
> Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> http://www.tq-group.com/




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code
  2025-12-16 15:41         ` Frank Li
@ 2025-12-16 15:51           ` Alexander Stein
  0 siblings, 0 replies; 12+ messages in thread
From: Alexander Stein @ 2025-12-16 15:51 UTC (permalink / raw)
  To: Frank Li
  Cc: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team,
	linux-arm-kernel, linux-media, imx, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 6395 bytes --]

Am Dienstag, 16. Dezember 2025, 16:41:52 CET schrieb Frank Li:
> On Tue, Dec 16, 2025 at 03:50:17PM +0100, Alexander Stein wrote:
> > Hi Frank,
> >
> > Am Dienstag, 16. Dezember 2025, 15:46:00 CET schrieb Frank Li:
> > > On Tue, Dec 16, 2025 at 08:34:18AM +0100, Alexander Stein wrote:
> > > > Hi,
> > > >
> > > > Am Montag, 15. Dezember 2025, 23:49:53 CET schrieb Frank Li:
> > > > > Use dev_err_probe() to simplify the code. Drop the explicit error message
> > > > > after returning from imx8mq_mipi_csi_parse_dt(), as the error is already
> > > > > reported by this helper.
> > > > >
> > > > > No functional change.
> > > > >
> > > > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > > > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > > > > ---
> > > > > change in v2:
> > > > > - add  Laurent Pinchart review tags
> > > > > - wrap error message to new line
> > > > > - remove error code print in dev_err_probe();
> > > > > - drop error messaage at imx8mq_mipi_csi_parse_dt()
> > > > > ---
> > > > >  drivers/media/platform/nxp/imx-mipi-csis.c    |  6 ++---
> > > > >  drivers/media/platform/nxp/imx7-media-csi.c   | 14 ++++--------
> > > > >  drivers/media/platform/nxp/imx8mq-mipi-csi2.c | 33 ++++++++++++---------------
> > > > >  3 files changed, 21 insertions(+), 32 deletions(-)
> > > > >
> > > > > diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c b/drivers/media/platform/nxp/imx-mipi-csis.c
> > > > > index 088b2945aee33731c565f049dd17721356300b84..ce93d868746f002c22e2f86b1e0aa84ec1a76061 100644
> > > > > --- a/drivers/media/platform/nxp/imx-mipi-csis.c
> > > > > +++ b/drivers/media/platform/nxp/imx-mipi-csis.c
> > > > > @@ -1547,10 +1547,8 @@ static int mipi_csis_probe(struct platform_device *pdev)
> > > > >  	/* Now that the hardware is initialized, request the interrupt. */
> > > > >  	ret = devm_request_irq(dev, irq, mipi_csis_irq_handler, 0,
> > > > >  			       dev_name(dev), csis);
> > > > > -	if (ret) {
> > > > > -		dev_err(dev, "Interrupt request failed\n");
> > > > > -		return ret;
> > > > > -	}
> > > > > +	if (ret)
> > > > > +		return dev_err_probe(dev, ret, "Interrupt request failed\n");
> > > > >
> > > > >  	/* Initialize and register the subdev. */
> > > > >  	ret = mipi_csis_subdev_init(csis);
> > > > > diff --git a/drivers/media/platform/nxp/imx7-media-csi.c b/drivers/media/platform/nxp/imx7-media-csi.c
> > > > > index 933a5f39f9f4c9b43ca8d2a1819d0145981266e6..7ddc7ba06e3d4e007013821f67d783898a15461f 100644
> > > > > --- a/drivers/media/platform/nxp/imx7-media-csi.c
> > > > > +++ b/drivers/media/platform/nxp/imx7-media-csi.c
> > > > > @@ -2218,11 +2218,9 @@ static int imx7_csi_probe(struct platform_device *pdev)
> > > > >
> > > > >  	/* Acquire resources and install interrupt handler. */
> > > > >  	csi->mclk = devm_clk_get(&pdev->dev, "mclk");
> > > > > -	if (IS_ERR(csi->mclk)) {
> > > > > -		ret = PTR_ERR(csi->mclk);
> > > > > -		dev_err(dev, "Failed to get mclk: %d", ret);
> > > > > -		return ret;
> > > > > -	}
> > > > > +	if (IS_ERR(csi->mclk))
> > > > > +		return dev_err_probe(dev, PTR_ERR(csi->mclk),
> > > > > +				     "Failed to get mclk\n");
> > > > >
> > > > >  	csi->irq = platform_get_irq(pdev, 0);
> > > > >  	if (csi->irq < 0)
> > > > > @@ -2236,10 +2234,8 @@ static int imx7_csi_probe(struct platform_device *pdev)
> > > > >
> > > > >  	ret = devm_request_irq(dev, csi->irq, imx7_csi_irq_handler, 0, "csi",
> > > > >  			       (void *)csi);
> > > > > -	if (ret < 0) {
> > > > > -		dev_err(dev, "Request CSI IRQ failed.\n");
> > > > > -		return ret;
> > > > > -	}
> > > > > +	if (ret < 0)
> > > > > +		return dev_err_probe(dev, ret, "Request CSI IRQ failed.\n");
> > > > >
> > > > >  	/* Initialize all the media device infrastructure. */
> > > > >  	ret = imx7_csi_media_init(csi);
> > > > > diff --git a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > > > index 0851f4a9ae52d3096f454da643cfdc5017e000b1..a007c582b4d91660a97910a6a0d53c9b6fcd73e9 100644
> > > > > --- a/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > > > +++ b/drivers/media/platform/nxp/imx8mq-mipi-csi2.c
> > > > > @@ -951,10 +951,9 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> > > > >  	int ret = 0;
> > > > >
> > > > >  	state->rst = devm_reset_control_array_get_exclusive(dev);
> > > > > -	if (IS_ERR(state->rst)) {
> > > > > -		dev_err(dev, "Failed to get reset: %pe\n", state->rst);
> > > > > -		return PTR_ERR(state->rst);
> > > > > -	}
> > > > > +	if (IS_ERR(state->rst))
> > > > > +		return dev_err_probe(dev, PTR_ERR(state->rst),
> > > > > +				     "Failed to get reset\n");
> > > > >
> > > > >  	if (state->pdata->use_reg_csr) {
> > > > >  		const struct regmap_config regmap_config = {
> > > > > @@ -977,24 +976,22 @@ static int imx8mq_mipi_csi_parse_dt(struct csi_state *state)
> > > > >
> > > > >  	ret = of_property_read_u32_array(np, "fsl,mipi-phy-gpr", out_val,
> > > > >  					 ARRAY_SIZE(out_val));
> > > > > -	if (ret) {
> > > > > -		dev_err(dev, "no fsl,mipi-phy-gpr property found: %d\n", ret);
> > > > > -		return ret;
> > > > > -	}
> > > > > +	if (ret)
> > > > > +		return dev_err_probe(dev, ret, "no %s property found\n",
> > > > > +				    "fsl,mipi-phy-gpr");
> > > >
> > > > Do you really need to pass the (fixed) property name as an argument? Why
> > > > not move into the const string directly? I would also rephrase it a bit:
> > > > "property fsl,mipi-phy-gpr not found"
> > >
> > > Laurent Pinchart provide comments at previous version. The same
> > > "fsl,mipi-phy-gpr" share one entry at RO region. slice save RO region
> > > space.
> > >
> > > https://lore.kernel.org/imx/20251119043307.GH17526@pendragon.ideasonboard.com/
> >
> > "assuming it's worth it". Do you have any numbers? I doubt there is a
> > significant benefit, but I don't have strong opinion here.
> 
> Yes, only few byte. But no worth to argue this. Laurent Pinchart, who pick
> patches.

Agreed.

> 
> > But the grammar should still be improved.
> 
> Okay, will update it.

Thanks

Best regards
Alexander
-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces
  2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
                   ` (4 preceding siblings ...)
  2025-12-15 22:49 ` [PATCH v3 5/5] media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers Frank Li
@ 2026-01-12 15:06 ` Frank Li
  5 siblings, 0 replies; 12+ messages in thread
From: Frank Li @ 2026-01-12 15:06 UTC (permalink / raw)
  To: Philipp Zabel, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Rui Miguel Silva,
	Laurent Pinchart, Martin Kepplinger-Novakovic, Purism Kernel Team
  Cc: linux-media, imx, linux-arm-kernel, linux-kernel

On Mon, Dec 15, 2025 at 05:49:51PM -0500, Frank Li wrote:
> Some trivial patch to reduce goto at probe functions.
>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---

Laurent Pinchart and Philipp Zabel:

	Happy new year. Any comments about this trivial changes?

Frank

> Changes in v3:
> - rebase to v6.19-rc1
> - avoid use __free() == NULL according to cleanup.h
> - Link to v2: https://lore.kernel.org/r/20251119-cam_cleanup-v2-0-df732cc83ff1@nxp.com
>
> Changes in v2:
> - add new patch media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers
> - detail change see each patch's change log.
> - Link to v1: https://lore.kernel.org/r/20251117-cam_cleanup-v1-0-6cd42872db79@nxp.com
>
> ---
> Frank Li (5):
>       media: nxp: use devm_mutex_init() simple code
>       media: nxp: use dev_err_probe() to simplify code
>       media: nxp: imx8-isi: use devm_pm_runtime_enable() to simplify code
>       media: nxp: use cleanup  __free(fwnode_handle) simplify code
>       media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers
>
>  drivers/media/platform/nxp/imx-mipi-csis.c         | 54 ++++++-------
>  drivers/media/platform/nxp/imx-pxp.c               |  5 +-
>  drivers/media/platform/nxp/imx7-media-csi.c        | 14 ++--
>  .../media/platform/nxp/imx8-isi/imx8-isi-core.c    | 16 ++--
>  drivers/media/platform/nxp/imx8mq-mipi-csi2.c      | 88 ++++++++++------------
>  drivers/media/platform/nxp/mx2_emmaprp.c           |  7 +-
>  6 files changed, 83 insertions(+), 101 deletions(-)
> ---
> base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
> change-id: 20250807-cam_cleanup-b6d90ba9dac3
>
> Best regards,
> --
> Frank Li <Frank.Li@nxp.com>
>


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-01-12 15:06 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-15 22:49 [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li
2025-12-15 22:49 ` [PATCH v3 1/5] media: nxp: use devm_mutex_init() simple code Frank Li
2025-12-15 22:49 ` [PATCH v3 2/5] media: nxp: use dev_err_probe() to simplify code Frank Li
2025-12-16  7:34   ` Alexander Stein
2025-12-16 14:46     ` Frank Li
2025-12-16 14:50       ` Alexander Stein
2025-12-16 15:41         ` Frank Li
2025-12-16 15:51           ` Alexander Stein
2025-12-15 22:49 ` [PATCH v3 3/5] media: nxp: imx8-isi: use devm_pm_runtime_enable() " Frank Li
2025-12-15 22:49 ` [PATCH v3 4/5] media: nxp: use cleanup __free(fwnode_handle) " Frank Li
2025-12-15 22:49 ` [PATCH v3 5/5] media: nxp: Add dev_err_probe() to all error paths in *async_register() helpers Frank Li
2026-01-12 15:06 ` [PATCH v3 0/5] media: platform: nxp: Trivial cleanup pathces Frank Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox