Re: [PATCH v3 2/2] staging: iio: cdc: ad7746: use dt for capacitive channel setup.
From: Dan Carpenter
Date: Mon May 03 2021 - 06:08:03 EST
On Sat, May 01, 2021 at 09:32:53AM -0300, Lucas Stankus wrote:
> diff --git a/drivers/staging/iio/cdc/ad7746.c b/drivers/staging/iio/cdc/ad7746.c
> index dfd71e99e872..531f1b96dea2 100644
> --- a/drivers/staging/iio/cdc/ad7746.c
> +++ b/drivers/staging/iio/cdc/ad7746.c
> @@ -18,8 +18,6 @@
> #include <linux/iio/iio.h>
> #include <linux/iio/sysfs.h>
>
> -#include "ad7746.h"
> -
> /*
> * AD7746 Register Definition
> */
> @@ -676,10 +674,11 @@ static const struct iio_info ad7746_info = {
> static int ad7746_probe(struct i2c_client *client,
> const struct i2c_device_id *id)
> {
> - struct ad7746_platform_data *pdata = client->dev.platform_data;
> + struct device *dev = &client->dev;
> struct ad7746_chip_info *chip;
> struct iio_dev *indio_dev;
> unsigned char regval = 0;
> + unsigned int vdd_permille;
> int ret = 0;
>
> indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip));
> @@ -703,26 +702,39 @@ static int ad7746_probe(struct i2c_client *client,
> indio_dev->num_channels = ARRAY_SIZE(ad7746_channels);
> indio_dev->modes = INDIO_DIRECT_MODE;
>
> - if (pdata) {
> - if (pdata->exca_en) {
> - if (pdata->exca_inv_en)
> - regval |= AD7746_EXCSETUP_NEXCA;
> - else
> - regval |= AD7746_EXCSETUP_EXCA;
> - }
> + if (device_property_read_bool(dev, "adi,exca-output-en")) {
> + if (device_property_read_bool(dev, "adi,exca-output-invert"))
> + regval |= AD7746_EXCSETUP_NEXCA;
> + else
> + regval |= AD7746_EXCSETUP_EXCA;
> + }
>
> - if (pdata->excb_en) {
> - if (pdata->excb_inv_en)
> - regval |= AD7746_EXCSETUP_NEXCB;
> - else
> - regval |= AD7746_EXCSETUP_EXCB;
> - }
> + if (device_property_read_bool(dev, "adi,excb-output-en")) {
> + if (device_property_read_bool(dev, "adi,excb-output-invert"))
> + regval |= AD7746_EXCSETUP_NEXCB;
> + else
> + regval |= AD7746_EXCSETUP_EXCB;
> + }
>
> - regval |= AD7746_EXCSETUP_EXCLVL(pdata->exclvl);
> - } else {
> - dev_warn(&client->dev, "No platform data? using default\n");
> - regval = AD7746_EXCSETUP_EXCA | AD7746_EXCSETUP_EXCB |
> - AD7746_EXCSETUP_EXCLVL(3);
> + ret = device_property_read_u32(dev, "adi,excitation-vdd-permille",
> + &vdd_permille);
> + if (!ret) {
This test is reversed. I wonder if the static checkers can catch the
uninitialized variable bug... It's probably better to write it as:
if (device_property_read_u32(dev, "adi,excitation-vdd-permille",
&vdd_permille) {
So it matches the others.
regards,
dan carpenter;
> + switch (vdd_permille) {
> + case 125:
> + regval |= AD7746_EXCSETUP_EXCLVL(0);
> + break;
> + case 250:
> + regval |= AD7746_EXCSETUP_EXCLVL(1);
> + break;
> + case 375:
> + regval |= AD7746_EXCSETUP_EXCLVL(2);
> + break;
> + case 500:
> + regval |= AD7746_EXCSETUP_EXCLVL(3);
> + break;
> + default:
> + break;
> + }
> }
>
> ret = i2c_smbus_write_byte_data(chip->client,