Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/810584/?format=api
{ "id": 810584, "url": "http://patchwork.ozlabs.org/api/patches/810584/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/1504704043-8052-13-git-send-email-rf@opensource.wolfsonmicro.com/", "project": { "id": 42, "url": "http://patchwork.ozlabs.org/api/projects/42/?format=api", "name": "Linux GPIO development", "link_name": "linux-gpio", "list_id": "linux-gpio.vger.kernel.org", "list_email": "linux-gpio@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1504704043-8052-13-git-send-email-rf@opensource.wolfsonmicro.com>", "list_archive_url": null, "date": "2017-09-06T13:20:38", "name": "[v5,12/17] gpio: madera: Support Cirrus Logic Madera class codecs", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "464164b72ccbc222f2c5865aef41ba0b93719dde", "submitter": { "id": 65141, "url": "http://patchwork.ozlabs.org/api/people/65141/?format=api", "name": "Richard Fitzgerald", "email": "rf@opensource.wolfsonmicro.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/1504704043-8052-13-git-send-email-rf@opensource.wolfsonmicro.com/mbox/", "series": [ { "id": 1804, "url": "http://patchwork.ozlabs.org/api/series/1804/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=1804", "date": "2017-09-06T13:20:36", "name": "Add support for Cirrus Logic CS47L35/L85/L90/L91 codecs", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/1804/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/810584/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/810584/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<linux-gpio-owner@vger.kernel.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=linux-gpio-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ppops.net;\n\tspf=none smtp.mailfrom=rf@opensource.wolfsonmicro.com" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xnPNr3vCQz9t43\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 6 Sep 2017 23:21:16 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1754624AbdIFNVN (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tWed, 6 Sep 2017 09:21:13 -0400", "from mx0b-001ae601.pphosted.com ([67.231.152.168]:42762 \"EHLO\n\tmx0b-001ae601.pphosted.com\" rhost-flags-OK-OK-OK-OK)\n\tby vger.kernel.org with ESMTP id S1754565AbdIFNU7 (ORCPT\n\t<rfc822; linux-gpio@vger.kernel.org>); Wed, 6 Sep 2017 09:20:59 -0400", "from pps.filterd (m0077474.ppops.net [127.0.0.1])\n\tby mx0b-001ae601.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv86DJiKC029112; Wed, 6 Sep 2017 08:20:48 -0500", "from mail4.cirrus.com ([87.246.98.35])\n\tby mx0b-001ae601.pphosted.com with ESMTP id 2cqs2mav6d-1;\n\tWed, 06 Sep 2017 08:20:47 -0500", "from EX17.ad.cirrus.com (unknown [172.20.9.81])\n\tby mail4.cirrus.com (Postfix) with ESMTP id 94F31611CE89;\n\tWed, 6 Sep 2017 08:20:44 -0500 (CDT)", "from imbe.wolfsonmicro.main (198.61.95.81) by EX17.ad.cirrus.com\n\t(172.20.9.81) with Microsoft SMTP Server id 14.3.301.0;\n\tWed, 6 Sep 2017 14:20:44 +0100", "from rf-debian.ad.cirrus.com (rf-debian.ad.cirrus.com\n\t[198.90.223.45]) by imbe.wolfsonmicro.main (8.14.4/8.14.4) with ESMTP\n\tid v86DKhDW032150; Wed, 6 Sep 2017 14:20:44 +0100" ], "From": "Richard Fitzgerald <rf@opensource.wolfsonmicro.com>", "To": "<lee.jones@linaro.org>, <broonie@kernel.org>,\n\t<linus.walleij@linaro.org>, <gnurou@gmail.com>,\n\t<robh+dt@kernel.org>, <tglx@linutronix.de>, <jason@lakedaemon.net>", "CC": "<alsa-devel@alsa-project.org>, <patches@opensource.wolfsonmicro.com>,\n\t<linux-gpio@vger.kernel.org>, <devicetree@vger.kernel.org>,\n\t<linux-kernel@vger.kernel.org>", "Subject": "[PATCH v5 12/17] gpio: madera: Support Cirrus Logic Madera class\n\tcodecs", "Date": "Wed, 6 Sep 2017 14:20:38 +0100", "Message-ID": "<1504704043-8052-13-git-send-email-rf@opensource.wolfsonmicro.com>", "X-Mailer": "git-send-email 1.9.1", "In-Reply-To": "<1504704043-8052-1-git-send-email-rf@opensource.wolfsonmicro.com>", "References": "<1504704043-8052-1-git-send-email-rf@opensource.wolfsonmicro.com>", "MIME-Version": "1.0", "Content-Type": "text/plain", "X-Proofpoint-Spam-Details": "rule=notspam policy=default score=0\n\tpriorityscore=1501 malwarescore=0\n\tsuspectscore=2 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015\n\tlowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam\n\tadjust=0\n\treason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1709060186", "Sender": "linux-gpio-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<linux-gpio.vger.kernel.org>", "X-Mailing-List": "linux-gpio@vger.kernel.org" }, "content": "This adds support for the GPIOs on Cirrus Logic Madera class codecs.\nAny pins not used for special functions (see the pinctrl driver) can be\nused as general single-bit input or output lines. The number of available\nGPIOs varies between codecs.\n\nSigned-off-by: Nariman Poushin <nariman@opensource.wolfsonmicro.com>\nSigned-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>\nSigned-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>\nAcked-by: Linus Walleij <linus.walleij@linaro.org>\n---\n MAINTAINERS | 1 +\n drivers/gpio/Kconfig | 6 ++\n drivers/gpio/Makefile | 1 +\n drivers/gpio/gpio-madera.c | 196 +++++++++++++++++++++++++++++++++++++++++++++\n 4 files changed, 204 insertions(+)\n create mode 100644 drivers/gpio/gpio-madera.c", "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 9d75ab6..94fc0bd 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -3429,6 +3429,7 @@ F:\tDocumentation/devicetree/bindings/mfd/madera.txt\n F:\tDocumentation/devicetree/bindings/pinctrl/cirrus,madera-pinctrl.txt\n F:\tinclude/linux/irqchip/irq-madera*\n F:\tinclude/linux/mfd/madera/*\n+F:\tdrivers/gpio/gpio-madera*\n F:\tdrivers/irqchip/irq-madera*\n F:\tdrivers/mfd/madera*\n F:\tdrivers/mfd/cs47l*\ndiff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig\nindex 3388d54..d072b30 100644\n--- a/drivers/gpio/Kconfig\n+++ b/drivers/gpio/Kconfig\n@@ -985,6 +985,12 @@ config GPIO_LP87565\n \t This driver can also be built as a module. If so, the module will be\n \t called gpio-lp87565.\n \n+config GPIO_MADERA\n+\tbool \"Cirrus Logic Madera class codecs\"\n+\tdepends on PINCTRL_MADERA\n+\thelp\n+\t Support for GPIOs on Cirrus Logic Madera class codecs.\n+\n config GPIO_MAX77620\n \ttristate \"GPIO support for PMIC MAX77620 and MAX20024\"\n \tdepends on MFD_MAX77620\ndiff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile\nindex aeb70e9d..a171dc7 100644\n--- a/drivers/gpio/Makefile\n+++ b/drivers/gpio/Makefile\n@@ -69,6 +69,7 @@ obj-$(CONFIG_ARCH_LPC32XX)\t+= gpio-lpc32xx.o\n obj-$(CONFIG_GPIO_LP873X)\t+= gpio-lp873x.o\n obj-$(CONFIG_GPIO_LP87565)\t+= gpio-lp87565.o\n obj-$(CONFIG_GPIO_LYNXPOINT)\t+= gpio-lynxpoint.o\n+obj-$(CONFIG_GPIO_MADERA)\t+= gpio-madera.o\n obj-$(CONFIG_GPIO_MAX730X)\t+= gpio-max730x.o\n obj-$(CONFIG_GPIO_MAX7300)\t+= gpio-max7300.o\n obj-$(CONFIG_GPIO_MAX7301)\t+= gpio-max7301.o\ndiff --git a/drivers/gpio/gpio-madera.c b/drivers/gpio/gpio-madera.c\nnew file mode 100644\nindex 0000000..e45905d5\n--- /dev/null\n+++ b/drivers/gpio/gpio-madera.c\n@@ -0,0 +1,196 @@\n+/*\n+ * GPIO support for Cirrus Logic Madera codecs\n+ *\n+ * Copyright 2015-2017 Cirrus Logic\n+ *\n+ * This program is free software; you can redistribute it and/or modify\n+ * it under the terms of the GNU General Public License version 2 as\n+ * published by the Free Software Foundation.\n+ */\n+\n+#include <linux/device.h>\n+#include <linux/gpio.h>\n+#include <linux/kernel.h>\n+#include <linux/module.h>\n+#include <linux/platform_device.h>\n+\n+#include <linux/mfd/madera/core.h>\n+#include <linux/mfd/madera/pdata.h>\n+#include <linux/mfd/madera/registers.h>\n+\n+struct madera_gpio {\n+\tstruct madera *madera;\n+\tstruct gpio_chip gpio_chip;\n+};\n+\n+static int madera_gpio_get_direction(struct gpio_chip *chip,\n+\t\t\t\t unsigned int offset)\n+{\n+\tstruct madera_gpio *madera_gpio = gpiochip_get_data(chip);\n+\tstruct madera *madera = madera_gpio->madera;\n+\tunsigned int val;\n+\tint ret;\n+\n+\tret = regmap_read(madera->regmap,\n+\t\t\t MADERA_GPIO1_CTRL_2 + (2 * offset), &val);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\treturn (val & MADERA_GP1_DIR_MASK) >> MADERA_GP1_DIR_SHIFT;\n+}\n+\n+static int madera_gpio_direction_in(struct gpio_chip *chip, unsigned int offset)\n+{\n+\tstruct madera_gpio *madera_gpio = gpiochip_get_data(chip);\n+\tstruct madera *madera = madera_gpio->madera;\n+\n+\treturn regmap_update_bits(madera->regmap,\n+\t\t\t\t MADERA_GPIO1_CTRL_2 + (2 * offset),\n+\t\t\t\t MADERA_GP1_DIR_MASK, MADERA_GP1_DIR);\n+}\n+\n+static int madera_gpio_get(struct gpio_chip *chip, unsigned int offset)\n+{\n+\tstruct madera_gpio *madera_gpio = gpiochip_get_data(chip);\n+\tstruct madera *madera = madera_gpio->madera;\n+\tunsigned int val;\n+\tint ret;\n+\n+\tret = regmap_read(madera->regmap,\n+\t\t\t MADERA_GPIO1_CTRL_1 + (2 * offset), &val);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\treturn !!(val & MADERA_GP1_LVL_MASK);\n+}\n+\n+static int madera_gpio_direction_out(struct gpio_chip *chip,\n+\t\t\t\t unsigned int offset, int value)\n+{\n+\tstruct madera_gpio *madera_gpio = gpiochip_get_data(chip);\n+\tstruct madera *madera = madera_gpio->madera;\n+\tunsigned int regval;\n+\tint ret;\n+\n+\tif (value)\n+\t\tregval = MADERA_GP1_LVL;\n+\telse\n+\t\tregval = 0;\n+\n+\tret = regmap_update_bits(madera->regmap,\n+\t\t\t\t MADERA_GPIO1_CTRL_2 + (2 * offset),\n+\t\t\t\t MADERA_GP1_DIR_MASK, 0);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\treturn regmap_update_bits(madera->regmap,\n+\t\t\t\t MADERA_GPIO1_CTRL_1 + (2 * offset),\n+\t\t\t\t MADERA_GP1_LVL_MASK, regval);\n+}\n+\n+static void madera_gpio_set(struct gpio_chip *chip, unsigned int offset,\n+\t\t\t int value)\n+{\n+\tstruct madera_gpio *madera_gpio = gpiochip_get_data(chip);\n+\tstruct madera *madera = madera_gpio->madera;\n+\tunsigned int regval;\n+\tint ret;\n+\n+\tif (value)\n+\t\tregval = MADERA_GP1_LVL;\n+\telse\n+\t\tregval = 0;\n+\n+\tret = regmap_update_bits(madera->regmap,\n+\t\t\t\t MADERA_GPIO1_CTRL_1 + (2 * offset),\n+\t\t\t\t MADERA_GP1_LVL_MASK, regval);\n+\tif (ret)\n+\t\tdev_warn(madera->dev, \"Failed to write to 0x%x (%d)\\n\",\n+\t\t\t MADERA_GPIO1_CTRL_1 + (2 * offset), ret);\n+}\n+\n+static struct gpio_chip template_chip = {\n+\t.label\t\t\t= \"madera\",\n+\t.owner\t\t\t= THIS_MODULE,\n+\t.request\t\t= gpiochip_generic_request,\n+\t.free\t\t\t= gpiochip_generic_free,\n+\t.get_direction\t\t= madera_gpio_get_direction,\n+\t.direction_input\t= madera_gpio_direction_in,\n+\t.get\t\t\t= madera_gpio_get,\n+\t.direction_output\t= madera_gpio_direction_out,\n+\t.set\t\t\t= madera_gpio_set,\n+\t.set_config\t\t= gpiochip_generic_config,\n+\t.can_sleep\t\t= true,\n+};\n+\n+static int madera_gpio_probe(struct platform_device *pdev)\n+{\n+\tstruct madera *madera = dev_get_drvdata(pdev->dev.parent);\n+\tstruct madera_pdata *pdata = dev_get_platdata(madera->dev);\n+\tstruct madera_gpio *madera_gpio;\n+\tint ret;\n+\n+\tmadera_gpio = devm_kzalloc(&pdev->dev, sizeof(*madera_gpio),\n+\t\t\t\t GFP_KERNEL);\n+\tif (!madera_gpio)\n+\t\treturn -ENOMEM;\n+\n+\tmadera_gpio->madera = madera;\n+\tmadera_gpio->gpio_chip = template_chip;\n+\tmadera_gpio->gpio_chip.parent = &pdev->dev;\n+\n+\tif (IS_ENABLED(CONFIG_OF_GPIO))\n+\t\tmadera_gpio->gpio_chip.of_node = madera->dev->of_node;\n+\n+\tswitch (madera->type) {\n+\tcase CS47L35:\n+\t\tmadera_gpio->gpio_chip.ngpio = CS47L35_NUM_GPIOS;\n+\t\tbreak;\n+\tcase CS47L85:\n+\tcase WM1840:\n+\t\tmadera_gpio->gpio_chip.ngpio = CS47L85_NUM_GPIOS;\n+\t\tbreak;\n+\tcase CS47L90:\n+\tcase CS47L91:\n+\t\tmadera_gpio->gpio_chip.ngpio = CS47L90_NUM_GPIOS;\n+\t\tbreak;\n+\tdefault:\n+\t\tdev_err(&pdev->dev, \"Unknown chip variant %d\\n\", madera->type);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (pdata && pdata->gpio_base)\n+\t\tmadera_gpio->gpio_chip.base = pdata->gpio_base;\n+\telse\n+\t\tmadera_gpio->gpio_chip.base = -1;\n+\n+\tret = devm_gpiochip_add_data(&pdev->dev, &madera_gpio->gpio_chip,\n+\t\t\t\t madera_gpio);\n+\tif (ret < 0) {\n+\t\tdev_err(&pdev->dev, \"Could not register gpiochip, %d\\n\", ret);\n+\t\treturn ret;\n+\t}\n+\n+\tret = gpiochip_add_pin_range(&madera_gpio->gpio_chip, \"madera-pinctrl\",\n+\t\t\t\t 0, 0, madera_gpio->gpio_chip.ngpio);\n+\tif (ret) {\n+\t\tdev_warn(&pdev->dev, \"Failed to add pin range (%d)\\n\", ret);\n+\t\treturn ret;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static struct platform_driver madera_gpio_driver = {\n+\t.driver.name\t= \"madera-gpio\",\n+\t.driver.owner\t= THIS_MODULE,\n+\t.probe\t\t= madera_gpio_probe,\n+};\n+\n+module_platform_driver(madera_gpio_driver);\n+\n+MODULE_DESCRIPTION(\"GPIO interface for Madera codecs\");\n+MODULE_AUTHOR(\"Nariman Poushin <nariman@opensource.wolfsonmicro.com>\");\n+MODULE_AUTHOR(\"Richard Fitzgerald <rf@opensource.wolfsonmicro.com>\");\n+MODULE_LICENSE(\"GPL v2\");\n+MODULE_ALIAS(\"platform:madera-gpio\");\n", "prefixes": [ "v5", "12/17" ] }