Message ID | 1379593369-22010-8-git-send-email-jbe@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
The device tree list has moved, so I've changed the cc. Few comments inline. Basically I'd go for longer more descriptive names when the abreviation isn't a really well known common one. Note I'm not all that familiar with device tree conventions so may be barking up the wrong tree ;) On 09/19/13 13:22, Juergen Beisert wrote: > This is an RFC for the new touchscreen properties. > > Signed-off-by: Juergen Beisert <jbe@pengutronix.de> > CC: linux-arm-kernel@lists.infradead.org > CC: devel@driverdev.osuosl.org > CC: Marek Vasut <marex@denx.de> > CC: Fabio Estevam <fabio.estevam@freescale.com> > CC: Jonathan Cameron <jic23@cam.ac.uk> > CC: devicetree-discuss@lists.ozlabs.org > --- > .../bindings/staging/iio/adc/mxs-lradc.txt | 36 ++++++++++++-- > drivers/staging/iio/adc/mxs-lradc.c | 57 ++++++++++++++-------- > 2 files changed, 67 insertions(+), 26 deletions(-) > > diff --git a/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt b/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt > index 4688205..ee05dc3 100644 > --- a/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt > +++ b/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt > @@ -1,7 +1,8 @@ > * Freescale i.MX28 LRADC device driver > > Required properties: > -- compatible: Should be "fsl,imx28-lradc" > +- compatible: Should be "fsl,imx23-lradc" for i.MX23 SoC and "fsl,imx28-lradc" > + for i.MX28 SoC > - reg: Address and length of the register set for the device > - interrupts: Should contain the LRADC interrupts > > @@ -9,13 +10,38 @@ Optional properties: > - fsl,lradc-touchscreen-wires: Number of wires used to connect the touchscreen > to LRADC. Valid value is either 4 or 5. If this > property is not present, then the touchscreen is > - disabled. Do we want that lradc prefix on these other properties? > + disabled. 5 wires is valid for i.MX28 SoC only. > +- fsl,ave-ctrl: number of samples per direction to calculate an average value. > + Allowed value is 1 ... 31, default is 4 This naming seems less than informative, what about fsl,average_num_samples of average_count (ave isn't all that obvious an abrevaition of average). > +- fsl,ave-delay: delay between consecutive samples. Allowed value is > + 1 ... 2047. It is used if 'fsl,ave-ctrl' > 1, counts at > + 2 kHz and its default is 2 (= 1 ms) fsl,average_intersample_delay (I assume any limit of device tree property names is longer than that?) > +- fsl,settling: delay between plate switch to next sample. Allowed value is > + 1 ... 2047. It counts at 2 kHz and its default is > + 10 (= 5 ms) > > -Examples: > +Example for i.MX23 SoC: > + > + lradc@80050000 { > + compatible = "fsl,imx23-lradc"; > + reg = <0x80050000 0x2000>; > + interrupts = <36 37 38 39 40 41 42 43 44>; > + status = "okay"; > + fsl,lradc-touchscreen-wires = <4>; > + fsl,ave-ctrl = <4>; > + fsl,ave-delay = <2>; > + fsl,settling = <10>; > + }; > + > +Example for i.MX28 SoC: > > lradc@80050000 { > compatible = "fsl,imx28-lradc"; > reg = <0x80050000 0x2000>; > - interrupts = <10 14 15 16 17 18 19 > - 20 21 22 23 24 25>; > + interrupts = <10 14 15 16 17 18 19 20 21 22 23 24 25>; > + status = "okay"; > + fsl,lradc-touchscreen-wires = <5>; > + fsl,ave-ctrl = <4>; > + fsl,ave-delay = <2>; > + fsl,settling = <10>; > }; > diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c > index 122475f..ffcb0dd 100644 > --- a/drivers/staging/iio/adc/mxs-lradc.c > +++ b/drivers/staging/iio/adc/mxs-lradc.c > @@ -1225,10 +1225,45 @@ MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids); > static int mxs_lradc_probe_touchscreen(struct mxs_lradc *lradc, > struct device_node *lradc_node) > { > - /* TODO retrieve from device tree */ > + int ret; > + u32 ts_wires = 0, adapt; > + > + ret = of_property_read_u32(lradc_node, "fsl,lradc-touchscreen-wires", > + &ts_wires); > + if (ret) > + return -ENODEV; /* touchscreen feature disabled */ > + > + switch (ts_wires) { > + case 4: > + lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_4WIRE; > + break; > + case 5: > + if (lradc->soc == IMX28_LRADC) { > + lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_5WIRE; > + break; > + } > + /* fall through an error message for i.MX23 */ > + default: > + dev_err(lradc->dev, > + "Unsupported number of touchscreen wires (%d)\n", > + ts_wires); > + return -EINVAL; > + } > + > lradc->over_sample_cnt = 4; > + ret = of_property_read_u32(lradc_node, "fsl,ave-ctrl", &adapt); > + if (ret == 0) > + lradc->over_sample_cnt = adapt; > + > lradc->over_sample_delay = 2; > + ret = of_property_read_u32(lradc_node, "fsl,ave-delay", &adapt); > + if (ret == 0) > + lradc->over_sample_delay = adapt; > + > lradc->settling_delay = 10; > + ret = of_property_read_u32(lradc_node, "fsl,settling", &adapt); > + if (ret == 0) > + lradc->settling_delay = adapt; > > return 0; > } > @@ -1244,7 +1279,6 @@ static int mxs_lradc_probe(struct platform_device *pdev) > struct mxs_lradc *lradc; > struct iio_dev *iio; > struct resource *iores; > - uint32_t ts_wires = 0; > int ret = 0, touch_ret; > int i; > > @@ -1267,25 +1301,6 @@ static int mxs_lradc_probe(struct platform_device *pdev) > > touch_ret = mxs_lradc_probe_touchscreen(lradc, node); > > - /* Check if touchscreen is enabled in DT. */ > - ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires", > - &ts_wires); > - if (ret) > - dev_info(dev, "Touchscreen not enabled.\n"); > - else if (ts_wires == 4) > - lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_4WIRE; > - else if (ts_wires == 5) > - lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_5WIRE; > - else > - dev_warn(dev, "Unsupported number of touchscreen wires (%d)\n", > - ts_wires); > - > - if ((lradc->soc == IMX23_LRADC) && (ts_wires == 5)) { > - dev_warn(dev, "No support for 5 wire touches on i.MX23\n"); > - dev_warn(dev, "Falling back to 4 wire\n"); > - ts_wires = 4; > - } > - > /* Grab all IRQ sources */ > for (i = 0; i < of_cfg->irq_count; i++) { > lradc->irq[i] = platform_get_irq(pdev, i); >
Hi Jonathan, On Saturday 21 September 2013 14:42:37 Jonathan Cameron wrote: > The device tree list has moved, so I've changed the cc. > > Few comments inline. Basically I'd go for longer more > descriptive names when the abreviation isn't a really > well known common one. > > Note I'm not all that familiar with device tree conventions > so may be barking up the wrong tree ;) > > > [...] > > @@ -9,13 +10,38 @@ Optional properties: > > - fsl,lradc-touchscreen-wires: Number of wires used to connect the > > touchscreen to LRADC. Valid value is either 4 or 5. If this property is > > not present, then the touchscreen is - > > disabled. > > Do we want that lradc prefix on these other properties? The question is, if we want to keep it. This is the currently used binding. > > + disabled. 5 wires is valid for i.MX28 SoC only. > > +- fsl,ave-ctrl: number of samples per direction to calculate an average value. > > + Allowed value is 1 ... 31, default is 4 > > This naming seems less than informative, what about fsl,average_num_samples > of average_count (ave isn't all that obvious an abrevaition of average). I used already existing names from "Documentation/devicetree/bindings/input/touchscreen/stmpe.txt". > > +- fsl,ave-delay: delay between consecutive samples. Allowed value is > > + 1 ... 2047. It is used if 'fsl,ave-ctrl' > 1, counts at > > + 2 kHz and its default is 2 (= 1 ms) > > fsl,average_intersample_delay (I assume any limit of device tree property > names is longer than that?) If the parameter description in "Documentation/devicetree/bindings" is useful, we don't need long parameter names. If there is no useful parameter description, we will need long names ;) Regards, Juergen
diff --git a/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt b/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt index 4688205..ee05dc3 100644 --- a/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt +++ b/Documentation/devicetree/bindings/staging/iio/adc/mxs-lradc.txt @@ -1,7 +1,8 @@ * Freescale i.MX28 LRADC device driver Required properties: -- compatible: Should be "fsl,imx28-lradc" +- compatible: Should be "fsl,imx23-lradc" for i.MX23 SoC and "fsl,imx28-lradc" + for i.MX28 SoC - reg: Address and length of the register set for the device - interrupts: Should contain the LRADC interrupts @@ -9,13 +10,38 @@ Optional properties: - fsl,lradc-touchscreen-wires: Number of wires used to connect the touchscreen to LRADC. Valid value is either 4 or 5. If this property is not present, then the touchscreen is - disabled. + disabled. 5 wires is valid for i.MX28 SoC only. +- fsl,ave-ctrl: number of samples per direction to calculate an average value. + Allowed value is 1 ... 31, default is 4 +- fsl,ave-delay: delay between consecutive samples. Allowed value is + 1 ... 2047. It is used if 'fsl,ave-ctrl' > 1, counts at + 2 kHz and its default is 2 (= 1 ms) +- fsl,settling: delay between plate switch to next sample. Allowed value is + 1 ... 2047. It counts at 2 kHz and its default is + 10 (= 5 ms) -Examples: +Example for i.MX23 SoC: + + lradc@80050000 { + compatible = "fsl,imx23-lradc"; + reg = <0x80050000 0x2000>; + interrupts = <36 37 38 39 40 41 42 43 44>; + status = "okay"; + fsl,lradc-touchscreen-wires = <4>; + fsl,ave-ctrl = <4>; + fsl,ave-delay = <2>; + fsl,settling = <10>; + }; + +Example for i.MX28 SoC: lradc@80050000 { compatible = "fsl,imx28-lradc"; reg = <0x80050000 0x2000>; - interrupts = <10 14 15 16 17 18 19 - 20 21 22 23 24 25>; + interrupts = <10 14 15 16 17 18 19 20 21 22 23 24 25>; + status = "okay"; + fsl,lradc-touchscreen-wires = <5>; + fsl,ave-ctrl = <4>; + fsl,ave-delay = <2>; + fsl,settling = <10>; }; diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c index 122475f..ffcb0dd 100644 --- a/drivers/staging/iio/adc/mxs-lradc.c +++ b/drivers/staging/iio/adc/mxs-lradc.c @@ -1225,10 +1225,45 @@ MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids); static int mxs_lradc_probe_touchscreen(struct mxs_lradc *lradc, struct device_node *lradc_node) { - /* TODO retrieve from device tree */ + int ret; + u32 ts_wires = 0, adapt; + + ret = of_property_read_u32(lradc_node, "fsl,lradc-touchscreen-wires", + &ts_wires); + if (ret) + return -ENODEV; /* touchscreen feature disabled */ + + switch (ts_wires) { + case 4: + lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_4WIRE; + break; + case 5: + if (lradc->soc == IMX28_LRADC) { + lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_5WIRE; + break; + } + /* fall through an error message for i.MX23 */ + default: + dev_err(lradc->dev, + "Unsupported number of touchscreen wires (%d)\n", + ts_wires); + return -EINVAL; + } + lradc->over_sample_cnt = 4; + ret = of_property_read_u32(lradc_node, "fsl,ave-ctrl", &adapt); + if (ret == 0) + lradc->over_sample_cnt = adapt; + lradc->over_sample_delay = 2; + ret = of_property_read_u32(lradc_node, "fsl,ave-delay", &adapt); + if (ret == 0) + lradc->over_sample_delay = adapt; + lradc->settling_delay = 10; + ret = of_property_read_u32(lradc_node, "fsl,settling", &adapt); + if (ret == 0) + lradc->settling_delay = adapt; return 0; } @@ -1244,7 +1279,6 @@ static int mxs_lradc_probe(struct platform_device *pdev) struct mxs_lradc *lradc; struct iio_dev *iio; struct resource *iores; - uint32_t ts_wires = 0; int ret = 0, touch_ret; int i; @@ -1267,25 +1301,6 @@ static int mxs_lradc_probe(struct platform_device *pdev) touch_ret = mxs_lradc_probe_touchscreen(lradc, node); - /* Check if touchscreen is enabled in DT. */ - ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires", - &ts_wires); - if (ret) - dev_info(dev, "Touchscreen not enabled.\n"); - else if (ts_wires == 4) - lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_4WIRE; - else if (ts_wires == 5) - lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_5WIRE; - else - dev_warn(dev, "Unsupported number of touchscreen wires (%d)\n", - ts_wires); - - if ((lradc->soc == IMX23_LRADC) && (ts_wires == 5)) { - dev_warn(dev, "No support for 5 wire touches on i.MX23\n"); - dev_warn(dev, "Falling back to 4 wire\n"); - ts_wires = 4; - } - /* Grab all IRQ sources */ for (i = 0; i < of_cfg->irq_count; i++) { lradc->irq[i] = platform_get_irq(pdev, i);
This is an RFC for the new touchscreen properties. Signed-off-by: Juergen Beisert <jbe@pengutronix.de> CC: linux-arm-kernel@lists.infradead.org CC: devel@driverdev.osuosl.org CC: Marek Vasut <marex@denx.de> CC: Fabio Estevam <fabio.estevam@freescale.com> CC: Jonathan Cameron <jic23@cam.ac.uk> CC: devicetree-discuss@lists.ozlabs.org --- .../bindings/staging/iio/adc/mxs-lradc.txt | 36 ++++++++++++-- drivers/staging/iio/adc/mxs-lradc.c | 57 ++++++++++++++-------- 2 files changed, 67 insertions(+), 26 deletions(-)