2021-02-16 11:40:16

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 1/7] pps: clients: gpio: Bail out on error when requesting GPIO echo line

When requesting optional GPIO echo line, bail out on error,
so user will know that something wrong with the existing property.

Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/pps/clients/pps-gpio.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/pps/clients/pps-gpio.c b/drivers/pps/clients/pps-gpio.c
index e0de1df2ede0..f89c31aa66f1 100644
--- a/drivers/pps/clients/pps-gpio.c
+++ b/drivers/pps/clients/pps-gpio.c
@@ -119,12 +119,12 @@ static int pps_gpio_setup(struct platform_device *pdev)
data->echo_pin = devm_gpiod_get_optional(&pdev->dev,
"echo",
GPIOD_OUT_LOW);
- if (data->echo_pin) {
- if (IS_ERR(data->echo_pin)) {
- dev_err(&pdev->dev, "failed to request ECHO GPIO\n");
- return PTR_ERR(data->echo_pin);
- }
+ if (IS_ERR(data->echo_pin)) {
+ dev_err(&pdev->dev, "failed to request ECHO GPIO\n");
+ return PTR_ERR(data->echo_pin);
+ }

+ if (data->echo_pin) {
ret = of_property_read_u32(np,
"echo-active-ms",
&value);
--
2.30.0


2021-02-16 11:40:44

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 7/7] pps: clients: gpio: Rearrange optional stuff in pps_gpio_setup()

Rearrange optional stuff in pps_gpio_setup() so it will go after mandatory one
and with reduced indentation. This will increase readability of the sources.

Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/pps/clients/pps-gpio.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/drivers/pps/clients/pps-gpio.c b/drivers/pps/clients/pps-gpio.c
index b097da5a659a..35799e6401c9 100644
--- a/drivers/pps/clients/pps-gpio.c
+++ b/drivers/pps/clients/pps-gpio.c
@@ -110,28 +110,31 @@ static int pps_gpio_setup(struct device *dev)
return dev_err_probe(dev, PTR_ERR(data->gpio_pin),
"failed to request PPS GPIO\n");

+ data->assert_falling_edge =
+ device_property_read_bool(dev, "assert-falling-edge");
+
data->echo_pin = devm_gpiod_get_optional(dev, "echo", GPIOD_OUT_LOW);
if (IS_ERR(data->echo_pin))
return dev_err_probe(dev, PTR_ERR(data->echo_pin),
"failed to request ECHO GPIO\n");

- if (data->echo_pin) {
- ret = device_property_read_u32(dev, "echo-active-ms", &value);
- if (ret) {
- dev_err(dev, "failed to get echo-active-ms from FW\n");
- return ret;
- }
- data->echo_active_ms = value;
- /* sanity check on echo_active_ms */
- if (!data->echo_active_ms || data->echo_active_ms > 999) {
- dev_err(dev, "echo-active-ms: %u - bad value from FW\n",
- data->echo_active_ms);
- return -EINVAL;
- }
+ if (!data->echo_pin)
+ return 0;
+
+ ret = device_property_read_u32(dev, "echo-active-ms", &value);
+ if (ret) {
+ dev_err(dev, "failed to get echo-active-ms from FW\n");
+ return ret;
}

- data->assert_falling_edge =
- device_property_read_bool(dev, "assert-falling-edge");
+ /* sanity check on echo_active_ms */
+ if (!value || value > 999) {
+ dev_err(dev, "echo-active-ms: %u - bad value from FW\n", value);
+ return -EINVAL;
+ }
+
+ data->echo_active_ms = value;
+
return 0;
}

--
2.30.0

2021-02-16 11:41:09

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 6/7] pps: clients: gpio: Use struct device pointer directly

In most parts of the code the platform device is not used.
Use struct device pointer directly to reduce code size and
increase readability.

Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/pps/clients/pps-gpio.c | 42 +++++++++++++++-------------------
1 file changed, 19 insertions(+), 23 deletions(-)

diff --git a/drivers/pps/clients/pps-gpio.c b/drivers/pps/clients/pps-gpio.c
index c6db3a3b257b..b097da5a659a 100644
--- a/drivers/pps/clients/pps-gpio.c
+++ b/drivers/pps/clients/pps-gpio.c
@@ -99,45 +99,39 @@ static void pps_gpio_echo_timer_callback(struct timer_list *t)
gpiod_set_value(info->echo_pin, 0);
}

-static int pps_gpio_setup(struct platform_device *pdev)
+static int pps_gpio_setup(struct device *dev)
{
- struct pps_gpio_device_data *data = platform_get_drvdata(pdev);
+ struct pps_gpio_device_data *data = dev_get_drvdata(dev);
int ret;
u32 value;

- data->gpio_pin = devm_gpiod_get(&pdev->dev,
- NULL, /* request "gpios" */
- GPIOD_IN);
+ data->gpio_pin = devm_gpiod_get(dev, NULL, GPIOD_IN);
if (IS_ERR(data->gpio_pin))
- return dev_err_probe(&pdev->dev, PTR_ERR(data->gpio_pin),
+ return dev_err_probe(dev, PTR_ERR(data->gpio_pin),
"failed to request PPS GPIO\n");

- data->echo_pin = devm_gpiod_get_optional(&pdev->dev,
- "echo",
- GPIOD_OUT_LOW);
+ data->echo_pin = devm_gpiod_get_optional(dev, "echo", GPIOD_OUT_LOW);
if (IS_ERR(data->echo_pin))
- return dev_err_probe(&pdev->dev, PTR_ERR(data->echo_pin),
+ return dev_err_probe(dev, PTR_ERR(data->echo_pin),
"failed to request ECHO GPIO\n");

if (data->echo_pin) {
- ret = device_property_read_u32(&pdev->dev, "echo-active-ms", &value);
+ ret = device_property_read_u32(dev, "echo-active-ms", &value);
if (ret) {
- dev_err(&pdev->dev,
- "failed to get echo-active-ms from FW\n");
+ dev_err(dev, "failed to get echo-active-ms from FW\n");
return ret;
}
data->echo_active_ms = value;
/* sanity check on echo_active_ms */
if (!data->echo_active_ms || data->echo_active_ms > 999) {
- dev_err(&pdev->dev,
- "echo-active-ms: %u - bad value from FW\n",
+ dev_err(dev, "echo-active-ms: %u - bad value from FW\n",
data->echo_active_ms);
return -EINVAL;
}
}

data->assert_falling_edge =
- device_property_read_bool(&pdev->dev, "assert-falling-edge");
+ device_property_read_bool(dev, "assert-falling-edge");
return 0;
}

@@ -158,24 +152,26 @@ get_irqf_trigger_flags(const struct pps_gpio_device_data *data)
static int pps_gpio_probe(struct platform_device *pdev)
{
struct pps_gpio_device_data *data;
+ struct device *dev = &pdev->dev;
int ret;
int pps_default_params;

/* allocate space for device info */
- data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
if (!data)
return -ENOMEM;
- platform_set_drvdata(pdev, data);
+
+ dev_set_drvdata(dev, data);

/* GPIO setup */
- ret = pps_gpio_setup(pdev);
+ ret = pps_gpio_setup(dev);
if (ret)
return -EINVAL;

/* IRQ setup */
ret = gpiod_to_irq(data->gpio_pin);
if (ret < 0) {
- dev_err(&pdev->dev, "failed to map GPIO to IRQ: %d\n", ret);
+ dev_err(dev, "failed to map GPIO to IRQ: %d\n", ret);
return -EINVAL;
}
data->irq = ret;
@@ -201,17 +197,17 @@ static int pps_gpio_probe(struct platform_device *pdev)
pps_default_params |= PPS_CAPTURECLEAR | PPS_OFFSETCLEAR;
data->pps = pps_register_source(&data->info, pps_default_params);
if (IS_ERR(data->pps)) {
- dev_err(&pdev->dev, "failed to register IRQ %d as PPS source\n",
+ dev_err(dev, "failed to register IRQ %d as PPS source\n",
data->irq);
return PTR_ERR(data->pps);
}

/* register IRQ interrupt handler */
- ret = devm_request_irq(&pdev->dev, data->irq, pps_gpio_irq_handler,
+ ret = devm_request_irq(dev, data->irq, pps_gpio_irq_handler,
get_irqf_trigger_flags(data), data->info.name, data);
if (ret) {
pps_unregister_source(data->pps);
- dev_err(&pdev->dev, "failed to acquire IRQ %d\n", data->irq);
+ dev_err(dev, "failed to acquire IRQ %d\n", data->irq);
return -EINVAL;
}

--
2.30.0

2021-02-16 11:41:28

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 5/7] pps: clients: gpio: Make use of device properties

Device property API allows to gather device resources from different sources,
such as ACPI. Convert the drivers to unleash the power of device property API.

Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/pps/clients/pps-gpio.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/pps/clients/pps-gpio.c b/drivers/pps/clients/pps-gpio.c
index 291240dce79e..c6db3a3b257b 100644
--- a/drivers/pps/clients/pps-gpio.c
+++ b/drivers/pps/clients/pps-gpio.c
@@ -12,14 +12,14 @@
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/pps_kernel.h>
#include <linux/gpio/consumer.h>
#include <linux/list.h>
-#include <linux/of_device.h>
-#include <linux/of_gpio.h>
+#include <linux/property.h>
#include <linux/timer.h>
#include <linux/jiffies.h>

@@ -102,7 +102,6 @@ static void pps_gpio_echo_timer_callback(struct timer_list *t)
static int pps_gpio_setup(struct platform_device *pdev)
{
struct pps_gpio_device_data *data = platform_get_drvdata(pdev);
- struct device_node *np = pdev->dev.of_node;
int ret;
u32 value;

@@ -121,26 +120,24 @@ static int pps_gpio_setup(struct platform_device *pdev)
"failed to request ECHO GPIO\n");

if (data->echo_pin) {
- ret = of_property_read_u32(np,
- "echo-active-ms",
- &value);
+ ret = device_property_read_u32(&pdev->dev, "echo-active-ms", &value);
if (ret) {
dev_err(&pdev->dev,
- "failed to get echo-active-ms from OF\n");
+ "failed to get echo-active-ms from FW\n");
return ret;
}
data->echo_active_ms = value;
/* sanity check on echo_active_ms */
if (!data->echo_active_ms || data->echo_active_ms > 999) {
dev_err(&pdev->dev,
- "echo-active-ms: %u - bad value from OF\n",
+ "echo-active-ms: %u - bad value from FW\n",
data->echo_active_ms);
return -EINVAL;
}
}

- if (of_property_read_bool(np, "assert-falling-edge"))
- data->assert_falling_edge = true;
+ data->assert_falling_edge =
+ device_property_read_bool(&pdev->dev, "assert-falling-edge");
return 0;
}

--
2.30.0

2021-02-26 17:09:07

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v1 1/7] pps: clients: gpio: Bail out on error when requesting GPIO echo line

On Tue, Feb 16, 2021 at 01:31:48PM +0200, Andy Shevchenko wrote:
> When requesting optional GPIO echo line, bail out on error,
> so user will know that something wrong with the existing property.

Guys, any comments on this series?

> Signed-off-by: Andy Shevchenko <[email protected]>
> ---
> drivers/pps/clients/pps-gpio.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pps/clients/pps-gpio.c b/drivers/pps/clients/pps-gpio.c
> index e0de1df2ede0..f89c31aa66f1 100644
> --- a/drivers/pps/clients/pps-gpio.c
> +++ b/drivers/pps/clients/pps-gpio.c
> @@ -119,12 +119,12 @@ static int pps_gpio_setup(struct platform_device *pdev)
> data->echo_pin = devm_gpiod_get_optional(&pdev->dev,
> "echo",
> GPIOD_OUT_LOW);
> - if (data->echo_pin) {
> - if (IS_ERR(data->echo_pin)) {
> - dev_err(&pdev->dev, "failed to request ECHO GPIO\n");
> - return PTR_ERR(data->echo_pin);
> - }
> + if (IS_ERR(data->echo_pin)) {
> + dev_err(&pdev->dev, "failed to request ECHO GPIO\n");
> + return PTR_ERR(data->echo_pin);
> + }
>
> + if (data->echo_pin) {
> ret = of_property_read_u32(np,
> "echo-active-ms",
> &value);
> --
> 2.30.0
>

--
With Best Regards,
Andy Shevchenko


2021-03-09 10:49:53

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v1 1/7] pps: clients: gpio: Bail out on error when requesting GPIO echo line

+Cc: Greg

On Fri, Feb 26, 2021 at 07:03:32PM +0200, Andy Shevchenko wrote:
> On Tue, Feb 16, 2021 at 01:31:48PM +0200, Andy Shevchenko wrote:
> > When requesting optional GPIO echo line, bail out on error,
> > so user will know that something wrong with the existing property.
>
> Guys, any comments on this series?

Greg, seems PPS maintainer keeps silent, can I route this series thru one of
yours tree (resend implied)?

--
With Best Regards,
Andy Shevchenko


2021-03-09 11:00:51

by Rodolfo Giometti

[permalink] [raw]
Subject: Re: [PATCH v1 1/7] pps: clients: gpio: Bail out on error when requesting GPIO echo line

On 09/03/21 11:47, Andy Shevchenko wrote:
> +Cc: Greg
>
> On Fri, Feb 26, 2021 at 07:03:32PM +0200, Andy Shevchenko wrote:
>> On Tue, Feb 16, 2021 at 01:31:48PM +0200, Andy Shevchenko wrote:
>>> When requesting optional GPIO echo line, bail out on error,
>>> so user will know that something wrong with the existing property.
>>
>> Guys, any comments on this series?
>
> Greg, seems PPS maintainer keeps silent, can I route this series thru one of
> yours tree (resend implied)?

I'm sorry but I suppose I missed this patch... -_-'

Can you please resend it to me?

Ciao,

Rodolfo

--
GNU/Linux Solutions e-mail: [email protected]
Linux Device Driver [email protected]
Embedded Systems phone: +39 349 2432127
UNIX programming skype: rodolfo.giometti

2021-03-09 11:32:13

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v1 1/7] pps: clients: gpio: Bail out on error when requesting GPIO echo line

On Tue, Mar 09, 2021 at 11:51:58AM +0100, Rodolfo Giometti wrote:
> On 09/03/21 11:47, Andy Shevchenko wrote:
> > +Cc: Greg
> >
> > On Fri, Feb 26, 2021 at 07:03:32PM +0200, Andy Shevchenko wrote:
> >> On Tue, Feb 16, 2021 at 01:31:48PM +0200, Andy Shevchenko wrote:
> >>> When requesting optional GPIO echo line, bail out on error,
> >>> so user will know that something wrong with the existing property.
> >>
> >> Guys, any comments on this series?
> >
> > Greg, seems PPS maintainer keeps silent, can I route this series thru one of
> > yours tree (resend implied)?
>
> I'm sorry but I suppose I missed this patch... -_-'

Entire series (7 patches) has been Cc'ed to you :-)

> Can you please resend it to me?

Okay, I will resend with Greg included just in case.

Done!

For the future, I recommend to switch to b4 tool (most likely already in your
Linux distribution), so

0/ Install b4 tool (if not yet in distro: `pip install b4` should work)
1/ Find message ID for the thread, for example,
[email protected] (v1)
[email protected] (v1 resend)

2/ `b4 am -s $MESSAGE_ID`, replace $MESSAGE_ID with one of the above
3/ it will download a mailbox that you may apply with `git am ...`

--
With Best Regards,
Andy Shevchenko


2021-03-09 12:34:43

by Rodolfo Giometti

[permalink] [raw]
Subject: Re: [PATCH v1 1/7] pps: clients: gpio: Bail out on error when requesting GPIO echo line

On 09/03/21 12:28, Andy Shevchenko wrote:
> On Tue, Mar 09, 2021 at 11:51:58AM +0100, Rodolfo Giometti wrote:
>> On 09/03/21 11:47, Andy Shevchenko wrote:
>>> +Cc: Greg
>>>
>>> On Fri, Feb 26, 2021 at 07:03:32PM +0200, Andy Shevchenko wrote:
>>>> On Tue, Feb 16, 2021 at 01:31:48PM +0200, Andy Shevchenko wrote:
>>>>> When requesting optional GPIO echo line, bail out on error,
>>>>> so user will know that something wrong with the existing property.
>>>>
>>>> Guys, any comments on this series?
>>>
>>> Greg, seems PPS maintainer keeps silent, can I route this series thru one of
>>> yours tree (resend implied)?
>>
>> I'm sorry but I suppose I missed this patch... -_-'
>
> Entire series (7 patches) has been Cc'ed to you :-)
>
>> Can you please resend it to me?
>
> Okay, I will resend with Greg included just in case.
>
> Done!

Thanks! Got them and acked. :-)

Sorry for delay.

> For the future, I recommend to switch to b4 tool (most likely already in your
> Linux distribution), so
>
> 0/ Install b4 tool (if not yet in distro: `pip install b4` should work)
> 1/ Find message ID for the thread, for example,
> [email protected] (v1)
> [email protected] (v1 resend)
>
> 2/ `b4 am -s $MESSAGE_ID`, replace $MESSAGE_ID with one of the above
> 3/ it will download a mailbox that you may apply with `git am ...`

Uao! I'm going to use it for sure! Thanks.

Ciao,

Rodolfo

--
GNU/Linux Solutions e-mail: [email protected]
Linux Device Driver [email protected]
Embedded Systems phone: +39 349 2432127
UNIX programming skype: rodolfo.giometti