From patchwork Thu May 9 20:59:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1097682 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="qI6ufmv3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 450QkC3ktqz9sBK for ; Fri, 10 May 2019 07:01:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726805AbfEIVBW (ORCPT ); Thu, 9 May 2019 17:01:22 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:45983 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725992AbfEIVBV (ORCPT ); Thu, 9 May 2019 17:01:21 -0400 Received: by mail-pg1-f195.google.com with SMTP id i21so1801148pgi.12; Thu, 09 May 2019 14:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Rji3Tsx4QdgFefM8jscUiPkqR6jrOJsimIgfbLEWBM8=; b=qI6ufmv32wwIJe/P5xoB6V2LwPg2k0uATPOsgYvQ/FktxohPd6qokjj0qp9drwdjwg 7CY8GzyGig23rFHllc8aINFtiVD/Z3RRCWKgqgzBaQwIVpnVOcJ3xUci/n/LZjr7OXwG riavwMw5bWNSE5/ZuR04jHA757v7RbyirigrVoJ7wYr8QcdVHk/eEsjQYPoJ8GUuJd9+ oHL8ssMVpWeCHfz3VGUl5BBg/muHwDEkERYzioFgnWXKLKWMfQKrEwjj6HZPzP/ggSpO +9duQoHcTE00N9LzP1sG02BuG7Rp9uYVSUvQrF++uqpsGhn5OuBfNbvRUHDDCJPh7jqx 3hwQ== 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=Rji3Tsx4QdgFefM8jscUiPkqR6jrOJsimIgfbLEWBM8=; b=gENNiBPr4gGHvFIYiSFHbPcR+NRM0ImmsjpwRkfaGyT2v79byj11Dkc5Cbhp+4onIS dAQ7ozgI1oDFqJF5uwAoFApY59tF9JLGWglJtnWj+hZ5ESw6K4T2yunA279yDyr38KGx aMTxdOacbITgdOemcSK9mPu5Pqv90fr3fBjQ8R5u80jddterKrFubd1fw+RCcV9AQvJh hbw2jYOeoiVsYVhztIIXoNQ2E+sJ5xv2j1DvJQUX3t1JyVFY7pKdU/h+dx8mgJkwXGLZ TqaHcexVC056Ep78ZB143Kttfpy3iwobyqwUlfU5WRcOxCKw1C8KhVEiEWLN33FqriT4 2+VA== X-Gm-Message-State: APjAAAX+At175aIEBYhRt0p/SiHaSIN4b4ZQqQAv254aB8+Af3p7kXcQ DdviQP09YL+xCDjPJl9wg7E= X-Google-Smtp-Source: APXvYqxGsWxzMY/zvlEJjq4i52EZgy9WmOXV9oY/+hUqUu+ZAT9UlzzCIOeZHOjiUYsD90CSHX8NQQ== X-Received: by 2002:a65:554d:: with SMTP id t13mr8487941pgr.171.1557435680626; Thu, 09 May 2019 14:01:20 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id d15sm10989209pfm.186.2019.05.09.14.01.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 May 2019 14:01:19 -0700 (PDT) From: Florian Fainelli To: linux-arm-kernel@lists.infradead.org Cc: Florian Fainelli , Linus Walleij , Rob Herring , Mark Rutland , Ray Jui , Scott Branden , bcm-kernel-feedback-list@broadcom.com (maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE...), Eric Anholt , Stefan Wahren , Doug Berger , Matheus Castello , =?utf-8?b?UmFmYcWCIE1pxYJl?= =?utf-8?q?cki?= , Lukas Wunner , Nathan Chancellor , Al Cooper , linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM), devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS), linux-rpi-kernel@lists.infradead.org (moderated list:BROADCOM BCM2835 ARM ARCHITECTURE), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/3] dt-bindings: pinctrl: bcm2835-gpio: Document BCM7211 compatible Date: Thu, 9 May 2019 13:59:53 -0700 Message-Id: <20190509205955.27842-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190509205955.27842-1-f.fainelli@gmail.com> References: <20190509205955.27842-1-f.fainelli@gmail.com> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org BCM7211 has a slightly different block layout and some additional GPIO registers that were added, document the compatible string. Signed-off-by: Florian Fainelli --- .../devicetree/bindings/pinctrl/brcm,bcm2835-gpio.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/pinctrl/brcm,bcm2835-gpio.txt b/Documentation/devicetree/bindings/pinctrl/brcm,bcm2835-gpio.txt index 3fac0a061bcc..ac6d614d74e0 100644 --- a/Documentation/devicetree/bindings/pinctrl/brcm,bcm2835-gpio.txt +++ b/Documentation/devicetree/bindings/pinctrl/brcm,bcm2835-gpio.txt @@ -5,6 +5,9 @@ controller, and pinmux/control device. Required properties: - compatible: "brcm,bcm2835-gpio" +- compatible: should be one of: + "brcm,bcm2835-gpio" - BCM2835 compatible pinctrl + "brcm,bcm7211-gpio" - BCM7211 compatible pinctrl - reg: Should contain the physical address of the GPIO module's registers. - gpio-controller: Marks the device node as a GPIO controller. - #gpio-cells : Should be two. The first cell is the pin number and the From patchwork Thu May 9 20:59:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1097685 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VbXUipzv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 450QkS597pz9sNC for ; Fri, 10 May 2019 07:01:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726991AbfEIVBZ (ORCPT ); Thu, 9 May 2019 17:01:25 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:33607 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726866AbfEIVBX (ORCPT ); Thu, 9 May 2019 17:01:23 -0400 Received: by mail-pl1-f195.google.com with SMTP id y3so1725062plp.0; Thu, 09 May 2019 14:01:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=MSJ4xqUm9vrKGdI4mtkTYOHlvZbHUnqDBUPly/F4wuQ=; b=VbXUipzv50tdvMoMxdrUTgpcDcs34w51583wOCbZx5EJFh7Xd77s+q29KSaW/yS7g6 JNxwi/WnVdjh8pUPCUgV11QhmHxVm80pZh4OVtep3YHZLRd203cfRDrOYRF9BMuAS14J /S/EneJHu+RnuRGuDOToccv2aHYe54l5LvbN6f82wjbvn54k2/j8ttYQoS/I4lH6h19e 38MNG/HClLzYyMxdnOlHOctn9iCYaTi7OqgjmZC72NEVvc+7KKz9DIfDC0GJunFVPh4A Kp09m4HYTwdo2j0AZl6EQKr/BAlfL/834LoBlfpc4niflErnXXU/iD8ZowHd/gOVGbf3 I0eQ== 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=MSJ4xqUm9vrKGdI4mtkTYOHlvZbHUnqDBUPly/F4wuQ=; b=stTsKMZyp1Cbe4WEMq8fipojjPaE954kAEqaXX/vyvgt9o+JqrTingDe7dt0Em8v4a gCe7yhegJGRAsBb+rN1m22Skwhl3522xjwQg1iKt1vBLmC4q00LdpkS1Czjpp9ajkB2A BudmW87x27ebc+1UjzFIkRJZaDdxBHdtywguo5K4Dx8z1L9su93Y7MdYgWFVNziNkBJP 2Jun4bAAz9ESwFZ7DnYiuAAC64oxFcHSPRva0UZPdKMFJg4J6lxjFyEa/m2URElu7kOZ nR6lq2WdZ4SO2LFbm3UF1m0Kewt/aklSXHhktnVfpJ0VBdP9pvZdawBgDS/e+csDpUN0 tNng== X-Gm-Message-State: APjAAAVjFVxIZ7auDF4MPLKP5Ut9oyJ9TroKBqhNk1hLEBJVHrRuWNAl 0VEntTxayEUslupJIGkXlDU= X-Google-Smtp-Source: APXvYqzeZd/pZ43yTx99GwwYFgQ+ou7UuhYXuksIA98japswJFhif//e+t0t5Uj11uv//Zcv5bgqIA== X-Received: by 2002:a17:902:e091:: with SMTP id cb17mr8039710plb.222.1557435682568; Thu, 09 May 2019 14:01:22 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id d15sm10989209pfm.186.2019.05.09.14.01.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 May 2019 14:01:21 -0700 (PDT) From: Florian Fainelli To: linux-arm-kernel@lists.infradead.org Cc: Doug Berger , Florian Fainelli , Linus Walleij , Rob Herring , Mark Rutland , Ray Jui , Scott Branden , bcm-kernel-feedback-list@broadcom.com (maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE...), Eric Anholt , Stefan Wahren , Matheus Castello , =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Lukas Wunner , Nathan Chancellor , Al Cooper , linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM), devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS), linux-rpi-kernel@lists.infradead.org (moderated list:BROADCOM BCM2835 ARM ARCHITECTURE), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/3] pinctrl: bcm: Allow PINCTRL_BCM2835 for ARCH_BRCMSTB Date: Thu, 9 May 2019 13:59:54 -0700 Message-Id: <20190509205955.27842-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190509205955.27842-1-f.fainelli@gmail.com> References: <20190509205955.27842-1-f.fainelli@gmail.com> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org From: Doug Berger ARCH_BRCMSTB needs to use the BCM2835 pin controller for chips like BCM7211 which adopted that pin controller for GPIO. This commit makes the option menu configurable with default enabled for ARCH_BRCMSTB and ARCH_BCM2835. Signed-off-by: Doug Berger Signed-off-by: Florian Fainelli --- drivers/pinctrl/bcm/Kconfig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/bcm/Kconfig b/drivers/pinctrl/bcm/Kconfig index c8575399d6f7..c57f1d9259d8 100644 --- a/drivers/pinctrl/bcm/Kconfig +++ b/drivers/pinctrl/bcm/Kconfig @@ -17,11 +17,15 @@ config PINCTRL_BCM281XX framework. GPIO is provided by a separate GPIO driver. config PINCTRL_BCM2835 - bool + bool "Broadcom BCM2835 GPIO (with PINCONF) driver" + depends on ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST select PINMUX select PINCONF select GENERIC_PINCONF select GPIOLIB_IRQCHIP + default ARCH_BCM2835 || ARCH_BRCMSTB + help + Say Y here to enable the Broadcom BCM2835 GPIO driver. config PINCTRL_IPROC_GPIO bool "Broadcom iProc GPIO (with PINCONF) driver" From patchwork Thu May 9 20:59:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1097684 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="eicyC2LY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 450QkR38KVz9sMM for ; Fri, 10 May 2019 07:01:35 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727047AbfEIVB3 (ORCPT ); Thu, 9 May 2019 17:01:29 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:36087 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725992AbfEIVBZ (ORCPT ); Thu, 9 May 2019 17:01:25 -0400 Received: by mail-pl1-f193.google.com with SMTP id d21so1722589plr.3; Thu, 09 May 2019 14:01:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XIfv0w8R9hbMpIkYecRyvbKImnAIaPLF4+t0eBmtucc=; b=eicyC2LYjnQM70p4GVW8AY2eMq2ucpBRLYd8qbc6RiNh7HpQ+14/Imu7oCe49giLcz OsQs4iFWp1m2yWVTc9GJxU0BX1mZt9QFFP/uKk2rNpjj2WK/PHPgUsz95JyOdh8DkPO9 68TuxjHgop54Tp3vJ3Pr2DD/xvW6b+a5UYYQ9wuznYgD00LtCRJgQ1+c2R1H+4l7hw20 MexlNgZRhdzMQszkqV95NLYZnslJCDDG5TbQ2DvwqWxIZXJjBJEzLC3KsIzDlzE87mI5 gRG+kqvBlZLFW1WcEKgtqB/7HD85ZuUERRV9G5KNHIgQTkzv/3dSnB+oCs5b/H1e3AqV k8Lg== 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=XIfv0w8R9hbMpIkYecRyvbKImnAIaPLF4+t0eBmtucc=; b=lttqEPtNRccugZZEjYg6bztwPZPSPbSRjkT2dWY31MELVT/0aK8ZaQB3wGkEekCo7a pUKKQcdoDAfDceHdqOemE4goXSYCcA/6e9hybrsHQwQp6X5u/jEx/4jLD+P5JgbFxJ1D yoAOuGWVDkXrcZWIM2Y8sjP+hZma5CvbWiNa9R1igrVn1oi6Kif103SW1Q5vAXzh5M3d Ofv2GLhPp4ZS1M4NCSDyMjfHhS8IENIy3tAAIlt5R2X2ddauImo7sL/OYVOo0ex1aiC3 d8xaTeunkOf+bB1/JjFl5K826UNjSX3n72nYR3Xep6Q8u8ZayC7J+phkAbAtKkNvh/e+ 2GIA== X-Gm-Message-State: APjAAAVJO3fMFS93qxE/0VU456dtBD/ZnjkWMO93+G8yne3yf3nLGiin kVDAjasnCicufW2VnDCbkwI= X-Google-Smtp-Source: APXvYqwcw7GiVnjrYj1XiTQi0Bq0hzC69oqOsJ7LlYVQptq7h8VhaR08IPnOqeMHrT9EEpuiPK89Cg== X-Received: by 2002:a17:902:9a83:: with SMTP id w3mr8129940plp.241.1557435684380; Thu, 09 May 2019 14:01:24 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id d15sm10989209pfm.186.2019.05.09.14.01.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 May 2019 14:01:23 -0700 (PDT) From: Florian Fainelli To: linux-arm-kernel@lists.infradead.org Cc: Al Cooper , Florian Fainelli , Linus Walleij , Rob Herring , Mark Rutland , Ray Jui , Scott Branden , bcm-kernel-feedback-list@broadcom.com (maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE...), Eric Anholt , Stefan Wahren , Doug Berger , Matheus Castello , =?utf-8?b?UmFmYcWCIE1pxYJl?= =?utf-8?q?cki?= , Lukas Wunner , Nathan Chancellor , linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM), devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS), linux-rpi-kernel@lists.infradead.org (moderated list:BROADCOM BCM2835 ARM ARCHITECTURE), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 3/3] pinctrl: bcm2835: bcm7211: Add support for 7211 pull-up functionality Date: Thu, 9 May 2019 13:59:55 -0700 Message-Id: <20190509205955.27842-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190509205955.27842-1-f.fainelli@gmail.com> References: <20190509205955.27842-1-f.fainelli@gmail.com> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org From: Al Cooper The 7211 has a new way of selecting the pull-up/pull-down setting for a GPIO pin. The registers used for the bcm2837, GP_PUD and GP_PUDCLKn0, are no longer connected. A new set of registers, GP_GPIO_PUP_PDN_CNTRL_REGx must be used. This commit will add a new compatible string "brcm,bcm7211-gpio" and the kernel driver will use it to select which method is used to select pull-up/pull-down. Signed-off-by: Al Cooper Signed-off-by: Florian Fainelli --- drivers/pinctrl/bcm/pinctrl-bcm2835.c | 85 +++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c index 183d1ffe6a75..35d9f9593000 100644 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c @@ -57,15 +57,26 @@ #define GPAFEN0 0x88 /* Pin Async Falling Edge Detect */ #define GPPUD 0x94 /* Pin Pull-up/down Enable */ #define GPPUDCLK0 0x98 /* Pin Pull-up/down Enable Clock */ +#define GP_GPIO_PUP_PDN_CNTRL_REG0 0xe4 /* 7211 Pin Pull-up/down select */ #define FSEL_REG(p) (GPFSEL0 + (((p) / 10) * 4)) #define FSEL_SHIFT(p) (((p) % 10) * 3) #define GPIO_REG_OFFSET(p) ((p) / 32) #define GPIO_REG_SHIFT(p) ((p) % 32) +#define PUD_7211_MASK 0x3 +#define PUD_7211_REG_OFFSET(p) ((p) / 16) +#define PUD_7211_REG_SHIFT(p) (((p) % 16) * 2) + /* argument: bcm2835_pinconf_pull */ #define BCM2835_PINCONF_PARAM_PULL (PIN_CONFIG_END + 1) +enum bcm7211_pinconf_pull { + BCM7211_PINCONFIG_PULL_NONE, + BCM7211_PINCONFIG_PULL_UP, + BCM7211_PINCONFIG_PULL_DOWN, +}; + struct bcm2835_pinctrl { struct device *dev; void __iomem *base; @@ -975,6 +986,55 @@ static const struct pinconf_ops bcm2835_pinconf_ops = { .pin_config_set = bcm2835_pinconf_set, }; +static int bcm7211_pinconf_set(struct pinctrl_dev *pctldev, + unsigned int pin, unsigned long *configs, + unsigned int num_configs) +{ + struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); + u32 param, arg; + u32 shifter; + u32 value; + u32 off; + int i; + + for (i = 0; i < num_configs; i++) { + param = pinconf_to_config_param(configs[i]); + if (param != BCM2835_PINCONF_PARAM_PULL) + return -EINVAL; + arg = pinconf_to_config_argument(configs[i]); + + /* convert to 7211 value */ + switch (arg) { + case PIN_CONFIG_BIAS_DISABLE: + arg = BCM7211_PINCONFIG_PULL_NONE; + break; + case PIN_CONFIG_BIAS_PULL_DOWN: + arg = BCM7211_PINCONFIG_PULL_DOWN; + break; + case PIN_CONFIG_BIAS_PULL_UP: + arg = BCM7211_PINCONFIG_PULL_UP; + break; + } + + off = PUD_7211_REG_OFFSET(pin); + shifter = PUD_7211_REG_SHIFT(pin); + + value = bcm2835_gpio_rd(pc, GP_GPIO_PUP_PDN_CNTRL_REG0 + + (off * 4)); + value &= ~(PUD_7211_MASK << shifter); + value |= (arg << shifter); + bcm2835_gpio_wr(pc, GP_GPIO_PUP_PDN_CNTRL_REG0 + (off * 4), + value); + } /* for each config */ + + return 0; +} + +static const struct pinconf_ops bcm7211_pinconf_ops = { + .pin_config_get = bcm2835_pinconf_get, + .pin_config_set = bcm7211_pinconf_set, +}; + static struct pinctrl_desc bcm2835_pinctrl_desc = { .name = MODULE_NAME, .pins = bcm2835_gpio_pins, @@ -990,6 +1050,18 @@ static struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = { .npins = BCM2835_NUM_GPIOS, }; +static const struct of_device_id bcm2835_pinctrl_match[] = { + { + .compatible = "brcm,bcm2835-gpio", + .data = &bcm2835_pinconf_ops, + }, + { + .compatible = "brcm,bcm7211-gpio", + .data = &bcm7211_pinconf_ops, + }, + {} +}; + static int bcm2835_pinctrl_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -997,6 +1069,8 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) struct bcm2835_pinctrl *pc; struct resource iomem; int err, i; + const struct of_device_id *match; + BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_pins) != BCM2835_NUM_GPIOS); BUILD_BUG_ON(ARRAY_SIZE(bcm2835_gpio_groups) != BCM2835_NUM_GPIOS); @@ -1073,6 +1147,12 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) bcm2835_gpio_irq_handler); } + match = of_match_node(bcm2835_pinctrl_match, pdev->dev.of_node); + if (match) { + bcm2835_pinctrl_desc.confops = + (const struct pinconf_ops *)match->data; + } + pc->pctl_dev = devm_pinctrl_register(dev, &bcm2835_pinctrl_desc, pc); if (IS_ERR(pc->pctl_dev)) { gpiochip_remove(&pc->gpio_chip); @@ -1087,11 +1167,6 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) return 0; } -static const struct of_device_id bcm2835_pinctrl_match[] = { - { .compatible = "brcm,bcm2835-gpio" }, - {} -}; - static struct platform_driver bcm2835_pinctrl_driver = { .probe = bcm2835_pinctrl_probe, .driver = {