From nobody Mon Apr 6 18:23:57 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 737EE3D9DAF for ; Wed, 18 Mar 2026 14:01:21 +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=1773842482; cv=none; b=hxEwfI7ttDEy4Y4KwpG5jbJdWvF136nDhRF21uRsN/y2tgUFgM0vibQ3LTeweVpL2xQc12YXAO33Tvr2t+tuw4FfPJS8ZmUb+IVaVginoMsVN7Jvs8CmmPASohWOQRnoluGWJ8i5x7gLHdeVH01puP+koqISNKyWjkI6QuJPmVA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773842482; c=relaxed/simple; bh=ubpNCg+eCquK/K4zeAZFihfdGgYEzRYx81jkET3tDO4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uM+4N1oFa3mU59P09L4ipcHmyb5MUpBU7B+rCWmWccyJNMt1oAvPsg8iOk7kjaxaNxu9dn3RVJEnjPRonD3nNnkdXQuipJAl4NO8ef5hMrEgKHYFr48JtaSh0PIJzUh/dssyh9LKZ100mu5h4GDGUNfOVReQU2ANNKbyJf9ZLkw= 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=GJY6cqrp; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=W2V64EKC; 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="GJY6cqrp"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="W2V64EKC" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62IBB9jh320090 for ; Wed, 18 Mar 2026 14:01:21 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= 36+wA6uuRwTHM8WRBDoOkT5gScbIDxHTx6NZKKyP2iI=; b=GJY6cqrp3uRljkIR K9OAgHcieKrbz8qJLYsmiTvaHsiwHohA3Uex9QORM5ajOcbhc488o/dg3Uwu/NEv ZfC5QEdGfDy8uGQz6rcIRWrz/Rib2M6VCkWsmEwYbEEv8vv3Xr84KKwXXzjuAZWK BTgvEMreEBvBP9mqKQGbDuzrXw/fAFerl9s9nvsS185Msp4XO0TE7FEWfVv2vbif m2hN88JO/LogvU44dANtxNaHSBFib5YFZmgO3rKjHaS72T6Vny8Sc/wdcXu62wff TykDG3BtwN5QPvaDBlBrOp2NwZ+nSlVUmwX9Rj1F0elnEgJByYnj44SFnQT2zgXz 1rk1vw== Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cytxyrhg0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 18 Mar 2026 14:01:18 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-948476b92e8so13180257241.3 for ; Wed, 18 Mar 2026 07:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773842478; x=1774447278; 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=36+wA6uuRwTHM8WRBDoOkT5gScbIDxHTx6NZKKyP2iI=; b=W2V64EKCDajW8ou0Mcdh6B4wMt4fbTT7XAOfr3MZ/kEWRhQromcWl+91wp9CpXMnsq k0Vlk7k09HseLpQgilxIxTEw5Exv+OK1zVTHXPZtvCB9+rHVctaGPcOZnztkuemY3YnS ntqJOpVuAfQlmCZu7u5Svy2/YLnTTvsA5pwwKWgtyOPJWKVnK8k+vhuYTEFCDO34TZEk zaNbxbKeZp2cSwGhtzkM0BGpb5zZc3f7x+OO5lHOX1xz6eQ6CHCVYq0xVM7L9CP3oLhW tpWm0kICo0d2V5A5dn9BRLFekxUxVl1P5MjYaekfpcux8hPu6GqAFtHaI4C0O9eCDZy0 F+mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773842478; x=1774447278; 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=36+wA6uuRwTHM8WRBDoOkT5gScbIDxHTx6NZKKyP2iI=; b=pI58ux5FF42wB+c++oUbatrG1dIV7xDCHYqjBQgY28yXBGNnSO3vJz1ncKSYGAAXoO 7T6o1iSsx9xafhZdELM+UCcoVahHSI+WK9jds78VikuHWvVYW8KEK/PW03jmedCjW6zP SAoqZlakxBhqj+FHFLY/ldfTBOldxYAM+DXP0124bGx0Iax0k7u02mfsy0M5UAutDYtM 1nR/zuzOyzgt3ePGQXU/4A/DBkNYpOAPK7hqh4qw0NNfnury3m0lZ6LVCJnfk4zH9z08 o54GUji8R4wYGe3IL3HFzHkdkHAr8RjySRAwW2KdTEbE30kBfauPwNltavwSwJBjhBo6 gjbg== X-Forwarded-Encrypted: i=1; AJvYcCUrT7VFTEBRZjjTnNMitgQqn+1zXkWUFDFHtEHIkF1xzhpghaGopTiweyUIxBA880QWFjSyi4EpxOgiwh4=@vger.kernel.org X-Gm-Message-State: AOJu0YxnZ723gSd45QkYhHuin5y7grPZlKzaE0BbQGRMaTGdbSCx36Zg kYTQzJ2ckSSXQGMDSZHptrun0hAuOmxghZuDStgPY/gTtFB5T08Gp1UMbYQVeUbNqqzvvDd4O1H iPlQqvQCYv2wsiA4z1XjNS+ClquVlAZOaLL+zfYOvgqGDcAYO9VHlQcxyeL2PoExxcMM= X-Gm-Gg: ATEYQzxfV6o89kYwiqw8nLvNFpmJExBGjLK5wgY2zhxQWqkP78R6HVu4lBvU188IhVE EMunhskVggjnchF6d3Nw0KiBQ15xVyxCNgknAvw5vwo+E1qLv1SGd958pSaPovrTuQtJP+OnqjB puVcQvayfy4FR5JMEfaBQBqftM9vhlIjErVwTdpskIuX3HQeaUjqjsOGtZCnbArs8CImsSIw+G8 9EdnrkS7hPbr9Z4f2tnWzFWTRmYcym9GhWXEfVWTj7fyk4Ctt0NoKy9zzO6VZ+mx2QXfMdUpwfN NB+0lttEjkXQsD6mINIxn++EXNSfqLpVfiUC3zxQ0geQRR2LW/1u04zrJj14+83CgqhqxgdA3gr BMbAy0DKMa25On8Pe5j4pktWQukdGls87efptP1AY1IONPjHxN02A X-Received: by 2002:a05:6102:c93:b0:5fd:f509:c97 with SMTP id ada2fe7eead31-6027d2e45d2mr1342708137.18.1773842477598; Wed, 18 Mar 2026 07:01:17 -0700 (PDT) X-Received: by 2002:a05:6102:c93:b0:5fd:f509:c97 with SMTP id ada2fe7eead31-6027d2e45d2mr1342383137.18.1773842473091; Wed, 18 Mar 2026 07:01:13 -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.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 07:01:12 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 18 Mar 2026 15:00:53 +0100 Subject: [PATCH v2 1/2] gpio: shared: call gpio_chip::of_xlate() if set 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-1-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=4236; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ubpNCg+eCquK/K4zeAZFihfdGgYEzRYx81jkET3tDO4=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpurAiV0trUWpLMD6yT4Jeil+kPSMu1YX5vbP2I 0MXarRPmVmJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCabqwIgAKCRAFnS7L/zaE wyAFEACC3znYtj3MFeRpHPQanS2Fg25LyegJqVKr17u6WhOBTh7ZHeL4BltPOLZvXM9T8uJK9FG wa8TzWSKzzb0vzATj7lCBCdZAewjVByfrS4UKMYXbBF0fdKGyX7Ma6VPzv65wlc9UdSy04FB1fN Wg/RCKGImfUkQjjtWCqDIB4DTTRR8CQPGYT4tZn8ohMEYmSXJ+ilpMwBgr8SHoHCB0lXm4st6bH XRVCmTfJJdOHCq8Hzs0Vifs6P9u/fpHc3vepw81a+zlaOYW9hhAeZKoaTeHIbG7wc4sIdZS6NuL 1ns5DEbwyvWwfIMhPgClYwQQixDXT2HoBduFKSYrIX1HoWKyHGZEr8MviDKy6WU5PIkfhzv8SQd 7MrO4kUPwClil3MU86Pgeng0S5+ZIn57Fz2/HUOo2nVwmttblzEcxMpnMO/GMW8sDODBd0mrWaT cudJlRKAYdjbW9REdaPiolqAi2VHiKW/FnHIB3n/zmVBT1MLIpWsZ6V4enDZLNlI0AzVgpbadLU y0SJg26Y9c0uAZUdCZR86USnQNAwshNS+LSFqOd898FT85reyxfVP5XN2l2pjnXtg4d0Z79Zi0b u4HsI9gP58vUPq7d2al4tw+kZ3/agGbVcuqYLfJIUEGQtggm5BNX4tCTKOZH5+HG4AGiqZ+/MTD CDUhM1WTCKXdOtA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=FKAWBuos c=1 sm=1 tr=0 ts=69bab02f cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=VwQbUJbxAAAA:8 a=Ikd4Dj_1AAAA:8 a=EUspDBNiAAAA:8 a=hgUgvgRoQYGt6P0yErkA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE4MDExOSBTYWx0ZWRfX6K6nLmphUBG4 spSRO3DQfzNNRQ5gkPLYKCDKjie10G2+pStolMzaWk3kIGM1cZlIehAQk/Cny2e9qViIDtYhy8O FXlN+MuL5ne3xCRvXz7tAi6+sIDqgJwRyabJ291uLVD5lEIgVEq7MTgTsqRFHpfa7YLAssp44BV gcAF7gByqyKlADPODCJFVxPHcn6IHTwo6WnM0PM4ju4PQk9R83AOUcJVpGWjGW8QbAQiCWQA/zV FV/gv7ATyZxtR6yC972zdVc3Fs9W/uAK0PXUbgyCgcdzg28VHo0fjpj6Z5dunw+vwHYFh5amtSI wQHcKCFYjTV+JgtDTB1WnCiGvh2xerqEdthLu4dkzl2kkUV+Gcrv1QHY1JJhPDjCHfwFtsM9xKd X2qSJaL3Qd5mb5Vyza8hMrTr0oGR1A== X-Proofpoint-ORIG-GUID: j5LP_eWgWt-VM4NrnXscDm7l5Y8E1Gsk X-Proofpoint-GUID: j5LP_eWgWt-VM4NrnXscDm7l5Y8E1Gsk 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 malwarescore=0 suspectscore=0 adultscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603180119 OF-based GPIO controller drivers may provide a translation function that calculates the real chip offset from whatever devicetree sources provide. We need to take this into account in the shared GPIO management and call of_xlate() if it's provided and adjust the entry->offset we initially set when scanning the tree. To that end: modify the shared GPIO API to take the GPIO chip as argument on setup (to avoid having to rcu_dereference() it from the GPIO device) and protect the access to entry->offset with the existing lock. 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/ Reviewed-by: Linus Walleij Signed-off-by: Bartosz Golaszewski Acked-by: Jon Hunter Tested-by: Jon Hunter --- drivers/gpio/gpiolib-shared.c | 27 ++++++++++++++++++++++++++- drivers/gpio/gpiolib-shared.h | 4 ++-- drivers/gpio/gpiolib.c | 2 +- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/drivers/gpio/gpiolib-shared.c b/drivers/gpio/gpiolib-shared.c index 17a7128b6bd9bf6023deccee50b2453caebe3d9a..3a8db9bf456daaf021d3c691677= a90fc6da15889 100644 --- a/drivers/gpio/gpiolib-shared.c +++ b/drivers/gpio/gpiolib-shared.c @@ -506,8 +506,9 @@ static void gpio_shared_remove_adev(struct auxiliary_de= vice *adev) auxiliary_device_uninit(adev); } =20 -int gpio_device_setup_shared(struct gpio_device *gdev) +int gpiochip_setup_shared(struct gpio_chip *gc) { + struct gpio_device *gdev =3D gc->gpiodev; struct gpio_shared_entry *entry; struct gpio_shared_ref *ref; struct gpio_desc *desc; @@ -532,12 +533,34 @@ int gpio_device_setup_shared(struct gpio_device *gdev) * exposing shared pins. Find them and create the proxy devices. */ list_for_each_entry(entry, &gpio_shared_list, list) { + guard(mutex)(&entry->lock); + if (!device_match_fwnode(&gdev->dev, entry->fwnode)) continue; =20 if (list_count_nodes(&entry->refs) <=3D 1) continue; =20 +#if IS_ENABLED(CONFIG_OF) + if (is_of_node(entry->fwnode) && gc->of_xlate) { + /* + * This is the earliest that we can tranlate the + * devicetree offset to the chip offset. + */ + struct of_phandle_args gpiospec =3D { }; + + gpiospec.np =3D to_of_node(entry->fwnode); + gpiospec.args_count =3D 2; + gpiospec.args[0] =3D entry->offset; + + ret =3D gc->of_xlate(gc, &gpiospec, NULL); + if (ret < 0) + return ret; + + entry->offset =3D ret; + } +#endif /* CONFIG_OF */ + desc =3D &gdev->descs[entry->offset]; =20 __set_bit(GPIOD_FLAG_SHARED, &desc->flags); @@ -575,6 +598,8 @@ void gpio_device_teardown_shared(struct gpio_device *gd= ev) struct gpio_shared_ref *ref; =20 list_for_each_entry(entry, &gpio_shared_list, list) { + guard(mutex)(&entry->lock); + if (!device_match_fwnode(&gdev->dev, entry->fwnode)) continue; =20 diff --git a/drivers/gpio/gpiolib-shared.h b/drivers/gpio/gpiolib-shared.h index 40568ef7364ccbf08b7f583e279a7d5b572af477..e11e260e1f590c46c5e575d3bb8= f3b5a2240892d 100644 --- a/drivers/gpio/gpiolib-shared.h +++ b/drivers/gpio/gpiolib-shared.h @@ -14,14 +14,14 @@ struct device; =20 #if IS_ENABLED(CONFIG_GPIO_SHARED) =20 -int gpio_device_setup_shared(struct gpio_device *gdev); +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); =20 #else =20 -static inline int gpio_device_setup_shared(struct gpio_device *gdev) +static inline int gpiochip_setup_shared(struct gpio_chip *gc) { return 0; } diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 6e000ad58a11f7e3de85d8a0630150368acc53ce..1777efe1a986c941da464da9225= 5c261f27a5a6b 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1223,7 +1223,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, = void *data, if (ret) goto err_remove_irqchip_mask; =20 - ret =3D gpio_device_setup_shared(gdev); + ret =3D gpiochip_setup_shared(gc); if (ret) goto err_remove_irqchip; =20 --=20 2.47.3 From nobody Mon Apr 6 18:23:57 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 Acked-by: Jon Hunter Tested-by: Jon Hunter --- 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