From: Zubair Lutfullah <zubair.lutfullah@gmail.com> To: jic23@cam.ac.uk, dmitry.torokhov@gmail.com Cc: linux-iio@vger.kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, bigeasy@linutronix.de, gregkh@linuxfoundation.org, Russ.Dill@ti.com Subject: [PATCH 3/4] input: ti_am335x_tsc: Enable shared IRQ for TSC, add overrun and underflow checks Date: Tue, 13 Aug 2013 21:05:02 +0100 [thread overview] Message-ID: <1376424303-22740-4-git-send-email-zubair.lutfullah@gmail.com> (raw) In-Reply-To: <1376424303-22740-1-git-send-email-zubair.lutfullah@gmail.com> Enable shared IRQ to allow ADC to share IRQ line from parent MFD core. Only FIFO0 IRQs are for TSC and handled on the TSC side. Patch also adds overrun and underflow irq handlers. Russ Dill (TI) worked on overrun and underflow handlers. Rachna Patil (TI) laid ground work for shared IRQ. Signed-off-by: Zubair Lutfullah <zubair.lutfullah@gmail.com> Acked-by: Lee Jones <lee.jones@linaro.org> --- drivers/input/touchscreen/ti_am335x_tsc.c | 37 +++++++++++++++++++++++++---- include/linux/mfd/ti_am335x_tscadc.h | 2 ++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c index 766bc7e..9c114b2 100644 --- a/drivers/input/touchscreen/ti_am335x_tsc.c +++ b/drivers/input/touchscreen/ti_am335x_tsc.c @@ -256,14 +256,39 @@ static irqreturn_t titsc_irq(int irq, void *dev) { struct titsc *ts_dev = dev; struct input_dev *input_dev = ts_dev->input; - unsigned int status, irqclr = 0; + unsigned int status, irqclr = 0, config = 0; unsigned int x = 0, y = 0; unsigned int z1, z2, z; unsigned int fsm; status = titsc_readl(ts_dev, REG_IRQSTATUS); - if (status & IRQENB_FIFO0THRES) { + /* + * ADC and touchscreen share the IRQ line. + * FIFO1 threshold, FIFO1 Overrun and FIFO1 underflow + * interrupts are used by ADC. Handle FIFO0 IRQs here only + * and check if any IRQs left in case both fifos interrupt. + * If any irq left, return none, else return handled. + */ + if ((status & IRQENB_FIFO0OVRRUN) || + (status & IRQENB_FIFO0UNDRFLW)) { + + config = titsc_readl(ts_dev, REG_CTRL); + config &= ~(CNTRLREG_TSCSSENB); + titsc_writel(ts_dev, REG_CTRL, config); + + if (status & IRQENB_FIFO0UNDRFLW) { + titsc_writel(ts_dev, REG_IRQSTATUS, + (status | IRQENB_FIFO0UNDRFLW)); + irqclr |= IRQENB_FIFO0UNDRFLW; + } else { + titsc_writel(ts_dev, REG_IRQSTATUS, + (status | IRQENB_FIFO0OVRRUN)); + irqclr |= IRQENB_FIFO0OVRRUN; + } + titsc_writel(ts_dev, REG_CTRL, + (config | CNTRLREG_TSCSSENB)); + } else if (status & IRQENB_FIFO0THRES) { titsc_read_coordinates(ts_dev, &x, &y, &z1, &z2); if (ts_dev->pen_down && z1 != 0 && z2 != 0) { @@ -317,9 +342,11 @@ static irqreturn_t titsc_irq(int irq, void *dev) } if (irqclr) { - titsc_writel(ts_dev, REG_IRQSTATUS, irqclr); + titsc_writel(ts_dev, REG_IRQSTATUS, (status | irqclr)); am335x_tsc_se_set(ts_dev->mfd_tscadc, ts_dev->step_mask); - return IRQ_HANDLED; + status = titsc_readl(ts_dev, REG_IRQSTATUS); + if (status == false) + return IRQ_HANDLED; } return IRQ_NONE; } @@ -391,7 +418,7 @@ static int titsc_probe(struct platform_device *pdev) } err = request_irq(ts_dev->irq, titsc_irq, - 0, pdev->dev.driver->name, ts_dev); + IRQF_SHARED, pdev->dev.driver->name, ts_dev); if (err) { dev_err(&pdev->dev, "failed to allocate irq.\n"); goto err_free_mem; diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h index db1791b..e2db978 100644 --- a/include/linux/mfd/ti_am335x_tscadc.h +++ b/include/linux/mfd/ti_am335x_tscadc.h @@ -50,6 +50,8 @@ /* IRQ enable */ #define IRQENB_HW_PEN BIT(0) #define IRQENB_FIFO0THRES BIT(2) +#define IRQENB_FIFO0OVRRUN BIT(3) +#define IRQENB_FIFO0UNDRFLW BIT(4) #define IRQENB_FIFO1THRES BIT(5) #define IRQENB_PENUP BIT(9) -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Zubair Lutfullah <zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> To: jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org, dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, Russ.Dill-l0cyMroinI0@public.gmane.org Subject: [PATCH 3/4] input: ti_am335x_tsc: Enable shared IRQ for TSC, add overrun and underflow checks Date: Tue, 13 Aug 2013 21:05:02 +0100 [thread overview] Message-ID: <1376424303-22740-4-git-send-email-zubair.lutfullah@gmail.com> (raw) In-Reply-To: <1376424303-22740-1-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Enable shared IRQ to allow ADC to share IRQ line from parent MFD core. Only FIFO0 IRQs are for TSC and handled on the TSC side. Patch also adds overrun and underflow irq handlers. Russ Dill (TI) worked on overrun and underflow handlers. Rachna Patil (TI) laid ground work for shared IRQ. Signed-off-by: Zubair Lutfullah <zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Acked-by: Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> --- drivers/input/touchscreen/ti_am335x_tsc.c | 37 +++++++++++++++++++++++++---- include/linux/mfd/ti_am335x_tscadc.h | 2 ++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c index 766bc7e..9c114b2 100644 --- a/drivers/input/touchscreen/ti_am335x_tsc.c +++ b/drivers/input/touchscreen/ti_am335x_tsc.c @@ -256,14 +256,39 @@ static irqreturn_t titsc_irq(int irq, void *dev) { struct titsc *ts_dev = dev; struct input_dev *input_dev = ts_dev->input; - unsigned int status, irqclr = 0; + unsigned int status, irqclr = 0, config = 0; unsigned int x = 0, y = 0; unsigned int z1, z2, z; unsigned int fsm; status = titsc_readl(ts_dev, REG_IRQSTATUS); - if (status & IRQENB_FIFO0THRES) { + /* + * ADC and touchscreen share the IRQ line. + * FIFO1 threshold, FIFO1 Overrun and FIFO1 underflow + * interrupts are used by ADC. Handle FIFO0 IRQs here only + * and check if any IRQs left in case both fifos interrupt. + * If any irq left, return none, else return handled. + */ + if ((status & IRQENB_FIFO0OVRRUN) || + (status & IRQENB_FIFO0UNDRFLW)) { + + config = titsc_readl(ts_dev, REG_CTRL); + config &= ~(CNTRLREG_TSCSSENB); + titsc_writel(ts_dev, REG_CTRL, config); + + if (status & IRQENB_FIFO0UNDRFLW) { + titsc_writel(ts_dev, REG_IRQSTATUS, + (status | IRQENB_FIFO0UNDRFLW)); + irqclr |= IRQENB_FIFO0UNDRFLW; + } else { + titsc_writel(ts_dev, REG_IRQSTATUS, + (status | IRQENB_FIFO0OVRRUN)); + irqclr |= IRQENB_FIFO0OVRRUN; + } + titsc_writel(ts_dev, REG_CTRL, + (config | CNTRLREG_TSCSSENB)); + } else if (status & IRQENB_FIFO0THRES) { titsc_read_coordinates(ts_dev, &x, &y, &z1, &z2); if (ts_dev->pen_down && z1 != 0 && z2 != 0) { @@ -317,9 +342,11 @@ static irqreturn_t titsc_irq(int irq, void *dev) } if (irqclr) { - titsc_writel(ts_dev, REG_IRQSTATUS, irqclr); + titsc_writel(ts_dev, REG_IRQSTATUS, (status | irqclr)); am335x_tsc_se_set(ts_dev->mfd_tscadc, ts_dev->step_mask); - return IRQ_HANDLED; + status = titsc_readl(ts_dev, REG_IRQSTATUS); + if (status == false) + return IRQ_HANDLED; } return IRQ_NONE; } @@ -391,7 +418,7 @@ static int titsc_probe(struct platform_device *pdev) } err = request_irq(ts_dev->irq, titsc_irq, - 0, pdev->dev.driver->name, ts_dev); + IRQF_SHARED, pdev->dev.driver->name, ts_dev); if (err) { dev_err(&pdev->dev, "failed to allocate irq.\n"); goto err_free_mem; diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h index db1791b..e2db978 100644 --- a/include/linux/mfd/ti_am335x_tscadc.h +++ b/include/linux/mfd/ti_am335x_tscadc.h @@ -50,6 +50,8 @@ /* IRQ enable */ #define IRQENB_HW_PEN BIT(0) #define IRQENB_FIFO0THRES BIT(2) +#define IRQENB_FIFO0OVRRUN BIT(3) +#define IRQENB_FIFO0UNDRFLW BIT(4) #define IRQENB_FIFO1THRES BIT(5) #define IRQENB_PENUP BIT(9) -- 1.7.9.5
next prev parent reply other threads:[~2013-08-13 20:05 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-08-13 20:04 [PATCH 0/4] iio: input: ti_am335x_adc: Add continuous sampling support round 5 Zubair Lutfullah 2013-08-13 20:05 ` [PATCH 1/4] input: ti_am335x_tsc: correct step mask update after IRQ Zubair Lutfullah 2013-08-13 20:05 ` Zubair Lutfullah 2013-08-13 20:05 ` [PATCH 2/4] input: ti_am335x_tsc: Increase sequencer delay time Zubair Lutfullah 2013-08-13 20:05 ` Zubair Lutfullah [this message] 2013-08-13 20:05 ` [PATCH 3/4] input: ti_am335x_tsc: Enable shared IRQ for TSC, add overrun and underflow checks Zubair Lutfullah 2013-08-13 20:05 ` [PATCH 4/4] iio: ti_am335x_adc: Add continuous sampling and trigger support Zubair Lutfullah 2013-08-15 11:43 ` Jonathan Cameron 2013-08-15 11:43 ` Jonathan Cameron 2013-08-16 10:07 ` Sebastian Andrzej Siewior 2013-08-16 10:07 ` Sebastian Andrzej Siewior 2013-08-16 10:17 ` Sebastian Andrzej Siewior 2013-08-16 10:17 ` Sebastian Andrzej Siewior 2013-08-16 11:33 ` Jonathan Cameron 2013-08-16 11:33 ` Jonathan Cameron 2013-08-16 10:46 ` Sebastian Andrzej Siewior 2013-08-16 21:21 ` Zubair Lutfullah : 2013-08-17 8:58 ` Zubair Lutfullah : 2013-08-17 8:58 ` Zubair Lutfullah : [not found] ` <520F9395.3050900@kernel.org> 2013-08-17 18:51 ` Zubair Lutfullah : 2013-08-16 12:53 ` Sebastian Andrzej Siewior 2013-08-16 12:53 ` Sebastian Andrzej Siewior 2013-08-16 21:18 ` Zubair Lutfullah : 2013-08-16 13:25 ` Sebastian Andrzej Siewior 2013-08-16 13:25 ` Sebastian Andrzej Siewior 2013-08-16 21:13 ` Zubair Lutfullah : 2013-08-16 14:59 ` Sebastian Andrzej Siewior 2013-08-16 14:59 ` Sebastian Andrzej Siewior 2013-08-16 21:10 ` Zubair Lutfullah : 2013-08-19 17:12 ` Sebastian Andrzej Siewior 2013-08-19 17:12 ` Sebastian Andrzej Siewior 2013-08-20 16:26 ` Zubair Lutfullah : 2013-08-20 16:26 ` Zubair Lutfullah : 2013-08-14 18:57 ` [PATCH 0/4] iio: input: ti_am335x_adc: Add continuous sampling support round 5 Jonathan Cameron 2013-08-14 18:05 ` Sebastian Andrzej Siewior 2013-08-16 21:23 ` Zubair Lutfullah :
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=1376424303-22740-4-git-send-email-zubair.lutfullah@gmail.com \ --to=zubair.lutfullah@gmail.com \ --cc=Russ.Dill@ti.com \ --cc=bigeasy@linutronix.de \ --cc=dmitry.torokhov@gmail.com \ --cc=gregkh@linuxfoundation.org \ --cc=jic23@cam.ac.uk \ --cc=linux-iio@vger.kernel.org \ --cc=linux-input@vger.kernel.org \ --cc=linux-kernel@vger.kernel.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.