All of lore.kernel.org
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <krzk@kernel.org>
To: linux-nfc@lists.01.org
Subject: [linux-nfc] Re: [PATCH v2 net-next 3/3] nfc: s3fwrn5: extract the common phy blocks
Date: Mon, 30 Nov 2020 09:18:20 +0100	[thread overview]
Message-ID: <20201130081820.GA4790@kozik-lap> (raw)
In-Reply-To: CACwDmQC_QrWz=vJN0u0eQAX0fGV__W8cLBF5q7goCxB7Wc2y7A@mail.gmail.com

[-- Attachment #1: Type: text/plain, Size: 8709 bytes --]

On Sun, Nov 29, 2020@06:55:10PM +0900, Bongsu Jeon wrote:
> On Sat, Nov 28, 2020@9:49 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > This is not a proper wrapping. Wrapping happens on function arguments.
> >
> > > +             if (!gpio_is_valid(phy->common.gpio_en))
> > >                       return -ENODEV;
> > >       }
> > >
> > > -     phy->gpio_fw_wake = of_get_named_gpio(np, "wake-gpios", 0);
> > > -     if (!gpio_is_valid(phy->gpio_fw_wake)) {
> > > +     phy->common.gpio_fw_wake = of_get_named_gpio(np, "wake-gpios", 0);
> > > +     if (!gpio_is_valid(phy->common.gpio_fw_wake)) {
> > >               /* Support also deprecated property */
> > > -             phy->gpio_fw_wake = of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0);
> > > -             if (!gpio_is_valid(phy->gpio_fw_wake))
> > > +             phy->common.gpio_fw_wake =
> > > +                             of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0);
> > > +             if (!gpio_is_valid(phy->common.gpio_fw_wake))
> >
> > The same.
> >
> 
> Even though I wrapped this as below, Second line("s3fwrn5,fw-gpios" )
> was over 80 columns.
> Is it okay as below?
> phy->gpio_fw_wake =of_get_named_gpio(np,
> 
> "s3fwrn5,fw-gpios",
>                                                                      0);

Your email client breaks indentation so I cannot answer. The wrapping - as
explained in CodingStyle - would look like:

		phy->common.gpio_fw_wake = of_get_named_gpio(np,
							     "s3fwrn5,fw-gpios",
							     0);

It's not a problem if single argument exceeds 80 character.

> 
> 
> > >                       return -ENODEV;
> > >       }
> > >
> > > @@ -226,8 +184,8 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >       if (!phy)
> > >               return -ENOMEM;
> > >
> > > -     mutex_init(&phy->mutex);
> > > -     phy->mode = S3FWRN5_MODE_COLD;
> > > +     mutex_init(&phy->common.mutex);
> > > +     phy->common.mode = S3FWRN5_MODE_COLD;
> > >       phy->irq_skip = true;
> > >
> > >       phy->i2c_dev = client;
> > > @@ -237,17 +195,19 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_en,
> > > -             GPIOF_OUT_INIT_HIGH, "s3fwrn5_en");
> > > +     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->common.gpio_en,
> > > +                                 GPIOF_OUT_INIT_HIGH, "s3fwrn5_en");
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_fw_wake,
> > > -             GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake");
> > > +     ret = devm_gpio_request_one(&phy->i2c_dev->dev,
> > > +                                 phy->common.gpio_fw_wake,
> > > +                                 GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake");
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = s3fwrn5_probe(&phy->ndev, phy, &phy->i2c_dev->dev, &i2c_phy_ops);
> > > +     ret = s3fwrn5_probe(&phy->common.ndev, phy, &phy->i2c_dev->dev,
> > > +                         &i2c_phy_ops);
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > @@ -255,7 +215,7 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >               s3fwrn5_i2c_irq_thread_fn, IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
> > >               S3FWRN5_I2C_DRIVER_NAME, phy);
> > >       if (ret)
> > > -             s3fwrn5_remove(phy->ndev);
> > > +             s3fwrn5_remove(phy->common.ndev);
> > >
> > >       return ret;
> > >  }
> > > @@ -264,7 +224,7 @@ static int s3fwrn5_i2c_remove(struct i2c_client *client)
> > >  {
> > >       struct s3fwrn5_i2c_phy *phy = i2c_get_clientdata(client);
> > >
> > > -     s3fwrn5_remove(phy->ndev);
> > > +     s3fwrn5_remove(phy->common.ndev);
> > >
> > >       return 0;
> > >  }
> > > diff --git a/drivers/nfc/s3fwrn5/phy_common.c b/drivers/nfc/s3fwrn5/phy_common.c
> > > new file mode 100644
> > > index 0000000..e333764
> > > --- /dev/null
> > > +++ b/drivers/nfc/s3fwrn5/phy_common.c
> > > @@ -0,0 +1,60 @@
> > > +// SPDX-License-Identifier: GPL-2.0-or-later
> > > +/*
> > > + * Link Layer for Samsung S3FWRN5 NCI based Driver
> > > + *
> > > + * Copyright (C) 2015 Samsung Electrnoics
> > > + * Robert Baldyga <r.baldyga@samsung.com>
> > > + * Copyright (C) 2020 Samsung Electrnoics
> > > + * Bongsu Jeon <bongsu.jeon@samsung.com>
> > > + */
> > > +
> > > +#include <linux/gpio.h>
> > > +#include <linux/delay.h>
> >
> > You need also mutex.h (it seems original code did not have it but since
> > you move things around it's a new code basically).
> >
> > > +
> > > +#include "s3fwrn5.h"
> > > +#include "phy_common.h"
> > > +
> > > +void s3fwrn5_phy_set_wake(void *phy_id, bool wake)
> > > +{
> > > +     struct phy_common *phy = phy_id;
> > > +
> > > +     mutex_lock(&phy->mutex);
> > > +     gpio_set_value(phy->gpio_fw_wake, wake);
> > > +     msleep(S3FWRN5_EN_WAIT_TIME);
> > > +     mutex_unlock(&phy->mutex);
> > > +}
> > > +
> > > +bool s3fwrn5_phy_power_ctrl(struct phy_common *phy, enum s3fwrn5_mode mode)
> > > +{
> > > +     if (phy->mode == mode)
> > > +             return false;
> > > +
> > > +     phy->mode = mode;
> > > +
> > > +     gpio_set_value(phy->gpio_en, 1);
> > > +     gpio_set_value(phy->gpio_fw_wake, 0);
> > > +     if (mode == S3FWRN5_MODE_FW)
> > > +             gpio_set_value(phy->gpio_fw_wake, 1);
> > > +
> > > +     if (mode != S3FWRN5_MODE_COLD) {
> > > +             msleep(S3FWRN5_EN_WAIT_TIME);
> > > +             gpio_set_value(phy->gpio_en, 0);
> > > +             msleep(S3FWRN5_EN_WAIT_TIME);
> > > +     }
> > > +
> > > +     return true;
> > > +}
> > > +
> > > +enum s3fwrn5_mode s3fwrn5_phy_get_mode(void *phy_id)
> > > +{
> > > +     struct phy_common *phy = phy_id;
> > > +     enum s3fwrn5_mode mode;
> > > +
> > > +     mutex_lock(&phy->mutex);
> > > +
> > > +     mode = phy->mode;
> > > +
> > > +     mutex_unlock(&phy->mutex);
> > > +
> > > +     return mode;
> > > +}
> > > diff --git a/drivers/nfc/s3fwrn5/phy_common.h b/drivers/nfc/s3fwrn5/phy_common.h
> > > new file mode 100644
> > > index 0000000..b920f7f
> > > --- /dev/null
> > > +++ b/drivers/nfc/s3fwrn5/phy_common.h
> > > @@ -0,0 +1,31 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-or-later
> > > + *
> > > + * Link Layer for Samsung S3FWRN5 NCI based Driver
> > > + *
> > > + * Copyright (C) 2015 Samsung Electrnoics
> > > + * Robert Baldyga <r.baldyga@samsung.com>
> > > + * Copyright (C) 2020 Samsung Electrnoics
> > > + * Bongsu Jeon <bongsu.jeon@samsung.com>
> > > + */
> > > +
> > > +#ifndef __NFC_S3FWRN5_PHY_COMMON_H
> > > +#define __NFC_S3FWRN5_PHY_COMMON_H
> > > +
> > > +#define S3FWRN5_EN_WAIT_TIME 20
> > > +
> > > +struct phy_common {
> > > +     struct nci_dev *ndev;
> >
> > You need a header for nci_dev type.
> >
> > > +
> > > +     int gpio_en;
> > > +     int gpio_fw_wake;
> > > +
> > > +     struct mutex mutex;
> >
> > You need a header include for mutex.
> >
> > > +
> > > +     enum s3fwrn5_mode mode;
> >
> > Indeed now it won't work - you use an enum without its declaration. The
> > s3fwrn5_mode enum looks more like a property of the phy and after this
> > patch would be used only once in i2c.c and once in core.c.
> >
> 
> Yes.  phy_common.h doesn't include nci_dev and mutex and s3fwrn5_mode
> declaration.
> So,  i2c.c and phy_common.c include "s3fwrn5.h" first and then "
> ( mutex and nci_dev would be included from nci_core.h and 3fwrn5_mode
> would be included  from s3fwrn5.h).

The header usually should include everything which is used inside, so
mutex.

> 
> > How is it going to be used in your new driver - I cannot check because
> > you did not post it. You should post this refactoring with new users of
> > the API, so we could see bigger picture.
> >
> 
> Okay. Then, I will add the UART driver.
> So, I will resend the patches as below.
> 1. [PATCH net-next 1/4] dt-bindings: net: nfc: s3fwrn5: Support a UART interface
> 2. [PATCH net-next 2/4] nfc: s3fwrn5: reduce the EN_WAIT_TIME (*
> because of Jakub's request )
> 3. [PATCH net-next 3/4] nfc: s3fwrn5: extract the common phy blocks
> 4. [PATCH net-next 4/4] net: nfc: s3fwrn5: Support a UART interface
> 
> > Your original idea - with the s3fwrn5.h include here - looks more
> > logical than moving the enum s3fwrn5_mode here.
> >
> 
> Do you mean that it would be better to include the s3fwrn5.h in phy_common.h?

Yes.

Best regards,
Krzysztof

WARNING: multiple messages have this Message-ID (diff)
From: Krzysztof Kozlowski <krzk@kernel.org>
To: linux-nfc@lists.01.org
Subject: Re: [PATCH v2 net-next 3/3] nfc: s3fwrn5: extract the common phy blocks
Date: Mon, 30 Nov 2020 09:18:20 +0100	[thread overview]
Message-ID: <20201130081820.GA4790@kozik-lap> (raw)
In-Reply-To: <CACwDmQC_QrWz=vJN0u0eQAX0fGV__W8cLBF5q7goCxB7Wc2y7A@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 8715 bytes --]

On Sun, Nov 29, 2020 at 06:55:10PM +0900, Bongsu Jeon wrote:
> On Sat, Nov 28, 2020 at 9:49 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > This is not a proper wrapping. Wrapping happens on function arguments.
> >
> > > +             if (!gpio_is_valid(phy->common.gpio_en))
> > >                       return -ENODEV;
> > >       }
> > >
> > > -     phy->gpio_fw_wake = of_get_named_gpio(np, "wake-gpios", 0);
> > > -     if (!gpio_is_valid(phy->gpio_fw_wake)) {
> > > +     phy->common.gpio_fw_wake = of_get_named_gpio(np, "wake-gpios", 0);
> > > +     if (!gpio_is_valid(phy->common.gpio_fw_wake)) {
> > >               /* Support also deprecated property */
> > > -             phy->gpio_fw_wake = of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0);
> > > -             if (!gpio_is_valid(phy->gpio_fw_wake))
> > > +             phy->common.gpio_fw_wake =
> > > +                             of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0);
> > > +             if (!gpio_is_valid(phy->common.gpio_fw_wake))
> >
> > The same.
> >
> 
> Even though I wrapped this as below, Second line("s3fwrn5,fw-gpios" )
> was over 80 columns.
> Is it okay as below?
> phy->gpio_fw_wake =of_get_named_gpio(np,
> 
> "s3fwrn5,fw-gpios",
>                                                                      0);

Your email client breaks indentation so I cannot answer. The wrapping - as
explained in CodingStyle - would look like:

		phy->common.gpio_fw_wake = of_get_named_gpio(np,
							     "s3fwrn5,fw-gpios",
							     0);

It's not a problem if single argument exceeds 80 character.

> 
> 
> > >                       return -ENODEV;
> > >       }
> > >
> > > @@ -226,8 +184,8 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >       if (!phy)
> > >               return -ENOMEM;
> > >
> > > -     mutex_init(&phy->mutex);
> > > -     phy->mode = S3FWRN5_MODE_COLD;
> > > +     mutex_init(&phy->common.mutex);
> > > +     phy->common.mode = S3FWRN5_MODE_COLD;
> > >       phy->irq_skip = true;
> > >
> > >       phy->i2c_dev = client;
> > > @@ -237,17 +195,19 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_en,
> > > -             GPIOF_OUT_INIT_HIGH, "s3fwrn5_en");
> > > +     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->common.gpio_en,
> > > +                                 GPIOF_OUT_INIT_HIGH, "s3fwrn5_en");
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_fw_wake,
> > > -             GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake");
> > > +     ret = devm_gpio_request_one(&phy->i2c_dev->dev,
> > > +                                 phy->common.gpio_fw_wake,
> > > +                                 GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake");
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = s3fwrn5_probe(&phy->ndev, phy, &phy->i2c_dev->dev, &i2c_phy_ops);
> > > +     ret = s3fwrn5_probe(&phy->common.ndev, phy, &phy->i2c_dev->dev,
> > > +                         &i2c_phy_ops);
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > @@ -255,7 +215,7 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >               s3fwrn5_i2c_irq_thread_fn, IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
> > >               S3FWRN5_I2C_DRIVER_NAME, phy);
> > >       if (ret)
> > > -             s3fwrn5_remove(phy->ndev);
> > > +             s3fwrn5_remove(phy->common.ndev);
> > >
> > >       return ret;
> > >  }
> > > @@ -264,7 +224,7 @@ static int s3fwrn5_i2c_remove(struct i2c_client *client)
> > >  {
> > >       struct s3fwrn5_i2c_phy *phy = i2c_get_clientdata(client);
> > >
> > > -     s3fwrn5_remove(phy->ndev);
> > > +     s3fwrn5_remove(phy->common.ndev);
> > >
> > >       return 0;
> > >  }
> > > diff --git a/drivers/nfc/s3fwrn5/phy_common.c b/drivers/nfc/s3fwrn5/phy_common.c
> > > new file mode 100644
> > > index 0000000..e333764
> > > --- /dev/null
> > > +++ b/drivers/nfc/s3fwrn5/phy_common.c
> > > @@ -0,0 +1,60 @@
> > > +// SPDX-License-Identifier: GPL-2.0-or-later
> > > +/*
> > > + * Link Layer for Samsung S3FWRN5 NCI based Driver
> > > + *
> > > + * Copyright (C) 2015 Samsung Electrnoics
> > > + * Robert Baldyga <r.baldyga@samsung.com>
> > > + * Copyright (C) 2020 Samsung Electrnoics
> > > + * Bongsu Jeon <bongsu.jeon@samsung.com>
> > > + */
> > > +
> > > +#include <linux/gpio.h>
> > > +#include <linux/delay.h>
> >
> > You need also mutex.h (it seems original code did not have it but since
> > you move things around it's a new code basically).
> >
> > > +
> > > +#include "s3fwrn5.h"
> > > +#include "phy_common.h"
> > > +
> > > +void s3fwrn5_phy_set_wake(void *phy_id, bool wake)
> > > +{
> > > +     struct phy_common *phy = phy_id;
> > > +
> > > +     mutex_lock(&phy->mutex);
> > > +     gpio_set_value(phy->gpio_fw_wake, wake);
> > > +     msleep(S3FWRN5_EN_WAIT_TIME);
> > > +     mutex_unlock(&phy->mutex);
> > > +}
> > > +
> > > +bool s3fwrn5_phy_power_ctrl(struct phy_common *phy, enum s3fwrn5_mode mode)
> > > +{
> > > +     if (phy->mode == mode)
> > > +             return false;
> > > +
> > > +     phy->mode = mode;
> > > +
> > > +     gpio_set_value(phy->gpio_en, 1);
> > > +     gpio_set_value(phy->gpio_fw_wake, 0);
> > > +     if (mode == S3FWRN5_MODE_FW)
> > > +             gpio_set_value(phy->gpio_fw_wake, 1);
> > > +
> > > +     if (mode != S3FWRN5_MODE_COLD) {
> > > +             msleep(S3FWRN5_EN_WAIT_TIME);
> > > +             gpio_set_value(phy->gpio_en, 0);
> > > +             msleep(S3FWRN5_EN_WAIT_TIME);
> > > +     }
> > > +
> > > +     return true;
> > > +}
> > > +
> > > +enum s3fwrn5_mode s3fwrn5_phy_get_mode(void *phy_id)
> > > +{
> > > +     struct phy_common *phy = phy_id;
> > > +     enum s3fwrn5_mode mode;
> > > +
> > > +     mutex_lock(&phy->mutex);
> > > +
> > > +     mode = phy->mode;
> > > +
> > > +     mutex_unlock(&phy->mutex);
> > > +
> > > +     return mode;
> > > +}
> > > diff --git a/drivers/nfc/s3fwrn5/phy_common.h b/drivers/nfc/s3fwrn5/phy_common.h
> > > new file mode 100644
> > > index 0000000..b920f7f
> > > --- /dev/null
> > > +++ b/drivers/nfc/s3fwrn5/phy_common.h
> > > @@ -0,0 +1,31 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-or-later
> > > + *
> > > + * Link Layer for Samsung S3FWRN5 NCI based Driver
> > > + *
> > > + * Copyright (C) 2015 Samsung Electrnoics
> > > + * Robert Baldyga <r.baldyga@samsung.com>
> > > + * Copyright (C) 2020 Samsung Electrnoics
> > > + * Bongsu Jeon <bongsu.jeon@samsung.com>
> > > + */
> > > +
> > > +#ifndef __NFC_S3FWRN5_PHY_COMMON_H
> > > +#define __NFC_S3FWRN5_PHY_COMMON_H
> > > +
> > > +#define S3FWRN5_EN_WAIT_TIME 20
> > > +
> > > +struct phy_common {
> > > +     struct nci_dev *ndev;
> >
> > You need a header for nci_dev type.
> >
> > > +
> > > +     int gpio_en;
> > > +     int gpio_fw_wake;
> > > +
> > > +     struct mutex mutex;
> >
> > You need a header include for mutex.
> >
> > > +
> > > +     enum s3fwrn5_mode mode;
> >
> > Indeed now it won't work - you use an enum without its declaration. The
> > s3fwrn5_mode enum looks more like a property of the phy and after this
> > patch would be used only once in i2c.c and once in core.c.
> >
> 
> Yes.  phy_common.h doesn't include nci_dev and mutex and s3fwrn5_mode
> declaration.
> So,  i2c.c and phy_common.c include "s3fwrn5.h" first and then "
> ( mutex and nci_dev would be included from nci_core.h and 3fwrn5_mode
> would be included  from s3fwrn5.h).

The header usually should include everything which is used inside, so
mutex.

> 
> > How is it going to be used in your new driver - I cannot check because
> > you did not post it. You should post this refactoring with new users of
> > the API, so we could see bigger picture.
> >
> 
> Okay. Then, I will add the UART driver.
> So, I will resend the patches as below.
> 1. [PATCH net-next 1/4] dt-bindings: net: nfc: s3fwrn5: Support a UART interface
> 2. [PATCH net-next 2/4] nfc: s3fwrn5: reduce the EN_WAIT_TIME (*
> because of Jakub's request )
> 3. [PATCH net-next 3/4] nfc: s3fwrn5: extract the common phy blocks
> 4. [PATCH net-next 4/4] net: nfc: s3fwrn5: Support a UART interface
> 
> > Your original idea - with the s3fwrn5.h include here - looks more
> > logical than moving the enum s3fwrn5_mode here.
> >
> 
> Do you mean that it would be better to include the s3fwrn5.h in phy_common.h?

Yes.

Best regards,
Krzysztof

WARNING: multiple messages have this Message-ID (diff)
From: Krzysztof Kozlowski <krzk@kernel.org>
To: Bongsu Jeon <bongsu.jeon2@gmail.com>
Cc: Krzysztof Opasiak <k.opasiak@samsung.com>,
	linux-nfc@lists.01.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Bongsu Jeon <bongsu.jeon@samsung.com>
Subject: Re: [PATCH v2 net-next 3/3] nfc: s3fwrn5: extract the common phy blocks
Date: Mon, 30 Nov 2020 09:18:20 +0100	[thread overview]
Message-ID: <20201130081820.GA4790@kozik-lap> (raw)
In-Reply-To: <CACwDmQC_QrWz=vJN0u0eQAX0fGV__W8cLBF5q7goCxB7Wc2y7A@mail.gmail.com>

On Sun, Nov 29, 2020 at 06:55:10PM +0900, Bongsu Jeon wrote:
> On Sat, Nov 28, 2020 at 9:49 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> > This is not a proper wrapping. Wrapping happens on function arguments.
> >
> > > +             if (!gpio_is_valid(phy->common.gpio_en))
> > >                       return -ENODEV;
> > >       }
> > >
> > > -     phy->gpio_fw_wake = of_get_named_gpio(np, "wake-gpios", 0);
> > > -     if (!gpio_is_valid(phy->gpio_fw_wake)) {
> > > +     phy->common.gpio_fw_wake = of_get_named_gpio(np, "wake-gpios", 0);
> > > +     if (!gpio_is_valid(phy->common.gpio_fw_wake)) {
> > >               /* Support also deprecated property */
> > > -             phy->gpio_fw_wake = of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0);
> > > -             if (!gpio_is_valid(phy->gpio_fw_wake))
> > > +             phy->common.gpio_fw_wake =
> > > +                             of_get_named_gpio(np, "s3fwrn5,fw-gpios", 0);
> > > +             if (!gpio_is_valid(phy->common.gpio_fw_wake))
> >
> > The same.
> >
> 
> Even though I wrapped this as below, Second line("s3fwrn5,fw-gpios" )
> was over 80 columns.
> Is it okay as below?
> phy->gpio_fw_wake =of_get_named_gpio(np,
> 
> "s3fwrn5,fw-gpios",
>                                                                      0);

Your email client breaks indentation so I cannot answer. The wrapping - as
explained in CodingStyle - would look like:

		phy->common.gpio_fw_wake = of_get_named_gpio(np,
							     "s3fwrn5,fw-gpios",
							     0);

It's not a problem if single argument exceeds 80 character.

> 
> 
> > >                       return -ENODEV;
> > >       }
> > >
> > > @@ -226,8 +184,8 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >       if (!phy)
> > >               return -ENOMEM;
> > >
> > > -     mutex_init(&phy->mutex);
> > > -     phy->mode = S3FWRN5_MODE_COLD;
> > > +     mutex_init(&phy->common.mutex);
> > > +     phy->common.mode = S3FWRN5_MODE_COLD;
> > >       phy->irq_skip = true;
> > >
> > >       phy->i2c_dev = client;
> > > @@ -237,17 +195,19 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_en,
> > > -             GPIOF_OUT_INIT_HIGH, "s3fwrn5_en");
> > > +     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->common.gpio_en,
> > > +                                 GPIOF_OUT_INIT_HIGH, "s3fwrn5_en");
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = devm_gpio_request_one(&phy->i2c_dev->dev, phy->gpio_fw_wake,
> > > -             GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake");
> > > +     ret = devm_gpio_request_one(&phy->i2c_dev->dev,
> > > +                                 phy->common.gpio_fw_wake,
> > > +                                 GPIOF_OUT_INIT_LOW, "s3fwrn5_fw_wake");
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > -     ret = s3fwrn5_probe(&phy->ndev, phy, &phy->i2c_dev->dev, &i2c_phy_ops);
> > > +     ret = s3fwrn5_probe(&phy->common.ndev, phy, &phy->i2c_dev->dev,
> > > +                         &i2c_phy_ops);
> > >       if (ret < 0)
> > >               return ret;
> > >
> > > @@ -255,7 +215,7 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,
> > >               s3fwrn5_i2c_irq_thread_fn, IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
> > >               S3FWRN5_I2C_DRIVER_NAME, phy);
> > >       if (ret)
> > > -             s3fwrn5_remove(phy->ndev);
> > > +             s3fwrn5_remove(phy->common.ndev);
> > >
> > >       return ret;
> > >  }
> > > @@ -264,7 +224,7 @@ static int s3fwrn5_i2c_remove(struct i2c_client *client)
> > >  {
> > >       struct s3fwrn5_i2c_phy *phy = i2c_get_clientdata(client);
> > >
> > > -     s3fwrn5_remove(phy->ndev);
> > > +     s3fwrn5_remove(phy->common.ndev);
> > >
> > >       return 0;
> > >  }
> > > diff --git a/drivers/nfc/s3fwrn5/phy_common.c b/drivers/nfc/s3fwrn5/phy_common.c
> > > new file mode 100644
> > > index 0000000..e333764
> > > --- /dev/null
> > > +++ b/drivers/nfc/s3fwrn5/phy_common.c
> > > @@ -0,0 +1,60 @@
> > > +// SPDX-License-Identifier: GPL-2.0-or-later
> > > +/*
> > > + * Link Layer for Samsung S3FWRN5 NCI based Driver
> > > + *
> > > + * Copyright (C) 2015 Samsung Electrnoics
> > > + * Robert Baldyga <r.baldyga@samsung.com>
> > > + * Copyright (C) 2020 Samsung Electrnoics
> > > + * Bongsu Jeon <bongsu.jeon@samsung.com>
> > > + */
> > > +
> > > +#include <linux/gpio.h>
> > > +#include <linux/delay.h>
> >
> > You need also mutex.h (it seems original code did not have it but since
> > you move things around it's a new code basically).
> >
> > > +
> > > +#include "s3fwrn5.h"
> > > +#include "phy_common.h"
> > > +
> > > +void s3fwrn5_phy_set_wake(void *phy_id, bool wake)
> > > +{
> > > +     struct phy_common *phy = phy_id;
> > > +
> > > +     mutex_lock(&phy->mutex);
> > > +     gpio_set_value(phy->gpio_fw_wake, wake);
> > > +     msleep(S3FWRN5_EN_WAIT_TIME);
> > > +     mutex_unlock(&phy->mutex);
> > > +}
> > > +
> > > +bool s3fwrn5_phy_power_ctrl(struct phy_common *phy, enum s3fwrn5_mode mode)
> > > +{
> > > +     if (phy->mode == mode)
> > > +             return false;
> > > +
> > > +     phy->mode = mode;
> > > +
> > > +     gpio_set_value(phy->gpio_en, 1);
> > > +     gpio_set_value(phy->gpio_fw_wake, 0);
> > > +     if (mode == S3FWRN5_MODE_FW)
> > > +             gpio_set_value(phy->gpio_fw_wake, 1);
> > > +
> > > +     if (mode != S3FWRN5_MODE_COLD) {
> > > +             msleep(S3FWRN5_EN_WAIT_TIME);
> > > +             gpio_set_value(phy->gpio_en, 0);
> > > +             msleep(S3FWRN5_EN_WAIT_TIME);
> > > +     }
> > > +
> > > +     return true;
> > > +}
> > > +
> > > +enum s3fwrn5_mode s3fwrn5_phy_get_mode(void *phy_id)
> > > +{
> > > +     struct phy_common *phy = phy_id;
> > > +     enum s3fwrn5_mode mode;
> > > +
> > > +     mutex_lock(&phy->mutex);
> > > +
> > > +     mode = phy->mode;
> > > +
> > > +     mutex_unlock(&phy->mutex);
> > > +
> > > +     return mode;
> > > +}
> > > diff --git a/drivers/nfc/s3fwrn5/phy_common.h b/drivers/nfc/s3fwrn5/phy_common.h
> > > new file mode 100644
> > > index 0000000..b920f7f
> > > --- /dev/null
> > > +++ b/drivers/nfc/s3fwrn5/phy_common.h
> > > @@ -0,0 +1,31 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-or-later
> > > + *
> > > + * Link Layer for Samsung S3FWRN5 NCI based Driver
> > > + *
> > > + * Copyright (C) 2015 Samsung Electrnoics
> > > + * Robert Baldyga <r.baldyga@samsung.com>
> > > + * Copyright (C) 2020 Samsung Electrnoics
> > > + * Bongsu Jeon <bongsu.jeon@samsung.com>
> > > + */
> > > +
> > > +#ifndef __NFC_S3FWRN5_PHY_COMMON_H
> > > +#define __NFC_S3FWRN5_PHY_COMMON_H
> > > +
> > > +#define S3FWRN5_EN_WAIT_TIME 20
> > > +
> > > +struct phy_common {
> > > +     struct nci_dev *ndev;
> >
> > You need a header for nci_dev type.
> >
> > > +
> > > +     int gpio_en;
> > > +     int gpio_fw_wake;
> > > +
> > > +     struct mutex mutex;
> >
> > You need a header include for mutex.
> >
> > > +
> > > +     enum s3fwrn5_mode mode;
> >
> > Indeed now it won't work - you use an enum without its declaration. The
> > s3fwrn5_mode enum looks more like a property of the phy and after this
> > patch would be used only once in i2c.c and once in core.c.
> >
> 
> Yes.  phy_common.h doesn't include nci_dev and mutex and s3fwrn5_mode
> declaration.
> So,  i2c.c and phy_common.c include "s3fwrn5.h" first and then "
> ( mutex and nci_dev would be included from nci_core.h and 3fwrn5_mode
> would be included  from s3fwrn5.h).

The header usually should include everything which is used inside, so
mutex.

> 
> > How is it going to be used in your new driver - I cannot check because
> > you did not post it. You should post this refactoring with new users of
> > the API, so we could see bigger picture.
> >
> 
> Okay. Then, I will add the UART driver.
> So, I will resend the patches as below.
> 1. [PATCH net-next 1/4] dt-bindings: net: nfc: s3fwrn5: Support a UART interface
> 2. [PATCH net-next 2/4] nfc: s3fwrn5: reduce the EN_WAIT_TIME (*
> because of Jakub's request )
> 3. [PATCH net-next 3/4] nfc: s3fwrn5: extract the common phy blocks
> 4. [PATCH net-next 4/4] net: nfc: s3fwrn5: Support a UART interface
> 
> > Your original idea - with the s3fwrn5.h include here - looks more
> > logical than moving the enum s3fwrn5_mode here.
> >
> 
> Do you mean that it would be better to include the s3fwrn5.h in phy_common.h?

Yes.

Best regards,
Krzysztof

             reply	other threads:[~2020-11-30  8:18 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-30  8:18 Krzysztof Kozlowski [this message]
2020-11-30  8:18 ` [PATCH v2 net-next 3/3] nfc: s3fwrn5: extract the common phy blocks Krzysztof Kozlowski
2020-11-30  8:18 ` Krzysztof Kozlowski
  -- strict thread matches above, loose matches on Subject: below --
2020-11-29  9:55 [linux-nfc] " Bongsu Jeon
2020-11-29  9:55 ` Bongsu Jeon
2020-11-29  9:55 ` Bongsu Jeon
2020-11-28 12:49 [linux-nfc] " Krzysztof Kozlowski
2020-11-28 12:49 ` Krzysztof Kozlowski
2020-11-28 12:49 ` Krzysztof Kozlowski
2020-11-27 11:22 [linux-nfc] " bongsu.jeon2
2020-11-27 11:22 ` bongsu.jeon2
2020-11-27 11:22 ` bongsu.jeon2
2020-11-28  0:01 ` Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201130081820.GA4790@kozik-lap \
    --to=krzk@kernel.org \
    --cc=linux-nfc@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.