|
@@ -1365,7 +1365,7 @@ static const struct iio_buffer_setup_ops mxs_lradc_buffer_ops = {
|
|
* Driver initialization
|
|
* Driver initialization
|
|
*/
|
|
*/
|
|
|
|
|
|
-#define MXS_ADC_CHAN(idx, chan_type) { \
|
|
|
|
|
|
+#define MXS_ADC_CHAN(idx, chan_type, name) { \
|
|
.type = (chan_type), \
|
|
.type = (chan_type), \
|
|
.indexed = 1, \
|
|
.indexed = 1, \
|
|
.scan_index = (idx), \
|
|
.scan_index = (idx), \
|
|
@@ -1378,17 +1378,18 @@ static const struct iio_buffer_setup_ops mxs_lradc_buffer_ops = {
|
|
.realbits = LRADC_RESOLUTION, \
|
|
.realbits = LRADC_RESOLUTION, \
|
|
.storagebits = 32, \
|
|
.storagebits = 32, \
|
|
}, \
|
|
}, \
|
|
|
|
+ .datasheet_name = (name), \
|
|
}
|
|
}
|
|
|
|
|
|
-static const struct iio_chan_spec mxs_lradc_chan_spec[] = {
|
|
|
|
- MXS_ADC_CHAN(0, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(1, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(2, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(3, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(4, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(5, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(6, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(7, IIO_VOLTAGE),
|
|
|
|
|
|
+static const struct iio_chan_spec mx23_lradc_chan_spec[] = {
|
|
|
|
+ MXS_ADC_CHAN(0, IIO_VOLTAGE, "LRADC0"),
|
|
|
|
+ MXS_ADC_CHAN(1, IIO_VOLTAGE, "LRADC1"),
|
|
|
|
+ MXS_ADC_CHAN(2, IIO_VOLTAGE, "LRADC2"),
|
|
|
|
+ MXS_ADC_CHAN(3, IIO_VOLTAGE, "LRADC3"),
|
|
|
|
+ MXS_ADC_CHAN(4, IIO_VOLTAGE, "LRADC4"),
|
|
|
|
+ MXS_ADC_CHAN(5, IIO_VOLTAGE, "LRADC5"),
|
|
|
|
+ MXS_ADC_CHAN(6, IIO_VOLTAGE, "VDDIO"),
|
|
|
|
+ MXS_ADC_CHAN(7, IIO_VOLTAGE, "VBATT"),
|
|
/* Combined Temperature sensors */
|
|
/* Combined Temperature sensors */
|
|
{
|
|
{
|
|
.type = IIO_TEMP,
|
|
.type = IIO_TEMP,
|
|
@@ -1399,6 +1400,7 @@ static const struct iio_chan_spec mxs_lradc_chan_spec[] = {
|
|
BIT(IIO_CHAN_INFO_SCALE),
|
|
BIT(IIO_CHAN_INFO_SCALE),
|
|
.channel = 8,
|
|
.channel = 8,
|
|
.scan_type = {.sign = 'u', .realbits = 18, .storagebits = 32,},
|
|
.scan_type = {.sign = 'u', .realbits = 18, .storagebits = 32,},
|
|
|
|
+ .datasheet_name = "TEMP_DIE",
|
|
},
|
|
},
|
|
/* Hidden channel to keep indexes */
|
|
/* Hidden channel to keep indexes */
|
|
{
|
|
{
|
|
@@ -1407,12 +1409,48 @@ static const struct iio_chan_spec mxs_lradc_chan_spec[] = {
|
|
.scan_index = -1,
|
|
.scan_index = -1,
|
|
.channel = 9,
|
|
.channel = 9,
|
|
},
|
|
},
|
|
- MXS_ADC_CHAN(10, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(11, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(12, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(13, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(14, IIO_VOLTAGE),
|
|
|
|
- MXS_ADC_CHAN(15, IIO_VOLTAGE),
|
|
|
|
|
|
+ MXS_ADC_CHAN(10, IIO_VOLTAGE, NULL),
|
|
|
|
+ MXS_ADC_CHAN(11, IIO_VOLTAGE, NULL),
|
|
|
|
+ MXS_ADC_CHAN(12, IIO_VOLTAGE, "USB_DP"),
|
|
|
|
+ MXS_ADC_CHAN(13, IIO_VOLTAGE, "USB_DN"),
|
|
|
|
+ MXS_ADC_CHAN(14, IIO_VOLTAGE, "VBG"),
|
|
|
|
+ MXS_ADC_CHAN(15, IIO_VOLTAGE, "VDD5V"),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct iio_chan_spec mx28_lradc_chan_spec[] = {
|
|
|
|
+ MXS_ADC_CHAN(0, IIO_VOLTAGE, "LRADC0"),
|
|
|
|
+ MXS_ADC_CHAN(1, IIO_VOLTAGE, "LRADC1"),
|
|
|
|
+ MXS_ADC_CHAN(2, IIO_VOLTAGE, "LRADC2"),
|
|
|
|
+ MXS_ADC_CHAN(3, IIO_VOLTAGE, "LRADC3"),
|
|
|
|
+ MXS_ADC_CHAN(4, IIO_VOLTAGE, "LRADC4"),
|
|
|
|
+ MXS_ADC_CHAN(5, IIO_VOLTAGE, "LRADC5"),
|
|
|
|
+ MXS_ADC_CHAN(6, IIO_VOLTAGE, "LRADC6"),
|
|
|
|
+ MXS_ADC_CHAN(7, IIO_VOLTAGE, "VBATT"),
|
|
|
|
+ /* Combined Temperature sensors */
|
|
|
|
+ {
|
|
|
|
+ .type = IIO_TEMP,
|
|
|
|
+ .indexed = 1,
|
|
|
|
+ .scan_index = 8,
|
|
|
|
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
|
|
|
|
+ BIT(IIO_CHAN_INFO_OFFSET) |
|
|
|
|
+ BIT(IIO_CHAN_INFO_SCALE),
|
|
|
|
+ .channel = 8,
|
|
|
|
+ .scan_type = {.sign = 'u', .realbits = 18, .storagebits = 32,},
|
|
|
|
+ .datasheet_name = "TEMP_DIE",
|
|
|
|
+ },
|
|
|
|
+ /* Hidden channel to keep indexes */
|
|
|
|
+ {
|
|
|
|
+ .type = IIO_TEMP,
|
|
|
|
+ .indexed = 1,
|
|
|
|
+ .scan_index = -1,
|
|
|
|
+ .channel = 9,
|
|
|
|
+ },
|
|
|
|
+ MXS_ADC_CHAN(10, IIO_VOLTAGE, "VDDIO"),
|
|
|
|
+ MXS_ADC_CHAN(11, IIO_VOLTAGE, "VTH"),
|
|
|
|
+ MXS_ADC_CHAN(12, IIO_VOLTAGE, "VDDA"),
|
|
|
|
+ MXS_ADC_CHAN(13, IIO_VOLTAGE, "VDDD"),
|
|
|
|
+ MXS_ADC_CHAN(14, IIO_VOLTAGE, "VBG"),
|
|
|
|
+ MXS_ADC_CHAN(15, IIO_VOLTAGE, "VDD5V"),
|
|
};
|
|
};
|
|
|
|
|
|
static int mxs_lradc_hw_init(struct mxs_lradc *lradc)
|
|
static int mxs_lradc_hw_init(struct mxs_lradc *lradc)
|
|
@@ -1608,10 +1646,16 @@ static int mxs_lradc_probe(struct platform_device *pdev)
|
|
iio->dev.parent = &pdev->dev;
|
|
iio->dev.parent = &pdev->dev;
|
|
iio->info = &mxs_lradc_iio_info;
|
|
iio->info = &mxs_lradc_iio_info;
|
|
iio->modes = INDIO_DIRECT_MODE;
|
|
iio->modes = INDIO_DIRECT_MODE;
|
|
- iio->channels = mxs_lradc_chan_spec;
|
|
|
|
- iio->num_channels = ARRAY_SIZE(mxs_lradc_chan_spec);
|
|
|
|
iio->masklength = LRADC_MAX_TOTAL_CHANS;
|
|
iio->masklength = LRADC_MAX_TOTAL_CHANS;
|
|
|
|
|
|
|
|
+ if (lradc->soc == IMX23_LRADC) {
|
|
|
|
+ iio->channels = mx23_lradc_chan_spec;
|
|
|
|
+ iio->num_channels = ARRAY_SIZE(mx23_lradc_chan_spec);
|
|
|
|
+ } else {
|
|
|
|
+ iio->channels = mx28_lradc_chan_spec;
|
|
|
|
+ iio->num_channels = ARRAY_SIZE(mx28_lradc_chan_spec);
|
|
|
|
+ }
|
|
|
|
+
|
|
ret = iio_triggered_buffer_setup(iio, &iio_pollfunc_store_time,
|
|
ret = iio_triggered_buffer_setup(iio, &iio_pollfunc_store_time,
|
|
&mxs_lradc_trigger_handler,
|
|
&mxs_lradc_trigger_handler,
|
|
&mxs_lradc_buffer_ops);
|
|
&mxs_lradc_buffer_ops);
|