From patchwork Sun Nov 27 07:44:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guy Shapiro X-Patchwork-Id: 9448717 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CB87F6071A for ; Sun, 27 Nov 2016 08:07:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AEBD6205A4 for ; Sun, 27 Nov 2016 08:07:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 908F5212D9; Sun, 27 Nov 2016 08:07:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1C41B205A4 for ; Sun, 27 Nov 2016 08:07:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753079AbcK0IHg (ORCPT ); Sun, 27 Nov 2016 03:07:36 -0500 Received: from gateway24.websitewelcome.com ([192.185.50.73]:57480 "EHLO gateway24.websitewelcome.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752428AbcK0IHg (ORCPT ); Sun, 27 Nov 2016 03:07:36 -0500 Received: from cm6.websitewelcome.com (cm6.websitewelcome.com [108.167.139.19]) by gateway24.websitewelcome.com (Postfix) with ESMTP id 2022DE63F938C for ; Sun, 27 Nov 2016 01:46:28 -0600 (CST) Received: from gator3269.hostgator.com ([198.57.247.233]) by cm6.websitewelcome.com with id CvmS1u00T52sfJW01vmTPC; Sun, 27 Nov 2016 01:46:28 -0600 Received: from [213.57.90.22] (port=38489 helo=coyote.mobiwize) by gator3269.hostgator.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-SHA256:128) (Exim 4.87) (envelope-from ) id 1cAuAL-0001ao-Qq; Sun, 27 Nov 2016 01:46:26 -0600 From: Guy Shapiro To: dmitry.torokhov@gmail.com Cc: fabio.estevam@freescale.com, haibo.chen@freescale.com, robh+dt@kernel.org, mark.rutland@arm.com, linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Guy Shapiro Subject: [PATCH 2/2] input: touchscreen: sample averaging for imx6ul_tsc Date: Sun, 27 Nov 2016 09:44:58 +0200 Message-Id: <1480232698-23075-2-git-send-email-guy.shapiro@mobi-wize.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1480232698-23075-1-git-send-email-guy.shapiro@mobi-wize.com> References: <1480232698-23075-1-git-send-email-guy.shapiro@mobi-wize.com> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3269.hostgator.com X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - mobi-wize.com X-BWhitelist: no X-Source-IP: 213.57.90.22 X-Exim-ID: 1cAuAL-0001ao-Qq X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (coyote.mobiwize) [213.57.90.22]:38489 X-Source-Auth: guy.shapiro@mobi-wize.com X-Email-Count: 16 X-Source-Cap: bW9iaXdpemU7bW9iaXdpemU7Z2F0b3IzMjY5Lmhvc3RnYXRvci5jb20= Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The i.MX6UL internal touchscreen controller contains an option to average upon samples. This feature reduces noise from the produced touch locations. This patch adds sample averaging support to the imx6ul_tsc device driver. Signed-off-by: Guy Shapiro Reviewed-by: Fabio Estevam --- drivers/input/touchscreen/imx6ul_tsc.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/input/touchscreen/imx6ul_tsc.c b/drivers/input/touchscreen/imx6ul_tsc.c index 8275267..31724d9 100644 --- a/drivers/input/touchscreen/imx6ul_tsc.c +++ b/drivers/input/touchscreen/imx6ul_tsc.c @@ -25,6 +25,7 @@ /* ADC configuration registers field define */ #define ADC_AIEN (0x1 << 7) #define ADC_CONV_DISABLE 0x1F +#define ADC_AVGE (0x1 << 5) #define ADC_CAL (0x1 << 7) #define ADC_CALF 0x2 #define ADC_12BIT_MODE (0x2 << 2) @@ -32,6 +33,7 @@ #define ADC_CLK_DIV_8 (0x03 << 5) #define ADC_SHORT_SAMPLE_MODE (0x0 << 4) #define ADC_HARDWARE_TRIGGER (0x1 << 13) +#define ADC_AVGS_SHIFT 14 #define SELECT_CHANNEL_4 0x04 #define SELECT_CHANNEL_1 0x01 #define DISABLE_CONVERSION_INT (0x0 << 7) @@ -86,6 +88,7 @@ struct imx6ul_tsc { int measure_delay_time; int pre_charge_time; + int average_samples; struct completion completion; }; @@ -107,6 +110,8 @@ static int imx6ul_adc_init(struct imx6ul_tsc *tsc) adc_cfg = readl(tsc->adc_regs + REG_ADC_CFG); adc_cfg |= ADC_12BIT_MODE | ADC_IPG_CLK; adc_cfg |= ADC_CLK_DIV_8 | ADC_SHORT_SAMPLE_MODE; + if (tsc->average_samples) + adc_cfg |= (tsc->average_samples - 1) << ADC_AVGS_SHIFT; adc_cfg &= ~ADC_HARDWARE_TRIGGER; writel(adc_cfg, tsc->adc_regs + REG_ADC_CFG); @@ -118,6 +123,8 @@ static int imx6ul_adc_init(struct imx6ul_tsc *tsc) /* start ADC calibration */ adc_gc = readl(tsc->adc_regs + REG_ADC_GC); adc_gc |= ADC_CAL; + if (tsc->average_samples) + adc_gc |= ADC_AVGE; writel(adc_gc, tsc->adc_regs + REG_ADC_GC); timeout = wait_for_completion_timeout @@ -450,6 +457,16 @@ static int imx6ul_tsc_probe(struct platform_device *pdev) if (err) tsc->pre_charge_time = 0xfff; + err = of_property_read_u32(np, "average-samples", + &tsc->average_samples); + if (err) + tsc->average_samples = 0; + if (tsc->average_samples > 4) { + dev_err(&pdev->dev, "average-samples (%u) must be [0-4]\n", + tsc->average_samples); + return -EINVAL; + } + err = input_register_device(tsc->input); if (err) { dev_err(&pdev->dev,