[v2,1/4] pmbus: associate PMBUS_SKIP_STATUS_CHECK with driver_data

Message ID b336867f159242e141f21e2bef7182adbc624fbd.1546851856.git.xiaoting.liu@hxt-semitech.com
State Not Applicable, archived
Headers show
Series
  • [v2,1/4] pmbus: associate PMBUS_SKIP_STATUS_CHECK with driver_data
Related show

Commit Message

Liu, Xiaoting Jan. 7, 2019, 10:57 a.m.
Current code compares device name with name in i2c_device_id to decide
whether PMBUS_SKIP_STATUS_CHECK should be set in pmbus_platform_data,
which makes adding new devices with PMBUS_SKIP_STATUS_CHECK should also
modify code in pmbus_probe().

This patch adds pmbus_device_info to save pages and flags. Its pointer
is put in driver_data of i2c_device_id, which makes adding new device
more straightforward.

Signed-off-by: Shunyong Yang <shunyong.yang@hxt-semitech.com>
Signed-off-by: Xiaoting Liu <xiaoting.liu@hxt-semitech.com>
---
v2:
  Move struct pmbus_device_info definition location from pmbus.h to pmbus.c.
  Change struct name from default_pmbus_info to pmbus_info_one.
  Change struct name from pmbus_info to pmbus_info_zero.
  Replace struct name dps460_pmbus_info and sgd009_pmbus_info with
  pmbus_info_one_skip.
---
 drivers/hwmon/pmbus/pmbus.c | 55 +++++++++++++++++++++++++++------------------
 1 file changed, 33 insertions(+), 22 deletions(-)

--
1.8.3.1




This email is intended only for the named addressee. It may contain information that is confidential/private, legally privileged, or copyright-protected, and you should handle it accordingly. If you are not the intended recipient, you do not have legal rights to retain, copy, or distribute this email or its contents, and should promptly delete the email and all electronic copies in your system; do not retain copies in any media. If you have received this email in error, please notify the sender promptly. Thank you.

Comments

Guenter Roeck Jan. 7, 2019, 2:04 p.m. | #1
On 1/7/19 2:57 AM, Xiaoting Liu wrote:
> Current code compares device name with name in i2c_device_id to decide
> whether PMBUS_SKIP_STATUS_CHECK should be set in pmbus_platform_data,
> which makes adding new devices with PMBUS_SKIP_STATUS_CHECK should also
> modify code in pmbus_probe().
> 
> This patch adds pmbus_device_info to save pages and flags. Its pointer
> is put in driver_data of i2c_device_id, which makes adding new device
> more straightforward.
> 
> Signed-off-by: Shunyong Yang <shunyong.yang@hxt-semitech.com>
> Signed-off-by: Xiaoting Liu <xiaoting.liu@hxt-semitech.com>
> ---
> v2:
>    Move struct pmbus_device_info definition location from pmbus.h to pmbus.c.
>    Change struct name from default_pmbus_info to pmbus_info_one.
>    Change struct name from pmbus_info to pmbus_info_zero.
>    Replace struct name dps460_pmbus_info and sgd009_pmbus_info with
>    pmbus_info_one_skip.
> ---
>   drivers/hwmon/pmbus/pmbus.c | 55 +++++++++++++++++++++++++++------------------
>   1 file changed, 33 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c
> index 7688dab32f6e..e38dd97cc49a 100644
> --- a/drivers/hwmon/pmbus/pmbus.c
> +++ b/drivers/hwmon/pmbus/pmbus.c
> @@ -28,6 +28,11 @@
>   #include <linux/pmbus.h>
>   #include "pmbus.h"
> 
> +struct pmbus_device_info {
> +       int pages;
> +       u32 flags;
> +};
> +
>   /*
>    * Find sensor groups and status registers on each page.
>    */
> @@ -172,13 +177,15 @@ static int pmbus_probe(struct i2c_client *client,
>          struct pmbus_driver_info *info;
>          struct pmbus_platform_data *pdata = NULL;
>          struct device *dev = &client->dev;
> +       struct pmbus_device_info *device_info;
> 
>          info = devm_kzalloc(dev, sizeof(struct pmbus_driver_info), GFP_KERNEL);
>          if (!info)
>                  return -ENOMEM;
> 
> -       if (!strcmp(id->name, "dps460") || !strcmp(id->name, "dps800") ||
> -           !strcmp(id->name, "sgd009")) {
> +       device_info = (struct pmbus_device_info *)id->driver_data;
> +

Please no empty line between assignments and checking its results.

> +       if (device_info->flags & PMBUS_SKIP_STATUS_CHECK) {
>                  pdata = devm_kzalloc(dev, sizeof(struct pmbus_platform_data),
>                                       GFP_KERNEL);
>                  if (!pdata)
> @@ -187,36 +194,40 @@ static int pmbus_probe(struct i2c_client *client,
>                  pdata->flags = PMBUS_SKIP_STATUS_CHECK;
>          }
> 
> -       info->pages = id->driver_data;
> +       info->pages = device_info->pages;
>          info->identify = pmbus_identify;
>          dev->platform_data = pdata;
> 
>          return pmbus_do_probe(client, id, info);
>   }
> 
> +static const struct pmbus_device_info pmbus_info_one = {1, 0};
> +static const struct pmbus_device_info pmbus_info_zero = {0, 0};
> +static const struct pmbus_device_info pmbus_info_one_skip = {
> +                               1, PMBUS_SKIP_STATUS_CHECK};
>   /*
>    * Use driver_data to set the number of pages supported by the chip.
>    */
>   static const struct i2c_device_id pmbus_id[] = {
> -       {"adp4000", 1},
> -       {"bmr453", 1},
> -       {"bmr454", 1},
> -       {"dps460", 1},
> -       {"dps800", 1},
> -       {"mdt040", 1},
> -       {"ncp4200", 1},
> -       {"ncp4208", 1},
> -       {"pdt003", 1},
> -       {"pdt006", 1},
> -       {"pdt012", 1},
> -       {"pmbus", 0},
> -       {"sgd009", 1},
> -       {"tps40400", 1},
> -       {"tps544b20", 1},
> -       {"tps544b25", 1},
> -       {"tps544c20", 1},
> -       {"tps544c25", 1},
> -       {"udt020", 1},
> +       {"adp4000", (kernel_ulong_t)&pmbus_info_one},
> +       {"bmr453", (kernel_ulong_t)&pmbus_info_one},
> +       {"bmr454", (kernel_ulong_t)&pmbus_info_one},
> +       {"dps460", (kernel_ulong_t)&pmbus_info_one_skip},
> +       {"dps800", (kernel_ulong_t)&pmbus_info_one_skip},
> +       {"mdt040", (kernel_ulong_t)&pmbus_info_one},
> +       {"ncp4200", (kernel_ulong_t)&pmbus_info_one},
> +       {"ncp4208", (kernel_ulong_t)&pmbus_info_one},
> +       {"pdt003", (kernel_ulong_t)&pmbus_info_one},
> +       {"pdt006", (kernel_ulong_t)&pmbus_info_one},
> +       {"pdt012", (kernel_ulong_t)&pmbus_info_one},
> +       {"pmbus", (kernel_ulong_t)&pmbus_info_zero},
> +       {"sgd009", (kernel_ulong_t)&pmbus_info_one_skip},
> +       {"tps40400", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544b20", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544b25", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544c20", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544c25", (kernel_ulong_t)&pmbus_info_one},
> +       {"udt020", (kernel_ulong_t)&pmbus_info_one},
>          {}
>   };
> 
> --
> 1.8.3.1
> 
> 
> 
> 
> This email is intended only for the named addressee. It may contain information that is confidential/private, legally privileged, or copyright-protected, and you should handle it accordingly. If you are not the intended recipient, you do not have legal rights to retain, copy, or distribute this email or its contents, and should promptly delete the email and all electronic copies in your system; do not retain copies in any media. If you have received this email in error, please notify the sender promptly. Thank you.
> 

I think I mentioned that before. This legalese makes it all but impossible
for me to apply your patches.

Guenter
Liu, Xiaoting Jan. 8, 2019, 8:44 a.m. | #2
Hi Guenter Roeck,

Thanks for your reply.

-----Original Message-----
From: Guenter Roeck [mailto:groeck7@gmail.com] On Behalf Of Guenter Roeck
Sent: 2019年1月7日 22:04
To: Liu, Xiaoting <xiaoting.liu@hxt-semitech.com>; jdelvare@suse.com
Cc: openbmc@lists.ozlabs.org; linux-hwmon@vger.kernel.org; linux-kernel@vger.kernel.org; Yang, Shunyong <shunyong.yang@hxt-semitech.com>; Wang, Dongsheng <dongsheng.wang@hxt-semitech.com>
Subject: Re: [PATCH v2 1/4] pmbus: associate PMBUS_SKIP_STATUS_CHECK with driver_data

On 1/7/19 2:57 AM, Xiaoting Liu wrote:
> Current code compares device name with name in i2c_device_id to decide
> whether PMBUS_SKIP_STATUS_CHECK should be set in pmbus_platform_data,
> which makes adding new devices with PMBUS_SKIP_STATUS_CHECK should also
> modify code in pmbus_probe().
> 
> This patch adds pmbus_device_info to save pages and flags. Its pointer
> is put in driver_data of i2c_device_id, which makes adding new device
> more straightforward.
> 

> Signed-off-by: Shunyong Yang <shunyong.yang@hxt-semitech.com>
> Signed-off-by: Xiaoting Liu <xiaoting.liu@hxt-semitech.com>
> ---
> v2:
>    Move struct pmbus_device_info definition location from pmbus.h to pmbus.c.
>    Change struct name from default_pmbus_info to pmbus_info_one.
>    Change struct name from pmbus_info to pmbus_info_zero.
>    Replace struct name dps460_pmbus_info and sgd009_pmbus_info with
>    pmbus_info_one_skip.
> ---
>   drivers/hwmon/pmbus/pmbus.c | 55 +++++++++++++++++++++++++++------------------
>   1 file changed, 33 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c
> index 7688dab32f6e..e38dd97cc49a 100644
> --- a/drivers/hwmon/pmbus/pmbus.c
> +++ b/drivers/hwmon/pmbus/pmbus.c
> @@ -28,6 +28,11 @@
>   #include <linux/pmbus.h>
>   #include "pmbus.h"
> 
> +struct pmbus_device_info {
> +       int pages;
> +       u32 flags;
> +};
> +
>   /*
>    * Find sensor groups and status registers on each page.
>    */
> @@ -172,13 +177,15 @@ static int pmbus_probe(struct i2c_client *client,
>          struct pmbus_driver_info *info;
>          struct pmbus_platform_data *pdata = NULL;
>          struct device *dev = &client->dev;
> +       struct pmbus_device_info *device_info;
> 
>          info = devm_kzalloc(dev, sizeof(struct pmbus_driver_info), GFP_KERNEL);
>          if (!info)
>                  return -ENOMEM;
> 
> -       if (!strcmp(id->name, "dps460") || !strcmp(id->name, "dps800") ||
> -           !strcmp(id->name, "sgd009")) {
> +       device_info = (struct pmbus_device_info *)id->driver_data;
> +

Please no empty line between assignments and checking its results.

Ok, we will remove the empty line.

> +       if (device_info->flags & PMBUS_SKIP_STATUS_CHECK) {
>                  pdata = devm_kzalloc(dev, sizeof(struct pmbus_platform_data),
>                                       GFP_KERNEL);
>                  if (!pdata)
> @@ -187,36 +194,40 @@ static int pmbus_probe(struct i2c_client *client,
>                  pdata->flags = PMBUS_SKIP_STATUS_CHECK;
>          }
> 
> -       info->pages = id->driver_data;
> +       info->pages = device_info->pages;
>          info->identify = pmbus_identify;
>          dev->platform_data = pdata;
> 
>          return pmbus_do_probe(client, id, info);
>   }
> 
> +static const struct pmbus_device_info pmbus_info_one = {1, 0};
> +static const struct pmbus_device_info pmbus_info_zero = {0, 0};
> +static const struct pmbus_device_info pmbus_info_one_skip = {
> +                               1, PMBUS_SKIP_STATUS_CHECK};
>   /*
>    * Use driver_data to set the number of pages supported by the chip.
>    */
>   static const struct i2c_device_id pmbus_id[] = {
> -       {"adp4000", 1},
> -       {"bmr453", 1},
> -       {"bmr454", 1},
> -       {"dps460", 1},
> -       {"dps800", 1},
> -       {"mdt040", 1},
> -       {"ncp4200", 1},
> -       {"ncp4208", 1},
> -       {"pdt003", 1},
> -       {"pdt006", 1},
> -       {"pdt012", 1},
> -       {"pmbus", 0},
> -       {"sgd009", 1},
> -       {"tps40400", 1},
> -       {"tps544b20", 1},
> -       {"tps544b25", 1},
> -       {"tps544c20", 1},
> -       {"tps544c25", 1},
> -       {"udt020", 1},
> +       {"adp4000", (kernel_ulong_t)&pmbus_info_one},
> +       {"bmr453", (kernel_ulong_t)&pmbus_info_one},
> +       {"bmr454", (kernel_ulong_t)&pmbus_info_one},
> +       {"dps460", (kernel_ulong_t)&pmbus_info_one_skip},
> +       {"dps800", (kernel_ulong_t)&pmbus_info_one_skip},
> +       {"mdt040", (kernel_ulong_t)&pmbus_info_one},
> +       {"ncp4200", (kernel_ulong_t)&pmbus_info_one},
> +       {"ncp4208", (kernel_ulong_t)&pmbus_info_one},
> +       {"pdt003", (kernel_ulong_t)&pmbus_info_one},
> +       {"pdt006", (kernel_ulong_t)&pmbus_info_one},
> +       {"pdt012", (kernel_ulong_t)&pmbus_info_one},
> +       {"pmbus", (kernel_ulong_t)&pmbus_info_zero},
> +       {"sgd009", (kernel_ulong_t)&pmbus_info_one_skip},
> +       {"tps40400", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544b20", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544b25", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544c20", (kernel_ulong_t)&pmbus_info_one},
> +       {"tps544c25", (kernel_ulong_t)&pmbus_info_one},
> +       {"udt020", (kernel_ulong_t)&pmbus_info_one},
>          {}
>   };
> 
> --
> 1.8.3.1
> 
> 
> 
> 
> This email is intended only for the named addressee. It may contain information that is confidential/private, legally privileged, or copyright-protected, and you should handle it accordingly. If you are not the intended recipient, you do not have legal rights to retain, copy, or distribute this email or its contents, and should promptly delete the email and all electronic copies in your system; do not retain copies in any media. If you have received this email in error, please notify the sender promptly. Thank you.
> 

I think I mentioned that before. This legalese makes it all but impossible
for me to apply your patches.

We will not show this message any more.

Thanks,
Xiaoting

Guenter

Patch

diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c
index 7688dab32f6e..e38dd97cc49a 100644
--- a/drivers/hwmon/pmbus/pmbus.c
+++ b/drivers/hwmon/pmbus/pmbus.c
@@ -28,6 +28,11 @@ 
 #include <linux/pmbus.h>
 #include "pmbus.h"

+struct pmbus_device_info {
+       int pages;
+       u32 flags;
+};
+
 /*
  * Find sensor groups and status registers on each page.
  */
@@ -172,13 +177,15 @@  static int pmbus_probe(struct i2c_client *client,
        struct pmbus_driver_info *info;
        struct pmbus_platform_data *pdata = NULL;
        struct device *dev = &client->dev;
+       struct pmbus_device_info *device_info;

        info = devm_kzalloc(dev, sizeof(struct pmbus_driver_info), GFP_KERNEL);
        if (!info)
                return -ENOMEM;

-       if (!strcmp(id->name, "dps460") || !strcmp(id->name, "dps800") ||
-           !strcmp(id->name, "sgd009")) {
+       device_info = (struct pmbus_device_info *)id->driver_data;
+
+       if (device_info->flags & PMBUS_SKIP_STATUS_CHECK) {
                pdata = devm_kzalloc(dev, sizeof(struct pmbus_platform_data),
                                     GFP_KERNEL);
                if (!pdata)
@@ -187,36 +194,40 @@  static int pmbus_probe(struct i2c_client *client,
                pdata->flags = PMBUS_SKIP_STATUS_CHECK;
        }

-       info->pages = id->driver_data;
+       info->pages = device_info->pages;
        info->identify = pmbus_identify;
        dev->platform_data = pdata;

        return pmbus_do_probe(client, id, info);
 }

+static const struct pmbus_device_info pmbus_info_one = {1, 0};
+static const struct pmbus_device_info pmbus_info_zero = {0, 0};
+static const struct pmbus_device_info pmbus_info_one_skip = {
+                               1, PMBUS_SKIP_STATUS_CHECK};
 /*
  * Use driver_data to set the number of pages supported by the chip.
  */
 static const struct i2c_device_id pmbus_id[] = {
-       {"adp4000", 1},
-       {"bmr453", 1},
-       {"bmr454", 1},
-       {"dps460", 1},
-       {"dps800", 1},
-       {"mdt040", 1},
-       {"ncp4200", 1},
-       {"ncp4208", 1},
-       {"pdt003", 1},
-       {"pdt006", 1},
-       {"pdt012", 1},
-       {"pmbus", 0},
-       {"sgd009", 1},
-       {"tps40400", 1},
-       {"tps544b20", 1},
-       {"tps544b25", 1},
-       {"tps544c20", 1},
-       {"tps544c25", 1},
-       {"udt020", 1},
+       {"adp4000", (kernel_ulong_t)&pmbus_info_one},
+       {"bmr453", (kernel_ulong_t)&pmbus_info_one},
+       {"bmr454", (kernel_ulong_t)&pmbus_info_one},
+       {"dps460", (kernel_ulong_t)&pmbus_info_one_skip},
+       {"dps800", (kernel_ulong_t)&pmbus_info_one_skip},
+       {"mdt040", (kernel_ulong_t)&pmbus_info_one},
+       {"ncp4200", (kernel_ulong_t)&pmbus_info_one},
+       {"ncp4208", (kernel_ulong_t)&pmbus_info_one},
+       {"pdt003", (kernel_ulong_t)&pmbus_info_one},
+       {"pdt006", (kernel_ulong_t)&pmbus_info_one},
+       {"pdt012", (kernel_ulong_t)&pmbus_info_one},
+       {"pmbus", (kernel_ulong_t)&pmbus_info_zero},
+       {"sgd009", (kernel_ulong_t)&pmbus_info_one_skip},
+       {"tps40400", (kernel_ulong_t)&pmbus_info_one},
+       {"tps544b20", (kernel_ulong_t)&pmbus_info_one},
+       {"tps544b25", (kernel_ulong_t)&pmbus_info_one},
+       {"tps544c20", (kernel_ulong_t)&pmbus_info_one},
+       {"tps544c25", (kernel_ulong_t)&pmbus_info_one},
+       {"udt020", (kernel_ulong_t)&pmbus_info_one},
        {}
 };