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? > + 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? > + return -EINVAL; > + } > + > + indio_dev->name = "pmc_adc"; > + indio_dev->info = &pmc_adc_info; > + indio_dev->channels = pmc_adc_channels; > + indio_dev->num_channels = ARRAY_SIZE(pmc_adc_channels); > + > + return devm_iio_device_register(&client->dev, indio_dev); > +}