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, 15); return 0;
}
staticint pmc_adc_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask)
{ struct pmc_adc *pmc_adc = iio_priv(indio_dev); int ret;
switch (mask) { case IIO_CHAN_INFO_PROCESSED: /* Values are directly read in mV or mA */
ret = pmc_adc_read_raw_ch(pmc_adc, chan->address, val); if (ret) return ret; return IIO_VAL_INT;
}
/* * args[0]: Acquisition type (i.e. voltage or current) * args[1]: PMC ADC channel number
*/ if (iiospec->nargs != 2) return -EINVAL;
switch (iiospec->args[0]) { case GEHC_PMC_ADC_VOLTAGE:
expected_type = IIO_VOLTAGE; break; case GEHC_PMC_ADC_CURRENT:
expected_type = IIO_CURRENT; break; default:
dev_err(&indio_dev->dev, "Invalid channel type %llu\n",
iiospec->args[0]); return -EINVAL;
}
for (i = 0; i < indio_dev->num_channels; i++) if (indio_dev->channels[i].type == expected_type &&
indio_dev->channels[i].channel == iiospec->args[1]) return i;
dev_err(&indio_dev->dev, "Invalid channel type %llu number %llu\n",
iiospec->args[0], iiospec->args[1]); return -EINVAL;
}
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;
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) return dev_err_probe(&client->dev, -EINVAL, "Unsupported protocol version 0x%02x\n", val);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.