Message ID | 20200703034856.12846-2-chris.ruehl@gtsys.com.hk (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | [1/2] hwmon: shtc1: add support for device tree bindings | expand |
On 7/2/20 8:48 PM, Chris Ruehl wrote: > Add support for DTS bindings to the shtc driver, use CONFIG_OF > to compile in the code if needed. > Ah, here it is. The introducing patch should say something like "[PATCH 0/2]". > Signed-off-by: Chris Ruehl <chris.ruehl@gtsys.com.hk> > --- > drivers/hwmon/shtc1.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/hwmon/shtc1.c b/drivers/hwmon/shtc1.c > index a0078ccede03..3bcabc1cbce8 100644 > --- a/drivers/hwmon/shtc1.c > +++ b/drivers/hwmon/shtc1.c > @@ -14,6 +14,9 @@ > #include <linux/err.h> > #include <linux/delay.h> > #include <linux/platform_data/shtc1.h> > +#ifdef CONFIG_OF No. Please no conditional includes. > +#include <linux/of.h> > +#endif > > /* commands (high precision mode) */ > static const unsigned char shtc1_cmd_measure_blocking_hpm[] = { 0x7C, 0xA2 }; > @@ -196,6 +199,10 @@ static int shtc1_probe(struct i2c_client *client, > enum shtcx_chips chip = id->driver_data; > struct i2c_adapter *adap = client->adapter; > struct device *dev = &client->dev; > +#ifdef CONFIG_OF > + struct device_node *np = dev->of_node; > + u8 value; > +#endif > > if (!i2c_check_functionality(adap, I2C_FUNC_I2C)) { > dev_err(dev, "plain i2c transactions not supported\n"); > @@ -235,6 +242,20 @@ static int shtc1_probe(struct i2c_client *client, > > if (client->dev.platform_data) > data->setup = *(struct shtc1_platform_data *)dev->platform_data; > + > +#ifdef CONFIG_OF Unnecessary ifdef. Selection of devicetree data or not can be made based on np != NULL. Also, if devictree data is available, platform data should be ignored to avoid confusion. > + if (np) { > + if (of_property_read_bool(np, "sensirion,blocking_io")) { > + of_property_read_u8(np, "sensirion,blocking_io", &value); > + data->setup.blocking_io = (value > 0) ? true : false; > + } Why this complexity, and why not just make the property a boolean ? > + if (of_property_read_bool(np, "sensicon,high_precision")) { > + of_property_read_u8(np, "sensirion,high_precision", &value); > + data->setup.high_precision = (value > 0) ? true : false; "sensicon,high_precision" should also be a boolean. > + } > + } > +#endif > + > shtc1_select_command(data); > mutex_init(&data->update_lock); > > @@ -257,6 +278,15 @@ static const struct i2c_device_id shtc1_id[] = { > }; > MODULE_DEVICE_TABLE(i2c, shtc1_id); > > +#ifdef CONFIG_OF > +static const struct of_device_id shtc1_of_match[] = { > + { .compatible = "sensirion,shtc1" }, > + { .compatible = "sensirion,shtw1" }, > + { .compatible = "sensirion,shtc3" }, > + { } > +}; > +MODULE_DEVICE_TABLE(of, shtc1_of_match); > +#endif > static struct i2c_driver shtc1_i2c_driver = { > .driver.name = "shtc1", > .probe = shtc1_probe, > Not sure how this works without setting of_match_table. I guess it just works accidentally because .id_table also provides a devicetree match. Still, of_match_table should be set. Guenter
Hi Chris, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on hwmon/hwmon-next] [also build test WARNING on v5.8-rc3 next-20200703] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Chris-Ruehl/hwmon-shtc1-add-support-for-device-tree-bindings/20200703-124921 base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next config: arm-randconfig-r012-20200701 (attached as .config) compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project ca464639a1c9dd3944eb055ffd2796e8c2e7639f) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/hwmon/shtc1.c:282:34: warning: unused variable 'shtc1_of_match' [-Wunused-const-variable] static const struct of_device_id shtc1_of_match[] = { ^ 1 warning generated. vim +/shtc1_of_match +282 drivers/hwmon/shtc1.c 280 281 #ifdef CONFIG_OF > 282 static const struct of_device_id shtc1_of_match[] = { 283 { .compatible = "sensirion,shtc1" }, 284 { .compatible = "sensirion,shtw1" }, 285 { .compatible = "sensirion,shtc3" }, 286 { } 287 }; 288 MODULE_DEVICE_TABLE(of, shtc1_of_match); 289 #endif 290 static struct i2c_driver shtc1_i2c_driver = { 291 .driver.name = "shtc1", 292 .probe = shtc1_probe, 293 .id_table = shtc1_id, 294 }; 295 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Guenter, On 3/7/2020 1:48 pm, Guenter Roeck wrote: > On 7/2/20 8:48 PM, Chris Ruehl wrote: >> Add support for DTS bindings to the shtc driver, use CONFIG_OF >> to compile in the code if needed. >> > > Ah, here it is. The introducing patch should say something like "[PATCH 0/2]". > >> Signed-off-by: Chris Ruehl <chris.ruehl@gtsys.com.hk> >> --- >> drivers/hwmon/shtc1.c | 30 ++++++++++++++++++++++++++++++ >> 1 file changed, 30 insertions(+) >> >> diff --git a/drivers/hwmon/shtc1.c b/drivers/hwmon/shtc1.c >> index a0078ccede03..3bcabc1cbce8 100644 >> --- a/drivers/hwmon/shtc1.c >> +++ b/drivers/hwmon/shtc1.c >> @@ -14,6 +14,9 @@ >> #include <linux/err.h> >> #include <linux/delay.h> >> #include <linux/platform_data/shtc1.h> >> +#ifdef CONFIG_OF > > No. Please no conditional includes. OK, will be fixed and same for below. > >> +#include <linux/of.h> >> +#endif >> >> /* commands (high precision mode) */ >> static const unsigned char shtc1_cmd_measure_blocking_hpm[] = { 0x7C, 0xA2 }; >> @@ -196,6 +199,10 @@ static int shtc1_probe(struct i2c_client *client, >> enum shtcx_chips chip = id->driver_data; >> struct i2c_adapter *adap = client->adapter; >> struct device *dev = &client->dev; >> +#ifdef CONFIG_OF >> + struct device_node *np = dev->of_node; >> + u8 value; >> +#endif >> >> if (!i2c_check_functionality(adap, I2C_FUNC_I2C)) { >> dev_err(dev, "plain i2c transactions not supported\n"); >> @@ -235,6 +242,20 @@ static int shtc1_probe(struct i2c_client *client, >> >> if (client->dev.platform_data) >> data->setup = *(struct shtc1_platform_data *)dev->platform_data; >> + >> +#ifdef CONFIG_OF > > Unnecessary ifdef. Selection of devicetree data or not can be made > based on np != NULL. Also, if devictree data is available, platform > data should be ignored to avoid confusion. Ok, I wasn't aware this rule. Will change it. > >> + if (np) { >> + if (of_property_read_bool(np, "sensirion,blocking_io")) { >> + of_property_read_u8(np, "sensirion,blocking_io", &value); >> + data->setup.blocking_io = (value > 0) ? true : false; >> + } > Why this complexity, and why not just make the property a boolean ? > >> + if (of_property_read_bool(np, "sensicon,high_precision")) { >> + of_property_read_u8(np, "sensirion,high_precision", &value); >> + data->setup.high_precision = (value > 0) ? true : false; > > "sensicon,high_precision" should also be a boolean. > >> + } >> + } >> +#endif >> + >> shtc1_select_command(data); >> mutex_init(&data->update_lock); >> >> @@ -257,6 +278,15 @@ static const struct i2c_device_id shtc1_id[] = { >> }; >> MODULE_DEVICE_TABLE(i2c, shtc1_id); >> >> +#ifdef CONFIG_OF >> +static const struct of_device_id shtc1_of_match[] = { >> + { .compatible = "sensirion,shtc1" }, >> + { .compatible = "sensirion,shtw1" }, >> + { .compatible = "sensirion,shtc3" }, >> + { } >> +}; >> +MODULE_DEVICE_TABLE(of, shtc1_of_match); >> +#endif >> static struct i2c_driver shtc1_i2c_driver = { >> .driver.name = "shtc1", >> .probe = shtc1_probe, >> > Not sure how this works without setting of_match_table. I guess it just works > accidentally because .id_table also provides a devicetree match. Still, > of_match_table should be set. Thanks, I will take care of this in the v2 version. > > Guenter >
diff --git a/drivers/hwmon/shtc1.c b/drivers/hwmon/shtc1.c index a0078ccede03..3bcabc1cbce8 100644 --- a/drivers/hwmon/shtc1.c +++ b/drivers/hwmon/shtc1.c @@ -14,6 +14,9 @@ #include <linux/err.h> #include <linux/delay.h> #include <linux/platform_data/shtc1.h> +#ifdef CONFIG_OF +#include <linux/of.h> +#endif /* commands (high precision mode) */ static const unsigned char shtc1_cmd_measure_blocking_hpm[] = { 0x7C, 0xA2 }; @@ -196,6 +199,10 @@ static int shtc1_probe(struct i2c_client *client, enum shtcx_chips chip = id->driver_data; struct i2c_adapter *adap = client->adapter; struct device *dev = &client->dev; +#ifdef CONFIG_OF + struct device_node *np = dev->of_node; + u8 value; +#endif if (!i2c_check_functionality(adap, I2C_FUNC_I2C)) { dev_err(dev, "plain i2c transactions not supported\n"); @@ -235,6 +242,20 @@ static int shtc1_probe(struct i2c_client *client, if (client->dev.platform_data) data->setup = *(struct shtc1_platform_data *)dev->platform_data; + +#ifdef CONFIG_OF + if (np) { + if (of_property_read_bool(np, "sensirion,blocking_io")) { + of_property_read_u8(np, "sensirion,blocking_io", &value); + data->setup.blocking_io = (value > 0) ? true : false; + } + if (of_property_read_bool(np, "sensicon,high_precision")) { + of_property_read_u8(np, "sensirion,high_precision", &value); + data->setup.high_precision = (value > 0) ? true : false; + } + } +#endif + shtc1_select_command(data); mutex_init(&data->update_lock); @@ -257,6 +278,15 @@ static const struct i2c_device_id shtc1_id[] = { }; MODULE_DEVICE_TABLE(i2c, shtc1_id); +#ifdef CONFIG_OF +static const struct of_device_id shtc1_of_match[] = { + { .compatible = "sensirion,shtc1" }, + { .compatible = "sensirion,shtw1" }, + { .compatible = "sensirion,shtc3" }, + { } +}; +MODULE_DEVICE_TABLE(of, shtc1_of_match); +#endif static struct i2c_driver shtc1_i2c_driver = { .driver.name = "shtc1", .probe = shtc1_probe,
Add support for DTS bindings to the shtc driver, use CONFIG_OF to compile in the code if needed. Signed-off-by: Chris Ruehl <chris.ruehl@gtsys.com.hk> --- drivers/hwmon/shtc1.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)