{"id":2228798,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2228798/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20260427-baytrail-real-swnode-v3-2-0003e4c1708c@oss.qualcomm.com/","project":{"id":42,"url":"http://patchwork.ozlabs.org/api/1.1/projects/42/?format=json","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":""},"msgid":"<20260427-baytrail-real-swnode-v3-2-0003e4c1708c@oss.qualcomm.com>","date":"2026-04-27T12:19:11","name":"[v3,2/2] 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/1.1/people/92196/?format=json","name":"Bartosz Golaszewski","email":"bartosz.golaszewski@oss.qualcomm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20260427-baytrail-real-swnode-v3-2-0003e4c1708c@oss.qualcomm.com/mbox/","series":[{"id":501637,"url":"http://patchwork.ozlabs.org/api/1.1/series/501637/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/list/?series=501637","date":"2026-04-27T12:19:09","name":"platform/x86: x86-android-tablets: use real firmware node references with intel drivers","version":3,"mbox":"http://patchwork.ozlabs.org/series/501637/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2228798/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2228798/checks/","tags":{},"headers":{"Return-Path":"\n <linux-gpio+bounces-35561-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=WsivgD1E;\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=GWn+oxnF;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-gpio+bounces-35561-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=\"WsivgD1E\";\n\tdkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=\"GWn+oxnF\"","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 sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\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 4g42hd672fz1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 22:20:33 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 8B4FF303BB10\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 12:19:30 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 3088D3B8920;\n\tMon, 27 Apr 2026 12:19:30 +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 7581131353C\n\tfor <linux-gpio@vger.kernel.org>; Mon, 27 Apr 2026 12:19:28 +0000 (UTC)","from pps.filterd (m0279862.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63R8TBxf665673\n\tfor <linux-gpio@vger.kernel.org>; Mon, 27 Apr 2026 12:19:28 GMT","from mail-vk1-f199.google.com (mail-vk1-f199.google.com\n [209.85.221.199])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dt30n1acy-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <linux-gpio@vger.kernel.org>; Mon, 27 Apr 2026 12:19:27 +0000 (GMT)","by mail-vk1-f199.google.com with SMTP id\n 71dfb90a1353d-56d9f191b6eso17131431e0c.2\n        for <linux-gpio@vger.kernel.org>;\n Mon, 27 Apr 2026 05:19:27 -0700 (PDT)","from brgl-qcom.local ([2a01:cb1d:dc:7e00:83be:e944:7b0e:ef3d])\n        by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-4891bb3d121sm882844295e9.14.2026.04.27.05.19.23\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Mon, 27 Apr 2026 05:19:24 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777292370; cv=none;\n b=Y1Qrrn2rzvMgAqmOUcH3Jhjzvx7Dn7TYjwlXrKk/dNgGNg4NziMgMLZq4plh8v4ahzxlQdBQ8FTNl9vtFwURTGAvs2fac97cdtctBQrNdZMHyFIxQCiIGNE/Mq1XfqvpVPNevAcYEw1ZhlLEgAw8CL63VW6q3l5EXa5SCOmszEE=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777292370; 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=gzkSWqs1WuOBvzCapceUWQnE5Y6I4nkB9owqvvsx2lnRVkIlssOM+z6zLkxYFwreVq3oy3kxw4S+Scuz8J7eo2qtrINnRK0+LYQkKvp75PH4S4TsyRkEgM1JEIYsha8S3YQ/dlY1HU1fiIf9i1xuI7ifujU1c/t5zJLy6anbQLY=","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=WsivgD1E;\n dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=GWn+oxnF; 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=WsivgD1Ea/rClQoc\n\tgvrzbgIgWeTvUJ70PJEPQQ3Lj9f08eUW9ZybG6HWQUahQ5hRMfSBC7ZHnOVHQZ3u\n\tt26r9B0hry12hpfYcqvnuqHoB09roK6skdvuZabCcHi0+bnozcIezMNB9Umy8DWt\n\tz5bv1N2gHl+VweZgqEgtvOtBmdS0CJL8Uvz2WjLa6PbLjUFaX5rq8Lz8kZ8Yo9j4\n\tTlEkFP4YuGEZhvl7GQ/y/utypQNp5yQ+KYqMJGF4LfNxladVTDB3pKpuAMb/57MU\n\t2oQQ6fIKYqkrdl38oq+Eo5GfxJyhrzP0nQpVqIF8VW05IXsbYRK6T8ohgUDYcdTz\n\tyUbCDw==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=oss.qualcomm.com; s=google; t=1777292366; x=1777897166;\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=GWn+oxnFNjRuxb4UVUZHiIWYAv4/Y5/SYp3mvipG12jWnIRWOMg4sI7zja3hipz9PD\n         gHjIPvM3VFBvL/0MFAygY2wRWg3AF+8bZy6CZNr+s+A/t+ADrXheV//cd1gpTw2oBHvV\n         +TzZH7gd/G4Qkg2qz/TSv6lgof6a+GG7E5350hJ4QUxuA4XAUgtntW2cCHvjlH4CZhMU\n         536KoOu/gnkxzedDOzkhH0GINbqSG+SuuXGLgxfgphd4ZqaVEPbxYmyPkux4r7t6V62+\n         xci8igCCQ32dcMgORGw87eFFKanrWVdS0q1dENH4snpqjnsKRJm28MUUYZRTtZsoPvSS\n         iYig=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1777292366; x=1777897166;\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=FJKR4FMrvd6zaonfGa6tzMKQR7D82TWWYgPziP/+u+0fLaGjMH75cFI9Cv3fIOmjlt\n         WuG3LyneN+sMSMnwx4gK3OcrEb7f6Lk5ydyTxnZ1Hnc/KRylxVDcqJKFS05npb/qtrzH\n         ZmkSI4BdRWHkb61taR+ASGJjKmMURDoNaOgZU4i2JwGJqpWfmqxGxDL820W7A0CtK2UH\n         /fm4sSDzVD/Vzpz2zutK2y13TM7/AQgL0tMVFTK9iqhAR1M5jcMYlrXVVT/Yh18v7SKu\n         QvhsNUEf6Z6YzBM4ldilsKgJ3+159q9lWH/oDFOCGKLO/qMnsW4TYjWFGP9r7inCP351\n         bJCw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ9gkZlUASbOOYL/avXyogyQ27xpIWPUdDDs5iXqChxkgLdnZuqJOOHenmiPoQqUpmdXUyHmHVsL6sCk@vger.kernel.org","X-Gm-Message-State":"AOJu0YxJwbZ0Sz6O0DChfnikplbjj1hwWP72suhudyK0W/5kZAwkCvbt\n\tzE045h5Jfn0ztrs1txTSXjWiABAZYBiDPWVvrxMIIC9lMlOKUkq6bY2a2aQaHpI49dw7JXk+ilX\n\tnCQb1Tn10QWOQPhVjAILuFyfoqzMQvp75gW3oySih2ggkn0ugb63JXZNulDQVsfS9","X-Gm-Gg":"AeBDiesBJD923LK0cHEOlJycppOeRXw/G/pxWnmTjH5pB9RmLJVdvPyHGNl7uBfv7ca\n\tyACCf+2OnkjSinVToFW+112g+OKhKtOwaLq7TwO2SO31fEda6GV2+Ma71XA5Ddv+sDKQuw09Ewf\n\t6fGtcY7A/r8/CsoG8uV+IOo1k9aoX2OeOyssKw2JitNo0vdB3n3Bp54ZfwZvkTJcbsNRD5VpmvF\n\tAXUo5kfTZASJrwUtNDGYusgxA0f39Des9PClei1MZ4mFmxTJ8iorYI9Vm626RSQQTf4aE1yjqbi\n\tQqLGh7rbwTYfJUqZBmZ9TYF2hFHFaw4cuPQAvbuZp1NasjY0LhNn9fD0K7bgsnPca2qpQisN5ie\n\tXaLZJ1VNRoX3fjq8ap34UvRL8JY4XcmKqvWfR9qIGLr+lgZXGNA3qcBuVDzy4GA==","X-Received":["by 2002:a05:6122:45a0:b0:56e:f1d2:c3ca with SMTP id\n 71dfb90a1353d-56fa587e117mr23130381e0c.2.1777292366126;\n        Mon, 27 Apr 2026 05:19:26 -0700 (PDT)","by 2002:a05:6122:45a0:b0:56e:f1d2:c3ca with SMTP id\n 71dfb90a1353d-56fa587e117mr23130321e0c.2.1777292365598;\n        Mon, 27 Apr 2026 05:19:25 -0700 (PDT)"],"From":"Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>","Date":"Mon, 27 Apr 2026 14:19:11 +0200","Subject":"[PATCH v3 2/2] 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":"<20260427-baytrail-real-swnode-v3-2-0003e4c1708c@oss.qualcomm.com>","References":"<20260427-baytrail-real-swnode-v3-0-0003e4c1708c@oss.qualcomm.com>","In-Reply-To":"\n <20260427-baytrail-real-swnode-v3-0-0003e4c1708c@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/NoTDAcsmYgBp71RFQPCa08eCDZLrsx3NrxOmhQb+WV6JL+Q9e\n /PvrPWI3IyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCae9URQAKCRAFnS7L/zaE\n w6G0D/9vQO3vVjL4oGvGOqANm4yOADnbbRmTrXxnt0HaNS2ePiUIHzIP+11cmq1rxlNgzdLs3P5\n uEf9NFzJPpQCCuy+/jjF47XrvZ/sw4IlCgyhPuCmTwcDttVtA/CqtDLM97EKyLmMG/Nd6OBoLHz\n DsGdBaIq7JEJwUDQ0aSVV28rbS1qj7hhJuSCkBuF5QiH5yY/dB5MrtuQnzVZJ61h58hObXtejX6\n iDjtPZb/cy6KPKH//q/KwhdSLuB8A7m90bECsQgslk2nLMRPWdSUTo+W0GfWK8O3cGk7OTLXm9Y\n HXz0uZqLHR6hltlMU2O7Qnh0zUf8nywg7dS3M6plhh0jvIUXaaVbRuS3V0RpopsLFcyE5gYXGV0\n jDwmkFeAU2GCMrC+4JmJKiEYbz2Wp/TGTxmuQ7tYeS3Nk/uNjkRolZ9570M+ZmX6AbHx0uUxo9D\n 2UWEY417Io21ladfzxNEDWMsYDqGeAjaKSC/O+dYsgiQfe5T90qauuGl28N+HNP6qCigk/F/Ie9\n GoJNwVuc5ryz7XvJP4rLoBeVAj32TI2T/DqJgO5NfLiTPIcU4tzul5Ujpny1OqszYkenqo0HBOv\n 5C1tdqMDtVnAd8xVLQfDh9Kdrj9cz1Bsry0XmD4AKvnqWTz7k63v5DXm2vtEIZc09m8C7Biggdq\n lO0Hm3DvTKIboRg==","X-Developer-Key":"i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp;\n fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDI3MDEzMCBTYWx0ZWRfX3a8Ym6/rDZ/s\n hGfF0pOiLLRoIr2XKDotJO0KxRn52wwcZUXelRMuFSg9b61SAx9pSjGeT2s96rhDrFEKk7BmUTd\n rl4HwKhu0i4uEO4DfHndkYhc3aaBoACK2aXaa9u2WeEvaxRI+7mMDMkh6nt7lIbblbKds+uCKfW\n 0+EyhqcBEXWaTxohbxtm3Pk0/eNYUul1SpaRauvsNzHvMu4X6eXsZDLBvs9kKEOvQcRiTyih6QE\n ljxRdIiaFdf33zmUgsiZPDo8UOsmYKXHTnuPf8WN8FRtvTZ4yZ+O5VZQFtghoKUXQ3V+TwI18jG\n yuTR3m0RXQ/W3VskgEYMRQyMPbKIJBnM0WfUUtdrLgjUreqDL74gwwCd/a1kraj/EMa1fbspvYN\n gv3Tj19TR/VXp9DzcdbzRE/ZxLq5ZKjPoft+FHcyRMhjZch9GF8DewBYbHvlTcU8iMI0aHkTkON\n S53G5hEfjms4YnH3MWQ==","X-Proofpoint-GUID":"m4m1-pZkqI62Y3Qym6QejrvLQQJDG6FY","X-Authority-Analysis":"v=2.4 cv=efANubEH c=1 sm=1 tr=0 ts=69ef544f cx=c_pps\n a=+D9SDfe9YZWTjADjLiQY5g==: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=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8\n a=6VCG6zWJw881NgsJBYMA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22","X-Proofpoint-ORIG-GUID":"m4m1-pZkqI62Y3Qym6QejrvLQQJDG6FY","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-27_03,2026-04-21_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 clxscore=1015\n priorityscore=1501 lowpriorityscore=0 spamscore=0 phishscore=0\n impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000\n definitions=main-2604270130"},"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":["v3","2/2"]}