get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/824478/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 824478,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/824478/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/rtc-linux/patch/1507737390-27818-1-git-send-email-eric@nelint.com/",
    "project": {
        "id": 9,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/9/?format=api",
        "name": "Linux RTC development",
        "link_name": "rtc-linux",
        "list_id": "linux-rtc.vger.kernel.org",
        "list_email": "linux-rtc@vger.kernel.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1507737390-27818-1-git-send-email-eric@nelint.com>",
    "list_archive_url": null,
    "date": "2017-10-11T15:56:30",
    "name": "[V2] rtc: add support for NXP PCF85363 real-time clock",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "132868e68db3c3c65a509824827a18c72e79ba90",
    "submitter": {
        "id": 67231,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/67231/?format=api",
        "name": "Eric Nelson",
        "email": "eric@nelint.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/rtc-linux/patch/1507737390-27818-1-git-send-email-eric@nelint.com/mbox/",
    "series": [
        {
            "id": 7648,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/7648/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/rtc-linux/list/?series=7648",
            "date": "2017-10-11T15:56:30",
            "name": "[V2] rtc: add support for NXP PCF85363 real-time clock",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/7648/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/824478/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/824478/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<linux-rtc-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-rtc-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdkim=fail reason=\"key not found in DNS\" (0-bit key;\n\tsecure) header.d=nelint.com header.i=@nelint.com header.b=\"Qx1NGZNZ\";\n\tdkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3yBzDF1hSwz9s83\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 12 Oct 2017 02:58:37 +1100 (AEDT)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751710AbdJKP6g (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tWed, 11 Oct 2017 11:58:36 -0400",
            "from mail-pg0-f44.google.com ([74.125.83.44]:48577 \"EHLO\n\tmail-pg0-f44.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751554AbdJKP6f (ORCPT\n\t<rfc822; linux-rtc@vger.kernel.org>); Wed, 11 Oct 2017 11:58:35 -0400",
            "by mail-pg0-f44.google.com with SMTP id v78so1215939pgb.5\n\tfor <linux-rtc@vger.kernel.org>; Wed, 11 Oct 2017 08:58:35 -0700 (PDT)",
            "from localhost.localdomain\n\t([2600:8800:1300:1c00:7582:6df5:4481:a4c7])\n\tby smtp.gmail.com with ESMTPSA id\n\t204sm24541342pgf.59.2017.10.11.08.58.32\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tWed, 11 Oct 2017 08:58:33 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nelint.com; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=AUVm1ZCjtFZYOwxsbUJTlCZECzZGbot0Cw63iAkErgE=;\n\tb=Qx1NGZNZ5Xz83zqfG6BfgmjPOSZWe2//C8+0BglWRRtKbSDDbSy9zazhQjg0MGzeTW\n\tnw2d+3flkTnKLezGY5pnaWRMG+2P1PsOirjVeFaXUR3k8qwUFxjoIbgAm/2PzlsjfleC\n\tcQAR6Z6QvRyJcM5n3dbhE72D3zwsQAku1bsKE=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=AUVm1ZCjtFZYOwxsbUJTlCZECzZGbot0Cw63iAkErgE=;\n\tb=PgZ0QBRWIaliGzFJYOzNDIB8gL00hcP3nYE8NMwThb/bLTcsV1pTkB6HYYVjQhfZDs\n\tZIIY583i6l/pymzXXBN9pRJoskdxIguYRCV+/er7Cgrqis1AffalSAWiiYbyliwdvAl2\n\t+c9ZkawxJoONvQ8z7vbH5W31BE34WOSxG9ZsiizTlciq05w+Qt4FAiKb/yPLczrii6Pz\n\tY+tmkPnkOE2Fn9bGni9jn4dZNhKS1sS5LXGFSCQvw9AcO/6feStC6yCsCJQmSHxzQVRL\n\tX3XpIgDUflEswFlSMTMTkLWLyPqvHm/ar0XJEtY/JvpAw9DBscmpAh63CLdDKJB9m3T9\n\tdzKQ==",
        "X-Gm-Message-State": "AMCzsaV0SgNQtdSNmNDJp+YSpEbt3+shvre/0YBVj2C6MzZf+DCMFHG6\n\tILw6Ww1SyIIlKXu9r2M6zLFBwkgY",
        "X-Google-Smtp-Source": "AOwi7QCd5HQwdroRGR85HJdDrK+RAuJ7b/6vnRM/FHmav/gEfRgqSG/VwN40SI9vqBJa337SN8WKkA==",
        "X-Received": "by 10.98.2.200 with SMTP id 191mr48920pfc.285.1507737514268;\n\tWed, 11 Oct 2017 08:58:34 -0700 (PDT)",
        "From": "Eric Nelson <eric@nelint.com>",
        "To": "linux-rtc@vger.kernel.org",
        "Cc": "a.zummo@towertech.it, alexandre.belloni@free-electrons.com,\n\trobh+dt@kernel.org, mark.rutland@arm.com,\n\tdevicetree@vger.kernel.org, otavio.salvador@ossystems.com.br,\n\tfestevam@gmail.com, Eric Nelson <eric@nelint.com>",
        "Subject": "[PATCH V2] rtc: add support for NXP PCF85363 real-time clock",
        "Date": "Wed, 11 Oct 2017 08:56:30 -0700",
        "Message-Id": "<1507737390-27818-1-git-send-email-eric@nelint.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<CAOMZO5C_boginn88C7zgXSBaikx==5FHJrgaE1ewYUyUgGfnFQ@mail.gmail.com>",
        "References": "<CAOMZO5C_boginn88C7zgXSBaikx==5FHJrgaE1ewYUyUgGfnFQ@mail.gmail.com>",
        "Sender": "linux-rtc-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<linux-rtc.vger.kernel.org>",
        "X-Mailing-List": "linux-rtc@vger.kernel.org"
    },
    "content": "Note that alarms are not currently implemented.\n\n64 bytes of nvmem is supported and exposed in\nsysfs (# is the instance number, starting with 0):\n\n\t/sys/bus/nvmem/devices/pcf85363-#/nvmem\n\nSigned-off-by: Eric Nelson <eric@nelint.com>\n---\nV2 addresses a couple of issues highlighted by Fabio Estevam\n    1. Kconfig updated to select REGMAP_I2C\n    2. Switch to of_device_id from i2c_device_id for driver matching\n\n Documentation/devicetree/bindings/rtc/pcf85363.txt |  16 ++\n drivers/rtc/Kconfig                                |  13 ++\n drivers/rtc/Makefile                               |   1 +\n drivers/rtc/rtc-pcf85363.c                         | 221 +++++++++++++++++++++\n 4 files changed, 251 insertions(+)\n create mode 100644 Documentation/devicetree/bindings/rtc/pcf85363.txt\n create mode 100644 drivers/rtc/rtc-pcf85363.c",
    "diff": "diff --git a/Documentation/devicetree/bindings/rtc/pcf85363.txt b/Documentation/devicetree/bindings/rtc/pcf85363.txt\nnew file mode 100644\nindex 0000000..5fddb9f\n--- /dev/null\n+++ b/Documentation/devicetree/bindings/rtc/pcf85363.txt\n@@ -0,0 +1,16 @@\n+NXP PCF85363 Real Time Clock\n+============================\n+\n+Required properties:\n+- compatible: Should contain \"nxp,pcf85363\".\n+- reg: I2C address for chip.\n+\n+Example:\n+\n+pcf85363: pcf85363@51 {\n+\tcompatible = \"nxp,pcf85363\";\n+\treg = <0x51>;\n+};\n+\n+Note that alarms are not yet supported, so a specifier for\n+\"interrupts\" will be ignored.\ndiff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig\nindex e0e58f3..15306ed 100644\n--- a/drivers/rtc/Kconfig\n+++ b/drivers/rtc/Kconfig\n@@ -433,6 +433,19 @@ config RTC_DRV_PCF85063\n \t  This driver can also be built as a module. If so, the module\n \t  will be called rtc-pcf85063.\n \n+config RTC_DRV_PCF85363\n+\ttristate \"NXP PCF85363\"\n+\tdepends on I2C\n+\tselect REGMAP_I2C\n+\thelp\n+\t  If you say yes here you get support for the PCF85363 RTC chip.\n+\n+\t  This driver can also be built as a module. If so, the module\n+\t  will be called rtc-pcf85363.\n+\n+\t  The nvmem interface will be named pcf85363-#, where # is the\n+\t  zero-based instance number.\n+\n config RTC_DRV_PCF8563\n \ttristate \"Philips PCF8563/Epson RTC8564\"\n \thelp\ndiff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile\nindex 7230014..934a9dd 100644\n--- a/drivers/rtc/Makefile\n+++ b/drivers/rtc/Makefile\n@@ -113,6 +113,7 @@ obj-$(CONFIG_RTC_DRV_PCF2123)\t+= rtc-pcf2123.o\n obj-$(CONFIG_RTC_DRV_PCF2127)\t+= rtc-pcf2127.o\n obj-$(CONFIG_RTC_DRV_PCF50633)\t+= rtc-pcf50633.o\n obj-$(CONFIG_RTC_DRV_PCF85063)\t+= rtc-pcf85063.o\n+obj-$(CONFIG_RTC_DRV_PCF85363)\t+= rtc-pcf85363.o\n obj-$(CONFIG_RTC_DRV_PCF8523)\t+= rtc-pcf8523.o\n obj-$(CONFIG_RTC_DRV_PCF8563)\t+= rtc-pcf8563.o\n obj-$(CONFIG_RTC_DRV_PCF8583)\t+= rtc-pcf8583.o\ndiff --git a/drivers/rtc/rtc-pcf85363.c b/drivers/rtc/rtc-pcf85363.c\nnew file mode 100644\nindex 0000000..cf1e70c\n--- /dev/null\n+++ b/drivers/rtc/rtc-pcf85363.c\n@@ -0,0 +1,221 @@\n+/*\n+ * drivers/rtc/rtc-pcf85363.c\n+ *\n+ * Driver for NXP PCF85363 real-time clock.\n+ *\n+ * Copyright (C) 2017 Eric Nelson\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+ * Based loosely on rtc-8583 by Russell King, Wolfram Sang and Juergen Beisert\n+ */\n+#include <linux/module.h>\n+#include <linux/i2c.h>\n+#include <linux/slab.h>\n+#include <linux/rtc.h>\n+#include <linux/init.h>\n+#include <linux/err.h>\n+#include <linux/errno.h>\n+#include <linux/bcd.h>\n+#include <linux/of.h>\n+#include <linux/of_device.h>\n+#include <linux/regmap.h>\n+\n+/*\n+ * Date/Time registers\n+ */\n+#define DT_100THS\t0x00\n+#define DT_SECS\t\t0x01\n+#define DT_MINUTES\t0x02\n+#define DT_HOURS\t0x03\n+#define DT_DAYS\t\t0x04\n+#define DT_WEEKDAYS\t0x05\n+#define DT_MONTHS\t0x06\n+#define DT_YEARS\t0x07\n+\n+/*\n+ * Alarm registers\n+ */\n+#define DT_SECOND_ALM1\t0x08\n+#define DT_MINUTE_ALM1\t0x09\n+#define DT_HOUR_ALM1\t0x0a\n+#define DT_DAY_ALM1\t0x0b\n+#define DT_MONTH_ALM1\t0x0c\n+#define DT_MINUTE_ALM2\t0x0d\n+#define DT_HOUR_ALM2\t0x0e\n+#define DT_WEEKDAY_ALM2\t0x0f\n+#define DT_ALARM_EN\t0x10\n+\n+/*\n+ * Time stamp registers\n+ */\n+#define DT_TIMESTAMP1\t0x11\n+#define DT_TIMESTAMP2\t0x17\n+#define DT_TIMESTAMP3\t0x1d\n+#define DT_TS_MODE\t0x23\n+\n+/*\n+ * control registers\n+ */\n+#define CTRL_OFFSET\t0x24\n+#define CTRL_OSCILLATOR\t0x25\n+#define CTRL_BATTERY\t0x26\n+#define CTRL_PIN_IO\t0x27\n+#define CTRL_FUNCTION\t0x28\n+#define CTRL_INTA_EN\t0x29\n+#define CTRL_INTB_EN\t0x2a\n+#define CTRL_FLAGS\t0x2b\n+#define CTRL_RAMBYTE\t0x2c\n+#define CTRL_WDOG\t0x2d\n+#define CTRL_STOP_EN\t0x2e\n+#define CTRL_RESETS\t0x2f\n+#define CTRL_RAM\t0x40\n+\n+#define NVRAM_SIZE\t0x40\n+\n+static struct i2c_driver pcf85363_driver;\n+\n+struct pcf85363 {\n+\tstruct device\t\t*dev;\n+\tstruct rtc_device\t*rtc;\n+\tstruct nvmem_config\tnvmem_cfg;\n+\tstruct regmap\t\t*regmap;\n+};\n+\n+static int pcf85363_rtc_read_time(struct device *dev, struct rtc_time *tm)\n+{\n+\tstruct pcf85363 *pcf85363 = dev_get_drvdata(dev);\n+\tunsigned char buf[DT_YEARS + 1];\n+\tint ret, len = sizeof(buf);\n+\n+\t/* read the RTC date and time registers all at once */\n+\tret = regmap_bulk_read(pcf85363->regmap, DT_100THS, buf, len);\n+\tif (ret) {\n+\t\tdev_err(dev, \"%s: error %d\\n\", __func__, ret);\n+\t\treturn ret;\n+\t}\n+\n+\ttm->tm_year = bcd2bin(buf[DT_YEARS]);\n+\t/* adjust for 1900 base of rtc_time */\n+\ttm->tm_year += 100;\n+\n+\ttm->tm_wday = buf[DT_WEEKDAYS] & 7;\n+\tbuf[DT_SECS] &= 0x7F;\n+\ttm->tm_sec = bcd2bin(buf[DT_SECS]);\n+\tbuf[DT_MINUTES] &= 0x7F;\n+\ttm->tm_min = bcd2bin(buf[DT_MINUTES]);\n+\ttm->tm_hour = bcd2bin(buf[DT_HOURS]);\n+\ttm->tm_mday = bcd2bin(buf[DT_DAYS]);\n+\ttm->tm_mon = bcd2bin(buf[DT_MONTHS]) - 1;\n+\n+\treturn 0;\n+}\n+\n+static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm)\n+{\n+\tstruct pcf85363 *pcf85363 = dev_get_drvdata(dev);\n+\tunsigned char buf[DT_YEARS + 1];\n+\tint len = sizeof(buf);\n+\n+\tbuf[DT_100THS] = 0;\n+\tbuf[DT_SECS] = bin2bcd(tm->tm_sec);\n+\tbuf[DT_MINUTES] = bin2bcd(tm->tm_min);\n+\tbuf[DT_HOURS] = bin2bcd(tm->tm_hour);\n+\tbuf[DT_DAYS] = bin2bcd(tm->tm_mday);\n+\tbuf[DT_WEEKDAYS] = tm->tm_wday;\n+\tbuf[DT_MONTHS] = bin2bcd(tm->tm_mon + 1);\n+\tbuf[DT_YEARS] = bin2bcd(tm->tm_year % 100);\n+\n+\treturn regmap_bulk_write(pcf85363->regmap, DT_100THS,\n+\t\t\t\t buf, len);\n+}\n+\n+static const struct rtc_class_ops rtc_ops = {\n+\t.read_time\t= pcf85363_rtc_read_time,\n+\t.set_time\t= pcf85363_rtc_set_time,\n+};\n+\n+static int pcf85363_nvram_read(void *priv, unsigned int offset, void *val,\n+\t\t\t       size_t bytes)\n+{\n+\tstruct pcf85363 *pcf85363 = priv;\n+\n+\treturn regmap_bulk_read(pcf85363->regmap, CTRL_RAM + offset,\n+\t\t\t\tval, bytes);\n+}\n+\n+static int pcf85363_nvram_write(void *priv, unsigned int offset, void *val,\n+\t\t\t\tsize_t bytes)\n+{\n+\tstruct pcf85363 *pcf85363 = priv;\n+\n+\treturn regmap_bulk_write(pcf85363->regmap, CTRL_RAM + offset,\n+\t\t\t\t val, bytes);\n+}\n+\n+static const struct regmap_config regmap_config = {\n+\t.reg_bits = 8,\n+\t.val_bits = 8,\n+};\n+\n+static int pcf85363_probe(struct i2c_client *client,\n+\t\t\t  const struct i2c_device_id *id)\n+{\n+\tstruct pcf85363 *pcf85363;\n+\n+\tif (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))\n+\t\treturn -ENODEV;\n+\n+\tpcf85363 = devm_kzalloc(&client->dev, sizeof(struct pcf85363),\n+\t\t\t\tGFP_KERNEL);\n+\tif (!pcf85363)\n+\t\treturn -ENOMEM;\n+\n+\tpcf85363->regmap = devm_regmap_init_i2c(client, &regmap_config);\n+\tif (IS_ERR(pcf85363->regmap)) {\n+\t\tdev_err(&client->dev, \"regmap allocation failed\\n\");\n+\t\treturn PTR_ERR(pcf85363->regmap);\n+\t}\n+\n+\tpcf85363->dev = &client->dev;\n+\ti2c_set_clientdata(client, pcf85363);\n+\n+\tpcf85363->rtc = devm_rtc_allocate_device(pcf85363->dev);\n+\tif (IS_ERR(pcf85363->rtc))\n+\t\treturn PTR_ERR(pcf85363->rtc);\n+\n+\tpcf85363->nvmem_cfg.name = \"pcf85363-\";\n+\tpcf85363->nvmem_cfg.word_size = 1;\n+\tpcf85363->nvmem_cfg.stride = 1;\n+\tpcf85363->nvmem_cfg.size = NVRAM_SIZE;\n+\tpcf85363->nvmem_cfg.reg_read = pcf85363_nvram_read;\n+\tpcf85363->nvmem_cfg.reg_write = pcf85363_nvram_write;\n+\tpcf85363->nvmem_cfg.priv = pcf85363;\n+\tpcf85363->rtc->nvmem_config = &pcf85363->nvmem_cfg;\n+\tpcf85363->rtc->nvram_old_abi = true;\n+\tpcf85363->rtc->ops = &rtc_ops;\n+\n+\treturn rtc_register_device(pcf85363->rtc);\n+}\n+\n+static const struct of_device_id dev_ids[] = {\n+\t{ .compatible = \"nxp,pcf85363\" },\n+\t{}\n+};\n+MODULE_DEVICE_TABLE(of, dev_ids);\n+\n+static struct i2c_driver pcf85363_driver = {\n+\t.driver\t= {\n+\t\t.name\t= \"pcf85363\",\n+\t\t.of_match_table = of_match_ptr(dev_ids),\n+\t},\n+\t.probe\t= pcf85363_probe,\n+};\n+\n+module_i2c_driver(pcf85363_driver);\n+\n+MODULE_AUTHOR(\"Eric Nelson\");\n+MODULE_DESCRIPTION(\"pcf85363 I2C RTC driver\");\n+MODULE_LICENSE(\"GPL\");\n",
    "prefixes": [
        "V2"
    ]
}