From patchwork Tue Oct 31 20:01:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Blumenstingl X-Patchwork-Id: 10035359 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 D81E9602B9 for ; Tue, 31 Oct 2017 20:08:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CA81828A9D for ; Tue, 31 Oct 2017 20:08:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BF40B28AD6; Tue, 31 Oct 2017 20:08:02 +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=-4.2 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7757D28A9D for ; Tue, 31 Oct 2017 20:08:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=AysTdtePUwjrtxpbFd+tiaL23AVomvId3XxxjspMWTA=; b=JUnb07PHQit583TbHeqRXQKOHK yY77S74ZQtUM9fTb9k0kCb0niK4R0s2RSahP1K4APZlESGff8kWGE9NvXatF3Y9AmsupANJDNEwh7 iBcci0+pmKlJr4HndGeL9LnUk6R/Or0K64XCK4XtzSZe7JqWwtrYSaNb6PlV+tGqDGqE1TMTvgGQ8 b8rcFO91ijWOhYzwTrN/edxlkr7oxLTFizAkTPBGM4bcIxxVSSHaaiS2IyI9NIWHEziOnxsu8awX1 WFESjnavyO60qw0GuUMII0WnJ98mykRoxSAbIAo/HDz6EBV+YWPPNCLp0Gue9sKJvVD7YvixtIKRK 27gf1Ciw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1e9cpE-0004n9-4b; Tue, 31 Oct 2017 20:07:52 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1e9cpC-0004i5-G3 for linux-amlogic@bombadil.infradead.org; Tue, 31 Oct 2017 20:07:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=jTWoV+CqxUlPk0vtDpQXolC0IenludliBlK/RezdcDQ=; b=kZbHAOx4l+OOMl6L4QD53QfzS wVc9iYOI/mM24nW2chVKgx3Pecg3l5gCaviKdlgVAFrERmqH4iESwtkyX8aWPr3DX5f18cNbdcwrW Eesckg7Ge6TDR1skYR/xVz0by8RkEEWMl18hVUsXSGlVMY1ucq3k/zt+ntW6JiUklotHWZLdIE4Gh /d9zq54QxgBJJ8+Tl7PmHdmZzq/D6ne/LHnaN34mYHsLvc4KAsVge5wXcv0MsNvCksXSZFdb6rxhg NRiVjY9X3QBpw5Zykj++QC7neubzMfYDJoYed8d2MxrkJOqFcihEEfqyhpx4D7ay2E8e3Jp563/I4 H9PH6zy/A==; Received: from mail-wr0-x242.google.com ([2a00:1450:400c:c0c::242]) by casper.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1e9ckN-0002MG-3d for linux-amlogic@lists.infradead.org; Tue, 31 Oct 2017 20:02:53 +0000 Received: by mail-wr0-x242.google.com with SMTP id j15so129629wre.8 for ; Tue, 31 Oct 2017 13:02:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jTWoV+CqxUlPk0vtDpQXolC0IenludliBlK/RezdcDQ=; b=QSln9bCW0bk5M5ygl/63cvYrZqDRAUl+6jTj+JrxbmLwBdeOxq5zPM24Jk4HyytJCG hoWVREQ7dYcKZD+0qA27KMso49C/E5iwAUncJaRSkWute5QHJ/Sevk18ykjCkPg/SNg2 yLEWQywwk4XwLpiCs60S/mxdks8+GM3SMsGMicwZlL9R3VNKNWC2Y5r9xjNoQvZN76A/ TzF8u3/gTJP7shqT3Yol/lJBhBhcdzpdg6Tnjj5IYVCdES8BmxqqEESl0oWqnxDNsmoa xvKlswLGaN8RH9hgBjjL3F/derlAn6CIjSk2ArCHxKAos6eA3QXn3K+9HVe/Ws05FJ/F /RtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jTWoV+CqxUlPk0vtDpQXolC0IenludliBlK/RezdcDQ=; b=nMfDKuaOAQBL8l26lZxDFsfzbJ4rZeJjNYQ6yckt0oJt6cGdf7x1LHkdI8D25RIYMN Zs/TcFhQoVfG09hzd6+hQJfjaNdvKyrQ5mmjzkH6ctSdVzxtwZ5NO/VydtpAwDM4Bv1w WIDyo/31mB1bRbRSZf6ozg933O5ImN/rajHvPZlsNovPnO+FvjINXoPT5XnNtpUbuRM4 zTblYTMbYeRMpGBV50nj5mS+otgcQH+k9FNSsYmbSzK+03pouN6APN+HwZUjhHMMQSk6 SacAkXWUei8gs4ITk0lRHp1zhX807dgzPDlDNKa+cp/F4ve3GXOVyHYtGuu2geQ2HTPz aPjw== X-Gm-Message-State: AMCzsaU7p6PrcDJt7jHUhDzQcnisuS6+F5NDhLMcjRnKCObvgTgfil1N JcNH0//uWBG+r8fDfQ5+xWw= X-Google-Smtp-Source: ABhQp+Tuzt/ApYM65ZI0sfYVU4+1fd4SVwoSPy5mzrQSeFRtwNiH1FnGKt+/diwgzPKZqoyrX3a9xQ== X-Received: by 10.223.154.74 with SMTP id z68mr2786886wrb.36.1509480149109; Tue, 31 Oct 2017 13:02:29 -0700 (PDT) Received: from blackbox.darklights.net (p5DE3887A.dip0.t-ipconnect.de. [93.227.136.122]) by smtp.googlemail.com with ESMTPSA id c17sm3420261wrg.26.2017.10.31.13.02.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 31 Oct 2017 13:02:28 -0700 (PDT) From: Martin Blumenstingl To: linux-iio@vger.kernel.org, jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net Subject: [PATCH 5/5] iio: adc: meson-saradc: program the channel muxes during initialization Date: Tue, 31 Oct 2017 21:01:47 +0100 Message-Id: <20171031200147.14660-6-martin.blumenstingl@googlemail.com> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20171031200147.14660-1-martin.blumenstingl@googlemail.com> References: <20171031200147.14660-1-martin.blumenstingl@googlemail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171031_200251_374921_6FCE8A76 X-CRM114-Status: GOOD ( 16.01 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Martin Blumenstingl , linux-amlogic@lists.infradead.org MIME-Version: 1.0 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+patchwork-linux-amlogic=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP On some Meson8 devices the channel muxes are not programmed. This results in garbage values when trying to read channels that are not set up. Fix this by initializing the channel 0 and 1 muxes in MESON_SAR_ADC_CHAN_10_SW as well as the muxes for all other channels in MESON_SAR_ADC_AUX_SW based on what the vendor driver does (which is simply a 1:1 mapping of channel number and channel mux). This only showed up on Meson8 devices, because for GXBB and newer BL30 is taking care of initializing the channel muxes. This additionally fixes a typo in the MESON_SAR_ADC_AUX_SW_MUX_SEL_CHAN_MASK macro because the old definition assumed that the register fields were 2 bit wide, while they are actually 3 bit wide. Signed-off-by: Martin Blumenstingl --- drivers/iio/adc/meson_saradc.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c index fa3c1378c2c9..48fb1b642a5e 100644 --- a/drivers/iio/adc/meson_saradc.c +++ b/drivers/iio/adc/meson_saradc.c @@ -96,8 +96,8 @@ #define MESON_SAR_ADC_FIFO_RD_SAMPLE_VALUE_MASK GENMASK(11, 0) #define MESON_SAR_ADC_AUX_SW 0x1c - #define MESON_SAR_ADC_AUX_SW_MUX_SEL_CHAN_MASK(_chan) \ - (GENMASK(10, 8) << (((_chan) - 2) * 2)) + #define MESON_SAR_ADC_AUX_SW_MUX_SEL_CHAN_SHIFT(_chan) \ + (8 + (((_chan) - 2) * 3)) #define MESON_SAR_ADC_AUX_SW_VREF_P_MUX BIT(6) #define MESON_SAR_ADC_AUX_SW_VREF_N_MUX BIT(5) #define MESON_SAR_ADC_AUX_SW_MODE_SEL BIT(4) @@ -623,7 +623,7 @@ static int meson_sar_adc_clk_init(struct iio_dev *indio_dev, static int meson_sar_adc_init(struct iio_dev *indio_dev) { struct meson_sar_adc_priv *priv = iio_priv(indio_dev); - int regval, ret; + int regval, i, ret; /* * make sure we start at CH7 input since the other muxes are only used @@ -678,6 +678,32 @@ static int meson_sar_adc_init(struct iio_dev *indio_dev) FIELD_PREP(MESON_SAR_ADC_DELAY_INPUT_DLY_SEL_MASK, 1)); + /* + * set up the input channel muxes in MESON_SAR_ADC_CHAN_10_SW + * (0 = SAR_ADC_CH0, 1 = SAR_ADC_CH1) + */ + regval = FIELD_PREP(MESON_SAR_ADC_CHAN_10_SW_CHAN0_MUX_SEL_MASK, 0); + regmap_update_bits(priv->regmap, MESON_SAR_ADC_CHAN_10_SW, + MESON_SAR_ADC_CHAN_10_SW_CHAN0_MUX_SEL_MASK, + regval); + regval = FIELD_PREP(MESON_SAR_ADC_CHAN_10_SW_CHAN1_MUX_SEL_MASK, 1); + regmap_update_bits(priv->regmap, MESON_SAR_ADC_CHAN_10_SW, + MESON_SAR_ADC_CHAN_10_SW_CHAN1_MUX_SEL_MASK, + regval); + + /* + * set up the input channel muxes in MESON_SAR_ADC_AUX_SW + * (2 = SAR_ADC_CH2, 3 = SAR_ADC_CH3, ...) and enable + * MESON_SAR_ADC_AUX_SW_YP_DRIVE_SW and + * MESON_SAR_ADC_AUX_SW_XP_DRIVE_SW like the vendor driver. + */ + regval = 0; + for (i = 2; i <= 7; i++) + regval |= i << MESON_SAR_ADC_AUX_SW_MUX_SEL_CHAN_SHIFT(i); + regval |= MESON_SAR_ADC_AUX_SW_YP_DRIVE_SW; + regval |= MESON_SAR_ADC_AUX_SW_XP_DRIVE_SW; + regmap_write(priv->regmap, MESON_SAR_ADC_AUX_SW, regval); + ret = clk_set_parent(priv->adc_sel_clk, priv->clkin); if (ret) { dev_err(indio_dev->dev.parent,