Re: [PATCH v2 2/3] iio:adc:palmas: add DT support
Am 05.10.2015 um 13:17 schrieb Mark Rutland : > On Sun, Oct 04, 2015 at 06:05:59PM +0200, H. Nikolaus Schaller wrote: >> From: Marek Belisko >> >> Code was found at: >> https://android.googlesource.com/kernel/tegra/+/a90856a6626d502d42c6e7abccbdf9d730b36270%5E%21/#F1 >> >> Signed-off-by: Laxman Dewangan >> [Fixed minor typos + add channels list to documentation] >> Signed-off-by: Marek Belisko >> --- >> .../devicetree/bindings/iio/adc/palmas-gpadc.txt | 46 +++ >> drivers/iio/adc/palmas_gpadc.c | 52 >> +++--- >> 2 files changed, 93 insertions(+), 5 deletions(-) >> create mode 100644 Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt >> >> diff --git a/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt >> b/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt >> new file mode 100644 >> index 000..2149afe >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt >> @@ -0,0 +1,46 @@ >> +* Palmas general purpose ADC IP block devicetree bindings >> + >> +Channels list: >> +0 battery type >> +1 battery temp NTC (optional current source) >> +2 GP >> +3 temp (with ext. diode, optional current source) >> +4 GP >> +5 GP >> +6 VBAT_SENSE >> +7 VCC_SENSE >> +8 Backup Battery voltage >> +9 external charger (VCHG) >> +10 VBUS >> +11 DC-DC current probe (how does this work?) >> +12 internal die temp >> +13 internal die temp >> +14 USB ID pin voltage >> +15 test network >> + >> +Required properties: >> +- compatible : Must be "ti,palmas-gpadc". >> + >> +Optional sub-nodes: >> +ti,channel0-current-microamp: Channel 0 current in uA. >> +Values are rounded to derive 0uA, 5uA, 15uA, 20uA. >> +ti,channel3-current-microamp: Channel 3 current in uA. >> +Valid are rounded to derive 0uA, 10uA, 400uA, 800uA. > > It's only possible to configure channels 0 and 3 in this manner? Yes. The other channels have no built-in current source, i.e. these channels are special. > >> +ti,enable-extended-delay: Enable extended delay. > > What is this? When would I select it? Why does it belong in the DT > rather than being a runtime option? The chip allows to extend the time window between channel selection and sampling by 400µs (according to data sheet). But for all channels and not each one. As far as I understand, this is - depending on hardware setup - to get more stable ADC readings. Most channels have a fixed function (e.g. battery voltage, USB VBUS, temperature NTC) so it can't be arbitrarily chosen and depends on how the Palmas is embedded (it is a PMIC with a bank of ADCs and not a general purpose ADC chip). So I think it is really a hardware dependent parameter and not something the user should be able to change. > >> +Example: >> + >> +pmic { >> +compatible = "ti,twl6035-pmic", "ti,palmas-pmic"; >> +... >> +gpadc { >> +compatible = "ti,palmas-gpadc"; >> +interrupts = <18 0 >> + 16 0 >> + 17 0>; >> +ti,channel0-current-microamp = <5>; >> +ti,channel3-current-microamp = <10>; >> +}; >> +}; >> +... >> +}; > > I thought you needed #iio-cells for encoding the channel? Yes, we forgot (we don't have a client for it in our setup yet - so did not test :) > > Mark. Thanks, Nikolaus Schaller -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] iio:adc:palmas: add DT support
On Sun, Oct 04, 2015 at 06:05:59PM +0200, H. Nikolaus Schaller wrote: > From: Marek Belisko > > Code was found at: > https://android.googlesource.com/kernel/tegra/+/a90856a6626d502d42c6e7abccbdf9d730b36270%5E%21/#F1 > > Signed-off-by: Laxman Dewangan > [Fixed minor typos + add channels list to documentation] > Signed-off-by: Marek Belisko > --- > .../devicetree/bindings/iio/adc/palmas-gpadc.txt | 46 +++ > drivers/iio/adc/palmas_gpadc.c | 52 +++--- > 2 files changed, 93 insertions(+), 5 deletions(-) > create mode 100644 Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt > > diff --git a/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt > b/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt > new file mode 100644 > index 000..2149afe > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt > @@ -0,0 +1,46 @@ > +* Palmas general purpose ADC IP block devicetree bindings > + > +Channels list: > + 0 battery type > + 1 battery temp NTC (optional current source) > + 2 GP > + 3 temp (with ext. diode, optional current source) > + 4 GP > + 5 GP > + 6 VBAT_SENSE > + 7 VCC_SENSE > + 8 Backup Battery voltage > + 9 external charger (VCHG) > + 10 VBUS > + 11 DC-DC current probe (how does this work?) > + 12 internal die temp > + 13 internal die temp > + 14 USB ID pin voltage > + 15 test network > + > +Required properties: > +- compatible : Must be "ti,palmas-gpadc". > + > +Optional sub-nodes: > +ti,channel0-current-microamp: Channel 0 current in uA. > + Values are rounded to derive 0uA, 5uA, 15uA, 20uA. > +ti,channel3-current-microamp: Channel 3 current in uA. > + Valid are rounded to derive 0uA, 10uA, 400uA, 800uA. It's only possible to configure channels 0 and 3 in this manner? > +ti,enable-extended-delay: Enable extended delay. What is this? When would I select it? Why does it belong in the DT rather than being a runtime option? > +Example: > + > +pmic { > + compatible = "ti,twl6035-pmic", "ti,palmas-pmic"; > + ... > + gpadc { > + compatible = "ti,palmas-gpadc"; > + interrupts = <18 0 > + 16 0 > + 17 0>; > + ti,channel0-current-microamp = <5>; > + ti,channel3-current-microamp = <10>; > + }; > + }; > + ... > +}; I thought you needed #iio-cells for encoding the channel? Mark. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] iio:adc:palmas: add DT support
On Monday 05 October 2015 11:44 AM, H. Nikolaus Schaller wrote: From: Marek Belisko Code was found at: https://android.googlesource.com/kernel/tegra/+/a90856a6626d502d42c6e7abccbdf9d730b36270%5E%21/#F1 Signed-off-by: Laxman Dewangan [Fixed minor typos + add channels list to documentation] Signed-off-by: Marek Belisko --- Acked-by: Laxman Dewangan -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 2/3] iio:adc:palmas: add DT support
From: Marek Belisko Code was found at: https://android.googlesource.com/kernel/tegra/+/a90856a6626d502d42c6e7abccbdf9d730b36270%5E%21/#F1 Signed-off-by: Laxman Dewangan [Fixed minor typos + add channels list to documentation] Signed-off-by: Marek Belisko --- .../devicetree/bindings/iio/adc/palmas-gpadc.txt | 46 +++ drivers/iio/adc/palmas_gpadc.c | 52 +++--- 2 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt diff --git a/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt b/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt new file mode 100644 index 000..2149afe --- /dev/null +++ b/Documentation/devicetree/bindings/iio/adc/palmas-gpadc.txt @@ -0,0 +1,46 @@ +* Palmas general purpose ADC IP block devicetree bindings + +Channels list: + 0 battery type + 1 battery temp NTC (optional current source) + 2 GP + 3 temp (with ext. diode, optional current source) + 4 GP + 5 GP + 6 VBAT_SENSE + 7 VCC_SENSE + 8 Backup Battery voltage + 9 external charger (VCHG) + 10 VBUS + 11 DC-DC current probe (how does this work?) + 12 internal die temp + 13 internal die temp + 14 USB ID pin voltage + 15 test network + +Required properties: +- compatible : Must be "ti,palmas-gpadc". + +Optional sub-nodes: +ti,channel0-current-microamp: Channel 0 current in uA. + Values are rounded to derive 0uA, 5uA, 15uA, 20uA. +ti,channel3-current-microamp: Channel 3 current in uA. + Valid are rounded to derive 0uA, 10uA, 400uA, 800uA. +ti,enable-extended-delay: Enable extended delay. + +Example: + +pmic { + compatible = "ti,twl6035-pmic", "ti,palmas-pmic"; + ... + gpadc { + compatible = "ti,palmas-gpadc"; + interrupts = <18 0 + 16 0 + 17 0>; + ti,channel0-current-microamp = <5>; + ti,channel3-current-microamp = <10>; + }; + }; + ... +}; diff --git a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c index 6805d81..1297c81 100644 --- a/drivers/iio/adc/palmas_gpadc.c +++ b/drivers/iio/adc/palmas_gpadc.c @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include #include @@ -460,6 +462,34 @@ static const struct iio_chan_spec palmas_gpadc_iio_channel[] = { PALMAS_ADC_CHAN_IIO(IN15, IIO_VOLTAGE, IIO_CHAN_INFO_PROCESSED), }; +static int palmas_gpadc_get_adc_dt_data(struct platform_device *pdev, + struct palmas_gpadc_platform_data **gpadc_pdata) +{ + struct device_node *np = pdev->dev.of_node; + struct palmas_gpadc_platform_data *gp_data; + int ret; + u32 pval; + + gp_data = devm_kzalloc(&pdev->dev, sizeof(*gp_data), GFP_KERNEL); + if (!gp_data) + return -ENOMEM; + + ret = of_property_read_u32(np, "ti,channel0-current-microamp", &pval); + if (!ret) + gp_data->ch0_current = pval; + + ret = of_property_read_u32(np, "ti,channel3-current-microamp", &pval); + if (!ret) + gp_data->ch3_current = pval; + + gp_data->extended_delay = of_property_read_bool(np, + "ti,enable-extended-delay"); + + *gpadc_pdata = gp_data; + + return 0; +} + static int palmas_gpadc_probe(struct platform_device *pdev) { struct palmas_gpadc *adc; @@ -469,12 +499,17 @@ static int palmas_gpadc_probe(struct platform_device *pdev) int ret, i; pdata = dev_get_platdata(pdev->dev.parent); - if (!pdata || !pdata->gpadc_pdata) { - dev_err(&pdev->dev, "No platform data\n"); - return -ENODEV; - } - gpadc_pdata = pdata->gpadc_pdata; + if (pdata && pdata->gpadc_pdata) + gpadc_pdata = pdata->gpadc_pdata; + + if (!gpadc_pdata && pdev->dev.of_node) { + ret = palmas_gpadc_get_adc_dt_data(pdev, &gpadc_pdata); + if (ret < 0) + return ret; + } + if (!gpadc_pdata) + return -EINVAL; indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc)); if (!indio_dev) { @@ -790,6 +825,12 @@ static const struct dev_pm_ops palmas_pm_ops = { palmas_gpadc_resume) }; +static const struct of_device_id of_palmas_gpadc_match_tbl[] = { + { .compatible = "ti,palmas-gpadc", }, + { /* end */ } +}; +MODULE_DEVICE_TABLE(of, of_palmas_gpadc_match_tbl); + static struct platform_driver palmas_gpadc_driver = { .probe = palmas_gpadc_probe, .remove = palmas_gpadc_remove, @@ -797,6 +838,7 @@ static struct platform_driver palmas_gpadc_driver = { .name = MOD_NAME, .owner = THIS_MODULE, .pm = &palmas