devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH v3 0/3] Add DA9062 GPIO support
@ 2019-12-12 16:04 Marco Felsch
  2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Marco Felsch @ 2019-12-12 16:04 UTC (permalink / raw)
  To: support.opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

Hi,

this update address all comments made on [1], for further details see
the patch based changelog.

I resend this v3 since I forgot to add the MFD maintainers on the To:.
Please can you review the MFD part?

Regards,
  Marco

[1] https://patchwork.ozlabs.org/cover/1201549/

Marco Felsch (3):
  dt-bindings: mfd: da9062: add gpio bindings
  mfd: da9062: add support for the DA9062 GPIOs in the core
  pinctrl: da9062: add driver support

 .../devicetree/bindings/mfd/da9062.txt        |  10 +
 MAINTAINERS                                   |   1 +
 drivers/mfd/da9062-core.c                     |  16 +-
 drivers/pinctrl/Kconfig                       |  12 +
 drivers/pinctrl/Makefile                      |   1 +
 drivers/pinctrl/pinctrl-da9062.c              | 297 ++++++++++++++++++
 6 files changed, 336 insertions(+), 1 deletion(-)
 create mode 100644 drivers/pinctrl/pinctrl-da9062.c

-- 
2.20.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings
  2019-12-12 16:04 [RESEND PATCH v3 0/3] Add DA9062 GPIO support Marco Felsch
@ 2019-12-12 16:04 ` Marco Felsch
  2019-12-12 16:45   ` Adam Thomson
                     ` (2 more replies)
  2019-12-12 16:04 ` [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core Marco Felsch
  2019-12-12 16:04 ` [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support Marco Felsch
  2 siblings, 3 replies; 14+ messages in thread
From: Marco Felsch @ 2019-12-12 16:04 UTC (permalink / raw)
  To: support.opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

Add gpio device documentation to make the da9062 gpios available for
users.

Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
Changelog:

v2:
- remove sub-node documentation
- squash gpio properties into mfd documentation
---
 Documentation/devicetree/bindings/mfd/da9062.txt | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/da9062.txt b/Documentation/devicetree/bindings/mfd/da9062.txt
index edca653a5777..089a28bc77a4 100644
--- a/Documentation/devicetree/bindings/mfd/da9062.txt
+++ b/Documentation/devicetree/bindings/mfd/da9062.txt
@@ -13,6 +13,7 @@ da9062-rtc              :               : Real-Time Clock
 da9062-onkey            :               : On Key
 da9062-watchdog         :               : Watchdog Timer
 da9062-thermal          :               : Thermal
+da9062-gpio             :               : GPIOs
 
 The DA9061 PMIC consists of:
 
@@ -38,6 +39,15 @@ Required properties:
 See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
 further information on IRQ bindings.
 
+Optional properties:
+
+- gpio-controller : Marks the device as a gpio controller.
+- #gpio-cells     : Should be two. The first cell is the pin number and the
+                    second cell is used to specify the gpio polarity.
+
+See Documentation/devicetree/bindings/gpio/gpio.txt for further information on
+GPIO bindings.
+
 Sub-nodes:
 
 - regulators : This node defines the settings for the LDOs and BUCKs.
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core
  2019-12-12 16:04 [RESEND PATCH v3 0/3] Add DA9062 GPIO support Marco Felsch
  2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
@ 2019-12-12 16:04 ` Marco Felsch
  2019-12-12 16:45   ` Adam Thomson
  2019-12-13 10:37   ` Lee Jones
  2019-12-12 16:04 ` [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support Marco Felsch
  2 siblings, 2 replies; 14+ messages in thread
From: Marco Felsch @ 2019-12-12 16:04 UTC (permalink / raw)
  To: support.opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

Currently the da9062 GPIO's aren't available. The patch adds the support
to make these available by adding a gpio device with the corresponding
irq resources. Furthermore the patch fixes a minor style issue for the
onkey device.

Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/mfd/da9062-core.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
index e69626867c26..5290bdc0ddcd 100644
--- a/drivers/mfd/da9062-core.c
+++ b/drivers/mfd/da9062-core.c
@@ -233,6 +233,14 @@ static struct resource da9062_onkey_resources[] = {
 	DEFINE_RES_NAMED(DA9062_IRQ_ONKEY, 1, "ONKEY", IORESOURCE_IRQ),
 };
 
+static struct resource da9062_gpio_resources[] = {
+	DEFINE_RES_NAMED(DA9062_IRQ_GPI0, 1, "GPI0", IORESOURCE_IRQ),
+	DEFINE_RES_NAMED(DA9062_IRQ_GPI1, 1, "GPI1", IORESOURCE_IRQ),
+	DEFINE_RES_NAMED(DA9062_IRQ_GPI2, 1, "GPI2", IORESOURCE_IRQ),
+	DEFINE_RES_NAMED(DA9062_IRQ_GPI3, 1, "GPI3", IORESOURCE_IRQ),
+	DEFINE_RES_NAMED(DA9062_IRQ_GPI4, 1, "GPI4", IORESOURCE_IRQ),
+};
+
 static const struct mfd_cell da9062_devs[] = {
 	{
 		.name		= "da9062-core",
@@ -266,7 +274,13 @@ static const struct mfd_cell da9062_devs[] = {
 		.name		= "da9062-onkey",
 		.num_resources	= ARRAY_SIZE(da9062_onkey_resources),
 		.resources	= da9062_onkey_resources,
-		.of_compatible = "dlg,da9062-onkey",
+		.of_compatible	= "dlg,da9062-onkey",
+	},
+	{
+		.name		= "da9062-gpio",
+		.num_resources	= ARRAY_SIZE(da9062_gpio_resources),
+		.resources	= da9062_gpio_resources,
+		.of_compatible	= "dlg,da9062-gpio",
 	},
 };
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support
  2019-12-12 16:04 [RESEND PATCH v3 0/3] Add DA9062 GPIO support Marco Felsch
  2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
  2019-12-12 16:04 ` [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core Marco Felsch
@ 2019-12-12 16:04 ` Marco Felsch
  2019-12-12 16:48   ` Adam Thomson
  2 siblings, 1 reply; 14+ messages in thread
From: Marco Felsch @ 2019-12-12 16:04 UTC (permalink / raw)
  To: support.opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

The DA9062 is a mfd pmic device which supports 5 GPIOs. The GPIOs can
be used as input, output or have a special use-case.

The patch adds the support for the normal input/output use-case.

Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
Changelog:

v3:
- add comment for gpio private include
- add missing bits.h include
- add pin_config state container and set initial pin state to push-pull
- make use of GPIO_LINE_DIRECTION_{IN,OUT}
- update MAINTAINERS entry -> gpio-da90??.c already covered but not
  pinctrl-da90??.c

v2:
- fix minor style issue
- move from drivers/gpio to drivers/pinctrl
- Fix spelling issue
- rename local gpio_dir to gpio_mode
- Add datasheet reference and TODO notes
- move gpio to mfd-root node to avoid hierarchical interrupt chips
- Add gpio-controller property check
- remove of_device_id since we drop the gpio of-subnode
- Drop da9062_gpio_get_hwgpio

 MAINTAINERS                      |   1 +
 drivers/pinctrl/Kconfig          |  12 ++
 drivers/pinctrl/Makefile         |   1 +
 drivers/pinctrl/pinctrl-da9062.c | 297 +++++++++++++++++++++++++++++++
 4 files changed, 311 insertions(+)
 create mode 100644 drivers/pinctrl/pinctrl-da9062.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 296de2b51c83..2b680790fdf8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4837,6 +4837,7 @@ F:	drivers/leds/leds-da90??.c
 F:	drivers/mfd/da903x.c
 F:	drivers/mfd/da90??-*.c
 F:	drivers/mfd/da91??-*.c
+F:	drivers/pinctrl/pinctrl-da90??.c
 F:	drivers/power/supply/da9052-battery.c
 F:	drivers/power/supply/da91??-*.c
 F:	drivers/regulator/da903x.c
diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig
index b372419d61f2..977787c158cc 100644
--- a/drivers/pinctrl/Kconfig
+++ b/drivers/pinctrl/Kconfig
@@ -126,6 +126,18 @@ config PINCTRL_DA850_PUPD
 	  Driver for TI DA850/OMAP-L138/AM18XX pinconf. Used to control
 	  pullup/pulldown pin groups.
 
+config PINCTRL_DA9062
+	tristate "Dialog Semiconductor DA9062 PMIC pinctrl and GPIO Support"
+	depends on MFD_DA9062
+	select GPIOLIB
+	help
+	  The Dialog DA9062 PMIC provides multiple GPIOs that can be muxed for
+	  different functions. This driver bundles a pinctrl driver to select the
+	  function muxing and a GPIO driver to handle the GPIO when the GPIO
+	  function is selected.
+
+	  Say yes to enable pinctrl and GPIO support for the DA9062 PMIC.
+
 config PINCTRL_DIGICOLOR
 	bool
 	depends on OF && (ARCH_DIGICOLOR || COMPILE_TEST)
diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile
index ac537fdbc998..2397684cbe11 100644
--- a/drivers/pinctrl/Makefile
+++ b/drivers/pinctrl/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_PINCTRL_AT91PIO4)	+= pinctrl-at91-pio4.o
 obj-$(CONFIG_PINCTRL_AMD)	+= pinctrl-amd.o
 obj-$(CONFIG_PINCTRL_BM1880)	+= pinctrl-bm1880.o
 obj-$(CONFIG_PINCTRL_DA850_PUPD) += pinctrl-da850-pupd.o
+obj-$(CONFIG_PINCTRL_DA9062)	+= pinctrl-da9062.o
 obj-$(CONFIG_PINCTRL_DIGICOLOR)	+= pinctrl-digicolor.o
 obj-$(CONFIG_PINCTRL_FALCON)	+= pinctrl-falcon.o
 obj-$(CONFIG_PINCTRL_GEMINI)	+= pinctrl-gemini.o
diff --git a/drivers/pinctrl/pinctrl-da9062.c b/drivers/pinctrl/pinctrl-da9062.c
new file mode 100644
index 000000000000..39f13fcbd3a8
--- /dev/null
+++ b/drivers/pinctrl/pinctrl-da9062.c
@@ -0,0 +1,297 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Dialog DA9062 pinctrl and GPIO driver.
+ * Based on DA9055 GPIO driver.
+ *
+ * TODO:
+ *   - add pinmux and pinctrl support (gpio alternate mode)
+ *
+ * Documents:
+ * [1] https://www.dialog-semiconductor.com/sites/default/files/da9062_datasheet_3v6.pdf
+ *
+ * Copyright (C) 2019 Pengutronix, Marco Felsch <kernel@pengutronix.de>
+ */
+#include <linux/bits.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+#include <linux/gpio/driver.h>
+
+#include <linux/mfd/da9062/core.h>
+#include <linux/mfd/da9062/registers.h>
+
+/*
+ * We need this get the gpio_desc from a <gpio_chip,offset> tuple to decide if
+ * the gpio is active low without a vendor specific dt-binding.
+ */
+#include <../gpio/gpiolib.h>
+
+#define DA9062_TYPE(offset)		(4 * (offset % 2))
+#define DA9062_PIN_SHIFT(offset)	(4 * (offset % 2))
+#define DA9062_PIN_ALTERNATE		0x00 /* gpio alternate mode */
+#define DA9062_PIN_GPI			0x01 /* gpio in */
+#define DA9062_PIN_GPO_OD		0x02 /* gpio out open-drain */
+#define DA9062_PIN_GPO_PP		0x03 /* gpio out push-pull */
+#define DA9062_GPIO_NUM			5
+
+struct da9062_pctl {
+	struct da9062 *da9062;
+	struct gpio_chip gc;
+	unsigned int pin_config[DA9062_GPIO_NUM];
+};
+
+static int da9062_pctl_get_pin_mode(struct da9062_pctl *pctl,
+				    unsigned int offset)
+{
+	struct regmap *regmap = pctl->da9062->regmap;
+	int ret, val;
+
+	ret = regmap_read(regmap, DA9062AA_GPIO_0_1 + (offset >> 1), &val);
+	if (ret < 0)
+		return ret;
+
+	val >>= DA9062_PIN_SHIFT(offset);
+	val &= DA9062AA_GPIO0_PIN_MASK;
+
+	return val;
+}
+
+static int da9062_pctl_set_pin_mode(struct da9062_pctl *pctl,
+				    unsigned int offset, unsigned int mode_req)
+{
+	struct regmap *regmap = pctl->da9062->regmap;
+	unsigned int mode = mode_req;
+	unsigned int mask;
+	int ret;
+
+	mode &= DA9062AA_GPIO0_PIN_MASK;
+	mode <<= DA9062_PIN_SHIFT(offset);
+	mask = DA9062AA_GPIO0_PIN_MASK << DA9062_PIN_SHIFT(offset);
+
+	ret = regmap_update_bits(regmap, DA9062AA_GPIO_0_1 + (offset >> 1),
+				 mask, mode);
+	if (!ret)
+		pctl->pin_config[offset] = mode_req;
+
+	return ret;
+}
+
+static int da9062_gpio_get(struct gpio_chip *gc, unsigned int offset)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	struct regmap *regmap = pctl->da9062->regmap;
+	int gpio_mode, val;
+	int ret;
+
+	gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
+	if (gpio_mode < 0)
+		return gpio_mode;
+
+	switch (gpio_mode) {
+	case DA9062_PIN_ALTERNATE:
+		return -ENOTSUPP;
+	case DA9062_PIN_GPI:
+		ret = regmap_read(regmap, DA9062AA_STATUS_B, &val);
+		if (ret < 0)
+			return ret;
+		break;
+	case DA9062_PIN_GPO_OD:
+	case DA9062_PIN_GPO_PP:
+		ret = regmap_read(regmap, DA9062AA_GPIO_MODE0_4, &val);
+		if (ret < 0)
+			return ret;
+	}
+
+	return !!(val & BIT(offset));
+}
+
+static void da9062_gpio_set(struct gpio_chip *gc, unsigned int offset,
+			    int value)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	struct regmap *regmap = pctl->da9062->regmap;
+
+	regmap_update_bits(regmap, DA9062AA_GPIO_MODE0_4, BIT(offset),
+			   value << offset);
+}
+
+static int da9062_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	int gpio_mode;
+
+	gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
+	if (gpio_mode < 0)
+		return gpio_mode;
+
+	switch (gpio_mode) {
+	case DA9062_PIN_ALTERNATE:
+		return -ENOTSUPP;
+	case DA9062_PIN_GPI:
+		return GPIO_LINE_DIRECTION_IN;
+	case DA9062_PIN_GPO_OD:
+	case DA9062_PIN_GPO_PP:
+		return GPIO_LINE_DIRECTION_OUT;
+	}
+
+	return -EINVAL;
+}
+
+static int da9062_gpio_direction_input(struct gpio_chip *gc,
+				       unsigned int offset)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	struct regmap *regmap = pctl->da9062->regmap;
+	struct gpio_desc *desc = gpiochip_get_desc(gc, offset);
+	unsigned int gpi_type;
+	int ret;
+
+	ret = da9062_pctl_set_pin_mode(pctl, offset, DA9062_PIN_GPI);
+	if (ret)
+		return ret;
+
+	/*
+	 * If the gpio is active low we should set it in hw too. No worries
+	 * about gpio_get() because we read and return the gpio-level. So the
+	 * gpiolib active_low handling is still correct.
+	 *
+	 * 0 - active low, 1 - active high
+	 */
+	gpi_type = !gpiod_is_active_low(desc);
+
+	return regmap_update_bits(regmap, DA9062AA_GPIO_0_1 + (offset >> 1),
+				DA9062AA_GPIO0_TYPE_MASK << DA9062_TYPE(offset),
+				gpi_type << DA9062_TYPE(offset));
+}
+
+static int da9062_gpio_direction_output(struct gpio_chip *gc,
+					unsigned int offset, int value)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	unsigned int pin_config = pctl->pin_config[offset];
+	int ret;
+
+	ret = da9062_pctl_set_pin_mode(pctl, offset, pin_config);
+	if (ret)
+		return ret;
+
+	da9062_gpio_set(gc, offset, value);
+
+	return 0;
+}
+
+static int da9062_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
+				  unsigned long config)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	struct regmap *regmap = pctl->da9062->regmap;
+	int gpio_mode;
+
+	/*
+	 * We need to meet the following restrictions [1, Figure 18]:
+	 * - PIN_CONFIG_BIAS_PULL_DOWN -> only allowed if the pin is used as
+	 *				  gpio input
+	 * - PIN_CONFIG_BIAS_PULL_UP   -> only allowed if the pin is used as
+	 *				  gpio output open-drain.
+	 */
+
+	switch (pinconf_to_config_param(config)) {
+	case PIN_CONFIG_BIAS_PULL_DOWN:
+		gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
+		if (gpio_mode < 0)
+			return -EINVAL;
+		else if (gpio_mode != DA9062_PIN_GPI)
+			return -ENOTSUPP;
+		return regmap_update_bits(regmap, DA9062AA_CONFIG_K,
+					  BIT(offset), BIT(offset));
+	case PIN_CONFIG_BIAS_PULL_UP:
+		gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
+		if (gpio_mode < 0)
+			return -EINVAL;
+		else if (gpio_mode != DA9062_PIN_GPO_OD)
+			return -ENOTSUPP;
+		return regmap_update_bits(regmap, DA9062AA_CONFIG_K,
+					  BIT(offset), BIT(offset));
+	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
+		return da9062_pctl_set_pin_mode(pctl, offset,
+						DA9062_PIN_GPO_OD);
+	case PIN_CONFIG_DRIVE_PUSH_PULL:
+		return da9062_pctl_set_pin_mode(pctl, offset,
+						DA9062_PIN_GPO_PP);
+	default:
+		return -ENOTSUPP;
+	}
+}
+
+static int da9062_gpio_to_irq(struct gpio_chip *gc, unsigned int offset)
+{
+	struct da9062_pctl *pctl = gpiochip_get_data(gc);
+	struct da9062 *da9062 = pctl->da9062;
+
+	return regmap_irq_get_virq(da9062->regmap_irq,
+				   DA9062_IRQ_GPI0 + offset);
+}
+
+static const struct gpio_chip reference_gc = {
+	.owner = THIS_MODULE,
+	.get = da9062_gpio_get,
+	.set = da9062_gpio_set,
+	.get_direction = da9062_gpio_get_direction,
+	.direction_input = da9062_gpio_direction_input,
+	.direction_output = da9062_gpio_direction_output,
+	.set_config = da9062_gpio_set_config,
+	.to_irq = da9062_gpio_to_irq,
+	.can_sleep = true,
+	.ngpio = DA9062_GPIO_NUM,
+	.base = -1,
+};
+
+static int da9062_pctl_probe(struct platform_device *pdev)
+{
+	struct device *parent = pdev->dev.parent;
+	struct da9062_pctl *pctl;
+	int i;
+
+	pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
+	if (!pctl)
+		return -ENOMEM;
+
+	pctl->da9062 = dev_get_drvdata(parent);
+	if (!pctl->da9062)
+		return -EINVAL;
+
+	if (!device_property_present(parent, "gpio-controller"))
+		return 0;
+
+	for (i = 0; i < ARRAY_SIZE(pctl->pin_config); i++)
+		pctl->pin_config[i] = DA9062_PIN_GPO_PP;
+
+	/*
+	 * Currently the driver handles only the GPIO support. The
+	 * pinctrl/pinmux support can be added later if needed.
+	 */
+	pctl->gc = reference_gc;
+	pctl->gc.label = dev_name(&pdev->dev);
+	pctl->gc.parent = &pdev->dev;
+#ifdef CONFIG_OF_GPIO
+	pctl->gc.of_node = parent->of_node;
+#endif
+
+	platform_set_drvdata(pdev, pctl);
+
+	return devm_gpiochip_add_data(&pdev->dev, &pctl->gc, pctl);
+}
+
+static struct platform_driver da9062_pctl_driver = {
+	.probe = da9062_pctl_probe,
+	.driver = {
+		.name	= "da9062-gpio",
+	},
+};
+module_platform_driver(da9062_pctl_driver);
+
+MODULE_AUTHOR("Marco Felsch <kernel@pengutronix.de>");
+MODULE_DESCRIPTION("DA9062 PMIC pinctrl and GPIO Driver");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:da9062-gpio");
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* RE: [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings
  2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
@ 2019-12-12 16:45   ` Adam Thomson
  2019-12-13 10:38   ` Lee Jones
  2019-12-18 21:54   ` Rob Herring
  2 siblings, 0 replies; 14+ messages in thread
From: Adam Thomson @ 2019-12-12 16:45 UTC (permalink / raw)
  To: Marco Felsch, Support Opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

On 12 December 2019 16:04, Marco Felsch wrote:

> Add gpio device documentation to make the da9062 gpios available for
> users.
> 
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>

Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>

> ---
> Changelog:
> 
> v2:
> - remove sub-node documentation
> - squash gpio properties into mfd documentation
> ---
>  Documentation/devicetree/bindings/mfd/da9062.txt | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/mfd/da9062.txt
> b/Documentation/devicetree/bindings/mfd/da9062.txt
> index edca653a5777..089a28bc77a4 100644
> --- a/Documentation/devicetree/bindings/mfd/da9062.txt
> +++ b/Documentation/devicetree/bindings/mfd/da9062.txt
> @@ -13,6 +13,7 @@ da9062-rtc              :               : Real-Time Clock
>  da9062-onkey            :               : On Key
>  da9062-watchdog         :               : Watchdog Timer
>  da9062-thermal          :               : Thermal
> +da9062-gpio             :               : GPIOs
> 
>  The DA9061 PMIC consists of:
> 
> @@ -38,6 +39,15 @@ Required properties:
>  See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
>  further information on IRQ bindings.
> 
> +Optional properties:
> +
> +- gpio-controller : Marks the device as a gpio controller.
> +- #gpio-cells     : Should be two. The first cell is the pin number and the
> +                    second cell is used to specify the gpio polarity.
> +
> +See Documentation/devicetree/bindings/gpio/gpio.txt for further information
> on
> +GPIO bindings.
> +
>  Sub-nodes:
> 
>  - regulators : This node defines the settings for the LDOs and BUCKs.
> --
> 2.20.1

^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core
  2019-12-12 16:04 ` [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core Marco Felsch
@ 2019-12-12 16:45   ` Adam Thomson
  2019-12-13 10:37   ` Lee Jones
  1 sibling, 0 replies; 14+ messages in thread
From: Adam Thomson @ 2019-12-12 16:45 UTC (permalink / raw)
  To: Marco Felsch, Support Opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

On 12 December 2019 16:04, Marco Felsch wrote:

> Currently the da9062 GPIO's aren't available. The patch adds the support
> to make these available by adding a gpio device with the corresponding
> irq resources. Furthermore the patch fixes a minor style issue for the
> onkey device.
> 
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> Acked-by: Linus Walleij <linus.walleij@linaro.org>

Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>

> ---
>  drivers/mfd/da9062-core.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
> index e69626867c26..5290bdc0ddcd 100644
> --- a/drivers/mfd/da9062-core.c
> +++ b/drivers/mfd/da9062-core.c
> @@ -233,6 +233,14 @@ static struct resource da9062_onkey_resources[] = {
>  	DEFINE_RES_NAMED(DA9062_IRQ_ONKEY, 1, "ONKEY",
> IORESOURCE_IRQ),
>  };
> 
> +static struct resource da9062_gpio_resources[] = {
> +	DEFINE_RES_NAMED(DA9062_IRQ_GPI0, 1, "GPI0", IORESOURCE_IRQ),
> +	DEFINE_RES_NAMED(DA9062_IRQ_GPI1, 1, "GPI1", IORESOURCE_IRQ),
> +	DEFINE_RES_NAMED(DA9062_IRQ_GPI2, 1, "GPI2", IORESOURCE_IRQ),
> +	DEFINE_RES_NAMED(DA9062_IRQ_GPI3, 1, "GPI3", IORESOURCE_IRQ),
> +	DEFINE_RES_NAMED(DA9062_IRQ_GPI4, 1, "GPI4", IORESOURCE_IRQ),
> +};
> +
>  static const struct mfd_cell da9062_devs[] = {
>  	{
>  		.name		= "da9062-core",
> @@ -266,7 +274,13 @@ static const struct mfd_cell da9062_devs[] = {
>  		.name		= "da9062-onkey",
>  		.num_resources	= ARRAY_SIZE(da9062_onkey_resources),
>  		.resources	= da9062_onkey_resources,
> -		.of_compatible = "dlg,da9062-onkey",
> +		.of_compatible	= "dlg,da9062-onkey",
> +	},
> +	{
> +		.name		= "da9062-gpio",
> +		.num_resources	= ARRAY_SIZE(da9062_gpio_resources),
> +		.resources	= da9062_gpio_resources,
> +		.of_compatible	= "dlg,da9062-gpio",
>  	},
>  };
> 
> --
> 2.20.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support
  2019-12-12 16:04 ` [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support Marco Felsch
@ 2019-12-12 16:48   ` Adam Thomson
  2019-12-16  7:47     ` Marco Felsch
  0 siblings, 1 reply; 14+ messages in thread
From: Adam Thomson @ 2019-12-12 16:48 UTC (permalink / raw)
  To: Marco Felsch, Support Opensource, lee.jones, robh+dt, linus.walleij
  Cc: devicetree, linux-kernel, linux-gpio, kernel

On 12 December 2019 16:04, Marco Felsch wrote:

> +static int da9062_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
> +				  unsigned long config)
> +{
> +	struct da9062_pctl *pctl = gpiochip_get_data(gc);
> +	struct regmap *regmap = pctl->da9062->regmap;
> +	int gpio_mode;
> +
> +	/*
> +	 * We need to meet the following restrictions [1, Figure 18]:
> +	 * - PIN_CONFIG_BIAS_PULL_DOWN -> only allowed if the pin is used as
> +	 *				  gpio input
> +	 * - PIN_CONFIG_BIAS_PULL_UP   -> only allowed if the pin is used as
> +	 *				  gpio output open-drain.
> +	 */
> +
> +	switch (pinconf_to_config_param(config)) {
> +	case PIN_CONFIG_BIAS_PULL_DOWN:
> +		gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
> +		if (gpio_mode < 0)
> +			return -EINVAL;
> +		else if (gpio_mode != DA9062_PIN_GPI)
> +			return -ENOTSUPP;
> +		return regmap_update_bits(regmap, DA9062AA_CONFIG_K,
> +					  BIT(offset), BIT(offset));
> +	case PIN_CONFIG_BIAS_PULL_UP:
> +		gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
> +		if (gpio_mode < 0)
> +			return -EINVAL;
> +		else if (gpio_mode != DA9062_PIN_GPO_OD)
> +			return -ENOTSUPP;
> +		return regmap_update_bits(regmap, DA9062AA_CONFIG_K,
> +					  BIT(offset), BIT(offset));

Apologies for the delay on reviewing. Just looking at the datasheet, how do we
disable PULL_DOWN (for input) and PULL_UP (for output)? Should we not have a
'PIN_CONFIG_BIAS_DISABLE' case here to handle this?

> +	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
> +		return da9062_pctl_set_pin_mode(pctl, offset,
> +						DA9062_PIN_GPO_OD);
> +	case PIN_CONFIG_DRIVE_PUSH_PULL:
> +		return da9062_pctl_set_pin_mode(pctl, offset,
> +						DA9062_PIN_GPO_PP);
> +	default:
> +		return -ENOTSUPP;
> +	}
> +}

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core
  2019-12-12 16:04 ` [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core Marco Felsch
  2019-12-12 16:45   ` Adam Thomson
@ 2019-12-13 10:37   ` Lee Jones
  1 sibling, 0 replies; 14+ messages in thread
From: Lee Jones @ 2019-12-13 10:37 UTC (permalink / raw)
  To: Marco Felsch
  Cc: support.opensource, robh+dt, linus.walleij, devicetree,
	linux-kernel, linux-gpio, kernel

On Thu, 12 Dec 2019, Marco Felsch wrote:

> Currently the da9062 GPIO's aren't available. The patch adds the support
> to make these available by adding a gpio device with the corresponding
> irq resources. Furthermore the patch fixes a minor style issue for the
> onkey device.
> 
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> Acked-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/mfd/da9062-core.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)

For my own reference:
  Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>

-- 
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings
  2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
  2019-12-12 16:45   ` Adam Thomson
@ 2019-12-13 10:38   ` Lee Jones
  2019-12-18 21:54   ` Rob Herring
  2 siblings, 0 replies; 14+ messages in thread
From: Lee Jones @ 2019-12-13 10:38 UTC (permalink / raw)
  To: Marco Felsch
  Cc: support.opensource, robh+dt, linus.walleij, devicetree,
	linux-kernel, linux-gpio, kernel

On Thu, 12 Dec 2019, Marco Felsch wrote:

> Add gpio device documentation to make the da9062 gpios available for
> users.
> 
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> ---
> Changelog:
> 
> v2:
> - remove sub-node documentation
> - squash gpio properties into mfd documentation
> ---
>  Documentation/devicetree/bindings/mfd/da9062.txt | 10 ++++++++++
>  1 file changed, 10 insertions(+)

For my own reference:
  Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>

-- 
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support
  2019-12-12 16:48   ` Adam Thomson
@ 2019-12-16  7:47     ` Marco Felsch
  2019-12-16 10:33       ` Linus Walleij
  0 siblings, 1 reply; 14+ messages in thread
From: Marco Felsch @ 2019-12-16  7:47 UTC (permalink / raw)
  To: Adam Thomson
  Cc: Support Opensource, lee.jones, robh+dt, linus.walleij,
	devicetree, linux-kernel, linux-gpio, kernel

Hi Adam,

On 19-12-12 16:48, Adam Thomson wrote:
> On 12 December 2019 16:04, Marco Felsch wrote:
> 
> > +static int da9062_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
> > +				  unsigned long config)
> > +{
> > +	struct da9062_pctl *pctl = gpiochip_get_data(gc);
> > +	struct regmap *regmap = pctl->da9062->regmap;
> > +	int gpio_mode;
> > +
> > +	/*
> > +	 * We need to meet the following restrictions [1, Figure 18]:
> > +	 * - PIN_CONFIG_BIAS_PULL_DOWN -> only allowed if the pin is used as
> > +	 *				  gpio input
> > +	 * - PIN_CONFIG_BIAS_PULL_UP   -> only allowed if the pin is used as
> > +	 *				  gpio output open-drain.
> > +	 */
> > +
> > +	switch (pinconf_to_config_param(config)) {
> > +	case PIN_CONFIG_BIAS_PULL_DOWN:
> > +		gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
> > +		if (gpio_mode < 0)
> > +			return -EINVAL;
> > +		else if (gpio_mode != DA9062_PIN_GPI)
> > +			return -ENOTSUPP;
> > +		return regmap_update_bits(regmap, DA9062AA_CONFIG_K,
> > +					  BIT(offset), BIT(offset));
> > +	case PIN_CONFIG_BIAS_PULL_UP:
> > +		gpio_mode = da9062_pctl_get_pin_mode(pctl, offset);
> > +		if (gpio_mode < 0)
> > +			return -EINVAL;
> > +		else if (gpio_mode != DA9062_PIN_GPO_OD)
> > +			return -ENOTSUPP;
> > +		return regmap_update_bits(regmap, DA9062AA_CONFIG_K,
> > +					  BIT(offset), BIT(offset));
> 
> Apologies for the delay on reviewing. Just looking at the datasheet, how do we
> disable PULL_DOWN (for input) and PULL_UP (for output)? Should we not have a
> 'PIN_CONFIG_BIAS_DISABLE' case here to handle this?

No worries, thanks for the review :)
Nice catch, Linus is it okay to add this as follow up patch? The current
patch isn't wrong without the 'PIN_CONFIG_BIAS_DISABLE' case.

Regards,
  Marco

> > +	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
> > +		return da9062_pctl_set_pin_mode(pctl, offset,
> > +						DA9062_PIN_GPO_OD);
> > +	case PIN_CONFIG_DRIVE_PUSH_PULL:
> > +		return da9062_pctl_set_pin_mode(pctl, offset,
> > +						DA9062_PIN_GPO_PP);
> > +	default:
> > +		return -ENOTSUPP;
> > +	}
> > +}
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support
  2019-12-16  7:47     ` Marco Felsch
@ 2019-12-16 10:33       ` Linus Walleij
  2019-12-17  6:40         ` Marco Felsch
  0 siblings, 1 reply; 14+ messages in thread
From: Linus Walleij @ 2019-12-16 10:33 UTC (permalink / raw)
  To: Marco Felsch
  Cc: Adam Thomson, Support Opensource, lee.jones, robh+dt, devicetree,
	linux-kernel, linux-gpio, kernel

On Mon, Dec 16, 2019 at 8:47 AM Marco Felsch <m.felsch@pengutronix.de> wrote:

> Nice catch, Linus is it okay to add this as follow up patch? The current
> patch isn't wrong without the 'PIN_CONFIG_BIAS_DISABLE' case.

No strong opinion on that as long as the result is running code.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support
  2019-12-16 10:33       ` Linus Walleij
@ 2019-12-17  6:40         ` Marco Felsch
  2019-12-17  9:55           ` Adam Thomson
  0 siblings, 1 reply; 14+ messages in thread
From: Marco Felsch @ 2019-12-17  6:40 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Adam Thomson, Support Opensource, lee.jones, robh+dt, devicetree,
	linux-kernel, linux-gpio, kernel

On 19-12-16 11:33, Linus Walleij wrote:
> On Mon, Dec 16, 2019 at 8:47 AM Marco Felsch <m.felsch@pengutronix.de> wrote:
> 
> > Nice catch, Linus is it okay to add this as follow up patch? The current
> > patch isn't wrong without the 'PIN_CONFIG_BIAS_DISABLE' case.
> 
> No strong opinion on that as long as the result is running code.

Of course the code is running and was tested. Just didn't covered this
use case.

Adam is this okay with you?

Regards,
  Marco

> Yours,
> Linus Walleij
> 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support
  2019-12-17  6:40         ` Marco Felsch
@ 2019-12-17  9:55           ` Adam Thomson
  0 siblings, 0 replies; 14+ messages in thread
From: Adam Thomson @ 2019-12-17  9:55 UTC (permalink / raw)
  To: Marco Felsch, Linus Walleij
  Cc: Adam Thomson, Support Opensource, lee.jones, robh+dt, devicetree,
	linux-kernel, linux-gpio, kernel

On 17 December 2019 06:40, Marco Felsch wrote:

> On 19-12-16 11:33, Linus Walleij wrote:
> > On Mon, Dec 16, 2019 at 8:47 AM Marco Felsch <m.felsch@pengutronix.de>
> wrote:
> >
> > > Nice catch, Linus is it okay to add this as follow up patch? The current
> > > patch isn't wrong without the 'PIN_CONFIG_BIAS_DISABLE' case.
> >
> > No strong opinion on that as long as the result is running code.
> 
> Of course the code is running and was tested. Just didn't covered this
> use case.
> 
> Adam is this okay with you?

If you want to send a follow up straight after then that's ok although to me
that seems like more effort. :)

Anyway:

Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>

> 
> Regards,
>   Marco
> 
> > Yours,
> > Linus Walleij
> >

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings
  2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
  2019-12-12 16:45   ` Adam Thomson
  2019-12-13 10:38   ` Lee Jones
@ 2019-12-18 21:54   ` Rob Herring
  2 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2019-12-18 21:54 UTC (permalink / raw)
  To: Marco Felsch
  Cc: support.opensource, lee.jones, robh+dt, linus.walleij,
	devicetree, linux-kernel, linux-gpio, kernel

On Thu, 12 Dec 2019 17:04:11 +0100, Marco Felsch wrote:
> Add gpio device documentation to make the da9062 gpios available for
> users.
> 
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> ---
> Changelog:
> 
> v2:
> - remove sub-node documentation
> - squash gpio properties into mfd documentation
> ---
>  Documentation/devicetree/bindings/mfd/da9062.txt | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2019-12-18 21:54 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-12 16:04 [RESEND PATCH v3 0/3] Add DA9062 GPIO support Marco Felsch
2019-12-12 16:04 ` [RESEND PATCH v3 1/3] dt-bindings: mfd: da9062: add gpio bindings Marco Felsch
2019-12-12 16:45   ` Adam Thomson
2019-12-13 10:38   ` Lee Jones
2019-12-18 21:54   ` Rob Herring
2019-12-12 16:04 ` [RESEND PATCH v3 2/3] mfd: da9062: add support for the DA9062 GPIOs in the core Marco Felsch
2019-12-12 16:45   ` Adam Thomson
2019-12-13 10:37   ` Lee Jones
2019-12-12 16:04 ` [RESEND PATCH v3 3/3] pinctrl: da9062: add driver support Marco Felsch
2019-12-12 16:48   ` Adam Thomson
2019-12-16  7:47     ` Marco Felsch
2019-12-16 10:33       ` Linus Walleij
2019-12-17  6:40         ` Marco Felsch
2019-12-17  9:55           ` Adam Thomson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).