Lines Matching +full:pmc +full:- +full:adc

1 // SPDX-License-Identifier: GPL-2.0
3 * The GE HealthCare PMC ADC is a 16-Channel (Voltage and current), 16-Bit
4 * ADC with an I2C Interface.
11 #include <dt-bindings/iio/adc/gehc,pmc-adc.h>
86 ret = i2c_smbus_read_word_swapped(pmc_adc->client, cmd); in pmc_adc_read_raw_ch()
88 dev_err(&pmc_adc->client->dev, "i2c read word failed (%d)\n", ret); in pmc_adc_read_raw_ch()
105 ret = pmc_adc_read_raw_ch(pmc_adc, chan->address, val); in pmc_adc_read_raw()
111 return -EINVAL; in pmc_adc_read_raw()
122 * args[1]: PMC ADC channel number in pmc_adc_fwnode_xlate()
124 if (iiospec->nargs != 2) in pmc_adc_fwnode_xlate()
125 return -EINVAL; in pmc_adc_fwnode_xlate()
127 switch (iiospec->args[0]) { in pmc_adc_fwnode_xlate()
135 dev_err(&indio_dev->dev, "Invalid channel type %llu\n", in pmc_adc_fwnode_xlate()
136 iiospec->args[0]); in pmc_adc_fwnode_xlate()
137 return -EINVAL; in pmc_adc_fwnode_xlate()
140 for (i = 0; i < indio_dev->num_channels; i++) in pmc_adc_fwnode_xlate()
141 if (indio_dev->channels[i].type == expected_type && in pmc_adc_fwnode_xlate()
142 indio_dev->channels[i].channel == iiospec->args[1]) in pmc_adc_fwnode_xlate()
145 dev_err(&indio_dev->dev, "Invalid channel type %llu number %llu\n", in pmc_adc_fwnode_xlate()
146 iiospec->args[0], iiospec->args[1]); in pmc_adc_fwnode_xlate()
147 return -EINVAL; in pmc_adc_fwnode_xlate()
170 ret = devm_regulator_bulk_get_enable(&client->dev, ARRAY_SIZE(pmc_adc_regulator_names), in pmc_adc_probe()
173 return dev_err_probe(&client->dev, ret, "Failed to get regulators\n"); in pmc_adc_probe()
175 clk = devm_clk_get_optional_enabled(&client->dev, "osc"); in pmc_adc_probe()
177 return dev_err_probe(&client->dev, PTR_ERR(clk), "Failed to get osc clock\n"); in pmc_adc_probe()
179 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*pmc_adc)); in pmc_adc_probe()
181 return -ENOMEM; in pmc_adc_probe()
184 pmc_adc->client = client; in pmc_adc_probe()
186 val = i2c_smbus_read_byte_data(pmc_adc->client, PMC_ADC_CMD_REQUEST_PROTOCOL_VERSION); in pmc_adc_probe()
188 return dev_err_probe(&client->dev, val, "Failed to get protocol version\n"); in pmc_adc_probe()
191 return dev_err_probe(&client->dev, -EINVAL, in pmc_adc_probe()
194 indio_dev->name = "pmc_adc"; in pmc_adc_probe()
195 indio_dev->info = &pmc_adc_info; in pmc_adc_probe()
196 indio_dev->modes = INDIO_DIRECT_MODE; in pmc_adc_probe()
197 indio_dev->channels = pmc_adc_channels; in pmc_adc_probe()
198 indio_dev->num_channels = ARRAY_SIZE(pmc_adc_channels); in pmc_adc_probe()
200 return devm_iio_device_register(&client->dev, indio_dev); in pmc_adc_probe()
204 { .compatible = "gehc,pmc-adc"},
210 { "pmc-adc" },
217 .name = "pmc-adc",
227 MODULE_DESCRIPTION("GE HealthCare PMC ADC driver");