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@xxxxxxxxxxxxxx> > CC: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > CC: devel@xxxxxxxxxxxxxxxxxxxx > CC: Marek Vasut <marex@xxxxxxx> > CC: Fabio Estevam <fabio.estevam@xxxxxxxxxxxxx> > CC: Jonathan Cameron <jic23@xxxxxxxxx> > CC: devicetree-discuss@xxxxxxxxxxxxxxxx > --- > .../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); > _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel