From patchwork Tue Apr 12 07:29:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 65588 Delivered-To: patch@linaro.org Received: by 10.140.93.198 with SMTP id d64csp1768300qge; Tue, 12 Apr 2016 00:29:49 -0700 (PDT) X-Received: by 10.66.164.165 with SMTP id yr5mr2512331pab.133.1460446189432; Tue, 12 Apr 2016 00:29:49 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 78si8443079pfq.236.2016.04.12.00.29.49; Tue, 12 Apr 2016 00:29:49 -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 S1756097AbcDLH3s (ORCPT + 4 others); Tue, 12 Apr 2016 03:29:48 -0400 Received: from mail-lf0-f54.google.com ([209.85.215.54]:33642 "EHLO mail-lf0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756017AbcDLH3r (ORCPT ); Tue, 12 Apr 2016 03:29:47 -0400 Received: by mail-lf0-f54.google.com with SMTP id e190so12924083lfe.0 for ; Tue, 12 Apr 2016 00:29:47 -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=oy9b5tmTpr5goYTvwZLCXxXIecY3Ztg7eGyjoDhUVnk=; b=Q/y3vbOvVjvuJ5hlZk2IZSnKTsuv7RdiBvYNQywZYZKxf+jt9dKUil8gxVgoGEeVCo v7DSsXvQiwGm9AI2BnkJXvZS/PPZ8x7nXnpnd920daoGg+WYJU58h3CKl7l3lrZN3HXD qEuUlwGkamXgy9oG06DgjQJwApvsczsJ+UwXM= 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=oy9b5tmTpr5goYTvwZLCXxXIecY3Ztg7eGyjoDhUVnk=; b=afIqtgkM/k+Pg+tpVbtYjBZDdKPXG1YfgqqedvBxzCBGhD9iTTzsiE+vsc0K/UJcJD pulTCmPwT/dDpaTOujVJHthCKSztmqrdsF9XK5+gP4DQPeHps2iguFATuYHp8c3fT740 YKfFo76NSLGei7piRvsQ/ytvpZ0qxOWgE9O8OBnoEJRuEijpalLVvYSz/tYtf0UaGncU vRbcm3Bu9TGxyt/l1hw0QgkssQtN1+XNwiRoIb97lAcNDEBtpO/964LSRxpl/Z5RVngt sQuGLNqTkzLV+H9q2Jttyae+jpX9LLAiDBEHj30qAcq6c73//RMtbOWEY8ej75XOpia2 pEbA== X-Gm-Message-State: AOPr4FULimUULlKWjFlx0zbQZVpYeHzpoRK8MFnhwSS4QQe4IB6tHi/8ubVXJmRMVrryIEbx X-Received: by 10.112.133.38 with SMTP id oz6mr742527lbb.64.1460446185908; Tue, 12 Apr 2016 00:29:45 -0700 (PDT) Received: from localhost.localdomain ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id s63sm5065873lfs.17.2016.04.12.00.29.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Apr 2016 00:29:45 -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 1/2] gpio: wm831x: use the new open drain callback Date: Tue, 12 Apr 2016 09:29:40 +0200 Message-Id: <1460446180-16397-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 WM831x 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 --- ChangeLog v1->v2: - Use a switch() statement rather than if-constructions --- drivers/gpio/gpio-wm831x.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 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-wm831x.c b/drivers/gpio/gpio-wm831x.c index 18cb0f534b91..41ec7834059a 100644 --- a/drivers/gpio/gpio-wm831x.c +++ b/drivers/gpio/gpio-wm831x.c @@ -132,6 +132,28 @@ static int wm831x_gpio_set_debounce(struct gpio_chip *chip, unsigned offset, return wm831x_set_bits(wm831x, reg, WM831X_GPN_FN_MASK, fn); } +static int wm831x_set_single_ended(struct gpio_chip *chip, + unsigned int offset, + enum single_ended_mode mode) +{ + struct wm831x_gpio *wm831x_gpio = gpiochip_get_data(chip); + struct wm831x *wm831x = wm831x_gpio->wm831x; + int reg = WM831X_GPIO1_CONTROL + offset; + + switch (mode) { + case LINE_MODE_OPEN_DRAIN: + return wm831x_set_bits(wm831x, reg, + WM831X_GPN_OD_MASK, WM831X_GPN_OD); + case LINE_MODE_PUSH_PULL: + return wm831x_set_bits(wm831x, reg, + WM831X_GPN_OD_MASK, 0); + default: + break; + } + + return -ENOTSUPP; +} + #ifdef CONFIG_DEBUG_FS static void wm831x_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) { @@ -216,7 +238,7 @@ static void wm831x_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) pull, powerdomain, reg & WM831X_GPN_POL ? "" : " inverted", - reg & WM831X_GPN_OD ? "open-drain" : "CMOS", + reg & WM831X_GPN_OD ? "open-drain" : "push-pull", tristated ? " tristated" : "", reg); } @@ -234,6 +256,7 @@ static struct gpio_chip template_chip = { .set = wm831x_gpio_set, .to_irq = wm831x_gpio_to_irq, .set_debounce = wm831x_gpio_set_debounce, + .set_single_ended = wm831x_set_single_ended, .dbg_show = wm831x_gpio_dbg_show, .can_sleep = true, };