get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2219113,
    "url": "http://patchwork.ozlabs.org/api/patches/2219113/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260402-baytrail-real-swnode-v2-4-6f5054a4cc07@oss.qualcomm.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": "<20260402-baytrail-real-swnode-v2-4-6f5054a4cc07@oss.qualcomm.com>",
    "list_archive_url": null,
    "date": "2026-04-02T12:54:29",
    "name": "[v2,4/4] platform/x86: x86-android-tablets: enable fwnode matching of GPIO chips",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "5b06153a17ae8cc62bb82b9fea3859532edbb379",
    "submitter": {
        "id": 92196,
        "url": "http://patchwork.ozlabs.org/api/people/92196/?format=api",
        "name": "Bartosz Golaszewski",
        "email": "bartosz.golaszewski@oss.qualcomm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260402-baytrail-real-swnode-v2-4-6f5054a4cc07@oss.qualcomm.com/mbox/",
    "series": [
        {
            "id": 498478,
            "url": "http://patchwork.ozlabs.org/api/series/498478/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=498478",
            "date": "2026-04-02T12:54:25",
            "name": "platform/x86: x86-android-tablets: use real firmware node references with intel drivers",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/498478/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2219113/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2219113/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-34589-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-gpio@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=Gjy5tC9H;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=ZRbqAa7l;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=linux-gpio+bounces-34589-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=\"Gjy5tC9H\";\n\tdkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=\"ZRbqAa7l\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=205.220.168.131",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com"
        ],
        "Received": [
            "from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmhjq3tCyz1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 23:58:23 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id E565D304BD2A\n\tfor <incoming@patchwork.ozlabs.org>; Thu,  2 Apr 2026 12:55:26 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D06BB3E559A;\n\tThu,  2 Apr 2026 12:55:07 +0000 (UTC)",
            "from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n [205.220.168.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id B4CE03E4C65\n\tfor <linux-gpio@vger.kernel.org>; Thu,  2 Apr 2026 12:54:58 +0000 (UTC)",
            "from pps.filterd (m0279863.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 632BW2wf948929\n\tfor <linux-gpio@vger.kernel.org>; Thu, 2 Apr 2026 12:54:56 GMT",
            "from mail-qt1-f199.google.com (mail-qt1-f199.google.com\n [209.85.160.199])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d9qnu0c7b-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <linux-gpio@vger.kernel.org>; Thu, 02 Apr 2026 12:54:55 +0000 (GMT)",
            "by mail-qt1-f199.google.com with SMTP id\n d75a77b69052e-5090e08dcfcso20901631cf.0\n        for <linux-gpio@vger.kernel.org>;\n Thu, 02 Apr 2026 05:54:55 -0700 (PDT)",
            "from brgl-qcom.local ([2a01:cb1d:dc:7e00:4ff1:3e57:22ec:dadc])\n        by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-4887e735532sm235790765e9.0.2026.04.02.05.54.51\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Thu, 02 Apr 2026 05:54:52 -0700 (PDT)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775134506; cv=none;\n b=G2VmzuH5zQwtK58WuSp9Ut1cWyXgEkvLOT3mvDLg3kK3M1aVOLM6D//OoWO5Ep4J4IX5U2jhe+yd0KxSHq8QssrDJyDG74xhIDRRkr3qkC1BTw/wWTOgUZCzceJ4iG23MprU+2DbxrMDfT9vYgtq282p4+es0fcFt+r7xMtoSuE=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775134506; c=relaxed/simple;\n\tbh=l4lnny3dGBJZoHOBatk5qgjCf18AZd9xMDIK67fuBWk=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=QgPC5TC1IpLE6eXBXjXXepso/ynrG41biH8yrf1LjCIWV7z17sO5FYD6CLARgRv7WqL9+SlX/eJOEkW/HwEYmC6TxK6GQqhEdd0x2GkdLPCBpV5tIpETZjN3i4AvEOoecXQ4Weg45H4yPogGoQqehP/4IM8OJzfNvs3OgpnWafk=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com;\n spf=pass smtp.mailfrom=oss.qualcomm.com;\n dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=Gjy5tC9H;\n dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=ZRbqAa7l; arc=none smtp.client-ip=205.220.168.131",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\tiM/iRe3Y9krYEM1ss3kFNB7NzrAjyV60b2tj+n+iAZU=; b=Gjy5tC9HSrvA4MBe\n\tft7EyL8vxe85ZjKbVY2cC7FBFLVBxAs/u8oR3EWpZ4Jtb562VrkBB+ACGPv/hCkW\n\tC+5kNFh1NBq2jZN/KQr+OHx2qgxwPzRFwxHGkMLyFJi7WvlNtdtH+XsWbLD1GVt9\n\tRe8qJc1OvAlsHGWWAamMs6vmnFlkhcOVygQiQk5/cybCxoojB0j0mqRKPAkaFpbk\n\tJUGNaQXxAcF3/y0qMFzWiEZhuEoZSYuxr8gwVADixo9XVMoAjDUt0eJ7ElJBuyZu\n\tCwL5GF3JKk8T6dVDAgLwJhgUX/aZLyp8vuS9WCJFk3oFsUcoJ9NqqozMU4sXxGU3\n\t0079mA==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=oss.qualcomm.com; s=google; t=1775134494; x=1775739294;\n darn=vger.kernel.org;\n        h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n         :mime-version:subject:date:from:from:to:cc:subject:date:message-id\n         :reply-to;\n        bh=iM/iRe3Y9krYEM1ss3kFNB7NzrAjyV60b2tj+n+iAZU=;\n        b=ZRbqAa7lUEpayD57Igl2dXFVIE43Ti/FaSALIbp+u5OipNMC8HAXIgp8mp5LH+xV2u\n         6sz/6Ski6Fi9zz3MtuVI1LUZoGoXIMKFEmmIm9G5rniYtGyVx2L8jbNgGXQ6DEKd6c3o\n         6sSM4LecdySn9k8VGVK4KymdjVwYzrJ/5/5rk8nj68ItqdJEFSw012VApFqwx6Le05Cl\n         0EWsKr1owWQ0MeCRBNsBGh0QbTkdugRdUgpXtRCHbU0cM1ZFZjhDj9FPy0qaFcvzEIQ6\n         MSDfgQCqGbvkbyUne1hLM47ThKmCRAINpaPi0GRem1cIjIT5kHS1WbtiTCFNHllw9r8i\n         iXxA=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1775134494; x=1775739294;\n        h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n         :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to\n         :cc:subject:date:message-id:reply-to;\n        bh=iM/iRe3Y9krYEM1ss3kFNB7NzrAjyV60b2tj+n+iAZU=;\n        b=Ipd2ltB94ZAia18xttYvPeVjpjwZjzCIzPgpx0WuAzgnnj9n+/sSnbp+X9EssRzTrw\n         uF5SCAmV/z7V9sOQ/rC8uki14L6q2JjdP0un9YNlxL3Hs/Qc5FOneZ+WaL+JqzJvWDmX\n         opT4DL+Is32lI8Xx7cih0sPW3l6xrp9/P1HE9uSjEzj9I2jeHi4fC26uwASedcAjvqj7\n         J2gSTLhzfCko78eqJsSt44C25Ye/Ve3HLpRgqQc/8pVcz3OF1Uod4Rq5Tei1AsgbjjVa\n         4LQniGlFaYUFg8mjFBz8hsy+yVy2kwrAfxX0QEJ7ntlLprX4N+RM2siBshZbe7kmVjxZ\n         ks7A==",
        "X-Forwarded-Encrypted": "i=1;\n AJvYcCWOI7JSdZi8Vi+VrmZysp6bYlbXsAWk9pagOnidExit9odoT09E8J9oWBLCBPEdnZtR903VEdLN1mou@vger.kernel.org",
        "X-Gm-Message-State": "AOJu0YzD5bww+XIt/T0Bg4hUx6cs6G00z682zycvCPBY12ULoNoQWcFh\n\t6AZFlMLyezDVnfFE1d15Rl07XbU8vLD8t6LWFiWri0pPJRGD6mXymt0NbF5vgYQl0p6tUjJEl+o\n\tcGT6BvXbM8W1d+sr0APU7T4QV+h++VgRO84ZTDQmRwGUNPPbGdK36gzhfK9gBtBFn",
        "X-Gm-Gg": "ATEYQzxyqCtoBcAWhh/PKlH89b03jhZLAjsn/oz/1RyYCPJFz3RgrodjSRSv89iRxix\n\tvve68b2t1+hBYUdXkoKj6qK5OOpbrL/c8fZXkec7OqTLvQon7q3sX791XUh2d+bIq2ZfTlb7X1I\n\t43vg4FnymwPxe+j91uBdDENvyuWH8IxZqfugBxbDBvTj4WPWaS3EEFeJqcyfGUoKYNvU1sPCNPh\n\tWI3YLljzShBTi5u/sxjb+ZSPsSmFVn/HuDqq2OcXatwUHURWbErZh7lTPaVv5Zr5Ggok1rJSNBb\n\tANEMGW4f9++Pn2stXkGuPtciRcprZz7Ux/DTzFhAamPJ5b4kHmhedfkYHKlVerHU3DAi+vKnagJ\n\td9OmapJ8AqB1F+HWRYja235GW71/OZlxkj3GjpmUbygXKQnOlJdlL",
        "X-Received": [
            "by 2002:a05:622a:8c4:b0:509:61:b22 with SMTP id\n d75a77b69052e-50d3bdfce67mr102813301cf.57.1775134494007;\n        Thu, 02 Apr 2026 05:54:54 -0700 (PDT)",
            "by 2002:a05:622a:8c4:b0:509:61:b22 with SMTP id\n d75a77b69052e-50d3bdfce67mr102812851cf.57.1775134493581;\n        Thu, 02 Apr 2026 05:54:53 -0700 (PDT)"
        ],
        "From": "Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>",
        "Date": "Thu, 02 Apr 2026 14:54:29 +0200",
        "Subject": "[PATCH v2 4/4] platform/x86: x86-android-tablets: enable fwnode\n matching of GPIO chips",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-gpio@vger.kernel.org",
        "List-Id": "<linux-gpio.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-gpio+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-gpio+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "<20260402-baytrail-real-swnode-v2-4-6f5054a4cc07@oss.qualcomm.com>",
        "References": "<20260402-baytrail-real-swnode-v2-0-6f5054a4cc07@oss.qualcomm.com>",
        "In-Reply-To": "\n <20260402-baytrail-real-swnode-v2-0-6f5054a4cc07@oss.qualcomm.com>",
        "To": "Andy Shevchenko <andriy.shevchenko@linux.intel.com>,\n Daniel Scally <djrscally@gmail.com>,\n Heikki Krogerus <heikki.krogerus@linux.intel.com>,\n Sakari Ailus <sakari.ailus@linux.intel.com>,\n Greg Kroah-Hartman <gregkh@linuxfoundation.org>,\n \"Rafael J. Wysocki\" <rafael@kernel.org>, Danilo Krummrich <dakr@kernel.org>,\n Mika Westerberg <mika.westerberg@linux.intel.com>,\n Andy Shevchenko <andy@kernel.org>, Linus Walleij <linusw@kernel.org>,\n Hans de Goede <hansg@kernel.org>,\n =?utf-8?q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>,\n Dmitry Torokhov <dmitry.torokhov@gmail.com>, Len Brown <lenb@kernel.org>",
        "Cc": "linux-acpi@vger.kernel.org, driver-core@lists.linux.dev,\n        linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,\n        platform-driver-x86@vger.kernel.org, brgl@kernel.org,\n        Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=5641;\n i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id;\n bh=l4lnny3dGBJZoHOBatk5qgjCf18AZd9xMDIK67fuBWk=;\n b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpzmcSDJFevJiDAeVlynB8mr3GoSDutTpLPSkiz\n e/4bjE89PSJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCac5nEgAKCRAFnS7L/zaE\n w1vnD/9rZfMZ2QuxGkRgddz00Bqvn0zAJcdUasDuGcCPuP4CeV/PY+00l1VWHuhkhdujGGkeX7/\n +9v1S5Htf3bM+YuVWITrs0Gv6er0+m6fv4RwUkPUz1NWTyrh1TChJ+abvmEfhp0cTeOBbcpIrBY\n gI8DJ8d+MGIl0aRWaj2kJm5alDN8NS0IbtXLabnZh52KHuqB0mQLstLgHsw13mnDtQdXoZRcMH2\n lnWGI2vnj/IN3HNTJszaoznfzEkzk8e9bVTejROmslYLUUSUgm2HNhJ33OaGRiDiSMJEQd36qHv\n rG8suBE6nX/CQWMitTpEP7X2sR/COz+9iZwg+yT1Trq4+t2TfsBTUTSkMUiF39UcVQPIgaSQCV+\n 2rSOasJKGEx7NbUi6f9XoD/Ut/beI549qYEWrxi1+UHLbsgnqqUS8J15f9NC2U05ynruz0xtTPo\n kQRhdnqesm4ftCZcFzn8666KmOaI22QQ5S1hgRyoG3vcd6qTR4ryjO78K5ysvOzlJNt+FTfWatS\n XenNDc846EDPJPHgFgiAC9Tv5ctleTUIHarEgimgatG6M88BX1qRv5YdiIAl5FTvrunIo9ST2wD\n 8jjbTxwHNqdYVzz2OUecmpL2OPeE4gXggVc4R3uosGasezJtGDFh6jjnuFGPifvcYwAA/G6R0nT\n 4acWO63D4oXa/Gg==",
        "X-Developer-Key": "i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp;\n fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772",
        "X-Proofpoint-ORIG-GUID": "ciWiBwd2Fyw9AxgPR3cjWO1LawtL1aXs",
        "X-Proofpoint-GUID": "ciWiBwd2Fyw9AxgPR3cjWO1LawtL1aXs",
        "X-Authority-Analysis": "v=2.4 cv=RoLI7SmK c=1 sm=1 tr=0 ts=69ce671f cx=c_pps\n a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8\n a=6VCG6zWJw881NgsJBYMA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDAyMDExNSBTYWx0ZWRfXzl+5rXoigRM6\n WSBj0eMEW9glxEJvOw5+ul65HKnfxwc9OUQZ8gb/q/KybVrJAeZVEMHhc4H5YCbdXLxsLIX6oT5\n I5UAu4UsC8Bg6IXgZYrysSk6C3VsZe9FMmKhVpMyy5qp/24TYarwf9dGLzNZjeS6G1YT3Vy20UX\n uPzYRpGVfWjj011xdpj22jpSwFyI86eKo3JTif5O4uAEo3l8Rk1y3GrMFHulNjQYg3JFiE58FaN\n 7Wc0I+txjOJsnFH0oNZvmxTsWm9htHe7wSMSBqLkuHUenQdMKD9b58SfH6kXllZu7+k8lH/GkSZ\n hYdFyVXiy6L+zy/W/EcGIhaZtaePU+ecWng9kO58bZcp+lKRyc8udf1yA7bbk/UVYvsdLKyZH+j\n LxziAEETYmT5FRrFhlYoTSRCROrdEfTRi7TbnFdYDSW3ZX6viJt6FbX64sMGfc6plEWCA3S9Q0v\n kuFjU75GPmCX8aB3WMw==",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-02_01,2026-04-02_02,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501\n lowpriorityscore=0 impostorscore=0 suspectscore=0 phishscore=0 bulkscore=0\n spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound\n adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001\n definitions=main-2604020115"
    },
    "content": "In order to allow GPIOLIB to match cherryview and baytrail GPIO\ncontrollers by their firmware nodes instead of their names, we need to\nattach the - currently \"dangling\" - existing software nodes to their\ntarget devices dynamically.\n\nWe deal with devices described in ACPI so set up a bus notifier waiting\nfor the ADD events. We know the name of the device we're waiting for so\nmatch against it and - on match - assign the appropriate software node\nas the secondary firmware node of the underlying ACPI node. In case the\nevent was emitted earlier than this driver's probe: also make sure the\ndevice was not added before.\n\nScheduling fine-grained devres actions allows for proper teardown and\nunsetting of the secondary firmware nodes.\n\nSigned-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>\n---\n drivers/platform/x86/x86-android-tablets/core.c | 127 +++++++++++++++++++++++-\n 1 file changed, 124 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/platform/x86/x86-android-tablets/core.c b/drivers/platform/x86/x86-android-tablets/core.c\nindex 021009e9085bec3db9c4daa1f6235600210a6099..9e6e8f272dfe16cda421b569802045c3d94fc0ab 100644\n--- a/drivers/platform/x86/x86-android-tablets/core.c\n+++ b/drivers/platform/x86/x86-android-tablets/core.c\n@@ -13,10 +13,12 @@\n #include <linux/acpi.h>\n #include <linux/device.h>\n #include <linux/dmi.h>\n+#include <linux/fwnode.h>\n #include <linux/gpio/consumer.h>\n #include <linux/gpio/machine.h>\n #include <linux/irq.h>\n #include <linux/module.h>\n+#include <linux/notifier.h>\n #include <linux/pci.h>\n #include <linux/platform_device.h>\n #include <linux/serdev.h>\n@@ -360,6 +362,124 @@ static const struct software_node *cherryview_gpiochip_node_group[] = {\n \tNULL\n };\n \n+struct auto_secondary_data {\n+\tstruct notifier_block nb;\n+\tstruct device *parent;\n+};\n+\n+static void auto_secondary_unset(void *data)\n+{\n+\tstruct fwnode_handle *fwnode = data;\n+\n+\tfwnode->secondary = NULL;\n+}\n+\n+static int acpi_set_secondary_fwnode(struct device *parent, struct device *dev,\n+\t\t\t\t     const struct software_node *const swnode)\n+{\n+\tstruct acpi_device *device = to_acpi_device(dev);\n+\tstruct fwnode_handle *fwnode;\n+\tint ret;\n+\n+\tfwnode = software_node_fwnode(swnode);\n+\tif (WARN_ON(!fwnode))\n+\t\treturn -ENOENT;\n+\n+\tfwnode->secondary = ERR_PTR(-ENODEV);\n+\tdevice->fwnode.secondary = fwnode;\n+\n+\tret = devm_add_action_or_reset(parent, auto_secondary_unset, &device->fwnode);\n+\tif (ret)\n+\t\tdev_err(parent, \"Failed to schedule the unset action for secondary fwnode\\n\");\n+\n+\treturn ret;\n+}\n+\n+static int acpi_auto_secondary_notifier(struct notifier_block *nb,\n+\t\t\t\t\tunsigned long action, void *data)\n+{\n+\tstruct auto_secondary_data *auto_sec = container_of(nb, struct auto_secondary_data, nb);\n+\tconst struct software_node *const *swnode;\n+\tstruct device *dev = data;\n+\tint ret;\n+\n+\tswitch (action) {\n+\tcase BUS_NOTIFY_ADD_DEVICE:\n+\t\tfor (swnode = gpiochip_node_group; *swnode; swnode++) {\n+\t\t\tif (strcmp((*swnode)->name, dev_name(dev)) == 0) {\n+\t\t\t\tret = acpi_set_secondary_fwnode(auto_sec->parent, dev, *swnode);\n+\t\t\t\treturn ret ? NOTIFY_BAD : NOTIFY_OK;\n+\t\t\t}\n+\t\t}\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\treturn NOTIFY_DONE;\n+}\n+\n+static void auto_secondary_unregister_node_group(void *data)\n+{\n+\tconst struct software_node **nodes = data;\n+\n+\tsoftware_node_unregister_node_group(nodes);\n+}\n+\n+static void auto_secondary_unregister_notifier(void *data)\n+{\n+\tstruct notifier_block *nb = data;\n+\n+\tbus_unregister_notifier(&acpi_bus_type, nb);\n+}\n+\n+static int auto_secondary_fwnode_init(struct device *parent)\n+{\n+\tconst struct software_node *const *swnode;\n+\tstruct auto_secondary_data *data;\n+\tint ret;\n+\n+\tret = software_node_register_node_group(gpiochip_node_group);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = devm_add_action_or_reset(parent,\n+\t\t\t\t       auto_secondary_unregister_node_group,\n+\t\t\t\t       gpiochip_node_group);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tdata = devm_kzalloc(parent, sizeof(*data), GFP_KERNEL);\n+\tif (!data)\n+\t\treturn -ENOMEM;\n+\n+\tdata->nb.notifier_call = acpi_auto_secondary_notifier;\n+\tdata->parent = parent;\n+\n+\tret = bus_register_notifier(&acpi_bus_type, &data->nb);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = devm_add_action_or_reset(parent,\n+\t\t\t\t       auto_secondary_unregister_notifier,\n+\t\t\t\t       &data->nb);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t/* Device may have been already added. */\n+\tfor (swnode = gpiochip_node_group; *swnode; swnode++) {\n+\t\tstruct device *dev __free(put_device) =\n+\t\t\tbus_find_device_by_name(&acpi_bus_type, NULL, (*swnode)->name);\n+\t\tif (dev) {\n+\t\t\tret = acpi_set_secondary_fwnode(parent, dev, *swnode);\n+\t\t\tif (ret)\n+\t\t\t\treturn ret;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n static void x86_android_tablet_remove(struct platform_device *pdev)\n {\n \tint i;\n@@ -391,7 +511,6 @@ static void x86_android_tablet_remove(struct platform_device *pdev)\n \n \tsoftware_node_unregister_node_group(gpio_button_swnodes);\n \tsoftware_node_unregister_node_group(swnode_group);\n-\tsoftware_node_unregister_node_group(gpiochip_node_group);\n }\n \n static __init int x86_android_tablet_probe(struct platform_device *pdev)\n@@ -427,9 +546,11 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)\n \t\tbreak;\n \t}\n \n-\tret = software_node_register_node_group(gpiochip_node_group);\n-\tif (ret)\n+\tret = auto_secondary_fwnode_init(&pdev->dev);\n+\tif (ret) {\n+\t\tx86_android_tablet_remove(pdev);\n \t\treturn ret;\n+\t}\n \n \tret = software_node_register_node_group(dev_info->swnode_group);\n \tif (ret) {\n",
    "prefixes": [
        "v2",
        "4/4"
    ]
}