From: maxime.ripard@free-electrons.com (Maxime Ripard)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 5/5] iio: at91: introduce touch screen support in iio adc driver
Date: Mon, 15 Jul 2013 15:15:07 +0200 [thread overview]
Message-ID: <20130715131507.GE2962@lukather> (raw)
In-Reply-To: <1373789069-11604-6-git-send-email-josh.wu@atmel.com>
Hi Josh,
On Sun, Jul 14, 2013 at 04:04:29PM +0800, Josh Wu wrote:
> AT91 ADC hardware integrate touch screen support. So this patch add touch
> screen support for at91 adc iio driver.
> To enable touch screen support in adc, you need to add the dt parameters:
> which type of touch are used? (4 or 5 wires), sample period time,
> pen detect debounce time, average samples and pen detect resistor.
>
> In the meantime, since touch screen will use a interal period trigger of adc,
> so it is conflict to other hardware triggers. Driver will disable the hardware
> trigger support if touch screen is enabled.
>
> This driver has been tested in AT91SAM9X5-EK and SAMA5D3x-EK.
>
> Signed-off-by: Josh Wu <josh.wu@atmel.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
> .../devicetree/bindings/arm/atmel-adc.txt | 13 +
> arch/arm/mach-at91/include/mach/at91_adc.h | 34 ++
> drivers/iio/adc/at91_adc.c | 389 ++++++++++++++++++--
> 3 files changed, 412 insertions(+), 24 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/arm/atmel-adc.txt b/Documentation/devicetree/bindings/arm/atmel-adc.txt
> index 0db2945..925d656 100644
> --- a/Documentation/devicetree/bindings/arm/atmel-adc.txt
> +++ b/Documentation/devicetree/bindings/arm/atmel-adc.txt
> @@ -29,6 +29,19 @@ Optional properties:
> - atmel,adc-sample-hold-time: Sample and Hold Time in microseconds
> - atmel,adc-clock-rate: ADC clock rate. If not specified, use the default
> adc_op_clk.
> + - atmel,adc-touchscreen-wires: Number of touch screen wires. Only support
> + 4 and 5 wires touch screen.
> + NOTE: when adc touch screen enabled, the adc hardware trigger will be
> + disabled. Since touch screen will occupied the trigger register.
> + - atmel,adc-ts-pendet-debounce: Debounce time in microsecond for touch pen
> + detect.
> + - atmel,adc-ts-sample-period-time: Sample Period Time in microsecond for
> + touch screen
> + - atmel,adc-ts-filter-average: Numbers of sampling data will be averaged.
> + 0 means no average. 1 means average two samples. 2 means average four
> + samples. 3 means average eight samples.
> + - atmel,adc-ts-pendet-sensitivity: Pen Detection input pull-up resistor.
> + It can be 0, 1, 2, 3.
Could you expand a bit on what are these properties for? Are they
board-specific? IP-specific?
[...]
> +#define DRIVER_NAME "at91_adc"
This looks like this part doesn't belong to another cleanup patch.
> +#define MAX_POS_BITS 12
> +
> +#define ZTHRESHOLD 9000
> +
> struct at91_adc_caps {
> + bool has_12bits_xy; /* true means use 12 bits. Otherwise 10 bits */
Isn't that redundant with the low_res boolean?
> bool has_tsmr; /* only at91sam9x5, sama5d3 have TSMR reg */
> u32 mr_prescal_mask;
> u32 mr_startup_mask;
> };
>
> +enum atmel_adc_ts_type {
> + ATMEL_ADC_TOUCHSCREEN_NONE = 0,
> + ATMEL_ADC_TOUCHSCREEN_4WIRE,
> + ATMEL_ADC_TOUCHSCREEN_5WIRE,
> +};
> +
> struct at91_adc_state {
> struct clk *adc_clk;
> u32 adc_clk_rate;
> @@ -70,6 +83,29 @@ struct at91_adc_state {
> bool low_res; /* the resolution corresponds to the lowest one */
> wait_queue_head_t wq_data_avail;
> struct at91_adc_caps caps;
> +
> + /*
> + * Following ADC channels are shared by touchscreen:
> + *
> + * CH0 -- Touch screen XP/UL
> + * CH1 -- Touch screen XM/UR
> + * CH2 -- Touch screen YP/LL
> + * CH3 -- Touch screen YM/Sense
> + * CH4 -- Touch screen LR(5-wire only)
> + *
> + * The bitfields below represents the reserved channel in the
> + * touchscreen mode.
> + */
> +#define CHAN_MASK_TOUCHSCREEN_4WIRE (0xf << 0)
> +#define CHAN_MASK_TOUCHSCREEN_5WIRE (0x1f << 0)
> + enum atmel_adc_ts_type touchscreen_type;
> + struct input_dev *ts_input;
> +
> + u8 ts_filter_average;
> + u16 ts_pen_detect_debounce;
> + u8 ts_pen_detect_sensitivity;
> + u16 ts_sample_period_time;
> + u16 ts_sample_period_val;
> };
>
> static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
> @@ -104,14 +140,10 @@ static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
> return IRQ_HANDLED;
> }
>
> -static irqreturn_t at91_adc_eoc_trigger(int irq, void *private)
> +/* Handler for classic adc channel eoc trigger */
> +void handle_adc_eoc_trigger(int irq, struct iio_dev *idev)
> {
> - struct iio_dev *idev = private;
> struct at91_adc_state *st = iio_priv(idev);
> - u32 status = at91_adc_readl(st, st->registers->status_register);
> -
> - if (!(status & st->registers->drdy_mask))
> - return IRQ_HANDLED;
Why are you changing the prototype and remove most of the useful part
out of the handler?
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130715/14495b41/attachment.sig>
next prev parent reply other threads:[~2013-07-15 13:15 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-14 8:04 [PATCH 0/5] iio: at91: Add touch screen support in at91 adc Josh Wu
2013-07-14 8:04 ` [PATCH 1/5] iio: at91: use adc_clk_khz to make the calculation not easy to large than u32 Josh Wu
2013-07-15 12:52 ` Maxime Ripard
2013-07-16 7:54 ` Josh Wu
2013-07-14 8:04 ` [PATCH 2/5] iio: at91: Use different prescal, startup mask in MR for different IP Josh Wu
2013-07-15 12:58 ` Maxime Ripard
2013-07-16 8:35 ` Josh Wu
2013-07-16 8:46 ` Nicolas Ferre
2013-07-16 11:20 ` Maxime Ripard
2013-07-16 11:30 ` Thomas Petazzoni
2013-07-16 19:03 ` Jonathan Cameron
2013-07-16 19:17 ` Thomas Petazzoni
2013-07-17 8:23 ` Nicolas Ferre
2013-07-17 8:12 ` Nicolas Ferre
2013-07-17 9:07 ` Josh Wu
2013-07-17 15:40 ` Maxime Ripard
2013-07-17 7:58 ` Nicolas Ferre
2013-07-17 10:09 ` Josh Wu
2013-07-20 9:35 ` Jonathan Cameron
2013-07-14 8:04 ` [PATCH 3/5] iio: at91: ADC start-up time calculation changed since at91sam9x5 Josh Wu
2013-07-20 9:39 ` Jonathan Cameron
2013-07-25 7:35 ` Josh Wu
2013-07-14 8:04 ` [PATCH 4/5] iio: at91: add an optional dt property for for adc clock hz Josh Wu
2013-07-15 13:06 ` Maxime Ripard
2013-07-16 7:55 ` Josh Wu
2013-07-16 10:30 ` Maxime Ripard
2013-07-16 11:16 ` Lars-Peter Clausen
2013-07-25 7:29 ` Josh Wu
2013-07-25 12:01 ` boris brezillon
2013-07-25 12:11 ` boris brezillon
2013-07-14 8:04 ` [PATCH 5/5] iio: at91: introduce touch screen support in iio adc driver Josh Wu
2013-07-15 13:15 ` Maxime Ripard [this message]
2013-07-16 9:09 ` Josh Wu
2013-07-16 11:43 ` Maxime Ripard
2013-07-20 9:57 ` Jonathan Cameron
2013-07-22 13:17 ` Mark Rutland
2013-07-25 7:56 ` Josh Wu
2013-07-25 16:45 ` Mark Rutland
2013-08-06 10:24 ` Josh Wu
2013-08-08 13:40 ` Mark Rutland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130715131507.GE2962@lukather \
--to=maxime.ripard@free-electrons.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).