2018-05-09 19:46:44

by Peter Rosin

[permalink] [raw]
Subject: [PATCH 1/2] i2c: exynos5: remove some dead code

The else branch cannot be taken as i will always equal num.
Get rid of the whole construct.

Signed-off-by: Peter Rosin <[email protected]>
---
drivers/i2c/busses/i2c-exynos5.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
index 12ec8484e653..a2cbc779c33a 100644
--- a/drivers/i2c/busses/i2c-exynos5.c
+++ b/drivers/i2c/busses/i2c-exynos5.c
@@ -727,17 +727,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap,
goto out;
}

- if (i == num) {
- ret = num;
- } else {
- /* Only one message, cannot access the device */
- if (i == 1)
- ret = -EREMOTEIO;
- else
- ret = i;
-
- dev_warn(i2c->dev, "xfer message failed\n");
- }
+ ret = num;

out:
clk_disable(i2c->clk);
--
2.11.0



2018-05-09 19:46:28

by Peter Rosin

[permalink] [raw]
Subject: [PATCH 2/2] i2c: exynos5: remove pointless initializers

The variables are always assigned before use anyway.

Signed-off-by: Peter Rosin <[email protected]>
---
drivers/i2c/busses/i2c-exynos5.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
index a2cbc779c33a..185fba37e830 100644
--- a/drivers/i2c/busses/i2c-exynos5.c
+++ b/drivers/i2c/busses/i2c-exynos5.c
@@ -707,7 +707,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap,
struct i2c_msg *msgs, int num)
{
struct exynos5_i2c *i2c = adap->algo_data;
- int i = 0, ret = 0, stop = 0;
+ int i, ret, stop;

if (i2c->suspended) {
dev_err(i2c->dev, "HS-I2C is not initialized.\n");
--
2.11.0


2018-05-10 08:38:09

by Andrzej Hajda

[permalink] [raw]
Subject: Re: [PATCH 1/2] i2c: exynos5: remove some dead code

On 09.05.2018 21:45, Peter Rosin wrote:
> The else branch cannot be taken as i will always equal num.
> Get rid of the whole construct.
>
> Signed-off-by: Peter Rosin <[email protected]>
> ---
> drivers/i2c/busses/i2c-exynos5.c | 12 +-----------
> 1 file changed, 1 insertion(+), 11 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
> index 12ec8484e653..a2cbc779c33a 100644
> --- a/drivers/i2c/busses/i2c-exynos5.c
> +++ b/drivers/i2c/busses/i2c-exynos5.c
> @@ -727,17 +727,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap,
> goto out;
> }
>
> - if (i == num) {
> - ret = num;
> - } else {
> - /* Only one message, cannot access the device */
> - if (i == 1)
> - ret = -EREMOTEIO;
> - else
> - ret = i;
> -
> - dev_warn(i2c->dev, "xfer message failed\n");
> - }
> + ret = num;
>
> out:
> clk_disable(i2c->clk);

You can go further and remove "out:" label, use break instead, and at
the end use "return (i == num) ? num : ret;" or sth similar.

With this change you can add:

Reviewed-by: Andrzej Hajda <[email protected]>

 --
Regards
Andrzej



2018-05-10 08:45:10

by Andrzej Hajda

[permalink] [raw]
Subject: Re: [PATCH 2/2] i2c: exynos5: remove pointless initializers

On 09.05.2018 21:45, Peter Rosin wrote:
> The variables are always assigned before use anyway.
>
> Signed-off-by: Peter Rosin <[email protected]>
> ---
> drivers/i2c/busses/i2c-exynos5.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
> index a2cbc779c33a..185fba37e830 100644
> --- a/drivers/i2c/busses/i2c-exynos5.c
> +++ b/drivers/i2c/busses/i2c-exynos5.c
> @@ -707,7 +707,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap,
> struct i2c_msg *msgs, int num)
> {
> struct exynos5_i2c *i2c = adap->algo_data;
> - int i = 0, ret = 0, stop = 0;
> + int i, ret, stop;

I hope gcc is smart enough to not complain in case of ret.
I think you can merge both patches into one.

Regards
Andrzej

>
> if (i2c->suspended) {
> dev_err(i2c->dev, "HS-I2C is not initialized.\n");



2018-05-10 19:18:36

by Peter Rosin

[permalink] [raw]
Subject: Re: [PATCH 1/2] i2c: exynos5: remove some dead code

On 2018-05-10 10:36, Andrzej Hajda wrote:
> On 09.05.2018 21:45, Peter Rosin wrote:
>> The else branch cannot be taken as i will always equal num.
>> Get rid of the whole construct.
>>
>> Signed-off-by: Peter Rosin <[email protected]>
>> ---
>> drivers/i2c/busses/i2c-exynos5.c | 12 +-----------
>> 1 file changed, 1 insertion(+), 11 deletions(-)
>>
>> diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
>> index 12ec8484e653..a2cbc779c33a 100644
>> --- a/drivers/i2c/busses/i2c-exynos5.c
>> +++ b/drivers/i2c/busses/i2c-exynos5.c
>> @@ -727,17 +727,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap,
>> goto out;
>> }
>>
>> - if (i == num) {
>> - ret = num;
>> - } else {
>> - /* Only one message, cannot access the device */
>> - if (i == 1)
>> - ret = -EREMOTEIO;
>> - else
>> - ret = i;
>> -
>> - dev_warn(i2c->dev, "xfer message failed\n");
>> - }
>> + ret = num;
>>
>> out:
>> clk_disable(i2c->clk);
>
> You can go further and remove "out:" label, use break instead, and at
> the end use "return (i == num) ? num : ret;" or sth similar.
>
> With this change you can add:
>
> Reviewed-by: Andrzej Hajda <[email protected]>

But then the patch wouldn't be so obviously safe. If I would write
a function equivalent to the original function, I think I'd write
something like:

static int exynos5_i2c_xfer(struct i2c_adapter *adap,
struct i2c_msg *msgs, int num)
{
struct exynos5_i2c *i2c = adap->algo_data;
int i, ret;

if (i2c->suspended) {
dev_err(i2c->dev, "HS-I2C is not initialized.\n");
return -EIO;
}

ret = clk_enable(i2c->clk);
if (ret)
return ret;

for (i = 0; !ret && i < num; i++)
ret = exynos5_i2c_xfer_msg(i2c, msgs + i, i == num - 1);

clk_disable(i2c->clk);

return ret ?: num;
}

And I think that is safe because I don't see any possibility for
exynos_i2c_xfer_msg to return anything but zero success or negative
errors. Since I can only compile-test, so I do not feel all that
good about going further than I did.

But if you or anyone can test the above function, feel free to make
a patch out of it. I don't care enough to make a bunch of iterations
on these trivialities. I just spotted dead code and dumb initializers
while looking for other things. So, take it or leave it. I.e. it was
just a couple of drive-by patches.

Cheers,
Peter

2018-05-10 19:18:40

by Peter Rosin

[permalink] [raw]
Subject: Re: [PATCH 2/2] i2c: exynos5: remove pointless initializers

On 2018-05-10 10:44, Andrzej Hajda wrote:
> On 09.05.2018 21:45, Peter Rosin wrote:
>> The variables are always assigned before use anyway.
>>
>> Signed-off-by: Peter Rosin <[email protected]>
>> ---
>> drivers/i2c/busses/i2c-exynos5.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
>> index a2cbc779c33a..185fba37e830 100644
>> --- a/drivers/i2c/busses/i2c-exynos5.c
>> +++ b/drivers/i2c/busses/i2c-exynos5.c
>> @@ -707,7 +707,7 @@ static int exynos5_i2c_xfer(struct i2c_adapter *adap,
>> struct i2c_msg *msgs, int num)
>> {
>> struct exynos5_i2c *i2c = adap->algo_data;
>> - int i = 0, ret = 0, stop = 0;
>> + int i, ret, stop;
>
> I hope gcc is smart enough to not complain in case of ret.

I think any compiler is smart enough to see that; you must have missed
this line:

ret = clk_enable(i2c->clk);

which is the first to touch ret in the function.

> I think you can merge both patches into one.

I could, but I wanted to make the patches totally obvious and easy to
review. The patches do independent things, so I prefer not to squash.

Cheers,
Peter

>
> Regards
> Andrzej
>
>>
>> if (i2c->suspended) {
>> dev_err(i2c->dev, "HS-I2C is not initialized.\n");
>
>