diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2014-04-06 22:49:27 +0530 |
---|---|---|
committer | Laxman Dewangan <ldewangan@nvidia.com> | 2014-04-07 00:33:46 -0700 |
commit | dd46c0e5d1afdf0d7549e872ac03b5a18c1334e4 (patch) | |
tree | 9ec20919c333a4e84e065dd4d1ec35160755a881 /drivers/staging | |
parent | b2794a8b7c056acdfa22a67aed5fec7e4272aa45 (diff) |
Revert "Revert "iio: adc: palmas: add dt support for autoconversion""
This reverts commit 12eee98b377abc0c061ad820aa4cc8d1d95a15d3.
Bringing back the Dt upport for autoconversion parameter configuration
on plamas ADC.
Change-Id: Ibaf912945653c3569ad6886f7a7dac4495c32831
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/392652
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/iio/adc/palmas_gpadc.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/drivers/staging/iio/adc/palmas_gpadc.c b/drivers/staging/iio/adc/palmas_gpadc.c index 64bafc077a01..85181a913fe0 100644 --- a/drivers/staging/iio/adc/palmas_gpadc.c +++ b/drivers/staging/iio/adc/palmas_gpadc.c @@ -883,6 +883,45 @@ static const struct iio_chan_spec palmas_gpadc_iio_channel[] = { PALMAS_ADC_CHAN_IIO(IN15), }; +static int palmas_gpadc_get_autoconv_prop(struct device *dev, + struct device_node *np, const char *node_name, + struct palmas_adc_auto_conv_property **conv_prop) +{ + struct device_node *conv_node; + struct palmas_adc_auto_conv_property *cprop; + int ret; + u32 pval; + s32 thres; + + conv_node = of_get_child_by_name(np, node_name); + if (!conv_node) + return -EINVAL; + + cprop = devm_kzalloc(dev, sizeof(*cprop), GFP_KERNEL); + if (!cprop) + return -ENOMEM; + + ret = of_property_read_u32(conv_node, "ti,adc-channel-number", &pval); + if (ret < 0) { + dev_err(dev, "Autoconversion channel is missing\n"); + return ret; + } + cprop->adc_channel_number = pval; + + ret = of_property_read_s32(conv_node, "ti,adc-high-threshold", &thres); + if (!ret) + cprop->adc_high_threshold = thres; + + ret = of_property_read_s32(conv_node, "ti,adc-low-threshold", &thres); + if (!ret) + cprop->adc_low_threshold = thres; + + cprop->adc_shutdown = of_property_read_bool(conv_node, + "ti,enable-shutdown"); + *conv_prop = cprop; + return 0; +} + static int palmas_gpadc_get_adc_dt_data(struct platform_device *pdev, struct palmas_gpadc_platform_data **gpadc_pdata) { @@ -891,6 +930,7 @@ static int palmas_gpadc_get_adc_dt_data(struct platform_device *pdev, struct device_node *map_node; struct device_node *child; struct iio_map *palmas_iio_map; + struct palmas_adc_auto_conv_property *conv_prop; int ret; u32 pval; int nmap, nvalid_map; @@ -913,6 +953,20 @@ static int palmas_gpadc_get_adc_dt_data(struct platform_device *pdev, gp_data->extended_delay = of_property_read_bool(np, "ti,enable-extended-delay"); + ret = of_property_read_u32(np, "ti,auto-conversion-period-ms", &pval); + if (!ret) + gp_data->auto_conversion_period_ms = pval; + + ret = palmas_gpadc_get_autoconv_prop(&pdev->dev, np, "auto_conv0", + &conv_prop); + if (!ret) + gp_data->adc_auto_conv0_data = conv_prop; + + ret = palmas_gpadc_get_autoconv_prop(&pdev->dev, np, "auto_conv1", + &conv_prop); + if (!ret) + gp_data->adc_auto_conv1_data = conv_prop; + map_node = of_get_child_by_name(np, "iio_map"); if (!map_node) { dev_warn(&pdev->dev, "IIO map table not found\n"); |