Re: [PATCH 3/4] iio: adc: Add support for the GE HealthCare PMC ADC
From: Herve Codina
Date: Wed Oct 02 2024 - 03:38:16 EST
Hi David,
On Tue, 1 Oct 2024 12:19:16 -0500
David Lechner <dlechner@xxxxxxxxxxxx> wrote:
> On Tue, Oct 1, 2024 at 2:47 AM Herve Codina <herve.codina@xxxxxxxxxxx> wrote:
> >
> > The GE HealthCare PMC Analog to Digital Converter (ADC) is a 16-Channel
> > (voltage and current), 16-Bit ADC with an I2C Interface.
> >
> > Signed-off-by: Herve Codina <herve.codina@xxxxxxxxxxx>
> > ---
>
> ...
>
> > +static int pmc_adc_read_raw_ch(struct pmc_adc *pmc_adc, u8 cmd, int *val)
> > +{
> > + s32 ret;
> > +
> > + ret = i2c_smbus_read_word_swapped(pmc_adc->client, cmd);
> > + if (ret < 0) {
> > + dev_err(&pmc_adc->client->dev, "i2c read word failed (%d)\n", ret);
> > + return ret;
> > + }
> > +
> > + *val = sign_extend32(ret, 16);
>
> Shouldn't this be 15, not 16?
Yes, indeed, I double checked on my side and it should be 15!
Thanks for catching it. It will be fixed in the next iteration.
>
> > + return 0;
> > +}
> > +
>
> ...
>
> > +
> > +static int pmc_adc_probe(struct i2c_client *client)
> > +{
> > + struct iio_dev *indio_dev;
> > + struct pmc_adc *pmc_adc;
> > + struct clk *clk;
> > + s32 val;
> > + int ret;
> > +
> > + ret = devm_regulator_bulk_get_enable(&client->dev, ARRAY_SIZE(pmc_adc_regulator_names),
> > + pmc_adc_regulator_names);
> > + if (ret)
> > + return dev_err_probe(&client->dev, ret, "Failed to get regulators\n");
> > +
> > + clk = devm_clk_get_optional_enabled(&client->dev, "osc");
> > + if (IS_ERR(clk))
> > + return dev_err_probe(&client->dev, PTR_ERR(clk), "Failed to get osc clock\n");
> > +
> > + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*pmc_adc));
> > + if (!indio_dev)
> > + return -ENOMEM;
> > +
> > + pmc_adc = iio_priv(indio_dev);
> > + pmc_adc->client = client;
> > +
> > + val = i2c_smbus_read_byte_data(pmc_adc->client, PMC_ADC_CMD_REQUEST_PROTOCOL_VERSION);
> > + if (val < 0)
> > + return dev_err_probe(&client->dev, val, "Failed to get protocol version\n");
> > +
> > + if (val != 0x01) {
> > + dev_err(&client->dev, "Unsupported protocol version 0x%02x\n", val);
>
> Use dev_err_probe?
Yes, will be changed in the next iteration.
>
> > + return -EINVAL;
> > + }
> > +
Best regards,
Hervé