From patchwork Tue Aug 13 16:48:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zubair Lutfullah X-Patchwork-Id: 2843890 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 25AFB9F239 for ; Tue, 13 Aug 2013 16:49:12 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C168620609 for ; Tue, 13 Aug 2013 16:49:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 63C9820606 for ; Tue, 13 Aug 2013 16:49:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757843Ab3HMQsd (ORCPT ); Tue, 13 Aug 2013 12:48:33 -0400 Received: from mail-ee0-f42.google.com ([74.125.83.42]:34935 "EHLO mail-ee0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757387Ab3HMQsb (ORCPT ); Tue, 13 Aug 2013 12:48:31 -0400 Received: by mail-ee0-f42.google.com with SMTP id b45so4297606eek.15 for ; Tue, 13 Aug 2013 09:48:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FC9InJG3Rcs6VU4s2Ubi9/+RdEJUqdTUw/XU4MxO+EE=; b=xyQijQS7K3ieFFjLZlJMTxNjCcnGKNTGAHR8ELGjYacxQfZU++fFd/kQAxTSQKospS QA3rmyZpxFz/rC+CWMFgs0jpPJ4BUYzoJkB+n7LMXH3LsyVLw0k2Vmfhl1vGeX+5mNtJ caPIDQbHx4vMrCDEH5eVgvIqUCQTaaXDQ2hhEgwAVQVIITZqNS5oZN3phcHYw1DDLP/F dNS8anyFHq5SS5LN1T1aXH6BRhLQPcbyLpwXAc5Q5M9QA19aVaPFVVbWD2kj4RRxeAY+ pRqssdTBtmYaZ5vpHFBiBgO9eNWoIEdnOnfK9eS8HQfd4gOwEKaxAAcsXf4Jyi6SH0Bb 6KSg== X-Received: by 10.14.38.14 with SMTP id z14mr7955312eea.49.1376412509424; Tue, 13 Aug 2013 09:48:29 -0700 (PDT) Received: from localhost.localdomain (cpc3-seac14-0-0-cust157.7-2.cable.virginmedia.com. [81.97.204.158]) by mx.google.com with ESMTPSA id m54sm67615350eex.2.2013.08.13.09.48.27 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 13 Aug 2013 09:48:28 -0700 (PDT) From: Zubair Lutfullah To: jic23@cam.ac.uk, dmitry.torokhov@gmail.com, sameo@linux.intel.com, lee.jones@linaro.org 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_tsc: Enable shared IRQ for TSC and add overrun, underflow checks Date: Tue, 13 Aug 2013 17:48:18 +0100 Message-Id: <1376412499-21007-4-git-send-email-zubair.lutfullah@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1376412499-21007-1-git-send-email-zubair.lutfullah@gmail.com> References: <1376412499-21007-1-git-send-email-zubair.lutfullah@gmail.com> Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 Acked-by: Lee Jones --- 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)