From nobody Thu Apr 9 23:26:09 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 3D5E837BE8B for ; Thu, 5 Mar 2026 09:51:49 +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=1772704310; cv=none; b=T7spfHBAcM50Lqwoh+akb2AUysQ4FI1RVoq4Rdn5n1dC/l66m0MdJ6RogtUwv06sQ95VzHAb0GEJMZNLDaVY9rzhcMG/8+BYIg4h9KyRULQiSTutBcjRL+eWkMLF9p94rHLeNdO/A7BNTa5Y0e0O/A32gheVQoneT7dCPUzbt2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704310; c=relaxed/simple; bh=asFRYbS+mWsBdMTNaAjlr1kv9Sq3WYDbm6irXLJp2J0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VGD/xfJ9DNvAHnVSWE3DZBO2AvVRwLrxqSne8hgulpfj/K2GN32QOa6CjvYrL+8Y2r7U9YNwidQjdOnrRGcMYHbD4UvWMfnqqQzjBLUepI91L6C4rQxwzNyN/GhsGWVgacF3ZJHqPcXIjMstUtcU3IZq3NXCKhVi3FoPV/gT984= 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=DE1at4dG; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=dqTNxfno; 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="DE1at4dG"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="dqTNxfno" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62597T3c3160348 for ; Thu, 5 Mar 2026 09:51:48 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= ExEz4/DFiPUvRA1okzAQrYU3w++SlZSrUbTH+yM/Ouo=; b=DE1at4dGMoW0MPoj fkTM1XPnbaXH9aOtii8tMvhXZrHf0+cANP9OsxrvjZFRsMmqGtC6L8yRzmPBUjnB 0bZb4g/2M4jJQPf2/9OAno2qDzeFI6D40wtuqXeqFs/IHqUl0i5EPWUHZKVVIY/O rwgpXcQDFhXpr3mW5UQY8n1mS8ePYv+Gzhbt4XN99Bn0ELm7TbaP71qoS6SCnV31 jWY2dqSMvz6jnGnZycfawLKRE/xFmFMQSaRxb4BxnUxtBzgNCexoCgiQkrPD7Q4U YZmDIJIaJJ+BTsntuEuxDhA/rTQ/TZDX+SSJXFWtfdeo+ikncpU4dYalpZCl/deB 6/3fJg== 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 4cpjh5v4x7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 09:51:48 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb4d191ef1so1016295185a.0 for ; Thu, 05 Mar 2026 01:51:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772704307; x=1773309107; 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=ExEz4/DFiPUvRA1okzAQrYU3w++SlZSrUbTH+yM/Ouo=; b=dqTNxfnolhchTXA7hTdZdD2yyQMMbHfy4UJG/6UWfolY1scPf4ttfhannRJiqPUR1s tuJtWa78J1voKdgkRFjE0t8rm+HJ7LqsIXtnslc0LDk15oo9ohRlH5IM+ODRfpTFUSPT hNUgS1VQUMuwEJoKkcs7wE2HPs7ch1sl1DQF59YXGuuw2C7OakWq9bWLxZXzhISdzSwO PYTYcE2SfBeoZQTpxeSrfTzqus7/aSEHHX42qsnX3kV2aWkcNIwezL92sNYiSJwkJq+Y GCZycB2bFe02UXDX+MdIVMm27ehRn/Qm9R6WRD0UUxSy1YnFyQCidhQrbFcy07NEwdIi KbCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704307; x=1773309107; 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=ExEz4/DFiPUvRA1okzAQrYU3w++SlZSrUbTH+yM/Ouo=; b=LRkv1hrn9gFGsqRes3kZBEjciqwCDEIgqLjU3ZBW+5O9Zky8CqifHuCAEIKu4ggCAz ulFfZdSwJEzsR+2N/20o9qksUonkhFfkQUVaOBeMMC+vRh3K/sFUV3tdvPX5482CEG0C iu3J/D8TEOpWaTHQBRDXHnKvWzQDSSpAW0OjMOEP57/Z7VGYAwRQ5AWqpNkG2zbwC8eY WZI0CEq/AX8PCRBprXVRCoU/0gpqdnB7QHlca5iTK2DjjC/I3+5O9no/R/V/4gADiDau F+cuYR5ALW6cT8eLRF2XIZ1MvCFfTc3e6CASEWgawVLRcg424oFFn5GAW3gCVKAk0gyd XykA== X-Forwarded-Encrypted: i=1; AJvYcCUJC3noT9jPhve4FezrMmJEiTzPweoLJo6q+CYJ4+QC7HqmdaCEuAIlJPI9ET0lWsouP0RnTTu6Ki5B/DY=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+9OxZwo6tv7LVl9hQ7pRRxz8D2cErz2yKgAniVh/tpley6LFz nfe+qNBrFOLS/uDBlwcvYhMb/7VxY84gt3EmcDsOvuMvvAaqD/0OyZv9Ano/cBjZKu4ZcbT4voI 4RsucZRtePL8WPlY2Qy3Jky7kZ8aEQ7doA8bd4/YP2pmDvyyofFADH6vps7sReedhElY= X-Gm-Gg: ATEYQzztDvhynx1umP+Aid/BfmReBaB8lOgVVTTHmdmewtrm1l6Aw6XDAiACDOnBYMg JD8QyQpst6DX2LHhnKRdVGfe+HUB8/5hyqNyWAiVbgI3BUo44kLQuqdosuiJsnvQtTvh0EIgfOs gR8iI7RIaCioBDFzijOn2wRKC0z+ITw87z8B0+YqP0S7/09XSLbMmuQlj2SCHCBfqyncMpdbHY6 11SDZVZJPry0pTPB+RjGh+cnky1cpmW7X8Kl1hnNMV3Uz3RLDjzPSw7p2uWp6AzzS4Zh1agC2g0 HLrCgI6PjR+KRJHwatPVrtYOPlVMc149Wo1e4RVjV2GEJh1YGGQE2jmUXc/BazX6lrTn0uy6bcG rhuNbzOQzF1mLTyQWwW1NkdG0daVqVoa/xcT0AaSQk4FdtzLeyvMA X-Received: by 2002:a05:620a:4405:b0:8c5:3067:903c with SMTP id af79cd13be357-8cd5aec446emr644636085a.11.1772704307390; Thu, 05 Mar 2026 01:51:47 -0800 (PST) X-Received: by 2002:a05:620a:4405:b0:8c5:3067:903c with SMTP id af79cd13be357-8cd5aec446emr644634385a.11.1772704306918; Thu, 05 Mar 2026 01:51:46 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:8314:9d33:34c1:88ef]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851ad1656bsm35598215e9.24.2026.03.05.01.51.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 01:51:46 -0800 (PST) From: Bartosz Golaszewski Date: Thu, 05 Mar 2026 10:51:26 +0100 Subject: [PATCH 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: <20260305-gpio-hog-fwnode-v1-1-97d7df6bbd17@oss.qualcomm.com> References: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@oss.qualcomm.com> In-Reply-To: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@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=1111; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=asFRYbS+mWsBdMTNaAjlr1kv9Sq3WYDbm6irXLJp2J0=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqVIpxm8mmJ89njb6VW6uBXMeoNjLVFgEK4G/7 o5qRQijDnGJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaalSKQAKCRAFnS7L/zaE w2ZEEAC2PUZMyFEneqHPYBmxvm7P6SHUaTj09ZmnewmcmRX1Ifjnh5Owxce4J2PXBfO51XuviuQ 3ws20+W2Dijv0XJmzoq1nvGp5TLupbdjCSbyQJUFx0ra4QKROzaeuiDk1zVjKxOdxN2Mq6mWsI+ ZlPluD8qWKSXqyl7F51SOEf2A3g2mZlYMooA4yXeYXW1/BdB42IY+L01RH+Dj1rJUAXyHEOQG+P U8Kfj2/UF8LR5XXWT5p14hdLAjUoPPQgXGTWwGykCZAQ87fvt2xofkwnYQvg5AfnJOtN3Q1z4Rb tAhCKqWUmyuGnM1cxyrYcmUwGyHxKu/JbGD8sHTiyhcr5/fNv0usioIXka1DEZ3AOJTQw+d8wmI I7GLTtfU86WrlAGhUm29Wiuvs3M2eoJzdOPwtCsPo8h/a+p8hTczNCsCu36zMJ2P3zBdQG+qK18 4gkv7hrrC9HfvUV0GM7w8dzGf4XIYnh+G4OlakqRfusunUJEHOP02Qul78UfSEcXCzLbLigiuSn 6WmVCIKsJ7XGLKM5Gbx39Qo6WlVAjrF9PYKHeyz/Hl8XsWUjEO324tHHi/ZbZFIYFqUcJcE7nOU cmH1y7X03mA+ecUrM2+7VkLkOq8SSkSK6J/0CKFWpOvOfbE5jfo7RPTULOkoh78+xaYksHk8Ma0 x9BWcpJG25QWsnA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: QuB-KP1CKZCAoXvtCqP3YxDYJXyzKHpa X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA3OSBTYWx0ZWRfXyyItuExXxAp7 q92fQ7QgL/xQ6AYwgz/taTPPHTESZcxsNJRrjg/XyR0C5cbpKxtFwsIxdO8mEqEVQO4vG7zWss+ UnjxVO0kCbodiOiHJjK0bTnRZlaGNVEEyMZRLMRszRynwu/3g75kCNZVtxu/jBTd7s6FkgMwkvJ MWRI4BzqeTAR/FKIuAr9HaRPP28kepPBMcMiey6WKPBH4hIanTkrsWcarlclcB1bQXW8v9AJ4Xs IrF/EKN33lopCVO574Q7udSCqEwOWWtDkA7NyzufWQrF6uuT1Xq0PKkzspBbs06tcbsixo+Jr0p oE3pZa/s09r/dYINRh85vv8aYfl/JLKjl0EixZtSVpDGm0I8Lc1x9fuG7+ViD6M44jE8BzcgFvr 8wx9uEjmaHoEn1ZXdjl5MaYPfc6yP1MNT2K4zC9S7QjKR88/qXLP1bJZxbct2aL+OGq0L36JbAw Wl1NtFhbvg/vFjDfB6g== X-Authority-Analysis: v=2.4 cv=JK82csKb c=1 sm=1 tr=0 ts=69a95234 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=rJkE3RaqiGZ5pbrm-msn:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=wIkqWORfvUmHQsOhi0cA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-ORIG-GUID: QuB-KP1CKZCAoXvtCqP3YxDYJXyzKHpa 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-05_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 bulkscore=0 suspectscore=0 lowpriorityscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050079 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") Signed-off-by: Bartosz Golaszewski Acked-by: Linus Walleij Reviewed-by: Andy Shevchenko --- 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 23:26:09 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 CA61D37C903 for ; Thu, 5 Mar 2026 09:51:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704313; cv=none; b=Aw2htxaTDvEcMD0kM3IBdc5jG98xkIMHWmrMSiF+7q0iLgXzcU5iBGy8N2sf5X7v8Q4H6WUZ83Rr8CbHKeYWCnZDLvK7fSNaj2PJEyhjUQHKYxc/+IhSv2OcvLE4cf1Cf7wQGMa1eSxhkQcRRlqN0T63+hX98HSQajADwQ4z3Yk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704313; c=relaxed/simple; bh=8am3cklRFDJocxOgWUQn9XpHwpcovSzr9V3lxqLF2xs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D76xJ/KUaSaz9fKSdY1LKLXGmnSq+pX6Q+j20j4aL2mEPu3wIrv7smydvxTiaSTP6z8+pcMYwnGR4nq64+6UYzG38fF8cD3EBv9U5Ll30LsschJXbLLCqKvCYnFLyIIRRSegoRdpAB85HB0dan/FfZf0U5P7CQwJsHo5rLY5LDU= 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=kQwA0pAu; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KY+fpuqx; arc=none smtp.client-ip=205.220.168.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="kQwA0pAu"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KY+fpuqx" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62592F4r3665305 for ; Thu, 5 Mar 2026 09:51:51 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= z6AFaegujHrYLKUvs6vRWTSfpz9cb1A1z4I6erVQ1fY=; b=kQwA0pAuCeOwVAYZ RXy6Wsvgbp6hQXd6o84FgJJJuRBK9kAAXKSG/jrAWzoAqBfkEYJeX7d6dkEAZvwh DahDEN5CzBYr+tG2fM3eaxvenVmu6fopzUzjDuMHeux822/bHEe6SciktIszjKRn qq9M53LVeCL6+qlCWX+FVEIZArQ+qGfycvxT32o0iE4oXZOLhSoKwb1AV1y56sJg W+O2ePi1iFVchVtcH/ZEGNVdfO4TQvZgNpXsuodXLduoqTTBSEvw0DT8zoxjgWab cqMPPltKzsRF3VuN5ucXqlm4UtWuGTidSXJHWaUoyYXw3zyIMvbGD+D8Jk+KWNmk RlLMqg== 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 4cq04u1hms-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 09:51:50 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8c71500f274so834064985a.1 for ; Thu, 05 Mar 2026 01:51:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772704310; x=1773309110; 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=z6AFaegujHrYLKUvs6vRWTSfpz9cb1A1z4I6erVQ1fY=; b=KY+fpuqxSwxVCF6pnpoV1sAco7ivUVkIFd+QHFejMUwdMendSJeXvZx3vv2+GzMPqu g0L9yqSXASi+Au80al5eirgz+icVqk2mdCt1CqIe2zu4vFL1nWNSEMBQdqlW36qMXMdL PT7tiJSeKBYbi/8Qid0CF7/PVmgRz59HZEe+81uUx2YqZx7qNzNXY7J35D6TtrQPChhg 55FcjTBv0CNT/h3N/MK4IcAb//FmRX+yJeJ3BMexdc7aY0PwxIPTHPSDCTM7qG/fnbFr otnxyhfpPCGD7kkYuXrBsagi9VoKtjpprJV1K5ZA5S1fPPfZDNa1/XbAYVvJ6w/KZtfS cxtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704310; x=1773309110; 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=z6AFaegujHrYLKUvs6vRWTSfpz9cb1A1z4I6erVQ1fY=; b=fVv5YZlnP95X3OlA26Ak9FrgTyV1BbQoYmAeBAXyd6PxXVurMs/ik8nQs7d/B3MvW7 1NpYOJyNFaFxvtIE9yRrNIu4sPsS6Gh6XSVCXLMPVJofQbbcUOOAD6ruQmOEf8f8K/jZ 8WoO1VCt7iC0V2K/ZfJaTwjexzUyIEB7R8+aqx6MmBeryf41coTNq8wIMOdCh9ylhV7m 4jkqIsRHUIDs98vH+4lX8XtQkX4gZsQtoqnCbPNTdWKKR1KYkVZ0gi4/C+HbcSU/JHSa FZk4rOgVEYOVpCPRskcIyrOP1y3+Y7DIu6iHMWTDWROec70jVSE58hgQ05KkTP7/K2y5 hQVA== X-Forwarded-Encrypted: i=1; AJvYcCWqYmMKL8ZkTF9i5Spzj1TfKUMXd7F6d63hlXPwsdwE3vJneUYe0RtHa+PSaTlPTNGUjA51uhaGsl64pDQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyhDCW4IyBpRsZQDbprqOF/6nY9XZ4VIpi89dI4b0J+z6SQfls3 uzGaaaf8pKr1KOYYZG1Ya6ZqgEiGrE8PnKrugI+hFFprqpyFfBu0r83MWlxDHahLDAqYP9gilqa xByJxYKLuMrA5PzytC66eE0/0HZa3T8S5Upr/zVr1aP0xWhMiNNwCS1S/N82lV2BxkX8= X-Gm-Gg: ATEYQzx59hJkIaVMoenirtIUh6rbx9ipxWyqJjXbh4Ze98RLDolCzn0f4Z/Asy4//IV j36FIlFDS9XmYfXIgbFiTZr3nHdNDt2i4y1tv6151Pus/vccHUm2MuMQDjYiAebXKC/jtYABE4x O8rSL1sr+tnO6hkWmDBZDU2ccbc2H283oqdX8f36rHAtRTM6q6EhGiQZr2PZs6Ie7Xe0Y2Umare GU6pjfs+1qimXSfx90t5gxK/QT79d+zpjU8vo/6YiPZPEUOP0qgntTGJKOpd9Yuv0gi2/skMinJ PgMGXTfmGcLPw9qe0mIaw7H5DhE2mIBkdfJrkJF5PjZMtFoNslZOoCUBXmVp1lZLiwWeVrpqTy5 LrCMkH+BF7/J7rbWhMAqs8CfrR9OnOeEU3GxmfnXzPivz9Z9p95M4 X-Received: by 2002:a05:620a:1a22:b0:8c6:c08d:275b with SMTP id af79cd13be357-8cd5afacd78mr574627985a.58.1772704309917; Thu, 05 Mar 2026 01:51:49 -0800 (PST) X-Received: by 2002:a05:620a:1a22:b0:8c6:c08d:275b with SMTP id af79cd13be357-8cd5afacd78mr574625085a.58.1772704309342; Thu, 05 Mar 2026 01:51:49 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:8314:9d33:34c1:88ef]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851ad1656bsm35598215e9.24.2026.03.05.01.51.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 01:51:48 -0800 (PST) From: Bartosz Golaszewski Date: Thu, 05 Mar 2026 10:51:27 +0100 Subject: [PATCH 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: <20260305-gpio-hog-fwnode-v1-2-97d7df6bbd17@oss.qualcomm.com> References: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@oss.qualcomm.com> In-Reply-To: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@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=13345; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=8am3cklRFDJocxOgWUQn9XpHwpcovSzr9V3lxqLF2xs=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqVIpw+ceJCTVZOWduEH5MNtRgdR8NJo3Rku41 7uVtsZlneeJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaalSKQAKCRAFnS7L/zaE wy3GD/9xv714Nm93dCYmmJT7KSdLjSn5jbo20BkakIk5YBEsBA5s0/Ghgu8xm/Svuxq5YVWbi9H 5lKoYvS83/hw4g//7xN4aiVyROoFAUjW7cCfC027ABSgEaBWoX8WGN43r5RdrK8BWrLS+peC1hw /Dv/+prrxQ3RipDsCy7WS5VeOksjPvca4CQZCEyoW8RoNkoTexMrtp3qp8XZ6SEgur7cvO++iBC SKJfBf5PyBrx1KyKNxGxNL5J6DMW2SeIPg2tpht/DM+m7kzgn0+5jflf0pCa+bCx3dsAnoCp1AE yRBSE2HbxgJcd8ULE0XEQdQq1lcCjuaF8HfG7DaiQfZesIfGu5jvri1JTsFhZ3JI4ncVVPCEOaX C90UoH7JKoRZpcXS8L3glkarNB0Xzr9gBaNkWrp8/L86Z7x2ZsVG9f61NeJIfNey6I0whauEVPW NSTit/hdt0pkc+CAxPIHWhlad9waMZ+mXy6icl0axpc1Pzhdy2JSNIcBXgDYln0VVC8TEtLsuLN hXbctQJnQh7If9T/fIUhrPhuWxr64/oeIm6cCBV0kRp+aS37lUp68v10Z2Hu6quDenv4oB0D/f6 dQDnwNda0ND8Ko3eMnhlaoLWkkSd8BBvYzm6viGpP8KjUWr8inQX1/L+/dtrxwZmhaCzm8VkNV+ 5TUEJGfRx3cEx2Q== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: zzsUnKPxK7wDSbBItMzOvvszRXfxZ5n3 X-Authority-Analysis: v=2.4 cv=eqTSD4pX c=1 sm=1 tr=0 ts=69a95237 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=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=sl8yS17PtdFfKPVmjogA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-ORIG-GUID: zzsUnKPxK7wDSbBItMzOvvszRXfxZ5n3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA3OSBTYWx0ZWRfX92n630lUs1yM 9DoTXjME6/xrfXhzroa9A7j5lxCZEs1lwZM1aiahnU2diYLp2txFq+X4AIwBvNbXTrKIXbKvBBP ekzpuVspuu1C+0CQpCCfzaJf+9CI2yHXKoMNAxfSlCL0KX95MjVyvdeGjpAQC3LOGPH2Sxbq6mM As30q222mp8z3ponYP8nC56JvMpAJboEk6K06inSlcMUlXallPVq8fwxHdqzCiwiNGq2M0dKUce zcBEL9vqPc/Ih9nysLs6YVJop6h07MgJI4eS4+LOyGnr++qAV6u9w9O3+2wP8+MrBEPoxvAOA4h hnENx6pils1UhC5pCGqLQsVvZEC3GzvNHB6bTTL0P5Ay+0Uvzgy8Zlf7MYOEIqXBcVP+/uzDVvJ 6oIZTG7FjdytwAiXrWkxGXZdlz3jjivQ/l+ryPBzGMZyVCTTem/FMaB7yYSxwCbQAnT/IfDGHJ2 HKqKSvWOjjr3bR4FFWw== 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-05_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050079 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. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Reviewed-by: Linus Walleij Reviewed-by: Mika Westerberg --- drivers/gpio/gpiolib-acpi-core.c | 70 -------------------- drivers/gpio/gpiolib-of.c | 139 +++--------------------------------= ---- drivers/gpio/gpiolib-of.h | 9 +++ drivers/gpio/gpiolib.c | 100 +++++++++++++++++++++++++++- drivers/gpio/gpiolib.h | 3 + 5 files changed, 120 insertions(+), 201 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..4554d915d57d95aadae0e4d9ea3= 0c3d9c2782984 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -735,139 +735,19 @@ 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 of_phandle_args *gpiospec, + unsigned long *lflags) { - struct device_node *chip_np; enum of_gpio_flags xlate_flags; - struct of_phandle_args gpiospec; 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; - - ret =3D of_property_read_u32(chip_np, "#gpio-cells", &tmp); - if (ret) - return ERR_PTR(ret); - - gpiospec.np =3D chip_np; - gpiospec.args_count =3D tmp; =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, gpiospec, &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 +802,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 +1081,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..f864597baaede1e601fc999514c= 129750c2a8317 100644 --- a/drivers/gpio/gpiolib-of.h +++ b/drivers/gpio/gpiolib-of.h @@ -24,6 +24,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 of_phandle_args *gpiospec, + unsigned long *lflags); #else static inline struct gpio_desc *of_find_gpio(struct device_node *np, const char *con_id, @@ -44,6 +47,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 of_phandle_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..be2e6ed0e744c23939491717a06= 0d3a8456c842b 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,100 @@ 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 of_phandle_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 ret; + 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 (cells && argc !=3D cells) + return -EINVAL; + + memset(&gpiospec, 0, sizeof(gpiospec)); + gpiospec.np =3D to_of_node(fwnode); + gpiospec.args_count =3D argc; + memcpy(&gpiospec.args, gpios, argc * sizeof(u32)); + + 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); + + ret =3D gpiod_hog(desc, name, lflags, dflags); + if (ret) + return ret; + + return 0; +} + +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 +1303,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 23:26:09 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 4208137CD21 for ; Thu, 5 Mar 2026 09:51:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704315; cv=none; b=D11X/0D0QgbxeFbBIl/MGTtkyKArEftsZd0VvaWo3y7Xyw22G3RDRE7G3sj2DO/YWPFNqVhauKRZ7nK8MvARN9hVfuqz/e6bW/tBwXaksvQG1KNxYZLdHgNy36Zl3HJPnJKsz/kRrWQ83l3opm6pl6+2u6LuMghYUCof7WKzWtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704315; c=relaxed/simple; bh=w+u8gA5XSfpUL1fVDzCB/568FB2uADEJ2aLQiT1wF00=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MqE9I2r91zmGOfFDUYb5b96HyP2iWmUPepoOV42k3UWiiFUOgV7BGmL/PJ7VGrIGrkPbCjdRKAiLx5P7365H7Joq470j/LEat3Hgzcft+B0e5FfNAIynC875Z13R5hNxk2GmmoVWvK20RnhXIp+yzH8V7NpAkTLXO6Jbl75Rjxw= 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=OoELvcRW; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=WvpYW4tk; arc=none smtp.client-ip=205.220.168.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="OoELvcRW"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="WvpYW4tk" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62599J7U020981 for ; Thu, 5 Mar 2026 09:51:53 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= /zGlsuieF8HfJaz+k7Z2A0mMLjNmMLEqk6t8sei415o=; b=OoELvcRWdM9CeGze LeL6UFp4Y0ufgp61OQdtuC6wrU+XbgaORw2FKsn48hTjpCcuSeMQP/wHbSPHEh6q evvYJwHEJqTao+b1olGryJGGHdo3W2wzVdJyQVW7Qz3QAaZprwlvLCNZOEa9Yd7P plgXKdmYo8qcKHkO7dU81yHV692zR5L2HXSVcp01jdNa1Wpm5tIsYGSF5Mpr6oUb 3hGhr/0eUHWWmt18eQX+nNhOcZ0vqH+W0eSBIwtYUoyvNd7dniyPvlHBc+HEi/bU wLKYn4BykMuFsaVHYy26prMQpNa/KBidEjQiHc3skLX5LR07ZQmAPefNjsIM6YkR 8PXJAQ== 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 4cpuptj793-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 09:51:53 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb4d191ef1so1016301685a.0 for ; Thu, 05 Mar 2026 01:51:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772704313; x=1773309113; 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=/zGlsuieF8HfJaz+k7Z2A0mMLjNmMLEqk6t8sei415o=; b=WvpYW4tkr3KgtyR2sr0Q0r2BmTonSQ4FNN4mJtoaDWW+VRyrGHlSmNogtBWd0u6sH3 AopirXX4gT1u+GbK6i+hIFryZdaDSmxAOipO/2TK8woejcf+gFm9ipe4kPCbQ1kSz4XX McSAvVV8PyOYsnA3qOGOzgTSp3Sx78UTt9eY/CMa2shWloEo2q4G0UQjWC4xbQkei90H eyVrhLWQQeHOpz8XQ910d1RpDHIa822fUZGdWxQpH9zkBM8bfeAnfSj87bqKOzMyZ5WT XtNLbxeWbn8hh+N3TLahrkQp3W+KK0Kwm/gtUkdFWjI95KL0x2YBmldtRnDgnc9jAT2z Zgew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704313; x=1773309113; 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=/zGlsuieF8HfJaz+k7Z2A0mMLjNmMLEqk6t8sei415o=; b=FrNUrJcS+MQCVwZxRsLF+7YfB5koo2dXVFXOwLQoB8veZqevMemMQ+Y0FODHdPl+KR Uuft74YN+iSnotQ+VbSBKaHLA3Gg82eZ3MadRq67CqBC2nq4+j4aKKTbmB2jkollpxws z6DEzDZMp+FEuUJtif9hVm/iiLsFuBJCqXiAQglEh93efXfSGDwgNYbeybTITrJMRW1b /J9iIldxyXOEfqsWTj/zgjx4KdtsGfTYwW5rGQIPC1EZFixGMfSCIqO3fpa7n6K52j6/ KgQ5NivRMuz0lmbeSu/Pjy65Cf68w1YwmumeEWJnu8WZKKQKaMcx1yzjQgySj60AuCHB g9tg== X-Forwarded-Encrypted: i=1; AJvYcCXuvM2U91OFjG2F9wdeW9xkI1evO9EAjsOQqic0E+AwTUsuMyUOdwYTahLivSnAs7isSCzkX1uvzJyZ/zo=@vger.kernel.org X-Gm-Message-State: AOJu0YxdpGzF+/mCjzOT/RkU3MycrUyAskMMEbThMc2T29xuAbwTFb6i czgBZvqpH0oRfRHDxt2w58zvC0YbtrKICgfp190q9pVSESPdFGoakH0t+3kfl8RqEAjqRz2+HSk 9Jkxj4DgKswioBzGWeI07xcWf6YocbaLwH8E9UxzLpdcK+g/cGe/c/SmL5NbLmp1R1fA= X-Gm-Gg: ATEYQzy2dPttBMXUTJkXgWoslNUYd637KScAeJ06KaKyR8awdXBz0nCBfWToeSPKR6f 4rth8mr8WTobg1iaWQ3EkQavZSQH/l1yCVu46AXGvz1LuUFUobAowpNUsW5tLHxYIvMEqt+b2h8 j29qHJioBIeKZN2N/zpgGzNVrLN+/TBmZW+v7Te4h8FkejAqod8mVhte2nGzomxvGRlEq/Nk5VF tk/JT2hx7oNqs5eDAGl6RgCX5/v5S3qvKgqZb13VhjTCTn4dI3VLxJIeGVrnqxpgWQWQ7qIXlxo cANlaRcZW7cn0tM5HcPZ729xTxv4lbq4blp91rrH48quKh9e1/VBTVi1jJ4bOwnZE37o+bkASyV dgwpAhQcmkUH6m9ykABiuRSI/Y4EzTrxRQi3gZyphulpMoKTT5zfX X-Received: by 2002:a05:620a:46a4:b0:8c6:e0c5:7bc0 with SMTP id af79cd13be357-8cd5af2009emr605342985a.36.1772704312570; Thu, 05 Mar 2026 01:51:52 -0800 (PST) X-Received: by 2002:a05:620a:46a4:b0:8c6:e0c5:7bc0 with SMTP id af79cd13be357-8cd5af2009emr605341085a.36.1772704311967; Thu, 05 Mar 2026 01:51:51 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:8314:9d33:34c1:88ef]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851ad1656bsm35598215e9.24.2026.03.05.01.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 01:51:51 -0800 (PST) From: Bartosz Golaszewski Date: Thu, 05 Mar 2026 10:51:28 +0100 Subject: [PATCH 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: <20260305-gpio-hog-fwnode-v1-3-97d7df6bbd17@oss.qualcomm.com> References: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@oss.qualcomm.com> In-Reply-To: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@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=6143; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=w+u8gA5XSfpUL1fVDzCB/568FB2uADEJ2aLQiT1wF00=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqVIqF5bDfNvDEyB2c6UAu36TpqFzWTqhJE5A/ 24jyOm5XamJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaalSKgAKCRAFnS7L/zaE w3TKD/0W/9hVvY0nJXtP8TC53TGxU7WXAisF7NfDZBbc9ZJOaGumieq+KfFlYiRZmYoNZFkYZr6 gMB0aQ9d5FehTrSRGPDYvjzEyRVMWmo+/Q2+EZuFdkLcXluphVeBSE9JcM3pQkqGCHTRAM0R/tW 3RhxSL/3p5enWc0rXbZtXmCUNUM6pR1FBrsG1d0O7k41AtUP8+nJkChJ8FrrkOIUWLAV1AA3kyt i3nq0Lg7+RhiupyQxWhd0rfXriL1N/Cqwr/D50QL56KmgHGQJ6HWi7CkexCRbAvrltnJu5nwojC mou7BtX7+/g19dnURgezf11ZKl8mnz7eVZ5jbh5NBC9AXD7bakONARjPLT/3ZBBA/M837hMAZ/9 Y4hpIondm9bYbLKwTnzozGO/LCJfTGnOkfhafuYv14U/pELEoKAGstLsaHsP/eIq5yv1AtTz3ir fdvLWO7feEZxq3LGVEgFXphSbRdcK/MB9eUGl53+DO90wHLQ9T4HfQOUJwP3LEetlIF+NDr2Cfn XXYsjl8sMOJ9cr2j5gQ6J6RlmQ4HPE3CU3pp+kGKXJ4NUVVV7Ua42V1RymFwf0aHHJyMcoIdQEJ iqNElW0h8xTrsHdBPNYnktMHweDqoN6OTiFOdJxaguiRBw2MRmbE1NGi6vukbgqTTGqgUYNzZ15 k7e9vRTrCik7OSA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA3OSBTYWx0ZWRfXwUvCa37ZUJeH lCyWbSFqJZWnz2snFmZSF6bphOPdrhItN5S/CCNBHr8R7qGMXL2DBY3OPQhsS22s7Hq14QxV/iG H8VvPAx9Qx5vCPjnt2a5wUW8pkMKcvaZE4kBrW7pUQ8BBvGnWQ8BLZpIxOYHlPDcjapvRsLX1Uu 1jcWcsmmiL8/mSa34fYz+e98B5fiLSRwvvHgfJNPccWbuzcvjenBiizmxnuaMlQf9l/n4tBYaQi N37+wlct/i2u2qRs2gTsRviXYeDBKS6G4N+1VvcNsc4hqbFoliWdhoEuOVuLTpAEDYqxwuTDzbw CfPRxRIc87P/gFF+g4mRG5laDfqDwnsU+/lEJvckS63gVPWTRFdPNikPc+tD11gYdHxDDyUDQ+p js9Q+iY5+1lgL7i4E98mGXeyILT2CtqPhRZH3/sYBAkwrTEXPSrx/aGbZK+qq5jt95TlFT3qdwf I6shoZ/eM939pjDBCAQ== X-Proofpoint-ORIG-GUID: Bkp08xNu-t6J3QtpzS3x9846JeRZ7Xox X-Authority-Analysis: v=2.4 cv=Ddsaa/tW c=1 sm=1 tr=0 ts=69a95239 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=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=EViWBFm1GAVLN6HfglMA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-GUID: Bkp08xNu-t6J3QtpzS3x9846JeRZ7Xox 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-05_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 suspectscore=0 bulkscore=0 impostorscore=0 malwarescore=0 spamscore=0 adultscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050079 Convert gpio-sim to using software nodes for setting up simulated hogs instead of legacy machine hogs. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Reviewed-by: Linus Walleij --- 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 23:26:09 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 CB32537D100 for ; Thu, 5 Mar 2026 09:51:56 +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=1772704319; cv=none; b=GjHKpwM66rpwOU54tITekuPPsbrzZbTFfzMx1Uc/RBfMNxsNY6+PfJQCFxylVZsrbqtIkNxz/zT8gIkjdALgmZmE3KD75HzPdFzbY53mFWhkY3NMyDmnYjxrLOC5j8I48NKpAYiHs6C0/ddZiU1MeswLMAQuaWa1R0SR0auZbUg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704319; c=relaxed/simple; bh=yLeXFSR75ccR0iQLMahtPOCj8es5shZ6FJ/i3qInIHs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ClCBimYj0EKHP2zvCOmMblD/LM4GABR0e42glPPwOKqXjj6vJKdvdOs6P1wJcXj9GFZAPmYqNdkZx6SpSougasTQo6HKhLYE45fpQVpbPM/01nf5oA/128yYgqdvbwcGdVZyu8n1FszFHbpAIP5t30pbpg2n+Itg+dEyxg4PleA= 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=LfLV3pQv; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=C5YPXriz; 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="LfLV3pQv"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="C5YPXriz" 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 6258sWRb3483047 for ; Thu, 5 Mar 2026 09:51:56 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= qzRzywPx0O0mlAF6vGhDfHihQLjnBGrCLr3m/uQi+Mg=; b=LfLV3pQvclLyN8oO WGlEmqiZs4p5Tcg/XKjCFQZf7kaW4HFV3UqOlpEU9/saeKlugDqgksH/oGlDX6dE C9P7zN1h7dftsFPBdhDGSPa3AMk+8TXQgIokjjy37xaGhMps46QfCjRTFE+ptke5 e3Cnb1gAsd+mXCg6Fn2ce23cnzrUbu1yOfue51hnOGdwFM5E9Q1VeHUy4VXODF/K G+PH1ie3w9DEuPEdbsGfwwNhxoCjv04Ju9t1WuVUYV5Zqw267+NeTxCto43Od1Mv yshpZ/YMTezNyfisZ3uCiuckuuZfaGa+mIaohtOPYF6pqz8bLM+ancwRlo5B0kkF aFF16g== 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 4cps0wjrpt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 09:51:55 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb3b6b37d8so4362417785a.3 for ; Thu, 05 Mar 2026 01:51:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772704315; x=1773309115; 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=qzRzywPx0O0mlAF6vGhDfHihQLjnBGrCLr3m/uQi+Mg=; b=C5YPXrizTAOGWy2N6AncBWKC8F4UcBKYxLow4j6pY1Z1X+7ctYUo3oMIQYgrs9JGDt AMj+XgtyzcVsickkeDMktnAb4cxIRTxk3Pi8vFaxYQSfMyDbdyJYUceCn7QPK73AjYHO zxAxFmgOBEICLrDRAyfsGs/RS6df028xmO/U4J14Ea9XQ8YaBUsqh4IwdhCN8QgaASm5 gpISCnZiRbaP3kwNKaKqYS/7fm8eCLRL+pmrAKf7UDawWQ7Q91+RUQXI2V4bPhtCr/6Y RQfFZyFLs+a0Fh5h/w0mrd9B2/brH6yi1Kse83hXDcTez7mcIgFY1fGAuA7/SDBFpWEn mEHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704315; x=1773309115; 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=qzRzywPx0O0mlAF6vGhDfHihQLjnBGrCLr3m/uQi+Mg=; b=Wwe5vHqWmlJCSku/9snP13kqo1VfxtyQ8UWZK2CloGOMsGwd4caXvuV8OnSa3xs+xK wkHvN2K6CVgfL6bJ9MUxEgB1dTpYHhEXv7fGy2gEiaJMTozP8XL2l+UnOrAVxguRwfgQ iAKQrGKzMZW75e8wd+pLol2bLo/JdrNp7tApEoX8mEucRIHZ6og3JH7CUyIWdn0jKF/x +tWz/fabDrqLLTQCNxzaVg57QyLu+Oj0sFNg6RFrPh1sZMGT7cdQQ9KNUIj2eRvRtgHh +EYw1cR5St+k+n1HRUt7UQQXmQmo5FuNEtJwbQIKdME1JITzzDet1hkVWESM79llG3tr rUpA== X-Forwarded-Encrypted: i=1; AJvYcCXJQv8nz5XQBp/3IuC+jVBgOcP0k2kE+AV6Bu4aw/o+Q+KFJBQ0b5yCnzk8yt6gQCX0O/Ri0BQeah5gb6E=@vger.kernel.org X-Gm-Message-State: AOJu0YyZ1a4SEA35LkvnOu0W/ne4JnbjoPtgpF9bbW1U1/oYNhLXUw2S zgaOK5PezAOm5EuzlbogyUT9vmaituJ/NWmuqKwDCzfWoIJufaGeNSXlcOn9o5K+4tNQ6qQnUtm UHk5cxixEsV1OIbTaWt3CTgBF6sJxlrzrs/Ka71J9tA0nLUdWk7lvj/hepnatAqexbUY= X-Gm-Gg: ATEYQzw/WK5Y5qJWabwrS122sUgEWivQBljdG4tX3Tjypwz0FBkHhYd9QRLL3S3AkUF lJMshdGF1LwFPYckc2s7lrIDu7qpqSvSqoqqMQWp8+ZN83Xer5Wiuqso81KeKxV5Y4nOvWeToBo l/4zLE7/eoEjxLCh/pT4LHB+J1yIoLb7J9UyI1zEyJzJw5Y2JgiUmQJrpCDe0DqAfbErmJXeqtz Bg00Msz4xTTAIQmdWnUCe0cKFMqXut6sDPZ0K0IdDfMGCP4OOSRMEi1RINTCBzPyA+egG6t81N8 BlaX11lsg7gN3fIeUiqZED1000SnMAO3YnBKt3ofRrrmgJ+/f7Cmjkri/FwJtkDdk6YHUlIcQxk BRdYezInn5bQqzIVITGnVapOEC7pJIfBL9LKiGrBynO2JamkWFeFJ X-Received: by 2002:a05:620a:4713:b0:8c7:fdc:e84f with SMTP id af79cd13be357-8cd5aebfc5dmr661933585a.11.1772704315192; Thu, 05 Mar 2026 01:51:55 -0800 (PST) X-Received: by 2002:a05:620a:4713:b0:8c7:fdc:e84f with SMTP id af79cd13be357-8cd5aebfc5dmr661931985a.11.1772704314701; Thu, 05 Mar 2026 01:51:54 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:8314:9d33:34c1:88ef]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851ad1656bsm35598215e9.24.2026.03.05.01.51.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 01:51:53 -0800 (PST) From: Bartosz Golaszewski Date: Thu, 05 Mar 2026 10:51:29 +0100 Subject: [PATCH 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: <20260305-gpio-hog-fwnode-v1-4-97d7df6bbd17@oss.qualcomm.com> References: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@oss.qualcomm.com> In-Reply-To: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@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=2370; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=yLeXFSR75ccR0iQLMahtPOCj8es5shZ6FJ/i3qInIHs=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqVIrub3GKRGYVOnznATyf6cDQTE9HMMiXE/dd JGGx1EnnGCJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaalSKwAKCRAFnS7L/zaE w3yuEACRLeLuPAaAcj37K3QsyNwQjPOc0IB4iJjV4FzCiOgnjoC9UyKuFYAvefMNet2QRTI7ihG PIUxdCg8Uwbu6IBavAIfyYj+kYu2LKh7IK+/EoaWYcJ+vowqem2T5cDfR+T6wrOwkAMZcgJSjSI 8jNwmLr7x52h50vitgs2AqEfzeQygMi2J8L7ZqLWMVB3TlYgOK7UUfGUs6/D3iuHt1/xAmPpF1/ c5ux/zDcMHvl2UxRviEkq6/teNmO0Zb7jIy1NzZmlR91Rc//nBb5k+qSRlnP3oM0Fysl6cjWihQ BaV6v4fnvt6aeFAqX9kJwCPQtVFR8B22Bb2m6JdwF9X8Gy+Iw/wFPEFbU7L7FRha8lcqC3VM4AX +Lop3w9rtHrfy76f2jYO9eucsdRthzaQRQaHLDL5oBNiOtD9KtmTR6wYMAizArxZqU3ibeEIujl KSkLCUHyk0elsalUfwpWwZ9YWEgbdWNOz/M9MEqti9T3QUkkS44cjG+gnN2L+eUBu3XfCkkiqJP eCMcpWLeQmejZUVr0Zw0FBNzdFGvdaHF2J4+KeSDg9QnQHQIQErw8Ua2DtbYdBWvKGueczWHICV c2nYtImPF5WES/h14iVlNbJDaefOpTxc9K4tJaX6Zql2DHr7oHNqHonRZApPqJH5qA5hQo/wMGl eG/blmKCuQZz4KA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: rfzAuEsl-49TDxel1CtgLf-2TTRhUCFW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA3OSBTYWx0ZWRfX8mDl/sfiGms/ +7xc4FweUMNG4LE34xSfBhpk4WBGUtDM0O5DKkQTXBGl38LJt16I6uPXMacg6QhZg6iZiXNmTqI tWat7Ym/IeMqt+yPywmNlY72Vd7zny8cTEPTXikoQGP6UR3f+kckTX1X4k95YEJAPtK7Vy2FfJw WlW2YLoHxrQ+7Csw50VX1Nq9MmUwDRkdhQj4gscOyg2fcSSCmY31zId7uTsC4LG/aPA3QJr4kvI VDyrSSKiq1/J8gRsElgllISzzaJPk4vmNS9iRtLa6+VryvSArdsn+jKh6Z5sAnfOG7dBHxUS1Ex nMpMKiEHmzCGGGZ8jHvRqvQ3hbBBxhiOV3mzaHqbVUpD+a3VTTIQdmPOzapySshnwaoO401jD4L GCdJfN3YehFGCMhwwWbQa6kT429gwvKCX7I6xY3BEXCSE7j9kOOsFeS3Z5VEGW5mIHxCMS77+Tt Z+WXrI1i+cKaPJH82tA== X-Authority-Analysis: v=2.4 cv=OYWVzxTY c=1 sm=1 tr=0 ts=69a9523b 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=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=5psZAbpHc07LGj0ksyMA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-ORIG-GUID: rfzAuEsl-49TDxel1CtgLf-2TTRhUCFW 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-05_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 adultscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050079 Setup a software node hierarchy for the latch2 GPIO controller defining the required hog and stop using legacy machine hog API. Signed-off-by: Bartosz Golaszewski Acked-by: Kevin Hilman Reviewed-by: Andy Shevchenko Reviewed-by: Linus Walleij --- 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 23:26:09 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 3274B37CD2E for ; Thu, 5 Mar 2026 09:51:59 +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=1772704320; cv=none; b=NHmhHDaGFwp5+yZp5Jy8h94eK5tdVOV5xJwa+NWoVgpR2vaPn+LeIeYnYFWqk96hAS/qpBu5Kb1j4HD6XONEkiEGmfMK4ME1B9JPG/i4oFlJSZDcKziGVNwAaubVE8eUP6ImNP56n2k/UpSOdkICQ3P/Ib/4IeExVkw0wsAzZP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704320; c=relaxed/simple; bh=nHHCSm94RSmEIVpUlb5PB0C2I8hqgvSMHOW0imJuagM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fFGGPnOhfhpaBL1EJ+qWahguSJGIqT3sq+NbdX14442oW9wFJYzYFRnYEhWTRHZsQyB5vbqK0EV/7roRz/saULVBSZWy5CfMHEOvebLjfXGBQuvlLI2mGtppR5TpLgDjCnTNwIARIJHCkTDQvazsaBfZn7l2F69pV9rPxJwMGuo= 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=jSg/4hJg; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Bj4LZCmJ; 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="jSg/4hJg"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Bj4LZCmJ" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62597T3e3160348 for ; Thu, 5 Mar 2026 09:51:58 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= 9lXayYJMb4sTE8GVHr0RX0rbTjMxVYXXnx+bVcFFBhk=; b=jSg/4hJghyJX7lU7 UqNa0NeFSNDZTu2aeyWp+WKa8GFkTQBkF4JpTzvgoE6DsaalJjvMwNzhqeVwMugr wNt6j5clx/9FfcwA03lArVyuABsLpfefsK4uYJk74G0QOSsPs0waA5+b0vxoXycF 5On7egWWivRCcT/cY/X6ZqFJ4TyMVEkdBDFaaQjVtmrBlzbrl2t1VDVWKnAMvntK OwirLW3Hk8VdDxZl5syi0QaUPGUSMRC2P2eONS7pEPFqESjFtwDnJbmk4Zk8Nogs Xn+dltxPgSn/YhBQLmUDCD4bkD1t7/JeqwT1R8blXiaIBsV0zd3Y7k0XTQap+Dad hc3KWQ== Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cpjh5v4xw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 09:51:58 +0000 (GMT) Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-899ee20dd34so341057766d6.3 for ; Thu, 05 Mar 2026 01:51:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772704318; x=1773309118; 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=9lXayYJMb4sTE8GVHr0RX0rbTjMxVYXXnx+bVcFFBhk=; b=Bj4LZCmJyM0jeD9PWWmLxXcf0BQJyA3LITflcd+PpUQXm6WcUSZljdBfyMtfMBrFxr tVBY/+xY5P6bORGQDyzONOJLec9JC+ja46VJhaqwTV300aTgHuNGkkpR8mIj04QCYDbk adiG0lt5JoR5ufBIwu7MkK0IqbL7yAFXRgiMW1uqNTk3Og8quu+wU/IbMqzQYtZqqIFi 6xajzRGMuztJXaoGeRH+YSL8o9Gh03uI6Yqn1vovrPrNkNQvBhAECUsAb3Po4tjQq9Oi 5hoIjIdnIG+uXcW9MD1sKaHjHkJPqsFrh68DwVKl7kIMeIwOYERTq/hSai/BzdFDzyRn r5jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704318; x=1773309118; 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=9lXayYJMb4sTE8GVHr0RX0rbTjMxVYXXnx+bVcFFBhk=; b=nglRD85tCnszpyzRsuvCypyoCggYdYqpjz7c2cwos1TShdW1fMvuKQJSxuI4cwaNRs SEDtUoDQ2wGTLHq84mqX/FddYdQ1tpBVrP/YwmjtgaUJAuio9za4D3n/cvA82BNScxtH Ke+hF7aaugNXqmxuLXvZwbtY/aC279YrshhJgn9xclaLblCL7dzpNbvaEn3RekELKRcA uE2PvASt8LuuiS9Kk5KzmIEDpyOehM+AdMNHP0KhIA7wtrcdMS1jo0qkTPGEMZZ51PfL 5TtdACocliXw4pK9c+SBAZq+aUu+zDK2fgd+v+22FAKBpn1KVz8PtwBWhxz+PwMun5qx DEKQ== X-Forwarded-Encrypted: i=1; AJvYcCVK7r8HGudKqjVhA1+3+kKvz60GfN5Kwq5KvntLXC4/qstXkjf+dUNu/gsIroNrqUSDyi7hfxuRAaFkWlU=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1fTB0vl5RKhtnWSsAMT/q42yimcCJPLl481c8EN0jjNPeHC0K FAxwnyNPIjmzd02lp5YQ7OOo2b4aO4IpHACS0dbx89In5HTho8sZtexAo+mTWjEqD3Q0i914WfC nNg/ydYhA8MTgKiBqtF0ZJeF1PlKzjiZSCD3Xw6BsflMeBm4sQlC/D2HVaRZ8hYRtsmc= X-Gm-Gg: ATEYQzw3KQAA0J1sxg/AjXoJwELBx1MUUXJ4o5pw70Y/O0/hcY1lHyXSYNigfqlDlvk 6RmRuo1b/0wC0MLHvJWzpdBtqRt6PQCgzkLZUxgG5F3SJKOU56afzeTG6IYep3dwaf2VrYy11hd DqundK9DKkncu/Dida7/2MmjWkCTudSLkYPBlE3oW9ixyQLO/lSTf7ZKvw+Smn24vyhpjwCTMtO jZC4DsGkJxG/jXaJVD7F4+HwnzdCq1z1+xnth9aB1Cmv4pz7JaqNRDpzBbj/n4GaPJOHqhmnEQW MWK2JESc56g4057bMBsOkvI364bPzhSqBR9Y/eXJHy+B+oAZZNE9bE8L/86gTMFQuS5H38Sbwbw cJQ2Sq6Pb6SvqeFd7O6v/YKwcIDRUIavPSkSImtuHES7osjosPH/O X-Received: by 2002:a05:620a:1a94:b0:8c6:670c:953f with SMTP id af79cd13be357-8cd5afa51a0mr579593185a.58.1772704317652; Thu, 05 Mar 2026 01:51:57 -0800 (PST) X-Received: by 2002:a05:620a:1a94:b0:8c6:670c:953f with SMTP id af79cd13be357-8cd5afa51a0mr579591885a.58.1772704317222; Thu, 05 Mar 2026 01:51:57 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:8314:9d33:34c1:88ef]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851ad1656bsm35598215e9.24.2026.03.05.01.51.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 01:51:56 -0800 (PST) From: Bartosz Golaszewski Date: Thu, 05 Mar 2026 10:51:30 +0100 Subject: [PATCH 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: <20260305-gpio-hog-fwnode-v1-5-97d7df6bbd17@oss.qualcomm.com> References: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@oss.qualcomm.com> In-Reply-To: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@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=7113; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=nHHCSm94RSmEIVpUlb5PB0C2I8hqgvSMHOW0imJuagM=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqVIr3OTbQ+EhTR/0KOPIsw7kVLs2Ax4N5tZgk wRj0KhbwzOJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaalSKwAKCRAFnS7L/zaE w8qkD/4sUoU6WuCaaKi2i05/0ZwSbE8TTFhBiPRiYDkdfYLS6WyiOS92WfOTLqKUORwgNJLJce7 0he2vPpJWv8I5nkqqglm3uo4hudl7P9RwR8tJnmUyt8MYPoKqNRJex3EC9r4Ud349DlvZ6zr7T2 PWuGqbTlNlY2qvulNPAM9PnvLU14dwT4Kw60jacWu6SzA8FpX8PSDLQYgayVxVaHf624BU3GIjp Xjm+lnPeVRt2m485svet2KXR3UfJTWMC9QkWIZJfwM8PCNtviAvdSBBQMgOpKXKL5T3IZGSj6Op wHdAkU0u8oT3Coc0JQTKRmZyQG1wtyoKJ5qNrwCoVJoNUL7NhEgP2xX5Ordg286h4szTMSwsRux 2KqcC3+Om7DAWIA6ZSRjIIhL5zkNvQ1N/3KN6NmQ2+RMnK+fw5WmrqcIE5igotMCNGdX5wWWiWp guEtIXSTXIg5teWGUIx4sLQaL4Sb4cB5jjrGWBUCH65KzsVTf6THOyyW48SIXDzUqqOk5t1Bp+4 s/TzXkY8lfm3VCmfqsEZZuccywZVEl5AEAX30YAtEYJeSRIfgduGmKMi7byO2CT/zv72YxHCZsd QYcKlgEAOGe9yEAFXwhmTQLZjLj5aywhBnJ2NKBwVsXJk9TZvilTgRHDA3inVwXpiJjoIPtYheC HhRpJgAzingRmUQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: V8ILkuP2uBspmthWpd67T54GU-FFHcOe X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA3OSBTYWx0ZWRfXwISU1WeZr0Oa iABE7yBONwAaT7KPVhDDneJm4VS1SSLrsL+kcvBCXksgWsW4EiSR0CLwVJmsjAilJ5ZnZc8U49Z 5u2oKs8RJ7iE1qWwfhN431xvJSWilhLRmhXZ8cVD7EwuC2sUZXRhWUsMqhfITrdBdMhK3g54xO9 8zFgg/pESXqNDXpfzRXFgDyuQ8VJE1iaW/NsWXaueu5Z1pq5nx3IzmG8diIQ/kt7LcCpZzMjNA2 EOIKJNdhQ/YhuXYWY2GR70wKjf4DsxKXeT/PVLXNi1IchZ9cgDR7FWnGAhGD2OTc9hMIXoKaubY mrFhjVzOMgJLBUgsEAdjS1D0Y0j/9f09B/EyYtR7xxKW6/BYt3shwOVOPxmc8txfL+06sXpx5Ud 3Hy74Loy+CS5f5V86+brbwr6f4RHNBaTJPNKMQFN9AK96NZOTe0BYYnTgKCN+AgE+uKyCkRbLBt PHZXUYwxg63zcMakzWw== X-Authority-Analysis: v=2.4 cv=JK82csKb c=1 sm=1 tr=0 ts=69a9523e cx=c_pps a=UgVkIMxJMSkC9lv97toC5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=ljULaDYbSg_dSHWjUBoA:9 a=QEXdDO2ut3YA:10 a=1HOtulTD9v-eNWfpl4qZ:22 X-Proofpoint-ORIG-GUID: V8ILkuP2uBspmthWpd67T54GU-FFHcOe 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-05_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 bulkscore=0 suspectscore=0 lowpriorityscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050079 With no more users, remove legacy machine hog API from the kernel. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Reviewed-by: Linus Walleij --- 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 be2e6ed0e744c23939491717a060d3a8456c842b..e732427e2a975585ec873a5240a= b92e3a4cf187f 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); @@ -1049,8 +1016,6 @@ static int gpiochip_hog_lines(struct gpio_chip *gc) return ret; } =20 - gpiochip_machine_hog_lines(gc); - return 0; } =20 @@ -4584,42 +4549,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 23:26:09 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 991F137EFF8 for ; Thu, 5 Mar 2026 09:52:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704322; cv=none; b=rrI6gWMhlZcPHGVwL7hwJ6xm6T3h47yYwS/n9q2ZRx+ErlcIHQRhzNPlGHKoUU/oRndXabQfQFUBU8DAVrnngfLkCsXAlea48BKXPeUUtXqAWcijYSEo+dHiZK3GMqqZF7hBJrOKJiSvr6ppP/m6D685fBdCY3BOT5av8wiv7WA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772704322; c=relaxed/simple; bh=HHxKSnrx8QF12IYAV4N9qkzXGUbUGiRNZBd69B8GJus=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TQf31SKf3mlLXHveGRmBKa44I5NlAFQE9keoEShEH8pof7g9jJBn2WQxXYNXV0As96/7M2vBgtxZt/3FLBtMufpCNOzfbAa2zLBg8zchncbEPyEL7P81VZdbjYh+dkzYBzHTTR/bVHifd6j4XopOdsP1fBn1T655/iyqoLbjrT8= 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=am21ufQP; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HWHBddrk; arc=none smtp.client-ip=205.220.168.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="am21ufQP"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HWHBddrk" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62594jCT020980 for ; Thu, 5 Mar 2026 09:52:01 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= CHD0ZvMybN/f9h6/Y0JvrxV1/0Bjsr+YtXr5TqQuVw0=; b=am21ufQPh0hu2PwZ 4Wg+bv86mBQiRBwf/Ej1najcNbnmrAMFcJkEeRUX1AOkHd+pe+guARxGfTpJHLAG fiRzI4lzaQHdYJx/E4RXfKcRp4ecSfTMwgzfUd9eVpVhXAHYIom9ldftEMRt8Xya wv6XDGDhdRoPmAYzPk3Tk7UanyNku573qvtwxshE9vwfiL2uuX3bMgJDYwsvCYpw ctroLjqDJaPmvisffJAyN7d1hhdvljE92rZt5I9YMMhhGy1YjM2hqz6tZhCJPtaE jDc/7PeUHEDGk+QhLJu7TzyJDRlf+nq6ZM5BHMfOXaUenIbBoRETNMP6heP8THWM 9ayEOA== 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 4cpuptj79k-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 09:52:00 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cb52a9c0eeso5839099885a.2 for ; Thu, 05 Mar 2026 01:52:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772704320; x=1773309120; 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=CHD0ZvMybN/f9h6/Y0JvrxV1/0Bjsr+YtXr5TqQuVw0=; b=HWHBddrkO2hA9iLfqsYrmwUa3DFYkl34890wOKLTVnvhyafby4cU6gz9TZUft8g6bA RdhhO1DYtvIMaJ75GpIWcniRQxf3/pMIafL/rsUbZqVs/8nGuroKzuGu3TkEcESJVJ58 3S6D39Z32rP+23gqtueB3iWpLtt5P+un3SAIP6A73iyYy66/0t1NfZA03znWgm1t9zdV h/eOwsumf0kHusG5fX26EZGu1JPP6OVV/myzqDjQ5EyxnD9tDUbO/EFRNzB6xOhHQsmb iGSDDAI4D74nKjz+ZlEQEJ8SPL/n9edCHdL5PwNTYXbbWHrg2oEMTl+agvF0Ddh8XH+h 7fFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772704320; x=1773309120; 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=CHD0ZvMybN/f9h6/Y0JvrxV1/0Bjsr+YtXr5TqQuVw0=; b=MrSuJXtEzs9aRQlmXg6txw0lotyGRV0ygMehpuY7CTLEheRek53n8BNCfqDhMdK2Xw cuATC1jUs5xVnRnJj8g2KL84tOERIrTmvehlmOBxLs5j5W+L77/4QBWcnHlKO8lh1Gf8 VW6Gruc1k1FNcg9bG0bE+9g3hxAmVa3OSv7n/RmcCJMKGJKtp2Jx6Yq0Tnvpukqxewrk 3lS/w8AZe8HcQvRPgfsgw4FtyDqxcFrqV6mdBz++QOFaVBfNmh+uu6Lw/1f+L6N4ixjP h/RFNe33zvXqgTje9wuFn9JbsXh/rvMoublCCjK0ExcWsQDc+skhGSJ4/hUdr1QKlwTj GtDQ== X-Forwarded-Encrypted: i=1; AJvYcCXvKntnQK/o0dv7+aKBm/OAwlJPwjiTFbFaUvrxIUY/6j2WbTxWbEANhOTHkVWdvpRACZiluu57X12OOQM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0aks3b29dMjQ0GjCp8EMH2W6ifjlSI7/A6knKHxzgjTmz7n6y V76JFARundpIAb8IKB6M55cNRgt5mWOYEBltqXj34OL0ayQDK1qZm7u5ezGm2hrmK0xwa9xIvbu bTNnwKwNV2yInUH/KtA4dwJZ365AW6QLSxXI7V2Jxa8MTeZW8ZgAYwnwbmJzp/jbTFIs= X-Gm-Gg: ATEYQzwcSYVuGafzRqR99NoE03psWW3yuYyaOgdhmR44inOx+4F6kyGkndZqhaCUmDP Rnj0fJaUykkg8JxqmQcSB8AHxQvRzyNSpEbikfhwU4bEqPew5VAjYnVaL+N3r9DqqaSZwMXjf8U pEepEWFReDw5X1EM5c5z7V2AUC0tSq5FCPTYi1CJkmUxnJ16BA9TDFx7eFAvE6APRiBGiUVBDkW mxOcc+IlHMGn+Waqc/2xMTgFIJxB0Rg96R0ZDrzDPsBYcuqQ672WEzg1Sduk82PdjUYTbu4jaDt s49Inw08xcTxeyC/EPMBM8NNLm55FtStK8MdMDlwKEawylJt7fEQbjFER1QVvU17w4Kvi2rTJpB z333dZRan6eWGBHWUDSCp4YA2Kx+rFetMPFTK8URfjDR2N3pJzjP3 X-Received: by 2002:a05:620a:29d1:b0:8cb:72b2:2a15 with SMTP id af79cd13be357-8cd5af12a64mr588824985a.33.1772704319987; Thu, 05 Mar 2026 01:51:59 -0800 (PST) X-Received: by 2002:a05:620a:29d1:b0:8cb:72b2:2a15 with SMTP id af79cd13be357-8cd5af12a64mr588823785a.33.1772704319561; Thu, 05 Mar 2026 01:51:59 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:8314:9d33:34c1:88ef]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851ad1656bsm35598215e9.24.2026.03.05.01.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 01:51:58 -0800 (PST) From: Bartosz Golaszewski Date: Thu, 05 Mar 2026 10:51:31 +0100 Subject: [PATCH 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: <20260305-gpio-hog-fwnode-v1-6-97d7df6bbd17@oss.qualcomm.com> References: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@oss.qualcomm.com> In-Reply-To: <20260305-gpio-hog-fwnode-v1-0-97d7df6bbd17@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=2203; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=HHxKSnrx8QF12IYAV4N9qkzXGUbUGiRNZBd69B8GJus=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqVItGibV7CIxkL+FQcAk1MH5WBNN2KFBq4i2N nNYJebj6OOJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaalSLQAKCRAFnS7L/zaE w1gjD/9X6GlKnqvOTIly4upROqqQSVnKHqiA8DysHPSXiS5iN3krsYiZb4kjSRWtLDsjs6N9RSH 66v14HXZDcxmd97WQE2xt0cqBYYxE3LKHrw0901xDk1HzAcPxeoAOB8j6tOQbGN9N8U+frKyruq 6hRZNl6N4C4w60ZvrFbVT5KD0dJ7aynBsLgIFaB5v6bDK2uf993Pelr/fAVd3Wc64YtUUuM4Y4K Y82r8lGxsfD/t+wvUxxPu8GAkqGTuAEww+g+sGNR4F15yFwGTD1UXWmMiAaupBwB9D2XDTj5rxA 9d3GBcO/NXSX38ro2o6SlgMT5ZpZvXsAU28+rVB81JrKYavQn+u2B5Njj20vpXVHbOipFk1ZxpV PDxU0lZD9uOcaGv45XumkJVu52UROm9GhPYlfQE4y/NIIFChQ6YHwcxXR/NbR1VBn0EbHOL1+77 6eVE1ytqDcMd3kvU4aqZdvBMlL48SGz8x1c9rCnwAjcB1SYvzwMaOfWkXKgqsF0H9mC0CXJl77V EHGvjr8+nTeytrqVFiD9cQcB0f7L1rHDcJnztVNxu8uQYh68/3EUw0frZec8ZpGW67RQnC4JW5W uTN0EOg0HQSGwnKfd5gzUOVdVaYJxnZ+ykuxZ144n8Bbx474aE5atdX5Hn81viTWRb7pBy8dDwu t4r0f46Ohl1gLZg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA3OSBTYWx0ZWRfX7jP3HMiTZRqV aZjitJKwAjNSHcal4B9pmDh5VMjtZyEKFxscQK8wjCpuCHuqGhPSO+wIU85sID4uzPU/7t7MD8f DFi/3ZJGX4F1VFxCVaI7YQ1vuTFwUM0VoE272xOh7rTdcGEKku1eJ9f6AjDDOqVXAuSACetkD02 YJpK8DxsMrOHJDrUA3Zir/xcRBd8qqGkEoijQNcLLmMQz5IUh+OH9Loje5iMM/OB2v2e9BAQc6u +8szpwyppejYmaXB8M5qcYhaQeThglPaBBKjTD3e9+OvTEv6DqT8cV+IBWyHhImOGAvrE7P08g5 L/Jjg0/DH6wkkzA7F2uhbs0BpSy6qiI3uHeb/LbiIoavUep2qt9RDvfDkIQYQHsHVldMZne7avj O/9QfETaXskpP/Zr62O55aPdrL7c2LAvwtvmZbxTpYxWBLpqddRkHybLMQ0TG6SaAbplnksKOer f4WKQiBixsQ3vgxS0uQ== X-Proofpoint-ORIG-GUID: dFgL9H5cfWKklwCOsNpz7RasNWmyhf7Y X-Authority-Analysis: v=2.4 cv=Ddsaa/tW c=1 sm=1 tr=0 ts=69a95240 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=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=Z_vE--IGminT9Q5MwdQA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-GUID: dFgL9H5cfWKklwCOsNpz7RasNWmyhf7Y 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-05_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 suspectscore=0 bulkscore=0 impostorscore=0 malwarescore=0 spamscore=0 adultscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050079 Add a new configfs attribute to the hog group allowing to configure the active-low lookup flag for hogged lines. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Reviewed-by: Linus Walleij --- 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