From patchwork Thu Nov 19 00:32:27 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Wahren X-Patchwork-Id: 546259 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id D7964141497 for ; Thu, 19 Nov 2015 11:39:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756342AbbKSAjS (ORCPT ); Wed, 18 Nov 2015 19:39:18 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:58590 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756310AbbKSAjO (ORCPT ); Wed, 18 Nov 2015 19:39:14 -0500 X-Greylist: delayed 352 seconds by postgrey-1.27 at vger.kernel.org; Wed, 18 Nov 2015 19:39:14 EST Received: from localhost.localdomain ([95.91.39.67]) by mrelayeu.kundenserver.de (mreue103) with ESMTPSA (Nemesis) id 0LrqDW-1aN67O2AzG-013hI1; Thu, 19 Nov 2015 01:32:36 +0100 From: Stefan Wahren To: Linus Walleij , Stephen Warren , Lee Jones , Eric Anholt Cc: linux-gpio@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Stefan Wahren , Martin Sperl Subject: [PATCH] pinctrl: bcm2835: Fix initial value for direction_output Date: Thu, 19 Nov 2015 00:32:27 +0000 Message-Id: <1447893147-9458-1-git-send-email-stefan.wahren@i2se.com> X-Mailer: git-send-email 1.7.9.5 X-Provags-ID: V03:K0:n0SN4S1rgxXmYmRg/76YNnjQ/bz2IGdvppiBdynyfSXdZ+/bYWU +Rj+nJrwZOHGRDpChhMWnEppF56ndwafO1XGcaBwO+b1MK2tN6vgLZFT1tAogM//8fq1rqB x4WT5etESVZJH4nBtj7FjVJCCe7bv6Vn6HZCWlidhfU9+7av1KLv7bpM4ZKgNpA0Thx1nSe WWCooQ0+fDceMoGbgLW0A== X-UI-Out-Filterresults: notjunk:1; V01:K0:1+/916JIIfc=:Q/sWx1Nu9k3CPU+wZ18EDo wbsJ6Cfwi82GVzE72gV0eXXzlXST8cWDrpyEwGfjZpsoQmDg3kn0GJbSjEjPM7RZcbALEL1tB gT0xTXqbXrE7oqDBmIGXsxXMNN4Gp1HVom9vorX2ZGM6dH9C/Az9iAIASYnlzkXnXs0cSVs9P BxNeufBx498bOSr9MDTF9hlo0NKZIagqWm24aWZbOExNJDVRg/Aev1VS6REd+WvWLNA1Z06ek VDtPQMK5Sz/nPQpDLlMspijIP8SQdZJW4stHOQXHwNL1j4wi8E3m/U9myjM/Kujm5vwexz44w jODWMTj3TT9Cn7aTO7Gz+PuQjRjuyi4ujq7M/+25DwOMqmH4sp7s5QLvsh5wYyoGqu+bPT+t7 I2exsmxHkljJ3ONkBQGx1frUTVJBDjT79d1hXaxTEWo+YKnEqb8Sv6NsmNUK81LmJIt+11q9M UQtIS/acAoLhFRZZdgD6WezDU7AEExNA4REik8kiA/UeE+GFKnzP+c9tKmsBx22pvPoe4ZtcD 3HaLf6KvA8UlHNcT8d4k+cCB/ypUNtPPjkgBx/RPuOjPTxBZvOna6Kcm3k0ApqyKjeyuVvp+3 0J6aVzUopVUhd7KmKaCwrDHJZmnFWgRuT8eXJabacPi8maspVEns9drWxKAQ1CDArT/5XO9h/ /aWAYJUQgK1CaUsmTh+RN9w05KT4DUFDHu+u65CL0AwUqQssEZUD4/9D1JbuH9SsOJsk= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Currently the provided initial value for bcm2835_gpio_direction_output has no effect. So fix this issue by changing the value before changing the GPIO direction. As a result we need to move the function below bcm2835_gpio_set. Signed-off-by: Stefan Wahren CC: Martin Sperl CC: Stephen Warren Acked-by: Eric Anholt Acked-by: Stephen Warren --- This patch was inspired by this discussion [1]. [1] - http://lists.infradead.org/pipermail/linux-rpi-kernel/2015-April/001499.html drivers/pinctrl/bcm/pinctrl-bcm2835.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c index 8efa235..fd1441b 100644 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c @@ -352,12 +352,6 @@ static int bcm2835_gpio_get(struct gpio_chip *chip, unsigned offset) return bcm2835_gpio_get_bit(pc, GPLEV0, offset); } -static int bcm2835_gpio_direction_output(struct gpio_chip *chip, - unsigned offset, int value) -{ - return pinctrl_gpio_direction_output(chip->base + offset); -} - static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value) { struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev); @@ -365,6 +359,13 @@ static void bcm2835_gpio_set(struct gpio_chip *chip, unsigned offset, int value) bcm2835_gpio_set_bit(pc, value ? GPSET0 : GPCLR0, offset); } +static int bcm2835_gpio_direction_output(struct gpio_chip *chip, + unsigned offset, int value) +{ + bcm2835_gpio_set(chip, offset, value); + return pinctrl_gpio_direction_output(chip->base + offset); +} + static int bcm2835_gpio_to_irq(struct gpio_chip *chip, unsigned offset) { struct bcm2835_pinctrl *pc = dev_get_drvdata(chip->dev);