* [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