From nobody Mon Apr 6 19:39:23 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 91DE83D75CC for ; Wed, 18 Mar 2026 14:01:22 +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=1773842483; cv=none; b=dK8HXvIMRqjrYLUuLLR2++HfyjiixGAE6xBJYIiiTvukn2mOCJNaSJH+2JcAYYsO+oIW7HYu34daNsdjAbp0yS/8XE7iPTNYuURCaXvEPF/h9/W6C2HAGEHG6JIlkkaPjsdJubeGos6EUbCLripFgbfmLAw2g01xvqSmbiIwVIY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773842483; c=relaxed/simple; bh=vGRIVNQvNxgwYEGhjI74/Y1IUF201zilUAtuMVGPtVc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sRRatrV3cATYRGx+9oko9V6JEVSmSe5kqJHtGR09tsmiEvKlIGMmsv1/kKyeYedoYtqzLE5DHL4in22w5ksXuGv+gKgWtjOJKhOrpJ7YUI/OqszzNX7GLwQlOdbHqwEoZ1nbXbAQk6wCZnxzsR7g12uhkbMgDh8bNHsQPx/dSY0= 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=ogDtvo1B; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=j4gebhnk; 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="ogDtvo1B"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="j4gebhnk" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62I8T4oU1050806 for ; Wed, 18 Mar 2026 14:01:22 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= cFw6FFTXrfCiILH2Pc+y4DotjS6oQUBVV3Cov6fyJH4=; b=ogDtvo1BXu0QSd/G 99ssGn37SF5nwvt4jUBAS4JQ/u6bF56Fsq6YTkpcjCAV8yTZ+GSXNoETGdkBpr1A wW9iDuWMEvwxmNSwIA/+tZNfMGdkejqeT5yXdPDo+lG3GsxebWcNOn9YPDUYesmD gr/Dl0SHKaO+GF9DP9hDHjcjx1ExQoZ7qDwXx25C0r1lXXb/dovt889v/G6J8+ig YEzZwPVFE2ssiGlt3y8m5AdNRHjrbsBqylzFPZHKojm4oqzSzT+bXeYYoFL0j4U1 WBRT/H2E18nuo+QgsrSL4JlDHbu+5GT+VX44AJBXf45AJok/Dfi8e9LomtizKQI2 OynCWQ== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cyj4ejsn1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 18 Mar 2026 14:01:21 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-56b6751339fso10221346e0c.1 for ; Wed, 18 Mar 2026 07:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773842481; x=1774447281; 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=cFw6FFTXrfCiILH2Pc+y4DotjS6oQUBVV3Cov6fyJH4=; b=j4gebhnkxCmE5xIY3ONBVKsqLXk1k2RjG4YMAGA0hqUxTCCae1W4spERp/sMy8SxVn 8v9L88wSsL5HcCrBga5J1c55iGCkNOFZicqt6XN9TNYYat/hnfGKIB/vKbjvf0Pz2c4H Ac2ymHwOCiRjlZFBXsyek/iTzdQPQPypom1KRWFjCVCuKG1S+rKWKPnPIfA3eWIlj914 SaWJ3zk1JZpXL1HsfUjJv0o8j7oA/1jW9Sb6h1q8hqcrLGY5b1yLbH6nFrECnN0NmCnA tCi/NXnMlvDvhwnABWIls7XaV29+hHo3x1OfsfGIpmwBV/dU86JJRIbxbBSySgQvRglk LyDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773842481; x=1774447281; 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=cFw6FFTXrfCiILH2Pc+y4DotjS6oQUBVV3Cov6fyJH4=; b=PBwpllMJxzyZpAMvuqkT1txyvH8qis1NWv8cUrBJVogjHDTaYgPKt4lc8MEGd+5hBF IPKvjd9oFatuuto7reCka0btnd+dMHlz3ESyu/5nLzDbWjU333lB4AtwujmZn/l03WxC 2F64stM63KJmyfgUJwRuEgrkNPREDfE4FY0YyMuFopfJQ2zw2IWler2CYv6IE8G0Ol2L q0XVPP1QkBDG2sO+mLcxSBvRIvG4cNneDSFAgZy+7mADH4hTauLzIUzkvMl+3EEr8KJi EG8+sbm9/MR5uXl4WCt0z5eMY/+57qiLuSTwToOOfb15IriETLtwnHtZKlkt1ucJacpC f5bw== X-Forwarded-Encrypted: i=1; AJvYcCVDx7cdW7IGIp/Oe3vdjyL/ZaoTnJFwa22pKqO8kkNxBwptQspOOUcqLR9HDr11qIRywwIOAnU726Is9sQ=@vger.kernel.org X-Gm-Message-State: AOJu0YziChzcOa4QsfmsWeBtetNBxPKhcu2Ofofj0IhGqv3SfnngTDZy DzXnCF5MLGnrA41SvV7rCdOEEDTR6rXkhn2Q61ZD0XFrpwZyDmkQR4kbtdTJwWnQ0ZGkB1FVrqM 5iB/22ecdPENlNODCsPHQRIw2wm8C5yaJYW55wNs8sg39eX6B8bJ/jvAPFDKhTOlPyCE= X-Gm-Gg: ATEYQzyCUgrgF1Rn6/VV4oZOq2lQssNNrDG4pioBArHKkzAHtpizcCnw0RiqknM+7hr bL98mJxv1Jdq4KSFRj/fWjEfrFU4Ff10HiqoNY6HDv6mpg2ZYATiaVWEZLyY9bags+I5vqpBbn6 iY2orFsUSt/Q4vYQQJuJJkLYHM1si5cZdC3jP6QYw2+6XDkPGDn4BMAhZIR5s3P2ZBEqBiCdmMs W4QuJ1yZt+8uyI51HufY1dTPdSmEVttP04Ohq1OyQZneF2REkcTcOhG/mN6H6r+b24kx8AJla6x fUZyT5BIvKNKCUlt1jEhU04NNI988MkTXnJ5sIsVSQcAOxlLkGpZ1XPo9FitIT8bkt0iWJEbkiW cOLGhcubqXNC4KYnh4Q7S1ScS4EzS/s2/D134sSxKgBk3k92d9iT7 X-Received: by 2002:ac5:c00d:0:10b0:56b:9534:c06f with SMTP id 71dfb90a1353d-56b95dad5bdmr2602835e0c.3.1773842479359; Wed, 18 Mar 2026 07:01:19 -0700 (PDT) X-Received: by 2002:ac5:c00d:0:10b0:56b:9534:c06f with SMTP id 71dfb90a1353d-56b95dad5bdmr2602788e0c.3.1773842478624; Wed, 18 Mar 2026 07:01:18 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:b8ec:50c4:23a0:2505]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b97f144e53bsm214207566b.25.2026.03.18.07.01.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 07:01:17 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 18 Mar 2026 15:00:54 +0100 Subject: [PATCH v2 2/2] gpio: shared: handle pins shared by child nodes of devices 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: <20260318-gpio-shared-xlate-v2-2-0ce34c707e81@oss.qualcomm.com> References: <20260318-gpio-shared-xlate-v2-0-0ce34c707e81@oss.qualcomm.com> In-Reply-To: <20260318-gpio-shared-xlate-v2-0-0ce34c707e81@oss.qualcomm.com> To: Linus Walleij , Bartosz Golaszewski , Jon Hunter Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, brgl@kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3635; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=vGRIVNQvNxgwYEGhjI74/Y1IUF201zilUAtuMVGPtVc=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpurAjQC/zTKTNa6ISVRO4fkb5CMWzyPj+0eFCj 1XhfkOnUL6JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCabqwIwAKCRAFnS7L/zaE w/pND/9txde9rKNPlu3GlLAi6r0+9qjQB8YQF8oj+XNbB7CjEIsW3jfNJmhbKnmLc7c3VRBsMz8 09wJPguJu6Xp6xVDI2vmV//qJzIFa08xOEZInshy9UE/j6EBpi4/WqtaczzAKIt0tsWLn2SQrUE vDAZih0M4Y5tpaqMtn7MUgCcbgoyTbLMm4SzFYBsv57y57bGGDeMBmTW616pgp4wd4c/fkSyht1 3BwvgS7IpVyD956GmPyRofRFxpxaZvTrcndVcQ2UFf259omDezFoVTVCf72x8nw9swsyLT01w/1 o20x6BrgK3c7uvxGA/hYCK28iOm3HXorqwAAqHIfCe77i3b3dZsR3U84Va5Akc5748ddswYoLUs 2jsX7rRFs5zFKgJ+0PE3sW0kg5QtFPa2PAclIpx8TkAURj/JlS53V5OTirMweYEJOTMS8NKP7UK rfWrOFGNfNSpCQd5vmfi1NuhQGCUu1upE9NgoT1FQJPE+1/4zmahBX/ozxgUtrmnLLra2MZ5mxi HrAM5YYf8tQarkAbPzqJUHxBAS6DQua0Ddx84msajh4gZ5oImI0ynv6LMQ2x5hpoWvI9LQmK8EP TNwaHV/nvgh2FDLoEbRsKk9cnBNOPYVSpED5h0Ja0vXmqAbSECv2QD2FWRnSA6BOJw16vDDJk08 JX942sRRDDZPcOQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=T4+BjvKQ c=1 sm=1 tr=0 ts=69bab031 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=Ikd4Dj_1AAAA:8 a=EUspDBNiAAAA:8 a=CIJz31xmX84a09M9gvMA:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE4MDExOSBTYWx0ZWRfX1WPfrL4a8zKN V/zcR3FPZsb0+H9Cax+jarKssWt0lY2+WxNKkhYsL8uPoKhDBHi3plr7VKeNz++etpHS6aV1x18 JwjiIezDyTo2Mu64Gc8NrORtALyAH9y0bX0OY7uoFQyvmaCLA9B2fBa+7mwLalfcDVoKnWen0lg oYapUTXFQETGOGn7Gd6JF8kFHtIqrquSt0j52o4Bd+Fh8Tu9m88a0KNBqP6KvZjU/7362pgPeev v7UsNTECpeHfpoIUo8D3U59k5L5+XNruVuE/t5Auz2GPEVbyZc9cM8oU0KPmU4aFzdz0f8Ufu9u 12oIHJdzXfaXpf8GjzS7ND5xezzbxWL/BDGvACk5qVRnfNP6/pW+G7dPj6Ddlz7jzDwr7SSL9HI NoNKrqe+ocItN7A0Jp5BBMVstO5zCgeNrAiutsriZ0BLzkO9LO9j8kvknJX37kUUf7sir38gVnV if1Mvkc6Wo+854OXjJA== X-Proofpoint-GUID: IZnEvKHbc8LVpPF8Zb4suSzNBswGf3GW X-Proofpoint-ORIG-GUID: IZnEvKHbc8LVpPF8Zb4suSzNBswGf3GW 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-18_01,2026-03-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 phishscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603180119 Shared GPIOs may be assigned to child nodes of device nodes which don't themselves bind to any struct device. We need to pass the firmware node that is the actual consumer to gpiolib-shared and compare against it instead of unconditionally using the fwnode of the consumer device. Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support") Reported-by: Jon Hunter Closes: https://lore.kernel.org/all/921ba8ce-b18e-4a99-966d-c763d22081e2@nv= idia.com/ Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-shared.c | 6 +++--- drivers/gpio/gpiolib-shared.h | 7 +++++-- drivers/gpio/gpiolib.c | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/gpiolib-shared.c b/drivers/gpio/gpiolib-shared.c index 3a8db9bf456daaf021d3c691677a90fc6da15889..e257212fa5e3df249de0d06eebd= b2165ae734ebc 100644 --- a/drivers/gpio/gpiolib-shared.c +++ b/drivers/gpio/gpiolib-shared.c @@ -443,8 +443,8 @@ static bool gpio_shared_dev_is_reset_gpio(struct device= *consumer, } #endif /* CONFIG_RESET_GPIO */ =20 -int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_= id, - unsigned long lflags) +int gpio_shared_add_proxy_lookup(struct device *consumer, struct fwnode_ha= ndle *fwnode, + const char *con_id, unsigned long lflags) { const char *dev_id =3D dev_name(consumer); struct gpiod_lookup_table *lookup; @@ -458,7 +458,7 @@ int gpio_shared_add_proxy_lookup(struct device *consume= r, const char *con_id, if (!ref->fwnode && device_is_compatible(consumer, "reset-gpio")) { if (!gpio_shared_dev_is_reset_gpio(consumer, entry, ref)) continue; - } else if (!device_match_fwnode(consumer, ref->fwnode)) { + } else if (fwnode !=3D ref->fwnode) { continue; } =20 diff --git a/drivers/gpio/gpiolib-shared.h b/drivers/gpio/gpiolib-shared.h index e11e260e1f590c46c5e575d3bb8f3b5a2240892d..15e72a8dcdb138f19ce000a33d3= f53cb8f140bce 100644 --- a/drivers/gpio/gpiolib-shared.h +++ b/drivers/gpio/gpiolib-shared.h @@ -11,13 +11,15 @@ struct gpio_device; struct gpio_desc; struct device; +struct fwnode_handle; =20 #if IS_ENABLED(CONFIG_GPIO_SHARED) =20 int gpiochip_setup_shared(struct gpio_chip *gc); void gpio_device_teardown_shared(struct gpio_device *gdev); -int gpio_shared_add_proxy_lookup(struct device *consumer, const char *con_= id, - unsigned long lflags); +int gpio_shared_add_proxy_lookup(struct device *consumer, + struct fwnode_handle *fwnode, + const char *con_id, unsigned long lflags); =20 #else =20 @@ -29,6 +31,7 @@ static inline int gpiochip_setup_shared(struct gpio_chip = *gc) static inline void gpio_device_teardown_shared(struct gpio_device *gdev) {= } =20 static inline int gpio_shared_add_proxy_lookup(struct device *consumer, + struct fwnode_handle *fwnode, const char *con_id, unsigned long lflags) { diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 1777efe1a986c941da464da92255c261f27a5a6b..5df06eba076a462589b542278d4= b849a8ee1032d 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -4737,8 +4737,8 @@ struct gpio_desc *gpiod_find_and_request(struct devic= e *consumer, * lookup table for the proxy device as previously * we only knew the consumer's fwnode. */ - ret =3D gpio_shared_add_proxy_lookup(consumer, con_id, - lookupflags); + ret =3D gpio_shared_add_proxy_lookup(consumer, fwnode, + con_id, lookupflags); if (ret) return ERR_PTR(ret); =20 --=20 2.47.3