From nobody Thu Apr 9 10:32:14 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB5913B8BA7 for ; Mon, 9 Mar 2026 12:43:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060182; cv=none; b=mTfTxhEj9RUu+t+b1u9z4nUUsZ6OXKDINoWeU0rOCfHVeMuBSgF2MWJ1Z4ZwCTvQGMdYwu+DzKVqVJAOFaQ+LNuzIcj5RmW1AtaDtofa+oOFgn4oihmYQqUOdM5B8qciN8d0fyI51dSQsf4tcaQP0M8wa2dMw6kDOD+K2Bou5Go= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060182; c=relaxed/simple; bh=pDUWjkvolt9aVkc3THlY+/toYWrYnAZq17Xs7p08jFI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ppIUDurTVp8918aSXCoj+WS+U/5naFG5E0km+HsIY6OTlamLSwdUVRs7f5LChtUScynmQe7HCVUqYqlh5P9FpNco695KiXVL2XkNOCs+coKjiHbZifThBCl0fvPf64xvjtdrQ8Z3uWWcorMNvl5GW/rbX10WhrvhLXKWHJqT72A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=EooQVqgb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=isxEtZd6; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="EooQVqgb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="isxEtZd6" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62989XQO197322 for ; Mon, 9 Mar 2026 12:43:00 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 5ki8nOv3ANbax1Y6/vTexXDa+QoJVJxEjtgFCiUIaSw=; b=EooQVqgbfcPpySxv m2i6sOpnTEEQdx2jOro/AlgXy6C2bNrvGDod1I847LdocEyOefQ28R2S8pFwWQir uvoiC+I8m720WemF2vtR+X84LmydBk1k389NhinCxGLOF7Ty5LJV9mEZQvJ95oI3 twqKL8qJe55gfuwRJIUvZPFryRZIKy1jhaE+tLnLk4rHZXuiQj8lozc3rsg3oDNF ryd0MeUzjSipNWyz88X7gV95S6Who7OtsBhC0d4M78A/WHL3d6TwgxVyaAbaA/Iu WKQvNL9OXnSaQTYEYYCBBH6feKUUoHqFWRjUjO3aFbS70wq1Z7hSmXImvxYZ+/69 KQiAwg== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4crc3vddch-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 12:42:59 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-5091782ab06so143185081cf.0 for ; Mon, 09 Mar 2026 05:42:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773060179; x=1773664979; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=5ki8nOv3ANbax1Y6/vTexXDa+QoJVJxEjtgFCiUIaSw=; b=isxEtZd6kA2oxZl6CoO9IPTtdMDiGBlRiaxuRL3WTuRsNBnhyAFC4eI0uZW0dMfq20 RoJFDXe9xS01fZmS2De5yGZgV86K2Ju/066AvK6ipYH8Z+acn3vfQG/jUUJ8c+22yjYf L0w5GL84R88bG50S+4uGPQ4Gg/6YM4DSymG2tQ0TBXt2W57Rb2giwksy1YMhdBnZJEJT InCvhoSxo8ihvDQPF9V4qfJpgdeINWjV4AYofTX62smq0M8M/+vuPxa7szWIopt+9UbV nt8bPUMfsb2SZJEsRGdy6t/WP8LLbdIR9IlfGDPeYYy76is8HCVCyI7KzAGjy8LtbK7w XRxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773060179; x=1773664979; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=5ki8nOv3ANbax1Y6/vTexXDa+QoJVJxEjtgFCiUIaSw=; b=s/ipldHn2Q60lcUpwP1rrQlJw+g2i6hIpuqrBQDXxiMWwOLP2wqZs9cwLH2hPIs2al l34hB5W8WQS5SKHUSAFSvUASx5mRnqgmsdKdRc3CuQIBnuAez7z1OBfEqlhT+NmSGUA+ 9cGYTtXK8ZzoU85f8Qd9sCHWCmYfS4EwHVeK2hpx7EWz7xeQeovl4QHhiCO4g1ZYoSRZ AyydbCHNWpgtTHpyVb+YR5mTW7jG4M6/tGsgP+L/gRNMCOxU9GHuTV2uZ3Ek7aBa9FvC AxOvi020aHOKgb1wUPPmItnBT7kSiWWvjhFM6OgtZaQv2QNxnbxsbroNjRkvoKltMV4n ImpA== X-Forwarded-Encrypted: i=1; AJvYcCWIFc6p3H6i6nrR/733eGpklch+s8Dhbs8pzCIQiheErHWgqZbRbxq64niY2QhzclZcw0zBxjGdTGfL8PA=@vger.kernel.org X-Gm-Message-State: AOJu0Ywg06UwdKJXxqTvmMYx51Ip5BJyx33TMqR3J4O5lHKe4v2Fg7Lj PV5U2typQbSDC+PPp4ZZ6wDZTMjUkcqxHso32LD9Wb4nJ/BblM5ZJdthZzlxp0gAooRxCdyjuxM EpEXP+a10gKZr49NZH+oBurURqZQLh+2L+aR8dSZzlSQRdjoFWafknvOGEnKSET/SAYg= X-Gm-Gg: ATEYQzxHrZ8qCS8Du5q/ZYhFTb+N5NPhj1U0XO1PgchwGoNuYbMlQkAYDNT843f5qd7 X8sZyJF2tXX6nvdlMtGmGW/RzccODaaLedHOM1SL2NeRfpOh957Uh5iCuexDed5w5sn7eWCZjlW yLm55k/ONJaChNtZURbnQgCvv+dlx0nsdVxhRC52tZbx5eJGiI1a9hlxekZydQu7nK6MUpFOCUb 9zy6mmJqNcqSB35zVF62odWWaMZW8bUZU0ySOh5GPkThrj0gL1FSiqi1hvdYKwdOQfqSUSz/zO/ 16kFZSDwwl7xgThWcecDu6T3i0pxwFECl9SIcBQNEzZBaMnnqsxF99Zm1Ny28EkO2gAenrawz03 zNqbX8YFOmO5VTGNzxkVxz5b6yRn69uRiunDIJ7i/e0rk7MQraRqG X-Received: by 2002:a05:620a:4688:b0:8ca:d5cb:6839 with SMTP id af79cd13be357-8cd6d4eb0b2mr1430386685a.65.1773060179278; Mon, 09 Mar 2026 05:42:59 -0700 (PDT) X-Received: by 2002:a05:620a:4688:b0:8ca:d5cb:6839 with SMTP id af79cd13be357-8cd6d4eb0b2mr1430382285a.65.1773060178835; Mon, 09 Mar 2026 05:42:58 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:494a:62d9:d95b:cb98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48539e574b5sm107803345e9.8.2026.03.09.05.42.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 05:42:58 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 09 Mar 2026 13:42:37 +0100 Subject: [PATCH v2 1/6] gpio: of: clear OF_POPULATED on hog nodes in remove path Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260309-gpio-hog-fwnode-v2-1-4e61f3dbf06a@oss.qualcomm.com> References: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> In-Reply-To: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , Frank Rowand , Mika Westerberg , Andy Shevchenko , Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Jonathan Corbet , Shuah Khan Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-doc@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski , stable@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1222; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=pDUWjkvolt9aVkc3THlY+/toYWrYnAZq17Xs7p08jFI=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBprsBHLgjRTayL4zBT+0z81rGSe5BLprPXLVoTZ c0qyL+zRzOJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaa7ARwAKCRAFnS7L/zaE w96MD/wIM8Ae5r7/4bUltHDXNPzgPX7vyGNhGbK6AaMf07BOU/jE0U5P9hc/NHek5F2elC2U8iM QmDj7wCBLAWMTYRi6Yuq8y3pviPQeJRFJ0Ln20uOsJyWjxGO3Nn5VFPVqxkXy/oKLum3KbtN459 IVkRFAWynXtLJ6PM2XqnIkfyAewfvCCzICzeDYCcctbLpFU0JO+VsgBM7umdeklPD4X5h39WoEh D0zV+aZXhFDBEWZocpWFvovm3yDhnYFCLCIUkN5ICKQAlcRzP7+k4m3AEcWnaj3qnitspwbiqJr S9zTMKuo6K8KhXi3yjaxOmvpbSp8FoOLDRGAXrbdXrbosn2u+gqOu4nMvWeLlQy/ybuTAgS/UHC 5v+y0RCNhSQXMEYR2fErUgNjiF2w/nVEeEZHDh7sOS47NboWLM/hHJ7L+8788JQUr4UQRy4gVd9 qWG75cRoqYWZD1fwDRCoMIR/NOeW80SJPctYaKqwOCEmym0AAqQ3Zd+lRYmJaOZ3vlr92UZYhXU pUDp7cD89aYD6C1vZAJmWaemI/pmDIQ805+5Th0Iqg/W98EFIHrPfgDtuEkJKVzf8cIBrh0tC9F jDIisj7PVHz5AR+GOXTfEKu1wBjhg9pprHOfMGhMwSqZsrqXQYIkANiX4K/LNe5ICSbxMutEcut EGXzIu8rNHKjW8g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: RWYcOBvZnIpAWf0iXcV4E9-FgrhAxeq4 X-Proofpoint-GUID: RWYcOBvZnIpAWf0iXcV4E9-FgrhAxeq4 X-Authority-Analysis: v=2.4 cv=OOQqHCaB c=1 sm=1 tr=0 ts=69aec053 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=EUspDBNiAAAA:8 a=wIkqWORfvUmHQsOhi0cA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDExNiBTYWx0ZWRfX6hQbpmVnSkuV c6Xv/HCpfAY92KIuZFjrWm0XHtGkSkUXAAtSLD3tOSlNX95oRNUqOLps3vZU5G8AkJHYcpVfn8T zI7tXv+uefJMmlz2yZ5GmJv/P79EL8QofRedC//c1HpK3EOVUl7QcQoiN8q7pSzan8x/aXMN9JD j7qffzX/XjjQ3UaMz7SjSNy3cDd+svB0/rUj4piKBmru4aQTi2IB9vUT1E9VC6JxkAH3wBo+22l WTNhkBOWGMQFL7BjpYhWqwYjpcu+ZYbl8jhwMkZ+zMVzxyTbaiRa05oFQc8qvrrfi3kb3g8Le2p EEDarbx/KNa+Xj81IzCDZdseZgaP3nOWRzMY+vXhe9bvMQyfwHTcRVox97Lya/a3S2V+hYm89o7 vJkrsV8YP9enRoDb2POyupUgrBIHdiAdFkeH9zn3HoOVc+wMWJo2e/OliMaLROqK42xNxW+fRFQ HRQXpsznnAvfZuAg49w== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_03,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090116 The previously set OF_POPULATED flag should be cleared on the hog nodes when removing the chip. Cc: stable@vger.kernel.org Fixes: 63636d956c455 ("gpio: of: Add DT overlay support for GPIO hogs") Acked-by: Linus Walleij Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-of.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index ef1ac68b94b78f09e768cc740e893632b8817505..08b7b662512b825086cd70440be= 98b59befc3ffe 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -1210,7 +1210,14 @@ int of_gpiochip_add(struct gpio_chip *chip) =20 void of_gpiochip_remove(struct gpio_chip *chip) { - of_node_put(dev_of_node(&chip->gpiodev->dev)); + struct device_node *np =3D dev_of_node(&chip->gpiodev->dev); + + for_each_child_of_node_scoped(np, child) { + if (of_property_present(child, "gpio-hog")) + of_node_clear_flag(child, OF_POPULATED); + } + + of_node_put(np); } =20 bool of_gpiochip_instance_match(struct gpio_chip *gc, unsigned int index) --=20 2.47.3 From nobody Thu Apr 9 10:32:14 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAFAB3B961C for ; Mon, 9 Mar 2026 12:43:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060185; cv=none; b=Z0npJ/hF7xxO0wt8cV6wK8LIosgYjEAh0X0oAQ4aqPsxzmRBAyqN4AhtFkh1PpIg87jb83yubydmgJOIhaQHCrrOgXloUhSaWokiq8jYX0R3hyMMsnR5k6pLZZfknBCZknfvFWPwAX0EMgL/h5rsU5/uFovyYl45pTFy17SPJFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060185; c=relaxed/simple; bh=OUFgb8Qz0GK1/gaXT/PVQevLnAPBCQbbPDyCF7sXUFQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dP9KpFPEgssU/IkOH5WbevGaRi18zGcwyjqxssTr63FW82WTaIgrPwJo9p5w31K9C/h7LQTTRIY7/AvgYDIMKR9kpTB5Uf3EFaWbk6Pd5iuPSAN0GsYhahZu60Pkfju1CKCu1ptH+5cChM/FXaE+scPkfJIIuFaWV1QS5W7Noh8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=dDTyFeQe; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DtcfYXfd; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="dDTyFeQe"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DtcfYXfd" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6298WB3s3773182 for ; Mon, 9 Mar 2026 12:43:03 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= kXfMPd1XaYmr+m0Ul6mK7sQ3BrtNsGiWSmTvc1lddOY=; b=dDTyFeQe+yLivZB+ oWYCktrl4Pg7N8S4oGzl4BGFM+dvOSA37OYEof0aGeXasiKo+GE8iTPJo44CB1EL ROYVPkt4czHhowA74QrVWKtMu+UVrBOHW1Eo5Fo9/T2YGJFJ9IM11sCiOzcZK+0Z o/yKgfc1Z9n7nsTLBgbtpsWiG5W2eCwwhWAYyTiicwf98THeev+6jGjUPuIGMaQv tf6iuXwW7+54NON/iCwyZVbTELXPEW9tGk8o214un8mDR+eTTPItvwIhxJzOaN2m wp+KOPiz4PmD6unN2tB/eVeLvby0kmSm7GTSfEVfiWZDvJXJLf0l1zg7PixB6DTA W8XL8A== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cstsa8uqg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 12:43:02 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8cb706313beso1485284285a.3 for ; Mon, 09 Mar 2026 05:43:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773060182; x=1773664982; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kXfMPd1XaYmr+m0Ul6mK7sQ3BrtNsGiWSmTvc1lddOY=; b=DtcfYXfdeXBcuW/E0jHqVo5YKzjJOZwuivAwYZ/I4d8qBEhmZOSfABOheKe986vuDc TdeuIP7MVj53NSz2UF/1DHZQgvesullWhnPgbj2uV2u9O5LHaiDzT+vDYmSdkm+TfpQF n52pAIBT5l8ZIytjLBehvdUO/WjaevIGqDGpEbk1ndspxhkyprzTRXnZ4aYCJvc4airH ABSLNaatEJzKQaJH5z+rih9WVh7b1xAXzkKHnVjDfE7WItnncUXQcUcVt5ZW12o918ND LAkmCpMlysARIl6DKNmKiOCVtCKN46t7VNtbURupRFwtAnTcNik1wUFKApEuwJ+IGtrt mdrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773060182; x=1773664982; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kXfMPd1XaYmr+m0Ul6mK7sQ3BrtNsGiWSmTvc1lddOY=; b=DrKpFB7uoC11HdAsSJZk/5/49/3fnra6MgxlLrKtCGxyNPjikQUj/MmCfQPHarcotE AERsxVS/2YHKFELtDRx5SuovDy3heMOT9xVH3OgsGl1g+WnIKxfTdl7qef2pyrv8l+rT O9KaAC+EG/ClmygWNQRLNniCrZaQnoirsLclqyT7r+0hJPu5gv5YPEc/EpK1vUJiNh8k PugktqR+z1nMg5f/fuXALPFp22BShG+KcdpMKsJtoRCDqZRHq/m7TfDxu4Orq7SywSBH RqwLvIKgSPLyg+ndh9CL4Nyml4O50lMZnPhVBwdC0XCkmeE/h6uWYR8FpCHgvfiyasOD WUxg== X-Forwarded-Encrypted: i=1; AJvYcCWrbJd1WwVwBsvujy7P8qkQUsKcnjtJonLlP1MuyoKqNKI0iAqAnbBVAbnj3NNDTkXMcHW0N5NjYZxc2Xo=@vger.kernel.org X-Gm-Message-State: AOJu0Yzu91hDStVLrDj3GFrVmLqMNz1JcCZWyi7t2CS0C4ZCAvuNLt89 RPeSLbL9xwe1WHAd+z1hgtU67P+rq1k0oWba5QljeqgEcZfpvC70xOquuA6sQzIAo8FKJ+Qxrdt Mqj4LCN15YdCBu7fuGAY1R8jP3qX0Rv2tvCE96SgUZe5JqVIrIZ2fcliqokEZtbFWM/I= X-Gm-Gg: ATEYQzxcCgRceP6qAU3X4e0tf/wVCzs3HhMGNcM5/lElIVtDJEqjwGJfvroXQ72jA1a HoXujdAAonGTTJ5k373xak95tOlAWCtA5mVcflh7lEDi7VlDrfnAQK8w0Xo/uJe4xWXTKJAWDff C9HYs9mm6wa9Z890czxf1Uvrc70Mc0lO336a7xXRjo2oANmXVVn0YLVatfYj2c3ds3iOv5LUvX3 a3hY6UGnps0+DTifj2KrSy3pB3NCoYgraH9/fKpWBFwkLIBSBNhoDUpYDJtKvqGF/5s77ZFNPcF 13DJdA+kJ8SGlT1+IRyv4hfMoxXhA504dfine0lrOLwTNFKePritQ/gl5F16jVptNDAizuUqxS0 84e+75ZojC7rjGdEQ7+9bFuhRjvA8a8M7d58h3jYFGOUIAUTs7JWK X-Received: by 2002:a05:620a:bd5:b0:8c7:a53:4d17 with SMTP id af79cd13be357-8cd6d36d2c8mr1380873685a.21.1773060181887; Mon, 09 Mar 2026 05:43:01 -0700 (PDT) X-Received: by 2002:a05:620a:bd5:b0:8c7:a53:4d17 with SMTP id af79cd13be357-8cd6d36d2c8mr1380867385a.21.1773060181326; Mon, 09 Mar 2026 05:43:01 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:494a:62d9:d95b:cb98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48539e574b5sm107803345e9.8.2026.03.09.05.42.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 05:43:00 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 09 Mar 2026 13:42:38 +0100 Subject: [PATCH v2 2/6] gpio: move hogs into GPIO core Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260309-gpio-hog-fwnode-v2-2-4e61f3dbf06a@oss.qualcomm.com> References: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> In-Reply-To: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , Frank Rowand , Mika Westerberg , Andy Shevchenko , Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Jonathan Corbet , Shuah Khan Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-doc@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski , Mika Westerberg X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=14044; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=OUFgb8Qz0GK1/gaXT/PVQevLnAPBCQbbPDyCF7sXUFQ=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBprsBId9xcXzbOth7Gymbfaqjt9FRe/KfnJPjDp N79jEB98kuJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaa7ASAAKCRAFnS7L/zaE w32CEAC8sYufJWmJsDubtmeQtDqgG+SKFTxD8RZzD13supY6t4IIE/KWCXM0gTcC3W6PjEDHNfP KNCQIiRTOdAomxOA6EqCH+yCZ11JB4IGziV2yWdLndApXo1Ed8xDy7SWPZ8G0/vHSBs/boYUoPK nQPUEsPZ0ISPv6tgv55CH18vSkiefuBCcr5bJg4s8JdwyVqkB83541iB/8Jvi+yT6JtbV5EVqv8 aHAJcuvw2BbG9Rcf6UypwtNZbY1gycDWmzEAIb4tKn0qLkRKUH+RhCNGR2YGBNUXrLJeSq3QTxy l2nlWHBIb+k/tK1Clv9x9MBRLOZeBHxjOZ9oSh+wnsOe4086HiPRXsHagBoIFYyYjvK9dXWHw+E RLl3I1yrTBvSg60lM7nACrMZn+tgg771KEvO2zzT9Q2fUjLdLBQy5WD+rPoxYAbaYY8a4ul5ziK lVHD/sNM7IAO35s62jap6cE2dnEQ/wQPCK10EeQOd/WiLvaWOjPUjfRbZU6+Qkw814I2DAdVzn/ E8S09juG5h310jQhecvQJj/ExFwi68IOn8bb53jxUemooNiCRPwnQPubxPjtVb5Zw4eV50R5WJ+ fkjRDsxOe9e0HJGFpNedW4poL828rzAEOPZF/t7FS1rgdZwSeFLrm2Dw/Fo/f/qLR+M90pwf7pF 6NdvOsvUttOfNNA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: JgGaw6xjzCepFzS91tR6g-InC2PYEl4g X-Authority-Analysis: v=2.4 cv=I+Vohdgg c=1 sm=1 tr=0 ts=69aec056 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=QyXUC8HyAAAA:8 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=WIzJRdd3zNLVKdG7TxsA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDExNiBTYWx0ZWRfXz/vP2y3WSm57 W6J/RGolieGAW+fYLvfqnXJTZA0n/V+thzWAkgAe1GQey75clF55SNYSnIqn5EE/ssI/tVA+cUE UKA4zaks0+CwmJ+sYoKI064PpCgR7xJtmgmhs00D/VYo5jSbCOO9QvAAKnN/UNyWoLQhWnJLFe7 jClEGvZSUy2VU2MU/pJw/qMtx9+rhEPU9uxYxzmbPZ+94TH5Zd7Lo1cUSlEVhpQ/gAjnQoVkzHp GU7bXovJujpNv7HIc5fKIzjoHDjZP6/6l41887OSJ9nXUBFfc0sq7NhKnq95Y8wXCmNIFXKuxYz gC3Z1bbvlV7SYKP0yAxTbzKU0iAe8ACTNcrmTO9YEf1MPgpT1THPLMUhHrmbK9IUrJzMSYpBX3B pYN7A01ceuOfeqOmdTvW1djR51XOEhubp2ewSUwYS1l1Q62/Se6lZ9F7OAATawx6PybZ0c4e8be 6gQ0+ukDPhI6HoK7bBg== X-Proofpoint-ORIG-GUID: JgGaw6xjzCepFzS91tR6g-InC2PYEl4g X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_03,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090116 Refactor line hogging code by moving the parts duplicated in gpiolib-acpi-core.c and gpiolib-of.c into gpiolib.c, leaving just the OF-specific bits in the latter. This makes fwnode the primary API for setting up hogs and allows to use software nodes in addition to ACPI and OF nodes. Reviewed-by: Mika Westerberg Reviewed-by: Linus Walleij Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-acpi-core.c | 70 ------------------- drivers/gpio/gpiolib-of.c | 143 +++++------------------------------= ---- drivers/gpio/gpiolib-of.h | 10 +++ drivers/gpio/gpiolib.c | 98 ++++++++++++++++++++++++++- drivers/gpio/gpiolib.h | 3 + 5 files changed, 125 insertions(+), 199 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index ced6375d1badf9e113e708ce4bc9f83071f9acca..09f860200a059b1d17c652b9aa6= 6a49abea3cb4f 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -1220,75 +1220,6 @@ static void acpi_gpiochip_free_regions(struct acpi_g= pio_chip *achip) } } =20 -static struct gpio_desc * -acpi_gpiochip_parse_own_gpio(struct acpi_gpio_chip *achip, - struct fwnode_handle *fwnode, - const char **name, - unsigned long *lflags, - enum gpiod_flags *dflags) -{ - struct gpio_chip *chip =3D achip->chip; - struct gpio_desc *desc; - u32 gpios[2]; - int ret; - - *lflags =3D GPIO_LOOKUP_FLAGS_DEFAULT; - *dflags =3D GPIOD_ASIS; - *name =3D NULL; - - ret =3D fwnode_property_read_u32_array(fwnode, "gpios", gpios, - ARRAY_SIZE(gpios)); - if (ret < 0) - return ERR_PTR(ret); - - desc =3D gpiochip_get_desc(chip, gpios[0]); - if (IS_ERR(desc)) - return desc; - - if (gpios[1]) - *lflags |=3D GPIO_ACTIVE_LOW; - - if (fwnode_property_present(fwnode, "input")) - *dflags |=3D GPIOD_IN; - else if (fwnode_property_present(fwnode, "output-low")) - *dflags |=3D GPIOD_OUT_LOW; - else if (fwnode_property_present(fwnode, "output-high")) - *dflags |=3D GPIOD_OUT_HIGH; - else - return ERR_PTR(-EINVAL); - - fwnode_property_read_string(fwnode, "line-name", name); - - return desc; -} - -static void acpi_gpiochip_scan_gpios(struct acpi_gpio_chip *achip) -{ - struct gpio_chip *chip =3D achip->chip; - - device_for_each_child_node_scoped(chip->parent, fwnode) { - unsigned long lflags; - enum gpiod_flags dflags; - struct gpio_desc *desc; - const char *name; - int ret; - - if (!fwnode_property_present(fwnode, "gpio-hog")) - continue; - - desc =3D acpi_gpiochip_parse_own_gpio(achip, fwnode, &name, - &lflags, &dflags); - if (IS_ERR(desc)) - continue; - - ret =3D gpiod_hog(desc, name, lflags, dflags); - if (ret) { - dev_err(chip->parent, "Failed to hog GPIO\n"); - return; - } - } -} - void acpi_gpiochip_add(struct gpio_chip *chip) { struct acpi_gpio_chip *acpi_gpio; @@ -1321,7 +1252,6 @@ void acpi_gpiochip_add(struct gpio_chip *chip) } =20 acpi_gpiochip_request_regions(acpi_gpio); - acpi_gpiochip_scan_gpios(acpi_gpio); acpi_dev_clear_dependencies(adev); } =20 diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index 08b7b662512b825086cd70440be98b59befc3ffe..bc56003025258eba29c0897c43b= 29101fd490b17 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -735,139 +736,26 @@ struct gpio_desc *of_find_gpio(struct device_node *n= p, const char *con_id, return desc; } =20 -/** - * of_parse_own_gpio() - Get a GPIO hog descriptor, names and flags for GP= IO API - * @np: device node to get GPIO from - * @chip: GPIO chip whose hog is parsed - * @idx: Index of the GPIO to parse - * @name: GPIO line name - * @lflags: bitmask of gpio_lookup_flags GPIO_* values - returned from - * of_find_gpio() or of_parse_own_gpio() - * @dflags: gpiod_flags - optional GPIO initialization flags - * - * Returns: - * GPIO descriptor to use with Linux GPIO API, or one of the errno - * value on the error condition. - */ -static struct gpio_desc *of_parse_own_gpio(struct device_node *np, - struct gpio_chip *chip, - unsigned int idx, const char **name, - unsigned long *lflags, - enum gpiod_flags *dflags) +int of_gpiochip_get_lflags(struct gpio_chip *chip, + struct fwnode_reference_args *gpiospec, + unsigned long *lflags) { - struct device_node *chip_np; enum of_gpio_flags xlate_flags; - struct of_phandle_args gpiospec; + struct of_phandle_args args; struct gpio_desc *desc; - unsigned int i; - u32 tmp; - int ret; - - chip_np =3D dev_of_node(&chip->gpiodev->dev); - if (!chip_np) - return ERR_PTR(-EINVAL); - - xlate_flags =3D 0; - *lflags =3D GPIO_LOOKUP_FLAGS_DEFAULT; - *dflags =3D GPIOD_ASIS; =20 - ret =3D of_property_read_u32(chip_np, "#gpio-cells", &tmp); - if (ret) - return ERR_PTR(ret); + args.np =3D to_of_node(gpiospec->fwnode); + args.args_count =3D gpiospec->nargs; =20 - gpiospec.np =3D chip_np; - gpiospec.args_count =3D tmp; + for (int i =3D 0; i < args.args_count; i++) + args.args[i] =3D gpiospec->args[i]; =20 - for (i =3D 0; i < tmp; i++) { - ret =3D of_property_read_u32_index(np, "gpios", idx * tmp + i, - &gpiospec.args[i]); - if (ret) - return ERR_PTR(ret); - } - - desc =3D of_xlate_and_get_gpiod_flags(chip, &gpiospec, &xlate_flags); + desc =3D of_xlate_and_get_gpiod_flags(chip, &args, &xlate_flags); if (IS_ERR(desc)) - return desc; + return PTR_ERR(desc); =20 *lflags =3D of_convert_gpio_flags(xlate_flags); =20 - if (of_property_read_bool(np, "input")) - *dflags |=3D GPIOD_IN; - else if (of_property_read_bool(np, "output-low")) - *dflags |=3D GPIOD_OUT_LOW; - else if (of_property_read_bool(np, "output-high")) - *dflags |=3D GPIOD_OUT_HIGH; - else { - pr_warn("GPIO line %d (%pOFn): no hogging state specified, bailing out\n= ", - desc_to_gpio(desc), np); - return ERR_PTR(-EINVAL); - } - - if (name && of_property_read_string(np, "line-name", name)) - *name =3D np->name; - - return desc; -} - -/** - * of_gpiochip_add_hog - Add all hogs in a hog device node - * @chip: gpio chip to act on - * @hog: device node describing the hogs - * - * Returns: - * 0 on success, or negative errno on failure. - */ -static int of_gpiochip_add_hog(struct gpio_chip *chip, struct device_node = *hog) -{ - enum gpiod_flags dflags; - struct gpio_desc *desc; - unsigned long lflags; - const char *name; - unsigned int i; - int ret; - - for (i =3D 0;; i++) { - desc =3D of_parse_own_gpio(hog, chip, i, &name, &lflags, &dflags); - if (IS_ERR(desc)) - break; - - ret =3D gpiod_hog(desc, name, lflags, dflags); - if (ret < 0) - return ret; - -#ifdef CONFIG_OF_DYNAMIC - WRITE_ONCE(desc->hog, hog); -#endif - } - - return 0; -} - -/** - * of_gpiochip_scan_gpios - Scan gpio-controller for gpio definitions - * @chip: gpio chip to act on - * - * This is only used by of_gpiochip_add to request/set GPIO initial - * configuration. - * - * Returns: - * 0 on success, or negative errno on failure. - */ -static int of_gpiochip_scan_gpios(struct gpio_chip *chip) -{ - int ret; - - for_each_available_child_of_node_scoped(dev_of_node(&chip->gpiodev->dev),= np) { - if (!of_property_read_bool(np, "gpio-hog")) - continue; - - ret =3D of_gpiochip_add_hog(chip, np); - if (ret < 0) - return ret; - - of_node_set_flag(np, OF_POPULATED); - } - return 0; } =20 @@ -922,7 +810,7 @@ static int of_gpio_notify(struct notifier_block *nb, un= signed long action, if (!gdev) return NOTIFY_DONE; /* not for us */ =20 - ret =3D of_gpiochip_add_hog(gpio_device_get_chip(gdev), rd->dn); + ret =3D gpiochip_add_hog(gpio_device_get_chip(gdev), of_fwnode_handle(rd= ->dn)); if (ret < 0) { pr_err("%s: failed to add hogs for %pOF\n", __func__, rd->dn); @@ -1201,9 +1089,10 @@ int of_gpiochip_add(struct gpio_chip *chip) =20 of_node_get(np); =20 - ret =3D of_gpiochip_scan_gpios(chip); - if (ret) - of_node_put(np); + for_each_available_child_of_node_scoped(np, child) { + if (of_property_read_bool(child, "gpio-hog")) + of_node_set_flag(child, OF_POPULATED); + } =20 return ret; } diff --git a/drivers/gpio/gpiolib-of.h b/drivers/gpio/gpiolib-of.h index 2257f7a498a10d69980f0c8afd48d5b661632d87..218cfe5bc4ac31a7c48306a08b4= feafc06c0ad55 100644 --- a/drivers/gpio/gpiolib-of.h +++ b/drivers/gpio/gpiolib-of.h @@ -10,6 +10,7 @@ =20 struct device_node; struct fwnode_handle; +struct fwnode_reference_args; =20 struct gpio_chip; struct gpio_desc; @@ -24,6 +25,9 @@ int of_gpiochip_add(struct gpio_chip *gc); void of_gpiochip_remove(struct gpio_chip *gc); bool of_gpiochip_instance_match(struct gpio_chip *gc, unsigned int index); int of_gpio_count(const struct fwnode_handle *fwnode, const char *con_id); +int of_gpiochip_get_lflags(struct gpio_chip *chip, + struct fwnode_reference_args *gpiospec, + unsigned long *lflags); #else static inline struct gpio_desc *of_find_gpio(struct device_node *np, const char *con_id, @@ -44,6 +48,12 @@ static inline int of_gpio_count(const struct fwnode_hand= le *fwnode, { return 0; } +static inline int of_gpiochip_get_lflags(struct gpio_chip *chip, + struct fwnode_reference_args *gpiospec, + unsigned long *lflags) +{ + return -ENOENT; +} #endif /* CONFIG_OF_GPIO */ =20 extern struct notifier_block gpio_of_notifier; diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 581d00c128b608c30f45c12e968c15628e205870..b993cdae79e6dc389ca42ed079b= 3e39d1f9fed5a 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -948,7 +948,7 @@ static void gpiochip_machine_hog(struct gpio_chip *gc, = struct gpiod_hog *hog) __func__, gc->label, hog->chip_hwnum, rv); } =20 -static void machine_gpiochip_add(struct gpio_chip *gc) +static void gpiochip_machine_hog_lines(struct gpio_chip *gc) { struct gpiod_hog *hog; =20 @@ -960,6 +960,98 @@ static void machine_gpiochip_add(struct gpio_chip *gc) } } =20 +int gpiochip_add_hog(struct gpio_chip *gc, struct fwnode_handle *fwnode) +{ + struct fwnode_handle *gc_node =3D dev_fwnode(&gc->gpiodev->dev); + struct fwnode_reference_args gpiospec; + enum gpiod_flags dflags; + struct gpio_desc *desc; + unsigned long lflags; + const char *name; + int ret, argc; + u32 gpios[3]; /* We support up to three-cell bindings. */ + u32 cells; + + lflags =3D GPIO_LOOKUP_FLAGS_DEFAULT; + dflags =3D GPIOD_ASIS; + name =3D NULL; + + argc =3D fwnode_property_count_u32(fwnode, "gpios"); + if (argc < 0) + return argc; + if (argc > 3) + return -EINVAL; + + ret =3D fwnode_property_read_u32_array(fwnode, "gpios", gpios, argc); + if (ret < 0) + return ret; + + if (is_of_node(fwnode)) { + /* + * OF-nodes need some additional special handling for + * translating of devicetree flags. + */ + ret =3D fwnode_property_read_u32(gc_node, "#gpio-cells", &cells); + if (ret) + return ret; + if (!ret && argc !=3D cells) + return -EINVAL; + + memset(&gpiospec, 0, sizeof(gpiospec)); + gpiospec.fwnode =3D fwnode; + gpiospec.nargs =3D argc; + + for (int i =3D 0; i < argc; i++) + gpiospec.args[i] =3D gpios[i]; + + ret =3D of_gpiochip_get_lflags(gc, &gpiospec, &lflags); + if (ret) + return ret; + } else { + /* + * GPIO_ACTIVE_LOW is currently the only lookup flag + * supported for non-OF firmware nodes. + */ + if (gpios[1]) + lflags |=3D GPIO_ACTIVE_LOW; + } + + if (fwnode_property_present(fwnode, "input")) + dflags |=3D GPIOD_IN; + else if (fwnode_property_present(fwnode, "output-low")) + dflags |=3D GPIOD_OUT_LOW; + else if (fwnode_property_present(fwnode, "output-high")) + dflags |=3D GPIOD_OUT_HIGH; + else + return -EINVAL; + + fwnode_property_read_string(fwnode, "line-name", &name); + + desc =3D gpiochip_get_desc(gc, gpios[0]); + if (IS_ERR(desc)) + return PTR_ERR(desc); + + return gpiod_hog(desc, name, lflags, dflags); +} + +static int gpiochip_hog_lines(struct gpio_chip *gc) +{ + int ret; + + device_for_each_child_node_scoped(&gc->gpiodev->dev, fwnode) { + if (!fwnode_property_present(fwnode, "gpio-hog")) + continue; + + ret =3D gpiochip_add_hog(gc, fwnode); + if (ret) + return ret; + } + + gpiochip_machine_hog_lines(gc); + + return 0; +} + static void gpiochip_setup_devs(void) { struct gpio_device *gdev; @@ -1209,7 +1301,9 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, = void *data, =20 acpi_gpiochip_add(gc); =20 - machine_gpiochip_add(gc); + ret =3D gpiochip_hog_lines(gc); + if (ret) + goto err_remove_of_chip; =20 ret =3D gpiochip_irqchip_init_valid_mask(gc); if (ret) diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h index 8d1a762f9d11bfc29c9102be02d7b640aa7daad3..dc4cb61a93187659d943f4ce362= 2bc1755e9fd42 100644 --- a/drivers/gpio/gpiolib.h +++ b/drivers/gpio/gpiolib.h @@ -23,6 +23,8 @@ =20 #define GPIOCHIP_NAME "gpiochip" =20 +struct fwnode_handle; + /** * struct gpio_device - internal state container for GPIO devices * @dev: the GPIO device struct @@ -274,6 +276,7 @@ int gpiod_configure_flags(struct gpio_desc *desc, const= char *con_id, int gpio_set_debounce_timeout(struct gpio_desc *desc, unsigned int debounc= e); int gpiod_hog(struct gpio_desc *desc, const char *name, unsigned long lflags, enum gpiod_flags dflags); +int gpiochip_add_hog(struct gpio_chip *gc, struct fwnode_handle *fwnode); int gpiochip_get_ngpios(struct gpio_chip *gc, struct device *dev); struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc, unsigned int hwn= um); const char *gpiod_get_label(struct gpio_desc *desc); --=20 2.47.3 From nobody Thu Apr 9 10:32:14 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9C713BA223 for ; Mon, 9 Mar 2026 12:43:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060190; cv=none; b=G1Y9cSG/6T9VOLQA9tXOWdt/3vQjej8sh6Dmzh5Jua/4l7KzM7DYVSg2CBcmLgrJfCRP2jfEgMbqq6ZmW9YRKkdy5F3T65eEWF3ZL1onqiNQDxI232zgj46zQVyhlhBLl+BT/BR2v7qugb+1Q8jHRDXg9m6yqGC482sPDGLuA7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060190; c=relaxed/simple; bh=fRjGaFumkIPM5sHwzMJVqJbOfM3P51uoAqXe0hcwzCE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dd9yxZtgGSJuGkvwqFT9MtZC/wfulLwmd5rPeLx4IZaITN7e8986TxDkFe5FL+xpcCPxlonlaa6BB0dc13dOIto7NxcP3lyCwc/5b5dG8jJRHdqTdNm0pESNCOISKVdb2Y+nTmzciGwcQKJe9Qeq5JhP88a7Dekvm3CflQg6QsI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=IHv+fPDp; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Sp9/QGv7; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="IHv+fPDp"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Sp9/QGv7" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6298S8UH3462862 for ; Mon, 9 Mar 2026 12:43:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= uQgxK+sZo0pv6EN5kq/1WnDmQHdicuSmR6PjheX+D7U=; b=IHv+fPDpkk8TLgUN eyuc/FpBmb4kAwPz6oCOD+WpIH1kno9hetM4L7AYmWcEgWH0DpvOXIFCl0H2pKui OUok74JIMDw2JzD7d+CASfFLN0seZl5fc1cDSjPpikdaQfWfwsYTgfrjwpNkbare UT4ecsRGUy6PJ4xRObqh54ASOeUPS0aydIvdzLqfgPXJyNlgoLS0vwBDPHpnv6jo oRdahdg3ppwuqCJgMnaUQm5rQUTiHP+ZkSNJSjEmMMoQPMT45LJ/ymc6cS4IjAbD 4bbsc03wpy8pOEV8uOWAfHJGbsvu0SBOPPEE4QtUSI/Pwcha9AUvnBnxQ4FnFEi4 iKL5xg== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4crcd8dbhn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 12:43:04 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cd8b37d4b2so499959685a.3 for ; Mon, 09 Mar 2026 05:43:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773060184; x=1773664984; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=uQgxK+sZo0pv6EN5kq/1WnDmQHdicuSmR6PjheX+D7U=; b=Sp9/QGv7qjWnXLhpMBHPU2IhLw7fjJ/tV7IVqhgG8wPnvBWkThMcjSZ8jZXjZhw5Zw XKDmpLh+5zFKSCZg6nGctecDv4U+Bf3ANTK1uobmAiv9jO2CJ2mUoRb+4qvTSghbcXdh KgSqBptTP8/qgA13IZeMAj8o3o6LiAF7FTun9O7MH+Zi/PUp8aRcOqRRb6anV0zQ9rEo xTQOAg2EMhzCufc+jsEL6R89nAKeJRPXAFpK6oEgVCkTYsyqwMYS8x/Fl3hYv6K50j6n cPQZnsiEfxXKIt+eqNmtGgr5zluujEAj9EvCWwaEiGNKncbqndCcgYqysp7fyV3dRkfY aPGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773060184; x=1773664984; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=uQgxK+sZo0pv6EN5kq/1WnDmQHdicuSmR6PjheX+D7U=; b=ZIE3s0F8J7Xc1BtjvQ2LIfTd2ByxANpJZ+6Lhgs9WIvd14Aaie/xZanmGThcPeMIFi N5ieVGK77ibY2fgV7Rtks0pcfKt96wa8vW1mlsgFzX3onk8Sutg51q7elYmVeyoGiLgu K7X82ds1w8PNLAc910dkZs/vPsOnptOBktPkyCLYfDL4DekbheArnpmqwX7Km2mfIyfW ukqREOuHwRbY7xxH3QAatgvxwnU4pbSsTYulOLr4Wqc6zLFqz/YwnJ9XI80v2ATprrVu Fh+jM+87kl8O0oVkXg8XWnnrA4ssHsjwi3yum8lh4lhuPih0ywGj6LPIy0aMdy+WLrl7 e+XQ== X-Forwarded-Encrypted: i=1; AJvYcCUuw3LLpPCbxCW350Cd7jiQMGYNAVgL6z3NNXEx62tg1c0XKJ8RI1HIQcAd4HsruQTANUPGOnHYK67c0eE=@vger.kernel.org X-Gm-Message-State: AOJu0YyAhskFxrB5ESQhqHOUZil9V2CnpHKQY/WyE/NWj1whVRIQv3PH EImvpSN+scRlYykgsRU272vzogeJGEh6s8XqbNewyvSwcyiYxrhxHkScJMMzjFD05zcRkLDL9QL x6GRetICpWF//TbHR3OqTqVOqaCBTOqKBmL9gF6+53EhdyVkKNIb8AY3H9GaoqN4F79M= X-Gm-Gg: ATEYQzwEG01q+SbDUlU2MQlr5r6ifQGQFuYjWIATWt2mFmSoKTJxqNhc8+IhedpeEfv FvhIvzTnnwPRLzp1zFL1kt6cZ9yufcF60YJ00eE5A33PA84+kheU41M4RIdkwT/AfC9xaTylfyy KC2eXD/kZSBYSz84U6YPbeEBs9EL7KB6zKMOEXK05z/s2o27H31GyiwTT7nmBWcaYIQO+Va3GrX n+DeAGj2Bn9/lZzfhLqTmEvuC8CfdmIpRY2khrE4jXUo8PiAhb9pFDL92GfOEmnBsgQa06fGVoo wmzh7caJcxj8Q4vO/lzrqnJXuKYsom9Lz1vy+D7MsYXOcn4zrIj58FuTmR0JIDG7qrkYmK/wR6Z vTDOrFoxzZZ8DQkt98K74eH54vQRrApvFOv1xJJfd511flZSEW0Xo X-Received: by 2002:a05:620a:489a:b0:8b2:dcde:b670 with SMTP id af79cd13be357-8cd6d515a4emr1308510785a.70.1773060184223; Mon, 09 Mar 2026 05:43:04 -0700 (PDT) X-Received: by 2002:a05:620a:489a:b0:8b2:dcde:b670 with SMTP id af79cd13be357-8cd6d515a4emr1308505885a.70.1773060183666; Mon, 09 Mar 2026 05:43:03 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:494a:62d9:d95b:cb98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48539e574b5sm107803345e9.8.2026.03.09.05.43.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 05:43:03 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 09 Mar 2026 13:42:39 +0100 Subject: [PATCH v2 3/6] gpio: sim: use fwnode-based GPIO hogs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260309-gpio-hog-fwnode-v2-3-4e61f3dbf06a@oss.qualcomm.com> References: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> In-Reply-To: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , Frank Rowand , Mika Westerberg , Andy Shevchenko , Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Jonathan Corbet , Shuah Khan Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-doc@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6257; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=fRjGaFumkIPM5sHwzMJVqJbOfM3P51uoAqXe0hcwzCE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBprsBJXQFZO+NRl/S5LzA+qQAwFD56PV0C8Dpzo Bt9U43MMBGJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaa7ASQAKCRAFnS7L/zaE w58ED/9w7/bKWzQRUd1R/MISkd+LsKPQNzedK+n4MFp9gHbgr/C18awbRdMU+vwaD5A4XbI8bIR /HoOGV+8CxRMHeEr9ML5c2vfnrquThtJnTy5lOruJ0z+q5XzyWRdWDBfoT47GF/SVAmrzOWLSvy i0E6mUh/zy23RrXwEWIKq8VHGA9niYBKO1TNFB9Yf2Tmel4vVvxtQMv9ytuAr9hESZ20FtFvEsP 0IrDctLoWPVb0vwYm3qKAbWnFvwcOorkD3fxl2vNdXFOurMvtoO4EU0Fo7Zsn3Oqqsy7dvy43EZ fHrsYt7JALp0KdIf7pHjEemadWvk7Z97rF2oL3ftLjVceM/3hQuKY3KG1E+BPm2Wptf65ROSRP5 4cwZHZY8lt+Tuq8ZXcREOCN+7VyHE//3zIvEHRuKfqjKm4ObsQQurkdMSpwUv12WQaXPGGzEKBQ rg42+gAdjPdoLL9pNS78gLjtLwG09YYCEaqmZqWmmJFR1gq/pgoTm2gunDa5OF6TuFcvuhvN9k4 oMF26Li6lxowY2aJPsojvOm83X7DzTqZyiMEP5slXT9xRYkHB+UMoRr+2bXdhT2jKSgX3n8tOzf 5Hwa5UasAbzhTlm+8+w7tQdY+egeF6HQ97o/RPH0qn0y91CLxti2FrboMeUl5B5DOYPhyp9O0VK L8bQNwyfQ4k86Xw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: bigxJueEIcciUZxkdxK8v3Nrj9lSfMbc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDExNiBTYWx0ZWRfX1tGqlNMEsoKa l2iwaIiHsWhqeOYxaYZFvkV+KSzElyE71oVoLI2MA5l8tEk3CDNA2R/1uMMMyHmlw5//zjGEnHt Xt5EFAq8jXXXqLDtTdQ7yzGxD0wCDVFrtZFEHFjwNZOhU1UPTUHHAv8Ke9yyToLhLFrKDZaMj+c Won+F5bt0sNEKKu/D7a4aNoADWLuDrSmSsu6AlToPOadNeL9V6KX7LTJv7AeKLrv60P2tHWlv6m XEUkONRlm53B700RcA51u2O9TPPGHl0XRFCuh/x1b9uNFplPPnOQn9r4qYnQCO9SFaPeKtg36zV wUL9tI83CrWkURfqVlZmsEeEN7KYLgnBQUCcfMCriybSi0uqHPeoELPNXNGfeMCYvqVkVn09Jxa tgPuQuMatQldIvlJBL6+iwYsxrimfVKQ6fC9Z9eyPR+pbvkKlOpJQnH7w+qt0iayLBloZclgD9G UHUa4+XORnOfXG76w+A== X-Authority-Analysis: v=2.4 cv=O/w0fR9W c=1 sm=1 tr=0 ts=69aec058 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=EUspDBNiAAAA:8 a=WMYs8r0CEYFgD91zWOgA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-GUID: bigxJueEIcciUZxkdxK8v3Nrj9lSfMbc X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_03,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 spamscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 impostorscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090116 Convert gpio-sim to using software nodes for setting up simulated hogs instead of legacy machine hogs. Reviewed-by: Linus Walleij Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-sim.c | 162 +++++++++++++++++---------------------------= ---- 1 file changed, 56 insertions(+), 106 deletions(-) diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c index 13b87c8e6d0caf62ce311dad409a9b4d3f091caa..51bcbdd91b4b027b7a340971a11= cce5280ca1295 100644 --- a/drivers/gpio/gpio-sim.c +++ b/drivers/gpio/gpio-sim.c @@ -40,6 +40,7 @@ =20 #define GPIO_SIM_NGPIO_MAX 1024 #define GPIO_SIM_PROP_MAX 5 /* Max 4 properties + sentinel. */ +#define GPIO_SIM_HOG_PROP_MAX 5 #define GPIO_SIM_NUM_ATTRS 3 /* value, pull and sentinel */ =20 static DEFINE_IDA(gpio_sim_ida); @@ -561,8 +562,6 @@ struct gpio_sim_device { */ struct mutex lock; =20 - struct gpiod_hog *hogs; - struct list_head bank_list; }; =20 @@ -774,102 +773,6 @@ static void gpio_sim_set_reserved_ranges(struct gpio_= sim_bank *bank, } } =20 -static void gpio_sim_remove_hogs(struct gpio_sim_device *dev) -{ - struct gpiod_hog *hog; - - if (!dev->hogs) - return; - - gpiod_remove_hogs(dev->hogs); - - for (hog =3D dev->hogs; hog->chip_label; hog++) { - kfree(hog->chip_label); - kfree(hog->line_name); - } - - kfree(dev->hogs); - dev->hogs =3D NULL; -} - -static int gpio_sim_add_hogs(struct gpio_sim_device *dev) -{ - unsigned int num_hogs =3D 0, idx =3D 0; - struct gpio_sim_bank *bank; - struct gpio_sim_line *line; - struct gpiod_hog *hog; - - list_for_each_entry(bank, &dev->bank_list, siblings) { - list_for_each_entry(line, &bank->line_list, siblings) { - if (line->offset >=3D bank->num_lines) - continue; - - if (line->hog) - num_hogs++; - } - } - - if (!num_hogs) - return 0; - - /* Allocate one more for the sentinel. */ - dev->hogs =3D kzalloc_objs(*dev->hogs, num_hogs + 1); - if (!dev->hogs) - return -ENOMEM; - - list_for_each_entry(bank, &dev->bank_list, siblings) { - list_for_each_entry(line, &bank->line_list, siblings) { - if (line->offset >=3D bank->num_lines) - continue; - - if (!line->hog) - continue; - - hog =3D &dev->hogs[idx++]; - - /* - * We need to make this string manually because at this - * point the device doesn't exist yet and so dev_name() - * is not available. - */ - if (gpio_sim_bank_has_label(bank)) - hog->chip_label =3D kstrdup(bank->label, - GFP_KERNEL); - else - hog->chip_label =3D kasprintf(GFP_KERNEL, - "gpio-sim.%u:%pfwP", - dev->id, - bank->swnode); - if (!hog->chip_label) { - gpio_sim_remove_hogs(dev); - return -ENOMEM; - } - - /* - * We need to duplicate this because the hog config - * item can be removed at any time (and we can't block - * it) and gpiolib doesn't make a deep copy of the hog - * data. - */ - if (line->hog->name) { - hog->line_name =3D kstrdup(line->hog->name, - GFP_KERNEL); - if (!hog->line_name) { - gpio_sim_remove_hogs(dev); - return -ENOMEM; - } - } - - hog->chip_hwnum =3D line->offset; - hog->dflags =3D line->hog->dir; - } - } - - gpiod_add_hogs(dev->hogs); - - return 0; -} - static struct fwnode_handle * gpio_sim_make_bank_swnode(struct gpio_sim_bank *bank, struct fwnode_handle *parent) @@ -917,12 +820,61 @@ gpio_sim_make_bank_swnode(struct gpio_sim_bank *bank, return fwnode_create_software_node(properties, parent); } =20 +static int gpio_sim_bank_add_hogs(struct gpio_sim_bank *bank) +{ + struct property_entry properties[GPIO_SIM_HOG_PROP_MAX]; + struct fwnode_handle *swnode; + struct gpio_sim_line *line; + struct gpio_sim_hog *hog; + unsigned int idx; + u32 gpios[2]; + + list_for_each_entry(line, &bank->line_list, siblings) { + if (!line->hog) + continue; + + hog =3D line->hog; + + gpios[0] =3D line->offset; + gpios[1] =3D 0; + + memset(properties, 0, sizeof(properties)); + + idx =3D 0; + properties[idx++] =3D PROPERTY_ENTRY_BOOL("gpio-hog"); + properties[idx++] =3D PROPERTY_ENTRY_U32_ARRAY("gpios", gpios); + properties[idx++] =3D PROPERTY_ENTRY_STRING("line-name", hog->name); + + switch (hog->dir) { + case GPIOD_IN: + properties[idx++] =3D PROPERTY_ENTRY_BOOL("input"); + break; + case GPIOD_OUT_HIGH: + properties[idx++] =3D PROPERTY_ENTRY_BOOL("output-high"); + break; + case GPIOD_OUT_LOW: + properties[idx++] =3D PROPERTY_ENTRY_BOOL("output-low"); + break; + default: + /* Would have been validated at configfs store. */ + WARN(1, "Unexpected hog direction value: %d", hog->dir); + return -EINVAL; + } + + swnode =3D fwnode_create_software_node(properties, bank->swnode); + if (IS_ERR(swnode)) + return PTR_ERR(swnode); + } + + return 0; +} + static void gpio_sim_remove_swnode_recursive(struct fwnode_handle *swnode) { struct fwnode_handle *child; =20 fwnode_for_each_child_node(swnode, child) - fwnode_remove_software_node(child); + gpio_sim_remove_swnode_recursive(child); =20 fwnode_remove_software_node(swnode); } @@ -977,12 +929,12 @@ static int gpio_sim_device_activate(struct gpio_sim_d= evice *dev) gpio_sim_remove_swnode_recursive(swnode); return ret; } - } =20 - ret =3D gpio_sim_add_hogs(dev); - if (ret) { - gpio_sim_remove_swnode_recursive(swnode); - return ret; + ret =3D gpio_sim_bank_add_hogs(bank); + if (ret) { + gpio_sim_remove_swnode_recursive(swnode); + return ret; + } } =20 pdevinfo.name =3D "gpio-sim"; @@ -991,7 +943,6 @@ static int gpio_sim_device_activate(struct gpio_sim_dev= ice *dev) =20 ret =3D dev_sync_probe_register(&dev->probe_data, &pdevinfo); if (ret) { - gpio_sim_remove_hogs(dev); gpio_sim_remove_swnode_recursive(swnode); return ret; } @@ -1007,7 +958,6 @@ static void gpio_sim_device_deactivate(struct gpio_sim= _device *dev) =20 swnode =3D dev_fwnode(&dev->probe_data.pdev->dev); dev_sync_probe_unregister(&dev->probe_data); - gpio_sim_remove_hogs(dev); gpio_sim_remove_swnode_recursive(swnode); } =20 --=20 2.47.3 From nobody Thu Apr 9 10:32:14 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FC6F3B9614 for ; Mon, 9 Mar 2026 12:43:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060191; cv=none; b=Hte3G4bQFsN/CHnbqWZ/CfKzQGAU6NGWw/O23EAyuSyorD2E5noUrhRTgrIFaaWuxk3f0qj4xD8r6Vs0UTP3vzYvYxaEg4ESugW815J7/cYXtp/bQbT/Iit+RT0uU4m+SD6ixXFxWNjfSimkh1o19LNn7sHeP30ce2/qxHopGc8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060191; c=relaxed/simple; bh=657u5VcsdCwH5K3uh0YA0oSgSY82ZXzp8LKA80Hy5Pc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RzdpG6oXcRkDbady4YXLPZLLlXY33PimZSs++imE33Vr8O75Esj0xhj0E9M/UkFXUxsUZsIMqfz+5KATBZ0gwNVRBTJ3s9ZZh+hdgGL86tZDb5tPVTVtL5idpPNde+Ntd0kmFD9ibkpILt+meXHKwmKPFv+Ju/JeFWcod0e8WaI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=bqmHL/4V; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KsRaZrwc; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="bqmHL/4V"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KsRaZrwc" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 629C5b68526725 for ; Mon, 9 Mar 2026 12:43:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= SQwazpAS/p8xBP8ywiNVLcoVJEL1G6gSbs/PG65TAEg=; b=bqmHL/4VSNwRWM8b zRkOwuPJXJcW6NCQgD7/GLLOPdIJx/ohQONcGW6ViXOnvgJn6xsI0ZJVyeREi792 XaWQuUNMQQltO7/iZLEc+JwdlnQAIeqsUUvnkkZEf69jnbPH3fGeX3tgn8bnDdWk YouR8i1kZZ7SnOXQzUTrfHZLTMfvLTwOMuaBiokL9Yb7r8dZrdVXesdVziwlGIMu eO7DFHN47nbr/+w/CjDYnHcGCE0aAcMkxuaCiqm8uggZo0mj1PYqLgKi10tOm370 qyqgTwG0jEQLGNKeJYx8uxHBqLa2apnj9oZwXGUsE7InwozSFb4Lih/SuM6T/ALF /kO0Cg== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cswwkg416-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 12:43:07 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cd827a356aso699916985a.3 for ; Mon, 09 Mar 2026 05:43:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773060186; x=1773664986; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=SQwazpAS/p8xBP8ywiNVLcoVJEL1G6gSbs/PG65TAEg=; b=KsRaZrwc9L4twFk7N8+iRsoRruHTQXrMe6ELEY6JEsrl+VeyFZeihC/SGO81sZF/7S zeLucgF/C5Jv/AboRUMrgdOK6b1NlQDJz8rpDl4jH9k6T4FOkW9fG6qvy3bBeG2WC0VF Pl1aLcMzrWzU4lICPDaD/RQKaTP26Au7ZLxtU+4REfJx+EfTEJpkS5+5t6NsGpuYs0sU lpfLKMlrz5dJTL75IHOhbCrJriQBGwdtJteIztxui5uYUm0+kGuUI3XxzZS32KliXLVm 9CT1eII34/36wgNcOQdl4w61+UL5+fgXx9ERUWmBuBMrNXMyJcoSH+K/aBxplTgTOV4c /8MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773060186; x=1773664986; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=SQwazpAS/p8xBP8ywiNVLcoVJEL1G6gSbs/PG65TAEg=; b=rVzOPEgU7+ovtv0D+EPQRAD7P4jRTjKxQfX/a4wiEAdjyY2/bIoGdcdwiYByprLTXX nC+Bi0+rsJCGp3jkxACzw2hME20AvgXUZQxVZopK04qBo/NmCH/ZpFnq2pum6kF1Q5hK tXMmCppAD6L5mBARgt4Nvw8feJ89zs6KFC6xj+b2kYFA0/iE+Xd4MtYjhEMMWpGn98VU mVonDvZwxq21zAPRTX8k6sPjExC+LMpUXvjFHvJB5iQ8sJ9q8zl2ir7bkTu5PX3yQKUI 0CiJvvKuD24mNong8nAl+UIiqiixAFNQXRMtWhQ3t8k3y3uGkeuUsDzYAzIbNBb7ruG1 3BLg== X-Forwarded-Encrypted: i=1; AJvYcCWSxgswALE8XVQXXxmT+XEvBLxdNlSvDUKBbSDK1Tx/1vcZq74nGyp8yvbTpQHBWd6Tw2MKqKt0Xgrk2LM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy60L5NF0euIymf5zMvK56CdAM8/MUPmCBbzpccfFBhcPIWK1oe N8QA3waPm1kvgCTzkQoHddtLPELnk3Cjs+kU4jDAqpL+81VeLsXSASgKIUV22kh5dNVBZZsNIPx snvHAn/0b9e3zqlDQkNLytX44/CYORbK4eL7kC9TMX1Ya+kTTUIdRaPOzpYYhK4Piccw= X-Gm-Gg: ATEYQzxb+vmXOGN7KSpR3LLqnxgB+1zWIVxS78qKaFFql0+0kRtm3AsX5JVzpczvtNA smXtfx8FsBzgTmgpDqbot01YpF7JfUgWDe6P1m2YG+c9OCPObfG77xYUjeiXrsAYkpp79+SK8Yj K7R0C5nRdau0J54J2iP6Ni0lbunCLrQQKmyicHotT6ez0NgMbsHaLab6wWK5qKo7IwIgT/8Ds/z hjXWpYQZK4Uae5GDQJ84poFOz1Vbws6ZSmGF3KiXbJFiZ+XSJfyZpmKsQDOTtRGFgHdeXJM9zab oHEbRHV5r69MjF0g9VKO4cR6ghLaFWA7lpOeuUVyuvCCBJjlUANH2Ks52aSIYb5XUcal1DvBWrQ 3y5iDWICAWABtC3cK+uRrEKgHByUnshRE2jzhha/m3qokH0mM0gwo X-Received: by 2002:a05:620a:4002:b0:8cb:3e86:d98b with SMTP id af79cd13be357-8cd6d49b8a4mr1509510685a.70.1773060186315; Mon, 09 Mar 2026 05:43:06 -0700 (PDT) X-Received: by 2002:a05:620a:4002:b0:8cb:3e86:d98b with SMTP id af79cd13be357-8cd6d49b8a4mr1509506985a.70.1773060185863; Mon, 09 Mar 2026 05:43:05 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:494a:62d9:d95b:cb98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48539e574b5sm107803345e9.8.2026.03.09.05.43.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 05:43:05 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 09 Mar 2026 13:42:40 +0100 Subject: [PATCH v2 4/6] ARM: omap1: ams-delta: convert GPIO hogs to using firmware nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260309-gpio-hog-fwnode-v2-4-4e61f3dbf06a@oss.qualcomm.com> References: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> In-Reply-To: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , Frank Rowand , Mika Westerberg , Andy Shevchenko , Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Jonathan Corbet , Shuah Khan Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-doc@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski , Kevin Hilman X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2531; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=657u5VcsdCwH5K3uh0YA0oSgSY82ZXzp8LKA80Hy5Pc=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBprsBK0MJaZuCEcNXm/8LzHDpWPQN1bHIaz1w2v TCs2lep/p6JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaa7ASgAKCRAFnS7L/zaE w1F+D/4u8ii/H1cE8fIlALXnOq3ppXSQii0gcpwUkzxyl2aq8K2iP9cVIuRXmWGSQBm8jrGtlLI uEKZW8XuSSvPq0v1kKz7ocOoUX62HTnzfjnWVp/fqmt62t2FXJaf4e877htmTDMfuu4WAOJv3Vi aycFNT86SGgLs7TNaQR8pKpxpVs8K2OXwZkFBdAiWtYE9m3fmtVYO142796Ldt9ZJk2hLEqQQ1s Dlm8xOOMtF6PBpBCUjy1N7795nGEocaF28EagBGJ3E+hzSPDkhV7e7BETT2xqAqUV2+D5LtYYm4 WvG/bcLqvWHzhuvepS3qaRzRBwdbPEDzKgK6NEt/FcN1zjEuPX+rNE9LXgmjOiqKD72AIg/nvMZ JePKfzK5cfgOM17iAOXpQCpnNgYdWqUGxZpFzfTMTBPEKTfgtoCF2wCTUWnVJg/Z6HE5YyTGfSS rFR+lZgSRmmoDexhb9G3i2US0rL4NW2s70miKvDL/8OGOurFkHImhCc4C1+HNNyhNKPOCmoP7es e1UNoclkcwxf4CIvOsOcVEV7yejTycZD3CzLRdAZ8poSH8lgPEqKzss/XQfySnVXDe1UmDWgnmV gLqXZvGZoHK5xrjEX5+eyErEz7y58ofVkYqFx0icSyFPJR6v3IrCuoCLMWqToRxANhsryXTsWJI DAiNr1FHZFSJGJA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=cZ/fb3DM c=1 sm=1 tr=0 ts=69aec05b cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=IpJZQVW2AAAA:8 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=EUspDBNiAAAA:8 a=5psZAbpHc07LGj0ksyMA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-ORIG-GUID: hEC07ZWXAsrPZ3OCKoqRJGN2AMUsnBa1 X-Proofpoint-GUID: hEC07ZWXAsrPZ3OCKoqRJGN2AMUsnBa1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDExNiBTYWx0ZWRfX0INMhSQNKjn5 XdSue8z9cS6lU8P1nVe2WqZ3FL4q2+61zd8mihvzfV+eF7B0zndRWeViakU5FrwPlCEbkznrs4n xBBaYHIUXBdv98gG1tpnE5d7dKwmJE81H30T2lf8iHq3A45o2Cf/8VIQuavH6ov5DVfGQAU18Gi jYYmMaJfSYWFMvKua/Ek4Xe6EhX4Pjit22EyZyat9XBMdj1xDUyAFQMw1K/ZBZYnV1hdK0YhxnT ch/50RUWI1UKZlr5wpEdmZsFsS6r//91ZPwDo3SyqbfjOUEynoYTxQuQOC+KDTjtXJUVrFuWvA5 P8TTZDJc+ZGF6ybSePiaQUiHW60P3jbDNJc5txfV440DK2C+EsBHXyEJqssL1UfsQPVfWn7wrOZ 18GdgQgSkjYCbLmm+Dh9R4TqYNxuLNu0ZWv/K8k9IDubJm4QbR38jgpcCx37qEYpI4idlnTAuVX TNLMcYuxW5H9AbF0Kdw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_03,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090116 Setup a software node hierarchy for the latch2 GPIO controller defining the required hog and stop using legacy machine hog API. Acked-by: Kevin Hilman Reviewed-by: Linus Walleij Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- arch/arm/mach-omap1/board-ams-delta.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/bo= ard-ams-delta.c index 16392720296cd224732450c85419c35bbab506f6..1bec4fa0bd5e8bfc58103d1f24b= 22176707fd26f 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -556,10 +556,30 @@ static struct gpiod_lookup_table *ams_delta_gpio_tabl= es[] __initdata =3D { &ams_delta_nand_gpio_table, }; =20 -static struct gpiod_hog ams_delta_gpio_hogs[] =3D { - GPIO_HOG(LATCH2_LABEL, LATCH2_PIN_KEYBRD_DATAOUT, "keybrd_dataout", - GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW), - {}, +static const struct software_node latch2_gpio_swnode =3D { + .name =3D LATCH2_LABEL, +}; + +static const u32 latch2_hog_gpios[] =3D { LATCH2_PIN_KEYBRD_DATAOUT, 0 }; + +static const struct property_entry latch2_gpio_hog_props[] =3D { + PROPERTY_ENTRY_BOOL("gpio-hog"), + PROPERTY_ENTRY_U32_ARRAY("gpios", latch2_hog_gpios), + PROPERTY_ENTRY_STRING("line-name", "keybrd_dataout"), + PROPERTY_ENTRY_BOOL("output-low"), + { } +}; + +static const struct software_node latch2_gpio_hog_swnode =3D { + .parent =3D &latch2_gpio_swnode, + .name =3D "latch2-hog", + .properties =3D latch2_gpio_hog_props, +}; + +static const struct software_node *const latch2_gpio_swnodes[] =3D { + &latch2_gpio_swnode, + &latch2_gpio_hog_swnode, + NULL }; =20 static struct plat_serial8250_port ams_delta_modem_ports[]; @@ -684,7 +704,6 @@ static void __init ams_delta_init(void) =20 omap_gpio_deps_init(); ams_delta_latch2_init(); - gpiod_add_hogs(ams_delta_gpio_hogs); =20 omap_serial_init(); omap_register_i2c_bus(1, 100, NULL, 0); @@ -693,6 +712,9 @@ static void __init ams_delta_init(void) platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices)); =20 platform_device_register_full(&latch1_gpio_devinfo); + + software_node_register_node_group(latch2_gpio_swnodes); + latch2_gpio_devinfo.fwnode =3D software_node_fwnode(&latch2_gpio_swnode); platform_device_register_full(&latch2_gpio_devinfo); =20 /* --=20 2.47.3 From nobody Thu Apr 9 10:32:14 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5BC483BA25C for ; Mon, 9 Mar 2026 12:43:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060194; cv=none; b=TtHzObP6SKpiv21TDX+PPqT/Ac6YAzCRh0jKbMu5f7NG+VcZOMsMbi2cp7Yepjoy3ZXfsDGLGMxSEjB6Jwbgdica/y7sU8zq7UaNvqWC1OMlVKizJvTd8Tbvk42rBJFz0CIebQyS6vIQBB8qGeEDRkRmySt9lEQ90wl6pCSqW1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060194; c=relaxed/simple; bh=4BnEUtmMiOiwXU1lQlZ9yMyJWb+fawm1Al0WC9Bh4bA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=epi/Z9Xkaggu1DdMein4GIKnb/yvboF/6fYOKaJ0gB7oCq9LONCk+Qcd5983R5+lTlIYNW6acQcB3bmn11Mz6IUamrKiJEFuvHaoRZlT9VXcJA3V762dieOuU/fyMRZxnyZ10Dv1Yd2+CNf8miXLmCdl90OTNNCRyptzm/vIISo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=a71wUr1p; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=X8PFY3vb; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="a71wUr1p"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="X8PFY3vb" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 629A6cVl2195081 for ; Mon, 9 Mar 2026 12:43:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= l5nIeS9X1YbhohJRIffAt90+vLpOah8/bJUe3CSaJyU=; b=a71wUr1pe4R5IEa8 iSygIp4wnj5qqTTJPqGOhK+aYYo7Cw2zreCRcO89hfNNn3LzGoViM3kFxy4dtvtb klXS5g3nnay5U+/kKE2PJStRpbmuBpEpqs7f55uUHXRlCg1WVwVw3huhJpYKI6mI RU48Bv9snpSqu/J7BEd3HbcmiTyLIliDKgMrQ6Hd3R3qt+GWK+/n+wP+PqVowCk4 7Ut1SVvEpVrjiJACPEuonRem4fz16fQvrjWl/NbqeX4oua2BIoh1L2BHDtdgUJYO f1pI+VpqKAhZw5BS3uqHmqYqmTdWVvGfPvt/zAeebjQXUQHIA5MmFEI1M4e7tHCd wmhs4A== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4csv5u8g57-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 12:43:09 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cd858e8709so1006257785a.3 for ; Mon, 09 Mar 2026 05:43:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773060188; x=1773664988; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=l5nIeS9X1YbhohJRIffAt90+vLpOah8/bJUe3CSaJyU=; b=X8PFY3vbfxCqnt1Ny/ouL+ra97T8KmmsMNTOfb96vxKPqmxkSgazmFQ4tksbRuCRml nvrCZY9R0HcW2Uz56ZElv7/ifk1hcolPDNiPcTx2NWIE/y9zQTQc+tuoGHzVwC5uNebc XqN422AfIIpJUxk3LBWchqONGHz2AE+5bStfq4LiHeKsbytlxrFWK3DtinLz8skNmBbQ qmYbg5NAZZCe9++TG2EMe0bPQdVawyr0CpYE4oaeoWM8rTP+I0mo+WZAfmNx97+71YyH NC29AswurEfGa1h550wsfNUet/NtDbAeAp11zvVGUFIqqwgu2uvjD1CRjwnosgOWOZYn /UiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773060188; x=1773664988; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=l5nIeS9X1YbhohJRIffAt90+vLpOah8/bJUe3CSaJyU=; b=v1MjYuirfXQdhsZjy24OTWEkdv2MqElDXXVI1xXweJ6dALT+s0sFWsfe7fOAzQJt+X YCk0quJfCbE6BZ+bgp41qwb2+MqA0oxGz8HVHcBNDRb9ICtAY8EBlWtetjPetDVHBpMa YLwT+Ib4VwS3lbG4VMc43ey6ANA/KXCJBt0/jBquLzJsqgR69GDviIhLQVl+JTcgWSZz AN9xF5kY95lcrvlrWwnO+p8SYjckJVLo9s65zlsI3M3mIY9Z2PABL30Gou2QHqeulmLY YYWpCXvun+sBaW7QQwbOjIrUaw3M0tE7tjDWwN+LYdBNAYN+Ch5Ej/xPlRPoF9B3QQ8u dUJA== X-Forwarded-Encrypted: i=1; AJvYcCXX+fnQwy3m5hxSBi3zai2Jh5tUU90Qcx/o6kwWY40sPlXN3LLrza3WQHK3bMMBGIZpkR+17/zJJb0mOLk=@vger.kernel.org X-Gm-Message-State: AOJu0YyVU6QJtiNuN7MIDIqPGRkcY5+PM+Uz8W+QSIdmjBDHfWRZuRlh Sjc6FghAbhgWzHT41z/0uyVg25PaQgdF/+QKbZnVmoNdcZsYqKfCX2JeOho6/RIqPpqfeLZmE+M YenIAwG6IoB9vVz7zHcxM0xuXEC9GflI30QriLkeJbD3/hyvizsmpFrTJDGxfpOCtEbjw1ol+8+ 4= X-Gm-Gg: ATEYQzzN4ehdj5S4sJIMO/fpXJ0lAfB1Shtq1PE/IgHAuv5jibYF8PL6LEG604F6tGA +o5OcUpHnlC8m3QLSwT9YB6gPzSoK5NLRQxoenSTItHdRUDLVVWML6WyM6puDlGKx/LFpn03IlN y99urmLdSFrS0To740G144WhkYP2qJgDVDiZgSJrrZIOUjy+iybJEOb+BvD1G0zlXB3DTzX+ZTg oT4iXIK3Dm+t1LmuRWy48TrrH0oUQkCNKJCGm2Z203yoa/78a69AM2xArV+KLRg8zIlkd1ymN4T 3nX2NSpnGoLX3vpHYQV/flF0WhuC9U3xZhTixyVWkUSgxo8INdZirPRC3DCgC13qg/eS9w042hG yOCs4fWMJJ3O10JU04MkLMiiszYGXGWUATQHbXfqCOqODUQh86Plg X-Received: by 2002:a05:620a:4586:b0:8cb:72b2:2a01 with SMTP id af79cd13be357-8cd6d42728emr1388186585a.18.1773060188411; Mon, 09 Mar 2026 05:43:08 -0700 (PDT) X-Received: by 2002:a05:620a:4586:b0:8cb:72b2:2a01 with SMTP id af79cd13be357-8cd6d42728emr1388181585a.18.1773060187916; Mon, 09 Mar 2026 05:43:07 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:494a:62d9:d95b:cb98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48539e574b5sm107803345e9.8.2026.03.09.05.43.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 05:43:07 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 09 Mar 2026 13:42:41 +0100 Subject: [PATCH v2 5/6] gpio: remove machine hogs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260309-gpio-hog-fwnode-v2-5-4e61f3dbf06a@oss.qualcomm.com> References: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> In-Reply-To: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , Frank Rowand , Mika Westerberg , Andy Shevchenko , Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Jonathan Corbet , Shuah Khan Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-doc@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7227; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=4BnEUtmMiOiwXU1lQlZ9yMyJWb+fawm1Al0WC9Bh4bA=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBprsBM34X8qWjOEe+ZIX7SQxEMQg+Byczj+gL/y 9GR18NPlZaJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaa7ATAAKCRAFnS7L/zaE w+JFD/9QC8D34cOdqUHb/kJTimscTHraiX+HApC9PJcT8Ybsb9sRAhOhzU8XdLexeM9OyapI3IL ftjBOhqv7huCWsA5ChENpkS/mhZyFmjNZCpDgf9Mc/dHJIl5cKwYYIGSTNmTZ2bN4ONtQMoagfa gz7Kfe64CE3mayaZKIQq97j431fJPAYCdfusPtQZimHCFkPKPLQ/LDf0Sxl5buLpl7gQMLai36z aY1wG5XpLxhM5/NRicW56ARQg2DxOZbKGdLWkxQTkd4jVuZGNB2ef9dzmamHYRxqMVG23U81/JB XQTdpbY8q0boVBQTi8M8B/1kHxA/Hr12CQhxMEon0ZwM8WIop3/30+N1SJBJgSpXK+BaSuvrS86 yJ4nbV/KRmCwHcptGuGZ5vQ3tBKm0yRpYA7/DO9iigjXJvciROMp69HCS7Yonv4JfHFBpEzt3zZ yzO8FK+TTWKZpjdoy7vEQQHbpftOmJv5KRo5pdnZTSejilcUfNn6wZK2Opj4VvJFxwuwsZkyq5D 8E6xChvRWAn1p8FHOxz/hH9WfUkOY5KzNaCo6Ue8S4iovjzAHCIii2vnZ2bfxjIJIV4dctBKNwx YpzfO9YDXGcNa9zWTdgBBhaSwRRhymFfk3hoLBhr31i7DBeuDBHkAkDeyvLKqVoxrE5TUDi286f 08Oz7S3X9LtMxIg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: -Fbm48fDa1spjv3tl-bBZ7VfWwa1C1gF X-Proofpoint-ORIG-GUID: -Fbm48fDa1spjv3tl-bBZ7VfWwa1C1gF X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDExNiBTYWx0ZWRfX99cBBrzo/Ln6 26KnCSPtndxa8oiXFOnvIDJ28QDxd3iU6iOi8uYqnbbaahJ9caQhDztnFdyfAHgxCHCqvY79NoX AyMrqijSiC0TaUqrqZ7T5qyUj0kuGBP6sd2mue4nWB+fcbCqA9cL2fBdobbAzCyAwrYDeXqgKbj vEyF3YfXgpAWRW2OGH6tjiJ9EV7VeQt/Sxvw6aacBt7AOFCLCo2kAD+bdkDkh2qAkoa6lyaiSNj lV6u9QpuLBgLJRjYhEADTVAgFXuOpIeDs2hRoKIZcXJhJEhvq/DF4JerFAD2SWaKKK6tYYEx63f vIhBTrpjlSrvFsww5MxcgZmqL7W3WqhhBsZLRlhOfFojYJoTiBwRlY2z12XZWRmJsD1GO+Z/N/y +MFlZZQNLsNY9aTntMd+4Y98P/cHTPckhrk2uN7tPYZWCnDikilLNZaov++BDhcH1DstcjGztm2 75Z9bvwxn2L4HElZxFA== X-Authority-Analysis: v=2.4 cv=Xr/3+FF9 c=1 sm=1 tr=0 ts=69aec05d cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=EUspDBNiAAAA:8 a=EJ0IlyYtn7jNkuMCNfoA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_03,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 spamscore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 phishscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090116 With no more users, remove legacy machine hog API from the kernel. Reviewed-by: Linus Walleij Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- Documentation/driver-api/gpio/board.rst | 16 -------- drivers/gpio/gpiolib.c | 71 -----------------------------= ---- include/linux/gpio/machine.h | 33 --------------- 3 files changed, 120 deletions(-) diff --git a/Documentation/driver-api/gpio/board.rst b/Documentation/driver= -api/gpio/board.rst index 069b54d8591bdeb975a6c650d643db4f7eb98ab7..0993cac891fb5e4887a1aee6dea= e273197c6aae1 100644 --- a/Documentation/driver-api/gpio/board.rst +++ b/Documentation/driver-api/gpio/board.rst @@ -239,22 +239,6 @@ mapping and is thus transparent to GPIO consumers. A set of functions such as gpiod_set_value() is available to work with the new descriptor-oriented interface. =20 -Boards using platform data can also hog GPIO lines by defining GPIO hog ta= bles. - -.. code-block:: c - - struct gpiod_hog gpio_hog_table[] =3D { - GPIO_HOG("gpio.0", 10, "foo", GPIO_ACTIVE_LOW, GPIOD_OUT_H= IGH), - { } - }; - -And the table can be added to the board code as follows:: - - gpiod_add_hogs(gpio_hog_table); - -The line will be hogged as soon as the gpiochip is created or - in case the -chip was created earlier - when the hog table is registered. - Arrays of pins -------------- In addition to requesting pins belonging to a function one by one, a devic= e may diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index b993cdae79e6dc389ca42ed079b3e39d1f9fed5a..829774322f3595d191e13e89ef8= 3001507f6fdea 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -103,9 +103,6 @@ static DEFINE_MUTEX(gpio_devices_lock); /* Ensures coherence during read-only accesses to the list of GPIO devices= . */ DEFINE_STATIC_SRCU(gpio_devices_srcu); =20 -static DEFINE_MUTEX(gpio_machine_hogs_mutex); -static LIST_HEAD(gpio_machine_hogs); - const char *const gpio_suffixes[] =3D { "gpios", "gpio", NULL }; =20 static void gpiochip_free_hogs(struct gpio_chip *gc); @@ -930,36 +927,6 @@ static int gpiochip_setup_dev(struct gpio_chip *gc) return ret; } =20 -static void gpiochip_machine_hog(struct gpio_chip *gc, struct gpiod_hog *h= og) -{ - struct gpio_desc *desc; - int rv; - - desc =3D gpiochip_get_desc(gc, hog->chip_hwnum); - if (IS_ERR(desc)) { - gpiochip_err(gc, "%s: unable to get GPIO desc: %ld\n", - __func__, PTR_ERR(desc)); - return; - } - - rv =3D gpiod_hog(desc, hog->line_name, hog->lflags, hog->dflags); - if (rv) - gpiod_err(desc, "%s: unable to hog GPIO line (%s:%u): %d\n", - __func__, gc->label, hog->chip_hwnum, rv); -} - -static void gpiochip_machine_hog_lines(struct gpio_chip *gc) -{ - struct gpiod_hog *hog; - - guard(mutex)(&gpio_machine_hogs_mutex); - - list_for_each_entry(hog, &gpio_machine_hogs, list) { - if (!strcmp(gc->label, hog->chip_label)) - gpiochip_machine_hog(gc, hog); - } -} - int gpiochip_add_hog(struct gpio_chip *gc, struct fwnode_handle *fwnode) { struct fwnode_handle *gc_node =3D dev_fwnode(&gc->gpiodev->dev); @@ -1047,8 +1014,6 @@ static int gpiochip_hog_lines(struct gpio_chip *gc) return ret; } =20 - gpiochip_machine_hog_lines(gc); - return 0; } =20 @@ -4582,42 +4547,6 @@ void gpiod_remove_lookup_table(struct gpiod_lookup_t= able *table) } EXPORT_SYMBOL_GPL(gpiod_remove_lookup_table); =20 -/** - * gpiod_add_hogs() - register a set of GPIO hogs from machine code - * @hogs: table of gpio hog entries with a zeroed sentinel at the end - */ -void gpiod_add_hogs(struct gpiod_hog *hogs) -{ - struct gpiod_hog *hog; - - guard(mutex)(&gpio_machine_hogs_mutex); - - for (hog =3D &hogs[0]; hog->chip_label; hog++) { - list_add_tail(&hog->list, &gpio_machine_hogs); - - /* - * The chip may have been registered earlier, so check if it - * exists and, if so, try to hog the line now. - */ - struct gpio_device *gdev __free(gpio_device_put) =3D - gpio_device_find_by_label(hog->chip_label); - if (gdev) - gpiochip_machine_hog(gpio_device_get_chip(gdev), hog); - } -} -EXPORT_SYMBOL_GPL(gpiod_add_hogs); - -void gpiod_remove_hogs(struct gpiod_hog *hogs) -{ - struct gpiod_hog *hog; - - guard(mutex)(&gpio_machine_hogs_mutex); - - for (hog =3D &hogs[0]; hog->chip_label; hog++) - list_del(&hog->list); -} -EXPORT_SYMBOL_GPL(gpiod_remove_hogs); - static bool gpiod_match_lookup_table(struct device *dev, const struct gpiod_lookup_table *table) { diff --git a/include/linux/gpio/machine.h b/include/linux/gpio/machine.h index 44e5f162973eb6f6e85188f56ec34e1e3e2beab6..5eb88f5d0630f83b6a3a0e67271= 03c319e139b27 100644 --- a/include/linux/gpio/machine.h +++ b/include/linux/gpio/machine.h @@ -46,23 +46,6 @@ struct gpiod_lookup_table { struct gpiod_lookup table[]; }; =20 -/** - * struct gpiod_hog - GPIO line hog table - * @chip_label: name of the chip the GPIO belongs to - * @chip_hwnum: hardware number (i.e. relative to the chip) of the GPIO - * @line_name: consumer name for the hogged line - * @lflags: bitmask of gpio_lookup_flags GPIO_* values - * @dflags: GPIO flags used to specify the direction and value - */ -struct gpiod_hog { - struct list_head list; - const char *chip_label; - u16 chip_hwnum; - const char *line_name; - unsigned long lflags; - int dflags; -}; - /* * Helper for lookup tables with just one single lookup for a device. */ @@ -95,24 +78,10 @@ static struct gpiod_lookup_table _name =3D { \ .flags =3D _flags, \ } =20 -/* - * Simple definition of a single GPIO hog in an array. - */ -#define GPIO_HOG(_chip_label, _chip_hwnum, _line_name, _lflags, _dflags) \ -(struct gpiod_hog) { \ - .chip_label =3D _chip_label, \ - .chip_hwnum =3D _chip_hwnum, \ - .line_name =3D _line_name, \ - .lflags =3D _lflags, \ - .dflags =3D _dflags, \ -} - #ifdef CONFIG_GPIOLIB void gpiod_add_lookup_table(struct gpiod_lookup_table *table); void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n); void gpiod_remove_lookup_table(struct gpiod_lookup_table *table); -void gpiod_add_hogs(struct gpiod_hog *hogs); -void gpiod_remove_hogs(struct gpiod_hog *hogs); #else /* ! CONFIG_GPIOLIB */ static inline void gpiod_add_lookup_table(struct gpiod_lookup_table *table) {} @@ -120,8 +89,6 @@ static inline void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n)= {} static inline void gpiod_remove_lookup_table(struct gpiod_lookup_table *table) {} -static inline void gpiod_add_hogs(struct gpiod_hog *hogs) {} -static inline void gpiod_remove_hogs(struct gpiod_hog *hogs) {} #endif /* CONFIG_GPIOLIB */ =20 #endif /* __LINUX_GPIO_MACHINE_H */ --=20 2.47.3 From nobody Thu Apr 9 10:32:14 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 687033BD62F for ; Mon, 9 Mar 2026 12:43:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060196; cv=none; b=DzzWi0LZx9BsqEiQ+Nr95pBRvUmPPDuwygNeBjQHQM0CfOi652H8J8IV2qQqJPi/f3sqU770WbxDsQY2LBxwtarjqSMgz+GmSRukae11KlsGpHc83RkU7F6ksDkiHlRKN6PZFEaq/7jTM4crF2OnU4kvsfQ/7clPuvgp7J2Nj3g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773060196; c=relaxed/simple; bh=R4Ywu/pAKIvIVEZDR6pAqvPYf0v/XCn2dkIco/jqnjY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Uh5olFp7cnPrRXrNg689C/SMaVRxLxbo+RuaXFjwzsrzUxIgpUsY0g0cpJ8B5CrWyaXwr3mD9gCwnTBmQejCyyCNF49hrHc6Z/6wgDpIMr06AHV3CwsfrqpLWUne7FwScRLMWGWylKg+6oQXIGcq+8QZuHDFzoOhKOiVtCU3HUU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=keI0l7AZ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YbTNz15L; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="keI0l7AZ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YbTNz15L" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6298WB3u3773182 for ; Mon, 9 Mar 2026 12:43:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 4+44pNLvKD6wmlyUHopw7JCev4MUbKdOMecmtcoK78I=; b=keI0l7AZufa5NJR9 FxGOQJ82CTfr4mFRHFugkpK3cXX+IIsYH5lra08dS+9AK9XSvgBD5JKR2q6iWWuZ G8MRhRAlcnvmPlUbQKn47suu4v6aPEvDVZv8G8kqBAA05GiP/GR3mwa/R6A0hBk8 DvgFbcQbQ/V/rgisY+O9yAaHxvTChxp8wpZ8PVrlzO1OPGydIInKtfEhGUhftXU6 eUiH8X4FzkJMa/99XU6OgK67g3k5UqBsez9pUt6e04/tmfM0KdwodjRo3xWzoqs+ lgk29vdKF1kcH+bRQQBndZoexA0ScP6R/hBdKJRSK5k1SzCBs9R9qf94OesuLpDa 1EIqxw== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cstsa8urb-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 09 Mar 2026 12:43:11 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8cd7d66afceso991204585a.3 for ; Mon, 09 Mar 2026 05:43:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773060190; x=1773664990; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4+44pNLvKD6wmlyUHopw7JCev4MUbKdOMecmtcoK78I=; b=YbTNz15LnNMMkisg21hFJps1dDul6em0VMvPTSben8utXN3ZBrmZKR/KyizmTEB2zE FP4ULGR+UGmgV9+56Axwee5F+B5O4b0Pg/VBAVIPCFiHQKsV9K0mI8SGidkn2WWGJ+Oi 9d8Elw2oTxjzQJXRp63ymzXr7TTjv5KtJY35OZPGFD41T2MXy4XYjHwrkCMbylQTimV2 p0XG80Cjq1PFBumXp603kCWt0IoJAYXBYmCoBn/s7eyGQi/leNiAZzkBoQpQeRtbyECO gxPqg+NMnWSV1O+75+EJmn/MutUUSIynm4SvSLkob+3w/PlGM2QIWEFvLRgvA9MT073L R/Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773060190; x=1773664990; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4+44pNLvKD6wmlyUHopw7JCev4MUbKdOMecmtcoK78I=; b=hGZF2PgyZky4tJ2vvlW1fC6XfnWKeYL+YwCD/EIWhVqtk3hey+uyHEStDmRhOE5Hc/ pVMjdUsSzgb5ewq5hmQof7b8JPSkZ3NZ+FWtmCXWZ5BgIXdNR3sLKDgCgugdtPAHOeOk kU29gktcuoGtwvPpGH4Z+fy9XuX41oDY/2wVv3r6QAIgjVGeiA7UMehL96uaxcvYRXER BdvczS3kwo17c+32DUH7TvINXSVLdn3tzSwlYu3lo+d3F9d/+lUiqDHFHAneAuHifePf xHDOSN8QTEJs80jpSzIXB3KopQ6uqSoBpzPVHNUaYgaMlP0rxVDVbZIHqjc+nLVfT2lj EZ6g== X-Forwarded-Encrypted: i=1; AJvYcCUTBgdFwJ6BZpZVuuSVopG46JERa6Uqo/dJHEGzDFzJ2RsBnYJSrnFjEEtkmtACipSPbD0APbFV6D6+54g=@vger.kernel.org X-Gm-Message-State: AOJu0YwZqMhwQU5GzzhvXDDAOtV8cy+b0eCOoqy/dxKzEPB/FxXRrhV0 Cd+lWXgGbvXNEiBXl1ZqwnavRGId2JfphmfNS6Qgwka7xuKjr8hLiSdtrHTaHL+j0ppIKYd0FIw KxP/fbAaWVKzENuuVXnFA6q7cECgGv88Ay7USZxQS7MC8jo/WmM5bZdKInXBctI1EcSQ= X-Gm-Gg: ATEYQzxbTEWn2Ihz8efyKLfeAXzXmPAKlWmNuDr+VvRb1Gh5cQK4j49UEbGmmAJAngT nD9/Q/jZ6TUZBmHFR9d4cGUms0e1b3JlBCZNXIMeiHQWxh4+ahc2rPKhZ4Zn+3vIuJb+UREyqKv 5V+WaI8ephjwRYN9ghTnrl2btDCPYH9SJ52TxnpAsq5eu5ngrdpGyQWITsV2bPKVTQJ2sp06BtU n01/q5DLxgTkZd6fEG4eirLAzpXa++4MxyxoKbphULhdqcNUl/KasYz375mQfGnv3Na9kBIdYwA VNSwf16dYETMKE6GDT6zFsXXMy8W9Rr4B4Gefpzhui+oBI8pHSoTutS93ebAJeX5IbY638JdUfh hWC/9UJndsX2F3xymq/LTjUYb8lbBD6B52wvx3+8Zn24CkhsQZFz0 X-Received: by 2002:a05:620a:400b:b0:8cd:8efb:b7d9 with SMTP id af79cd13be357-8cd8efbbe47mr163770585a.28.1773060190448; Mon, 09 Mar 2026 05:43:10 -0700 (PDT) X-Received: by 2002:a05:620a:400b:b0:8cd:8efb:b7d9 with SMTP id af79cd13be357-8cd8efbbe47mr163765685a.28.1773060189835; Mon, 09 Mar 2026 05:43:09 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:494a:62d9:d95b:cb98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48539e574b5sm107803345e9.8.2026.03.09.05.43.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 05:43:09 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 09 Mar 2026 13:42:42 +0100 Subject: [PATCH v2 6/6] gpio: sim: allow to define the active-low setting of a simulated hog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260309-gpio-hog-fwnode-v2-6-4e61f3dbf06a@oss.qualcomm.com> References: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> In-Reply-To: <20260309-gpio-hog-fwnode-v2-0-4e61f3dbf06a@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , Frank Rowand , Mika Westerberg , Andy Shevchenko , Aaro Koskinen , Janusz Krzysztofik , Tony Lindgren , Russell King , Jonathan Corbet , Shuah Khan Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-doc@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2420; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=R4Ywu/pAKIvIVEZDR6pAqvPYf0v/XCn2dkIco/jqnjY=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBprsBNxYsA8Q1LF5HZoRzIH4kwEDuPpcFPljJRv aDgYFtdqiKJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaa7ATQAKCRAFnS7L/zaE wzp8D/sFgjA+zH/WzHB4KtIHoXip9zBsEn/LDT+Fc0zQjsN9Pq30alODEdm8KQ+4kbj30kiNHoX dstNie7A4CFOFdJPwCFC30iLABL/O3LGw0GcuGqDLpQyrQzw4wvdqKrSTu4mtdwyiivYzCRq8os u0H8OQF4+84yB9DQkNLZeGhmzmvXwz6+k/kpqHKJOzFIV5SHNHdwPV4n0+GKX0dM1YnGl9ggY7y isMrdgdf2mRdxkcuoHIq5Rj6e0TbaRn0noJig2+VwRyCSYbvQBCj88TIvDvzed0M+mp9Gwp2EnP x3fzOCgD8Gsava3M/x+mNa8MI3AGFCYHBrEGa3ST13BvF5u1P7NyvfgbHLY3qhafqoSd6Wk7WHw HUxKt/9nSykSy5BiCq8bbEr/Regwj3eWvVt0kOmfUNkz7oN5aFhS30szutYVtyIv+pyz//vvlvf PIVRWLbKRPH+narFofUFn7ynAgZf5cS/RKt89sbbM7qbCPisCZRLuX/kHvgtAujYbJy8N4cM0U+ mrzJYamb4ipvmCxMdOG+2WG+3LqW/9omjYlWFhOzZ2v6+VJa+yxmVSfptO5zH1GoTfymaly/vir 6u5EXCUzF9qDtPLwu6tfIR25m1CcmZU5WRnXPt9lPRFZ8NNZmctQoaUAdle8rpzM7F7e/dp0JPJ Mt+lWwKr5E+YH+Q== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: e8QuLi5E6rDY0HlyeraKEPXMzKhRGXAH X-Authority-Analysis: v=2.4 cv=I+Vohdgg c=1 sm=1 tr=0 ts=69aec05f cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=EUspDBNiAAAA:8 a=Z_vE--IGminT9Q5MwdQA:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA5MDExNiBTYWx0ZWRfX9MFHPZSCBSmS XRp6W5PotOknCF6xxYsc7+aVyEyASZDINQwvzdNa7eTPTKh0tZAfr0KwBvK/hHZV0nJJ47+isIP y/SWzjtDNaok3tnBy3ycepnIXajE7VBc433I5cXn3KZz0BPQPCpwL5urcgn8XP4uAyjyS34uSZX sRX+AlPMtSXBL6FPm13UdKlXEqT2O0JaCpb/85Ry6LSbIGU0oyOS2WyhGoAydueBCjV8CqfM7VO RG3I6lwzVBc/6cxWgfRus9q3KgftbcNnhJ7oO9xXSAIJ7CMfj8aJOn23NdO5ID+oIKTilO/kbRj sefMiVzJZsP9KhxEzDN06rETEY8mWMh4R5qgqCHTve3PiTTZF+Sma6MlvjFbPleXU6mgWMkcwRZ 7eVN2U5MO6S82X/QNuyT/yiaaUZZDxxxZ8qHRCrO0ZI+zegGwEjQSilpR7LZtDXMvYVAE9GHYhH Hhvi0YREREeUNmU7qXw== X-Proofpoint-ORIG-GUID: e8QuLi5E6rDY0HlyeraKEPXMzKhRGXAH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-09_03,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603090116 Add a new configfs attribute to the hog group allowing to configure the active-low lookup flag for hogged lines. This will allow us to extend tests to also cover the line config of hogs set up using software nodes. Reviewed-by: Linus Walleij Reviewed-by: Andy Shevchenko Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-sim.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c index 51bcbdd91b4b027b7a340971a11cce5280ca1295..f32674230237eb08bbf8dd1337a= 79b5d0aa13259 100644 --- a/drivers/gpio/gpio-sim.c +++ b/drivers/gpio/gpio-sim.c @@ -654,6 +654,7 @@ struct gpio_sim_hog { =20 char *name; int dir; + bool active_low; }; =20 static struct gpio_sim_hog *to_gpio_sim_hog(struct config_item *item) @@ -836,7 +837,7 @@ static int gpio_sim_bank_add_hogs(struct gpio_sim_bank = *bank) hog =3D line->hog; =20 gpios[0] =3D line->offset; - gpios[1] =3D 0; + gpios[1] =3D hog->active_low ? 1 : 0; =20 memset(properties, 0, sizeof(properties)); =20 @@ -1315,9 +1316,46 @@ gpio_sim_hog_config_direction_store(struct config_it= em *item, =20 CONFIGFS_ATTR(gpio_sim_hog_config_, direction); =20 +static ssize_t gpio_sim_hog_config_active_low_show(struct config_item *ite= m, + char *page) +{ + struct gpio_sim_hog *hog =3D to_gpio_sim_hog(item); + struct gpio_sim_device *dev =3D gpio_sim_hog_get_device(hog); + + guard(mutex)(&dev->lock); + + return sprintf(page, "%c\n", hog->active_low ? '1' : '0'); +} + +static ssize_t +gpio_sim_hog_config_active_low_store(struct config_item *item, + const char *page, size_t count) +{ + struct gpio_sim_hog *hog =3D to_gpio_sim_hog(item); + struct gpio_sim_device *dev =3D gpio_sim_hog_get_device(hog); + bool active_low; + int ret; + + guard(mutex)(&dev->lock); + + if (gpio_sim_device_is_live(dev)) + return -EBUSY; + + ret =3D kstrtobool(page, &active_low); + if (ret) + return ret; + + hog->active_low =3D active_low; + + return count; +} + +CONFIGFS_ATTR(gpio_sim_hog_config_, active_low); + static struct configfs_attribute *gpio_sim_hog_config_attrs[] =3D { &gpio_sim_hog_config_attr_name, &gpio_sim_hog_config_attr_direction, + &gpio_sim_hog_config_attr_active_low, NULL }; =20 --=20 2.47.3