2021-12-02 09:06:07

by Joe Perches

[permalink] [raw]
Subject: [PATCH] media: i2c: ov8865: Neaten unnecessary indentation

Jumping to the start of a labeled else block isn't typical.

Unindent the code by reversing the test and using a goto instead.

Signed-off-by: Joe Perches <[email protected]>
---
drivers/media/i2c/ov8865.c | 81 +++++++++++++++++++++++-----------------------
1 file changed, 41 insertions(+), 40 deletions(-)

diff --git a/drivers/media/i2c/ov8865.c b/drivers/media/i2c/ov8865.c
index ebdb20d3fe9d8..7ef83a10f586f 100644
--- a/drivers/media/i2c/ov8865.c
+++ b/drivers/media/i2c/ov8865.c
@@ -2396,56 +2396,57 @@ static int ov8865_sensor_init(struct ov8865_sensor *sensor)

static int ov8865_sensor_power(struct ov8865_sensor *sensor, bool on)
{
- /* Keep initialized to zero for disable label. */
- int ret = 0;
+ int ret;

- if (on) {
- gpiod_set_value_cansleep(sensor->reset, 1);
- gpiod_set_value_cansleep(sensor->powerdown, 1);
+ if (!on) {
+ ret = 0;
+ goto disable;
+ }

- ret = regulator_enable(sensor->dovdd);
- if (ret) {
- dev_err(sensor->dev,
- "failed to enable DOVDD regulator\n");
- goto disable;
- }
+ gpiod_set_value_cansleep(sensor->reset, 1);
+ gpiod_set_value_cansleep(sensor->powerdown, 1);

- ret = regulator_enable(sensor->avdd);
- if (ret) {
- dev_err(sensor->dev,
- "failed to enable AVDD regulator\n");
- goto disable;
- }
+ ret = regulator_enable(sensor->dovdd);
+ if (ret) {
+ dev_err(sensor->dev, "failed to enable DOVDD regulator\n");
+ goto disable;
+ }

- ret = regulator_enable(sensor->dvdd);
- if (ret) {
- dev_err(sensor->dev,
- "failed to enable DVDD regulator\n");
- goto disable;
- }
+ ret = regulator_enable(sensor->avdd);
+ if (ret) {
+ dev_err(sensor->dev, "failed to enable AVDD regulator\n");
+ goto disable;
+ }

- ret = clk_prepare_enable(sensor->extclk);
- if (ret) {
- dev_err(sensor->dev, "failed to enable EXTCLK clock\n");
- goto disable;
- }
+ ret = regulator_enable(sensor->dvdd);
+ if (ret) {
+ dev_err(sensor->dev, "failed to enable DVDD regulator\n");
+ goto disable;
+ }
+
+ ret = clk_prepare_enable(sensor->extclk);
+ if (ret) {
+ dev_err(sensor->dev, "failed to enable EXTCLK clock\n");
+ goto disable;
+ }

- gpiod_set_value_cansleep(sensor->reset, 0);
- gpiod_set_value_cansleep(sensor->powerdown, 0);
+ gpiod_set_value_cansleep(sensor->reset, 0);
+ gpiod_set_value_cansleep(sensor->powerdown, 0);
+
+ /* Time to enter streaming mode according to power timings. */
+ usleep_range(10000, 12000);
+
+ return 0;

- /* Time to enter streaming mode according to power timings. */
- usleep_range(10000, 12000);
- } else {
disable:
- gpiod_set_value_cansleep(sensor->powerdown, 1);
- gpiod_set_value_cansleep(sensor->reset, 1);
+ gpiod_set_value_cansleep(sensor->powerdown, 1);
+ gpiod_set_value_cansleep(sensor->reset, 1);

- clk_disable_unprepare(sensor->extclk);
+ clk_disable_unprepare(sensor->extclk);

- regulator_disable(sensor->dvdd);
- regulator_disable(sensor->avdd);
- regulator_disable(sensor->dovdd);
- }
+ regulator_disable(sensor->dvdd);
+ regulator_disable(sensor->avdd);
+ regulator_disable(sensor->dovdd);

return ret;
}




2021-12-07 12:25:03

by Sakari Ailus

[permalink] [raw]
Subject: Re: [PATCH] media: i2c: ov8865: Neaten unnecessary indentation

Hi Joe (and Paul),

On Thu, Dec 02, 2021 at 01:06:01AM -0800, Joe Perches wrote:
> Jumping to the start of a labeled else block isn't typical.
>
> Unindent the code by reversing the test and using a goto instead.
>
> Signed-off-by: Joe Perches <[email protected]>
> ---
> drivers/media/i2c/ov8865.c | 81 +++++++++++++++++++++++-----------------------
> 1 file changed, 41 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/media/i2c/ov8865.c b/drivers/media/i2c/ov8865.c
> index ebdb20d3fe9d8..7ef83a10f586f 100644
> --- a/drivers/media/i2c/ov8865.c
> +++ b/drivers/media/i2c/ov8865.c
> @@ -2396,56 +2396,57 @@ static int ov8865_sensor_init(struct ov8865_sensor *sensor)
>
> static int ov8865_sensor_power(struct ov8865_sensor *sensor, bool on)
> {
> - /* Keep initialized to zero for disable label. */
> - int ret = 0;
> + int ret;
>
> - if (on) {
> - gpiod_set_value_cansleep(sensor->reset, 1);
> - gpiod_set_value_cansleep(sensor->powerdown, 1);
> + if (!on) {
> + ret = 0;
> + goto disable;
> + }
>
> - ret = regulator_enable(sensor->dovdd);
> - if (ret) {
> - dev_err(sensor->dev,
> - "failed to enable DOVDD regulator\n");
> - goto disable;

I guess this patch is fine as such but there seems to be a problem in error
handling here: all regulators are disabled if there's a problem enabling
one of them.

Would it be possible to fix this as well?

> - }
> + gpiod_set_value_cansleep(sensor->reset, 1);
> + gpiod_set_value_cansleep(sensor->powerdown, 1);
>
> - ret = regulator_enable(sensor->avdd);
> - if (ret) {
> - dev_err(sensor->dev,
> - "failed to enable AVDD regulator\n");
> - goto disable;
> - }
> + ret = regulator_enable(sensor->dovdd);
> + if (ret) {
> + dev_err(sensor->dev, "failed to enable DOVDD regulator\n");
> + goto disable;
> + }
>
> - ret = regulator_enable(sensor->dvdd);
> - if (ret) {
> - dev_err(sensor->dev,
> - "failed to enable DVDD regulator\n");
> - goto disable;
> - }
> + ret = regulator_enable(sensor->avdd);
> + if (ret) {
> + dev_err(sensor->dev, "failed to enable AVDD regulator\n");
> + goto disable;
> + }
>
> - ret = clk_prepare_enable(sensor->extclk);
> - if (ret) {
> - dev_err(sensor->dev, "failed to enable EXTCLK clock\n");
> - goto disable;
> - }
> + ret = regulator_enable(sensor->dvdd);
> + if (ret) {
> + dev_err(sensor->dev, "failed to enable DVDD regulator\n");
> + goto disable;
> + }
> +
> + ret = clk_prepare_enable(sensor->extclk);
> + if (ret) {
> + dev_err(sensor->dev, "failed to enable EXTCLK clock\n");
> + goto disable;
> + }
>
> - gpiod_set_value_cansleep(sensor->reset, 0);
> - gpiod_set_value_cansleep(sensor->powerdown, 0);
> + gpiod_set_value_cansleep(sensor->reset, 0);
> + gpiod_set_value_cansleep(sensor->powerdown, 0);
> +
> + /* Time to enter streaming mode according to power timings. */
> + usleep_range(10000, 12000);
> +
> + return 0;
>
> - /* Time to enter streaming mode according to power timings. */
> - usleep_range(10000, 12000);
> - } else {
> disable:
> - gpiod_set_value_cansleep(sensor->powerdown, 1);
> - gpiod_set_value_cansleep(sensor->reset, 1);
> + gpiod_set_value_cansleep(sensor->powerdown, 1);
> + gpiod_set_value_cansleep(sensor->reset, 1);
>
> - clk_disable_unprepare(sensor->extclk);
> + clk_disable_unprepare(sensor->extclk);
>
> - regulator_disable(sensor->dvdd);
> - regulator_disable(sensor->avdd);
> - regulator_disable(sensor->dovdd);
> - }
> + regulator_disable(sensor->dvdd);
> + regulator_disable(sensor->avdd);
> + regulator_disable(sensor->dovdd);
>
> return ret;
> }
>
>

--
Kind regards,

Sakari Ailus

2021-12-07 14:47:50

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] media: i2c: ov8865: Neaten unnecessary indentation

On Tue, 2021-12-07 at 14:24 +0200, Sakari Ailus wrote:
> Hi Joe (and Paul),

> I guess this patch is fine as such but there seems to be a problem in error
> handling here: all regulators are disabled if there's a problem enabling
> one of them.
>
> Would it be possible to fix this as well?

I've no hardware to test, so I've no idea if that's the right thing to do.



2021-12-15 08:01:14

by Sakari Ailus

[permalink] [raw]
Subject: Re: [PATCH] media: i2c: ov8865: Neaten unnecessary indentation

Hi Joe

On Tue, Dec 07, 2021 at 06:47:45AM -0800, Joe Perches wrote:
> On Tue, 2021-12-07 at 14:24 +0200, Sakari Ailus wrote:
> > Hi Joe (and Paul),
>
> > I guess this patch is fine as such but there seems to be a problem in error
> > handling here: all regulators are disabled if there's a problem enabling
> > one of them.
> >
> > Would it be possible to fix this as well?
>
> I've no hardware to test, so I've no idea if that's the right thing to do.

I don't have the hardware either.

But I can tell that you shouldn't disable a regulator you haven't enabled
to begin with. Bugs (fixes of which probably should go to stable trees)
need to be fixed before reworking the code.

--
Regards,

Sakari Ailus

2021-12-15 08:07:20

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] media: i2c: ov8865: Neaten unnecessary indentation

On Wed, 2021-12-15 at 10:01 +0200, Sakari Ailus wrote:
> Hi Joe
>
> On Tue, Dec 07, 2021 at 06:47:45AM -0800, Joe Perches wrote:
> > On Tue, 2021-12-07 at 14:24 +0200, Sakari Ailus wrote:
> > > Hi Joe (and Paul),
> >
> > > I guess this patch is fine as such but there seems to be a problem in error
> > > handling here: all regulators are disabled if there's a problem enabling
> > > one of them.
> > >
> > > Would it be possible to fix this as well?
> >
> > I've no hardware to test, so I've no idea if that's the right thing to do.
>
> I don't have the hardware either.
>
> But I can tell that you shouldn't disable a regulator you haven't enabled
> to begin with. Bugs (fixes of which probably should go to stable trees)
> need to be fixed before reworking the code.

I'm just fixing the ugly code.
You are welcome to fix what you believe to be logical defects.