get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 793173,
    "url": "http://patchwork.ozlabs.org/api/patches/793173/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-i2c/patch/1500954024-6860-6-git-send-email-preid@electromag.com.au/",
    "project": {
        "id": 35,
        "url": "http://patchwork.ozlabs.org/api/projects/35/?format=api",
        "name": "Linux I2C development",
        "link_name": "linux-i2c",
        "list_id": "linux-i2c.vger.kernel.org",
        "list_email": "linux-i2c@vger.kernel.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1500954024-6860-6-git-send-email-preid@electromag.com.au>",
    "list_archive_url": null,
    "date": "2017-07-25T03:40:19",
    "name": "[v10,05/10] i2c: mux: pca954x: Call request irq after adding mux segments",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "afb5289a3b0d027c101f169341763322214d6c54",
    "submitter": {
        "id": 66145,
        "url": "http://patchwork.ozlabs.org/api/people/66145/?format=api",
        "name": "Phil Reid",
        "email": "preid@electromag.com.au"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-i2c/patch/1500954024-6860-6-git-send-email-preid@electromag.com.au/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/793173/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/793173/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<linux-i2c-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-i2c-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xGkY24MKJz9s82\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 25 Jul 2017 13:40:54 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1755799AbdGYDkq (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tMon, 24 Jul 2017 23:40:46 -0400",
            "from anchovy1.45ru.net.au ([203.30.46.145]:36605 \"EHLO\n\tanchovy.45ru.net.au\" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org\n\twith ESMTP id S1754430AbdGYDkf (ORCPT\n\t<rfc822; linux-i2c@vger.kernel.org>); Mon, 24 Jul 2017 23:40:35 -0400",
            "(qmail 7377 invoked by uid 5089); 25 Jul 2017 03:40:33 -0000",
            "by simscan 1.2.0 ppid: 7236, pid: 7239, t: 0.0549s\n\tscanners: regex: 1.2.0 attach: 1.2.0 clamav: 0.88.3/m:40/d:1950",
            "from unknown (HELO preid-centos7.electromag.com.au)\n\t(preid@electromag.com.au@203.59.230.133)\n\tby anchovy1.45ru.net.au with ESMTPA; 25 Jul 2017 03:40:33 -0000",
            "by preid-centos7.electromag.com.au (Postfix, from userid 1000)\n\tid 8F1053013AC36; Tue, 25 Jul 2017 11:40:29 +0800 (AWST)"
        ],
        "X-RBL": "$rbltext",
        "From": "Phil Reid <preid@electromag.com.au>",
        "To": "wsa@the-dreams.de, robh+dt@kernel.org, mark.rutland@arm.com,\n\tsre@kernel.org, jdelvare@suse.com, jglauber@cavium.com,\n\tdavid.daney@cavium.com, peda@axentia.se, preid@electromag.com.au,\n\tbenjamin.tissoires@redhat.com, linux-i2c@vger.kernel.org,\n\tdevicetree@vger.kernel.org, linux-pm@vger.kernel.org",
        "Subject": "[PATCH v10 05/10] i2c: mux: pca954x: Call request irq after adding\n\tmux segments",
        "Date": "Tue, 25 Jul 2017 11:40:19 +0800",
        "Message-Id": "<1500954024-6860-6-git-send-email-preid@electromag.com.au>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1500954024-6860-1-git-send-email-preid@electromag.com.au>",
        "References": "<1500954024-6860-1-git-send-email-preid@electromag.com.au>",
        "Sender": "linux-i2c-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<linux-i2c.vger.kernel.org>",
        "X-Mailing-List": "linux-i2c@vger.kernel.org"
    },
    "content": "The pca954x device do not have the ability to mask interrupts. For\ni2c slave devices that also don't have masking ability (eg ltc1760\nsmbalert output) delay registering the irq until after the mux\nsegments have been configured. During the mux add_adaptor call the\ncore i2c system can register an smbalert handler which would then\nbe called immediately when the irq is registered. This smbalert\nhandler will then clear the pending irq.\n\nThis removes the need for the irq_mask / irq_unmask calls that were\noriginal used to do this.\n\nSigned-off-by: Phil Reid <preid@electromag.com.au>\n---\n drivers/i2c/muxes/i2c-mux-pca954x.c | 85 +++++++++++--------------------------\n 1 file changed, 25 insertions(+), 60 deletions(-)",
    "diff": "diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c\nindex f1751c2..ac0f083 100644\n--- a/drivers/i2c/muxes/i2c-mux-pca954x.c\n+++ b/drivers/i2c/muxes/i2c-mux-pca954x.c\n@@ -246,36 +246,6 @@ static irqreturn_t pca954x_irq_handler(int irq, void *dev_id)\n \treturn handled ? IRQ_HANDLED : IRQ_NONE;\n }\n \n-static void pca954x_irq_mask(struct irq_data *idata)\n-{\n-\tstruct pca954x *data = irq_data_get_irq_chip_data(idata);\n-\tunsigned int pos = idata->hwirq;\n-\tunsigned long flags;\n-\n-\traw_spin_lock_irqsave(&data->lock, flags);\n-\n-\tdata->irq_mask &= ~BIT(pos);\n-\tif (!data->irq_mask)\n-\t\tdisable_irq(data->client->irq);\n-\n-\traw_spin_unlock_irqrestore(&data->lock, flags);\n-}\n-\n-static void pca954x_irq_unmask(struct irq_data *idata)\n-{\n-\tstruct pca954x *data = irq_data_get_irq_chip_data(idata);\n-\tunsigned int pos = idata->hwirq;\n-\tunsigned long flags;\n-\n-\traw_spin_lock_irqsave(&data->lock, flags);\n-\n-\tif (!data->irq_mask)\n-\t\tenable_irq(data->client->irq);\n-\tdata->irq_mask |= BIT(pos);\n-\n-\traw_spin_unlock_irqrestore(&data->lock, flags);\n-}\n-\n static int pca954x_irq_set_type(struct irq_data *idata, unsigned int type)\n {\n \tif ((type & IRQ_TYPE_SENSE_MASK) != IRQ_TYPE_LEVEL_LOW)\n@@ -285,8 +255,6 @@ static int pca954x_irq_set_type(struct irq_data *idata, unsigned int type)\n \n static struct irq_chip pca954x_irq_chip = {\n \t.name = \"i2c-mux-pca954x\",\n-\t.irq_mask = pca954x_irq_mask,\n-\t.irq_unmask = pca954x_irq_unmask,\n \t.irq_set_type = pca954x_irq_set_type,\n };\n \n@@ -294,7 +262,7 @@ static int pca954x_irq_setup(struct i2c_mux_core *muxc)\n {\n \tstruct pca954x *data = i2c_mux_priv(muxc);\n \tstruct i2c_client *client = data->client;\n-\tint c, err, irq;\n+\tint c, irq;\n \n \tif (!data->chip->has_irq || client->irq <= 0)\n \t\treturn 0;\n@@ -314,24 +282,22 @@ static int pca954x_irq_setup(struct i2c_mux_core *muxc)\n \t\t\thandle_simple_irq);\n \t}\n \n-\terr = devm_request_threaded_irq(&client->dev, data->client->irq, NULL,\n-\t\t\t\t\tpca954x_irq_handler,\n-\t\t\t\t\tIRQF_ONESHOT | IRQF_SHARED,\n-\t\t\t\t\t\"pca954x\", data);\n-\tif (err)\n-\t\tgoto err_req_irq;\n+\treturn 0;\n+}\n \n-\tdisable_irq(data->client->irq);\n+static void pca954x_cleanup(struct i2c_mux_core *muxc)\n+{\n+\tstruct pca954x *data = i2c_mux_priv(muxc);\n+\tint c, irq;\n \n-\treturn 0;\n-err_req_irq:\n-\tfor (c = 0; c < data->chip->nchans; c++) {\n-\t\tirq = irq_find_mapping(data->irq, c);\n-\t\tirq_dispose_mapping(irq);\n+\tif (data->irq) {\n+\t\tfor (c = 0; c < data->chip->nchans; c++) {\n+\t\t\tirq = irq_find_mapping(data->irq, c);\n+\t\t\tirq_dispose_mapping(irq);\n+\t\t}\n+\t\tirq_domain_remove(data->irq);\n \t}\n-\tirq_domain_remove(data->irq);\n-\n-\treturn err;\n+\ti2c_mux_del_adapters(muxc);\n }\n \n /*\n@@ -417,6 +383,15 @@ static int pca954x_probe(struct i2c_client *client,\n \t\t\tgoto fail_del_adapters;\n \t}\n \n+\tif (data->irq) {\n+\t\tret = devm_request_threaded_irq(&client->dev, data->client->irq,\n+\t\t\t\t\t\tNULL, pca954x_irq_handler,\n+\t\t\t\t\t\tIRQF_ONESHOT | IRQF_SHARED,\n+\t\t\t\t\t\t\"pca954x\", data);\n+\t\tif (ret)\n+\t\t\tgoto fail_del_adapters;\n+\t}\n+\n \tdev_info(&client->dev,\n \t\t \"registered %d multiplexed busses for I2C %s %s\\n\",\n \t\t num, data->chip->muxtype == pca954x_ismux\n@@ -425,25 +400,15 @@ static int pca954x_probe(struct i2c_client *client,\n \treturn 0;\n \n fail_del_adapters:\n-\ti2c_mux_del_adapters(muxc);\n+\tpca954x_cleanup(muxc);\n \treturn ret;\n }\n \n static int pca954x_remove(struct i2c_client *client)\n {\n \tstruct i2c_mux_core *muxc = i2c_get_clientdata(client);\n-\tstruct pca954x *data = i2c_mux_priv(muxc);\n-\tint c, irq;\n \n-\tif (data->irq) {\n-\t\tfor (c = 0; c < data->chip->nchans; c++) {\n-\t\t\tirq = irq_find_mapping(data->irq, c);\n-\t\t\tirq_dispose_mapping(irq);\n-\t\t}\n-\t\tirq_domain_remove(data->irq);\n-\t}\n-\n-\ti2c_mux_del_adapters(muxc);\n+\tpca954x_cleanup(muxc);\n \treturn 0;\n }\n \n",
    "prefixes": [
        "v10",
        "05/10"
    ]
}