2022-12-08 14:01:44

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 00/11] Allwinner A31/A83T CSI/ISP/MIPI CSI-2 media fixes

This series resolves reported smatch warnings against the recently-introduced
Allwinner A31/A83T CSI, ISP and MIPI CSI-2 drivers.

Smatch was ran again on the updated tree and no longer shows any error or
warning.

Changes since v1:
- Added fixes for static struct declarations;
- Fixed ISP commit titles by replacing bridge with proc.

Paul

Paul Kocialkowski (11):
media: sun6i-csi: bridge: Fix return code handling in stream off path
media: sun6i-csi: bridge: Error out on invalid port to fix warning
media: sunxi-csi: bridge: Declare subdev ops as static
media: sun6i-csi: capture: Remove useless ret initialization
media: sun6i-mipi-csi2: Fix return code handling in stream off path
media: sun8i-a83t-mipi-csi2: Fix return code handling in stream off
path
media: sun6i-isp: proc: Fix return code handling in stream off path
media: sun6i-isp: proc: Error out on invalid port to fix warning
media: sunxi-isp: proc: Declare subdev ops as static
media: sun6i-isp: capture: Fix uninitialized variable use
media: sun6i-isp: params: Fix incorrect indentation

drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c | 8 ++++----
.../media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c | 2 +-
.../platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c | 5 ++---
.../sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c | 5 ++---
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_capture.c | 4 ++--
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_params.c | 4 ++--
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c | 8 ++++----
7 files changed, 17 insertions(+), 19 deletions(-)

--
2.38.1


2022-12-08 14:04:44

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 01/11] media: sun6i-csi: bridge: Fix return code handling in stream off path

Explicitly set ret to zero on disable path to avoid a related smatch
warning. This makes initialization at declaration useless.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
index 86d20c1c35ed..88df3a73ebfa 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
@@ -415,8 +415,7 @@ static int sun6i_csi_bridge_s_stream(struct v4l2_subdev *subdev, int on)
struct sun6i_csi_bridge_source *source;
struct v4l2_subdev *source_subdev;
struct media_pad *remote_pad;
- /* Initialize to 0 to use both in disable label (ret != 0) and off. */
- int ret = 0;
+ int ret;

/* Source */

@@ -436,6 +435,7 @@ static int sun6i_csi_bridge_s_stream(struct v4l2_subdev *subdev, int on)

if (!on) {
v4l2_subdev_call(source_subdev, video, s_stream, 0);
+ ret = 0;
goto disable;
}

--
2.38.1

2022-12-08 14:05:16

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 05/11] media: sun6i-mipi-csi2: Fix return code handling in stream off path

Explicitly set ret to zero instead of assigning it and overwriting it later,
which is a bit confusing to understand.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
.../media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c b/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
index 484ac5f054d5..a220ce849b41 100644
--- a/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
+++ b/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
@@ -188,7 +188,8 @@ static int sun6i_mipi_csi2_s_stream(struct v4l2_subdev *subdev, int on)
return -ENODEV;

if (!on) {
- ret = v4l2_subdev_call(source_subdev, video, s_stream, 0);
+ v4l2_subdev_call(source_subdev, video, s_stream, 0);
+ ret = 0;
goto disable;
}

@@ -280,8 +281,6 @@ static int sun6i_mipi_csi2_s_stream(struct v4l2_subdev *subdev, int on)
return 0;

disable:
- if (!on)
- ret = 0;
phy_power_off(dphy);
sun6i_mipi_csi2_disable(csi2_dev);

--
2.38.1

2022-12-08 14:06:14

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 02/11] media: sun6i-csi: bridge: Error out on invalid port to fix warning

The enabled variable is only set for a valid port and used later,
which triggers an uninitialized use smatch warning. Explicitly error
out in that case to fix the warning.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
index 88df3a73ebfa..4517c0346eef 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
@@ -663,7 +663,7 @@ sun6i_csi_bridge_notifier_bound(struct v4l2_async_notifier *notifier,
enabled = !bridge->source_parallel.expected;
break;
default:
- break;
+ return -EINVAL;
}

source->subdev = remote_subdev;
--
2.38.1

2022-12-08 14:06:21

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 09/11] media: sunxi-isp: proc: Declare subdev ops as static

The static keyword is missing in the v4l2 subdev ops definition for the proc.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
index 4f34c1bc8be9..1ca4673df2b3 100644
--- a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
+++ b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
@@ -342,7 +342,7 @@ static const struct v4l2_subdev_pad_ops sun6i_isp_proc_pad_ops = {
.set_fmt = sun6i_isp_proc_set_fmt,
};

-const struct v4l2_subdev_ops sun6i_isp_proc_subdev_ops = {
+static const struct v4l2_subdev_ops sun6i_isp_proc_subdev_ops = {
.video = &sun6i_isp_proc_video_ops,
.pad = &sun6i_isp_proc_pad_ops,
};
--
2.38.1

2022-12-08 14:21:01

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 08/11] media: sun6i-isp: proc: Error out on invalid port to fix warning

The enabled variable is only set for a valid port and used later,
which triggers an uninitialized use smatch warning. Explicitly error
out in that case to fix the warning.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
index a95709d2c573..4f34c1bc8be9 100644
--- a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
+++ b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
@@ -416,7 +416,7 @@ static int sun6i_isp_proc_notifier_bound(struct v4l2_async_notifier *notifier,
enabled = !proc->source_csi0.expected;
break;
default:
- break;
+ return -EINVAL;
}

source->subdev = remote_subdev;
--
2.38.1

2022-12-08 14:21:03

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 10/11] media: sun6i-isp: capture: Fix uninitialized variable use

While the stride_chroma variable was previously initialized to zero,
it's actually stride_chroma_div4 that is set to hardware registers.

Initialize it to zero instead to avoid an uninitialized variable use
and get rid of the associated smatch warning.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_capture.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_capture.c b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_capture.c
index 4b592820845a..1595a9607775 100644
--- a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_capture.c
+++ b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_capture.c
@@ -108,8 +108,8 @@ sun6i_isp_capture_buffer_configure(struct sun6i_isp_device *isp_dev,
void sun6i_isp_capture_configure(struct sun6i_isp_device *isp_dev)
{
unsigned int width, height;
- unsigned int stride_luma, stride_chroma = 0;
- unsigned int stride_luma_div4, stride_chroma_div4;
+ unsigned int stride_luma, stride_chroma;
+ unsigned int stride_luma_div4, stride_chroma_div4 = 0;
const struct sun6i_isp_capture_format *format;
const struct v4l2_format_info *info;
u32 pixelformat;
--
2.38.1

2022-12-08 14:21:06

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 07/11] media: sun6i-isp: proc: Fix return code handling in stream off path

Explicitly set ret to zero on disable path to avoid a related smatch
warning. This makes initialization at declaration useless.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
index d69d2be0add2..a95709d2c573 100644
--- a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
+++ b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_proc.c
@@ -173,8 +173,7 @@ static int sun6i_isp_proc_s_stream(struct v4l2_subdev *subdev, int on)
struct sun6i_isp_proc_source *source;
struct v4l2_subdev *source_subdev;
struct media_pad *remote_pad;
- /* Initialize to 0 to use both in disable label (ret != 0) and off. */
- int ret = 0;
+ int ret;

/* Source */

@@ -195,6 +194,7 @@ static int sun6i_isp_proc_s_stream(struct v4l2_subdev *subdev, int on)
if (!on) {
sun6i_isp_proc_irq_disable(isp_dev);
v4l2_subdev_call(source_subdev, video, s_stream, 0);
+ ret = 0;
goto disable;
}

--
2.38.1

2022-12-08 14:22:38

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 11/11] media: sun6i-isp: params: Fix incorrect indentation

Remove a heading whitespace that results in a smatch warning.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_params.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_params.c b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_params.c
index 8039e311cb1c..7b41a13162b9 100644
--- a/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_params.c
+++ b/drivers/staging/media/sunxi/sun6i-isp/sun6i_isp_params.c
@@ -183,8 +183,8 @@ void sun6i_isp_params_configure(struct sun6i_isp_device *isp_dev)
if (state->configured)
goto complete;

- sun6i_isp_params_configure_modules(isp_dev,
- &sun6i_isp_params_config_default);
+ sun6i_isp_params_configure_modules(isp_dev,
+ &sun6i_isp_params_config_default);

state->configured = true;

--
2.38.1

2022-12-08 14:22:58

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 06/11] media: sun8i-a83t-mipi-csi2: Fix return code handling in stream off path

Explicitly set ret to zero instead of assigning it and overwriting it later,
which is a bit confusing to understand.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
.../sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c b/drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c
index d993c09a4820..cd2e92ae2293 100644
--- a/drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c
+++ b/drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c
@@ -220,7 +220,8 @@ static int sun8i_a83t_mipi_csi2_s_stream(struct v4l2_subdev *subdev, int on)
return -ENODEV;

if (!on) {
- ret = v4l2_subdev_call(source_subdev, video, s_stream, 0);
+ v4l2_subdev_call(source_subdev, video, s_stream, 0);
+ ret = 0;
goto disable;
}

@@ -312,8 +313,6 @@ static int sun8i_a83t_mipi_csi2_s_stream(struct v4l2_subdev *subdev, int on)
return 0;

disable:
- if (!on)
- ret = 0;
phy_power_off(dphy);
sun8i_a83t_mipi_csi2_disable(csi2_dev);

--
2.38.1

2022-12-08 14:23:27

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 04/11] media: sun6i-csi: capture: Remove useless ret initialization

There is no particular need to assign ret when declaring it as
it will be assigned before there is any chance to return it.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
index 6d34f5c0768f..cf6aadbc130b 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_capture.c
@@ -832,7 +832,7 @@ static int sun6i_csi_capture_open(struct file *file)
{
struct sun6i_csi_device *csi_dev = video_drvdata(file);
struct sun6i_csi_capture *capture = &csi_dev->capture;
- int ret = 0;
+ int ret;

if (mutex_lock_interruptible(&capture->lock))
return -ERESTARTSYS;
--
2.38.1

2022-12-08 14:43:23

by Paul Kocialkowski

[permalink] [raw]
Subject: [PATCH v2 03/11] media: sunxi-csi: bridge: Declare subdev ops as static

The static keyword is missing in the v4l2 subdev ops definition for the bridge.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
index 4517c0346eef..7fcb0815cb42 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c
@@ -587,7 +587,7 @@ static const struct v4l2_subdev_pad_ops sun6i_csi_bridge_pad_ops = {
.set_fmt = sun6i_csi_bridge_set_fmt,
};

-const struct v4l2_subdev_ops sun6i_csi_bridge_subdev_ops = {
+static const struct v4l2_subdev_ops sun6i_csi_bridge_subdev_ops = {
.video = &sun6i_csi_bridge_video_ops,
.pad = &sun6i_csi_bridge_pad_ops,
};
--
2.38.1