From patchwork Sun Apr 10 13:12:30 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 65438 Delivered-To: patch@linaro.org Received: by 10.112.43.237 with SMTP id z13csp977082lbl; Sun, 10 Apr 2016 06:13:00 -0700 (PDT) X-Received: by 10.98.8.219 with SMTP id 88mr26048882pfi.51.1460293980608; Sun, 10 Apr 2016 06:13:00 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p10si13023088pfj.229.2016.04.10.06.13.00; Sun, 10 Apr 2016 06:13:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-gpio-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-gpio-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-gpio-owner@vger.kernel.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753112AbcDJNMm (ORCPT + 4 others); Sun, 10 Apr 2016 09:12:42 -0400 Received: from mail-lf0-f54.google.com ([209.85.215.54]:35300 "EHLO mail-lf0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753101AbcDJNMl (ORCPT ); Sun, 10 Apr 2016 09:12:41 -0400 Received: by mail-lf0-f54.google.com with SMTP id c126so125861084lfb.2 for ; Sun, 10 Apr 2016 06:12:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=l4dy8FKHdK+N67JchNLaJ6Diu1MKQDLsIUjb5uxujX0=; b=IsV9BrGWCkdfb0m2sBM09u8PnaAproUvzDD+nNJuxO575bXmTEDVymAtbNH/ca49fV Crz2wG9zLoWAoUgKlvlrRb5tKlKia52X3ndspKnI5g+UHzkJc0OPIanxnNf6hWGha1pr doYGTLhtOQl8NvsTq2SBlxDDx2sffi3L7dUx0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=l4dy8FKHdK+N67JchNLaJ6Diu1MKQDLsIUjb5uxujX0=; b=LBOIMujygiCf8+6tOXRE7Y7VjGEIsr5z8flRF37fTD0O7JC4wuWsgZVVUne0f3iftt tJgu7SJM5gx+1dOhnab4lK1jvQgGzifZ+vs/y+9aAyYb+YTwTw0SR0VmrmmDxBOrtY07 icnb33wMYDnKgmk+8jsvAuTZqIa+8nUFsDV+NcNTKdFPztUqPy1u0W3E4jMTEu+nAdhH vF3CIj/bZtboMF1qGYRhec3ns3sMwFDTzESwjVAehv/GwaH/nEswO5sRDha0TaBxWjSa w9nMJt37AE1uRf7gNLAi7wG/2Qz7dp+p0gH65ChcUnFJBgHhoS+PPg8dnK+a0KwXXfeL UvXA== X-Gm-Message-State: AD7BkJItmj09g3gZvSWwbznpfw8DkbIcMKpi4dsatTtDkhfmU94TIqNtv3IpK3JQxPnAadc2 X-Received: by 10.25.41.140 with SMTP id p134mr7283240lfp.15.1460293955098; Sun, 10 Apr 2016 06:12:35 -0700 (PDT) Received: from localhost.localdomain.localdomain (c-927b71d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.123.146]) by smtp.gmail.com with ESMTPSA id v72sm3741813lfd.24.2016.04.10.06.12.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 10 Apr 2016 06:12:34 -0700 (PDT) From: Linus Walleij To: linux-gpio@vger.kernel.org, Alexandre Courbot Cc: Linus Walleij , patches@opensource.wolfsonmicro.com, Mark Brown , Charles Keepax Subject: [PATCH 2/2] gpio: wm8994: use the new open drain callback Date: Sun, 10 Apr 2016 15:12:30 +0200 Message-Id: <1460293950-14232-1-git-send-email-linus.walleij@linaro.org> X-Mailer: git-send-email 2.4.3 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The WM8994 GPIOs clearly have a dedicated open drain control register. Implement support for controlling this from GPIO descriptor tables or other hardware descriptions such as device tree by implementing the .set_single_ended() callback. Before this patch, lines requesting open drain will just be switched to input mode by the framework, thus emulating open drain. But the hardware can do the real thing, so let's support that. As part of this, rename the debugfs string for output mode from "CMOS" to "push-pull" because it is the term used in the framework to signify a tomem-pole CMOS output. Cc: patches@opensource.wolfsonmicro.com Cc: Mark Brown Cc: Charles Keepax Signed-off-by: Linus Walleij --- drivers/gpio/gpio-wm8994.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/gpio/gpio-wm8994.c b/drivers/gpio/gpio-wm8994.c index b089df99a0d0..08570dcc785b 100644 --- a/drivers/gpio/gpio-wm8994.c +++ b/drivers/gpio/gpio-wm8994.c @@ -103,6 +103,25 @@ static void wm8994_gpio_set(struct gpio_chip *chip, unsigned offset, int value) wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset, WM8994_GPN_LVL, value); } +static int wm8994_gpio_set_single_ended(struct gpio_chip *chip, + unsigned int offset, + enum single_ended_mode mode) +{ + struct wm8994_gpio *wm8994_gpio = gpiochip_get_data(chip); + struct wm8994 *wm8994 = wm8994_gpio->wm8994; + + if (mode == LINE_MODE_OPEN_DRAIN) + return wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset, + WM8994_GPN_OP_CFG_MASK, + WM8994_GPN_OP_CFG); + + if (mode == LINE_MODE_PUSH_PULL) + return wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset, + WM8994_GPN_OP_CFG_MASK, 0); + + return -ENOTSUPP; +} + static int wm8994_gpio_to_irq(struct gpio_chip *chip, unsigned offset) { struct wm8994_gpio *wm8994_gpio = gpiochip_get_data(chip); @@ -217,7 +236,7 @@ static void wm8994_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) if (reg & WM8994_GPN_OP_CFG) seq_printf(s, "open drain "); else - seq_printf(s, "CMOS "); + seq_printf(s, "push-pull "); seq_printf(s, "%s (%x)\n", wm8994_gpio_fn(reg & WM8994_GPN_FN_MASK), reg); @@ -235,6 +254,7 @@ static struct gpio_chip template_chip = { .get = wm8994_gpio_get, .direction_output = wm8994_gpio_direction_out, .set = wm8994_gpio_set, + .set_single_ended = wm8994_gpio_set_single_ended, .to_irq = wm8994_gpio_to_irq, .dbg_show = wm8994_gpio_dbg_show, .can_sleep = true,