From patchwork Tue Jul 21 00:49:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adam YH Lee X-Patchwork-Id: 6831681 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id BE2F59F380 for ; Tue, 21 Jul 2015 00:49:29 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id EE3A32053F for ; Tue, 21 Jul 2015 00:49:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0710220513 for ; Tue, 21 Jul 2015 00:49:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757553AbbGUAt1 (ORCPT ); Mon, 20 Jul 2015 20:49:27 -0400 Received: from mail-pa0-f46.google.com ([209.85.220.46]:34570 "EHLO mail-pa0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757482AbbGUAt0 (ORCPT ); Mon, 20 Jul 2015 20:49:26 -0400 Received: by pacan13 with SMTP id an13so110424084pac.1; Mon, 20 Jul 2015 17:49:25 -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; bh=QG9RgyuBEX2g1Mef+SyWWtleTbaFleXZskUn6cGengk=; b=IHFVo7KBprxqn+tjITrpVbKaY4B9csx/IRUYHAOH1XP0PMxAT0zBGjjd2a7eDRDvhH 8y+kL8WrYTY0cqDCXGImbuuYIM69TwzolXjDxATAroyuAgqijhk3B1Mx7Wc5WNYrpAN3 T9cp1TxGepar/638tMwHnJjfQ6JjMIXp8b5hWU7xuLQLMqrNcLrCJCA4DzZVxypEjoPa 6kYXx0XnDZI7bXOn3/nyYUuYpo2VR+Ht8PbmU541CAxB2xmWo/5tszfD7sU0JdTIGrp3 nw5xVIpC/+NdNbhO/SVTWTF6/fcexEPeM30kWxPjUPRv9o3cFvfRtacK2e0OMhkB6wWp UyYQ== X-Received: by 10.66.174.36 with SMTP id bp4mr1259179pac.133.1437439765896; Mon, 20 Jul 2015 17:49:25 -0700 (PDT) Received: from localhost.localdomain (s206-116-3-180.bc.hsia.telus.net. [206.116.3.180]) by smtp.gmail.com with ESMTPSA id yd8sm8721745pab.46.2015.07.20.17.49.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Jul 2015 17:49:25 -0700 (PDT) From: Adam YH Lee To: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: linux-iio@vger.kernel.org, sre@kernel.org, jic23@kernel.org, pmeerw@pmeerw.net, Adam YH Lee Subject: [V3] [TWL4030 MADC] Fix ADC[3:6] readings Date: Mon, 20 Jul 2015 17:49:15 -0700 Message-Id: <1437439755-30618-1-git-send-email-adam.yh.lee@gmail.com> X-Mailer: git-send-email 2.1.4 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Spam-Status: No, score=-8.0 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 MADC[3:6] reads incorrect values without these two following changes: - enable the 3v1 bias regulator for ADC[3:6] - configure ADC[3:6] lines as input, not as USB Signed-off-by: Adam YH Lee --- drivers/iio/adc/twl4030-madc.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/iio/adc/twl4030-madc.c b/drivers/iio/adc/twl4030-madc.c index 94c5f05..ae33eba 100644 --- a/drivers/iio/adc/twl4030-madc.c +++ b/drivers/iio/adc/twl4030-madc.c @@ -45,13 +45,18 @@ #include #include #include +#include #include +#define TWL4030_USB_SEL_MADC_MCPC (1<<3) +#define TWL4030_USB_CARKIT_ANA_CTRL 0xBB + /** * struct twl4030_madc_data - a container for madc info * @dev: Pointer to device structure for madc * @lock: Mutex protecting this data structure + * @regulator: Pointer to bias regulator for madc * @requests: Array of request struct corresponding to SW1, SW2 and RT * @use_second_irq: IRQ selection (main or co-processor) * @imr: Interrupt mask register of MADC @@ -60,6 +65,7 @@ struct twl4030_madc_data { struct device *dev; struct mutex lock; /* mutex protecting this data structure */ + struct regulator *usb3v1; struct twl4030_madc_request requests[TWL4030_MADC_NUM_METHODS]; bool use_second_irq; u8 imr; @@ -848,6 +854,33 @@ static int twl4030_madc_probe(struct platform_device *pdev) goto err_i2c; } + /* Configure MADC[3:6] */ + ret = twl_i2c_read_u8(TWL_MODULE_USB, ®val, + TWL4030_USB_CARKIT_ANA_CTRL); + if (ret) { + dev_err(&pdev->dev, "unable to read reg CARKIT_ANA_CTRL 0x%X\n", + TWL4030_USB_CARKIT_ANA_CTRL); + goto err_i2c; + } + regval |= TWL4030_USB_SEL_MADC_MCPC; + ret = twl_i2c_write_u8(TWL_MODULE_USB, regval, + TWL4030_USB_CARKIT_ANA_CTRL); + if (ret) { + dev_err(&pdev->dev, "unable to write reg CARKIT_ANA_CTRL 0x%X\n", + TWL4030_USB_CARKIT_ANA_CTRL); + goto err_i2c; + } + + + /* Enable 3v1 bias regulator for MADC[3:6] */ + madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1"); + if (IS_ERR(madc->usb3v1)) + return -ENODEV; + + ret = regulator_enable(madc->usb3v1); + if (ret) + dev_err(madc->dev, "could not enable 3v1 bias regulator\n"); + return 0; err_i2c: @@ -867,6 +900,9 @@ static int twl4030_madc_remove(struct platform_device *pdev) twl4030_madc_set_current_generator(madc, 0, 0); twl4030_madc_set_power(madc, 0); + regulator_disable(madc->usb3v1); + devm_regulator_put(madc->usb3v1); + return 0; }