From patchwork Sun Jul 14 08:04:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Wu X-Patchwork-Id: 2827203 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E0CF8C0AB2 for ; Sun, 14 Jul 2013 08:08:29 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 166352011B for ; Sun, 14 Jul 2013 08:08:29 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 000CC20111 for ; Sun, 14 Jul 2013 08:08:27 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1UyHK1-0005ln-RD; Sun, 14 Jul 2013 08:06:22 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UyHJi-0008Ij-4n; Sun, 14 Jul 2013 08:06:02 +0000 Received: from newsmtp5.atmel.com ([204.2.163.5] helo=sjogate2.atmel.com) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UyHJG-0008FH-8J for linux-arm-kernel@lists.infradead.org; Sun, 14 Jul 2013 08:05:37 +0000 Received: from bamboo.corp.atmel.com ([10.217.11.52]) by sjogate2.atmel.com (8.13.6/8.13.6) with ESMTP id r6E7wb99003909; Sun, 14 Jul 2013 00:58:57 -0700 (PDT) From: Josh Wu To: jic23@cam.ac.uk Subject: [PATCH 3/5] iio: at91: ADC start-up time calculation changed since at91sam9x5 Date: Sun, 14 Jul 2013 16:04:27 +0800 Message-Id: <1373789069-11604-4-git-send-email-josh.wu@atmel.com> X-Mailer: git-send-email 1.7.10 In-Reply-To: <1373789069-11604-1-git-send-email-josh.wu@atmel.com> References: <1373789069-11604-1-git-send-email-josh.wu@atmel.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130714_040534_625977_C3C42396 X-CRM114-Status: GOOD ( 12.83 ) X-Spam-Score: -1.9 (-) Cc: linux-iio@vger.kernel.org, nicolas.ferre@atmel.com, Josh Wu , maxime.ripard@free-electrons.com, plagnioj@jcrosoft.com, linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, 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 Since in at91sam9x5, sama5d3x chip. the start up time calucation is changed. And these two chips also have TSMR, so we check whether ADC has TSMR, then choose different start up time calculation formula. Signed-off-by: Josh Wu --- drivers/iio/adc/at91_adc.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c index 14e99ba..e93a075 100644 --- a/drivers/iio/adc/at91_adc.c +++ b/drivers/iio/adc/at91_adc.c @@ -733,13 +733,39 @@ static int at91_adc_probe(struct platform_device *pdev) goto error_disable_adc_clk; } - /* - * Number of ticks needed to cover the startup time of the ADC as - * defined in the electrical characteristics of the board, divided by 8. - * The formula thus is : Startup Time = (ticks + 1) * 8 / ADC Clock - */ - ticks = round_up((st->startup_time * adc_clk_khz / - 1000) - 1, 8) / 8; + if (!st->caps.has_tsmr) { + /* + * Number of ticks needed to cover the startup time of the ADC + * as defined in the electrical characteristics of the board, + * divided by 8. The formula thus is : + * Startup Time = (ticks + 1) * 8 / ADC Clock + */ + ticks = round_up((st->startup_time * adc_clk_khz / + 1000) - 1, 8) / 8; + } else { + /* + * For sama5d3x and at91sam9x5, the formula changes to: + * Startup Time = / ADC Clock + */ + const int startup_lookup[] = { + 0 , 8 , 16 , 24 , + 64 , 80 , 96 , 112, + 512, 576, 640, 704, + 768, 832, 896, 960 + }; + + int i, size = ARRAY_SIZE(startup_lookup); + ticks = st->startup_time * adc_clk_khz / 1000; + for (i = 0; i < size; i++) + if (ticks < startup_lookup[i]) + break; + + ticks = i; + if (ticks == size) + /* Reach the end of lookup table */ + ticks = size - 1; + } + /* * a minimal Sample and Hold Time is necessary for the ADC to guarantee * the best converted final value between two channels selection