From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D91F19F487 for ; Tue, 10 Jun 2025 14:38:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566311; cv=none; b=nZsIy6wXHjY+4CbdCv3iR/rCJcg0Ez6o+9JZyHgIzZ2JXPn3qoHoMWhb8yREqrV8+PuSBmAIRG+vGiTTYP0L4y5Wdoi3GQcLxCuXrUlTbSqHZX+Wf1bukM+RjvbwF34788k5aiXGGl7qKDF92L31H5sAOkNWcyry9+O5rkQex8o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566311; c=relaxed/simple; bh=K0a4sQIijNrwuXNNNxuWxoMUfCBVUYiHrw1VRd7Sx9c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lrpoIUN3AQm2sIqDnhdjYWn+4e3TB7MZYTpjTL6BQS2jDpa8tVxes85ez7qCvjt0Ons+wrL4vC175dSX8ieiY5M2ScnR6P6bphsPR97IZoe+fWKefVpePqp54PT0Et9Q7XhgsLCjXN+dzqxPFOW9ej8o2Z1K0XhuKnpjrjc/VLU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=2v2+jGi7; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="2v2+jGi7" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-45300c82c1cso10501635e9.3 for ; Tue, 10 Jun 2025 07:38:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566308; x=1750171108; 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=npwAzi3ntbFCWvxDilBFPXXBoRhcu7pjhvuvWorGBsI=; b=2v2+jGi7jo+PCnSQxUI2yYW3khw+nPZ+FiH2jPvBxDLtdpmPGTf7mLsXKaehTZNDGd oyPAoiJ4IJb3tc/AjlRxPXpLNNWnyQQpV8vidSSBhOtCMTgxAhRocH+d1SQtWKbzip7q AXvl2YTFwFx+rGgBGE8p+CDHhyuQ5yqonSSh+rA+P9ACJSQ9jv3H91i4+UF9eub5tBHg uEBIzLoA25ZNzXdUnlqcwhxTgC9MLE7L4ILZf/51CqgGVN1DRkOt+5nw2axEcbEp7z4t 1mQyJ05L206ZxDe1jaNIjzsipIIGRwx2DPCkmAzZLpJmF3j6//kRmrbi7yXX8wHz3gJ7 gRUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566308; x=1750171108; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=npwAzi3ntbFCWvxDilBFPXXBoRhcu7pjhvuvWorGBsI=; b=o8icr9piLibXDlSNfyHPrB4JaCDewPbuPrXLc8GKUAJgoWJy4rgJ8mhMfkw6Tve03L mV/Lyvkkr1NC1vNhE7CdFG/y79yfcIlNdEZqh+PqcdAMVtw84tuuwEwuvmPeguspFXtD GEDr/XGE/R/VM7VZ0zk5/GFHmw3PrUydDRGF4I0MQi1zG4irsQ+z8qaJXYIr121uKBW1 4ytCaYajtN/2lkvfnefHmpwfNp6wT/zGb/hdbUWdnGdaaH9mYm4ytLxY1MzmjAJR3CoT iBJfas1JCp2Rxv5hO94YySnzgYQDcTiN9uwyo1yaGTx/o7uRqOlCSvBG7UVKmyOMbh/l eo5w== X-Forwarded-Encrypted: i=1; AJvYcCVqP32YAAarm0tnxZBUSXdQb8kKHMUIFB3Jf8Tf/4kItROlUtXxJwgv837Z0XgqA34ale0zTZYlCRy3/v4=@vger.kernel.org X-Gm-Message-State: AOJu0YwmE0p19wW3iI6g9200wRs9M20n5jpsU7+lnyYfoaMokS5iqW1s i0AHrASP7Ww6AeOqPRaUMBsqjl8w5+UV9WxcC1y/YKOpu57/tL/rhVZ5qCrQl/Kem+c= X-Gm-Gg: ASbGncvjMxmvz7wGLHcnFhp6/mxM8DcT6QjBNaSz9Psd1buWCNmS768x6teWYQbv/Uw teUaODsfMKdpb+U6kn9+BBJYFx6+kIbRkpXjIcQArLMAJQEpMkxj2Ggw3c39wo/KamONXoHW7+N b9nQyrAVt5pUYCuK5HgzIbByesxDD/EXgOEexVxkv8zuK1PzG+R+7oojvtDCP7DMKy5gKggoKqq HqWiF/vTLrlK8o5G/eyBH/RRH1Jswz36gtCF6GhQ4FGa9vxk6i/FdYfaAXhGQiGRRiyr+QNNIBS EN0WDpZSHjVLYVK6z1X1+XYRrJoXefWTfd62VRIWKQLHaT+SGng/ X-Google-Smtp-Source: AGHT+IHADwDUiowP1VqDn6bHTYazy1fJaU3+WvOB375z0PSS7WCTUy/V3eQbQBUDjfOKEmlrRO24Mw== X-Received: by 2002:a05:600c:46ca:b0:442:ccfa:18c with SMTP id 5b1f17b1804b1-45201426873mr133231485e9.32.1749566308472; Tue, 10 Jun 2025 07:38:28 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:28 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:16 +0200 Subject: [PATCH RFC/RFT 01/15] Documentation: gpio: undocument removed behavior 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: <20250610-gpio-sysfs-chip-export-v1-1-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1083; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=THG/Fz9qHVr/JyTG5u6I/vfSnnEbM8AweVBXQl5IyE8=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENfkjw1VZTrSh4NbqOsxZmL9+q/ZIF6oWn4O g43+cfrquOJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDXwAKCRARpy6gFHHX ctNYEACf6nlZ8E6yIMGUwH4HSRiL+mQ6qLM4ech26E65ZPzzO6TcQSFgPesQjtKX80XnB/ZPaq8 VC7BrxymFJQaf8XjCx5UNDuM+m/KWJaoHleNY7ZlgrIgAkxRT8UVFXv6gBgyp0BK+7rVAowS92X L39gKBaeZQOVA5vLzsITNEYwEFLIigzjayfyIEec3FcNRTlW/1TkNHdt94P0cU2rT9tREhUSwNu z49YUYQr8LYrp2C+zlhARIMfDtE9yzcL5Ty9HpacAguopewUkc5pE31QlpMAE90x7kTJJrUExib 4DTiUZk49ymupXD/9dcf5BefJNgLckOJlD7HUh7V13xbhbJVuuQNbqfh5HVaMz+XhmHM1TBsy3l rJ2Tsb/8+DjHitGqKtCkG2uZLgY/A4kltzcdp5bBAqfTJ/f8u8Ub9alnnsgj+U6ibdENWGyRaG1 3qLg9WrXSy1Z/kdc/+QQqcsMJl5paszD+bEkH7IeggotB7iyI41s48JZyNvn4SfaQ9891JPOzqQ frF2ElHMomPSVIHFx7CkxgcdcKiA6eiDfBijisVXzXy42+AAGSL0iB7Azd8Gpxj62z83oHLM5Um qUFxBb4zEPACFKgnVx6atHw+zI4EePC5lKdx6KO6VjRI1nd8cIuwtcXtm9Xm4HMXfcwoZ+dxrKb nWUmrEVoy6yjbZQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Since commit 700cdf7ed00f ("gpio: sysfs: make the sysfs export behavior consistent"), named GPIO lines are no longer exported in sysfs as links named after the them. Drop the misleading bit from the ABI docs. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- Documentation/ABI/obsolete/sysfs-gpio | 1 - 1 file changed, 1 deletion(-) diff --git a/Documentation/ABI/obsolete/sysfs-gpio b/Documentation/ABI/obso= lete/sysfs-gpio index da1345d854b4ad40ddd99af090597574fbc07565..8203bc2128db7eb9ea6724884e6= 80ed4b669853c 100644 --- a/Documentation/ABI/obsolete/sysfs-gpio +++ b/Documentation/ABI/obsolete/sysfs-gpio @@ -19,7 +19,6 @@ Description: /export ... asks the kernel to export a GPIO to userspace /unexport ... to return a GPIO to the kernel /gpioN ... for each exported GPIO #N OR - / ... for a properly named GPIO line /value ... always readable, writes fail for input GPIOs /direction ... r/w as: in, out (default low); write: high, low /edge ... r/w as: none, falling, rising, both --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 463301A76BB for ; Tue, 10 Jun 2025 14:38:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566312; cv=none; b=qHDXGIswmjvS+qRnyyxKQhvgda2R1G9b2wd7br7BEFm8jZobLoKWJ8+kiqoJm6hmJh6BtSDql7VI7uRzZrInAwP2M/43Si0+JXXPLrZsKAfsKuImrCu0uS/rPWs7TpadrQSgk8enx/OMk/y5LOtfhfReye7ZN7l6SVmzCi3dVv0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566312; c=relaxed/simple; bh=y6btqwIDw//7bl16rRxqja+q+WLuFh516AhK3+npkAc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y8hYAj+3BDHnZ/UeWEgWjxOjWoZH9vKGRKd9zEeLKVR3X6V0czsWRaNb8XZQ7NTSs/8Wv+DuF6MtuF5V5CNTIltobQn7EM4AE/LkNBAL3JVy9kzaGZacL8kbS/WhZUfPQWjq03kRaGZnQbUfCAVhMudcXSbLytGldb2fwocB8Cc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=HkbFtcr2; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="HkbFtcr2" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-451e2f0d9c2so43428655e9.1 for ; Tue, 10 Jun 2025 07:38:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566310; x=1750171110; 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=s9jr3lI5fcVvceMahRG3Hmp3DwAffmrkbyN3OMLcVqA=; b=HkbFtcr2ivqBZ0buQ9RBYYMxsee99Pdf+9RARVryKDhLj3fo/wfhI1JjPqKdiNGVA6 JO4sovID/zLs8oXVru13FNuERjIbPTeNgBnfgVHJORdfJgA7POTUC0Fy9KmhOq2NIdpy Qumkq5hOm3kYiqCPxamWpwILY/UFREji1+UH9R3izQkwHAD794e4VnBJkOd0abwGf1Uj l9bxrSWA/WNEvaA9b/UrYpVWMbg1Y1W9NKhL6ubbQKYVVmUNOztEJ9sD/pblZZaIb7Vj WscmK7UcqDYBVNQL+WaqpmeLS6jgJAhaM81mUyIbdkLXEoNXTKfjFNMJOkQV+7RJtQOS CMYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566310; x=1750171110; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s9jr3lI5fcVvceMahRG3Hmp3DwAffmrkbyN3OMLcVqA=; b=XbEJjHuscGt45W6HguViY3/KSehZ5koiug6u0tsM3LYGLozc5VGubVjFQhlbauuIV/ ocBTzv0M8kyEzbChY6YCjnykwiCyEdpLbfYYBu1fAXzey8gEDS+lPZpKCiTLYBwuVVMb YK3KTQ9e0KCMZjq1L+kNTwsxQibrmgLoHKmk0L1BNVbGi7Fp8DsM22cIaMxM2olqDY+v pLFebytgMme60r95d8WlobFYBXNzPBu2O1i8twwf3psKaaOC1A/WV1bXOyYqBiR0mN/Y 0fc8jgJfn8Zck7ZVdaNzVCjaY33pKwp6mZMC1L0bjvNC7jE98X1jEz+ZzGq/FPVjnZ05 PwXA== X-Forwarded-Encrypted: i=1; AJvYcCVFqGznXMkYwrErXMtlt2ILwLFJ9vpHINpIJp6RoZjZKd+/uH3MwZtGsmKVOUJfEC8nPgfgnJHFF4Hrpnk=@vger.kernel.org X-Gm-Message-State: AOJu0YyZO5SWT8bvKjuuhUFIK4a+AEclI8u/uLa357pyiHnwEnch0z3Y WE/CkLqtqYdH2P/Y1KBpjDJvfI8F89n56968SEliAGyOry/8i29GCLk+nQvsXSA341Q= X-Gm-Gg: ASbGncvx6yxYaUAilsiU/3HmT+ZXvqJCXF5p2tS/VSLVIl/ltj0A+y0vvRruXsM8gsU MGXqvdHT92jNnWQgOnjQ7DO0/5aP6lBQzDKkRno+mS4+ldHricsOrdOTHtPHasbIfit10L8Ge4i Wi94NalYAI7uB6ST69Jj4E5ZxjRA/Mm/etuHyFe1epP/kdsy4T7Wk6OieyXjAMlI3bERm4zUFm4 KD9wcYwKfnaEsCcVn7nWmEHIPgDtUz43QHi32j+AEL98A9GpFGGqJ7v2/KQjNkmRh9qYmnEGdD3 cvi+79guchk8NCEBgJEnMapwzoa5E/IR/EyavZhK1e0kybszwc04 X-Google-Smtp-Source: AGHT+IFMEdpRiKRmCdxKw8aCmuhUo9l3ENL3IL5N0Xs2JkX6tBt5+XQbLM+8pkMJbmwyZUTaEW9/sw== X-Received: by 2002:a05:600c:4589:b0:453:827:d0b1 with SMTP id 5b1f17b1804b1-4531ce8bfe6mr37487515e9.2.1749566309544; Tue, 10 Jun 2025 07:38:29 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:28 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:17 +0200 Subject: [PATCH RFC/RFT 02/15] Documentation: gpio: document the active_low field in the sysfs ABI 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: <20250610-gpio-sysfs-chip-export-v1-2-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=966; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=xbj6qfG37TGxyivMvX+Q5Wvm9h4Ic80LNPUC37eB3xI=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENfAUhmYNB9q24XAtLcEN+gyGiI6/HDChX3M DKS93JGMVOJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDXwAKCRARpy6gFHHX cnc5D/0TxSKlKzXvrMYuyQdHutExksJDL94m5z2oHjqNRxZkCzYAhxNO/GUiDkGwLuoUKkLX3IF rx1e8JDkmlQaOjhO4MLwfe5ICGBx16aYDJCl06JWfRQu44bwMTUY22ps+cxV8R8i1kYR+hxO05X LIECT0ko1GMiAM/7PxFRz/8o5G1GshisUcEyGXyaAc+xwico5tnSspuL4NNif0lLhloFf6eGJI2 b71Ox1+XaH6rq+rPbTzRWnAD2RkHch8OWucu2tq3lnkVvyTLUn70ekEc0k/QzuC6nfK44wlkKJB u/NV8HtcjP2PchH7zSpaJeRo38uf8S5KXecxaNdqZpi4DVCmBnk5A2ssiqPXgZWz223WjnqnYsN kUxhg5PUE9nEqgaV605YHIfBULNOueGC5rZSqq6yM5QGevdEdPMAXgOuD9KEaX2/8XwxOR5TzNA vfhI3hHAtr84vrTO+L7sndowv0fHrhkxCMx/SXhU5HhfzFp/J6/RIc8kq4iWwhQEhJkUxqy1VSH eYRCsZNa4rjZQTXm4K9JLFYgk79r3gqSKSuEnn4c8mJenAbBO18UMu5s2dBFy6hI35yt2BMiFZJ r0LmiQDxc6V1VhA7JDNzuKxaLqGmcsyOSQWCRYvB6tA7OA7KIrecYq61r9OgrAHjcaEKWhpQSB8 3DxHLUqWbbzBwvg== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Exported GPIO lines also have the active_low attribute which is not documented. Add a short mention for it. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- Documentation/ABI/obsolete/sysfs-gpio | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/ABI/obsolete/sysfs-gpio b/Documentation/ABI/obso= lete/sysfs-gpio index 8203bc2128db7eb9ea6724884e680ed4b669853c..480316fee6d80fb7a0ed6170655= 9838591ec0932 100644 --- a/Documentation/ABI/obsolete/sysfs-gpio +++ b/Documentation/ABI/obsolete/sysfs-gpio @@ -22,6 +22,7 @@ Description: /value ... always readable, writes fail for input GPIOs /direction ... r/w as: in, out (default low); write: high, low /edge ... r/w as: none, falling, rising, both + /active_low ... r/w as: 0, 1 /gpiochipN ... for each gpiochip; #N is its first GPIO /base ... (r/o) same as N /label ... (r/o) descriptive, not necessarily unique --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DCC91DA62E for ; Tue, 10 Jun 2025 14:38:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566314; cv=none; b=NDU/W1oVzDUjvAoKvi65rI4TWwl+3DeegoRGxu/J/KmWqNHMHGO+CMZFTr8gGxMONwDu3gVrJrp8Jz0zgexqavrGOR6z1lxL79tVCHun+T/J83zBOshqwQMl6lVm0O8KzI3H3JphgrbN+/TCb2uuh42LghRqZ3CL2W8slD45URc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566314; c=relaxed/simple; bh=r9K+DvpICcJ4ZuUsbWlhbJUgVdpRNGn9i2eo8rHrwoM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PGwoHLlxJdNfCIWN7tqU3E277udlQt5mfYwfnJFd2OruQbPRvlAu4kz4Anpv917OrVrXesjfAvgi9/OusysLYa93dWIpVPZ/qy2SLZlcCD4Zy9OmaUhb7A7cXkDNX5LCPl/yHrPhsGxRXxUXDAHrETfS8/3nvmx68J0Ue2IpbaY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=VKbTzDWS; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="VKbTzDWS" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3a5257748e1so3757485f8f.2 for ; Tue, 10 Jun 2025 07:38:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566311; x=1750171111; 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=WHQOcKZ4A6xyy0RM96i7C2PXvKO3nwwvUylDj/GnkE4=; b=VKbTzDWSOUtL5P+b3LIswuySfLIhfHbuCgotEwjpky3Wos7ydpnteaaTxkz0VQOAQA HoJm1WTWG+F4vLvNpIsXuw77kQYoNLuWXhbI+Soc2d6jBE/JzZCCgB2jWOeesHC8zV3O zaXwSWQbvP+RwkWbd8fwhlo6ajawG4ziH5cG2A/yHarSHNYXASD+v8eVYGq/bUKzMbb9 gf+ls0W6Xf6TDQQkCozncr3Zn9CE2WnriGncAGA4IemGu6jwrGsZGkXNuYgSxpgfxXY2 Xlxe5mOwXBvVE0bbGvjtpKo6Z14b6bscfCd7Obb9zwHTeC3Gnh90HczffApEV0eRsISj jHwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566311; x=1750171111; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WHQOcKZ4A6xyy0RM96i7C2PXvKO3nwwvUylDj/GnkE4=; b=HLjjgWBgpEpesJyr3Wmy1Ppv2Qy174OE76bhcIIWmpo6EMRkXwlWw/nXPl0vLO5Fkh 1AGXrx8YSeB1KMhkEayuqshaZVCk0fMuCoAzKI3VFbdWf1xeCGRAfm+UUV5nv/oM6D8N R6WgeIqtpRT+m2Da+5sBLP5Bvw3NevijS5VAPhrJZ15rWtmQHGEskPUF1w/8gQ1lpAri d4enp3g8AexBDqQLZfeTvbNUo5LNuiQeNmoGE1CgiiTGHxrUwBOOjk58eUFVaxf9sjub mN8BHcyTr7v81KUNXT5AlWV+aheDqGWH8iZwLKRehFV1SNpWBoUuBFHsBSq5U5ke6ePe 5v0g== X-Forwarded-Encrypted: i=1; AJvYcCVFR+pb+NfgsCxMT+ofVfPw4e3oOQJQ7s/LFdoeLGJHvZny2Dw2vOjz1jjq/V+tXxv5+1J0uPmcg89d1Gk=@vger.kernel.org X-Gm-Message-State: AOJu0YwCViihSYVXRl7kKOcVwt7URz0d61LHvKd4KdTb7Xb+sR3OCI3A pcX9C5MogracVP16PXTJtaVPfphi2cp/npw4V+MmFY/QDNBH/5ngWls9Btg0LwGYuq6X9+0EZTL LJ5Cz X-Gm-Gg: ASbGncvsibMnHiEqxkjf8iTY1j0QHBW7i1u9OGZoeCJ5/kyfWSvGzSO+zcTNbHjYXmU ZRGwPRpATSXB/RAzJVJSMgKP0YuqCM2T2wukTTIgnac+qjvorf3KqCUCbSglliLBq1VkXkll+lU Jhri1Fdyj8nCdvTtK3OZiZbrRbD4vuYlpqYklFGUFehm8E3F6gUkc7KeUdDgxzmMd7/FdQrCcDs HtWNpXFCktDk54pLy8ucmZt2mZ2d3ph6a2A4iEMY7s3AFNHUOKkuugL0e6KHVlM4atXta6yRYms d2MyhYpsELSoFhROn3TLseSneu55F5YDDmSq2I3E3041nNV97l4V X-Google-Smtp-Source: AGHT+IEUg2h/Bn0JvR5KjB/GMwIW7yranfSOQUrVv9CYKqUG47gWBzJ153JCz3umhMUi9Nky7PXHdA== X-Received: by 2002:a5d:4dcd:0:b0:3a4:fefb:c8d3 with SMTP id ffacd0b85a97d-3a5319a7a59mr12007111f8f.40.1749566310625; Tue, 10 Jun 2025 07:38:30 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:29 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:18 +0200 Subject: [PATCH RFC/RFT 03/15] gpio: sysfs: call mutex_destroy() in gpiod_unexport() 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: <20250610-gpio-sysfs-chip-export-v1-3-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=753; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=RD/CHZwJ+oTe3UN6/TzEIj3HviHoO043bsyJSK0ioIo=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENgBD1Mcsx5nGcQWupj1LesrLbb3He40WwEO 59YvulbaqCJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYAAKCRARpy6gFHHX ctnAD/0Uy5oh/cOhkErWApxCGt2fUcN2smJwB8w5shl5w1uko9j6R3jyYZHKxMFHebGlcpS511F ZwCgF93nMkndVYmp8qnUNIIIJjjTa71lPnw4xLqqPOluDAjMissvfgTHB60hC9PVz6lk+AIcFcm YcSfUSA4zHXQSbXfuu2IzI+T7mZTCy9y5VUw5mGoyufEWzPrcxINufDGWs1+uWUcyxkyagl+WtO Q+ZRUEz72lFcG+8/DzyWy4UJn8EuyP/fU7aqk2Edxxc88qXCnYX6aSQbOAODztxgUfOZWMqe0j2 fviyE9QJI3nNV5C+1R+izsz+BYCBAdav0WWXkw3Gx95ucfjFE+91U1kC6f0hfnewFuiWGWOD+h3 Hn/mFdEBldRDnoEsXGGyddSq/0S/jqglTRT4OHn7M50BU27/jsLCJns3K1cS+uT/JKHrkzE5rxw vsfVOXATQQccSmD9kMKHylcZ4WCQcw/sXRQvMKD9uxzcC74zAtCLbQe2fGe6kOuDM3viDEY/TdA 0gd9G7vctG3LWkR6c9q3AMHkIFiLrncTntqfO6gloVx3s2xhjy4hiIzB5CTv/aRYyqxRz6RoBFS pFhyVt6r3Hs14sZi5ZjMG4O/RYCHnQhmPHPhxcX1VzN92hDcTlJoSI597fGgHulFASVsZcO1MoC NdalhrgKRg6zxMg== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski While not critical, it's useful to have the corresponding call to mutex_destroy() whenever we use mutex_init(). Add the call right before kfreeing the GPIO data. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- drivers/gpio/gpiolib-sysfs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 4a3aa09dad9d54dc77f28d596723fd5546cb3ae8..cd3381a4bc93a94b9a975248ae3= e4bd8c2a3eb4b 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -713,6 +713,7 @@ void gpiod_unexport(struct gpio_desc *desc) } =20 put_device(dev); + mutex_destroy(&data->mutex); kfree(data); } EXPORT_SYMBOL_GPL(gpiod_unexport); --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D1C61F875C for ; Tue, 10 Jun 2025 14:38:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566316; cv=none; b=TYLs5G+ERY7bgRUkyHJ/JRQcti4D/eyzdOXKOW+Ae2i79SLceJVv09MamH3b6k+Ho+0d8e/cCGX6OP1BP+2QWNmWcC43qyw1CyJCmBj7h2MI5ggdst/X4zlnYHCUr/LRdChMYuWKgEq2aghwsyXxLTtl3vL+OyxQDxUkAss5/cE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566316; c=relaxed/simple; bh=3iywfMmfWuguiGrQGZCARkYMwz88+y8SW6qE3RQFQbQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uW+dcQbxMWA1fZWp1VcQkmVs36UYBDebmzeKDRktTfT2zujRvMwGsTBDeFkkIPVfsXWvpuX7Pi9/7h7kRuyYNIedpkYA1dHpu/T5Sj/anJm9bTDicDFnMOpstgsvqIHcWlmfT6J9b03lZcgTag015Zl9uuJhOj+Rok5So3h6Q+Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=dcGzJ6EE; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="dcGzJ6EE" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-43ea40a6e98so69721755e9.1 for ; Tue, 10 Jun 2025 07:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566312; x=1750171112; 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=RbAeNQNfAA6yD3395Up6TwuixaQ4LQ4OsQ45S++RIdI=; b=dcGzJ6EEoAnF9WeTiriEvCIv3CGffAoZZ7YcdnNzecHt9hc8CagyAhsFx3w+qQfoux L92SLZknMBjVJgRYI/S/QrFUaFXlRuhirh9U6KpcnEr7XQ2+KmldS4wquvZja78pct3E ekfgx3meI9HSvnmu9Af1AK1Clwi+rM+Q0s3hUDdwzN3u0GhqH08bBOw+QkIvjGB2/4xi /01enJEcvqwlY5TqgI33qeLF8bzYVsXfDAzddQH8Te/FlDMzcaQElSNiHG2VK6t+Fc8k og+3b/o1oSsZXbibmDLZ1ivv5z7dT29um+iyj5YXsAsISy26m68SxgZ++XqXHdV6UZqV NSnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566312; x=1750171112; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RbAeNQNfAA6yD3395Up6TwuixaQ4LQ4OsQ45S++RIdI=; b=CS3N2jVlcZoam7/x88sI4j6fNvWKWlV+9obTJpQk7EOs3xqToOU0eRdxBkx7Qc1ffz QOmESgHAR8H34oIXmnFJAU29D7LmR+G2cHzbkkm7b4YSc5v5b4kLLLvYH8UzpEDFFWEh 0rQduoSnCbIbZ3+wxbj9usWnWAL+z436liXESvXEhFdznFm5VpeNmg74BUzKo/cMvr71 F3QKlUmlhDed+DHKACzUu19Y+rvLVWp279gPW4iM5jzVXxocUiY0huS0zkOiO7+zuobF 0qsowFX78p/46URnd9XqVXcD01qg+8P3t+SE0OxhOX8ul/W+36xWPKYdR6cecDBTheMY IQhw== X-Forwarded-Encrypted: i=1; AJvYcCUzD60ROACraDALBxg4d0dnXGN2t2FLargcxHzymgDLeR+kGwmjYcduQOLsZYjCp23H/K+WOai8imajEvM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2sLkYVk72qUXdlqsii0cNX9vq8uBJbuEmAu7R/QBkJkz7XUNK JkZFibVdKObvhM4Nh/ZVdRmRPB3dXsi8APi1rQOJF26ytxQ/YesB7CKoBG1Fhtu6bti63qNZ+1v C6Pnj X-Gm-Gg: ASbGncsFAVVH+TTZ1bs1wT8RyIVkvCx3yvHR4Q6o6JgB3go5nVlS+v3Wl5YEvq2rpMM GWt1NYEIN11wtxhMRGVZpmRORfW7FQxEcZzZJjxRW6frnAyDn4dSwcoIQtjLdNSMDRt3u58pqah w1cS4WVF4IpM8uzeUhEKylLNxsB51CuDLjcx4UItABZHzhGMfhof26zuBjhWU35MbVQ9luerhBb lC9zgygvh7RVDSC8lbPvjvOaS/VIfoHBu37awEq/ZAptpoxH+YMgLzxxw/MGByMUfjeNWcceGQC Xm2odB+aM0KpnPqiumn7Kwobj6CSrqug3Dp9ak/ccO2sSowIhLYD X-Google-Smtp-Source: AGHT+IGNoAiYQhAXMTIDwG94By+OiA1TtpkzZkBJ/W0lgErFNRiyObiTaY3Fg7oTYTkdJbB8ZGUVgQ== X-Received: by 2002:a05:600c:6994:b0:451:df07:f437 with SMTP id 5b1f17b1804b1-4531dea9c40mr32956955e9.30.1749566311703; Tue, 10 Jun 2025 07:38:31 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:31 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:19 +0200 Subject: [PATCH RFC/RFT 04/15] gpio: sysfs: refactor the coding style 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: <20250610-gpio-sysfs-chip-export-v1-4-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7880; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=zLQu1FIKLYBrG00ZMRkDPgP4mnshxpjIaGpQE6BbTbI=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENgPxH8hZgvL6dsa6Tj3ckOBEhY1xZCFwMEl YzLo7uB3omJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYAAKCRARpy6gFHHX ctnVEAC07XkQBi0m2E/8rFvXYo1msouUY/fyTCXM6HKZyQQYwGD4C0SfqV0rLG3MzMrL2MZtjqN Zffl1iIFjAM+fQ/SiTwQ/1OhKVQx2xOGjvc/MaER8/5OKV9jP93na7sTr7X2B4eTnxxj8OOLKlo QtveQaTq/ExxSmZq0l5xYcsiqGS/l0uw/zPnJ1TUIixjJaittsHQBM7N+gFEm4ejt/OxHhhTAS0 bkqrvaImD8jGTjvkIUIMbgyKi8YrPHWW2/J9eRBsqTHjoHMMmfER9vF2qDqnCLyiLLd5mOelOYv noWJBvpK+AN20Q3JV+kIagt35RXA5hnb8Wc4Yvmwl1uqkgknmFIRG8Rdgvl+4EP/KKFikNxy4Ns LbZ1xHhW38TWgJebZkAYQUQu+kd0cUOvpvYQeL0kpr6q0HTMT+DdiAS9Hkk086BKxqWbsr0YWsf NIMwbr7PYT/yXCdwJSjUDhGR+TllEfH9OA5Zj2XF8FJGjXGMPDDxadeP7e6cqJjDOtzxjrluXXs DIdxmMR06hGKbk44bsidvIN3R99/viChoEKqEhTRYuWKwp+XudwevuCk/PBfsQ/2qZe/gyHWJp4 l1Zx1ZK4/hAaXzLHY/gA/ybklpxDYTS2Cm3g9bLR9yI5YO3GlmJ9hI2fimGb5GPvnSatuMJxBtu lp/uZrbCWZBf/lA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Update the code to be more consistent with the rest of the codebase. Mostly correctly align line-breaks, remove unneeded tabs, stray newlines & spaces and tweak the comment style. No functional change. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- drivers/gpio/gpiolib-sysfs.c | 67 ++++++++++++++++++++++------------------= ---- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index cd3381a4bc93a94b9a975248ae3e4bd8c2a3eb4b..88f97018fc7995c1e1195c0da4b= 6a8377af62e0b 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -73,7 +73,7 @@ static DEFINE_MUTEX(sysfs_lock); */ =20 static ssize_t direction_show(struct device *dev, - struct device_attribute *attr, char *buf) + struct device_attribute *attr, char *buf) { struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; @@ -88,11 +88,12 @@ static ssize_t direction_show(struct device *dev, } =20 static ssize_t direction_store(struct device *dev, - struct device_attribute *attr, const char *buf, size_t size) + struct device_attribute *attr, const char *buf, + size_t size) { struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; - ssize_t status; + ssize_t status; =20 guard(mutex)(&data->mutex); =20 @@ -109,12 +110,12 @@ static ssize_t direction_store(struct device *dev, } static DEVICE_ATTR_RW(direction); =20 -static ssize_t value_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t value_show(struct device *dev, struct device_attribute *att= r, + char *buf) { struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; - ssize_t status; + ssize_t status; =20 scoped_guard(mutex, &data->mutex) status =3D gpiod_get_value_cansleep(desc); @@ -125,8 +126,8 @@ static ssize_t value_show(struct device *dev, return sysfs_emit(buf, "%zd\n", status); } =20 -static ssize_t value_store(struct device *dev, - struct device_attribute *attr, const char *buf, size_t size) +static ssize_t value_store(struct device *dev, struct device_attribute *at= tr, + const char *buf, size_t size) { struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; @@ -179,22 +180,22 @@ static int gpio_sysfs_request_irq(struct device *dev,= unsigned char flags) irq_flags =3D IRQF_SHARED; if (flags & GPIO_IRQF_TRIGGER_FALLING) { irq_flags |=3D test_bit(FLAG_ACTIVE_LOW, &desc->flags) ? - IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING; + IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING; set_bit(FLAG_EDGE_FALLING, &desc->flags); } if (flags & GPIO_IRQF_TRIGGER_RISING) { irq_flags |=3D test_bit(FLAG_ACTIVE_LOW, &desc->flags) ? - IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING; + IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING; set_bit(FLAG_EDGE_RISING, &desc->flags); } =20 /* * FIXME: This should be done in the irq_request_resources callback - * when the irq is requested, but a few drivers currently fail - * to do so. + * when the irq is requested, but a few drivers currently fail to do + * so. * - * Remove this redundant call (along with the corresponding - * unlock) when those drivers have been fixed. + * Remove this redundant call (along with the corresponding unlock) + * when those drivers have been fixed. */ ret =3D gpiochip_lock_as_irq(guard.gc, gpio_chip_hwgpio(desc)); if (ret < 0) @@ -240,15 +241,15 @@ static void gpio_sysfs_free_irq(struct device *dev) sysfs_put(data->value_kn); } =20 -static const char * const trigger_names[] =3D { +static const char *const trigger_names[] =3D { [GPIO_IRQF_TRIGGER_NONE] =3D "none", [GPIO_IRQF_TRIGGER_FALLING] =3D "falling", [GPIO_IRQF_TRIGGER_RISING] =3D "rising", [GPIO_IRQF_TRIGGER_BOTH] =3D "both", }; =20 -static ssize_t edge_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t edge_show(struct device *dev, struct device_attribute *attr, + char *buf) { struct gpiod_data *data =3D dev_get_drvdata(dev); int flags; @@ -262,8 +263,8 @@ static ssize_t edge_show(struct device *dev, return sysfs_emit(buf, "%s\n", trigger_names[flags]); } =20 -static ssize_t edge_store(struct device *dev, - struct device_attribute *attr, const char *buf, size_t size) +static ssize_t edge_store(struct device *dev, struct device_attribute *att= r, + const char *buf, size_t size) { struct gpiod_data *data =3D dev_get_drvdata(dev); ssize_t status =3D size; @@ -302,7 +303,6 @@ static int gpio_sysfs_set_active_low(struct device *dev= , int value) struct gpio_desc *desc =3D data->desc; int status =3D 0; =20 - if (!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) =3D=3D !!value) return 0; =20 @@ -310,7 +310,7 @@ static int gpio_sysfs_set_active_low(struct device *dev= , int value) =20 /* reconfigure poll(2) support if enabled on one edge only */ if (flags =3D=3D GPIO_IRQF_TRIGGER_FALLING || - flags =3D=3D GPIO_IRQF_TRIGGER_RISING) { + flags =3D=3D GPIO_IRQF_TRIGGER_RISING) { gpio_sysfs_free_irq(dev); status =3D gpio_sysfs_request_irq(dev, flags); } @@ -321,7 +321,7 @@ static int gpio_sysfs_set_active_low(struct device *dev= , int value) } =20 static ssize_t active_low_show(struct device *dev, - struct device_attribute *attr, char *buf) + struct device_attribute *attr, char *buf) { struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; @@ -334,7 +334,8 @@ static ssize_t active_low_show(struct device *dev, } =20 static ssize_t active_low_store(struct device *dev, - struct device_attribute *attr, const char *buf, size_t size) + struct device_attribute *attr, + const char *buf, size_t size) { struct gpiod_data *data =3D dev_get_drvdata(dev); ssize_t status; @@ -397,8 +398,8 @@ static const struct attribute_group *gpio_groups[] =3D { * /ngpio ... matching gpio_chip.ngpio */ =20 -static ssize_t base_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t base_show(struct device *dev, struct device_attribute *attr, + char *buf) { const struct gpio_device *gdev =3D dev_get_drvdata(dev); =20 @@ -406,8 +407,8 @@ static ssize_t base_show(struct device *dev, } static DEVICE_ATTR_RO(base); =20 -static ssize_t label_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t label_show(struct device *dev, struct device_attribute *att= r, + char *buf) { const struct gpio_device *gdev =3D dev_get_drvdata(dev); =20 @@ -415,8 +416,8 @@ static ssize_t label_show(struct device *dev, } static DEVICE_ATTR_RO(label); =20 -static ssize_t ngpio_show(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t ngpio_show(struct device *dev, struct device_attribute *att= r, + char *buf) { const struct gpio_device *gdev =3D dev_get_drvdata(dev); =20 @@ -439,8 +440,8 @@ ATTRIBUTE_GROUPS(gpiochip); * integer N ... number of GPIO to unexport */ static ssize_t export_store(const struct class *class, - const struct class_attribute *attr, - const char *buf, size_t len) + const struct class_attribute *attr, + const char *buf, size_t len) { struct gpio_desc *desc; int status, offset; @@ -498,8 +499,8 @@ static ssize_t export_store(const struct class *class, static CLASS_ATTR_WO(export); =20 static ssize_t unexport_store(const struct class *class, - const struct class_attribute *attr, - const char *buf, size_t len) + const struct class_attribute *attr, + const char *buf, size_t len) { struct gpio_desc *desc; int status; --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8594C2192F2 for ; Tue, 10 Jun 2025 14:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566316; cv=none; b=sK9w59W/lqyETXhrJjM9xzOdIbMW5ODmM3mCG1MOiESF/ua5w2Vami3qj0bbwaU42ELJkFB6661VSe7ReZvEStnQ+PbZTmpkPPpfMtvCIdyG4a+o8O531IJztfJjVx5TFY9L/G1UV55AciQK0gNaxE/1AKkitjfpsSj2tWYZBqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566316; c=relaxed/simple; bh=Qq9fIseB6gb/ver++jBeKOrouYgQmp9/vrQcSFqI4mg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q8sRPF0sfnPqkD43iQAA7r1NzJfu46MCvAoi2AFGN5leFgDDeIn5E6/6ViQNe7HH5ZP7Me2Lec5RbZEtLbgTmMS71mG5YLsNoEFXUGGUrJR42x3i5X9rzc4f+e5jg6GwB6N+MH/0m7SDEWEPOeiH4CAmVWaTedRwUb/Qeaap7OM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=oZ30zpe3; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="oZ30zpe3" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-45310223677so19987485e9.0 for ; Tue, 10 Jun 2025 07:38:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566313; x=1750171113; 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=cxAwG+kplqaCnxCSj5FTH8TFj3pQX00WZhLLV2ey3uk=; b=oZ30zpe3a1Y5tTnMYyM7uibd4THq8tiOvg0xuB/Fi07S8wYUg98PnD2fzZhtzMTT/y GIpERtvijYK+Isn8QwVLthORC3XMxbmh4V7cBjB7xJVI6hZ4o16lwdQsegWQUESIZVLB 36og5PmjsTnnCmOJQ5iUZyVLHAek4JSZ0jrLfsViLo+mvMcZ9OaSMTh/WijAumM4IXHp WV6yqZ2D+v0X1BuVZmCVO630WMMTbyr/7EU7ImWZARYQc9CUb6ZvAxO/WolysAYPWHzg 7VbkOeK24qCrILzUiUISJ/JHTMyB/rKRNElSmvGrKV7qEM7oThFaQC8LKhqyFl9GBfzw hu/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566313; x=1750171113; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cxAwG+kplqaCnxCSj5FTH8TFj3pQX00WZhLLV2ey3uk=; b=YTRFG4jleldUCHaSsCJCWPo2fDlT6zGgOUjeFGjqJj/InPa3Bwna/zfDOcT86/tluT vr7lV9oH48dQs1mImJsPOtbj8n86ecJxYHta7roGz3NhC1+k3R4aSMApOiMHXLkjE0y0 A4zsBCOVYAMZZfvg1MFNy2tm+17TxhJMtYujXaRLAlHaA/dNXKkwJ4ZmBssskWtOUcU0 ovNdoOpCwFb9kRm6VTMsT76inpiURiEztc5C0hIl4gQqxfTXdYetsvocv9Ix8gXCt0/7 W07OcZ+Cqh9OutFezWxC7Z077xF0E0qfBZA3H32TY0VZWn+Jw2s1GQtePMMk1GcHwnpv OCVA== X-Forwarded-Encrypted: i=1; AJvYcCWjJVxdpXU06wFIPJJcqg1OqGyZwsnO8hKEw0dSqswZW2RAu5uszmbTyXddokTfEwg8XTMuy1ia6eEj2yw=@vger.kernel.org X-Gm-Message-State: AOJu0YzqvQ45W8Rz1hYkR9jFvnQZCLyZwbFKNRbk883t3C9IKIzyD0bS N0bQ3yFI5nBuBB7pqSGi6c0BuoJW28mCXzWk40HF8773tSgNUHj4tdPcaNPMQq9r5HU= X-Gm-Gg: ASbGnctJRN+CNq7bcitbS/fMxZWlCxjOJsg4t4SdCAI92R/nU0pycAPoUR0wyZ9pGt5 yj38gCHlzH++6dZoW2lrbcMzd4INRYPA2DLKGYOcIVtAPwC3XpE4rXKCXi+QtCOQbsKPKqNv8uZ uMQmnkAMN9jvLEK/3P0/cQ5rpnZwzZKlLxIKkPI9K2C/e8XkncdmLEJKyLBwLIhUEsR7yKjl6Ml a1BScunWP1Xr61MV1U5+hLVSSCmnXzRI6jJy74+FqrCue3VEmtHRiO/8xVU4bWG1uyyZv+Uf2r2 IiAweVbqJeCB9ZhKQ8G456Kk+yKJ2h6G1wq9W7A6ZPaYtVvIak/8 X-Google-Smtp-Source: AGHT+IEFyaeIP3T0Ehi8PeMDhGrDKSKdxzezZvGSc6n8IFLaX5lda2NAuMtyShPdC8E0HiY6ckXmbA== X-Received: by 2002:a05:600c:6792:b0:43c:ec97:75db with SMTP id 5b1f17b1804b1-4520138974bmr162802165e9.11.1749566312788; Tue, 10 Jun 2025 07:38:32 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:32 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:20 +0200 Subject: [PATCH RFC/RFT 05/15] gpio: sysfs: remove unneeded headers 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: <20250610-gpio-sysfs-chip-export-v1-5-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1058; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=ZzKrszs+G8SUIpo3FlFljAL+3IaTQq3RZ1Iz/yMv618=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENgtdqTN36J6Qox+cSHpKqwAD9+WMqD+FfJB O5atuCP4ZOJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYAAKCRARpy6gFHHX cnTfD/0YorOW4Ei+N4MZBlIZyNGgK8lOHbL+HNZhFrp/s+Zoh2Xx8ZU6mnhKCYBOIl7QAwyDo3c GdhVB07w4VQ0dEUM9PczqLhmbngp4Hr12I1OVLRFf2YR1b9zcqdT80A6nC7fpWRDgcNYWWB/8qO +SagL6UW3zfMgzv82PBxUWnGLCPgUAXDLMszFapYHPL4Z3ePACnH2vi/81nf+DhcyB3NKI4ycTr BmqQTrZHnIyxM2392Dv8Rx2UlFAtQD1myM6VWeNreSEP7k8HIaO9VRsgorxJFDzbCF4Jgad/Nbp vDwgBB46nPx3V/tvo4psJyqk/46OwHktfFPn7vRJfuFyX6mV9wQNAMYur7JKuNbPNqxWz1MGBO6 B8GFOB1aAy2q+VUfFqF7ucb0+a6/OAMysrZJQESwbxadQORTduXeyMS5QVELcWStBFnuePICpUX b4KRFbvbXEFlu78lD8Ax7Ic2nZDU4QptsMqVcDF3iFZdoYjnoTMQ29RDo3tNMegNPmjgUKZm+4W f0r5szXPKWVUB8gBYtuGoVcmU5zbGywRjVNEGWwoP4Xmh5uiC0vUxsd3d0946rKjeGyusZxSSY8 keELNr1ncsvKSbvTPYcu8otg9KkLQ3meVVzuivn+pCBsRa9kyOXQK9b3QgquIuvj6mTaecvjalV 5z1LFmCt3xRIk+Q== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski No symbols from the linux/idr.h or linux/spinlock.h headers are used in this file so remove them. We also don't technically need linux/list.h currently but one of the follow-up commits will start using it so let's leave it. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- drivers/gpio/gpiolib-sysfs.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 88f97018fc7995c1e1195c0da4b6a8377af62e0b..f23b4efea5905a9eab51ed9e50b= 5159135a8e26c 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -12,7 +11,6 @@ #include #include #include -#include #include #include #include --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C227221702 for ; Tue, 10 Jun 2025 14:38:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566317; cv=none; b=c7YC2s1ejBP1m4/7++Uvfz4jLIrSYT1LzspQ3SEBJ2/+ydb9LEcO2vhW7r7xtDKGvj4JE4dPc0M+pv5gHn4iH8X6oR8eugyxvt5g2WJ3r7StqaPivzbTHxxBjt7agFdx8tdWuqs+EeIb9hS6xM/j6opUcJvXAbxcz9qK24+P6Kw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566317; c=relaxed/simple; bh=SuhcWnQjnt1V0zaDkIpP3r+TFOAIWMDQ1nvmYS1xN+o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ksrYMNvQBohzQRGxAmhd9hKYOSpxYR7Q+joIWS8ioBsnv9YORrKZlKZ3buG9cOfBa8llyYR9EBGy4Bnuw+IXIpPa1c/wXm7pOYmKBI29+BGNeVEEHuZD6mbcAv7K3WtJLGyKfdmMW7Hx7nUN0n0fNa131kSD0QlUvjQ5n9N32UI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=vYk1+APO; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="vYk1+APO" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-451dbe494d6so67518325e9.1 for ; Tue, 10 Jun 2025 07:38:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566314; x=1750171114; 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=Shn2eyZ5fd8Sf9FUXjLdmt+2r+pNCPfrOT0YWQfJc1Y=; b=vYk1+APOhL/JkXmtx77pRYXlmiB/wffHut3LT4UdqcajXcVePVUEdQnZTj3topAJZc gPK9XczQt/fpoBiLjPgF06E+fh7ZTRyovaViFoDU/jBEqqFGVRNLYTKDVanxa4KMcC9i Qli59hF3tEc5ueM3XewLe09CJijW9dkJhNvjaoDmJURV7ijth5CwwGmqLEnX8Jjlg8m3 jOdd2b8wou4G3dPFQHy5Rm5/lDJrmJIs6QdwirVy0WAjz/Ek0rZAS3gc1nqnTihA92qZ 7tQK3Lv4wrQcKW3FTPjRjJDqpwAMnP40j0obKFU+pgdMGixfTMPIichW27pYoPA0LjNp cnSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566314; x=1750171114; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Shn2eyZ5fd8Sf9FUXjLdmt+2r+pNCPfrOT0YWQfJc1Y=; b=A3NGAITDJ5p9/+qVXOIKANGPcPxazqlTS55LC4OrTSggbaDqjh273QATKTDRFDQBre n8Qgs85xqYGGD/AOp8HeB87eoHFl5h6tAnZ1vF3C/kL6DGuh6fwm1ot1RjMKjN/so9Ur EE2cjUa5wiYayq4tybvaND2xjtr5Raa0kLBdBsmXjsLvVnTDnlO9u5nriiTOcyhvgcNG bKoJq3DOtJ0Za7omn2FAlQNcMyoGTzl5cxPcwmhQChdB8PM4PY7L2Ej5ckmRedwOA2Ju STOgp7xwSg75YF6NyfJmifQD85nLgOi/jcdtogjjNw3Oc/TmdefIrb5OIhXr9M3TDB7S 8QUQ== X-Forwarded-Encrypted: i=1; AJvYcCWHrjnqBx73yIShUO0ilc1MztoH4hSJJt61QM7DaC4i5zuGOeiG8o/HAc++5nNxXVMoUUL2+lMQ0SdoLjA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzrj6YHlZ7oHYqkRiwsMziT0dJsDFeHm1YmBqNBICZXn3hQU+NS tMG5So63uPqKBl4cGOZWdNmp+WjvaHCoxEIrKO0vGJgHLKxvNjRLyaU2vgzWZO0bYEo= X-Gm-Gg: ASbGncuufsc5Wy4imlG5yU9YS8fHyaJ5r6ObT1oC2rvdtvZxyKN2kLZeui18dX/jCf1 GvItsyixri1k87+Bl518kfZNFnJcaYh4CId0EaG3E1H13c9GjsPzxpXJWuxj66U2wKBAqaasSUO vTIkmTafzkEg0LektyggUk0MB0ZxMZFxy+yVwSHU+Aj/J0kupZryXz51emFVCKfhDEBxw3FcTq4 KrnwSkAeIRHT2x9I3K+OhnOdgBf/+X0yi/bPOVBW50LWZgbwPZ39qRoBJ+0/nCALrGyFyelwPdy a0Irh/Y3/gNSZ/unX6Vwql3YbI+ihns7g4AvmAwcNpbKLHCeqf0Do1VEmK+0o7E= X-Google-Smtp-Source: AGHT+IFQxMr+KpfJbCsHx4fMzLU8Ewr+onA/3HvlnZLPIEF4Pbfk+QHCSRE8DIYbR5+FKFsmMZn9+Q== X-Received: by 2002:a05:600c:4e88:b0:442:f4d4:522 with SMTP id 5b1f17b1804b1-45201364b20mr151409425e9.5.1749566313774; Tue, 10 Jun 2025 07:38:33 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:33 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:21 +0200 Subject: [PATCH RFC/RFT 06/15] gpio: sysfs: remove the mockdev pointer from struct gpio_device 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: <20250610-gpio-sysfs-chip-export-v1-6-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6366; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=je470wIsOKjy+Wgh3vMCa95VKbv92LlyIwF4JpS1fa8=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENgMzYrTrIqo79b7bugZj00GqsKV3l++8Gvu Dgz89ZkFJeJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYAAKCRARpy6gFHHX ciedD/427LXr8cn0G7iqWrhFjM8Ewz+h+HQY5DVXsTqUfMe4R46IvTfJHW/JwJGT6DxflIice4r bRD1dMj6CyTLuYnc4aOCTw2mIJd006otLq+fV1z2uqwdf5MKE+O7VeHHuNyJtBejL0os/altIEh Wz5Iio0yp0VZ8yWTgGVs+15budcVQ8I8qdLzo53o7L9j6PeRNWzIPDC+CfyUdY2QUgFup786G2D Mr1q91sRH8VzkUyXAVawG07RTmOD7th1kTH0yEWodWQFpBuQrJG92YKcc+q0n363lzmhS39bXno iR8vdq674gUvGGQf/JFtey7iLeh/AQ1eBuj5HB+WCUFEXNS9ESmXCoRNe4Z2zG7K1RBR7hHa7W4 DrjBqvqNvFRQJPjp1iNUvjpNwZqv2zmxMnY4qrcNdo+iHKpKphNgh+LRkTJj1ATPAEk902rwSn7 QC7WJir6buQtT/oUgUzYUFb6IYy7HbuGV7k3n5420bm4rFHjKK66p8rTkB3PeGhW31bMci69GsK K/Vr0YZMuqbSkUnl1scq/4ux9xeBEDEKp+CXAfhwykfuoeMcGd2zCVYsGQuZD6y6xTIOCE1yo/L EXXrBb05K8pdId18H227bdT1Lok+4seuGzXHAbReOKDLbOlVqizlCRENqPxyNRwig0paxtF+RPV hOQJkk3e46ar/iA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski The usage of the mockdev pointer in struct gpio_device is limited to the GPIO sysfs code. There's no reason to keep it in this top-level structure. Create a separate structure containing the reference to the GPIO device and the dummy class device that will be passed to device_create_with_groups(). The !gdev->mockdev checks can be removed as long as we make sure that all operations on the GPIO class are protected with the sysfs lock. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- drivers/gpio/gpiolib-sysfs.c | 81 +++++++++++++++++++++++++++++-----------= ---- drivers/gpio/gpiolib.h | 3 -- 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index f23b4efea5905a9eab51ed9e50b5159135a8e26c..956411fc467a26a9827c616d8dc= 067c70f9244bf 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -43,6 +43,11 @@ struct gpiod_data { bool direction_can_change; }; =20 +struct gpiodev_data { + struct gpio_device *gdev; + struct device *cdev_base; /* Class device by GPIO base */ +}; + /* * Lock to serialise gpiod export and unexport, and prevent re-export of * gpiod whose chip is being unregistered. @@ -399,27 +404,27 @@ static const struct attribute_group *gpio_groups[] = =3D { static ssize_t base_show(struct device *dev, struct device_attribute *attr, char *buf) { - const struct gpio_device *gdev =3D dev_get_drvdata(dev); + const struct gpiodev_data *data =3D dev_get_drvdata(dev); =20 - return sysfs_emit(buf, "%u\n", gdev->base); + return sysfs_emit(buf, "%u\n", data->gdev->base); } static DEVICE_ATTR_RO(base); =20 static ssize_t label_show(struct device *dev, struct device_attribute *att= r, char *buf) { - const struct gpio_device *gdev =3D dev_get_drvdata(dev); + const struct gpiodev_data *data =3D dev_get_drvdata(dev); =20 - return sysfs_emit(buf, "%s\n", gdev->label); + return sysfs_emit(buf, "%s\n", data->gdev->label); } static DEVICE_ATTR_RO(label); =20 static ssize_t ngpio_show(struct device *dev, struct device_attribute *att= r, char *buf) { - const struct gpio_device *gdev =3D dev_get_drvdata(dev); + const struct gpiodev_data *data =3D dev_get_drvdata(dev); =20 - return sysfs_emit(buf, "%u\n", gdev->ngpio); + return sysfs_emit(buf, "%u\n", data->gdev->ngpio); } static DEVICE_ATTR_RO(ngpio); =20 @@ -545,6 +550,26 @@ static const struct class gpio_class =3D { .class_groups =3D gpio_class_groups, }; =20 +static int match_gdev(struct device *dev, const void *desc) +{ + struct gpiodev_data *data =3D dev_get_drvdata(dev); + const struct gpio_device *gdev =3D desc; + + return data && data->gdev =3D=3D gdev; +} + +static struct gpiodev_data * +gdev_get_data(struct gpio_device *gdev) __must_hold(&sysfs_lock) +{ + struct device *cdev __free(put_device) =3D class_find_device(&gpio_class, + NULL, gdev, + match_gdev); + if (!cdev) + return NULL; + + return dev_get_drvdata(cdev); +}; + /** * gpiod_export - export a GPIO through sysfs * @desc: GPIO to make available, already requested @@ -590,12 +615,6 @@ int gpiod_export(struct gpio_desc *desc, bool directio= n_may_change) =20 guard(mutex)(&sysfs_lock); =20 - /* check if chip is being removed */ - if (!gdev->mockdev) { - status =3D -ENODEV; - goto err_clear_bit; - } - if (!test_bit(FLAG_REQUESTED, &desc->flags)) { gpiod_dbg(desc, "%s: unavailable (not requested)\n", __func__); status =3D -EPERM; @@ -719,9 +738,9 @@ EXPORT_SYMBOL_GPL(gpiod_unexport); =20 int gpiochip_sysfs_register(struct gpio_device *gdev) { + struct gpiodev_data *data; struct gpio_chip *chip; struct device *parent; - struct device *dev; =20 /* * Many systems add gpio chips for SOC support very early, @@ -747,32 +766,41 @@ int gpiochip_sysfs_register(struct gpio_device *gdev) else parent =3D &gdev->dev; =20 - /* use chip->base for the ID; it's already known to be unique */ - dev =3D device_create_with_groups(&gpio_class, parent, MKDEV(0, 0), gdev, - gpiochip_groups, GPIOCHIP_NAME "%d", - chip->base); - if (IS_ERR(dev)) - return PTR_ERR(dev); + data =3D kmalloc(sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->gdev =3D gdev; =20 guard(mutex)(&sysfs_lock); - gdev->mockdev =3D dev; + + /* use chip->base for the ID; it's already known to be unique */ + data->cdev_base =3D device_create_with_groups(&gpio_class, parent, + MKDEV(0, 0), data, + gpiochip_groups, + GPIOCHIP_NAME "%d", + chip->base); + if (IS_ERR(data->cdev_base)) { + kfree(data); + return PTR_ERR(data->cdev_base); + } =20 return 0; } =20 void gpiochip_sysfs_unregister(struct gpio_device *gdev) { + struct gpiodev_data *data; struct gpio_desc *desc; struct gpio_chip *chip; =20 scoped_guard(mutex, &sysfs_lock) { - if (!gdev->mockdev) + data =3D gdev_get_data(gdev); + if (!data) return; =20 - device_unregister(gdev->mockdev); - - /* prevent further gpiod exports */ - gdev->mockdev =3D NULL; + device_unregister(data->cdev_base); + kfree(data); } =20 guard(srcu)(&gdev->srcu); @@ -798,9 +826,6 @@ static int gpiofind_sysfs_register(struct gpio_chip *gc= , const void *data) struct gpio_device *gdev =3D gc->gpiodev; int ret; =20 - if (gdev->mockdev) - return 0; - ret =3D gpiochip_sysfs_register(gdev); if (ret) chip_err(gc, "failed to register the sysfs entry: %d\n", ret); diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h index 58f64056de77b05e8cbcb2395a55da793b1a52fa..9b74738a9ca5b1a4826c8d56d87= 1f8a7cf6ea1e7 100644 --- a/drivers/gpio/gpiolib.h +++ b/drivers/gpio/gpiolib.h @@ -27,8 +27,6 @@ * @dev: the GPIO device struct * @chrdev: character device for the GPIO device * @id: numerical ID number for the GPIO chip - * @mockdev: class device used by the deprecated sysfs interface (may be - * NULL) * @owner: helps prevent removal of modules exporting active GPIOs * @chip: pointer to the corresponding gpiochip, holding static * data for this device @@ -65,7 +63,6 @@ struct gpio_device { struct device dev; struct cdev chrdev; int id; - struct device *mockdev; struct module *owner; struct gpio_chip __rcu *chip; struct gpio_desc *descs; --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C199225A35 for ; Tue, 10 Jun 2025 14:38:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566318; cv=none; b=txk/loG+0/HSszCIcGTMJ1DhJ1+5VvUlpJoKGM1ZjNnd8EXKClVMuKSU4kvMvmijwVo9xPlv1KjHmOxioWKTN0WwVcH147vSLyaa00ivr1tBCsS3etbwCaVzADcLsbhthYgYhrGusxOzWKbD7Y9U85L9znB8/eEo1hce6XKEFvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566318; c=relaxed/simple; bh=2i3eMCTDD/ZK85w+pfSMGIh1H7DR5YiKUKwBrEFjB0w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KqulWl83qYIVp62WDhWmSTIYDFIspDshDjgjGwMLirdvT8rq6f/fMztXHHE4epeNcaKIZ5D8DX6R/6WQIlzoX2rMIGabD33oldCx1XcR3sx0zaxBD8sQF0RGktVHLgpWngzqPRJkEFJ1hsZlSZSdqVe38iuHmlLd2MXUVXX16K4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=xzqWTvjM; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="xzqWTvjM" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3a54700a463so1518165f8f.1 for ; Tue, 10 Jun 2025 07:38:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566315; x=1750171115; 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=yFKF+c+Y40KVmL7E85VKf6TTXAyUq7dCBYKSOqXQFJM=; b=xzqWTvjMILYFmwRjRtMFB2HTyEcW/Nyr7/PtH/HDLBY0Uk2zo/Ym5+/Y7Ky6LPDzYL HcKIW+ewpk1nk3UjBD7mVymKf7n2nLpQIsRik+b914+fzsLUBmcKclr3cWIKUBfA0JLP zp3biStMHyS4yWVFWOiE4ZSI/P2rFRRaIY5jSu4dKj50jhUQRTVgklk35gBYV+W571hy 0v7gexF/TaVW42em/tDLEOEg8Kz7J9bI9g9qzLNEpYimDGc4vpTUfsFKWw9joMo7P0ec mHQDh+/smm8tsLYsF4DPcRZsV++ZeG2OPHxW9Jy5xOb17k+PGy6Istbew+WCcckp/FTl lw9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566315; x=1750171115; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yFKF+c+Y40KVmL7E85VKf6TTXAyUq7dCBYKSOqXQFJM=; b=dco1nru7yDhU6GzKyYZvc8MjLINY6prfa9VVY8SR6JtKFYMAIqEZX5M9i2kbo8l3xu /UDhQfhYQnUlVw5HiiJKxV3GJ10Mvo7TBCCZPu2LkL/s+1PgwQClADHNJYJYuRIyBtAn p2gzOQ+6mVGgBW7sT9/zXZjnU/xbzilXcAC+D4Hrjp8g46VPEXhoy/DNLk/cJgd97/AC dk+lEaKcD61cCRwVMs+Z0ZDSQtpvCSClGtr49HC1NCpaY0s63SKBO0nBksUm1H7HFNNB ZUlAGKsKsRh5ASX10qUQ+pWE6yL5wr2TaVp0DaHMaI4KpGXwhKU2pXd/GZUtuSwETaoI /l6g== X-Forwarded-Encrypted: i=1; AJvYcCUcamtWFuD7xe+qACKw/OOtcidTl8cl6sAwGIxcrwgguOn/2wFBDOwxxTEsmqTZUOF/ADMXn662PNLZZfI=@vger.kernel.org X-Gm-Message-State: AOJu0YzWIyFk5+aKzajZZGrOdqWm1eFH4U4DhM7fU9DFqJyyh/nhGTD7 iq92fuhmX7LhYj8lc1epAquBwHlZ7DZDyNwibkNXVD0lBcGDK50bmtGadaOd8QQdta8= X-Gm-Gg: ASbGnctJqRisghXkHqV05r1wNql2/t9rzi/3OSoWFK+LVVILa8anLnnBNz9p4wBrZ4/ D7F9pfrroIvqYr76V4iPYNPhiHzPqUXi80UGNpPphdS8YW8Ru4GAzGIO2jsWY1eEvn7wIQwoTd2 oBNvUHgOFxMccH6z759wSivMSnMvevZVWdpkrKvKbwo7rvK9YL1LYCDhWqxp3S3vn7iM9Ef2QQB h8Uxr2YB1kOacF8XeMGA0sRtY+FnjRO55MhOhtprMc7PiyPjzBgTdbKWFK8Ep7lf5CdbI+UyhZX 3AlktN3UM0emn9fwkicF6unMT2jVy0VQxMrCFbVgdQSyV041A7ZaHGi3j/TqPTU= X-Google-Smtp-Source: AGHT+IECbU4hjZU9sCCG6i4ZxFM91y8FwBqtSLg4Qf5RSAv8WzK3WKhk1i/LqRYNTnbUtcdd56QJBw== X-Received: by 2002:a05:6000:4014:b0:3a5:1388:9a55 with SMTP id ffacd0b85a97d-3a5513de3a4mr2961541f8f.5.1749566314767; Tue, 10 Jun 2025 07:38:34 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:34 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:22 +0200 Subject: [PATCH RFC/RFT 07/15] gpio: sysfs: add a parallel class device for each GPIO chip using device IDs 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: <20250610-gpio-sysfs-chip-export-v1-7-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9657; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=w7p2yull84975cImPopktS2uQOfBsB0R5FKe8qO70gA=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENhEmxY4aZlgWJMH11gEUNSIR4WcLQEjT2HQ S1PxDMP4luJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYQAKCRARpy6gFHHX chK1EADYlG2LY7SHs50ScXDfPYSEoxyHNpcHzohgWjYDOclTcgHIXHnu7WauGqxcU+R4CC3mK1x e2GOVvZ6aKIg2Z3GckgiJsqyGgoW6KyaaNfBSMIxQIXZpvpQI9fvQBpCaOr9wz39s/vMkTf0EwP M5LtNxrqRFcF7tHCVAteKVoxVWLMU0ob300Zs9UJwZInO0mP9pxXB/JhGazhg2HaZWzWeCa5LSx Msd1uIe6fSj4ydBgz7imvEY/xmIwyAsY6yWwSq1ayE0RR8f76B3IUdbwEJjOfC3FBBPVBu9pRfN Vu0gH5ujvxe7qlj24ISHshW+kqMzmvHWDwTY+arVNQgU/MtRQrbE8+3sfbTx5OqA5YqUm7x0oEd sVDLYBh17tptCx1ySYwejEd3N/NRZBFGHQt7hIRnCuDnZfd94P4NJH3FdmBpjHDrkkzrInsP7rE 4f45QloN4lVIsZIvK9WaEgDAFOP303OPiTBfgTwqq4BDlPOPFfPVlexsRZ17DBJP93tVcm3l7Tp P3kVOO8jlfVdRXDOgiolfMpZNUZooRqKW3R95q1VHCsSX8Th3+pGZWH0KXrH8xl20FA0KoaLFlN fXvJJ9ur7TXSih0EGalulEUv6J1TuYMBTJnV28uQ+DHR9DBGPGO4cwva3KvCZvUizYn024mz4ug cTEQEX//BD7Z/+w== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski In order to enable moving away from the global GPIO numberspace-based exporting of lines over sysfs: add a parallel, per-chip entry under /sys/class/gpio/ for every registered GPIO chip, denoted by device ID in the file name and not its base GPIO number. Compared to the existing chip group: it does not contain the "base" attribute as the goal of this change is to not refer to GPIOs by their global number from user-space anymore. It also contains its own, per-chip export/unexport attribute pair which allow to export lines by their hardware offset within the chip. Caveat #1: the new device cannot be a link to (or be linked to by) the existing "gpiochip" entry as we cannot create links in /sys/class/xyz/. Caveat #2: the new entry cannot be named "gpiochipX" as it could conflict with devices whose base is statically defined to a low number. Let's go with "chipX" instead. Signed-off-by: Bartosz Golaszewski Acked-by: Linus Walleij --- Documentation/ABI/obsolete/sysfs-gpio | 5 + drivers/gpio/gpiolib-sysfs.c | 191 +++++++++++++++++++++++++-----= ---- 2 files changed, 148 insertions(+), 48 deletions(-) diff --git a/Documentation/ABI/obsolete/sysfs-gpio b/Documentation/ABI/obso= lete/sysfs-gpio index 480316fee6d80fb7a0ed61706559838591ec0932..f856e286051d6bfa4990660dcb2= 5b3fdb27cd0f2 100644 --- a/Documentation/ABI/obsolete/sysfs-gpio +++ b/Documentation/ABI/obsolete/sysfs-gpio @@ -27,6 +27,11 @@ Description: /base ... (r/o) same as N /label ... (r/o) descriptive, not necessarily unique /ngpio ... (r/o) number of GPIOs; numbered N to N + (ngpio - 1) + /chipX ... for each gpiochip; #X is the gpio device ID + /export ... asks the kernel to export a GPIO at HW offset X to usersp= ace + /unexport ... to return a GPIO at HW offset X to the kernel + /label ... (r/o) descriptive, not necessarily unique + /ngpio ... (r/o) number of GPIOs exposed by the chip =20 This ABI is obsoleted by Documentation/ABI/testing/gpio-cdev and will be removed after 2020. diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 956411fc467a26a9827c616d8dc067c70f9244bf..a3403b963d6488aad24e47e9e28= e0439676de704 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -46,6 +46,7 @@ struct gpiod_data { struct gpiodev_data { struct gpio_device *gdev; struct device *cdev_base; /* Class device by GPIO base */ + struct device *cdev_id; /* Class device by GPIO device ID */ }; =20 /* @@ -399,6 +400,14 @@ static const struct attribute_group *gpio_groups[] =3D= { * /base ... matching gpio_chip.base (N) * /label ... matching gpio_chip.label * /ngpio ... matching gpio_chip.ngpio + * + * AND + * + * /sys/class/gpio/chipX/ + * /export ... export GPIO at given offset + * /unexport ... unexport GPIO at given offset + * /label ... matching gpio_chip.label + * /ngpio ... matching gpio_chip.ngpio */ =20 static ssize_t base_show(struct device *dev, struct device_attribute *attr, @@ -428,6 +437,111 @@ static ssize_t ngpio_show(struct device *dev, struct = device_attribute *attr, } static DEVICE_ATTR_RO(ngpio); =20 +static int export_gpio_desc(struct gpio_desc *desc) +{ + int offset, ret; + + CLASS(gpio_chip_guard, guard)(desc); + if (!guard.gc) + return -ENODEV; + + offset =3D gpio_chip_hwgpio(desc); + if (!gpiochip_line_is_valid(guard.gc, offset)) { + pr_debug_ratelimited("%s: GPIO %d masked\n", __func__, + gpio_chip_hwgpio(desc)); + return -EINVAL; + } + + /* + * No extra locking here; FLAG_SYSFS just signifies that the + * request and export were done by on behalf of userspace, so + * they may be undone on its behalf too. + */ + + ret =3D gpiod_request_user(desc, "sysfs"); + if (ret) + return ret; + + ret =3D gpiod_set_transitory(desc, false); + if (ret) { + gpiod_free(desc); + return ret; + } + + ret =3D gpiod_export(desc, true); + if (ret < 0) { + gpiod_free(desc); + } else { + set_bit(FLAG_SYSFS, &desc->flags); + gpiod_line_state_notify(desc, GPIO_V2_LINE_CHANGED_REQUESTED); + } + + return ret; +} + +static int unexport_gpio_desc(struct gpio_desc *desc) +{ + /* + * No extra locking here; FLAG_SYSFS just signifies that the + * request and export were done by on behalf of userspace, so + * they may be undone on its behalf too. + */ + if (!test_and_clear_bit(FLAG_SYSFS, &desc->flags)) + return -EINVAL; + + gpiod_unexport(desc); + gpiod_free(desc); + + return 0; +} + +static ssize_t do_chip_export_store(struct device *dev, + struct device_attribute *attr, + const char *buf, ssize_t size, + int (*handler)(struct gpio_desc *desc)) +{ + struct gpiodev_data *data =3D dev_get_drvdata(dev); + struct gpio_device *gdev =3D data->gdev; + struct gpio_desc *desc; + unsigned int gpio; + int ret; + + ret =3D kstrtouint(buf, 0, &gpio); + if (ret) + return ret; + + desc =3D gpio_device_get_desc(gdev, gpio); + if (IS_ERR(desc)) + return PTR_ERR(desc); + + ret =3D handler(desc); + if (ret) + return ret; + + return size; +} + +static ssize_t chip_export_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t size) +{ + return do_chip_export_store(dev, attr, buf, size, export_gpio_desc); +} + +static struct device_attribute dev_attr_export =3D __ATTR(export, 0200, NU= LL, + chip_export_store); + +static ssize_t chip_unexport_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t size) +{ + return do_chip_export_store(dev, attr, buf, size, unexport_gpio_desc); +} + +static struct device_attribute dev_attr_unexport =3D __ATTR(unexport, 0200, + NULL, + chip_unexport_store); + static struct attribute *gpiochip_attrs[] =3D { &dev_attr_base.attr, &dev_attr_label.attr, @@ -436,6 +550,15 @@ static struct attribute *gpiochip_attrs[] =3D { }; ATTRIBUTE_GROUPS(gpiochip); =20 +static struct attribute *gpiochip_ext_attrs[] =3D { + &dev_attr_label.attr, + &dev_attr_ngpio.attr, + &dev_attr_export.attr, + &dev_attr_unexport.attr, + NULL, +}; +ATTRIBUTE_GROUPS(gpiochip_ext); + /* * /sys/class/gpio/export ... write-only * integer N ... number of GPIO to export (full access) @@ -447,7 +570,7 @@ static ssize_t export_store(const struct class *class, const char *buf, size_t len) { struct gpio_desc *desc; - int status, offset; + int status; long gpio; =20 status =3D kstrtol(buf, 0, &gpio); @@ -461,40 +584,7 @@ static ssize_t export_store(const struct class *class, return -EINVAL; } =20 - CLASS(gpio_chip_guard, guard)(desc); - if (!guard.gc) - return -ENODEV; - - offset =3D gpio_chip_hwgpio(desc); - if (!gpiochip_line_is_valid(guard.gc, offset)) { - pr_debug_ratelimited("%s: GPIO %ld masked\n", __func__, gpio); - return -EINVAL; - } - - /* No extra locking here; FLAG_SYSFS just signifies that the - * request and export were done by on behalf of userspace, so - * they may be undone on its behalf too. - */ - - status =3D gpiod_request_user(desc, "sysfs"); - if (status) - goto done; - - status =3D gpiod_set_transitory(desc, false); - if (status) { - gpiod_free(desc); - goto done; - } - - status =3D gpiod_export(desc, true); - if (status < 0) { - gpiod_free(desc); - } else { - set_bit(FLAG_SYSFS, &desc->flags); - gpiod_line_state_notify(desc, GPIO_V2_LINE_CHANGED_REQUESTED); - } - -done: + status =3D export_gpio_desc(desc); if (status) pr_debug("%s: status %d\n", __func__, status); return status ? : len; @@ -511,7 +601,7 @@ static ssize_t unexport_store(const struct class *class, =20 status =3D kstrtol(buf, 0, &gpio); if (status < 0) - goto done; + return status; =20 desc =3D gpio_to_desc(gpio); /* reject bogus commands (gpiod_unexport() ignores them) */ @@ -520,18 +610,7 @@ static ssize_t unexport_store(const struct class *clas= s, return -EINVAL; } =20 - status =3D -EINVAL; - - /* No extra locking here; FLAG_SYSFS just signifies that the - * request and export were done by on behalf of userspace, so - * they may be undone on its behalf too. - */ - if (test_and_clear_bit(FLAG_SYSFS, &desc->flags)) { - gpiod_unexport(desc); - gpiod_free(desc); - status =3D 0; - } -done: + status =3D unexport_gpio_desc(desc); if (status) pr_debug("%s: status %d\n", __func__, status); return status ? : len; @@ -561,6 +640,11 @@ static int match_gdev(struct device *dev, const void *= desc) static struct gpiodev_data * gdev_get_data(struct gpio_device *gdev) __must_hold(&sysfs_lock) { + /* + * Find the first device in GPIO class that matches. Whether that's + * the one indexed by GPIO base or device ID doesn't matter, it has + * the same address set as driver data. + */ struct device *cdev __free(put_device) =3D class_find_device(&gpio_class, NULL, gdev, match_gdev); @@ -785,6 +869,16 @@ int gpiochip_sysfs_register(struct gpio_device *gdev) return PTR_ERR(data->cdev_base); } =20 + data->cdev_id =3D device_create_with_groups(&gpio_class, parent, + MKDEV(0, 0), data, + gpiochip_ext_groups, + "chip%d", gdev->id); + if (IS_ERR(data->cdev_id)) { + device_unregister(data->cdev_base); + kfree(data); + return PTR_ERR(data->cdev_id); + } + return 0; } =20 @@ -800,6 +894,7 @@ void gpiochip_sysfs_unregister(struct gpio_device *gdev) return; =20 device_unregister(data->cdev_base); + device_unregister(data->cdev_id); kfree(data); } =20 --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9AA7322C355 for ; Tue, 10 Jun 2025 14:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566319; cv=none; b=Q9PVUrwltry+cAIPyPO6K9xjqNln416QQ2+xbaiap5WgJZhDy4EyjedJWVIcHyFbskiKJmOiuPdN2wCalqvpbkyVUjjy9XKQ7NT/0/1SKvxIFFajM5sOV09jyJ8Tm1mTbbm6XHlv9YSWqqrcoDfygdKxfo5t5QLRSI8Ppu7J/hM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566319; c=relaxed/simple; bh=d+Bxl0NSiM7UA5F5Yp7jtiVxMzixcYH43BuoVTlUtbg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pfKTtP6ZbIFkq/Bp+fr0Git1mTWzC1y+vwzrvq6YBuzj6uPoZBHKkkEb0D8R0THCl34YK0SFASGSgOPBj4BOCQHCuR3+0C9f9codfBAmodWEMHuc+ioZMGwaYupzzSO/jabTrsDJoO1azvpH6f1NVCEEzxm7rGr4sjQB6TbjyNY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=LAaRMPM/; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="LAaRMPM/" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43edecbfb46so46645845e9.0 for ; Tue, 10 Jun 2025 07:38:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566316; x=1750171116; 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=q7rYTyytP41wrzRonx/qeQvGqjmG0GLYCtZlfrWBrxo=; b=LAaRMPM/J71m7lqGbl+BGSmqrCU672zGAtGqQhNbukLXkcnpex/CEEy3nWzTbHHnEN Sn5+0Flumcojd/WLsQiON2qwAV7vf6HQmlOUx3ApuK5TylvrDdfpvRK8lg4/Ek4ZjsOY B/uDVWf/RmnRyUqu4FzA3g64hQKRC5FIT96RlSm6yOYyhKBeZzMNsErpJ1nQR7Ukw0FK 3/LXKRhRw1sfYZO48re6zE+2qBR/YeDEel0HNp3Gr9OfryhKHQwcEUhSIjb/uEcReHYF G1VkM7r1i0m66VfZYSpcX2+Cy+3/Ia56/vZdUj0vmYHeOMvJq1YJ3+wXeGa52z0Hdzw9 ojsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566316; x=1750171116; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q7rYTyytP41wrzRonx/qeQvGqjmG0GLYCtZlfrWBrxo=; b=B0VRj9GsN+wbW1K/xlgBeNeYMqQoZabH9WoeaccsRC1b+P6YZyf9CwUhlQI0U3P17W eRQbvpcCOAQbVT0SEPhlcFuLW8MKTLy+remj/vrXNl2kmL7eNb88Ub4IsxRjwT1o1Wbx gQ1U1RJdGVTgbcKDx8N2vzBcAX0tcHgTlzng6btJwJdubLijcGZ2Ps3sQXszK07rDR83 rSO94iwuEsJn/vEGd/Tq2RH991bmbGj+sijHgbdrff1nyxYEMRucea+6Vrfan7+CsnzX Fawmzo+20KqIgb/t9/y64rb4pFXgI/3jm3xVgxbbtc8utfYiF/0+ixNb5GSdk0fwyZuB hjhA== X-Forwarded-Encrypted: i=1; AJvYcCWwetJWLUhaPDq9hzpCLhpLc2fYx6DYYL9FnTqGo7EbsglK9NJzptM6m56pm6yuOSVzDsbfDrioTAKmgVQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyMbBDLmbY7Y/UkdbwmKk39MxCp1/LMn2GIav2cvDW7UGSYIsL8 LbU/uynHZ8Kp/TicCXIt5JvyzfHfRJDmljmjKgFVviVyNg+9s0T2l66tLOrjwIBebgA= X-Gm-Gg: ASbGncuWMx0FBpFmde4YtPqvuvivfLLknxmpa9GulWUldyD8gZa6LEMeaSqxjsNiPOI WDMQ9QW9RSAEoM0Yk+gvZeDFp7TbWxv4ctcPafjStDx1m3JP9K3h/MhkIFC+DXEFnFt8J3Nio5W KzkA31tgpFfMwVjJ+uH44ANiY2vIe3w6VcvBKFRyVCUzdx+QVuRxUttLwqRHEK21mSm398BGKnm 5zEFmLjvSeyx9vCJsoCQzqun3/SYI7sDwLl1obgRHXRMO3P8uHR7XSBorPgI19b0096/X282HEu yLg/klOi9YwFdTEVgsdIsOpF/chfYRUKYIQ+sUERmE6p5uZTykgH X-Google-Smtp-Source: AGHT+IFqsL6AQNgjHvVYwct1knCOR3BWEgK6/JlDG1gE359gCrycIIxTwv7hXlhov+kj+IZkQ+EiqQ== X-Received: by 2002:a05:600c:5288:b0:450:d3b9:4b96 with SMTP id 5b1f17b1804b1-452013916bbmr165982055e9.13.1749566315808; Tue, 10 Jun 2025 07:38:35 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:35 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:23 +0200 Subject: [PATCH RFC/RFT 08/15] gpio: sysfs: only get the dirent reference for the value attr once 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: <20250610-gpio-sysfs-chip-export-v1-8-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3042; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=TO3LbK7dPeG+FDRNFnBsVRIrM0Iiro3kG2oek3lX/7Y=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENhw51P2TaMhnBGwcf0wBuqFshm7H07M2gUq wktCql8YLGJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYQAKCRARpy6gFHHX cjlED/9HPFz5JqtJcL2ZD/+Ti6nEEqSLtmF4iWdyX4stOkurGwfrGeXibADRzBfPk/eO/xwznhL vmD2PMNmkristKf1FXxV9YtsbCsJUcwXePaiqqkIh/o63een8sSWcLPHCuWLUHR0SwSoG5IvMJA wckCkUnyKRoA3DTx/ARkJlgOqf0sPgJuwB2eq7mIcyaFS6NZdhjmt+fXuVuoNG6SvEfdzRhAVoG DM5rklTx0t+Ifm7xDvs+m/xspdpgLDJPJpPXenX5VMs5HbhGXbdqiN5roDspIsVRyU9DIDhhAJ5 KJSz0X/YR1mFBejmx13dvJs74B3vSdYWYVGD154lGMJz0bLrjyjqMq9G0zGXnfL+0zKLWSr8Jcc VuHMBMLKO0rpoYzSbMKU6fgIfbf7TVfWkHLlVr0L2tADV1QNCHtAU5hcrFAiZLtILngqyza3n19 IfdVZaema8GnDkJ9z0StGNeDFRTa4tfbHrO7mcJNLRSFDqppnqhpNORfuLQqNK0Rh6IOR3brliG khqPPFODOU/G2GWl2Ymjts3DyF4OmZntvCSmLin4UMwaE2/Mv4KKpVOyeO4MuYo223L/VeSdwuU vnRr80vwUgfmuyx7VdJ4mFB3N78nodwdySG/cXESClA9zm+ncAIt1lLzKKGqso6wTImX25aEIK8 flleW2TY850E6lQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski There's no reason to retrieve the reference to the sysfs dirent every time we request an interrupt, we can as well only do it once when exporting the GPIO. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-sysfs.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index a3403b963d6488aad24e47e9e28e0439676de704..642635c9f84bbd869727755e727= 81fae31a9cca3 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -36,7 +36,7 @@ struct gpiod_data { struct gpio_desc *desc; =20 struct mutex mutex; - struct kernfs_node *value_kn; + struct kernfs_node *value_class_node; int irq; unsigned char irq_flags; =20 @@ -156,7 +156,7 @@ static irqreturn_t gpio_sysfs_irq(int irq, void *priv) { struct gpiod_data *data =3D priv; =20 - sysfs_notify_dirent(data->value_kn); + sysfs_notify_dirent(data->value_class_node); =20 return IRQ_HANDLED; } @@ -177,10 +177,6 @@ static int gpio_sysfs_request_irq(struct device *dev, = unsigned char flags) if (data->irq < 0) return -EIO; =20 - data->value_kn =3D sysfs_get_dirent(dev->kobj.sd, "value"); - if (!data->value_kn) - return -ENODEV; - irq_flags =3D IRQF_SHARED; if (flags & GPIO_IRQF_TRIGGER_FALLING) { irq_flags |=3D test_bit(FLAG_ACTIVE_LOW, &desc->flags) ? @@ -203,7 +199,7 @@ static int gpio_sysfs_request_irq(struct device *dev, u= nsigned char flags) */ ret =3D gpiochip_lock_as_irq(guard.gc, gpio_chip_hwgpio(desc)); if (ret < 0) - goto err_put_kn; + goto err_clr_bits; =20 ret =3D request_any_context_irq(data->irq, gpio_sysfs_irq, irq_flags, "gpiolib", data); @@ -216,10 +212,9 @@ static int gpio_sysfs_request_irq(struct device *dev, = unsigned char flags) =20 err_unlock: gpiochip_unlock_as_irq(guard.gc, gpio_chip_hwgpio(desc)); -err_put_kn: +err_clr_bits: clear_bit(FLAG_EDGE_RISING, &desc->flags); clear_bit(FLAG_EDGE_FALLING, &desc->flags); - sysfs_put(data->value_kn); =20 return ret; } @@ -242,7 +237,6 @@ static void gpio_sysfs_free_irq(struct device *dev) gpiochip_unlock_as_irq(guard.gc, gpio_chip_hwgpio(desc)); clear_bit(FLAG_EDGE_RISING, &desc->flags); clear_bit(FLAG_EDGE_FALLING, &desc->flags); - sysfs_put(data->value_kn); } =20 static const char *const trigger_names[] =3D { @@ -726,8 +720,16 @@ int gpiod_export(struct gpio_desc *desc, bool directio= n_may_change) goto err_free_data; } =20 + data->value_class_node =3D sysfs_get_dirent(dev->kobj.sd, "value"); + if (!data->value_class_node) { + status =3D -ENODEV; + goto err_unregister_device; + } + return 0; =20 +err_unregister_device: + device_unregister(dev); err_free_data: kfree(data); err_clear_bit: @@ -804,6 +806,7 @@ void gpiod_unexport(struct gpio_desc *desc) =20 data =3D dev_get_drvdata(dev); clear_bit(FLAG_EXPORT, &desc->flags); + sysfs_put(data->value_class_node); device_unregister(dev); =20 /* --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A878522E3E9 for ; Tue, 10 Jun 2025 14:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566320; cv=none; b=tFDOKGdYHjUfwciRw7UV3wko744TWSjWQ6hViT2oXVstmIOjKF506NTgyEEaKht9JVEzVPzJbMjcO5AyuGRHF2mYw0lKqCI8krGBqGA28/tnHZt6P+jb9FEubEWLYsG/Okz4HC9havLKJzAlV48z/tvcrLAOWKc8a+BmvyKVwMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566320; c=relaxed/simple; bh=XNu9jNKy3ua2IQdVl9HbAC1d2wbfpHsCqHYoaysQ5uQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Mnc/4VlYBjK+CaIbk0ClvZO7V9a+g2RsWaxa2zEieKNs/E/avIRRy4cZPMknjMnj6OT1vCqwwvjwAo/2Ijq+oNgJHMHr+F6ZE9logtuqOb7XR2t6FOPcHfM0+tauBH6JOShHipQZeO1nvPUU2tp/81RrCJg0TFH695DIZIDSgKY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=WNJie4ML; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="WNJie4ML" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-451e2f0d9c2so43429995e9.1 for ; Tue, 10 Jun 2025 07:38:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566317; x=1750171117; 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=YajReGdgQoE1Z/C7Wj+XydGRMG4Oa8NkzwnsH8hrzWI=; b=WNJie4MLE073hSfzxzaBj4k9hNKxypKcMK3dh2fNcaU8V577bxSSO1H/6GFAUClsSs S2HxsZKoPziw5IS0HxXDPCurlKL6uBBZXSvl5/VYSlZKJtzLeZ+6tUxoy/zW3WLF8bW2 VqW6dWVUPQPk5UuFpaYq5rFl9amWX3KnqJfesVs9isAHTR/+RACyAN7beH5Ibj+gYFib HcSkWV96KStJZ4vOfw8TgFHvt9fSDf+SzKuBam8x9HA6B8jN52GsNfYHD/vTDPcSXgBN HY9wY7n5SszZu1Nc4nVFoKTRZe8pJ7vl5FtfVNbWooq9Gaeap2iWvcfA+nOcjFlHlxKD trPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566317; x=1750171117; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YajReGdgQoE1Z/C7Wj+XydGRMG4Oa8NkzwnsH8hrzWI=; b=wP9FsKqsnHm4yrmRQm0u5h65NrngYg3JGOkRHp3ItO5OG0efbZqjyHbyxeHFE91h+o UCUrsLgDF+53sLpRbJkI2dENPikIN6+AWmiCMNInM/Us3FP65xph8UjHR4X+VVp8LRJJ bJn6jKowfXCVqOw+DCvo3pEKFsBuXtG4HN+IxX4oWLVC2IiEVjyxNkoQTsPLY4hJ/sj9 sxIJTybHM/y7M9iUnL34BUvOpgwb5wfHk5I2Z3MIqTxup2zVdNUyXSRiK8KYrHhjU78j tqS73RI6I5+GyVUDU/C1E9zuoK1HWiajOuxSv2vkJONjZmwQbFfM6vhp3q7IkIlBwHw+ S4Eg== X-Forwarded-Encrypted: i=1; AJvYcCWT8CfpsSfxEY+IG69gevHd/VNJuLPiyarQYAA7k8G+PXISgMEC+zhdnhEpgY2VJO6XkjmORzD7kt25Mzo=@vger.kernel.org X-Gm-Message-State: AOJu0YxBbxBS70zW+vvH4WgwJ5rbUg/df/AxlFxKQZra7ZVmRhZg/Rz/ oETPT7lMRtnxXChU/rPskekFfr1b5lxzldCupnhr1zXWVE2iKldFcsglGpAKge64Gd0= X-Gm-Gg: ASbGnctI7n95eTazYntBoXNWuk+KD+dNwua/Oh0QW0daL2k1U7eENL63Ncs8bjTrSw+ aB4BLIQpp8zC8NixtjUGLENaiq8ZnU/Jh/lP1UwtQaw/rM8WQ85fNz0aeM6QRyKeDk749qrB6Po OQYnM636tRNX4lnDc27Vn+/C/y0zoAjQPlPmHPwTi36e7iU8uqtwVN0Tmc+wZ1wn+KWOzefD9Pv 78cz4EYp8ddawz0jpJe62srXSxPGZ90Pg1WJLIwqGn7avGdN/bBIGaXhY1fICrVlZq6/9ykzLdT EixTgCm8C8Stroev2oGQL50LzHbd3MknmCObbjS/KBPc51U1yaDC X-Google-Smtp-Source: AGHT+IGpIgzg2zt99tcbqnYnzxYWTCfru7Fp0Z5Kk+LmJUDSRUBZVf/+DrtWRpMW58oPYNNscrudSg== X-Received: by 2002:a05:600c:1f1a:b0:43c:f509:2bbf with SMTP id 5b1f17b1804b1-4531cfe36dcmr39161775e9.15.1749566316871; Tue, 10 Jun 2025 07:38:36 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:36 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:24 +0200 Subject: [PATCH RFC/RFT 09/15] gpio: sysfs: pass gpiod_data directly to internal GPIO sysfs functions 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: <20250610-gpio-sysfs-chip-export-v1-9-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3362; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=HrHcoKPsz+vmq5v1MUbvC7Htqt6DI5nn37F1yRAxQX0=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENhsMp/mzFFyPBKPP4HKjdQsItOwzPyi1qHt xuFIxJry2OJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYQAKCRARpy6gFHHX cmHKD/99QWLVXGKMbnwVeDhRJIx648P0hzrOJ+ygPg08yMj/6wswBGgohasJ8icD0oGMiRxywA2 /gDEDYT6HGozGJAfF/CUeBiiHNuxQ6hXbn6oaPAV+L3dEtO4z3vJwoic3R8tGWpf+Yo8tPNeJe9 qmLfujX1lLR0EdFtsIKcsdUKkRw4tpb8RvuUz6jJV9SkMQxXD7fzfXK1vxWYdXJwnNJJqMzwYPk twYgL8k4XnJ1sAcjIf3Ik5RM5b+X3b7CIjsTkQr0ArrXTFYxOBXuy4QN7ZgwA+NXl9EkyIbGD4e ji+bm5YZ5KQCfJ2kfmMisgHOTloerMQz96P6e7NLoPEupihblRzQ7lCn21aRNKDXLFJbG7Ng5A1 e4yz9EzO0cC0GF4Cf6jeXYhgMyUlLX3N4vw3ZVrLNSndAA/1Jzyn4KSxy8hDaX/+mYcy+BgIePT jrTwytSidulC5wAnl31PFRB1vBi2rr452ex1iUPWyYoPkWPUhFeM1RVNZijLPT9qrctFvit0TEz A9+mA9oJddx8i3DvD+ppA4Nkzoh1i3Um1/o1nCff1BTz8TOghR5ObJsF77AiVz4hjBFaHpSi0Qh ZO4xo6pPFbTG4uqxVBQXZTvjbSHSSXAcPDxGeVE+QRXlaJ6dOb5vSDOXhqPbR6wiLZpywUt0R8v TkpcFhPD7auNGVQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski To make the transition to not using dev_get_drvdata() across line callbacks for sysfs attributes, pass gpiod_data directly to gpio_sysfs_request_irq(), gpio_sysfs_free_irq() and gpio_sysfs_set_active_low() instead of having it wrapped in struct device. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-sysfs.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 642635c9f84bbd869727755e72781fae31a9cca3..811328c8e72d819bcd4b4215cda= 450c73aaa65cd 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -162,9 +162,8 @@ static irqreturn_t gpio_sysfs_irq(int irq, void *priv) } =20 /* Caller holds gpiod-data mutex. */ -static int gpio_sysfs_request_irq(struct device *dev, unsigned char flags) +static int gpio_sysfs_request_irq(struct gpiod_data *data, unsigned char f= lags) { - struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; unsigned long irq_flags; int ret; @@ -223,9 +222,8 @@ static int gpio_sysfs_request_irq(struct device *dev, u= nsigned char flags) * Caller holds gpiod-data mutex (unless called after class-device * deregistration). */ -static void gpio_sysfs_free_irq(struct device *dev) +static void gpio_sysfs_free_irq(struct gpiod_data *data) { - struct gpiod_data *data =3D dev_get_drvdata(dev); struct gpio_desc *desc =3D data->desc; =20 CLASS(gpio_chip_guard, guard)(desc); @@ -278,12 +276,12 @@ static ssize_t edge_store(struct device *dev, struct = device_attribute *attr, return size; =20 if (data->irq_flags) - gpio_sysfs_free_irq(dev); + gpio_sysfs_free_irq(data); =20 if (!flags) return size; =20 - status =3D gpio_sysfs_request_irq(dev, flags); + status =3D gpio_sysfs_request_irq(data, flags); if (status) return status; =20 @@ -294,9 +292,8 @@ static ssize_t edge_store(struct device *dev, struct de= vice_attribute *attr, static DEVICE_ATTR_RW(edge); =20 /* Caller holds gpiod-data mutex. */ -static int gpio_sysfs_set_active_low(struct device *dev, int value) +static int gpio_sysfs_set_active_low(struct gpiod_data *data, int value) { - struct gpiod_data *data =3D dev_get_drvdata(dev); unsigned int flags =3D data->irq_flags; struct gpio_desc *desc =3D data->desc; int status =3D 0; @@ -309,8 +306,8 @@ static int gpio_sysfs_set_active_low(struct device *dev= , int value) /* reconfigure poll(2) support if enabled on one edge only */ if (flags =3D=3D GPIO_IRQF_TRIGGER_FALLING || flags =3D=3D GPIO_IRQF_TRIGGER_RISING) { - gpio_sysfs_free_irq(dev); - status =3D gpio_sysfs_request_irq(dev, flags); + gpio_sysfs_free_irq(data); + status =3D gpio_sysfs_request_irq(data, flags); } =20 gpiod_line_state_notify(desc, GPIO_V2_LINE_CHANGED_CONFIG); @@ -345,7 +342,7 @@ static ssize_t active_low_store(struct device *dev, =20 guard(mutex)(&data->mutex); =20 - return gpio_sysfs_set_active_low(dev, value) ?: size; + return gpio_sysfs_set_active_low(data, value) ?: size; } static DEVICE_ATTR_RW(active_low); =20 @@ -814,7 +811,7 @@ void gpiod_unexport(struct gpio_desc *desc) * edge_store. */ if (data->irq_flags) - gpio_sysfs_free_irq(dev); + gpio_sysfs_free_irq(data); } =20 put_device(dev); --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A473F2309AF for ; Tue, 10 Jun 2025 14:38:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566321; cv=none; b=KhOPNwPowbptNdqZwdmREaA42RBlWgcH7XKOqK5JBQJ5AIyTyvdhmmsl3ydFXXSl1VGrqXN4f9n1JBBg8F2UHsOQVnzvGXBJrhL/rPo+GKYXoqD0WfJLf3e02AJ4vTwANV/V6qT0DyKl0yebOdyDsTox0v3DseQyd1e2geNRjwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566321; c=relaxed/simple; bh=b8EHdhj3xnw5oclyrVliGAMrvB3IqzLhHzIVXS5RyUY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hZ0TROcAmtKyscqxQRQl/d8WuiQ0c3Au3TcuxU0f2vevVX3lpZW3dhp+giyZs7Dq0vqzm4LLw6keopD7qUo8UnYcD9AcWb8aizwgKAlq2/JaGIXDJiCzsfqXV8knRsoocu43x4qfI4sr6CUAdCMj5Mk5i1Ynfv2iZyF1/bTAIO8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=qBqAbxDd; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="qBqAbxDd" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43edecbfb46so46646305e9.0 for ; Tue, 10 Jun 2025 07:38:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566318; x=1750171118; 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=DoP5RvFV2ifyJeEVAaERNQ3+MFbOQYYVwQX6PDXiIlQ=; b=qBqAbxDdPFTy4olUPn4qNWjI68X10BQQIp4ve4+argyWR6M5sfpRDF05psxTOQ5roj Z9b4TnjtDvtjhttU0O5CBZPLyEptChtFYhkpOTY1i26rotIMuYR831imqA1iP6r/cRva EuhjfkQ3l+zebsQHsHEEjmjKXpiyGMYbtrl2KzXsFquTChByLcn7e/ue6x791yOvfUwK 9ah7GT+onMT4gBQ5/X/8BAi9VRaDrrX65SOEpZBFMWBZTo/WpSI3+EoilkDI2CnNgxCn 5PDKClUuZGc/Y20Tq/Rzv0zllpET6yNp1/FGm0eQ6a52OCokQTcwwQjlE7JruAEIfBwq vUng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566318; x=1750171118; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DoP5RvFV2ifyJeEVAaERNQ3+MFbOQYYVwQX6PDXiIlQ=; b=NWWAh5SZVtS+AqNFSfjUWhYZ4DMTsoFclyChKlioy1AdZ4H4imWe5sG0cpG0j5zoXY rN73wxawQL+zyT+uR2d/gRapAYLl2Z1aWFeGTVzEqRlQfcRYXlQEwtWSP8EINrqoePjK kcoIGSNqkAVDqsjXR15uuEag++KrImvOYVgDTyRUDPUkh7s1ocG7yGYaTU+0pofWLH7K nkwi3beE9H7ui5/m9qMFfjTJCqT9oZVMQeI5j3p9c1uN/DOY8Jqn9W3KHlrVu2FO7pWx hnMa29WPGjb1cJ7K5R/9kXpn6LnvuH+HdQ/a6rFrl59+7TuFu7Wc1xH8ODfRU+Acs/8E 9XVg== X-Forwarded-Encrypted: i=1; AJvYcCVeZQwYNa3mp7skAIvYDzOZ56bz1kc4ehRLaSl9mY3yucZP3kiKNsxthjKO+FELJoiz6nXEp5DimOccWok=@vger.kernel.org X-Gm-Message-State: AOJu0YzP+doz/6uzGcI7Ne/c0NZ+j4wEIdZZWrI8AFEM0YD3CpaKO6T7 2D/9JMcVg+riNVq1LOgYV0GiPuuKQBIsPYg0LjnVeRt9z99mZxZOW5vZix7rUaA8m9132yGlKwJ U8fvW X-Gm-Gg: ASbGncv1utlMxWoUdqoVNJO9eFjmoUL2hI1kI40S3WCxF/W9hFAdvYYa2V4AfL7RMSU kYjeTPiHHmORRIsh5dM4riRshC8AgoNGFZs99jkt3AjtjbjmXOtklfV1gSkM7pGRHbHNuUd5IWP w+EBJak8huFr1fnLA0N/NQd6evcFM2VnwOXZZ8MZSaigU0E2tK/DtWclSzXnIBT7kfcOym8ufAV ynGFRdS9hA2eaES5XXzoruJlH+VnbidQu8ZtBJMcMv7QNAVzQoaWtKUndOcQ0eM9Yn4vqIBe4K+ 0EdbW1RoIQBn7eOs1iC9MSBLRSeiiwpW3DuUbN7I8Mtq+ik5pavFCEMvwEcjsuM= X-Google-Smtp-Source: AGHT+IFWC4RtUHSgUSrUNgrZ7GSj5JevOQ4eZ5K4U/rexE1ZJ45Jp6j+/ZmPH0+J19iLtIt0zcwpqg== X-Received: by 2002:a05:600c:4fce:b0:453:a95:f086 with SMTP id 5b1f17b1804b1-4530a95f7aamr99365775e9.12.1749566317982; Tue, 10 Jun 2025 07:38:37 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:37 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:25 +0200 Subject: [PATCH RFC/RFT 10/15] gpio: sysfs: don't use driver data in sysfs callbacks for line attributes 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: <20250610-gpio-sysfs-chip-export-v1-10-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9621; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=m4j+fX0TlGurRWTg2bXu1FuZz0ENTYE+Xi6kt5xTUdY=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENhJ8r6ge1uwoYf5B9C3sRyicujal3OEPAcs p909zNb5/WJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYQAKCRARpy6gFHHX co38D/9AWormvfd373nMekiFxkO3mL4uJ4Tf3tLh2azOSLvczM7Ph0T/HraKpYlBi6Ro8BmZVEj YlRjPNAsk/qRN7ap8x9uL77qrjWx3vujFjUq2LS0YB3FAOQtT4gXCusQVx4TeNhk6VInIzGgEHi fQ/gKRx/5Po0wQZvKZFgyRxNJN9TXTGGIpnLupZrXiaQEjNu10vvQ7/j23sTQDWrytwKziUjyG/ Xlp3zyhJFRV/g7aYnJZkTQ4Ghk9lFIJfH4BsZFbEJ2zoY0nesGqDdlbicUVl+D7mL/GSC9vs/jU 1VPYBqqASDJlZjc9IhNC2RS11AHhF2O5UUc6baN6H6/pU+N05lD0XNgEOUqqHsP2YFj2y2+lPQ3 n+3u7kS8YgmAknMus4i3IwHEkyls4eMGNfzqBZ3TJTu2e2zEqJ1G0N20cyrXOnOVSQnO0HVy9rS d1l44ua/4CPE0d/CBKAPcRQDhqpdfgghS4BaBqPvqG/sim+Sf2tQZFqATSvBs7euXTKsjHC7dyh EGFKWrrFvrPx6b06imENissuCkOuo5qhw57AR8hFV5u6AUQC0/8uCnPYH8AyVdbahSj/4YFvvMR f+euFGQAYyHpaZ0N4O+WBq9yPXjaipugserq+LbGXWf/B2d/U8JI1raS8aZCGiTn+LN8tGjBalo bO4bJMUFAdjCpbA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Currently each exported GPIO is represented in sysfs as a separate class device. This allows us to simply use dev_get_drvdata() to retrieve the pointer passed to device_create_with_groups() from sysfs ops callbacks. However, we're preparing to add a parallel set of per-line sysfs attributes that will live inside the associated gpiochip group. They are not registered as class devices and so have the parent device passed as argument to their callbacks (the GPIO chip class device). Put the attribute structs inside the GPIO descriptor data and dereference the relevant ones using container_of() in the callbacks. This way, we'll be able to reuse the same code for both the legacy and new GPIO attributes. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-sysfs.c | 122 +++++++++++++++++++++++++++++----------= ---- 1 file changed, 82 insertions(+), 40 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 811328c8e72d819bcd4b4215cda450c73aaa65cd..03e97697b7f26a8aa9f527f25f0= 48f25588f3ca2 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -32,6 +32,15 @@ struct kernfs_node; #define GPIO_IRQF_TRIGGER_BOTH (GPIO_IRQF_TRIGGER_FALLING | \ GPIO_IRQF_TRIGGER_RISING) =20 +enum { + GPIO_SYSFS_LINE_ATTR_DIRECTION =3D 0, + GPIO_SYSFS_LINE_ATTR_VALUE, + GPIO_SYSFS_LINE_ATTR_EDGE, + GPIO_SYSFS_LINE_ATTR_ACTIVE_LOW, + GPIO_SYSFS_LINE_ATTR_SENTINEL, + GPIO_SYSFS_LINE_ATTR_SIZE, +}; + struct gpiod_data { struct gpio_desc *desc; =20 @@ -41,6 +50,14 @@ struct gpiod_data { unsigned char irq_flags; =20 bool direction_can_change; + + struct device_attribute dir_attr; + struct device_attribute val_attr; + struct device_attribute edge_attr; + struct device_attribute active_low_attr; + struct attribute *attrs[GPIO_SYSFS_LINE_ATTR_SIZE]; + struct attribute_group attr_group; + const struct attribute_group *attr_groups[2]; }; =20 struct gpiodev_data { @@ -79,7 +96,8 @@ static DEFINE_MUTEX(sysfs_lock); static ssize_t direction_show(struct device *dev, struct device_attribute *attr, char *buf) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + dir_attr); struct gpio_desc *desc =3D data->desc; int value; =20 @@ -95,7 +113,8 @@ static ssize_t direction_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + dir_attr); struct gpio_desc *desc =3D data->desc; ssize_t status; =20 @@ -112,12 +131,12 @@ static ssize_t direction_store(struct device *dev, =20 return status ? : size; } -static DEVICE_ATTR_RW(direction); =20 static ssize_t value_show(struct device *dev, struct device_attribute *att= r, char *buf) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + val_attr); struct gpio_desc *desc =3D data->desc; ssize_t status; =20 @@ -133,7 +152,8 @@ static ssize_t value_show(struct device *dev, struct de= vice_attribute *attr, static ssize_t value_store(struct device *dev, struct device_attribute *at= tr, const char *buf, size_t size) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + val_attr); struct gpio_desc *desc =3D data->desc; ssize_t status; long value; @@ -150,7 +170,6 @@ static ssize_t value_store(struct device *dev, struct d= evice_attribute *attr, =20 return size; } -static DEVICE_ATTR_PREALLOC(value, S_IWUSR | S_IRUGO, value_show, value_st= ore); =20 static irqreturn_t gpio_sysfs_irq(int irq, void *priv) { @@ -247,7 +266,8 @@ static const char *const trigger_names[] =3D { static ssize_t edge_show(struct device *dev, struct device_attribute *attr, char *buf) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + edge_attr); int flags; =20 scoped_guard(mutex, &data->mutex) @@ -262,7 +282,8 @@ static ssize_t edge_show(struct device *dev, struct dev= ice_attribute *attr, static ssize_t edge_store(struct device *dev, struct device_attribute *att= r, const char *buf, size_t size) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + edge_attr); ssize_t status =3D size; int flags; =20 @@ -289,7 +310,6 @@ static ssize_t edge_store(struct device *dev, struct de= vice_attribute *attr, =20 return size; } -static DEVICE_ATTR_RW(edge); =20 /* Caller holds gpiod-data mutex. */ static int gpio_sysfs_set_active_low(struct gpiod_data *data, int value) @@ -318,7 +338,8 @@ static int gpio_sysfs_set_active_low(struct gpiod_data = *data, int value) static ssize_t active_low_show(struct device *dev, struct device_attribute *attr, char *buf) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + active_low_attr); struct gpio_desc *desc =3D data->desc; int value; =20 @@ -332,7 +353,8 @@ static ssize_t active_low_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { - struct gpiod_data *data =3D dev_get_drvdata(dev); + struct gpiod_data *data =3D container_of(attr, struct gpiod_data, + active_low_attr); ssize_t status; long value; =20 @@ -344,48 +366,34 @@ static ssize_t active_low_store(struct device *dev, =20 return gpio_sysfs_set_active_low(data, value) ?: size; } -static DEVICE_ATTR_RW(active_low); =20 static umode_t gpio_is_visible(struct kobject *kobj, struct attribute *att= r, int n) { - struct device *dev =3D kobj_to_dev(kobj); - struct gpiod_data *data =3D dev_get_drvdata(dev); - struct gpio_desc *desc =3D data->desc; + struct device_attribute *dev_attr =3D container_of(attr, + struct device_attribute, attr); umode_t mode =3D attr->mode; - bool show_direction =3D data->direction_can_change; + struct gpiod_data *data; =20 - if (attr =3D=3D &dev_attr_direction.attr) { - if (!show_direction) + if (strcmp(attr->name, "direction") =3D=3D 0) { + data =3D container_of(dev_attr, struct gpiod_data, dir_attr); + + if (!data->direction_can_change) mode =3D 0; - } else if (attr =3D=3D &dev_attr_edge.attr) { - if (gpiod_to_irq(desc) < 0) + } else if (strcmp(attr->name, "edge") =3D=3D 0) { + data =3D container_of(dev_attr, struct gpiod_data, edge_attr); + + if (gpiod_to_irq(data->desc) < 0) mode =3D 0; - if (!show_direction && test_bit(FLAG_IS_OUT, &desc->flags)) + + if (!data->direction_can_change && + test_bit(FLAG_IS_OUT, &data->desc->flags)) mode =3D 0; } =20 return mode; } =20 -static struct attribute *gpio_attrs[] =3D { - &dev_attr_direction.attr, - &dev_attr_edge.attr, - &dev_attr_value.attr, - &dev_attr_active_low.attr, - NULL, -}; - -static const struct attribute_group gpio_group =3D { - .attrs =3D gpio_attrs, - .is_visible =3D gpio_is_visible, -}; - -static const struct attribute_group *gpio_groups[] =3D { - &gpio_group, - NULL -}; - /* * /sys/class/gpio/gpiochipN/ * /base ... matching gpio_chip.base (N) @@ -645,6 +653,21 @@ gdev_get_data(struct gpio_device *gdev) __must_hold(&s= ysfs_lock) return dev_get_drvdata(cdev); }; =20 +static void gpiod_attr_init(struct device_attribute *dev_attr, const char = *name, + ssize_t (*show)(struct device *dev, + struct device_attribute *attr, + char *buf), + ssize_t (*store)(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count)) +{ + sysfs_attr_init(&dev_attr->attr); + dev_attr->attr.name =3D name; + dev_attr->attr.mode =3D 0644; + dev_attr->show =3D show; + dev_attr->store =3D store; +} + /** * gpiod_export - export a GPIO through sysfs * @desc: GPIO to make available, already requested @@ -664,6 +687,7 @@ gdev_get_data(struct gpio_device *gdev) __must_hold(&sy= sfs_lock) int gpiod_export(struct gpio_desc *desc, bool direction_may_change) { struct gpio_device *gdev; + struct attribute **attrs; struct gpiod_data *data; struct device *dev; int status; @@ -709,8 +733,26 @@ int gpiod_export(struct gpio_desc *desc, bool directio= n_may_change) else data->direction_can_change =3D false; =20 + gpiod_attr_init(&data->dir_attr, "direction", + direction_show, direction_store); + gpiod_attr_init(&data->val_attr, "value", value_show, value_store); + gpiod_attr_init(&data->edge_attr, "edge", edge_show, edge_store); + gpiod_attr_init(&data->active_low_attr, "active_low", + active_low_show, active_low_store); + + attrs =3D data->attrs; + data->attr_group.is_visible =3D gpio_is_visible; + attrs[GPIO_SYSFS_LINE_ATTR_DIRECTION] =3D &data->dir_attr.attr; + attrs[GPIO_SYSFS_LINE_ATTR_VALUE] =3D &data->val_attr.attr; + attrs[GPIO_SYSFS_LINE_ATTR_EDGE] =3D &data->edge_attr.attr; + attrs[GPIO_SYSFS_LINE_ATTR_ACTIVE_LOW] =3D + &data->active_low_attr.attr; + + data->attr_group.attrs =3D data->attrs; + data->attr_groups[0] =3D &data->attr_group; + dev =3D device_create_with_groups(&gpio_class, &gdev->dev, - MKDEV(0, 0), data, gpio_groups, + MKDEV(0, 0), data, data->attr_groups, "gpio%u", desc_to_gpio(desc)); if (IS_ERR(dev)) { status =3D PTR_ERR(dev); --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A7F7F230BF2 for ; Tue, 10 Jun 2025 14:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566322; cv=none; b=L1yjw9yBX5ffgtYY4fO2tLAsuIJwMvZ4M4eyqjnIdhXZmKoBeggps8Rq0Pdd6VfKPz7cgwNJFW8S3/uI0ZqiQLLAYZt9FotG/Hgl2vKZXyJiDlhoTLh/Io3/cAcxtCINGwlqwJKbxg6CfPfe4gT+5ShyB6lpulaKCJuSJtffNZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566322; c=relaxed/simple; bh=f8vXK6IWliyCN7vPGg3hik7hmD2HLv651rEW3W10AHY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DSv1vPT1XHR7PVOGnx9n1EQosY5uFkQrf/ZtgBE27F+fDKvKvwrakW7NiqoR0JG5Ovoee8wOHuadf6k18FjdSL7CmidZsYYd1lYuzeQS9lOoMBF9F6AHUg3FV3NBcuuhczwfrNGvcSFxATIkIXpMUST21cigdK/bn0zAzSbu0kg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=uAZ6oma5; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="uAZ6oma5" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-442f4a3a4d6so30046445e9.0 for ; Tue, 10 Jun 2025 07:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566319; x=1750171119; 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=glk+vyiBAA4mAU1wTyAmPtLPG2zXbkDr8YYuwf/YIQU=; b=uAZ6oma5c7i9kdbZXeThlXD1Hpa+2LtbSf67rT1rhN/ag5RpZk1j3WC4GyEoUgi1DP mmfrv1xvjdO0M9TWNQn+/SnK5AU03G3byLLL1bqK37kef9xuPiJJuSK7dMXY6sI0COVv rRcohPpnn8WH09UWHFAiNFT+MQAUV2p5wZ2zQ8byxn2jY+/SDt2zYvw3H2JGgiCYvRqe xph93R4mOnzvSdTeYZc9hgU3bon96jBqQG7B8F4/AHPlPbLz17w7bL8Lf7+lW5MqUnNE m+DBIZ/tCa8NW1kvC01UlM28aRoGQb5HYPyUm7P1iKDqxh1N3dR2uM57tW10BFYthzsI TNDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566319; x=1750171119; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=glk+vyiBAA4mAU1wTyAmPtLPG2zXbkDr8YYuwf/YIQU=; b=vI87rXdAmLKfaimncE5gGxOH8tAZawh6MlzKegZcmGJIOBLd4bsDD9HZ2CPtx9X3gJ Qv1Jeh3pbE7sIZhl/rjMFrudhiTwvOnysWO/H0dpT0EhKSLj8kfOfdCUsMxCRsz3JvWT t3zaAOZRe0KSKClORViHNDrQH1Xh3dfbvh96XknDyGND9P3xQ6WP1DMQOcYcrsUPXW/6 uTRYyXodqyhDEOZWT+u6QTJMd/JtrshlikSJPphVJSRZXTK+89Xr2tJtCR3x0Kw83F78 XhcbEMjPvcEx7eY27ejub5StN1+doiJ2DeBfP9ulCCK9USJlGxT3LBsviYTkybZCfA4E 0trQ== X-Forwarded-Encrypted: i=1; AJvYcCXo+XO1zvUP9NG1i2gG2DgHI3/EMgN1pDeN2grh/pNzgqj9bVlfVp1fMWJPQpEzYlNqDzmF1vXOci5WB/o=@vger.kernel.org X-Gm-Message-State: AOJu0YxaRr5LU4ASIFW0QSndxnJwpnxpQl7RrmCUZXxJj11yS9IUG0Pk DROkUX9QTpREfkOT4Ehx9wjPEjr8qBC6CJ+fvoUSlOFa47FEBc9UXVLF8mSHvshjRqk= X-Gm-Gg: ASbGncvULXCmfg6SvdN+PFxd/ZoscUJMSYV5YuT0Ns/s/ixEUzSvk2HihXCpCw8Nt+U 5G2TjxL31C/0sCAOBGCyg1Gz9k5IeuA3xE2RevxSJHdmQxKYjw/TyCecQ8EHSEDgZRaXGifP597 lCl0gwSeocAtsjiiM16cHlZE3jGRj222tcNV5UTRmcEac19KT4MmFCHQr3uKORDatTyAluk2GMR OH9YYt48reeTbgytFdYnE5KBxAdgOp1iD2rAUQcpBxyihE4jrTr3fYiwWgFaNssFjOARIi9HQnk YVNiuVPEe4zJcPAgHMf38ukOnSGJJa0meRBwN262maUa1vuFu3Fq X-Google-Smtp-Source: AGHT+IEyoPj/GMY9Uv2pXheakyegmw+fR6j4iVJ2c4+Mt9PcfBd5RiW/KY86czU6MmLDuAepAM4AIA== X-Received: by 2002:a05:600c:48aa:b0:43c:ec72:3daf with SMTP id 5b1f17b1804b1-4531cfc4b6cmr23314475e9.14.1749566319006; Tue, 10 Jun 2025 07:38:39 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:38 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:26 +0200 Subject: [PATCH RFC/RFT 11/15] gpio: sysfs: rename the data variable in gpiod_(un)export() 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: <20250610-gpio-sysfs-chip-export-v1-11-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5053; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=pyuFXLHeJQgyNgRtVSVy026dbWuIhqUgk4nMl8aRJVE=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENhjVjamXFfTOWvNWhGxnm3SYo1DdXM3SlUO I01zN4+Ej2JAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYQAKCRARpy6gFHHX csJhD/41uNfEdZ3tRMC75zzp4CnhiXrt46FBQT4psqdelXp98bVEkOHXgzmXYZW5Ik0AY7EST3f 0VQ5IW7Dh0cu4/kLyfMNYKDhqj5fKYL8E81zyQXDrfB2WBLx03PlacQELN4/z4jnWEAYbTWRPFN YJlyLUCtjTJx8JsBByzDPc8VyYrtfvUh4Gzk+Mwh5uM1eZPnDln6HUTh2Ag+389nCJk6JyO2bhv z4qSqM72/dZHtlv3txUeEQ6j8HQKYfMi2nF1lvM6nbkJJfQxYsAJYmzRmQwp0ibv/yFbpiu10Wv lYOfsdXddY9ou61+KgWNBIHsgiPG3b3eJHNqsI7XCA2EcAvhvuJ7FlZWEpwIeMFiYOBf2BMOSk8 CTr6o3UmvZm8v5UALKEi3HEcg59EiVMg8AgwbQ9IRSlm6AVtrWx0tpRn4IGXeX2wm5yNGiVY4xN 0tsDvn/9gdADIcIakQkmpnLjA5vpJSI8EnFwz1VXqwEcZ3Zc6bs/8qjPFNPWPOyl1HIUSbJu1H3 HjU7W8fxe26v84T3oQmPCpve6BPPKBZGxbxhQ1M+2gUIXk5HslIXkYgQSPgC6yDvJfuz2STQ7L/ sDX9cxUN+B28QnwN/Tm8uH9gNtQBRFzQnwIvziL/X1QwsB9xYwtHWLNNGscjIlmjGZ+lbOyk/gO yVyxBk5mpjlvrPQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski In preparation for future commits which will make use of descriptor AND GPIO-device data in the same functions rename the former from data to desc_data separately which will make future changes smaller and easier to read. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-sysfs.c | 63 ++++++++++++++++++++++------------------= ---- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 03e97697b7f26a8aa9f527f25f048f25588f3ca2..398cefb4be9e389a820dd53f79c= 82fa70783b5e0 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -686,9 +686,9 @@ static void gpiod_attr_init(struct device_attribute *de= v_attr, const char *name, */ int gpiod_export(struct gpio_desc *desc, bool direction_may_change) { + struct gpiod_data *desc_data; struct gpio_device *gdev; struct attribute **attrs; - struct gpiod_data *data; struct device *dev; int status; =20 @@ -720,47 +720,48 @@ int gpiod_export(struct gpio_desc *desc, bool directi= on_may_change) goto err_clear_bit; } =20 - data =3D kzalloc(sizeof(*data), GFP_KERNEL); - if (!data) { + desc_data =3D kzalloc(sizeof(*desc_data), GFP_KERNEL); + if (!desc_data) { status =3D -ENOMEM; goto err_clear_bit; } =20 - data->desc =3D desc; - mutex_init(&data->mutex); + desc_data->desc =3D desc; + mutex_init(&desc_data->mutex); if (guard.gc->direction_input && guard.gc->direction_output) - data->direction_can_change =3D direction_may_change; + desc_data->direction_can_change =3D direction_may_change; else - data->direction_can_change =3D false; + desc_data->direction_can_change =3D false; =20 - gpiod_attr_init(&data->dir_attr, "direction", + gpiod_attr_init(&desc_data->dir_attr, "direction", direction_show, direction_store); - gpiod_attr_init(&data->val_attr, "value", value_show, value_store); - gpiod_attr_init(&data->edge_attr, "edge", edge_show, edge_store); - gpiod_attr_init(&data->active_low_attr, "active_low", - active_low_show, active_low_store); + gpiod_attr_init(&desc_data->val_attr, "value", value_show, value_store); + gpiod_attr_init(&desc_data->edge_attr, "edge", edge_show, edge_store); + gpiod_attr_init(&desc_data->active_low_attr, "active_low", + active_low_show, active_low_store); =20 - attrs =3D data->attrs; - data->attr_group.is_visible =3D gpio_is_visible; - attrs[GPIO_SYSFS_LINE_ATTR_DIRECTION] =3D &data->dir_attr.attr; - attrs[GPIO_SYSFS_LINE_ATTR_VALUE] =3D &data->val_attr.attr; - attrs[GPIO_SYSFS_LINE_ATTR_EDGE] =3D &data->edge_attr.attr; + attrs =3D desc_data->attrs; + desc_data->attr_group.is_visible =3D gpio_is_visible; + attrs[GPIO_SYSFS_LINE_ATTR_DIRECTION] =3D &desc_data->dir_attr.attr; + attrs[GPIO_SYSFS_LINE_ATTR_VALUE] =3D &desc_data->val_attr.attr; + attrs[GPIO_SYSFS_LINE_ATTR_EDGE] =3D &desc_data->edge_attr.attr; attrs[GPIO_SYSFS_LINE_ATTR_ACTIVE_LOW] =3D - &data->active_low_attr.attr; + &desc_data->active_low_attr.attr; =20 - data->attr_group.attrs =3D data->attrs; - data->attr_groups[0] =3D &data->attr_group; + desc_data->attr_group.attrs =3D desc_data->attrs; + desc_data->attr_groups[0] =3D &desc_data->attr_group; =20 dev =3D device_create_with_groups(&gpio_class, &gdev->dev, - MKDEV(0, 0), data, data->attr_groups, + MKDEV(0, 0), desc_data, + desc_data->attr_groups, "gpio%u", desc_to_gpio(desc)); if (IS_ERR(dev)) { status =3D PTR_ERR(dev); goto err_free_data; } =20 - data->value_class_node =3D sysfs_get_dirent(dev->kobj.sd, "value"); - if (!data->value_class_node) { + desc_data->value_class_node =3D sysfs_get_dirent(dev->kobj.sd, "value"); + if (!desc_data->value_class_node) { status =3D -ENODEV; goto err_unregister_device; } @@ -770,7 +771,7 @@ int gpiod_export(struct gpio_desc *desc, bool direction= _may_change) err_unregister_device: device_unregister(dev); err_free_data: - kfree(data); + kfree(desc_data); err_clear_bit: clear_bit(FLAG_EXPORT, &desc->flags); gpiod_dbg(desc, "%s: status %d\n", __func__, status); @@ -827,7 +828,7 @@ EXPORT_SYMBOL_GPL(gpiod_export_link); */ void gpiod_unexport(struct gpio_desc *desc) { - struct gpiod_data *data; + struct gpiod_data *desc_data; struct device *dev; =20 if (!desc) { @@ -843,22 +844,22 @@ void gpiod_unexport(struct gpio_desc *desc) if (!dev) return; =20 - data =3D dev_get_drvdata(dev); + desc_data =3D dev_get_drvdata(dev); clear_bit(FLAG_EXPORT, &desc->flags); - sysfs_put(data->value_class_node); + sysfs_put(desc_data->value_class_node); device_unregister(dev); =20 /* * Release irq after deregistration to prevent race with * edge_store. */ - if (data->irq_flags) - gpio_sysfs_free_irq(data); + if (desc_data->irq_flags) + gpio_sysfs_free_irq(desc_data); } =20 put_device(dev); - mutex_destroy(&data->mutex); - kfree(data); + mutex_destroy(&desc_data->mutex); + kfree(desc_data); } EXPORT_SYMBOL_GPL(gpiod_unexport); =20 --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9AF31231831 for ; Tue, 10 Jun 2025 14:38:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566323; cv=none; b=RK54ECiLQc0rkwhB0wRvtD1pQlWl7bPH3wIYF38e9wtMizkzc0kuc8p2ej1iKQBfwDb14isgzOnHZROPQ9DpTSxwDR9s+YiA3tcLKXzzHp2iC6kNOrleYMBLaEl/8HFEe6ic944ILtBfxEOTTcjl0UD3nElrrMZQSR3oGtrF9yk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566323; c=relaxed/simple; bh=q0H9vMF6ivh6goehKpENG92UC29koS/f5ZnMtXBTzgA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D3EhNQoE/TorKBcwsiz6z06jOAiiHJlZpjr+JbsJs622bP0rqJsDKEnMFwaag1PVCuVg1kXIh6EwwMO2qW/NfqtrnIDBikk7CNxgvy9R1Y+Cvj0mtq7DkoFE08Imrj9ArlNSrrDQD40F1uFEWd8lDbQrhau1yq38rOkMiAASXGc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=lHI+tYRZ; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="lHI+tYRZ" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-450cfb6a794so36081155e9.1 for ; Tue, 10 Jun 2025 07:38:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566320; x=1750171120; 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=FfIhJyfA3DlBtdknD+rm+05KUKOC0Zc1LOEud9YByS4=; b=lHI+tYRZNlG8cPOP/YGneudD2vI1kDx+I2wDzUGjt0sBx8bpy01xyNZyRdOVcND8QI e1ELXztttT+f99xj/nlGmwWMWI07/GrOPNk+f0+EXvcNVmy0Rylk6naDz/dG7o7AP2kn q277lqbJlixPFLYpn+VZzFa8COrsIRuug7G6rh04NrLbqYwbf3xmJawUjt+GzqWypUcI 95/Bv2HcjK4LpUyrEd9vfwlPHh0vJL82LIaGE6Qt2HXnfmXQq3cWM5pUu965oAv6vZc0 8mmru6f7fOebd1dtnIV/VBJzmicG0SkC6GtcIbN1aFofsDOQEc6PVjUjdJHZwMdPuucs Rv5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566320; x=1750171120; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FfIhJyfA3DlBtdknD+rm+05KUKOC0Zc1LOEud9YByS4=; b=UWKlvUcVu6juUqVKu0IWoOZWuK6WdEYVje40ELYLgcx99EgOZhmy68B7A8bBvBn/Mt //Q78x01/kV1P0yb29YelDxGnxRsej3OCKSqMJqlQ0OVMML80pz1RPqE8gpCeVDeF/34 tPSEq8kFMZ15OE5vqFOeRIuGxwL149ce69HcJB6owr/2IB2QFpkptwv6nGNWj0CnDyWn GCW/VHlNCvqNQTnJwuzr3IvSP4riArG6dvyssdH5is+YQlVBPOO4J6ukJRpJgKIXp2Ng 55vaK6DDADq5jFxfk5KAIM9xD+UZZX3oM9c4hVHSp1pUGGOqZg2/NSzTJjYGYeuR734C 5FEg== X-Forwarded-Encrypted: i=1; AJvYcCUJor2KA6fVSplRgNlc2QJda4fSIaciEbz/JXkLL4SavADxpMu6K7vrU+3rh6CufZo4qtkm1FDwc044Hgg=@vger.kernel.org X-Gm-Message-State: AOJu0Yyhx/TjLmjRBIkZIU3aTmNOb533aPxWS9iGtTCOsIMSlQOEllNy yyhop8Ks7I0qxtFZy7iufItEoDRmYBtNplbQehLou3RxoTwyPNvJ70r7y7LSw6/HQSc= X-Gm-Gg: ASbGnctrblwCcOaD+7cHNMWnu9GCH+sXsqcqhlxz1yTKDzfsIwb5HHl8mymACuyyIll H/OwoaJr2wceKNAHsVV1nY2+MYi7hzNuZICSw5IiOrFKaP57ydC8ukt+N15mLwNfct9rXx128kh BetoTJwdfGtP/BcTp4NYj/DkXFsUwkRpLWhcqA+dzBxhmQrcsMRrHX1WSKyDpRpZuANaIyT+TZP 8XcmDaqAzjN7hITMOFDz3Dzm8oDl6XF99HQEA7DN3NVNUgY5wnVE0AKuCTayRRNDo+isvs1YMDI bi6VKQ7CyQBWzXl3v/p/rB6IqJ4PiRSIS7qHYVJhHpRezrbJFZS4 X-Google-Smtp-Source: AGHT+IFpWLdFggP0LwP2I9yAkdR2cWTkQiNu95oixpk5MrpPkqWu+ChUzJJsd9csLWV8H4Sge9R48A== X-Received: by 2002:a05:600c:a10c:b0:442:c993:6f94 with SMTP id 5b1f17b1804b1-4531de00a37mr24535615e9.12.1749566320009; Tue, 10 Jun 2025 07:38:40 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:39 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:27 +0200 Subject: [PATCH RFC/RFT 12/15] gpio: sysfs: don't look up exported lines as class 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: <20250610-gpio-sysfs-chip-export-v1-12-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4839; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=JJYGTProM8qofp65Sgg2w6wsQTPnuW1fKmETy8uZ+Pc=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENicTYjEct+c5k9wyAo1MIPKXpZGxcw4T9Yx SlW0jCeW4OJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYgAKCRARpy6gFHHX cuzCEADXq5qyQcAhrvMKpu8KmDyg6eeoFI/BReuz0O0PQmzJ2/oDQqXMTfCAALwjf5L86itq2i/ nhOYoiLWRlBuXW3t/a160IjSNdTUlcc22uJZ6oOhk6P6l7G0B7MJ7/NZ2U3ozB7s/+mzfc9I7qk dpLKcnvMy5msuGm6wiNLd3nsTWcMakds2BsBcs+jkNpF+J/SCoptikrD9kavWpjoGG3+EtckkEN wII5upubZymMDFODOk956tmtJAOgcrmb8GN1QX9NkB3iLZwx3v7LjBAahfvRalpxdoyENyESIZK lqKxf9h+4L/Jr0hSD+YtLKasIItTFo+pECzEXQdW0IgYP2S9c8Ovo66v3Xy/xhzJmjrY8N55Kcs HpBLUEsbU1ag8tg4+Yq9pjiBT4M+u2hFyJ01hRGJ9+qzl+OJZXTVxGCTLTOeNDJu62I75Y/PcLB hBYNu0lLCHKTEp/TuLJoXixAqTI16DyWA6W76CJXNjeZ2TNEAWr3RKXJnjyl1F4Srbyg1eNNiOf hshBNnvyHbuPWBd4nKp0jShhtFN4NEu2T/Uto3KLhv62Z/DLOEYmPTqxPz6WNcYJ7aRcfZxZ/bP rMqpG9vnMC4hVLikO4uvZWWElg7RvjOrr2EvS6saBOc6FgnqZ505+4grl38YTM3mBZi5LrtL22w WN1mKtoUuHWqiew== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski In preparation for adding a parallel, per-chip attribute group for exported GPIO lines, stop using class device APIs to refer to it in the code. When unregistering the chip, don't call class_find_device() but instead store exported lines in a linked list inside the GPIO chip data object and look it up there. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib-sysfs.c | 60 ++++++++++++++++++++++++++++++++--------= ---- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index 398cefb4be9e389a820dd53f79c82fa70783b5e0..aa998d9e96cce5d64784645eea7= 3f987471c7285 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -43,6 +43,7 @@ enum { =20 struct gpiod_data { struct gpio_desc *desc; + struct device *dev; =20 struct mutex mutex; struct kernfs_node *value_class_node; @@ -58,12 +59,15 @@ struct gpiod_data { struct attribute *attrs[GPIO_SYSFS_LINE_ATTR_SIZE]; struct attribute_group attr_group; const struct attribute_group *attr_groups[2]; + + struct list_head list; }; =20 struct gpiodev_data { struct gpio_device *gdev; struct device *cdev_base; /* Class device by GPIO base */ struct device *cdev_id; /* Class device by GPIO device ID */ + struct list_head exported_lines; }; =20 /* @@ -686,10 +690,10 @@ static void gpiod_attr_init(struct device_attribute *= dev_attr, const char *name, */ int gpiod_export(struct gpio_desc *desc, bool direction_may_change) { + struct gpiodev_data *gdev_data; struct gpiod_data *desc_data; struct gpio_device *gdev; struct attribute **attrs; - struct device *dev; int status; =20 /* can't export until sysfs is available ... */ @@ -751,25 +755,40 @@ int gpiod_export(struct gpio_desc *desc, bool directi= on_may_change) desc_data->attr_group.attrs =3D desc_data->attrs; desc_data->attr_groups[0] =3D &desc_data->attr_group; =20 - dev =3D device_create_with_groups(&gpio_class, &gdev->dev, - MKDEV(0, 0), desc_data, - desc_data->attr_groups, - "gpio%u", desc_to_gpio(desc)); - if (IS_ERR(dev)) { - status =3D PTR_ERR(dev); + /* + * Note: we need to continue passing desc_data here as there's still + * at least one known user of gpiod_export_link() in the tree. This + * function still uses class_find_device() internally. + */ + desc_data->dev =3D device_create_with_groups(&gpio_class, &gdev->dev, + MKDEV(0, 0), desc_data, + desc_data->attr_groups, + "gpio%u", + desc_to_gpio(desc)); + if (IS_ERR(desc_data->dev)) { + status =3D PTR_ERR(desc_data->dev); goto err_free_data; } =20 - desc_data->value_class_node =3D sysfs_get_dirent(dev->kobj.sd, "value"); + desc_data->value_class_node =3D sysfs_get_dirent(desc_data->dev->kobj.sd, + "value"); if (!desc_data->value_class_node) { status =3D -ENODEV; goto err_unregister_device; } =20 + gdev_data =3D gdev_get_data(gdev); + if (!gdev_data) { + status =3D -ENODEV; + goto err_unregister_device; + } + + list_add(&desc_data->list, &gdev_data->exported_lines); + return 0; =20 err_unregister_device: - device_unregister(dev); + device_unregister(desc_data->dev); err_free_data: kfree(desc_data); err_clear_bit: @@ -828,8 +847,9 @@ EXPORT_SYMBOL_GPL(gpiod_export_link); */ void gpiod_unexport(struct gpio_desc *desc) { - struct gpiod_data *desc_data; - struct device *dev; + struct gpiod_data *desc_data =3D NULL; + struct gpiodev_data *gdev_data; + struct gpio_device *gdev; =20 if (!desc) { pr_warn("%s: invalid GPIO\n", __func__); @@ -840,14 +860,22 @@ void gpiod_unexport(struct gpio_desc *desc) if (!test_bit(FLAG_EXPORT, &desc->flags)) return; =20 - dev =3D class_find_device(&gpio_class, NULL, desc, match_export); - if (!dev) + gdev =3D gpiod_to_gpio_device(desc); + gdev_data =3D gdev_get_data(gdev); + if (!gdev_data) return; =20 - desc_data =3D dev_get_drvdata(dev); + list_for_each_entry(desc_data, &gdev_data->exported_lines, list) + if (desc =3D=3D desc_data->desc) + break; + + if (!desc_data) + return; + + list_del(&desc_data->list); clear_bit(FLAG_EXPORT, &desc->flags); sysfs_put(desc_data->value_class_node); - device_unregister(dev); + device_unregister(desc_data->dev); =20 /* * Release irq after deregistration to prevent race with @@ -857,7 +885,6 @@ void gpiod_unexport(struct gpio_desc *desc) gpio_sysfs_free_irq(desc_data); } =20 - put_device(dev); mutex_destroy(&desc_data->mutex); kfree(desc_data); } @@ -898,6 +925,7 @@ int gpiochip_sysfs_register(struct gpio_device *gdev) return -ENOMEM; =20 data->gdev =3D gdev; + INIT_LIST_HEAD(&data->exported_lines); =20 guard(mutex)(&sysfs_lock); =20 --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3501232365 for ; Tue, 10 Jun 2025 14:38:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566324; cv=none; b=itWLAGcw21fUzAKfI23zhaaU4HLzgPCjdZv3miCDzc0UtC+77Icj9GongMznMe20XhuTLjvc9s6RpBQbtY0XuVD7rNVh46U2YDv5SYiI61hIj2UAlwPW06jZMLimxWb7J5rRWrwUsaB19lMRbtYkjAVUYegbPieN9i+Pna9NYBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566324; c=relaxed/simple; bh=qVnEdb+boNEICwN7/DRVxb/irxrpifQ6wv99efHfC2Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NVDe/OY+TpauTnbud6Yx0ptVNu9jrwivGdqz0Cd+ewdcYUoHlfJ18O26Pip+SOBVtDlrOlaK2oCFGrXN70I+PdCR7NljGCUeAShfQrhQFq17WMapeSEjchf+uuTQSzxomIken+f1/kitIepTOeiv8aun6ZL/3LxFk1CdprBCrPk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=hvqNvHRL; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="hvqNvHRL" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-43edecbfb46so46646925e9.0 for ; Tue, 10 Jun 2025 07:38:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566321; x=1750171121; 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=1Cdlqvlk5WCptlmo2FF6frtmxR+pgET3/5DYOrxB4jk=; b=hvqNvHRLTh2WChBPxkmLLhNDmm5QkyFE7TsSTUTp44JAdR3f//LWil2lOxvqLPI5mF uTxWmQnVEtfo9Os70z6Pwh/Rp81ibn/7hti5PHcpV7mlnF82fMX2j/730iJgy+KS/+P0 vx67z4looaAdcbQKBPjdnfyvpq6553juc3V8e4ved53PvkKFe/BbbbrulVGyNC1YOeSE 8lh7tbkbV0juhuMrE/i6AZjeoSQQeKXxqatHOUKkyVurS1B1pgCgEPPovnISkrpVN96F KnIck5LhBAsP91CfpmzfuEmys4n8YfRP9hNHVcGch/Lv5nCfKQZhlGp4PTivLK5hLlYl 8hkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566321; x=1750171121; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1Cdlqvlk5WCptlmo2FF6frtmxR+pgET3/5DYOrxB4jk=; b=XM+SvdY/Gbb6SxZyB0PM1AlXti1MeT0ymT4uE70U3R72gUdn/PoC9KprEj7A6kVo9S ZT6r+0/HJFjsAGxg4g0m5NdjkKy6fiqnCXcH2IQw3xIscPfnIlk94a4E0flbiZMnXpX2 zI5ZqF8NA2CKhbflGLhWv3uWZvur2qg+9hudwB1UJ5oZpIyN3Klsbi5bgnn7gEjRhxf2 WfquY1lhCj9Q4b13QcU4F6awhBsdRsULxxyZUVWX3mbsddm8Y8rqG6h+gEgQ2SGPkmhn oxfSRPrlRGkjMZEoPlLWiZX3G4dBEuxc6SmAr3Nr1h8nh56GIHznylBINqh2BxJaIxhJ uMtQ== X-Forwarded-Encrypted: i=1; AJvYcCVUfOLdOiNPmovxnWJD/CGnGtN0eSsVKNj+9i/+5MjgLqtgT3IHK1OmaHWCYoOWWQ53SQPYC8Mnw8R7230=@vger.kernel.org X-Gm-Message-State: AOJu0YwmduCNhMNIVlsZw4p18ebbdlRUQBjSdvNSx8U4kfHEtCiQZyt1 y1KJosxVRs9+n84nKS4ZBpo9FRMRbjHR8SFw0EfZ7uQ9bbFY01hWzOOFrbFF40vm9P4= X-Gm-Gg: ASbGncvu2Cks5DmkJ7m1VtIQ5pFPZR/Fmw9dbdfK45F293f/wMomLq/rRx04g8Qv+SW KAzd4X+HNU1/kG+Vs+O4c5O3zgvCuLhKF7ygt1u1G7n/WTiHM/r1NATwyokeqctZjrayPkEOAGN oggwrotl5SMXtXqf0NbncMjOtwUG6qPQiaSxbZ7WfIwXmKl5HZkHUp2njE5Y6wpIx6ziNe8l8SE cys9biXHdi4nR4RO+eh6M6awU2X5AWr5z+iFkEiX58K2C012DoQ50QoTiZnOuIxULD6z2uv4vQ6 tUCoMUCtgnSqEI4iuxod+O0HUuc06X+vQXStdadWWunHiUTdz/fh X-Google-Smtp-Source: AGHT+IFIsq70xx/8olAsnKRsf07I+3a74XBw8PpCIhG3o3iIHJGPEqV9s3fUbSbqiPnsLG7GW1+tsg== X-Received: by 2002:a05:600c:1d8d:b0:442:dc6f:2f11 with SMTP id 5b1f17b1804b1-4520140c5cdmr145370845e9.25.1749566321024; Tue, 10 Jun 2025 07:38:41 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:40 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:28 +0200 Subject: [PATCH RFC/RFT 13/15] gpio: sysfs: export the GPIO directory locally in the gpiochip directory 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: <20250610-gpio-sysfs-chip-export-v1-13-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3803; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=vDsA6l8yJFZon/b6LVAymhVnSm8Df8uSF6oGQiN2TvI=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENiOhOzNKeHb6kIoo8Kkamhflhx2AE4hMYOi 5L9IVwuyj2JAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYgAKCRARpy6gFHHX cvFKD/9xsCMmUpgjRG4IBY5rd2bX7OmzYthb1jg0WOo2Mtwy56PJBdmj+O3m1W9NHZx6XVuZeDK V1IAs6oGCVvAzyiD/PgOysXZz182kdMZ8yFSjtzDO2FMdtIfKXjlPmxbn+2RaokS+9hkTV6stvI M1fI5VxnLcq87VxNCuEW4g40eQUzD1zVPRGsqfYSgIahYFTrCXIP6Hi6BJUdrMY4yCDiBLXSIg1 QgYShoIC0oTPfxGpaAZgEDm/9OFEfIMsjSAejfiw/x3prrmcPdXnMEk7SjcbYAlnlks04/IlDF4 3e/oSbI8xc6+SaKu80yMlX7zS1uG5SIS+kYCd84/jduryliOt8OFtZxzP1JcZ0lLsTLWe4rAthZ cKey3A/rUXpmlhf2w4yHrD4hNQQxpT4Fo/AcQFq/P0+EZAYu1fSGBUJquHzmp3wRVIkk+o29k7b D7i+SflwrNM6zMLDG4XCWSXMY2ulY/VswDHLHoJNcniEGeQsrLF3YC2GlbAXRVr+CewiAM3tape /yELlwWtPv4tu9Wv07pFhw0tqpYi2KNmC75a5uOhQcn5/fNcmiZ8+nromrTswr4bD13c1tZBDkm HPAJXoCxqg46q5ike6tmlWIx2JYVIylBShMYtnLXfunNNbgpAo2XVDNzFl7x4IHsUTerp6CfnZg WboJtWX49JX0GTg== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski As a way to allow the user-space to stop referring to GPIOs by their global numbers, introduce a parallel group of line attributes for exported GPIO that live inside the GPIO chip class device and are referred to by their HW offset within their parent chip. Signed-off-by: Bartosz Golaszewski --- Documentation/ABI/obsolete/sysfs-gpio | 5 +++++ drivers/gpio/gpiolib-sysfs.c | 39 +++++++++++++++++++++++++++++++= +++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/obsolete/sysfs-gpio b/Documentation/ABI/obso= lete/sysfs-gpio index f856e286051d6bfa4990660dcb25b3fdb27cd0f2..3212cf64f43b67b23a1ac17df02= 5638a52a5bb31 100644 --- a/Documentation/ABI/obsolete/sysfs-gpio +++ b/Documentation/ABI/obsolete/sysfs-gpio @@ -27,6 +27,11 @@ Description: /base ... (r/o) same as N /label ... (r/o) descriptive, not necessarily unique /ngpio ... (r/o) number of GPIOs; numbered N to N + (ngpio - 1) + /gpio + /value + /direction + /edge + /active-low /chipX ... for each gpiochip; #X is the gpio device ID /export ... asks the kernel to export a GPIO at HW offset X to usersp= ace /unexport ... to return a GPIO at HW offset X to the kernel diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index aa998d9e96cce5d64784645eea73f987471c7285..d8c17d71d5458011d15bc4239bd= 4c041244da3fd 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -47,11 +47,13 @@ struct gpiod_data { =20 struct mutex mutex; struct kernfs_node *value_class_node; + struct kernfs_node *value_chip_node; int irq; unsigned char irq_flags; =20 bool direction_can_change; =20 + struct kobject *parent; struct device_attribute dir_attr; struct device_attribute val_attr; struct device_attribute edge_attr; @@ -180,6 +182,7 @@ static irqreturn_t gpio_sysfs_irq(int irq, void *priv) struct gpiod_data *data =3D priv; =20 sysfs_notify_dirent(data->value_class_node); + kernfs_notify(data->value_chip_node); =20 return IRQ_HANDLED; } @@ -780,13 +783,46 @@ int gpiod_export(struct gpio_desc *desc, bool directi= on_may_change) gdev_data =3D gdev_get_data(gdev); if (!gdev_data) { status =3D -ENODEV; - goto err_unregister_device; + goto err_put_dirent; } =20 list_add(&desc_data->list, &gdev_data->exported_lines); =20 + desc_data->attr_group.name =3D kasprintf(GFP_KERNEL, "gpio%u", + gpio_chip_hwgpio(desc)); + if (!desc_data->attr_group.name) { + status =3D -ENOMEM; + goto err_put_dirent; + } + + desc_data->parent =3D &gdev_data->cdev_id->kobj; + status =3D sysfs_create_groups(desc_data->parent, + desc_data->attr_groups); + if (status) + goto err_free_name; + + char *path __free(kfree) =3D kasprintf(GFP_KERNEL, "gpio%u/value", + gpio_chip_hwgpio(desc)); + if (!path) { + status =3D -ENOMEM; + goto err_remove_groups; + } + + desc_data->value_chip_node =3D kernfs_walk_and_get(desc_data->parent->sd, + path); + if (!desc_data->value_chip_node) { + status =3D -ENODEV; + goto err_remove_groups; + } + return 0; =20 +err_remove_groups: + sysfs_remove_groups(desc_data->parent, desc_data->attr_groups); +err_free_name: + kfree(desc_data->attr_group.name); +err_put_dirent: + sysfs_put(desc_data->value_class_node); err_unregister_device: device_unregister(desc_data->dev); err_free_data: @@ -876,6 +912,7 @@ void gpiod_unexport(struct gpio_desc *desc) clear_bit(FLAG_EXPORT, &desc->flags); sysfs_put(desc_data->value_class_node); device_unregister(desc_data->dev); + kernfs_put(desc_data->value_chip_node); =20 /* * Release irq after deregistration to prevent race with --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA31B23372E for ; Tue, 10 Jun 2025 14:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566325; cv=none; b=aaJDaEgegkUxoFff25MFCN1N1u0EHhqsguHHGPgx3oSw1c5a8g1T22lDg3ucZKAranQbbw6dALKCJ+XvEmlay6GtsXmSpB/MlwWyIZK75niEMGIqW6ipBRNKgiBnjSpkijWR6FKn84Ep4kd1w/PisXzS8g3sObNNh6bCbUCVPjw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566325; c=relaxed/simple; bh=Watgch6AAnT5evlx1x6CAOk8UpJc8xtNO01XfNMuI2o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hJSSyuAFJoRkQ/bXF1wPLL9EPQGHLQkn+jp8Cy7Qh6tmPzrDGZWfTc/w3VlREqGyGbNk0y3g8Vz7GzAGvIFBfyCDL/qhS4+DJyaSWQqmfLDT9siKzqGYdeFvSSycXXpJ0vZEaeBPKHgzktBejk0l8iXZp6voG4trqqmF/hKZQQI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=VihMOk96; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="VihMOk96" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-450ce3a2dd5so49509365e9.3 for ; Tue, 10 Jun 2025 07:38:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566322; x=1750171122; 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=wsQ5a66nxiBrUyJ22LI2OZPoXALxCX/O1hriuyr43zw=; b=VihMOk96mrjf/RRojZKr6C9raGvv3g9WDoXEAbIaYDp6CxOD8xs3gHnTUCljRC7mdU MPtqmvAv30uq9DrrG79fXVge+wYhu3fqJdT6t1TX/NDlcGvqzFM3oAJwfneluMEVwnrH 0Iw1ZNI9MurqgobOTlzCEqBVfcm9pnu35jvEKjw9VA8O38pVfUsAFcrGr/At0fpiZ0FL YFzckfPsUOuggRLz5OkYa66AkhvWh/M1wqgPD94Rp6Iv76uihaatSUBWWiimQAbRtcBp jFgDb692HuCdOLqikOj0rJxkAq9v/KwRCtLKxE24BbuDkoylXCpUHwaYTptsHKbellZy i4uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566322; x=1750171122; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wsQ5a66nxiBrUyJ22LI2OZPoXALxCX/O1hriuyr43zw=; b=YkkDUDfhS4d8nCo/2h4OiZVBD2Ww+q37fCvGGps9JgIp8TnjsLV4lnz+/bTOD4p9mn KnMGBeHhwRNf9r96Brx4/fSZww8ThYlMr1w5hTF78Fedu5QmGQtz33ls4BNLYKRjQcAZ 3qbxMpS+VYCdJmpiujarVhmgjHbQz1Z+0SlOeUiAwCpFjQr7jMR9k/dL3pjDKlwQHWW0 9NsQhlBfsJraFi3dhdrTMr/qzMNviFV6AQgFnxmIG+I9VVkHm9S9fm1ElNzQ/5uyXIN6 f2GVKURHQE/CfX6jvnoGSG2Yfl1ghPghN8J1uWUEM6C37Dt81jcpyuNEbzGFh/MeJekM LowA== X-Forwarded-Encrypted: i=1; AJvYcCWtFiqdIgmacHki/LunhcJ5Ec56dFNrajAwVum3X8Gp/Net7ZL/NcxHINhvGZ8nZ6dpFwtyAPE7jg35bMY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzwavp4c24fbBhOQ2aLbJj3jikXg9lfJegGLb7weK1NFXO2gbVj eg47CDodKpJJDBX0Ur6Lxi2m2ngnGVbVTMPtaYrk2mqV+w5xmcIxIw+C9+afcakKuyI= X-Gm-Gg: ASbGncvmAWSC9vgCsJE6dHNf0lWVIN78PXXNlqMUHTGapzR6ebOM+RRZIVp3V7+/5PJ 8af2gDyWfhVk/f3rkDxzMUiX2so3IBilq/JXrAFi/lqd2PVAqncv0/CwewFU0QwfDHd1kPXQ+So IUwbzT1d8ZXqvFOPnQQNfBMlEvO9NHiAKctE2B/9l/hl1kEV2IB3UZ+EQbKlwGELaKpzrZ01dIy 0zV1TuW8VpHVo+h9w944/SZtWMkd+wdJSDWW7Ml87N0Lw/SRhrtQK+4QECemrL4wcbpwjCFl9IY fUHS9PbjHS7NslEQSBBZH2zrDL03A3e3Xa3OQaMdWTEVB0D3Ech6 X-Google-Smtp-Source: AGHT+IE8haVUbgBb1o6F7r1dAx2SJi/5/9lwUTGlQZmtpVP6Ody9yjja3A446e36G5k7v/fRBb1Nuw== X-Received: by 2002:a05:600c:6304:b0:43c:fe15:41cb with SMTP id 5b1f17b1804b1-4520137bacdmr169574645e9.15.1749566321996; Tue, 10 Jun 2025 07:38:41 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:41 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:29 +0200 Subject: [PATCH RFC/RFT 14/15] gpio: sysfs: allow disabling the legacy parts of the GPIO sysfs interface 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: <20250610-gpio-sysfs-chip-export-v1-14-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7983; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=SOXWhuriIiQ5+4UQM++qtdPxdjT23ycVoM7KxniJtek=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENi9jG+Vqt3t77PpikSk1CMstUoKh4xaAp5F iZQ7B/cGdyJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYgAKCRARpy6gFHHX cioND/wM+j4euzloEqj7ceozEge48L5oRPc/ziCgn1H90E9ibzSCl6GCHm5k9YcQ1ZR/E8AHsmP rFXjR18XYCbnZiLjcuKDRryo8Jy8xmcy/HZxo054W0YHaAKe8lSyF1xvKYwToKADgBJnSFbhfUV ZC44YZHxGITR2dR9PIZ7LHGSH4QBMddPocgaxv7QwvMMSwU32ZcFr2mc9Pazlz6yJrQ8+aNtAxn 9zalmqVKNbWah33rRJHQ0tGFQyZbgFHQxGTxOEFBa4SgkOCBqb8yVtGoUOqXZIflsh5cOtveys0 M8y6AE1yAYe53inK7CczGBV8t5FIfaB22/DLhGeWlgokCNd7oNA5irid64MMxhznsce7+2MmzBj AXWWR6h6EMj4blmwwtGHSZWyTRadu3+QK+1F60+2oVXItkwuvWn9R0hJEIJhHc2m0faMhTEVhZU ++QeU65ar2Y1dx7AVPg76mr8n4aVnJLzcL3hWbeIR3m9qG6V9by5POMn2Aho90t6xy37v3Sdyt1 4yZDv+03+Eu8zrXAdNnaAA6wVgAfHQIbl6/J1s671aE9/xOuuAJpBJvyrFDI7EjJQl6reShCbpy oPCG99woe3gQYSpOS0typ9HJ0uGVQac2iMrd8LaZ09w8kIJj7oxZu/80IWHrU+N0vcqPAVy+/4+ TGaazalx4vE3k6g== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Add a Kconfig switch allowing to disable the legacy parts of the GPIO sysfs interface. This means that even though we keep the /sys/class/gpio/ directory, it no longer contains the global export/unexport attribute pair (instead, the user should use the per-chip export/unpexport) nor the gpiochip$BASE entries. This option default to y if GPIO sysfs is enabled but we'll default it to n at some point in the future. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/Kconfig | 8 ++++++++ drivers/gpio/gpiolib-sysfs.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 44f922e10db2f8dcbdacf79ccd27b0fd9cd93564..d040fdd95ee4b19851057fbedbb= 023f277149c9c 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -69,6 +69,14 @@ config GPIO_SYSFS use the character device /dev/gpiochipN with the appropriate ioctl() operations instead. =20 +config GPIO_SYSFS_LEGACY + bool "Enable legacy functionalities of the sysfs interface" + depends on GPIO_SYSFS + default y if GPIO_SYSFS + help + Say Y here if you want to enable the legacy, global GPIO + numberspace-based functionalities of the sysfs interface. + config GPIO_CDEV bool "Character device (/dev/gpiochipN) support" if EXPERT default y diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index d8c17d71d5458011d15bc4239bd4c041244da3fd..48e1353f966837d46f00b552f87= 0440097ecfe18 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -46,7 +46,9 @@ struct gpiod_data { struct device *dev; =20 struct mutex mutex; +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) struct kernfs_node *value_class_node; +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ struct kernfs_node *value_chip_node; int irq; unsigned char irq_flags; @@ -67,7 +69,9 @@ struct gpiod_data { =20 struct gpiodev_data { struct gpio_device *gdev; +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) struct device *cdev_base; /* Class device by GPIO base */ +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ struct device *cdev_id; /* Class device by GPIO device ID */ struct list_head exported_lines; }; @@ -181,7 +185,9 @@ static irqreturn_t gpio_sysfs_irq(int irq, void *priv) { struct gpiod_data *data =3D priv; =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) sysfs_notify_dirent(data->value_class_node); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ kernfs_notify(data->value_chip_node); =20 return IRQ_HANDLED; @@ -416,6 +422,7 @@ static umode_t gpio_is_visible(struct kobject *kobj, st= ruct attribute *attr, * /ngpio ... matching gpio_chip.ngpio */ =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) static ssize_t base_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -424,6 +431,7 @@ static ssize_t base_show(struct device *dev, struct dev= ice_attribute *attr, return sysfs_emit(buf, "%u\n", data->gdev->base); } static DEVICE_ATTR_RO(base); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ =20 static ssize_t label_show(struct device *dev, struct device_attribute *att= r, char *buf) @@ -548,6 +556,7 @@ static struct device_attribute dev_attr_unexport =3D __= ATTR(unexport, 0200, NULL, chip_unexport_store); =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) static struct attribute *gpiochip_attrs[] =3D { &dev_attr_base.attr, &dev_attr_label.attr, @@ -555,6 +564,7 @@ static struct attribute *gpiochip_attrs[] =3D { NULL, }; ATTRIBUTE_GROUPS(gpiochip); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ =20 static struct attribute *gpiochip_ext_attrs[] =3D { &dev_attr_label.attr, @@ -565,6 +575,7 @@ static struct attribute *gpiochip_ext_attrs[] =3D { }; ATTRIBUTE_GROUPS(gpiochip_ext); =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) /* * /sys/class/gpio/export ... write-only * integer N ... number of GPIO to export (full access) @@ -629,10 +640,13 @@ static struct attribute *gpio_class_attrs[] =3D { NULL, }; ATTRIBUTE_GROUPS(gpio_class); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ =20 static const struct class gpio_class =3D { .name =3D "gpio", +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) .class_groups =3D gpio_class_groups, +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ }; =20 static int match_gdev(struct device *dev, const void *desc) @@ -763,6 +777,7 @@ int gpiod_export(struct gpio_desc *desc, bool direction= _may_change) * at least one known user of gpiod_export_link() in the tree. This * function still uses class_find_device() internally. */ +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) desc_data->dev =3D device_create_with_groups(&gpio_class, &gdev->dev, MKDEV(0, 0), desc_data, desc_data->attr_groups, @@ -779,6 +794,7 @@ int gpiod_export(struct gpio_desc *desc, bool direction= _may_change) status =3D -ENODEV; goto err_unregister_device; } +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ =20 gdev_data =3D gdev_get_data(gdev); if (!gdev_data) { @@ -822,10 +838,12 @@ int gpiod_export(struct gpio_desc *desc, bool directi= on_may_change) err_free_name: kfree(desc_data->attr_group.name); err_put_dirent: +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) sysfs_put(desc_data->value_class_node); err_unregister_device: device_unregister(desc_data->dev); err_free_data: +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ kfree(desc_data); err_clear_bit: clear_bit(FLAG_EXPORT, &desc->flags); @@ -834,12 +852,14 @@ int gpiod_export(struct gpio_desc *desc, bool directi= on_may_change) } EXPORT_SYMBOL_GPL(gpiod_export); =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) static int match_export(struct device *dev, const void *desc) { struct gpiod_data *data =3D dev_get_drvdata(dev); =20 return data->desc =3D=3D desc; } +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ =20 /** * gpiod_export_link - create a sysfs link to an exported GPIO node @@ -856,6 +876,7 @@ static int match_export(struct device *dev, const void = *desc) int gpiod_export_link(struct device *dev, const char *name, struct gpio_desc *desc) { +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) struct device *cdev; int ret; =20 @@ -872,6 +893,9 @@ int gpiod_export_link(struct device *dev, const char *n= ame, put_device(cdev); =20 return ret; +#else + return -EOPNOTSUPP; +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ } EXPORT_SYMBOL_GPL(gpiod_export_link); =20 @@ -910,8 +934,10 @@ void gpiod_unexport(struct gpio_desc *desc) =20 list_del(&desc_data->list); clear_bit(FLAG_EXPORT, &desc->flags); +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) sysfs_put(desc_data->value_class_node); device_unregister(desc_data->dev); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ kernfs_put(desc_data->value_chip_node); =20 /* @@ -966,6 +992,7 @@ int gpiochip_sysfs_register(struct gpio_device *gdev) =20 guard(mutex)(&sysfs_lock); =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) /* use chip->base for the ID; it's already known to be unique */ data->cdev_base =3D device_create_with_groups(&gpio_class, parent, MKDEV(0, 0), data, @@ -976,13 +1003,16 @@ int gpiochip_sysfs_register(struct gpio_device *gdev) kfree(data); return PTR_ERR(data->cdev_base); } +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ =20 data->cdev_id =3D device_create_with_groups(&gpio_class, parent, MKDEV(0, 0), data, gpiochip_ext_groups, "chip%d", gdev->id); if (IS_ERR(data->cdev_id)) { +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) device_unregister(data->cdev_base); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ kfree(data); return PTR_ERR(data->cdev_id); } @@ -1001,7 +1031,9 @@ void gpiochip_sysfs_unregister(struct gpio_device *gd= ev) if (!data) return; =20 +#if IS_ENABLED(CONFIG_GPIO_SYSFS_LEGACY) device_unregister(data->cdev_base); +#endif /* CONFIG_GPIO_SYSFS_LEGACY */ device_unregister(data->cdev_id); kfree(data); } --=20 2.48.1 From nobody Sat Oct 11 12:07:01 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0F45234987 for ; Tue, 10 Jun 2025 14:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566326; cv=none; b=HXYcMhhuopJ5tHgpbtUdteV+CrJ0v9c2qnFm9IUkqTGScZ5nvmC7rk67xtQBqTeNVyWJqmj8qahXjLYjZUZxo54SlfcObLpRMc05xfdWqr83OLTPBznAx2686A8UnYv1Q3PgAs3/Id0wJAXUysPGYl2vlJrMirVXlb0iBGXqPWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749566326; c=relaxed/simple; bh=n/8Q3QJmovEcO99W9nilHTg0Ks126Kz/UiSEWmyIYZg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZWwmxvzxJ1PQ6mCqNLiNONFZX3olV8gTsiWlINqw4PPdNkIVO7XnNICDq/y/5F+7n9OQTztIFsrvm94x5BDSSRPiOFyvKHI0hxhh6UuW2x9qpCNxV3Adn7uh+32NF03LTneK63n4hfpidnA5kvs3KTU1SctgI7twLk1Wvik5CEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=Ekiq1JCv; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="Ekiq1JCv" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-442f4a3a4d6so30046805e9.0 for ; Tue, 10 Jun 2025 07:38:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1749566323; x=1750171123; 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=cLj7DWR3g91ZC5MBjrvyVrHQMhHkaM2qnHIpKV16L3g=; b=Ekiq1JCvHvswu8hozMOOM//VX0g5EPJfeODi2ICyIXpdkxeyPDphdJAdFSVsfly/Gy KvZSPgSmoPOuYlwRB+8BFcWPkXpAEN+VhRiC+ydU/INWOhMG3OH5sqaBju2EvX3bilnD eFJeQbyd/x5J4eGMaCIH9uzk3PMTPftGDOz6VUCy6vyAUqhxQYIagFWif7Ps2ohh2nDV /hFM11+FocBju2hzPiRIWHazGjh6TYIUSRI13pGQOGvyuzNkN2rH1A+0rEEkUAGXfBYw nox7aSpwF/nRh4uwhgrJi7gntYs3SzIWejeIhJdrLhCt+wC8dfmuvstRXHf8c2QNBVo6 lfMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749566323; x=1750171123; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cLj7DWR3g91ZC5MBjrvyVrHQMhHkaM2qnHIpKV16L3g=; b=OrcUSav+bn8hb2/z326Ll4yjZE2aiKD/8aP5KL2fwq+lthp3kcEPAN/PBMtQCd78Ui vOXdQtT0uC+AKOlqGFy83w+MSiYnrAuRcf6OIRMTojbfwbl/jQd+tIcGPbsLDFdzQo9/ hIySa4spm1eWClDqW/UQ/w2JezXT1UaoDRqHqkLkC16C2/2MOuipqPDtpk8Uvvu1vlWf Y7rr5i045BruNO2FrbCtlgEpu0qv5SyHkd24RDuMf7KWlvtL/Y7t1Km10nFr6I59LUOd eEOABJt8KDPkJxSMOQHSUZruDl2m4JMdhGgKOAtNSZSZbLWf7Vdi4hwehcGBvrSBaFix poZg== X-Forwarded-Encrypted: i=1; AJvYcCVR7llQzNBBTGAIwt1kJi5XoPPjQ2cickbtWGrGHxGcWHIuYb0odCLywdSbmqk87kDQIw0u1z6viOPTzE4=@vger.kernel.org X-Gm-Message-State: AOJu0YyPC8s1gL+ShizXA0cTuDKJ0oISvCBsM8oyU5l2wLN7hcvuOslp yL9B44Cwf8UFe974Y4U8ClOax63oWJ1CG2QqYkg13A6mBLuwpaQ0DmvGdXEl7uP4wt8= X-Gm-Gg: ASbGncv7jakbUQ/eifss5no3zStNUhE8XpA0qNjU8gzbTbGzj2PjYOpbZjNCjSfrYfF O4mssE2BLb3UM8JeZ0+tidI20z8xJsW4b9sE8h8OM2mopj1xv5oAkh4flzlwSPSKVFdssfK2QLm RcD8euNcrOW5+H1552ve36nMnoVRjMRmYg3cHK8vofIbyXmq8ev9uBTH5WaYHlFslTs930vl8Bp NvkBi82RMJCn8eg7J9Z6X4ouFyG1W5QfK5BC+GKF/W05NAtyF0LzFIiR36wRXQ+z5gZ8dM0fV7o 8JQWtqZYaPciKBcPp0OjZCdonglDlkMYLR6h3kCuDa4l8nonYm1m X-Google-Smtp-Source: AGHT+IEywg6w59g2mx8KQEA5DxZqFCbrLHoGShus610IZqWOu2oBuwgUJ83xT3nNW0Y+lQlOhQKrdQ== X-Received: by 2002:a05:600c:6388:b0:43b:c857:e9d7 with SMTP id 5b1f17b1804b1-4531d6fdab8mr32062795e9.5.1749566323035; Tue, 10 Jun 2025 07:38:43 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:4d:e52b:812d:eb7c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4526e056138sm146001345e9.5.2025.06.10.07.38.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jun 2025 07:38:42 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 10 Jun 2025 16:38:30 +0200 Subject: [PATCH RFC/RFT 15/15] gpio: TODO: remove the task for the sysfs rework 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: <20250610-gpio-sysfs-chip-export-v1-15-a8c7aa4478b1@linaro.org> References: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> In-Reply-To: <20250610-gpio-sysfs-chip-export-v1-0-a8c7aa4478b1@linaro.org> To: Ahmad Fatoum , Kent Gibson , =?utf-8?q?Jan_L=C3=BCbbe?= , Marek Vasut , Geert Uytterhoeven , Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1371; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=FrDvVu23TJm5ghXSfiA8hCOI1OUNHhCK1w5KAsAVwJY=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoSENi73tPISvj0xD+HMTPCvZKJvIUOegaNu5uO y3wtnEYSI+JAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaEhDYgAKCRARpy6gFHHX cvdTD/41qLITo5HP3W1/ezMXOITtIMegRdx3dV4RXRA0XYNgVnGdtIv+GtlOwW8GgkylTyZnOP5 Wfsrj/Up9MFtr7QGsC5a27m0Htw7fkUn/UVqRr7MeoQ8DvvfAk32r76O8EK8mjvPRTTUFVReoi3 uAf60JE6IClr1FoTU36dCKeB5xl49K1D0D+HsMd9uIrrqxlgSC15xIp0y56R8f4l1AnTR3WIedz YZL+mTTw2XSxnoUjO6wb2cwYRMKWurtH8qp3lS0fQEPKw3xT6OsfqfzOQLuDrvXX8LnJhQU4VT7 PIS05fVZHGPBQVv5wug/7MbgFAm58VZv6uYBK37niJVecMiKPda75xXiASpcQuxvhgB+QoqKUKz A7W3Lp0hqOJduExEimuvWx5A8A5DdhJXo5DrzKwUl1yCxYno1XOGe5G1VCoz4tl/85yUznOngXV A0dMBBp4KKarcZvL79wRTHRPYHEBnZOXmJ43W8+qdDT7mPPVDyDz3DQu3Nl36JXSyT7W7qoP1XI 4oWV9IpKkGBDrM3kDz4wIuTQ3pnN6NCOSAsTR+lY2bFJJYGMXwtTwBxODx4AEpGx160o1Tvb35O QrbS9vKZg9HXhdd8zpigNSaxAfBJWw53Koph20N01/y857F1eQEnkFPHXR8ife46VIAfPyoQAzI k+HcSd9LFpI0Whw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Remove the completed task tracking the rework of the sysfs interface. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/TODO | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/drivers/gpio/TODO b/drivers/gpio/TODO index 4a8b349f2483a91883c74b07a43efb1462dbd377..97024925f14ab92b311741b0b79= 44acbddcf5c4b 100644 --- a/drivers/gpio/TODO +++ b/drivers/gpio/TODO @@ -183,19 +183,6 @@ remove the old ones and finally rename the new ones ba= ck to the old names. =20 --------------------------------------------------------------------------= ----- =20 -Extend the sysfs ABI to allow exporting lines by their HW offsets - -The need to support the sysfs GPIO class is one of the main obstacles to -removing the global GPIO numberspace from the kernel. In order to wean use= rs -off using global numbers from user-space, extend the existing interface wi= th -new per-gpiochip export/unexport attributes that allow to refer to GPIOs u= sing -their hardware offsets within the chip. - -Encourage users to switch to using them and eventually remove the existing -global export/unexport attribues. - ---------------------------------------------------------------------------= ----- - Remove GPIOD_FLAGS_BIT_NONEXCLUSIVE =20 GPIOs in the linux kernel are meant to be an exclusive resource. This means --=20 2.48.1