From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 AEA0F2D6410 for ; Tue, 9 Sep 2025 09:15:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409347; cv=none; b=F6yT/Yf3wipCzdB3xOr6GtQziBFNmxF8UHoYrg7qNTJGWDNZ5yZ0+8xWdMH4Wx2IoKGCyM63gD3nw/nc6Nhogov2uIRBuNF45mX7ASJrBgyGNryMpRd136bT7H5vuIAJ3ulXWtgr70CFMw8XWqLJBro8cYitCIbIqySe+9W1xa8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409347; c=relaxed/simple; bh=d9yyY3lRi0oWGFXJAFBO1adyvJFMOKukPKPljQ/13DM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iMCjw9ogxGD7vjYwUXbITGJdgOmvLAkifjSxfLtLabR+L4yBmncczGFqPMf9nznvg3EL5Pg8P/E2NZoKBE6uxwnuIZH6UMM0Z2OLjRzdqWw2HCz23DupKhEMeVHp0547N1z5dCRVX7v/ZY854PejtGIy7E8hO1rtpMTOVq8L6vY= 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=lqlBWBv1; arc=none smtp.client-ip=209.85.128.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="lqlBWBv1" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-45dec601cd3so8412715e9.2 for ; Tue, 09 Sep 2025 02:15:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409344; x=1758014144; 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=a7pQfDGCPblKxfSBCBsu+k2H7lASoalxBm+PQPOef3U=; b=lqlBWBv1L7N0PHQCf1i/IPLVse4cDhFh7VXSiJBIviUyhtgS89LzQ+ntNWlsdNTD1s rYEHeZtOrlNvCDHDmJhi9aP8r99QLtm5RJ/kTwDC+EadpOTupXCwr5ExdilTNS/yKDvq MRcOgdRgwKlmokO72DH5VES5SkIATkfmFAOH64Hmjed14i7GoT6AA6jPN2sZ/VFkNVw/ 9j40PaMhG+iXrLgQ1W8WFput7uFH3q7ZKALXhSf/IDobiMNSVWP/CVrwMWyT5zlESE50 zOv9Yt81ZuL/xN4rvrnnRp/X4bz4+8241+M+IqklEDOAZZjBPBLGNryWxIzb/iXWO8ks jAIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409344; x=1758014144; 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=a7pQfDGCPblKxfSBCBsu+k2H7lASoalxBm+PQPOef3U=; b=stL0klE6250oewuWrR86Rkl5J8xsXZjQ4T+tVtonKNDH9m5P/PABSc4sjLpg5RMXB8 XCdlTcRLJh4ChNbyIsJqkCPwG4KwdSvjLaxJwAtmj1qdVU02Oh5XP39gd/tzIduXY8Yr GPsjEIeoWIgN2/znh3eY0oUHeNIdKErJAxa4Et43TFoEvm3YZepKCKfJK0JivaF1iZCj 27F5EY5q4/lL7Wn0BFv+5Qgm57XBfQbXIWhKHZNQ1vBgNt+NItAZrUml4fXhwCQXYbm/ WLHFAdt2nQGT0tOKQ1TCaRznU9H/KB4mhMkoQYcZ86LkjSiYwhXF8RcS55UgppoBDpm2 y+Sw== X-Forwarded-Encrypted: i=1; AJvYcCXO7t8+5sPsUm9IVSfd8Ix6gdPY1+qJgjOn1MU5xbHGllHYgfcVqnzNaVnMvXXIpDxIO28ni4t5Z/0gTtM=@vger.kernel.org X-Gm-Message-State: AOJu0YzbmTZdSFwzR9PpTEOQhAcoaZOfSkXOYekl40Qbj4ev7+hGZxQy U5/Eoeze+VLS4xf72oK9igYGwaH1YZkwImRqa6vSU5ZBN0pKwFaJmphzzuR0qNvYsNs= X-Gm-Gg: ASbGnctN7yLLe83BiEsnlc+NyKXVp9q5vRm4NjyiU/Es1xkQ76/shwSHV3acR9YVtkB pE34RVTDQP84K7RGqSI2G7omfusL5wFvwI0y0unkO0n+X7mzEYx1XvKqpBaIjHHV6AAqES7Z8Ax yiBMs4ut4WW4gAwwiSeQB3hiuVKNVaIgO338p9WXF1S6IG1ihSA8FRSkMRMkodB/018EtZ4k4lg CrtObOTfD/9fF9T1+Sfg1JM1ZszXaYe//2M92ogpU5Wb7EWG3JWlOXk5UbvQOF8l65umgPV981Y UztyVDqy7MFoc2dbKmUtFOrBLuqzSHjs/3uLDT1dWdh98d1lro+EQLd9LEHLnytI8DrElKTOKHg yYjbyFrXFWHyOakfGoA== X-Google-Smtp-Source: AGHT+IECDvyJ3MhP86HfNBVWgMSE9naIJTJZ0ycY5JDb9n5YXZLF4Z2JGvdK2tqbA8o20swd57M3IQ== X-Received: by 2002:a05:6000:40c9:b0:3e4:bec8:dcd3 with SMTP id ffacd0b85a97d-3e64c1c2d59mr10736450f8f.42.1757409343760; Tue, 09 Sep 2025 02:15:43 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:42 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:28 +0200 Subject: [PATCH 01/15] gpio: loongson1: allow building the module with COMPILE_TEST enabled 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: <20250909-gpio-mmio-gpio-conv-part4-v1-1-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=739; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=iZ4PlFFkHvr3VSD1LivXtszs5JdORDU8d2OKjqzKoYc=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A2X122vy1cTHyhSgsG7MkIlsciNRM8ZFaAn T0KGuq7L2KJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wNgAKCRARpy6gFHHX coJPD/sF2yokXt5SbcL4IYbnNJAAMtC0yciCVu9NMg4HOIEJbnJLMgoDU6f/Lye1GJHoJd/r8bg psxEzWVypKMAKXC2sb+CSVVktqi2LrWPd8WvjbD1w2ncKGKzuoVyrAB92tWBa1NfLh3OHEC0/ku wXBtt25qo0HmUF1tPPNUvjxgq2bP9TIbQyvUarSxnG1iQ43oZqiFep6k+G/aSkGV/eXl9TU97AV RiQxqO1JzL7fY/XVn+T589yE1pLjj+axt8MR7YyrZIyTlTCZzpRhxzrT5TOcFcBXyrdQuaK4G8S JvZcqp69ousBbMjF2RCkf6zj9stt/FPHhc+NIVzaO/+3Sa8+ozpD12cukCkwRGN1QLu8gIdG3B+ 7GobaI7NpSdG8YFEC2lE+CIWQTVJpeopaa/MVfsBLom8dXS1rNZSHXTXXExOTkQne5Y8oRI54bO dSblAGdXRavGi6h4oh3itiTfoSZ4M2+tv/WBS0fg0FbvwFAs4Zzw6lqS5iigmBx328VHt10DT4d p3OpeS4s1QtcpZmXPa9n3iQz4eK+u7bsgZALZlItLZr+caxJ/Q5lFLxgMJeqxzV4cHRROk2u17y qsz/m/yy5OZlZLgQ7uwBNunQYNBtvrqCQsCUhjR2JYSvEf0IrCHidjQP2VNeU9r0zEuIV4zBpsJ WMI3XWLHsq/gdow== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Increase build coverage by allowing the module to be built with COMPILE_TEST=3Dy. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 31f8bab4b09df1640c892f4d839860edaa2ad6a3..09cb144f076661e0a2069016175= d0692257fb156 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -885,7 +885,7 @@ config GPIO_ZYNQMP_MODEPIN =20 config GPIO_LOONGSON1 tristate "Loongson1 GPIO support" - depends on MACH_LOONGSON32 + depends on MACH_LOONGSON32 || COMPILE_TEST select GPIO_GENERIC help Say Y or M here to support GPIO on Loongson1 SoCs. --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 8F5D72D7384 for ; Tue, 9 Sep 2025 09:15:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409349; cv=none; b=cgx3TiW8ZI0mOjDKQD8J5RpvQ8Qo8DiBSw8P/cVqm9aYyxDJtOTrg1mQCQihGhy1jB8mJEHTVnD70yvwAOLHb1MNGjG2QcbaxYjuejsUpRXH/MwJ8Rb/S6VU/ifnA7AnzFfBdHImHZx0KzxKM0vNMh+MEuVKpxRGDHEGpEGvOs8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409349; c=relaxed/simple; bh=bx8vBpkb7lvohRakQejGfDmPX7Fn9KBNVicitmUoTmE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IKh1sMjwVr3oWXgN705nVTKae0V89W0t+7fO8VgzGAv1JnjOtbv/rESsTJlxNKBPEXMpDKUVW5x0z8N/jTNSn6EtjbvDS4LPx5zD34ERstmzr4CWtkG3GbvjhqXixB/DJORxG0D/3EcgfbJ1nnTrjbOoe9Ye+77PaCTKRp4cTK4= 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=BBcuVf72; arc=none smtp.client-ip=209.85.221.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="BBcuVf72" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3da9ad0c1f4so3738742f8f.3 for ; Tue, 09 Sep 2025 02:15:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409346; x=1758014146; 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=EIr9hr0mwMBxzADyBcOnBwlkdexYzwvomksGIS6w6RM=; b=BBcuVf7228sXKPDaRkc04Ieu/Q62CJABSC5ZHncJTfWOI2/rxP9AdXQTgxl5AejVLO uVaWwLCbX5mBPiI8RbleUMhzyAdgeIXXblHzLnElc5vTxufFlqmJq1I1DyYsK80Dw7SJ BMFmPefxWN8yZtTsS9F9hIrlYefBSHuDl+lkFr+kbxUWpARTkruOnEhTEp7JDtENn2LK rVd9cRUl4g8XZBvom7/IIgTwtI70q/u41xPdxCaBEl/ILsnYzjlCh8W1N5uKkJdiHvn1 R01Im1CYzTriL3+Z6+0n07RAkW8e+lxrwbMkKvKkLA4eMS5A4x/IoKSo+v3AyX9aB6WU 2U3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409346; x=1758014146; 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=EIr9hr0mwMBxzADyBcOnBwlkdexYzwvomksGIS6w6RM=; b=WSOpuFfskgceWWrLMPfJIMwApmgZpVPK+mLdzFMGvDk1Kk/LtLae5bPg68NuF/HXXm zwZp2Gou5qOKvzqKYctScJp1CPuPkvTLlU3PVZ0abj4zK3EZDV06Ue5TjxmdLzzckJ3u R3TRFc2c9mPuVfcsngOfm80S36AVig08M2xg8pXoWIz+uFoCOKXfT4K4PtNiopujLseM 484km+bWG/uXjLpMCO0cu46lSw8KzMeApGCDhQconYImMCpkGC4TM/hu7jZypJ1LJ0mY JHQtE0ETR2Y+w9DjYN//9MULNX0DdyMjdQrQ+K8XKOiXeWm5bi+g4ZI7q68d9pvS+SvY 4Ojw== X-Forwarded-Encrypted: i=1; AJvYcCXSvoACfOaYTTZlFXuCBMVSBG9MpZ8xxMkEjbLvNBfj1+LcXWY2XdtgQS+IvcHSPbgkoaPxpIads3LE4ZE=@vger.kernel.org X-Gm-Message-State: AOJu0YwjItqzDU4RQFX14HQ8l/ay52vj3AcyRXHexUz34EnsljoAfWa6 IXEgwYdCgBFcsJS+QENni0JoctifRkaI+zbS9moFVXVR8m8KgTzEGloCIuqwFpgRGB0= X-Gm-Gg: ASbGncurEXJBCUPnN+SG0V9Ec9mhtyx5ZSGO/Hj5uj7adAqkRApg2kMevUA4I0O5Xyu p6qPjus9BDBbzdLIFBFFAEuAhOKTxqAyCjf4Ttgyl5bBHYUdhPWiZwk9hUCNovo9gTRsUZ+iyIx di22CXVF7eql6vDdH8MWomLRVZORprjMCOmpfS+JZf7i5JFMLsGFOTpuhTet7MnBC10ZNAQVGQ7 nKTxmKh0LklDCPta+PkxIZSM7iHw02ZofZX7Nd0alnlumGzo2QpkqIyqpxL4XlAfbUTcCPWpjCJ XpjyX8aspyceH2tQbABdVu5HQFpW7wNHlZ+74INkjzy2V9JW7lUFe7xFBw8VJD42XeigAPnhDB1 LMY5XfSXNKt5Qd6OYGHgyfRC0NHV1 X-Google-Smtp-Source: AGHT+IGd8DWD9arGkUNKw4zJ2AP1gSmpXBaa6sBHZKQ/RTRSGAXz+ZKk9uFvPaqtbHsYLxTfFq0lRA== X-Received: by 2002:a05:6000:178e:b0:3ce:a06e:f24e with SMTP id ffacd0b85a97d-3e64c87e0a1mr7050570f8f.52.1757409345752; Tue, 09 Sep 2025 02:15:45 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:44 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:29 +0200 Subject: [PATCH 02/15] gpio: loongson1: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-2-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3630; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=Wea5gLwd4IgFMNwzQvk4gQjcgC/QooQl4cu1eZu3y4s=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A2FKDJ33HmmJ4TKcUEs6Wb765qwJ9kORopw zGH1aPIi9SJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wNgAKCRARpy6gFHHX cotBEACZHjEmFye/YUWwEG1t9JNn7F/QEqvztKESvvpKpdb/j36lRUnsQOK4I6o/CYNKwADuv7s lJtwq4Aq3yb08HIvTrVcbalTGGCc8sVoeuhwj45v3RDkH4kzFvlk7x11cEf8jfdhgAc/4L51iqL I870Hq3jyRB1Hcx6bStvRB6GpYEwP6haihYpjfK1LAeW5/TG2WggxKlRRQIKNu76uQ3AH8imb/y KoMf6QAY+kOGIgAR/0H7X+IUYMNkNbgaTmFWqs1oIIRnoJ8UyCy9CvbgcGqiljfaUozPOa0oSsB fAFQyT83ymZOswP7v7fi7xnuPRMyXOYliGC7ezpF1jVIBqS0FNjienW1XJA4U2l/o3BhnWDS0vF cvIdcKk19kIZ4S/3gtalBPcjMImvQ+7p+L/JZo7tsnnQrQE5kQKRbXCysmcy/M702tnvS3Wh7QF opbm3qz+aJf8Hutpc/M0iDUsSrHBjc/sO9R7FDQOT1qRL7yX5NHIS5HpWEHxHfOTN+48ZReWpBq m2X9CLyXoO6+KEdbs/VrnoTNxsz4JBY6hdbCb8BwS2GPyDX92FyQOiOAK5Ab4JweDvoBsuCqUmK 5mlxO3bM4EweAjJXKZyOhyPpbA5GqJudG82pFFHg5ZJVPRhrpAESFdJ8zebzlGQERDhxTwQiqm4 pS73JMaWn3/C1Ng== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-loongson1.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/drivers/gpio/gpio-loongson1.c b/drivers/gpio/gpio-loongson1.c index 6ca3b969db4df231517d021a7b4b5e3ddcf626f7..bb0e101e920889522aa4bbc69e5= d6d2c49586cee 100644 --- a/drivers/gpio/gpio-loongson1.c +++ b/drivers/gpio/gpio-loongson1.c @@ -5,10 +5,11 @@ * Copyright (C) 2015-2023 Keguang Zhang */ =20 +#include #include #include +#include #include -#include =20 /* Loongson 1 GPIO Register Definitions */ #define GPIO_CFG 0x0 @@ -17,19 +18,18 @@ #define GPIO_OUTPUT 0x30 =20 struct ls1x_gpio_chip { - struct gpio_chip gc; + struct gpio_generic_chip chip; void __iomem *reg_base; }; =20 static int ls1x_gpio_request(struct gpio_chip *gc, unsigned int offset) { struct ls1x_gpio_chip *ls1x_gc =3D gpiochip_get_data(gc); - unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + guard(gpio_generic_lock_irqsave)(&ls1x_gc->chip); + __raw_writel(__raw_readl(ls1x_gc->reg_base + GPIO_CFG) | BIT(offset), ls1x_gc->reg_base + GPIO_CFG); - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); =20 return 0; } @@ -37,16 +37,16 @@ static int ls1x_gpio_request(struct gpio_chip *gc, unsi= gned int offset) static void ls1x_gpio_free(struct gpio_chip *gc, unsigned int offset) { struct ls1x_gpio_chip *ls1x_gc =3D gpiochip_get_data(gc); - unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + guard(gpio_generic_lock_irqsave)(&ls1x_gc->chip); + __raw_writel(__raw_readl(ls1x_gc->reg_base + GPIO_CFG) & ~BIT(offset), ls1x_gc->reg_base + GPIO_CFG); - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); } =20 static int ls1x_gpio_probe(struct platform_device *pdev) { + struct gpio_generic_chip_config config; struct device *dev =3D &pdev->dev; struct ls1x_gpio_chip *ls1x_gc; int ret; @@ -59,29 +59,35 @@ static int ls1x_gpio_probe(struct platform_device *pdev) if (IS_ERR(ls1x_gc->reg_base)) return PTR_ERR(ls1x_gc->reg_base); =20 - ret =3D bgpio_init(&ls1x_gc->gc, dev, 4, ls1x_gc->reg_base + GPIO_DATA, - ls1x_gc->reg_base + GPIO_OUTPUT, NULL, - NULL, ls1x_gc->reg_base + GPIO_DIR, 0); + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D 4, + .dat =3D ls1x_gc->reg_base + GPIO_DATA, + .set =3D ls1x_gc->reg_base + GPIO_OUTPUT, + .dirin =3D ls1x_gc->reg_base + GPIO_DIR, + }; + + ret =3D gpio_generic_chip_init(&ls1x_gc->chip, &config); if (ret) goto err; =20 - ls1x_gc->gc.owner =3D THIS_MODULE; - ls1x_gc->gc.request =3D ls1x_gpio_request; - ls1x_gc->gc.free =3D ls1x_gpio_free; + ls1x_gc->chip.gc.owner =3D THIS_MODULE; + ls1x_gc->chip.gc.request =3D ls1x_gpio_request; + ls1x_gc->chip.gc.free =3D ls1x_gpio_free; /* * Clear ngpio to let gpiolib get the correct number * by reading ngpios property */ - ls1x_gc->gc.ngpio =3D 0; + ls1x_gc->chip.gc.ngpio =3D 0; =20 - ret =3D devm_gpiochip_add_data(dev, &ls1x_gc->gc, ls1x_gc); + ret =3D devm_gpiochip_add_data(dev, &ls1x_gc->chip.gc, ls1x_gc); if (ret) goto err; =20 platform_set_drvdata(pdev, ls1x_gc); =20 dev_info(dev, "GPIO controller registered with %d pins\n", - ls1x_gc->gc.ngpio); + ls1x_gc->chip.gc.ngpio); =20 return 0; err: --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.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 6E9EC2D876C for ; Tue, 9 Sep 2025 09:15:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409352; cv=none; b=kw85WMYmtGYec3PMbrVHekqQau1M8g2JhZ9q8J3sPLYIPnqHOhKugvG8TB23D45DZpNjwqQjx/iqwE9dxH92maMdGeQVLxVZEL90wPKDqPYA5fsj34lJkV7QcRYJrF81l+2wS7qz4kZYbVMXFTNk0JY5VOzYzHfP8IBOkaQsKdA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409352; c=relaxed/simple; bh=STVkcjbGQD0bnhkXi0awJ4N/O75AAoIkAEKNoy3xklM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aljxfXzx3SqRthrFKY7sEEqrMpC+lu4gSRwaBsEu829APAdbmUi/MtzjPjICrOiUVmJiks8DD6JE7wubt5GppBVIUBTOsl++ekdemhOKvmRVY2SYoHqgdVNKQqEsM302LEL2/wAYZxibIIrMqILtsTt7PjBHeXBusbdsyzCq33U= 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=G6aAFNBh; arc=none smtp.client-ip=209.85.221.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="G6aAFNBh" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3df2f4aedc7so3053378f8f.2 for ; Tue, 09 Sep 2025 02:15:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409348; x=1758014148; 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=MIZTqFFdI7c5GSdgApLwsnSgJwJyJjuHVWKySxCM3/s=; b=G6aAFNBhBZ/5OnaxmMXKOThXOuj3RmcdhVd3W8WPQROB7FZxd1Jdkf6nNA0SjJekfX tbgdp8W/wjlNAMMSDQGa2YCObRGezU5oxX5PuivtYLH5NUHyhhLFZ1oxVemSQQC/9APG Bqe/aBLGZW839+/bkmYjculhDrPJEkQC1mwxHMCuERdzncR4puVT5k/hZon4My+sIerR 9vf/UhtG4gdsIgkM3AJOmR8n5++4xFIviEy5eQPtAiC2+bTJLPOL1OGcGxWVlGeymOdK iC5sZDJddFtcbL1hNJIs7SsEurzCrCetMo09oGyrmaFot8vJ5WZ/+bHsdgjnnrRWuHgP qRZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409348; x=1758014148; 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=MIZTqFFdI7c5GSdgApLwsnSgJwJyJjuHVWKySxCM3/s=; b=GcvcXOjMTDMYU0DAHzu4/DflMYIArL7CO5eCWh8saK820SH2FACH5a/NjtP7abXhWo xWE7p+oBnhF0Kd/sWDqbvG6toHCVf0+pfMhCsFWLJtt5WQUOw2joR7oWVsYxiVrLKWSC 6+MCLnsVlLYzX8j/j/jgjTKREvfWarPDitMqMv23u7pfn4ei91GwXmEYBrE+GPRuf/M/ VB274W4v36pi/nDhtpw0CHoYA6d3QbJ4JMPUOr8aRnTNWrNStOFEH8gDsb+paIXiMhOJ QvVVcCMRC1Q1DnZKt9DP1tlfElC1epETx2YYo/r8fwxVOV9wedhBJqtLz7gzeEzqeNVb Puiw== X-Forwarded-Encrypted: i=1; AJvYcCXQI+5KLwz6wmmGLxPpCirZtft/dBKUrSCjUHZwWcGrTkQxK0KD7vc7nd+w8v8EfoW8dbODhP5+1/Wt0sI=@vger.kernel.org X-Gm-Message-State: AOJu0YzfodxAVwclk+Cw8wp84t0lM85KajR2hKXdv8havr+R0Qn0Lx6L zBF1CEVMtYpWxVAMZrZild9YceIs+iNlHgJmzhlj8z11ld6MN8clRkKAwRgbdQOJET0= X-Gm-Gg: ASbGncvS4OJiFfu25FtzjtmxtAfVnsEU6WiSrXsPzk3PP1yWKcIJMZckV+ArBle8RNz ojOsgE9xl3Obz+BBTTgliu3OWelBI6FaRZ5Rn1WzPzBMHgTA3GVnLHfcFl5NKxZnDonc4fn7bPz zbXDzd2/bfHh/LP/bTbTGXl60MLhqHaEamdR9g9gWp793rqYDl563WTjM9dpobM/yRxhz3KLQ24 EmUbnOQ231u0EgJF/7IIF+PFQYN0UGzTKccD0ZpaZfX1+b3oVwK4Dr9fmt6XCq7IpMCwe+Ofbiw aiEUbla9LFIuihuOeilg8Ut+yb35PWSXb/nPencuSFj12opjUthetou1UmaV7SIZDLWwmlLdckS 4vwfhPZsEmKqvNNBnHg== X-Google-Smtp-Source: AGHT+IEebt0pWOlSircy048VueTsw1+cXr5WEVoP9l1+AiT3ryRkfTg5u9QKZqm+iQAcvnX+nKkItg== X-Received: by 2002:a05:6000:22c2:b0:3c7:308e:4dff with SMTP id ffacd0b85a97d-3e643c1b67emr7845415f8f.57.1757409347611; Tue, 09 Sep 2025 02:15:47 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:46 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:30 +0200 Subject: [PATCH 03/15] gpio: hlwd: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-3-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8081; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=iTmYTpIN0EhHVtpfw10p3x+EmvoqbGnXwIDBsyAwgI8=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A2XiwccfT2vsbmpFgNl+2ytz7arhOWgEJQo yZ2y+hedzaJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wNgAKCRARpy6gFHHX ctMBEADWw+EV0P2U4YY57HCZxBhGQI8Jymslio2V/cvuO7G36gSw4j9IooHJ1Lc/vZ66kpeHZq+ pv2Ei149dPUSiYnWM6RIDDlaQJfih8gGzscjFniHf9M71UP/5vESKeRd+JhBlB3Jc8uyHlbvFQl IsmTm5rbCEaBM5linFdBWjOsG+hyCRyP/iuwVSY1VBqLKGzFoWMgp770F9spm54j2mO+zZe/1yG hcitMkrtFA7XeupJ/p596xXbKa/hJHNebFnEEjnlTVc2MbDpvVVahnX8u7LSjkrEQU36bpgUSCX njBVdcuJuy0rCoyqo80IIwDG86/Gt6JgoCf+qQaVrlXGfYFIznFPxU+9+1RYZSJ+zmaGaWaht1L SbTDoRM2tGNx+6rBPsoP2YVQYE6R8yoFg9uwit4N6/KvVqlb/9Acz7jvKAJKtZ/mNVogv3ShZO9 zOwWuxR4zqF/2XzqTITWS1a1dwsO492OSJGaClj5MdNoSXRWXwQoIhVdMv9wbwxFTOaM7gSad0o H4kV94dTKnLPgRv2ClfdScpzlc6NEy6GOsfbDN8queDSIIr7zE02+z30G7CAGRcO9gqEu935HlC htTpMhq504bjQ/p/Di904UnZkQO0Fb4V4FaSN65J5EvaXIa0w3rYMlcImbKbK3DnwyXM2KkUnGY TH/8sEVjgkhInSA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-hlwd.c | 105 ++++++++++++++++++++++++-------------------= ---- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/drivers/gpio/gpio-hlwd.c b/drivers/gpio/gpio-hlwd.c index 0580f6712bea9a4d510bd332645982adbc5c6a32..137f17c9ff221d524a4281fdbf9= 1d8f27ee24182 100644 --- a/drivers/gpio/gpio-hlwd.c +++ b/drivers/gpio/gpio-hlwd.c @@ -6,6 +6,7 @@ // Nintendo Wii (Hollywood) GPIO driver =20 #include +#include #include #include #include @@ -48,7 +49,7 @@ #define HW_GPIO_OWNER 0x3c =20 struct hlwd_gpio { - struct gpio_chip gpioc; + struct gpio_generic_chip gpioc; struct device *dev; void __iomem *regs; int irq; @@ -61,45 +62,44 @@ static void hlwd_gpio_irqhandler(struct irq_desc *desc) struct hlwd_gpio *hlwd =3D gpiochip_get_data(irq_desc_get_handler_data(desc)); struct irq_chip *chip =3D irq_desc_get_chip(desc); - unsigned long flags; unsigned long pending; int hwirq; u32 emulated_pending; =20 - raw_spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); - pending =3D ioread32be(hlwd->regs + HW_GPIOB_INTFLAG); - pending &=3D ioread32be(hlwd->regs + HW_GPIOB_INTMASK); + scoped_guard(gpio_generic_lock_irqsave, &hlwd->gpioc) { + pending =3D ioread32be(hlwd->regs + HW_GPIOB_INTFLAG); + pending &=3D ioread32be(hlwd->regs + HW_GPIOB_INTMASK); =20 - /* Treat interrupts due to edge trigger emulation separately */ - emulated_pending =3D hlwd->edge_emulation & pending; - pending &=3D ~emulated_pending; - if (emulated_pending) { - u32 level, rising, falling; + /* Treat interrupts due to edge trigger emulation separately */ + emulated_pending =3D hlwd->edge_emulation & pending; + pending &=3D ~emulated_pending; + if (emulated_pending) { + u32 level, rising, falling; =20 - level =3D ioread32be(hlwd->regs + HW_GPIOB_INTLVL); - rising =3D level & emulated_pending; - falling =3D ~level & emulated_pending; + level =3D ioread32be(hlwd->regs + HW_GPIOB_INTLVL); + rising =3D level & emulated_pending; + falling =3D ~level & emulated_pending; =20 - /* Invert the levels */ - iowrite32be(level ^ emulated_pending, - hlwd->regs + HW_GPIOB_INTLVL); + /* Invert the levels */ + iowrite32be(level ^ emulated_pending, + hlwd->regs + HW_GPIOB_INTLVL); =20 - /* Ack all emulated-edge interrupts */ - iowrite32be(emulated_pending, hlwd->regs + HW_GPIOB_INTFLAG); + /* Ack all emulated-edge interrupts */ + iowrite32be(emulated_pending, hlwd->regs + HW_GPIOB_INTFLAG); =20 - /* Signal interrupts only on the correct edge */ - rising &=3D hlwd->rising_edge; - falling &=3D hlwd->falling_edge; + /* Signal interrupts only on the correct edge */ + rising &=3D hlwd->rising_edge; + falling &=3D hlwd->falling_edge; =20 - /* Mark emulated interrupts as pending */ - pending |=3D rising | falling; + /* Mark emulated interrupts as pending */ + pending |=3D rising | falling; + } } - raw_spin_unlock_irqrestore(&hlwd->gpioc.bgpio_lock, flags); =20 chained_irq_enter(chip, desc); =20 for_each_set_bit(hwirq, &pending, 32) - generic_handle_domain_irq(hlwd->gpioc.irq.domain, hwirq); + generic_handle_domain_irq(hlwd->gpioc.gc.irq.domain, hwirq); =20 chained_irq_exit(chip, desc); } @@ -116,30 +116,29 @@ static void hlwd_gpio_irq_mask(struct irq_data *data) { struct hlwd_gpio *hlwd =3D gpiochip_get_data(irq_data_get_irq_chip_data(data)); - unsigned long flags; u32 mask; =20 - raw_spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); - mask =3D ioread32be(hlwd->regs + HW_GPIOB_INTMASK); - mask &=3D ~BIT(data->hwirq); - iowrite32be(mask, hlwd->regs + HW_GPIOB_INTMASK); - raw_spin_unlock_irqrestore(&hlwd->gpioc.bgpio_lock, flags); - gpiochip_disable_irq(&hlwd->gpioc, irqd_to_hwirq(data)); + scoped_guard(gpio_generic_lock_irqsave, &hlwd->gpioc) { + mask =3D ioread32be(hlwd->regs + HW_GPIOB_INTMASK); + mask &=3D ~BIT(data->hwirq); + iowrite32be(mask, hlwd->regs + HW_GPIOB_INTMASK); + } + gpiochip_disable_irq(&hlwd->gpioc.gc, irqd_to_hwirq(data)); } =20 static void hlwd_gpio_irq_unmask(struct irq_data *data) { struct hlwd_gpio *hlwd =3D gpiochip_get_data(irq_data_get_irq_chip_data(data)); - unsigned long flags; u32 mask; =20 - gpiochip_enable_irq(&hlwd->gpioc, irqd_to_hwirq(data)); - raw_spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); + gpiochip_enable_irq(&hlwd->gpioc.gc, irqd_to_hwirq(data)); + + guard(gpio_generic_lock_irqsave)(&hlwd->gpioc); + mask =3D ioread32be(hlwd->regs + HW_GPIOB_INTMASK); mask |=3D BIT(data->hwirq); iowrite32be(mask, hlwd->regs + HW_GPIOB_INTMASK); - raw_spin_unlock_irqrestore(&hlwd->gpioc.bgpio_lock, flags); } =20 static void hlwd_gpio_irq_enable(struct irq_data *data) @@ -173,10 +172,9 @@ static int hlwd_gpio_irq_set_type(struct irq_data *dat= a, unsigned int flow_type) { struct hlwd_gpio *hlwd =3D gpiochip_get_data(irq_data_get_irq_chip_data(data)); - unsigned long flags; u32 level; =20 - raw_spin_lock_irqsave(&hlwd->gpioc.bgpio_lock, flags); + guard(gpio_generic_lock_irqsave)(&hlwd->gpioc); =20 hlwd->edge_emulation &=3D ~BIT(data->hwirq); =20 @@ -197,11 +195,9 @@ static int hlwd_gpio_irq_set_type(struct irq_data *dat= a, unsigned int flow_type) hlwd_gpio_irq_setup_emulation(hlwd, data->hwirq, flow_type); break; default: - raw_spin_unlock_irqrestore(&hlwd->gpioc.bgpio_lock, flags); return -EINVAL; } =20 - raw_spin_unlock_irqrestore(&hlwd->gpioc.bgpio_lock, flags); return 0; } =20 @@ -225,6 +221,7 @@ static const struct irq_chip hlwd_gpio_irq_chip =3D { =20 static int hlwd_gpio_probe(struct platform_device *pdev) { + struct gpio_generic_chip_config config; struct hlwd_gpio *hlwd; u32 ngpios; int res; @@ -244,25 +241,31 @@ static int hlwd_gpio_probe(struct platform_device *pd= ev) * systems where the AHBPROT memory firewall hasn't been configured to * permit PPC access to HW_GPIO_*. * - * Note that this has to happen before bgpio_init reads the - * HW_GPIOB_OUT and HW_GPIOB_DIR, because otherwise it reads the wrong - * values. + * Note that this has to happen before gpio_generic_chip_init() reads + * the HW_GPIOB_OUT and HW_GPIOB_DIR, because otherwise it reads the + * wrong values. */ iowrite32be(0xffffffff, hlwd->regs + HW_GPIO_OWNER); =20 - res =3D bgpio_init(&hlwd->gpioc, &pdev->dev, 4, - hlwd->regs + HW_GPIOB_IN, hlwd->regs + HW_GPIOB_OUT, - NULL, hlwd->regs + HW_GPIOB_DIR, NULL, - BGPIOF_BIG_ENDIAN_BYTE_ORDER); + config =3D (typeof(config)){ + .dev =3D &pdev->dev, + .sz =3D 4, + .dat =3D hlwd->regs + HW_GPIOB_IN, + .set =3D hlwd->regs + HW_GPIOB_OUT, + .dirout =3D hlwd->regs + HW_GPIOB_DIR, + .flags =3D BGPIOF_BIG_ENDIAN_BYTE_ORDER, + }; + + res =3D gpio_generic_chip_init(&hlwd->gpioc, &config); if (res < 0) { - dev_warn(&pdev->dev, "bgpio_init failed: %d\n", res); + dev_warn(&pdev->dev, "failed to initialize generic GPIO chip: %d\n", res= ); return res; } =20 res =3D of_property_read_u32(pdev->dev.of_node, "ngpios", &ngpios); if (res) ngpios =3D 32; - hlwd->gpioc.ngpio =3D ngpios; + hlwd->gpioc.gc.ngpio =3D ngpios; =20 /* Mask and ack all interrupts */ iowrite32be(0, hlwd->regs + HW_GPIOB_INTMASK); @@ -282,7 +285,7 @@ static int hlwd_gpio_probe(struct platform_device *pdev) return hlwd->irq; } =20 - girq =3D &hlwd->gpioc.irq; + girq =3D &hlwd->gpioc.gc.irq; gpio_irq_chip_set_chip(girq, &hlwd_gpio_irq_chip); girq->parent_handler =3D hlwd_gpio_irqhandler; girq->num_parents =3D 1; @@ -296,7 +299,7 @@ static int hlwd_gpio_probe(struct platform_device *pdev) girq->handler =3D handle_level_irq; } =20 - return devm_gpiochip_add_data(&pdev->dev, &hlwd->gpioc, hlwd); + return devm_gpiochip_add_data(&pdev->dev, &hlwd->gpioc.gc, hlwd); } =20 static const struct of_device_id hlwd_gpio_match[] =3D { --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 9AF4B2D9ECF for ; Tue, 9 Sep 2025 09:15:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409353; cv=none; b=TMTAg9Y/BXSl+skcjTvUfmRl4HLYYBhKP8w8qo8A8BD+o+BtW1dx12r564RQabIScpcNBMhO0WOB65VReX7DhevEDyUXq/BZg5UTaIrvt/Ohz764eoigZhiIVD58Z2UaemDX3abXBqdSU5naIOlrYsLC4emoJdM2QErMEL+E+1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409353; c=relaxed/simple; bh=m3C6YMA5NpordnkRgnAsfsyx2uMyKsrWO0yN6UpIPP8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MqmWDwiIUux2TL6lD1CIP1q9mTSDG0ndc8lGNCl/MY52y1jZhDncTBnadEi65wyxDQZeyUTwF76zVyqavxBIyXzvK6C9777IN+4t4S+lqY1Mr4v5QbG8IKMCJ82VZf8SS5LcQsjYApJqEUH2Lxt7e+bT7wrjr3P+bGHFw4++erk= 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=Y43vgzqc; arc=none smtp.client-ip=209.85.128.48 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="Y43vgzqc" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-45cb6180b60so33818455e9.0 for ; Tue, 09 Sep 2025 02:15:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409350; x=1758014150; 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=bfVsXcyRTPM0823GsALirp0A0UZxDbq+MOQO0Rm+6MM=; b=Y43vgzqcU8Qarv+KOPsEAj/DOnRwQ6o23H+Je3U77Z9Zc6irNpbooWFxaxOD6GbDcQ h27gDR98ysMvBDcXKinLu3ooLnennjAxASQuII3sdDZagHGTwKZ9i/VmM3ei2wFcOx5n Sjr6JfLvF+xUhbeEacj0D3IcC90+4BPuYBPoJKMfTdbiWL5NxowfNykflPW2ZYMvkqWT juDDaaFTMlG5r3HJ9e1r+/V0hhlu6fIMlKbh5avP/WkzIhcnY84ecOp/LC0RrrZAToYh eHzhxNKENiSFsqqwHpU6lzi/Tf2eMLQ+YR4NQj6fHPJZGqdc1IAbepp3d77usvFuOLck CL/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409350; x=1758014150; 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=bfVsXcyRTPM0823GsALirp0A0UZxDbq+MOQO0Rm+6MM=; b=t5PuOkQ5sa+unSOEuziEYBMNrQh40uRfaZ5IqoJM1auPeijilpKMAoSdvO1o6WY4jV cA3SbRUiznuJz3F6ybHQyecfjBMJ1Y7EADwwVn94goe5XFZEYgBOXjEiBO5wGNUBwqbn 6W+evsLZVaS4hXEgtfJ/e1tRqoBeXLeKhU7pNwSgNZ1aY3nRWSYgzgbhdllEG+kQeAcY iYC65manxR358w9hG/7iAqvMLz9LAuY2pgdrYgj7HKQcRn1IRt1AFzut60XabF60fiJY lMU9dZ7tEyjvAnoVOYVlI/ERmgQmEKL/IhDoRBr5l/+97wIuHXO7yQPq8L4/AEqLWswc 9olg== X-Forwarded-Encrypted: i=1; AJvYcCXuEyDlf3fA2g061aKGMsLIHmBmfgFIHGv13vFPrzYEw0uTiXSsfWChzUK0whBXeZmKTmxcGmqj4M8xW5E=@vger.kernel.org X-Gm-Message-State: AOJu0YwTtOjw0ysFqaaZ8JIwXfDKPecVjR5T6lPmdVdaU6tSPYPqMglx a100EzxXBsrC/gmSv9gQ0moQF3qjvfuuvHduB18ApnlDrg3MuuG7k4OpwBRtuMKKAcM= X-Gm-Gg: ASbGncvLUfVNafG4aJiNeSeThxMOg2j9WaTF3Y7OhQUW3dIXy8CM+VeU3bJpoqopxT4 gJlC4sUqxq2xm2EQTWSMVvpypcCTLpjSbS2bXJkJ9c2+apACXWMiBzTDU8OFOgTXaM7RwbgKI2d MGlf4TMJBZVYsEskHSxMElkQDmSLk/3YQCHPpGy/n7Mhg4jVzk+pSmT8mlARD1365U++a/GxaTh +wdpDURk5jI64euYpu+pElWjwE05ivMm2Q66BPDD8tjGifrPMXBLD1LtStx4gBsZgYDvG39Co3f SEpvFavJIGvzaF3mvhSYmgxoWFd3CKboRzylO1SNedMa2vmH/iwtCPUfGHPT23aNDwPwtEMAHyW g+xDWM66/1j8mjk5BrQ== X-Google-Smtp-Source: AGHT+IFWuFmitLzvuFEhGEXuEuX7h1gnAXktOXE047kf9ZXksjM66NyEnLgZClefDTe7m/DeVUPeow== X-Received: by 2002:a05:600c:6304:b0:45b:43cc:e558 with SMTP id 5b1f17b1804b1-45dddef818cmr82339105e9.35.1757409349756; Tue, 09 Sep 2025 02:15:49 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:48 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:31 +0200 Subject: [PATCH 04/15] gpio: ath79: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-4-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4596; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=KmFRStxrtBvgq9SHCuo+p5UvH6qsrW0hcSZujIjU2hM=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A3uBuQUbggrZea4yqPMYEhQc7SR2SyAu4FG dnGFptiCCCJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wNwAKCRARpy6gFHHX cn7KEAC75xLioRo7Kh1dAfxq+uodLO/+7Wk5UsHsHIvgNKgcWkuWxxBBlb5yTHgZY8lOfw01MAv HLoSw+kRGn25m6kndbzXFcCkeAazbboy8tacIA34T9zLdqqiwNpQ6savUwoWwvQkJCe0Zd1sqyI X0+vuDS5bIpm+F1QnjiLMe0Sbb5PdipzpKDn9Qwvnh9Q1eKdnSW7fzabnl+ZttJSyqO9c77+dlW vo0l5G1dhMiwMY22CWhQs+0Gf2yPiwTZNH2IZggwTy5Na4Y7W6g8ioYaRYaAVsV7JVE+2sagt1b 7Z6NrRm51Mjd01e8i9/OaOH/o3nrWYM3/CETm+sekj8hOtYGtazwGUB8hHTtSy1++BBuRVvn1w5 8rHU8b0ScSiXUkEMSJ+BcGNF15jH3HfKtRCJN3+oO9GO/zHO96i5/v9gIeW/n/B5ivuN9QYHj3H 2A2/MveLQWeuYS6pJTiDY0LW+Ca84OmZDAL7rXXHxhhBR2GGAsU7R+G/J9V54uK7wxEpV29NbAJ ZhSbTRuR8KfbBPHNHz4dMXLnfg3POU4uZ9gTYS4Hj4W2nq7UIAFdcqefi4dcZ4isDmpX37sSQN9 7tu6A1Uoe8feo2JitwhMJoDwuuxnvLFgCKh3IiC+gesr2EEf4/dOHoE2K9kLjL3LpOHzh3r2b96 UGm1jx/g7L4nGcg== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-ath79.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c index de4cc12e5e0399abcef61a89c8c91a1b203d20fb..1b2a59ddbec4088c95fb766277b= b94ffff8692b2 100644 --- a/drivers/gpio/gpio-ath79.c +++ b/drivers/gpio/gpio-ath79.c @@ -10,6 +10,7 @@ =20 #include #include +#include #include #include #include @@ -28,7 +29,7 @@ #define AR71XX_GPIO_REG_INT_MASK 0x24 =20 struct ath79_gpio_ctrl { - struct gpio_chip gc; + struct gpio_generic_chip chip; void __iomem *base; raw_spinlock_t lock; unsigned long both_edges; @@ -37,8 +38,9 @@ struct ath79_gpio_ctrl { static struct ath79_gpio_ctrl *irq_data_to_ath79_gpio(struct irq_data *dat= a) { struct gpio_chip *gc =3D irq_data_get_irq_chip_data(data); + struct gpio_generic_chip *gen_gc =3D to_gpio_generic_chip(gc); =20 - return container_of(gc, struct ath79_gpio_ctrl, gc); + return container_of(gen_gc, struct ath79_gpio_ctrl, chip); } =20 static u32 ath79_gpio_read(struct ath79_gpio_ctrl *ctrl, unsigned reg) @@ -72,7 +74,7 @@ static void ath79_gpio_irq_unmask(struct irq_data *data) u32 mask =3D BIT(irqd_to_hwirq(data)); unsigned long flags; =20 - gpiochip_enable_irq(&ctrl->gc, irqd_to_hwirq(data)); + gpiochip_enable_irq(&ctrl->chip.gc, irqd_to_hwirq(data)); raw_spin_lock_irqsave(&ctrl->lock, flags); ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, mask); raw_spin_unlock_irqrestore(&ctrl->lock, flags); @@ -87,7 +89,7 @@ static void ath79_gpio_irq_mask(struct irq_data *data) raw_spin_lock_irqsave(&ctrl->lock, flags); ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, 0); raw_spin_unlock_irqrestore(&ctrl->lock, flags); - gpiochip_disable_irq(&ctrl->gc, irqd_to_hwirq(data)); + gpiochip_disable_irq(&ctrl->chip.gc, irqd_to_hwirq(data)); } =20 static void ath79_gpio_irq_enable(struct irq_data *data) @@ -187,8 +189,9 @@ static void ath79_gpio_irq_handler(struct irq_desc *des= c) { struct gpio_chip *gc =3D irq_desc_get_handler_data(desc); struct irq_chip *irqchip =3D irq_desc_get_chip(desc); + struct gpio_generic_chip *gen_gc =3D to_gpio_generic_chip(gc); struct ath79_gpio_ctrl *ctrl =3D - container_of(gc, struct ath79_gpio_ctrl, gc); + container_of(gen_gc, struct ath79_gpio_ctrl, chip); unsigned long flags, pending; u32 both_edges, state; int irq; @@ -224,6 +227,7 @@ MODULE_DEVICE_TABLE(of, ath79_gpio_of_match); =20 static int ath79_gpio_probe(struct platform_device *pdev) { + struct gpio_generic_chip_config config; struct device *dev =3D &pdev->dev; struct ath79_gpio_ctrl *ctrl; struct gpio_irq_chip *girq; @@ -253,21 +257,26 @@ static int ath79_gpio_probe(struct platform_device *p= dev) return PTR_ERR(ctrl->base); =20 raw_spin_lock_init(&ctrl->lock); - err =3D bgpio_init(&ctrl->gc, dev, 4, - ctrl->base + AR71XX_GPIO_REG_IN, - ctrl->base + AR71XX_GPIO_REG_SET, - ctrl->base + AR71XX_GPIO_REG_CLEAR, - oe_inverted ? NULL : ctrl->base + AR71XX_GPIO_REG_OE, - oe_inverted ? ctrl->base + AR71XX_GPIO_REG_OE : NULL, - 0); + + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D 4, + .dat =3D ctrl->base + AR71XX_GPIO_REG_IN, + .set =3D ctrl->base + AR71XX_GPIO_REG_SET, + .clr =3D ctrl->base + AR71XX_GPIO_REG_CLEAR, + .dirout =3D oe_inverted ? NULL : ctrl->base + AR71XX_GPIO_REG_OE, + .dirin =3D oe_inverted ? ctrl->base + AR71XX_GPIO_REG_OE : NULL, + }; + + err =3D gpio_generic_chip_init(&ctrl->chip, &config); if (err) { - dev_err(dev, "bgpio_init failed\n"); + dev_err(dev, "failed to initialize generic GPIO chip\n"); return err; } =20 /* Optional interrupt setup */ if (device_property_read_bool(dev, "interrupt-controller")) { - girq =3D &ctrl->gc.irq; + girq =3D &ctrl->chip.gc.irq; gpio_irq_chip_set_chip(girq, &ath79_gpio_irqchip); girq->parent_handler =3D ath79_gpio_irq_handler; girq->num_parents =3D 1; @@ -280,7 +289,7 @@ static int ath79_gpio_probe(struct platform_device *pde= v) girq->handler =3D handle_simple_irq; } =20 - return devm_gpiochip_add_data(dev, &ctrl->gc, ctrl); + return devm_gpiochip_add_data(dev, &ctrl->chip.gc, ctrl); } =20 static struct platform_driver ath79_gpio_driver =3D { --=20 2.48.1 From nobody Thu Oct 2 23:57:55 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 94E50301020 for ; Tue, 9 Sep 2025 09:15:53 +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=1757409356; cv=none; b=AVbk+5NkmFDTQx44sJ0IIITD3O6qvk5nD0PJoLHHySaagFCuzIbQY3MCYaawIHJ1dr047tbRsxiFADW+BYulcafnRbQy3AYL6wY0LURLE40Txr1BjcBFRxHlCwSAxKyzto19B4fodZetlYVCOG6u+SlHhZ3Z0GnhAiOhidynHlM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409356; c=relaxed/simple; bh=uqmvOvOfxF1o679wpIAUV6JzoYwqq817uSg3c0UoFGs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sexd+Iy5FONOSswUV7uti3aln++tdzNGIzf5aPhCZAQXLLNWEWSmnL1utpxuGNMxUzSBRuE/M5UbgcRBLau0KQYfRleCh+jrqXoIOppDb4qOSOe11I3hksb253Zv2YcTLDWaWjmGY9o2jUy3a5nK2iBjLacM3oTg0Ap4TklZqiM= 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=W9UkyFJ5; 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="W9UkyFJ5" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-45dec026c78so10063955e9.0 for ; Tue, 09 Sep 2025 02:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409352; x=1758014152; 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=cNyb/s8rhsBAw5oMG7jCFkP07jFHaAfhwIfXxzBcLE0=; b=W9UkyFJ51dea0nnmj2k8qBOgtiK7Dlq9lsEMyH/Nt+p1E7tazm8eoAOzIZRAWwcseh 7dIuOzwYKg2jO8NUGaLxbmI05R9G0roE7U+7JneMGqSlWrICzqOKkMYrjfP/47dTSjbu irOweBS0HVq+KWvGy0oEGiMcLu9CDCfVFeZIk+232e2A7XS4qMaLwLMXr8qoDAolcMlj AD9sMBYxUiATIz5onh192VfWetC90knWPwMAFLYW+vE6nj6LHc9UIgO5R8bFNJPkYCKg I0Y4eo46tXXKnzs6ps5uPphd9K+97/alBHFDbubt5VNdlnBnQ+Wgd9wuP/8h7a36qXUx ObXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409352; x=1758014152; 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=cNyb/s8rhsBAw5oMG7jCFkP07jFHaAfhwIfXxzBcLE0=; b=RWxIzrRm00sUTHDH77V1SqPosRLEIlIwnu+Ncf9KzSqCvGNw6Z0Anc9CBbUBhtRw44 F6CxGOmVHOrMITsrQSPZDQ9K23SPOj1N2ns+1aljTuy/oCUhQFP3OuEkoEudOIQJn3x5 3AQfbn4TyLIgRKMhH7kI0GQ8f4NOkPMA2wZUtv+/Rz7mxh2d4ue58VuX+8G844bzbdf7 71QcCLzGlLnOtvCqekbUqiJdFrwRYzZklK/BqSA3P4pUZnLgBtIM779s6MV6AVoe1Swq iR8byU1hKfEjWMBe6aTBUPIh+qNdVQD3npmoF8Xma+aUP/qS7Ph18eSQ1f4/R+t6xAG9 H1AQ== X-Forwarded-Encrypted: i=1; AJvYcCX/+oY/sOyU4VRFAr5GULs2yDkORfh8JGgVp4MQ1FYXhlukgjFVxrkjBS3lnj4JP2/AEp80Ur1ex9tHSfk=@vger.kernel.org X-Gm-Message-State: AOJu0YxwC70gbYQXVfnCzi8rzyuOoqxg2kX9tMtSUSagte0Ki1EN04H3 OYDp2crpujag5GBwu/1R8nfefPcMsfQtHLIfDsOOJDtzz5Od41izvp3xXe862LPj6yk= X-Gm-Gg: ASbGncu41+7tDlcmL5pmjSJI+2aio/mwoa5vMYUvNdGClUsyEJ1lMU7/HHHUJDWEfOI Sdpp6by0F+Q0cnRXHoGPGN0+vQk1ZXy9cvCg5FfHWwKbeE+JhksoQr4TZ5rpwHFqgtdn/2AMwMF J60AGIQAG9uHYYqrKxM4Llu0UiqKd4Dw+a/pZAogCmqwaRXPW6nJV9oJf2CPVobyUf9lcE7OT+Q yXJ20ruc1+ALGQQ7k7prXHALUx3seRNa2qzIcXhkjgXj8rMmK1mAKnhdTJ+7jVRaprUdCHKxqBE cZbfsKydip+otC5GmTV983GnusJI9PzQ7PWrc/6gzyY4avZU9ZvMk5AoqLE1bucwSVTKgptBLYP Z6OY4d3S75PDHgPLA3XmdarzIk8NoPeet7zz4Cf0= X-Google-Smtp-Source: AGHT+IH7uav1IGVrER9dF4PIYsOMNVrb5nwXYkyZEzGGA0F6yjDXZab7m4d2f1saSDymZ1SvoB+UGw== X-Received: by 2002:a05:600c:4f4e:b0:45d:d13f:6061 with SMTP id 5b1f17b1804b1-45df12e35efmr10405945e9.30.1757409351787; Tue, 09 Sep 2025 02:15:51 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:50 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:32 +0200 Subject: [PATCH 05/15] gpio: ath79: use the generic GPIO chip lock for IRQ handling 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: <20250909-gpio-mmio-gpio-conv-part4-v1-5-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5431; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=wEUGfBQ2UNxF7/X679yAoQw1e/9zTBMrjziqIk7+UbI=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A3rUn0axD0jqdCFa1rrDC0FyUulthioK0bV kzSvPlTeQiJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wNwAKCRARpy6gFHHX cj5IEAC93Ew7Nap6XkKixHXb8mM7E7WAQwY12FXIbaAQ3/zHlili51XHOWjWy6W0b/hG+b3cdyz flhBhVFWTBh7gYvARJNn1QcUi8VMWqMd498eNSoKzxs/zcTYuqR/fz+YJLQTOIE1hI73iQiQNJz ACHbxiRCtfcv5xxo0k8Dr4LlKgxZ2yzEjXyCPBp8ba9QuZffZ46y5r3NNuIMUzEOwkJtU2nQ24p Ka39Mq10yb7hjNe9iAubmhlHN0Q5jFZKuK0UZ5rG6JGgnYfRSiwmLOFxXDeDCbgPHMLdwy5W3eH 1DdThWaN3Alnc0POqBRA2LNuUrQkUp7plh7P0A9FUZTDNii7LGARLOkjyJm6iJKPFG/MzLB/uPd TNUtjyiOw0o4J2UM4bsHSvoWCZl/zK6Az0fppMrHEFrl9Xqk3mKZKp6H+JYu1xBUFzPDYBwyaEl VfyRFoeaR3XQAZzVvCXq3znCPJOQGzp8Y6nCMKSutM37jxi9VcUtr/fX46IagulYISBKOWl4+fq aa4+9tadu04IcOzyjmkAku8D+39RruxxdigQqZ9Ij+CQqEBHO5HKc/R/ExQZTaYdLMVAwdjZJ7T JSb7oJhUdEBGsKTnSxzrw6JLAGFtikjqEZ5jQy4QoE4OsgtPQI8VtFynvDHdyo6YHRHKGSS9+IB ibJ40dH4keBex6w== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski This driver uses its own raw spinlock in interrupt routines while the generic GPIO chip callbacks use a separate one. This is, of course, racy so use the fact that the lock in generic GPIO chip is also a raw spinlock and convert the interrupt handling functions in this module to using the provided generic GPIO chip locking API. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-ath79.c | 51 ++++++++++++++++++-------------------------= ---- 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c index 1b2a59ddbec4088c95fb766277bb94ffff8692b2..75c9e3bf7db1b5fbfede960dd1c= 0b3a76d2ecb8f 100644 --- a/drivers/gpio/gpio-ath79.c +++ b/drivers/gpio/gpio-ath79.c @@ -31,7 +31,6 @@ struct ath79_gpio_ctrl { struct gpio_generic_chip chip; void __iomem *base; - raw_spinlock_t lock; unsigned long both_edges; }; =20 @@ -72,23 +71,22 @@ static void ath79_gpio_irq_unmask(struct irq_data *data) { struct ath79_gpio_ctrl *ctrl =3D irq_data_to_ath79_gpio(data); u32 mask =3D BIT(irqd_to_hwirq(data)); - unsigned long flags; =20 gpiochip_enable_irq(&ctrl->chip.gc, irqd_to_hwirq(data)); - raw_spin_lock_irqsave(&ctrl->lock, flags); + + guard(gpio_generic_lock_irqsave)(&ctrl->chip); + ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, mask); - raw_spin_unlock_irqrestore(&ctrl->lock, flags); } =20 static void ath79_gpio_irq_mask(struct irq_data *data) { struct ath79_gpio_ctrl *ctrl =3D irq_data_to_ath79_gpio(data); u32 mask =3D BIT(irqd_to_hwirq(data)); - unsigned long flags; =20 - raw_spin_lock_irqsave(&ctrl->lock, flags); - ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, 0); - raw_spin_unlock_irqrestore(&ctrl->lock, flags); + scoped_guard(gpio_generic_lock_irqsave, &ctrl->chip) + ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, 0); + gpiochip_disable_irq(&ctrl->chip.gc, irqd_to_hwirq(data)); } =20 @@ -96,24 +94,20 @@ static void ath79_gpio_irq_enable(struct irq_data *data) { struct ath79_gpio_ctrl *ctrl =3D irq_data_to_ath79_gpio(data); u32 mask =3D BIT(irqd_to_hwirq(data)); - unsigned long flags; =20 - raw_spin_lock_irqsave(&ctrl->lock, flags); + guard(gpio_generic_lock_irqsave)(&ctrl->chip); ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_ENABLE, mask, mask); ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, mask); - raw_spin_unlock_irqrestore(&ctrl->lock, flags); } =20 static void ath79_gpio_irq_disable(struct irq_data *data) { struct ath79_gpio_ctrl *ctrl =3D irq_data_to_ath79_gpio(data); u32 mask =3D BIT(irqd_to_hwirq(data)); - unsigned long flags; =20 - raw_spin_lock_irqsave(&ctrl->lock, flags); + guard(gpio_generic_lock_irqsave)(&ctrl->chip); ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_MASK, mask, 0); ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_ENABLE, mask, 0); - raw_spin_unlock_irqrestore(&ctrl->lock, flags); } =20 static int ath79_gpio_irq_set_type(struct irq_data *data, @@ -122,7 +116,6 @@ static int ath79_gpio_irq_set_type(struct irq_data *dat= a, struct ath79_gpio_ctrl *ctrl =3D irq_data_to_ath79_gpio(data); u32 mask =3D BIT(irqd_to_hwirq(data)); u32 type =3D 0, polarity =3D 0; - unsigned long flags; bool disabled; =20 switch (flow_type) { @@ -144,7 +137,7 @@ static int ath79_gpio_irq_set_type(struct irq_data *dat= a, return -EINVAL; } =20 - raw_spin_lock_irqsave(&ctrl->lock, flags); + guard(gpio_generic_lock_irqsave)(&ctrl->chip); =20 if (flow_type =3D=3D IRQ_TYPE_EDGE_BOTH) { ctrl->both_edges |=3D mask; @@ -169,8 +162,6 @@ static int ath79_gpio_irq_set_type(struct irq_data *dat= a, ath79_gpio_update_bits( ctrl, AR71XX_GPIO_REG_INT_ENABLE, mask, mask); =20 - raw_spin_unlock_irqrestore(&ctrl->lock, flags); - return 0; } =20 @@ -192,26 +183,24 @@ static void ath79_gpio_irq_handler(struct irq_desc *d= esc) struct gpio_generic_chip *gen_gc =3D to_gpio_generic_chip(gc); struct ath79_gpio_ctrl *ctrl =3D container_of(gen_gc, struct ath79_gpio_ctrl, chip); - unsigned long flags, pending; + unsigned long pending; u32 both_edges, state; int irq; =20 chained_irq_enter(irqchip, desc); =20 - raw_spin_lock_irqsave(&ctrl->lock, flags); + scoped_guard(gpio_generic_lock_irqsave, &ctrl->chip) { + pending =3D ath79_gpio_read(ctrl, AR71XX_GPIO_REG_INT_PENDING); =20 - pending =3D ath79_gpio_read(ctrl, AR71XX_GPIO_REG_INT_PENDING); - - /* Update the polarity of the both edges irqs */ - both_edges =3D ctrl->both_edges & pending; - if (both_edges) { - state =3D ath79_gpio_read(ctrl, AR71XX_GPIO_REG_IN); - ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_POLARITY, - both_edges, ~state); + /* Update the polarity of the both edges irqs */ + both_edges =3D ctrl->both_edges & pending; + if (both_edges) { + state =3D ath79_gpio_read(ctrl, AR71XX_GPIO_REG_IN); + ath79_gpio_update_bits(ctrl, AR71XX_GPIO_REG_INT_POLARITY, + both_edges, ~state); + } } =20 - raw_spin_unlock_irqrestore(&ctrl->lock, flags); - for_each_set_bit(irq, &pending, gc->ngpio) generic_handle_domain_irq(gc->irq.domain, irq); =20 @@ -256,8 +245,6 @@ static int ath79_gpio_probe(struct platform_device *pde= v) if (IS_ERR(ctrl->base)) return PTR_ERR(ctrl->base); =20 - raw_spin_lock_init(&ctrl->lock); - config =3D (typeof(config)){ .dev =3D dev, .sz =3D 4, --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 B6A1C306B27 for ; Tue, 9 Sep 2025 09:15:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409357; cv=none; b=UHyvkhIcPxp24CvcdWto+oE0fFWxmk8PIWcvCzDq3Gg+H1drLRGmr3Qdg0ertGA1K2B+OIbpcSQwWGXfN8+16EScu0XQ9OJyq6ud30fyRQU6bq0KpOAsPDl3nRHwngIjES+LSiUnK3Um9kUpdFCEM1oNlQr7UQDnCqkohSxz/fk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409357; c=relaxed/simple; bh=yVgPPOcE+ewclBktjz5E2v2YtjZnxTx9c2rSBG/L3iY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z1dh9VOfnPUo3TkuNkI556iEfoJR29zSqVwYGEBO4d5fUEc+TdZpPnJUrWeYZOarplSAe3LKyEPWjINNfUfqRCUKYFoo6zTTl8CWKkBDOkKH9cUqaXYDpB3ZsDdhoiaizLLD91yWRmg0Pq98QU1vvUO9TDzuwcmE0j0Ong4z/NI= 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=cGuyF7Nw; arc=none smtp.client-ip=209.85.128.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="cGuyF7Nw" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-45df0cde41bso2264545e9.3 for ; Tue, 09 Sep 2025 02:15:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409354; x=1758014154; 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=xHR8kEAINHQx8cEJdNb56gXGfX3p65LuAbViPfkkq1g=; b=cGuyF7Nw+OiZsJoZm6af6wDLnN7mXyVnETWwWmOAWY26y0dCBnG3Qbf2wVhca/r9hp l/evGoLW0OAm1SUwN9DQ56rwW5AvGme5YHsBI5TktP/VGOmCmdW0J4ms0qTzaElSJ9jJ dl4DR121ZpmZ2NhGjGJIlQJqrtoeBihedFm1kh8iUUgkph9eZ+0fefspSkIaeRfE/z5m M+vA8/k75kzlI5Iug2ZDvJL8nc95vfod8f0PyYU7HJEZNSqvld1IimbxWwtV2anPTIJL pNBB6gV5aLm+xANlIUnlg4mS97izS0MZKjjWmhftYB1U9HhG79fknof+66S1Kjdk7W8w wjcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409354; x=1758014154; 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=xHR8kEAINHQx8cEJdNb56gXGfX3p65LuAbViPfkkq1g=; b=gp+6Azb91DZ75wEjCxMu7zQdgVARLC/SwqYDtJQ9E9rVjCa5eQOJLnvhwDZv9SnC3t iKDbfUXEK0+/WpMauyuxcP02cdfLgC2sAApT6Jny0aR+SZKZmKrsQoCoGNdqcCwarkN5 HmC30II9EFmnGoLs6VXZCpqHwEeBJC9CFdVKn3X3jmsQtXeKib/PCJAI8DlMTKWnfS3U XAkigOQ14VYnG/aj014DupHm1DV6OVuFBFjR7C1v/N6yQD0imGpLb077/cF5ln6ibRDO lXUEAyI0rDWfinm709EYAjOgQnMTcPWh5jBszKv36cKS+LxUhPNh6FDcsNH2QBXNWTWu RNtQ== X-Forwarded-Encrypted: i=1; AJvYcCWEw/myv0HqzNhq38yB2a95EqtawijQ9vyI1rYhWBjjLlmORdJck+JH4MoJa206DfbxI8C8i7vT2G38HfA=@vger.kernel.org X-Gm-Message-State: AOJu0Yxn4WIEv03qjNPU5OicsD+A+xNN0rtljgh9N/Pe8Dt+64BYCTOw 6qcC0znwWlrq9oOzrcqrJlLr06m9iOYEPFGQofk4WH1vMlPtmxzPB+CqrGt0QIftQcY= X-Gm-Gg: ASbGncuM++03B/MJwo8lUHeb4u0JBCpidYUt8G+CTRfIXebHQfh8GqzIXGo7/Gfp38L T7+6cWj1kw0LYukLucypzGvC7Wh/lmyS5wqYMpews12sn6V3Y6mV3tZy3gnmOT6Cmb2O8X0itDq XnoLroVTvLYa4l4bhQMpumuQp1v84VckP2jIYCydU38Z+iVGSbkV1yGBUAtItc+nVlV8L3Op7p5 8dEIpQNRK9dI4PQH/dnSGgY0GJorwFiOayAy6rpUKR6Q8qiapFU4Y20AD3EP5GtQ8FwiuX/Sfqx mY+rwe85fGRkirvWAoZzJZWDaxcr1WKuDYqIVvjKf5gryL0o8XS7J8sMvDXjUEfKvqV3WR25n1g kE2WID8MMGj0IWO25vbNV4tdcFRJT X-Google-Smtp-Source: AGHT+IHhcgO6dwZxJtkrv/4cgFJ9AZZjVhBwJVC7OCJoGvWxqWltiwPbbtdGBypNoYfTrgC0pMDsDA== X-Received: by 2002:a05:600c:4f47:b0:45d:d903:beea with SMTP id 5b1f17b1804b1-45dec7992demr29926925e9.30.1757409353851; Tue, 09 Sep 2025 02:15:53 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:52 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:33 +0200 Subject: [PATCH 06/15] gpio: xgene-sb: use generic GPIO chip register read and write APIs 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: <20250909-gpio-mmio-gpio-conv-part4-v1-6-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1238; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=We0X7xb7ACmLY+lbQa1fcNw6pP25NDN5z92R8VM93TU=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A4pQZLBZn4BjfERAi0jFAen5It67lNNEGX4 28/FwbaFj+JAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOAAKCRARpy6gFHHX cppTD/4ubzT5gkUPHClRcXZW7nUjOwMKszigAjd07nNOb4PF0UpVU/Xa7EnK+Syz6p0XN914Vg1 dMG2j9qlrjrNzhrbPetN/pzgg0RJ5FtkBeCt0QXzTIM/a+OIXPh7USmz0K2fiNPTPV2j9/afS9Q o1uvp7fh5vygt/dxzTY3GXRvzvAvlXF7Nj7cXXbufdr+leL6pNp9oAtHKmepILW5EXpYFjMoStH jbkjAo0gaQWdhdfr3K7hUFVirfvRgS3xp/s0PuStezskzt2soyUXvzAk68x1n1aoTsHvj8e18/M ELZsqbHx5BzbZXplavqjtoWHWaIHPaZGUK5I96znEf7RNJcznFDPSn3z2hemiZlD5j5zjVbaiQJ e7fMVvjPH1WvX60+a5oopYA1ZIZjLNqd31TgZltatr7zdX2BQbFJRQo8bHngbWak1gQiVh/7Cex zwXws2yfiUCjol1anGcqyeNvCPSA0b+vzKTlM9Yg+31ZHNGWeisiXTVtlVO8mxr5JdJg8IXJFhE HIN1TnCnnyCKDjmqRucW6M/Sj4KBGnUNgwFtA+dnhk1DDyvACq73VpW4OXZUPBsKF9uHpEHvW0M ymUv6nH3ayojO3TG4dtSPtFoY2Y4aol+CHE8v2IqHm74wWbdOuT7cdf+yMxDJ/DCtZs3ND+cIUd 3eWJFcmxF3LRACg== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski The conversion to using the modernized generic GPIO chip API was incomplete without also converting the direct calls to write/read_reg() callbacks. Use the provided wrappers from linux/gpio/generic.h. Fixes: 38d98a822c14 ("gpio: xgene-sb: use new generic GPIO chip API") Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-xgene-sb.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-xgene-sb.c b/drivers/gpio/gpio-xgene-sb.c index c559a89aadf7a77bd9cce7e5a7d4a2b241307812..62545e358b6c4b1cab25e1135cb= 24ccc3e955078 100644 --- a/drivers/gpio/gpio-xgene-sb.c +++ b/drivers/gpio/gpio-xgene-sb.c @@ -63,14 +63,15 @@ struct xgene_gpio_sb { static void xgene_gpio_set_bit(struct gpio_chip *gc, void __iomem *reg, u32 gpio, int val) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); u32 data; =20 - data =3D gc->read_reg(reg); + data =3D gpio_generic_read_reg(chip, reg); if (val) data |=3D GPIO_MASK(gpio); else data &=3D ~GPIO_MASK(gpio); - gc->write_reg(reg, data); + gpio_generic_write_reg(chip, reg, data); } =20 static int xgene_gpio_sb_irq_set_type(struct irq_data *d, unsigned int typ= e) --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (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 11EF6308F1D for ; Tue, 9 Sep 2025 09:15:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409360; cv=none; b=tL+yOcC1Huts90iCjKZR9YDrshB347W8Lx6HZs86+V1qCuNAVM7d7sZVcoboA+JfziToI9wqjm/ivkMFHZ7Kg8Cm0LqGpLFMOaa3ch2s0sSm7MF2Sjil9mCHbHlmo/jQIMVqF98SRf60bWcDaG4H3odXW1/FkIe1jEMsxrNPCj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409360; c=relaxed/simple; bh=DHIwykEQPa3w881W4iGI+NVdGDSXAEuIFPzLyCbBCB0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YYCTQnCFZJBgR5bNB2nFd+8L1pakSFkyEc1D+/AWchmGslm/Sa64uJg7t7AbfZ3t/LEKF4lbZ2jwTQt7vi7oNRn5jlTm3NrE+I7zYMvAITFIK2HYlwZ7JjYRXCwuM0br+IWPOHbkXwZVa6w/PbR8+ZkytiM1KcKfnv/dP5lC6ng= 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=WAyENct7; arc=none smtp.client-ip=209.85.221.48 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="WAyENct7" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3e7428c4cbdso1458118f8f.0 for ; Tue, 09 Sep 2025 02:15:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409356; x=1758014156; 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=+6XI455PiNr81zZH6BtcUTDH3erDPhGkBmwL0UjtiA8=; b=WAyENct7zsMeiHPwC0bSoB3JDvYJwSl5Ye/C3GgdrCLJ60EnE4UsVHYdTeyI0G+uiE VNAzFcEAu7wEYcf5J5If3/Kqef2apyIH0w8uNqM6nqkMMamUI+0W5RDEVeUSNmQli/+b epUITlXQgTFn8XU9nAyropT1jqQpqk0oSbIDkTLlKxyL6qTmssqILCADVAJYOHG6yH1q UTFfS3Em4X3JCx0+F20x5c7BGXHehtFHYRgepyDdO5W5BRrvk2rjO/Ph6MigQEwqDVzi u65MIvU/Z6Z9QVW88OO3NDH14xM98vA3C/MNQ3Z4vICHKRf0gqUcXFXrC/mLQ4J7QdOG vmmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409356; x=1758014156; 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=+6XI455PiNr81zZH6BtcUTDH3erDPhGkBmwL0UjtiA8=; b=h75bAPgRsuuPYU+1zHYBNBEFfR/D2+ZxOZy/zi+wWF7bJB5wUMy21ZnZ/qv4ST/A9Y Pmw7X28A41s1N2VzSwiQmbUGdXfEDLthzH3xs/m3caTdfr+U6PY9rokMevqs+ANtBNQK Mq0sTpo6LAqd7A6M+ECzUUTUlVrj5diZt/vhibPSBnd6W9SQGwR8Ss5+5kC5hHy/MTbv ZrFyT3/T0f10ri9VR+GWZnBMAMtyRk+WPKJ/KYE/4Mp66zTg4YNGfjG8D7mLGon1Y57q Rd1h8Sbz4MG0ir0mryPRsy1b3SVliIR5xd8dSJJ3WR3LYaikOjZxD5osCmEJ9cA1pOWq imwQ== X-Forwarded-Encrypted: i=1; AJvYcCUe7qg90i/rRUqUAZNaf1WBCq/gWHN6N5DdUbGSoSKEMY6rAm4rNZB4YuHAWCbtmyWLVOnI+LyT15vXr+k=@vger.kernel.org X-Gm-Message-State: AOJu0YzMw8zf1qdPCKjyUuUSeMCoSUKmJkBZLPoviu1nNuzCAS+402Uk wD0RrBfLAzuiMrFGRfD6OSO2HfGcwfnmsjvejHMIdBSadvRPEpteQG5v3oqzDuMAz2U= X-Gm-Gg: ASbGncvuK2kmCDHN3F8wbrx02H0jerEf7cagKmQdB7mKGJ6PP3DU0rtMWzLfHBa0VXb P4avSiffqHtVbQQfHUnQr6dTCx3UGpSreXh9RUlu2A41EMiKXrTvJIIan5IPJ9i/Rk1h3nNYA3a IZzsKhRVFxHlJtAglcoMJaf8IvUMZ1wFYSwOR4c7xWMNPouxRG0Lm6TfIBKCxpkqIT0ComqUEYf NE5LlyBiEskHQLSRmAH38BMXdDpsqLtvsUEErs9wm47H7QdslLANZA7KnJrAWZSe+NF/6FEXm5G qLgvqqM+0OvxqKKbqaKLHHk4TrlqPzZkQz7cYOH4uIlKjO/yJ9vpLOUGsksvVR0ddhDajIWoVl2 IVrHAlPeCezP0VFL3Zw== X-Google-Smtp-Source: AGHT+IGhdNQDTQ/G062FzoKjkwVDoXK1StiDr7oBbkv9KofrVmt1JYjUhLT/5CSNVFCfr9+qyLMbkg== X-Received: by 2002:a05:6000:40dd:b0:3d8:8f86:7afc with SMTP id ffacd0b85a97d-3e62a10b2f3mr10508011f8f.21.1757409356188; Tue, 09 Sep 2025 02:15:56 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:54 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:34 +0200 Subject: [PATCH 07/15] gpio: brcmstb: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-7-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10410; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=zh+dbaYfNDf7FOmStJJaYhI936mnW1RBjpO4BgoCwfY=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A4mNwDK6jTB0asDLFnuBHDFAYdY5VCwV9Zd 0KgU+qodwqJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOAAKCRARpy6gFHHX ciZGD/96sA5hvRG/EKxfHse55GCoj86m/FiF71CbJ3ZBRNaYYl/gIpIqfj/Jtyr6jzKJISpSdVP HEmDoVGMpsrsyBYTZV38rOLfkVWALRlNO0PHPiMCbSsbVjaUNjtn+9VSlrZeUgS/RQlA7BXOMOe gfldbXTsD1UcY6yMRw2PAQ3Ltbc3zhu0NXzhd35CEc3VY5TqlLt8dULxT8CbQMHWxqE2zFY0JGI zqMvOxJaMPE4MqBMiwO9aheYemrGCnO2W+t7fMsGJuu0mPtfJ/2j3IqibWCa4IIsEQty4dgpCf5 UELR3jidqIAfxoY0JgsrbWn9Gt+/Wcltifr84Fisu/WBbUdr9GndT1ztvVs57Ozrd3sNOkiYZkp 9HdjZHiqIlKxwErdmQWIAONG+oUhUCt0SiOT+M0zjqTjQKoAIT7pyOvxYutinQw4mG7T3wpsSPi 2zSwUKU9kMY4KDz1MNuRKsWkNK9UZOC0TQFYvVwyQMiB3ldpzrNZyIS2sTBddrsHiATe1wPzV1p L2bqgPjv9dy8m+ZdBn7br20wSoMbMXFzZZzfTf5//yI3B+Foo05RP2GMYwQ5Z2vGkNLNKPei6wf /CYk5x0j3nXr8fUtL5Kw8fa66GX22SL3cz6tos9jwLPMXjg0RyccXN07KGbUw3JMDeiGzo7hGVu 5jFwNdL/mMWh++g== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-brcmstb.c | 112 ++++++++++++++++++++++++----------------= ---- 1 file changed, 60 insertions(+), 52 deletions(-) diff --git a/drivers/gpio/gpio-brcmstb.c b/drivers/gpio/gpio-brcmstb.c index e29a9589b3ccbd17d10f6671088dca3e76537927..d03ff4ed9ef4c9d75f3e8c9c6fc= b39bc577bcb79 100644 --- a/drivers/gpio/gpio-brcmstb.c +++ b/drivers/gpio/gpio-brcmstb.c @@ -3,6 +3,7 @@ =20 #include #include +#include #include #include #include @@ -37,7 +38,7 @@ enum gio_reg_index { struct brcmstb_gpio_bank { struct list_head node; int id; - struct gpio_chip gc; + struct gpio_generic_chip chip; struct brcmstb_gpio_priv *parent_priv; u32 width; u32 wake_active; @@ -72,19 +73,18 @@ __brcmstb_gpio_get_active_irqs(struct brcmstb_gpio_bank= *bank) { void __iomem *reg_base =3D bank->parent_priv->reg_base; =20 - return bank->gc.read_reg(reg_base + GIO_STAT(bank->id)) & - bank->gc.read_reg(reg_base + GIO_MASK(bank->id)); + return gpio_generic_read_reg(&bank->chip, reg_base + GIO_STAT(bank->id)) & + gpio_generic_read_reg(&bank->chip, reg_base + GIO_MASK(bank->id)); } =20 static unsigned long brcmstb_gpio_get_active_irqs(struct brcmstb_gpio_bank *bank) { unsigned long status; - unsigned long flags; =20 - raw_spin_lock_irqsave(&bank->gc.bgpio_lock, flags); + guard(gpio_generic_lock_irqsave)(&bank->chip); + status =3D __brcmstb_gpio_get_active_irqs(bank); - raw_spin_unlock_irqrestore(&bank->gc.bgpio_lock, flags); =20 return status; } @@ -92,26 +92,26 @@ brcmstb_gpio_get_active_irqs(struct brcmstb_gpio_bank *= bank) static int brcmstb_gpio_hwirq_to_offset(irq_hw_number_t hwirq, struct brcmstb_gpio_bank *bank) { - return hwirq - bank->gc.offset; + return hwirq - bank->chip.gc.offset; } =20 static void brcmstb_gpio_set_imask(struct brcmstb_gpio_bank *bank, unsigned int hwirq, bool enable) { - struct gpio_chip *gc =3D &bank->gc; struct brcmstb_gpio_priv *priv =3D bank->parent_priv; u32 mask =3D BIT(brcmstb_gpio_hwirq_to_offset(hwirq, bank)); u32 imask; - unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); - imask =3D gc->read_reg(priv->reg_base + GIO_MASK(bank->id)); + guard(gpio_generic_lock_irqsave)(&bank->chip); + + imask =3D gpio_generic_read_reg(&bank->chip, + priv->reg_base + GIO_MASK(bank->id)); if (enable) imask |=3D mask; else imask &=3D ~mask; - gc->write_reg(priv->reg_base + GIO_MASK(bank->id), imask); - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_MASK(bank->id), imask); } =20 static int brcmstb_gpio_to_irq(struct gpio_chip *gc, unsigned offset) @@ -150,7 +150,8 @@ static void brcmstb_gpio_irq_ack(struct irq_data *d) struct brcmstb_gpio_priv *priv =3D bank->parent_priv; u32 mask =3D BIT(brcmstb_gpio_hwirq_to_offset(d->hwirq, bank)); =20 - gc->write_reg(priv->reg_base + GIO_STAT(bank->id), mask); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_STAT(bank->id), mask); } =20 static int brcmstb_gpio_irq_set_type(struct irq_data *d, unsigned int type) @@ -162,7 +163,6 @@ static int brcmstb_gpio_irq_set_type(struct irq_data *d= , unsigned int type) u32 edge_insensitive, iedge_insensitive; u32 edge_config, iedge_config; u32 level, ilevel; - unsigned long flags; =20 switch (type) { case IRQ_TYPE_LEVEL_LOW: @@ -194,23 +194,25 @@ static int brcmstb_gpio_irq_set_type(struct irq_data = *d, unsigned int type) return -EINVAL; } =20 - raw_spin_lock_irqsave(&bank->gc.bgpio_lock, flags); + guard(gpio_generic_lock_irqsave)(&bank->chip); =20 - iedge_config =3D bank->gc.read_reg(priv->reg_base + - GIO_EC(bank->id)) & ~mask; - iedge_insensitive =3D bank->gc.read_reg(priv->reg_base + - GIO_EI(bank->id)) & ~mask; - ilevel =3D bank->gc.read_reg(priv->reg_base + - GIO_LEVEL(bank->id)) & ~mask; + iedge_config =3D gpio_generic_read_reg(&bank->chip, + priv->reg_base + GIO_EC(bank->id)) & ~mask; + iedge_insensitive =3D gpio_generic_read_reg(&bank->chip, + priv->reg_base + GIO_EI(bank->id)) & ~mask; + ilevel =3D gpio_generic_read_reg(&bank->chip, + priv->reg_base + GIO_LEVEL(bank->id)) & ~mask; =20 - bank->gc.write_reg(priv->reg_base + GIO_EC(bank->id), - iedge_config | edge_config); - bank->gc.write_reg(priv->reg_base + GIO_EI(bank->id), - iedge_insensitive | edge_insensitive); - bank->gc.write_reg(priv->reg_base + GIO_LEVEL(bank->id), - ilevel | level); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_EC(bank->id), + iedge_config | edge_config); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_EI(bank->id), + iedge_insensitive | edge_insensitive); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_LEVEL(bank->id), + ilevel | level); =20 - raw_spin_unlock_irqrestore(&bank->gc.bgpio_lock, flags); return 0; } =20 @@ -263,7 +265,7 @@ static void brcmstb_gpio_irq_bank_handler(struct brcmst= b_gpio_bank *bank) { struct brcmstb_gpio_priv *priv =3D bank->parent_priv; struct irq_domain *domain =3D priv->irq_domain; - int hwbase =3D bank->gc.offset; + int hwbase =3D bank->chip.gc.offset; unsigned long status; =20 while ((status =3D brcmstb_gpio_get_active_irqs(bank))) { @@ -303,7 +305,7 @@ static struct brcmstb_gpio_bank *brcmstb_gpio_hwirq_to_= bank( =20 /* banks are in descending order */ list_for_each_entry_reverse(bank, &priv->bank_list, node) { - i +=3D bank->gc.ngpio; + i +=3D bank->chip.gc.ngpio; if (hwirq < i) return bank; } @@ -332,7 +334,7 @@ static int brcmstb_gpio_irq_map(struct irq_domain *d, u= nsigned int irq, =20 dev_dbg(&pdev->dev, "Mapping irq %d for gpio line %d (bank %d)\n", irq, (int)hwirq, bank->id); - ret =3D irq_set_chip_data(irq, &bank->gc); + ret =3D irq_set_chip_data(irq, &bank->chip.gc); if (ret < 0) return ret; irq_set_lockdep_class(irq, &brcmstb_gpio_irq_lock_class, @@ -394,7 +396,7 @@ static void brcmstb_gpio_remove(struct platform_device = *pdev) * more important to actually perform all of the steps. */ list_for_each_entry(bank, &priv->bank_list, node) - gpiochip_remove(&bank->gc); + gpiochip_remove(&bank->chip.gc); } =20 static int brcmstb_gpio_of_xlate(struct gpio_chip *gc, @@ -412,7 +414,7 @@ static int brcmstb_gpio_of_xlate(struct gpio_chip *gc, if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells)) return -EINVAL; =20 - offset =3D gpiospec->args[0] - bank->gc.offset; + offset =3D gpiospec->args[0] - bank->chip.gc.offset; if (offset >=3D gc->ngpio || offset < 0) return -EINVAL; =20 @@ -493,19 +495,17 @@ static int brcmstb_gpio_irq_setup(struct platform_dev= ice *pdev, static void brcmstb_gpio_bank_save(struct brcmstb_gpio_priv *priv, struct brcmstb_gpio_bank *bank) { - struct gpio_chip *gc =3D &bank->gc; unsigned int i; =20 for (i =3D 0; i < GIO_REG_STAT; i++) - bank->saved_regs[i] =3D gc->read_reg(priv->reg_base + - GIO_BANK_OFF(bank->id, i)); + bank->saved_regs[i] =3D gpio_generic_read_reg(&bank->chip, + priv->reg_base + GIO_BANK_OFF(bank->id, i)); } =20 static void brcmstb_gpio_quiesce(struct device *dev, bool save) { struct brcmstb_gpio_priv *priv =3D dev_get_drvdata(dev); struct brcmstb_gpio_bank *bank; - struct gpio_chip *gc; u32 imask; =20 /* disable non-wake interrupt */ @@ -513,8 +513,6 @@ static void brcmstb_gpio_quiesce(struct device *dev, bo= ol save) disable_irq(priv->parent_irq); =20 list_for_each_entry(bank, &priv->bank_list, node) { - gc =3D &bank->gc; - if (save) brcmstb_gpio_bank_save(priv, bank); =20 @@ -523,8 +521,9 @@ static void brcmstb_gpio_quiesce(struct device *dev, bo= ol save) imask =3D bank->wake_active; else imask =3D 0; - gc->write_reg(priv->reg_base + GIO_MASK(bank->id), - imask); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_MASK(bank->id), + imask); } } =20 @@ -538,12 +537,12 @@ static void brcmstb_gpio_shutdown(struct platform_dev= ice *pdev) static void brcmstb_gpio_bank_restore(struct brcmstb_gpio_priv *priv, struct brcmstb_gpio_bank *bank) { - struct gpio_chip *gc =3D &bank->gc; unsigned int i; =20 for (i =3D 0; i < GIO_REG_STAT; i++) - gc->write_reg(priv->reg_base + GIO_BANK_OFF(bank->id, i), - bank->saved_regs[i]); + gpio_generic_write_reg(&bank->chip, + priv->reg_base + GIO_BANK_OFF(bank->id, i), + bank->saved_regs[i]); } =20 static int brcmstb_gpio_suspend(struct device *dev) @@ -585,6 +584,7 @@ static const struct dev_pm_ops brcmstb_gpio_pm_ops =3D { =20 static int brcmstb_gpio_probe(struct platform_device *pdev) { + struct gpio_generic_chip_config config; struct device *dev =3D &pdev->dev; struct device_node *np =3D dev->of_node; void __iomem *reg_base; @@ -665,17 +665,24 @@ static int brcmstb_gpio_probe(struct platform_device = *pdev) bank->width =3D bank_width; } =20 + gc =3D &bank->chip.gc; + /* * Regs are 4 bytes wide, have data reg, no set/clear regs, * and direction bits have 0 =3D output and 1 =3D input */ - gc =3D &bank->gc; - err =3D bgpio_init(gc, dev, 4, - reg_base + GIO_DATA(bank->id), - NULL, NULL, NULL, - reg_base + GIO_IODIR(bank->id), flags); + + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D 4, + .dat =3D reg_base + GIO_DATA(bank->id), + .dirin =3D reg_base + GIO_IODIR(bank->id), + .flags =3D flags, + }; + + err =3D gpio_generic_chip_init(&bank->chip, &config); if (err) { - dev_err(dev, "bgpio_init() failed\n"); + dev_err(dev, "failed to initialize generic GPIO chip\n"); goto fail; } =20 @@ -700,7 +707,8 @@ static int brcmstb_gpio_probe(struct platform_device *p= dev) * be retained from S5 cold boot */ need_wakeup_event |=3D !!__brcmstb_gpio_get_active_irqs(bank); - gc->write_reg(reg_base + GIO_MASK(bank->id), 0); + gpio_generic_write_reg(&bank->chip, + reg_base + GIO_MASK(bank->id), 0); =20 err =3D gpiochip_add_data(gc, bank); if (err) { --=20 2.48.1 From nobody Thu Oct 2 23:57:55 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 190F3309DCC for ; Tue, 9 Sep 2025 09:15:59 +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=1757409362; cv=none; b=MZqTWZzwR8J+KShK4+1XNMM2xayo3U2WnAkCPamMrN+g44gq3X0VGCob1GXEklJM4/eOkdFnwi3KAUFka8Eg5AtkIlYEMUIKsnfAq+GhlMaUcyY74QeuTB946STQNaqQn/chXOM9jeIgOkUmGEXCTIWLRAZBaR3O+GnYuCTU7QU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409362; c=relaxed/simple; bh=1FEcQAUswumhuSrIfLEzKyEKnEkv//ILIT58TzKEylA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i5MFzoHkMRFkJzCRQNa3sVDBjeyVl+LDgV86QR5Jgxpc7yC39lXTKcUq+losH71a67qycKR3TCELR8uFBDcaKnwxCJA7L63zmPlP3hNnXoHop1BCkUsPhzMf2qGkKfhwkusw7edaUE06AgEfUsCb4JugiuSJbJN8nvGJw4MUzOU= 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=FOdwJ9Nm; 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="FOdwJ9Nm" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3c68ac7e18aso3372966f8f.2 for ; Tue, 09 Sep 2025 02:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409358; x=1758014158; 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=imvYh5lR/dHX9OHCZw7SQaMxZ7ezZGMquKjwxXrqu/k=; b=FOdwJ9Nm3infU61sOR3jK0/8Ifb8O0QmEAy3wNpfwfZbIpoFmadwo7lXEZXuwWKjmJ aqPnZsjmNLjr0GbsFNaRxFuFdFuKcUVJqwMU00Z7eHCKOY1iQzsKeVBGTgnYCOY6dWgI eZcfc/7mIWeKINxQwfvfg3/bQ1d/VuXMHG7HEiBD/4bwMMrRb9j0/ZkVZYGbQAUsu6sq GWmtikHtLii4bzA5CYZJs4OdZzHVyIk9pVIO/V3wOYrKR9dJGSK1fcQx78x0EXrEBk3d U4FnNhgPjH61gxu3titlot7VLdhFgqAMdHon9LvzqUmKZ2DNEY4Z1DIC0rkQQvV8OHZR 3eQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409358; x=1758014158; 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=imvYh5lR/dHX9OHCZw7SQaMxZ7ezZGMquKjwxXrqu/k=; b=fPAWo1n232lj7eESf2OhwTQq2DrQLmQmfaL019MeAi53aTaS26PTo+ZMIYKAd/lIvp ghNg03Yqt3hUydweWAncXgd8begGxkHhaxv7Sih2xVoZ3zSY3LzXCzDZhKFxSlCHXUPt lvrcVE4+pSwpzQUssIjffe1l6KBWwMlgNv4WYyTKAcpB144WPyXsKzYygEeNChaJwWpH nptb+gZnmC6wnr1sp1rdDCf4x53d4RUjFaQNT0t19BmRcO+AiZ+LLNs7KIqFB8X/RYkn 8Tjyyno4cyH+JpjVJYuSjLSbLq2G5ybcAyVpd00q9HGlliBAF7HGjY8nnQ92TKvy37KP L9DQ== X-Forwarded-Encrypted: i=1; AJvYcCXe0O9IjVRvP0J8wsL/ETIRDgFIrypxh3imKDMeoQ10DWvjMyAOHWUmgdtLay/YwkMB8uE/2qiSzeZq6Q0=@vger.kernel.org X-Gm-Message-State: AOJu0YwPzmJARjTT9U4wxNpQxEKT79KigSay3deE+gll2GDQ6Y5yPB1n 1JyoUJ63xYfFDdaC2e9VFgyqUjuT9R8wzR33X+N9f2WWUWsEetn+jPfoqtY4Vbl7hPk= X-Gm-Gg: ASbGncu3eu1E/UkWfsC6XiCy0YGJHkHAOgxdlZBDJQfN+vTMDA/Z22tjfIETJi7yeBK EvHA+VLWL8qx3MvSvTWJay5scPeSkxUsowSMWZfmOUMMB7Ah6OkNjeZ48RNrrWhLy1zAkm+YztG FH/bHFv86YqPCRMXzHzzMeIV3skY3hFNl9swzlu+DacGXK88PAkUjo7wg/ayYatpLEYFar1WLv3 +mbCCQnwAVzqgerXrOs6fBGOg8LJuMEGG4O02MlVWx6az+XWSLYgHk5UHj0aJzl7qFTa/go97bH oayfvN5+S01O3nkRDwRs0/34VzOPODT/9Kjf7elvuqYX6IbI4bkU/JqFI4HuYP0INUoamo5F0Fb MaxGW3eut67dTzjU89g== X-Google-Smtp-Source: AGHT+IFXdZbV4+FiR+g1iDJ8jJCYsBpu7n34tdX+VbMu0cFX2kWCDQk+M9AJM+qd4ppleGeZ928X+w== X-Received: by 2002:a05:6000:2f86:b0:3da:484a:3109 with SMTP id ffacd0b85a97d-3e6462581b8mr10915610f8f.38.1757409358327; Tue, 09 Sep 2025 02:15:58 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:56 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:35 +0200 Subject: [PATCH 08/15] gpio: mt7621: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-8-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4763; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=M1OC3OhNMgxsP5tAU1lwG6NLBHcwqFdL7D8NR7XeUHg=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A4aZdax70K5uQfOmnaoQXt7HkrYee5gxJRb 6C6qpw21tGJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOAAKCRARpy6gFHHX crGMEACO4tQW9r/dZEd11av+YA6qbWLWsdG+wUB7P/ckV/W+L99g0jDIZ8ZxwasnJyqD7RyZ00E 2DEUCCF/TkBEvZF7s7iZfVuIKwjGb27+59KWDM0loRrPE0MNZSmAB1lxSKe9LglSlOINSmKRTXw cRa4kQ/Df8O9mz3y7wSQ41HUnv62dRhoaPmREqSENbZMGTSumq463FnVOI60KiaL5I1eICCWVd/ uPU3dDiBTgtU9/QSsR2NEXM0jV8X4U86r+jVKCTkP30c13kD5l2fQq6XQe5YCWE9Ltd9meCLkFK laYeyO1mk6xHPgr9mik32wx/m9wbwoSgyyRotGrxmOgZCWMrk86iSx9nilpAFuSW2KBcaGpWEQo AZ0hPY2YNCR3BivREbh9xKPwPn0e5MxKFJLGzHnSnVFCw1J87ALf7Djs1Eh+HWDd9LF2rg+Vjo4 8VXPgfe37EZHRKPe1Bw6mosIGM0U4CpTYk6VY+HYU6rM7lJios/x3nfhWnOFj526OHEdDCooA0f m/W8+zKBpULtaJbckno/1b1OdvacZ/zfYHxVMjlL7ihR1hCRkFvw7sCzJIE3pDfPQuMv2u3cc+o 4kVW5zkUcdATe1gdK8LcNb1p4slcV1povBGAcHVdWCWUYcyLHMknJ7ZOgvxFCP4hDT2g9MO5N5u v0s8Kkc0/dHTi4w== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski Reviewed-by: Sergio Paracuellos --- drivers/gpio/gpio-mt7621.c | 51 +++++++++++++++++++++++++++++-------------= ---- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/drivers/gpio/gpio-mt7621.c b/drivers/gpio/gpio-mt7621.c index 93facbebb80efadbdd3fb4500e0db14936287f1a..ed444cc8bc7c2b921be6588ce85= 0027a2e3088b4 100644 --- a/drivers/gpio/gpio-mt7621.c +++ b/drivers/gpio/gpio-mt7621.c @@ -6,6 +6,7 @@ =20 #include #include +#include #include #include #include @@ -30,7 +31,7 @@ =20 struct mtk_gc { struct irq_chip irq_chip; - struct gpio_chip chip; + struct gpio_generic_chip chip; spinlock_t lock; int bank; u32 rising; @@ -59,27 +60,29 @@ struct mtk { static inline struct mtk_gc * to_mediatek_gpio(struct gpio_chip *chip) { - return container_of(chip, struct mtk_gc, chip); + struct gpio_generic_chip *gen_gc =3D to_gpio_generic_chip(chip); + + return container_of(gen_gc, struct mtk_gc, chip); } =20 static inline void mtk_gpio_w32(struct mtk_gc *rg, u32 offset, u32 val) { - struct gpio_chip *gc =3D &rg->chip; + struct gpio_chip *gc =3D &rg->chip.gc; struct mtk *mtk =3D gpiochip_get_data(gc); =20 offset =3D (rg->bank * GPIO_BANK_STRIDE) + offset; - gc->write_reg(mtk->base + offset, val); + gpio_generic_write_reg(&rg->chip, mtk->base + offset, val); } =20 static inline u32 mtk_gpio_r32(struct mtk_gc *rg, u32 offset) { - struct gpio_chip *gc =3D &rg->chip; + struct gpio_chip *gc =3D &rg->chip.gc; struct mtk *mtk =3D gpiochip_get_data(gc); =20 offset =3D (rg->bank * GPIO_BANK_STRIDE) + offset; - return gc->read_reg(mtk->base + offset); + return gpio_generic_read_reg(&rg->chip, mtk->base + offset); } =20 static irqreturn_t @@ -220,6 +223,7 @@ static const struct irq_chip mt7621_irq_chip =3D { static int mediatek_gpio_bank_probe(struct device *dev, int bank) { + struct gpio_generic_chip_config config; struct mtk *mtk =3D dev_get_drvdata(dev); struct mtk_gc *rg; void __iomem *dat, *set, *ctrl, *diro; @@ -236,21 +240,30 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) ctrl =3D mtk->base + GPIO_REG_DCLR + (rg->bank * GPIO_BANK_STRIDE); diro =3D mtk->base + GPIO_REG_CTRL + (rg->bank * GPIO_BANK_STRIDE); =20 - ret =3D bgpio_init(&rg->chip, dev, 4, dat, set, ctrl, diro, NULL, - BGPIOF_NO_SET_ON_INPUT); + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D 4, + .dat =3D dat, + .set =3D set, + .clr =3D ctrl, + .dirout =3D diro, + .flags =3D BGPIOF_NO_SET_ON_INPUT, + }; + + ret =3D gpio_generic_chip_init(&rg->chip, &config); if (ret) { - dev_err(dev, "bgpio_init() failed\n"); + dev_err(dev, "failed to initialize generic GPIO chip\n"); return ret; } =20 - rg->chip.of_gpio_n_cells =3D 2; - rg->chip.of_xlate =3D mediatek_gpio_xlate; - rg->chip.label =3D devm_kasprintf(dev, GFP_KERNEL, "%s-bank%d", + rg->chip.gc.of_gpio_n_cells =3D 2; + rg->chip.gc.of_xlate =3D mediatek_gpio_xlate; + rg->chip.gc.label =3D devm_kasprintf(dev, GFP_KERNEL, "%s-bank%d", dev_name(dev), bank); - if (!rg->chip.label) + if (!rg->chip.gc.label) return -ENOMEM; =20 - rg->chip.offset =3D bank * MTK_BANK_WIDTH; + rg->chip.gc.offset =3D bank * MTK_BANK_WIDTH; =20 if (mtk->gpio_irq) { struct gpio_irq_chip *girq; @@ -261,7 +274,7 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) */ ret =3D devm_request_irq(dev, mtk->gpio_irq, mediatek_gpio_irq_handler, IRQF_SHARED, - rg->chip.label, &rg->chip); + rg->chip.gc.label, &rg->chip.gc); =20 if (ret) { dev_err(dev, "Error requesting IRQ %d: %d\n", @@ -269,7 +282,7 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) return ret; } =20 - girq =3D &rg->chip.irq; + girq =3D &rg->chip.gc.irq; gpio_irq_chip_set_chip(girq, &mt7621_irq_chip); /* This will let us handle the parent IRQ in the driver */ girq->parent_handler =3D NULL; @@ -279,17 +292,17 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) girq->handler =3D handle_simple_irq; } =20 - ret =3D devm_gpiochip_add_data(dev, &rg->chip, mtk); + ret =3D devm_gpiochip_add_data(dev, &rg->chip.gc, mtk); if (ret < 0) { dev_err(dev, "Could not register gpio %d, ret=3D%d\n", - rg->chip.ngpio, ret); + rg->chip.gc.ngpio, ret); return ret; } =20 /* set polarity to low for all gpios */ mtk_gpio_w32(rg, GPIO_REG_POL, 0); =20 - dev_info(dev, "registering %d gpios\n", rg->chip.ngpio); + dev_info(dev, "registering %d gpios\n", rg->chip.gc.ngpio); =20 return 0; } --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 EC72030AD16 for ; Tue, 9 Sep 2025 09:16:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409364; cv=none; b=L/Ew2Fq1y9Or+3LALET6Jl7p4GNPQKYSPf4kGYGQhbNz6i7PeqHDDAq9cyiLvTHmfbCnBOkMm1KkRyLMq/nuAp4KJXbBUV1lT/1CO8uQ396hYxpPTPeNtgARw1zBNjLMjTq7hJz4ffaNV72rA6Aeu4PKFODYYfdRa1mqU+Okijo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409364; c=relaxed/simple; bh=mT4HHJlQwDtBRNGtv0Vlu1Vz/E9b0L/SsnLUi3FcPmQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VaAxnse9MkwFHKNrnvhxVd8VBAd2YG9MS/W7tBB0yve4aZLror7x2YDSPNb/xlnq9cd6kpm9Pq3oNS52lYXEuilUzHP8S37VsXNw4Z8lTCowQWncTCZGtBSEN7RnCfGfzm1APayg8dafJNbx2ymfWWHgp1RU1XGC8o+KsMyVZcI= 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=tKTq4F0o; arc=none smtp.client-ip=209.85.221.43 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="tKTq4F0o" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-3df35a67434so3348250f8f.3 for ; Tue, 09 Sep 2025 02:16:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409360; x=1758014160; 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=KL9vzdB3rn5rw8BZuNP7vkkI7cxEgPULxm91j0nzvgM=; b=tKTq4F0og357Q/mJXQWi14Ypo7+WxyHKu154SFIzaab37IghP6Af9hySDcxelnyeH3 +RmlUd1sfNClvc/d1aVNGjsfQOPX2r8KGHfiVhIC1hDI4W+TdjYDI2kEFMimKDYh8SgD IciAY+HyM/0RmYiwe7OqzxT9WgHMiU8xtBvl06iKrQ4K8Cd2shmlB1O2yJXhHqsZznv0 Js6CgqkMwDYG2yP23Qp2T2QhFvW8IiILRDfNH3jVf7rz5+rhwuj7p7+ImsqP24V2hGOD XDtStfwgQkc2MnnvKgSBbMRT43a5Muf0qP7uCe4lG0IkIdi7k5ybFBtoyGzyRIekw1IH AAKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409360; x=1758014160; 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=KL9vzdB3rn5rw8BZuNP7vkkI7cxEgPULxm91j0nzvgM=; b=dfSk2QLij6xrw2q7zhVobEs3vGVdPpgU68GbBCz1lBuHlKIjlUx7CENyQWmHPxyZrS VVJ2Pr194DVymjy5tTqVTyKdD42K0ZKxvEJv9plyLDUgc5d5PthjwkjBZWlt2fbnOLrV zp8DnjWJOYMXwdBlbsm4z6aVxO8PLYJo+fi5kq/rcneOXrfcnaQ2dZsABXA1q68RYGRr xuDdQq2BNCz5SZSbXXuSnS6HWEVrms6/4b2ZvgszbdqoPbui2LXTt2/2raki3UFWmrKP hL0xFECzC1kePaTsDA/4NgKzR1bbt8cTEtm9HnIwZwmn4FanUc04eCdFbl6Z7oGyEfhi 79Zw== X-Forwarded-Encrypted: i=1; AJvYcCUCIu6C2srh4bF0au2ffqPWV2ehjBkXR2s1Z8nKAT+oFuTsRSMtULX5Cja8FSEbCedIA96kZjValyT4EMM=@vger.kernel.org X-Gm-Message-State: AOJu0YxR5rpDrVjGnXL9hg1xKw58+aaUopr8fxgpwCXBuapPlrZMBBCR mCuszCDWe1DfhDOylIMTZD1mqbyAx90gCCGQX3SZnSy9N9jhtPbrtZZ4U6tey4tVsrA= X-Gm-Gg: ASbGncu6EmdLmTPjvhoIMH/dqUp6TM4GbUbTplb55mDKTwXANmlRoXXdOTooA6avEJ3 0IvjGLe2ibMnaLfaiSTHSgyIhZUxaN3Ae+CCahDqsh8aaMmMFB6hs6hgs5tXLVJfs4UwjbWa01p uoktjSm8c5MFN5eXGCTXx3kfZ9PR9+6fC52H7FaRjY7qwypBxHYg0Zus4RjT38RIOEuMD1sQ64P 7z15MRBzpd3cAs6F7LoC0gNg9pQvAtVT4Jst7Dmz2txzxxrNkNeRZUjMXpXUERruY02S/6CV98I iOuh0L92N/5LMIYzjaHz6eWgz7Hf6lzuw7pIhRMNZtsNMqcaGQA0JrMtz/PxeJzAu1XprHgOIcb PTaM1hvf6qtmyjWCvt0gskIIbQAs2 X-Google-Smtp-Source: AGHT+IElprL5INRLVNJ+11qN0fy1HYZVdF9Hf2dkjaJyGXUISCK8Dqmmny10BUou6nIZqG3u9n4RWw== X-Received: by 2002:a5d:5d82:0:b0:3e0:152a:87be with SMTP id ffacd0b85a97d-3e637465896mr7665428f8f.7.1757409360205; Tue, 09 Sep 2025 02:16:00 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.15.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:15:59 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:36 +0200 Subject: [PATCH 09/15] gpio: mt7621: use the generic GPIO chip lock for IRQ handling 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: <20250909-gpio-mmio-gpio-conv-part4-v1-9-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3466; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=Oz11Eo/choziEy0hLlcQbOcdTEl544VmwNckDeQn6Nk=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A56zsdMufj8Pobta094n4YAfVek1kM5dHRc 3RuFMo6rwSJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOQAKCRARpy6gFHHX ck/ZD/9kOmHM3sCPOzZ+PtF9D6Vwe/xJuMOGBuy7kR2ISYdA+n+r8GKYNFFP4nYxlpgWmS5AZ4C 1x73FaP/rL03yvk6FmCRR59qwYYDoXzEvbeFkTQSNWh8LcZqRbR+l+/X5WEU9iRD3ascVlVF2+T D/Av/HOzNB0FQAHl8VB+63yHTVFDb2Izvfzk5Pc0f3uqSi6V6pLBst+R3HYv0s2yTQGqFelWKYp 7raUH5xD0PLH2jiT9I80GASVctUKzPa2att4UUNaUl8t7veUxmRpdS/ZW9G1HwZS2OGvWHgdO8G zVARPtwdMr3nnIJL5da+yR38xhYniIU1tzKoYEkiFgZTyPUU/zIERxM9qHxq6oR+diGqaafx0Ma GF14s5chu1Di4MmgXJqoMcgeqNr5jWoswrVJLNron55YH+qCfah7n4ggD7plduSdtTvLnqHisYK +JXSAFqMchoqJajC2TS/z8xeJQ+2AfOsqKOqWawCCU/YLFPLotCX8UxcpnHeMAvjEaYBIn6Ilyv muINEZGvCBa/g8CGMcQzNwC1/x+79zqzAnQuahwXnKcHGzYPYT+8YfySJ6gs44DLHnLg3PXlp4M NfNd/bHJRWZIIjENkPi+B2+g6hvot/8XR+7fDQmoM/JaklpmUa2L9WV/IDYk1iWPO9aQ4RwTxUj scKngBko4gL2BHA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski This driver uses its own spinlock in interrupt routines while the generic GPIO chip callbacks use a separate one. This is, of course, racy so use the fact that the lock in generic GPIO chip is also a spinlock and convert the interrupt handling functions in this module to using the provided generic GPIO chip locking API. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-mt7621.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/drivers/gpio/gpio-mt7621.c b/drivers/gpio/gpio-mt7621.c index ed444cc8bc7c2b921be6588ce850027a2e3088b4..31736f12ca100ef615d4aa4b2c9= 68db6b58ef4e1 100644 --- a/drivers/gpio/gpio-mt7621.c +++ b/drivers/gpio/gpio-mt7621.c @@ -11,7 +11,6 @@ #include #include #include -#include =20 #define MTK_BANK_CNT 3 #define MTK_BANK_WIDTH 32 @@ -32,7 +31,6 @@ struct mtk_gc { struct irq_chip irq_chip; struct gpio_generic_chip chip; - spinlock_t lock; int bank; u32 rising; u32 falling; @@ -111,12 +109,12 @@ mediatek_gpio_irq_unmask(struct irq_data *d) struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); struct mtk_gc *rg =3D to_mediatek_gpio(gc); int pin =3D d->hwirq; - unsigned long flags; u32 rise, fall, high, low; =20 gpiochip_enable_irq(gc, d->hwirq); =20 - spin_lock_irqsave(&rg->lock, flags); + guard(gpio_generic_lock_irqsave)(&rg->chip); + rise =3D mtk_gpio_r32(rg, GPIO_REG_REDGE); fall =3D mtk_gpio_r32(rg, GPIO_REG_FEDGE); high =3D mtk_gpio_r32(rg, GPIO_REG_HLVL); @@ -125,7 +123,6 @@ mediatek_gpio_irq_unmask(struct irq_data *d) mtk_gpio_w32(rg, GPIO_REG_FEDGE, fall | (BIT(pin) & rg->falling)); mtk_gpio_w32(rg, GPIO_REG_HLVL, high | (BIT(pin) & rg->hlevel)); mtk_gpio_w32(rg, GPIO_REG_LLVL, low | (BIT(pin) & rg->llevel)); - spin_unlock_irqrestore(&rg->lock, flags); } =20 static void @@ -134,19 +131,18 @@ mediatek_gpio_irq_mask(struct irq_data *d) struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); struct mtk_gc *rg =3D to_mediatek_gpio(gc); int pin =3D d->hwirq; - unsigned long flags; u32 rise, fall, high, low; =20 - spin_lock_irqsave(&rg->lock, flags); - rise =3D mtk_gpio_r32(rg, GPIO_REG_REDGE); - fall =3D mtk_gpio_r32(rg, GPIO_REG_FEDGE); - high =3D mtk_gpio_r32(rg, GPIO_REG_HLVL); - low =3D mtk_gpio_r32(rg, GPIO_REG_LLVL); - mtk_gpio_w32(rg, GPIO_REG_FEDGE, fall & ~BIT(pin)); - mtk_gpio_w32(rg, GPIO_REG_REDGE, rise & ~BIT(pin)); - mtk_gpio_w32(rg, GPIO_REG_HLVL, high & ~BIT(pin)); - mtk_gpio_w32(rg, GPIO_REG_LLVL, low & ~BIT(pin)); - spin_unlock_irqrestore(&rg->lock, flags); + scoped_guard(gpio_generic_lock_irqsave, &rg->chip) { + rise =3D mtk_gpio_r32(rg, GPIO_REG_REDGE); + fall =3D mtk_gpio_r32(rg, GPIO_REG_FEDGE); + high =3D mtk_gpio_r32(rg, GPIO_REG_HLVL); + low =3D mtk_gpio_r32(rg, GPIO_REG_LLVL); + mtk_gpio_w32(rg, GPIO_REG_FEDGE, fall & ~BIT(pin)); + mtk_gpio_w32(rg, GPIO_REG_REDGE, rise & ~BIT(pin)); + mtk_gpio_w32(rg, GPIO_REG_HLVL, high & ~BIT(pin)); + mtk_gpio_w32(rg, GPIO_REG_LLVL, low & ~BIT(pin)); + } =20 gpiochip_disable_irq(gc, d->hwirq); } @@ -232,7 +228,6 @@ mediatek_gpio_bank_probe(struct device *dev, int bank) rg =3D &mtk->gc_map[bank]; memset(rg, 0, sizeof(*rg)); =20 - spin_lock_init(&rg->lock); rg->bank =3D bank; =20 dat =3D mtk->base + GPIO_REG_DATA + (rg->bank * GPIO_BANK_STRIDE); --=20 2.48.1 From nobody Thu Oct 2 23:57:55 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 E8609308F0A for ; Tue, 9 Sep 2025 09:16:03 +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=1757409366; cv=none; b=oyEcDXXbXOAreo9gbskqrtjfJ8PkE66QSJ+zVix1E+psOHgs69rKHaKoMyYVtbI7nNOjHA1ubk010Zil4duPKvlKT2KSzG3TH/o8L0wUwYDBNO4o7CxikkmB0N0JOH81t9S9hgpUZ5nU16gaV6vUpp9kVDLiKcVkGUUt8Dk/eSE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409366; c=relaxed/simple; bh=jG8CMLb4inMj87fVDZoRGePD2w1MG5h8a/maIqRELGQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qvi6D9CFITWGMxTTS6IqHkLRe/uTqEHctDGbiZ0G+AR494IrZw5VaP4oEPVWlVWIns/BsQ6FIj1aO4NWy/BpKGtv3FzIu6UWmyHEL5YGb6Q4U8AgIewKAX4X5pUVAbl3ELnSb2OIwKaOfKtvYdifP1OSfp6IoDj035WQvRmjhlY= 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=qLQCjz4N; 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="qLQCjz4N" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3c46686d1e6so3492371f8f.3 for ; Tue, 09 Sep 2025 02:16:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409362; x=1758014162; 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=bzDGMJfmWh4iChkJ6qtmNZIGp6yJhGT0+TEuoPl0ljI=; b=qLQCjz4NHkPGrOnd5Dy/eX7EKQ4yZXSrWw5rCOqy9qi6vgHfCCS/+Q9uV6+2IQqj7O HWIuNw+bvR8ot9TTIEhCblgIoKhacwI6CpgIx/rTVG91OTtB3asFod88ga8QQwxEiodr TYMQx2A5ycJiL6pU5Tgmrnr4BLxnsAmaQef879qaVVw9Xh7SBru1b619sBIydRh8TvD+ wWe6qCoQwn7QqHu/DsXvMyijBTXzGG3Eiaqd/8NXNgq6po3gFpWD5mpkCKzIu1dG5SdB yeYQg8/7OUDxWs5vgGRjMfH+rfjHDgcMjxm3lWZXTFnBh8HdA7IGTWyio5yJgYqO+qEY N83g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409362; x=1758014162; 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=bzDGMJfmWh4iChkJ6qtmNZIGp6yJhGT0+TEuoPl0ljI=; b=XgWTP1sLVZwI0A0aTq3FH9BKxFWqO3VhxxpgaXdlGNEmwrm3Pm58bRkA8O71SYdvIj r7vUwSTxMIxDP3RJNwgmABqwpTC6Ms6HDwMTTMm7TBmD3STeUMUFgiM7Zb26eVlPv3V3 PmtoOZxiHEmtFau+GQJL/aU7Pk3NFUsqDzcU7Sw9ac43vs/A1A82AYYSGw6jAtBPiHKg yb3U9h/dt/C1fxfPMCHuER6Vcc8mLxrWiYSL+8+1bb39UamXNP/Dxr/0FBiI9/lLalYu ZNWasM95YnWvpE/mMwubqBBic0+/5a3x8ul2Lrn+qy+Jj+7qg0bkcTbQ6X6eNZHzcvg2 CUJQ== X-Forwarded-Encrypted: i=1; AJvYcCUNxVx372vNJ6NTykysSJWC/p7mP3MDHsrz04/aSS9FedABxykDUqaBStyUQkFEo3t0szxU8DhKbfLvZVQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yzp3sX4iQB+x5+Fb7+wBB30IW4ltSP8oaUvp8nXQCH4nTafQwau d1DSddPF4As/lOSrtO8A4XlR/szw5rkcnsB4sfobGcLpyJZVMI4BQ0iPq37ZavwLhdg= X-Gm-Gg: ASbGncvp2L62HjVScseDMDRMJZHbDiXzmMtXs61TfOc0xdbKmhI2PFuXGd03QC0CryC xfuK1c/NB19SbbS3nMQTBfkbhiu3eQgQkCRZcoxPLY9zUzTGK2zmMxgqcSNV+Ri0ZZx9sUuj6aO vvBzxY4KGBSkIYuXOHZzcr5JVaDlz5lKvKi8pHAN4briSadWRNEuw0SxWefjaCh4XTHPpcGwPgN ETJAG+PvpVZe72/Xrjw7gA1b9mgKBLdrXkVzhons3mw1hbKp6SVA8ZdQ4StArQCEedEa41e5npz 07JMKeMXYlnDzTKNletHWTU70Olh3fjIMBCZ7ZvACYk/rApZFUWemD58AnTWaG7FlQ/3p7JaofP q3rfjKX25Xiv3D+fZ6vuxlga2Eh4p X-Google-Smtp-Source: AGHT+IEXdV8NISTEczU1VIRow+5p3wj26/zBGlI6Z3gmRyg6ivq5S1t8D83LU8LnUsvQNLDOuZ4iCg== X-Received: by 2002:a05:6000:1ac6:b0:3e2:da00:44af with SMTP id ffacd0b85a97d-3e64317f1b0mr9908320f8f.36.1757409362157; Tue, 09 Sep 2025 02:16:02 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.16.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:16:00 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:37 +0200 Subject: [PATCH 10/15] gpio: menz127: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-10-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3332; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=Lx7WAwqP3xPk38b+MFE7x8Xw00e0BMog5eP3WfeiT9s=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A533XVMdjGZ1Cis8dHGgNwfAnmr6Mx6nPBe og/XTnFC0uJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOQAKCRARpy6gFHHX cvK3D/90zMG5N+5srxcF6cRvLhIl8gvluNWyjhGAirS1cpIR4x4XFqa1JRSvlICISA4EibUfKNJ PCqqwF+Ps0Sb0gxGvXIdzYawaenP1Ay9crGgWCG8dqA5Oh9GGEe1sAJ3fj+b7hBDr0bKiquZZZT qm8UPST9YGHy0qZh+xOow62KdkczRxAojMDQLZh5bNe/oCV04FO+Fi2fM8DdLa/t5tIjf7F2LgB x6h9uqy3ExyQRUSRz+yuRRbcf8RmRlNHgEWPxdT/3e82BmiIc1xpTXsQbELVgTrsgj3e7BS7LbL u1JuLGpx8VAQiDvKnl89BJUWTfjk1O22JRpUP1mWMrVgOcg7mB2OSrtIK/ddsW5l0rrC59Gmjk1 qaeMlSXWkhqF29/nX3L9M9rKbGqUuZHBaVvBOvLRP4Xd9268YY19a70HNS76Wwt4rm2E0zsrkOH Cbic63a0LkP3gvP4WK+77qLsClCFZZwuKZGK4SYbDmK707BXh3JfQmdYoBi9czJtf53Man5JhgA niTsF3TUxsHuWNE13i0oWRxrsXAxGUlQk9nCxmJM7Edlm/ds70XygZ/W9iWscyAP2fou3Kx8RAc k0YZYHnRPLejEZmL7Zkig/YHgd750jS6if4fIrKfPjQVHCq8sRJM1mQwOksrvpikMmw2E9pyu3U 8yS9x2NzZmFxfng== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-menz127.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/drivers/gpio/gpio-menz127.c b/drivers/gpio/gpio-menz127.c index ebe5da4933bce730c70f83c1c0f86fc4a4cc9906..27cdbc36a5fd468dfcf9e002965= 1c8d22e176f56 100644 --- a/drivers/gpio/gpio-menz127.c +++ b/drivers/gpio/gpio-menz127.c @@ -12,6 +12,7 @@ #include #include #include +#include =20 #define MEN_Z127_CTRL 0x00 #define MEN_Z127_PSR 0x04 @@ -30,7 +31,7 @@ (db <=3D MEN_Z127_DB_MAX_US)) =20 struct men_z127_gpio { - struct gpio_chip gc; + struct gpio_generic_chip chip; void __iomem *reg_base; struct resource *mem; }; @@ -64,7 +65,7 @@ static int men_z127_debounce(struct gpio_chip *gc, unsign= ed gpio, debounce /=3D 50; } =20 - raw_spin_lock(&gc->bgpio_lock); + guard(gpio_generic_lock)(&priv->chip); =20 db_en =3D readl(priv->reg_base + MEN_Z127_DBER); =20 @@ -79,8 +80,6 @@ static int men_z127_debounce(struct gpio_chip *gc, unsign= ed gpio, writel(db_en, priv->reg_base + MEN_Z127_DBER); writel(db_cnt, priv->reg_base + GPIO_TO_DBCNT_REG(gpio)); =20 - raw_spin_unlock(&gc->bgpio_lock); - return 0; } =20 @@ -91,7 +90,8 @@ static int men_z127_set_single_ended(struct gpio_chip *gc, struct men_z127_gpio *priv =3D gpiochip_get_data(gc); u32 od_en; =20 - raw_spin_lock(&gc->bgpio_lock); + guard(gpio_generic_lock)(&priv->chip); + od_en =3D readl(priv->reg_base + MEN_Z127_ODER); =20 if (param =3D=3D PIN_CONFIG_DRIVE_OPEN_DRAIN) @@ -101,7 +101,6 @@ static int men_z127_set_single_ended(struct gpio_chip *= gc, od_en &=3D ~BIT(offset); =20 writel(od_en, priv->reg_base + MEN_Z127_ODER); - raw_spin_unlock(&gc->bgpio_lock); =20 return 0; } @@ -137,6 +136,7 @@ static void men_z127_release_mem(void *data) static int men_z127_probe(struct mcb_device *mdev, const struct mcb_device_id *id) { + struct gpio_generic_chip_config config; struct men_z127_gpio *men_z127_gpio; struct device *dev =3D &mdev->dev; int ret; @@ -163,18 +163,21 @@ static int men_z127_probe(struct mcb_device *mdev, =20 mcb_set_drvdata(mdev, men_z127_gpio); =20 - ret =3D bgpio_init(&men_z127_gpio->gc, &mdev->dev, 4, - men_z127_gpio->reg_base + MEN_Z127_PSR, - men_z127_gpio->reg_base + MEN_Z127_CTRL, - NULL, - men_z127_gpio->reg_base + MEN_Z127_GPIODR, - NULL, 0); + config =3D (typeof(config)){ + .dev =3D &mdev->dev, + .sz =3D 4, + .dat =3D men_z127_gpio->reg_base + MEN_Z127_PSR, + .set =3D men_z127_gpio->reg_base + MEN_Z127_CTRL, + .dirout =3D men_z127_gpio->reg_base + MEN_Z127_GPIODR, + }; + + ret =3D gpio_generic_chip_init(&men_z127_gpio->chip, &config); if (ret) return ret; =20 - men_z127_gpio->gc.set_config =3D men_z127_set_config; + men_z127_gpio->chip.gc.set_config =3D men_z127_set_config; =20 - ret =3D devm_gpiochip_add_data(dev, &men_z127_gpio->gc, men_z127_gpio); + ret =3D devm_gpiochip_add_data(dev, &men_z127_gpio->chip.gc, men_z127_gpi= o); if (ret) return dev_err_probe(dev, ret, "failed to register MEN 16Z127 GPIO controller"); --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.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 CBAB230B534 for ; Tue, 9 Sep 2025 09:16:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409369; cv=none; b=fklwPTc421TlXdwTU1kdGvpwRIGI+XqD9MbBDNY33XJL5n4Nhj4h15E0F2an2aAGxiWMmu8sgI6H5PfiGmUb3xzA8kCaTvrwMKo9t4WFaECGA7XBbngFV5ybYExRM62hMD0d5/C7EwE0DAEWZ5Mgl1HRhcGItph/z06n8HpeYdQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409369; c=relaxed/simple; bh=YHCDclMZWYBHiDakJuHyUUOzgFbXdibwObNF9cKGOLE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ttK/gQ5YjMfbywiD3XSFP5eui4tWh027NF+m0FPlbf+8g0/g5eYZvzDaNI3R908Ht4srfNTfiTy8MJYRJLFBKgNU44daMjzF1+JTImnV+NWQrp0snsktu8VVNsgoFCLPEC7YZLPavrQvlKFgRIrZR+Wo2GLf4eh7Qtn4HHzvh4Q= 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=GMuSDjPd; arc=none smtp.client-ip=209.85.221.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="GMuSDjPd" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3e5190bca95so1861011f8f.0 for ; Tue, 09 Sep 2025 02:16:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409364; x=1758014164; 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=0VwQnMFFQUbJBhEJZKQm6c3MliGwPjiIRbJeY0+XPvc=; b=GMuSDjPd+RcpepgIm4hszzrxYZizrDPODw7QME5bzWjRi/p9n1mhrqybne48g70qh+ wWUonCaLd9ekTmqReWDu1ThdGccL030CJ63x/nfOJw+oT+tJQgrTi/p15IdhLY0hxFbm YNFy6DcE8tBBM2r3c5LqGpY3aH832n7Y/ps0B27jmTChKjIwF8Wdlrvk9LI7owdZWIRM HZfxoR0HW2ICdgDvSxOaCG8J6gwPCbQ/idaI5OimwoC2cU5X/Cuy9YHZ5LSNKScJqfyD P9kdMBLTFpBdZLAF8D8eoztL12eTQR2QtjyuD0InsjrJRsRGf7pj7i4D7+dwOTmKoqnL AIVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409364; x=1758014164; 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=0VwQnMFFQUbJBhEJZKQm6c3MliGwPjiIRbJeY0+XPvc=; b=dijAOXeTFLQDsuNzg+/O06CHFW1G5xct3e80KHVdoiEei6W+WmECIDkaqtGLmBfRq1 gczox57iTR1VYCaWSyRGbUn6karMIRJwffOfF6fCG/kVJ2W8Wu7BIx1dvdw7IXKVc1hm BPjFemX4b1k6xsLMMTzCicu2hoU7MR2t9tOg/cvbzBQXkYZcwE4zlYfna+lmQK1fKqAy gjr299DDvxHwzKWBD9X3tyStlGxPNYWYH46yuBFcHsMJ7jWia4QPfVoel8kyYlzv9hSw 8wmCqWXTxgD4QPrSWj0PXG1ijIyfsZNTuaGDVbR7y8tLWIbAR2At3EnGsDgU34GkVb5E Fmlg== X-Forwarded-Encrypted: i=1; AJvYcCVDMLzBEFfBh1fE+UzAA1xzFQOdPN6/P5t198UAkc2Tks1+Wsv1g7wqahnE0wuvS1FGOcnSwDi41aM4Lno=@vger.kernel.org X-Gm-Message-State: AOJu0YzN0WeO6Rz9OZk0S++7QvFOKG3CfsgJAsQLtzt3JtbdDcSFGhMz rDKFTzi8QiDpTdlqO+tlFTIi4M/voqxMQXZwbjyDYQTR3wduhPW4l/UfhohjAFSpkHw= X-Gm-Gg: ASbGncusa2+oM5q0SAudO6r4Ok1FOu7izLzWUbHE2xsT6E/Nx+b5Ym+edlajh9NdJ6x /150o68nHSFu67LtW/NoJnL0p20BiB26W7a7T9O8gyLWQ3PfwQgsRZnaMxXZpXDvD93GaDJFi1M VU5dc3u/fOzxUZ69WnKb6Zx5NGrO1NslbnPqGYlbrJ1qR5tlboclEiMv3M+QsxOvNSuTVZWKvL7 k0OdX3upDqEibWQeono0J3SwcoB2O2uUOGksODRmaDt3WJ1UwNzCGyAtnOMrWXemC5j9doVWVQ7 mz7QY2xeB686wTBV/BBxcPhOPEiEk1Itu5sx39CLH8t1r5D3Xaa6Z4Lvzqb/PNPZDKrPHLbFw73 NCQeRUrTOaOlMosnhJQ== X-Google-Smtp-Source: AGHT+IGSoxbk5sH0hMOySaw2VZsrge4cwThUG4Xe74T/OfiVTIcnZT3WjcEd/0+Yql9jfkf8sxO4lQ== X-Received: by 2002:a05:6000:2c02:b0:3e7:4835:8eab with SMTP id ffacd0b85a97d-3e7483594c6mr5567609f8f.6.1757409364085; Tue, 09 Sep 2025 02:16:04 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.16.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:16:02 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:38 +0200 Subject: [PATCH 11/15] gpio: sifive: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-11-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6420; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=/rxFAj2OADgDUL6LIIa7xxiLekFYD7JnAKzsE5ctpDE=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A6EyJpcO128tCwjMCd1RkR25TZMB81unx5s eXDdbnNcyuJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOgAKCRARpy6gFHHX cgGED/9FeSGkmGNg2EwnlMYXHTeuncfNpcU+URNlNHzV5moJDeqP5Jcdq2gkGu4eZWS4s/RSYS+ uzqOnYP4B/+yZWqNCJV6koa4fyCCMPUSnl8vNFE0+sn7b0TQwQEjFotjBrmcuFefH043O0+OgVH 5O4/TrWmKig8t9Q91Fd891R2HPyfnf/VHC0uokZBlyP+MNveQUnXtyWXSJzH/VCr2rXM9KhKS1/ 8BLs5SCXZHRd3wHL8ARw+0y4hR4dDvAzBLhHG0bdGOhqAGlN+UGUQ5AAgL6itzzMSnu8fmun8m8 SVroKjYq1jSMIpPWw83EIXGo15EK1Ct998onKm5hm0CQ7Cl6QhNtglDmZfLBuYWUQPu58AE7AT6 agpeRAQESZNCyNy+QkyHlvbSL4XLwI6w2OWbWfSXkpnw9SHXOOAiw+fTp3sDaATrBHaA8xpEdUu O/l/wlMR/MDlNGtdzm1K21bnIon9aUwX3UkOeoKqEJVknuwWqppp0+2XM5RVcGwOb5MISLvMcWx uM3DMZ2cx/rVKPrz5Ikl/DA2+cpR3VjxNI6jQ047QI4fabGO+AGuJiHm8PMHgbXO98+9Ql/KGCC 9oXUgUeXq3i0nrkvQthDI7BdNsf+od/Dhx2KKNpxAOVBqjsqFPFdsIY3pcUBKn8hisdX5u/sztw adjL6kx7DcdyUQw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-sifive.c | 73 ++++++++++++++++++++++++------------------= ---- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/drivers/gpio/gpio-sifive.c b/drivers/gpio/gpio-sifive.c index 98ef975c44d9a6c9238605cfd1d5820fd70a66ca..07ee5c0b4f8023978c76873f251= 19d5dc21d996c 100644 --- a/drivers/gpio/gpio-sifive.c +++ b/drivers/gpio/gpio-sifive.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -32,7 +33,7 @@ =20 struct sifive_gpio { void __iomem *base; - struct gpio_chip gc; + struct gpio_generic_chip gen_gc; struct regmap *regs; unsigned long irq_state; unsigned int trigger[SIFIVE_GPIO_MAX]; @@ -41,10 +42,10 @@ struct sifive_gpio { =20 static void sifive_gpio_set_ie(struct sifive_gpio *chip, unsigned int offs= et) { - unsigned long flags; unsigned int trigger; =20 - raw_spin_lock_irqsave(&chip->gc.bgpio_lock, flags); + guard(gpio_generic_lock_irqsave)(&chip->gen_gc); + trigger =3D (chip->irq_state & BIT(offset)) ? chip->trigger[offset] : 0; regmap_update_bits(chip->regs, SIFIVE_GPIO_RISE_IE, BIT(offset), (trigger & IRQ_TYPE_EDGE_RISING) ? BIT(offset) : 0); @@ -54,7 +55,6 @@ static void sifive_gpio_set_ie(struct sifive_gpio *chip, = unsigned int offset) (trigger & IRQ_TYPE_LEVEL_HIGH) ? BIT(offset) : 0); regmap_update_bits(chip->regs, SIFIVE_GPIO_LOW_IE, BIT(offset), (trigger & IRQ_TYPE_LEVEL_LOW) ? BIT(offset) : 0); - raw_spin_unlock_irqrestore(&chip->gc.bgpio_lock, flags); } =20 static int sifive_gpio_irq_set_type(struct irq_data *d, unsigned int trigg= er) @@ -72,13 +72,12 @@ static int sifive_gpio_irq_set_type(struct irq_data *d,= unsigned int trigger) } =20 static void sifive_gpio_irq_enable(struct irq_data *d) -{ + { struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); struct sifive_gpio *chip =3D gpiochip_get_data(gc); irq_hw_number_t hwirq =3D irqd_to_hwirq(d); int offset =3D hwirq % SIFIVE_GPIO_MAX; u32 bit =3D BIT(offset); - unsigned long flags; =20 gpiochip_enable_irq(gc, hwirq); irq_chip_enable_parent(d); @@ -86,13 +85,13 @@ static void sifive_gpio_irq_enable(struct irq_data *d) /* Switch to input */ gc->direction_input(gc, offset); =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); - /* Clear any sticky pending interrupts */ - regmap_write(chip->regs, SIFIVE_GPIO_RISE_IP, bit); - regmap_write(chip->regs, SIFIVE_GPIO_FALL_IP, bit); - regmap_write(chip->regs, SIFIVE_GPIO_HIGH_IP, bit); - regmap_write(chip->regs, SIFIVE_GPIO_LOW_IP, bit); - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + scoped_guard(gpio_generic_lock_irqsave, &chip->gen_gc) { + /* Clear any sticky pending interrupts */ + regmap_write(chip->regs, SIFIVE_GPIO_RISE_IP, bit); + regmap_write(chip->regs, SIFIVE_GPIO_FALL_IP, bit); + regmap_write(chip->regs, SIFIVE_GPIO_HIGH_IP, bit); + regmap_write(chip->regs, SIFIVE_GPIO_LOW_IP, bit); + } =20 /* Enable interrupts */ assign_bit(offset, &chip->irq_state, 1); @@ -118,15 +117,14 @@ static void sifive_gpio_irq_eoi(struct irq_data *d) struct sifive_gpio *chip =3D gpiochip_get_data(gc); int offset =3D irqd_to_hwirq(d) % SIFIVE_GPIO_MAX; u32 bit =3D BIT(offset); - unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); - /* Clear all pending interrupts */ - regmap_write(chip->regs, SIFIVE_GPIO_RISE_IP, bit); - regmap_write(chip->regs, SIFIVE_GPIO_FALL_IP, bit); - regmap_write(chip->regs, SIFIVE_GPIO_HIGH_IP, bit); - regmap_write(chip->regs, SIFIVE_GPIO_LOW_IP, bit); - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + scoped_guard(gpio_generic_lock_irqsave, &chip->gen_gc) { + /* Clear all pending interrupts */ + regmap_write(chip->regs, SIFIVE_GPIO_RISE_IP, bit); + regmap_write(chip->regs, SIFIVE_GPIO_FALL_IP, bit); + regmap_write(chip->regs, SIFIVE_GPIO_HIGH_IP, bit); + regmap_write(chip->regs, SIFIVE_GPIO_LOW_IP, bit); + } =20 irq_chip_eoi_parent(d); } @@ -179,6 +177,7 @@ static const struct regmap_config sifive_gpio_regmap_co= nfig =3D { =20 static int sifive_gpio_probe(struct platform_device *pdev) { + struct gpio_generic_chip_config config; struct device *dev =3D &pdev->dev; struct irq_domain *parent; struct gpio_irq_chip *girq; @@ -217,13 +216,17 @@ static int sifive_gpio_probe(struct platform_device *= pdev) */ parent =3D irq_get_irq_data(chip->irq_number[0])->domain; =20 - ret =3D bgpio_init(&chip->gc, dev, 4, - chip->base + SIFIVE_GPIO_INPUT_VAL, - chip->base + SIFIVE_GPIO_OUTPUT_VAL, - NULL, - chip->base + SIFIVE_GPIO_OUTPUT_EN, - chip->base + SIFIVE_GPIO_INPUT_EN, - BGPIOF_READ_OUTPUT_REG_SET); + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D 4, + .dat =3D chip->base + SIFIVE_GPIO_INPUT_VAL, + .set =3D chip->base + SIFIVE_GPIO_OUTPUT_VAL, + .dirout =3D chip->base + SIFIVE_GPIO_OUTPUT_EN, + .dirin =3D chip->base + SIFIVE_GPIO_INPUT_EN, + .flags =3D BGPIOF_READ_OUTPUT_REG_SET, + }; + + ret =3D gpio_generic_chip_init(&chip->gen_gc, &config); if (ret) { dev_err(dev, "unable to init generic GPIO\n"); return ret; @@ -236,12 +239,12 @@ static int sifive_gpio_probe(struct platform_device *= pdev) regmap_write(chip->regs, SIFIVE_GPIO_LOW_IE, 0); chip->irq_state =3D 0; =20 - chip->gc.base =3D -1; - chip->gc.ngpio =3D ngpio; - chip->gc.label =3D dev_name(dev); - chip->gc.parent =3D dev; - chip->gc.owner =3D THIS_MODULE; - girq =3D &chip->gc.irq; + chip->gen_gc.gc.base =3D -1; + chip->gen_gc.gc.ngpio =3D ngpio; + chip->gen_gc.gc.label =3D dev_name(dev); + chip->gen_gc.gc.parent =3D dev; + chip->gen_gc.gc.owner =3D THIS_MODULE; + girq =3D &chip->gen_gc.gc.irq; gpio_irq_chip_set_chip(girq, &sifive_gpio_irqchip); girq->fwnode =3D dev_fwnode(dev); girq->parent_domain =3D parent; @@ -249,7 +252,7 @@ static int sifive_gpio_probe(struct platform_device *pd= ev) girq->handler =3D handle_bad_irq; girq->default_type =3D IRQ_TYPE_NONE; =20 - return gpiochip_add_data(&chip->gc, chip); + return gpiochip_add_data(&chip->gen_gc.gc, chip); } =20 static const struct of_device_id sifive_gpio_match[] =3D { --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.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 2C33830E0F4 for ; Tue, 9 Sep 2025 09:16:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409370; cv=none; b=tNLZ8RqiePApQELiT41qNfeadWsaqsKqLSUToeDk28TxRQJYg5Gxt+wurM/ThdSX0cpYnU4LMBTHejSh0ziQv30Pwh+NeusRa1PrSi49WeBBe5zOZiV2BvrUd+aJJwBu3mdNVkzZjn2JVYZRj7f6qCtYSgvamp9xfVZJA/MAFHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409370; c=relaxed/simple; bh=WzOuOUVW/PK4C/KdQteZogzTY0jTW+cVxZMD5hyi8vs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VVqjs8hCoP5V6cXYSoO86hoYa4odkIZ062/dhSj0lUAfFGxQBL/P+IPkeoG9VYyMZ/QKJzQv6bLwoxaRFCRM3GSsjXxImTZmTET7dkE8hSaQOAF0PB3yQiGzzC/dDOlize5bFEu+9tuxmzlPtXlS6ZLbyajYSyjJFYe5NZsaV/E= 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=3EwAnowM; arc=none smtp.client-ip=209.85.221.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="3EwAnowM" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3e014bf8ec1so3645933f8f.1 for ; Tue, 09 Sep 2025 02:16:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409366; x=1758014166; 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=JnL5avCI1+j0l6tAuop7k471BoLkt0UX61ObHkL7ebw=; b=3EwAnowMrjFzEq3S77Td+QP5AMw2JfmcE72xQNVCkRfw47LiULzQu22UNxsyciLVPl pfqxNB+PeT3PwvZvv1t3sNkGzGVpScEnKVVquLNhZsMvLVhYiYc2iJWeaMaFbMkt7ooP 9agrsDevZiVkDBW5DOJVNZ4g8pIgXDGA9mlcf4glM3PtCCKiqdLhZc8ug4V7NWQehX3Y 6+8eby7ya1EdfOEPtMs0UOn49DHyMLzwh8lj9/x5BfyetaByWo3ud2Ayj0QyLJvTk64d Nq0cGXRwJhRamU/O73KIPME6fagA1SdY4qdyrzl861YFQd5Fr52BjWjTgDvgUdvmRYxX ABsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409366; x=1758014166; 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=JnL5avCI1+j0l6tAuop7k471BoLkt0UX61ObHkL7ebw=; b=erT0JLBI40j8KzLkitKMOPf8KICvpqdbGwg94+MWgOl9PwWw7DiBk66jPS3A7tCk3X PyIxHRnPDABnpzVrF7k4Ok9BdN3OremyGqxvbJcPjvdr+zFKcHFfN4IIc24zPD+P5IJs OAmNSzfdIqbJaV3uqCj96Aahx54KN4D9upAgZc8/Gs3XHuu0NvgaT165btTmZ2iQkOwZ vAYU9Ji8OcUwBnjlDbuQIeeCGbbTgfo7sWREOqqSIXmO0dbiCawTdcfmkX6VNzEe53XS k/dM0I4x/e5P028nQkPF/wmZmdv8AHa9UsAU6hOmMNlz756zqgymuX2bcY8gRE0far38 7q2w== X-Forwarded-Encrypted: i=1; AJvYcCUQYdRU3uJHE3qdRdjNlFQUaLRD4hm2FYou8g0NranSTAGuo1kiGqk6QZz4HXM22CPai0dUc+dS7CoFxqw=@vger.kernel.org X-Gm-Message-State: AOJu0YwUw5E6C2oK1xg24jWOROqzpwB2WAeF0Z2RdEsCuRfEH8t1UVK3 A/9mgaiSdNvM0fJoHv+EJ194UXwiWzoUyOqX0uGxAKrPmw5BFmJtqGTtYDVkYsVOZdQ= X-Gm-Gg: ASbGncuapVGR+OmPiSlLslXdn/SEUKRZzUmOom/uGoa++vdSfaMdBRUkItXHnDnL6ff y6N10WUViaLYgK2JEHluNB4IBw9IyvN/mvnoSB1u6jqQlmDAeA/2V9k1lMZ09YimzlXG9bWzaYI Ax/GJVPUaWCm7PktaysFVHxDjWLrpeyu2eLbEttIdf4+15xv7ZiTck7kxGBTTX2omwy0aI6IjgR 9/AK7OFpr+Aw9oFTeYjn1R9qt2MFNiVcj8VUORxpQJTTZhdOCpWrrojP0BDxNnwVUfwM3faBFB+ aAA3CNADFd/GjzQSIYzQvTom786nycRJEtqlza+hzhTfRalYEQfWrxiKlz0PuZLuA11WgZd3EX5 rkJcoJEuBGbFeS0d/iw== X-Google-Smtp-Source: AGHT+IE94R1Oy4E8DYu1vi5/MQwSSBtXsOK388TX3Bsmqin3tuFYremvz9spe63crlhiuLWMz4c6HA== X-Received: by 2002:a05:6000:dc7:b0:3d8:9bf9:7c0b with SMTP id ffacd0b85a97d-3e643555f94mr8126974f8f.47.1757409366047; Tue, 09 Sep 2025 02:16:06 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.16.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:16:04 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:39 +0200 Subject: [PATCH 12/15] gpio: spacemit-k1: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-12-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3404; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=gNo32+ptzHzNQ0FF1qmlz+3Zqph7O2GD4/GEGfsM86c=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A6nAxdBHOjeyAM5pmmPsB62m3XhnRxXkrE2 U8RABVAM8mJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOgAKCRARpy6gFHHX cme7D/93u69p4SavcMfdgj06qig7Tkoa0eMfEjm9IPYT1ykfvFQhNDSGoOj5iutXRMOLR9LLr99 IlHQqBPMKer9ht2ThaRDHXbsDDAEPSS+jANLAOWaKygPteu4Suqo4pbDL7cxkdJcgjbdbHAH9Zk zl6xAUgDU6jfmPvcO2VhJr75owb7CGZp5a1Dnag35fFfRISG+pgOiAwhAMivHpcgpGn3EwmeaTP LfGkDAj4ulgpkjsaxwo20vLHJ2wSq0mfKheltSCFdiS0+aok/Rbl3mhu1McHriCqmlvKAyx8IAv 7lC5qZsAWcBUG1VqNe5aycf3coJ/g6KMy0i8g//fr/txxRCIjdHyTcfJ6t13JKQGqQdCTM4chQz /+XMHuKfpZ/Q4YDs5n2SOREbvZSSNuT6QTeWHDX+6wXH/ATSEYsVIsLd9L+c1wI7a6PsyV63P/I tvIzyK39lt2Z2dBxc+oAlhSwj0mAIQdG9XCVXavR4vOS8AdP0gT0xlExujH+Omuw0g5KWNawhRJ T/ikz1yOTq3wDGN3oZ1XYESu56a3iGgC7de9FThTX64Nyag3JpJ+NL7w3pWFdIppgGkim4hUCGR HCm9ppak+GXo8YQgBBZ5fHJDeF/Pj24TnRZOWwbCoJlmgMzRCVZPV/2mEWll6esXcxeseLt41r5 XEg1x+7SuLj8WOA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski Reviewed-by: Yixun Lan --- drivers/gpio/gpio-spacemit-k1.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/gpio/gpio-spacemit-k1.c b/drivers/gpio/gpio-spacemit-k= 1.c index 3cc75c701ec40194e602b80d3f96f23204ce3b4d..9e57f43d3d13ad28fcd3327ecdc= 3f359691a44c9 100644 --- a/drivers/gpio/gpio-spacemit-k1.c +++ b/drivers/gpio/gpio-spacemit-k1.c @@ -6,6 +6,7 @@ =20 #include #include +#include #include #include #include @@ -38,7 +39,7 @@ struct spacemit_gpio; =20 struct spacemit_gpio_bank { - struct gpio_chip gc; + struct gpio_generic_chip chip; struct spacemit_gpio *sg; void __iomem *base; u32 irq_mask; @@ -72,7 +73,7 @@ static irqreturn_t spacemit_gpio_irq_handler(int irq, voi= d *dev_id) return IRQ_NONE; =20 for_each_set_bit(n, &pending, BITS_PER_LONG) - handle_nested_irq(irq_find_mapping(gb->gc.irq.domain, n)); + handle_nested_irq(irq_find_mapping(gb->chip.gc.irq.domain, n)); =20 return IRQ_HANDLED; } @@ -143,7 +144,7 @@ static void spacemit_gpio_irq_print_chip(struct irq_dat= a *data, struct seq_file { struct spacemit_gpio_bank *gb =3D irq_data_get_irq_chip_data(data); =20 - seq_printf(p, "%s-%d", dev_name(gb->gc.parent), spacemit_gpio_bank_index(= gb)); + seq_printf(p, "%s-%d", dev_name(gb->chip.gc.parent), spacemit_gpio_bank_i= ndex(gb)); } =20 static struct irq_chip spacemit_gpio_chip =3D { @@ -165,7 +166,7 @@ static bool spacemit_of_node_instance_match(struct gpio= _chip *gc, unsigned int i if (i >=3D SPACEMIT_NR_BANKS) return false; =20 - return (gc =3D=3D &sg->sgb[i].gc); + return (gc =3D=3D &sg->sgb[i].chip.gc); } =20 static int spacemit_gpio_add_bank(struct spacemit_gpio *sg, @@ -173,7 +174,8 @@ static int spacemit_gpio_add_bank(struct spacemit_gpio = *sg, int index, int irq) { struct spacemit_gpio_bank *gb =3D &sg->sgb[index]; - struct gpio_chip *gc =3D &gb->gc; + struct gpio_generic_chip_config config; + struct gpio_chip *gc =3D &gb->chip.gc; struct device *dev =3D sg->dev; struct gpio_irq_chip *girq; void __iomem *dat, *set, *clr, *dirin, *dirout; @@ -187,9 +189,19 @@ static int spacemit_gpio_add_bank(struct spacemit_gpio= *sg, dirin =3D gb->base + SPACEMIT_GCDR; dirout =3D gb->base + SPACEMIT_GSDR; =20 + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D 4, + .dat =3D dat, + .set =3D set, + .clr =3D clr, + .dirout =3D dirout, + .dirin =3D dirin, + .flags =3D BGPIOF_UNREADABLE_REG_SET | BGPIOF_UNREADABLE_REG_DIR, + }; + /* This registers 32 GPIO lines per bank */ - ret =3D bgpio_init(gc, dev, 4, dat, set, clr, dirout, dirin, - BGPIOF_UNREADABLE_REG_SET | BGPIOF_UNREADABLE_REG_DIR); + ret =3D gpio_generic_chip_init(&gb->chip, &config); if (ret) return dev_err_probe(dev, ret, "failed to init gpio chip\n"); =20 @@ -221,7 +233,7 @@ static int spacemit_gpio_add_bank(struct spacemit_gpio = *sg, ret =3D devm_request_threaded_irq(dev, irq, NULL, spacemit_gpio_irq_handler, IRQF_ONESHOT | IRQF_SHARED, - gb->gc.label, gb); + gb->chip.gc.label, gb); if (ret < 0) return dev_err_probe(dev, ret, "failed to register IRQ\n"); =20 --=20 2.48.1 From nobody Thu Oct 2 23:57:55 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 BB54430F935 for ; Tue, 9 Sep 2025 09:16:09 +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=1757409371; cv=none; b=tIM9MOi/ioqVBlesB+ZGQcRys3BARQBOmakdJFOsEDxNdGs9nrVntoZKAEgHYnYKa4CJGSrsdmO8egXyOSoFtBWVs20eedXUeSFjCcoVJ9P5y+O61RD/EwuBFJyGXw3y/JrE//SklJ1qqhef4uvvDfHvDuLJfk4lhx1aYrVx2qU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409371; c=relaxed/simple; bh=KDFwPnbkRvx0fTKChYEHU+W71Zlm+jzr4ejpjKKTNkI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O4vBohh+YUMwiuS9IgugMQ42mgG+VzcEZIxRZcaT7T7vQ3QWYM6S7t6lzni5/J0/QS5HDe4akOqpKiG616wQBN9Mee3gB4A2DII38vk9OkG6426yFIHyNoPjdPpAJwoFTHY+o9SNxymNUkVdYRHybwyK353w38cDwPlRLoY/xPc= 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=nA9/lIsS; 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="nA9/lIsS" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-45ded619608so5130785e9.3 for ; Tue, 09 Sep 2025 02:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409368; x=1758014168; 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=mMmaVn+LZJgn5b7c1rWtdZrF0XHWPwWhtZTr2dtFlt4=; b=nA9/lIsShanpPeuAhch96lazeOCjme8KqU/uAEi64KbjdLV8KATB3/wiyJU3A/rCZw /o8atZkA8RweFc4AFnvTezjsOYyS63TDVU7TH0j+Ov15kZd/p89NniJWb5wO+2bj6bm4 bzhvXYATteqCzNY2wGK87YQkTLfsiteWhJGFLQ8mFGOjs3rvWVS2WbYxFaGiipxK9blq qDeFN6YUAuQ6GlJncvsDlrWf1Ig1IXXa3gDivmHfWRtdmTov9V9G4sWmegHUeX4MRyLt v4tOLsa+B7NmEyGe+2toSQ/y1mfRfTYA6MsSZ4E4H7v1B5GvOFghxggKzskkSLouMRMF 8jrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409368; x=1758014168; 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=mMmaVn+LZJgn5b7c1rWtdZrF0XHWPwWhtZTr2dtFlt4=; b=ebUKFAPJy3nMFyHQ5i412sVCYYGrdBRgGTP0BGgtfyPm8/P5+2fxzRugAOTvI7gzha tmokOKuRBcN0xtZzVRS8Ln8EtCmiuj++dRcUWBpr1Fpl801GpjUBZ6n22A9IBlGhyql3 K50a859XQvGg/FnLFDLxK22nJvJz1m02Bb/65swV3v3swV1afTdufOBab/SVZyLrSLES G4TGqagYTvtP5Y7rakxdijNrE/DlWFWPHPxIuy7t5v6g/qIdEUasiqeoMJrkNOcU3BEl hrDB0QNayoyB3/EzCUDmoL847EexTE6Xu01wIQupsTZ6r/RuOYhIkiWE3F4fVkRPH8dn MjTQ== X-Forwarded-Encrypted: i=1; AJvYcCVGnOy9AGyTnS8c1JMxo609DGoImQCL5vxWe6KnJ/dlu/QadQ3HJotnQYnN+F0epZXjsFEHxTMjQO1gNyg=@vger.kernel.org X-Gm-Message-State: AOJu0YyZALQHDPn6AsEonZINx13H8kJ0NLesF1ryT7INF9sgdEtkGOpP YEW/EVcOEP6EZyUZh/srf3wg+/y6AbkwY1HtmVW20Yc1cS7D6PIzOu4FHINo35yMaps= X-Gm-Gg: ASbGncuQfsINl1XyhsZOYE9D+cpF1+IFEEHuZQEK8UkfjG8WtCFQU7aEhHxEkb4cH+M uvRZKfTpbk2M2ZDEm7zKzkZHZHF5Q+wmHHwjwSxMDDeJzbP4Me7EvdT/s130XS26/oCWh8Prx+/ oAt9dzZeul6P8b9Qs8APpJwwy8pwzI+zIuVsOr6BdW/E1lhsu2Lx5TTvvcf5BXvya5rrUNe0ujp EZubrFQOaSxebcE5ymaqCaMSuMBoptUyjD0+teeBy2KsTEikaj+0+aUMaYgjzNnBqQ/7hwM8/IX 7ofGCRCtNd4V0UK2Vz5TgYmBhKaC7mG/vINzWXqv9rVYOqzAmXnw56o5LJUdYEGicRZ5959+pFr QNmoV7EKd0/Bdh3riKQ== X-Google-Smtp-Source: AGHT+IFmO6VqhZ9BkxEjJhWWUjTF6UtWEURBON8fvebih0GzMhUphDe9TftqByslO0IRvxtisIwrOw== X-Received: by 2002:a05:600c:19ce:b0:45b:b05a:aeeb with SMTP id 5b1f17b1804b1-45dddec8ff1mr97136895e9.28.1757409367901; Tue, 09 Sep 2025 02:16:07 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.16.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:16:06 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:40 +0200 Subject: [PATCH 13/15] gpio: sodaville: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-13-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2177; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=OpZH1E4uX1rbCcdgDBOgsBrK0sLVF3+FQJb0MPT9Hmc=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A6p94D+S/c4LzuEPR6IThg0j1mZ/5T2G686 meGifKdh+SJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOgAKCRARpy6gFHHX cvcmEADOfAiuC1Ep9RvIkJ+mqoo9WSMNXkDcTeYwBaiwwjIz0muCH85jNMqW9b3ZFhtBFSJuNtX arXg6eVDNEk4OcNWPJoc69s1QTJ9+jgvdXEqIvD/bmYCRDMpo+jQnl8UeLBhd7CBBEa45+1a68E M+d7xx0SBcN6nLNJqgO912DPu80/cw/gjXeHHbHoFmaCoklpIroAj2MEnMLoRluFVHoFaQ9d+8K Bu4Pzdqqu0HRLMJ1LAFhIF3VYoI+tpwPNIgT3E8/+5gmTzkcVW9Z+k/HLDTuKTyzC8lur0Ery/Y kT014qHXyE5TGEawY/IxfimrrtPXPu+wV2svkqUHpN3Pv7Qgph9GzQ8xluK3HnRV1tt1HUK/IMe f7j/0tewxNFyFeAGBlEua07W3bCnMCARotAno704aWDtPSIuP314GWm3T8z+l44QTe1F7vVVj/2 8Q8vQYPB7OxkgxJv93dnJymPuJ1f4r/osq1nj6J8nngFzM2/Kc+UleQrCg+vmNpBSv4PTsApf16 usJOj6hIKzfx05g/FzdSTDCqDptEEALnloKNJqBv1h8Y/qzjzei+M2XQmue1W5e8k7FqFuoP0zo AKlT5n8Ntxzdvl3e7GrObrqLBzaR9CTUOYcDGkDl1ixM/qLuQAJZWWxzTQZWfNeu0QrOndJIM/o 3Bex3gwvCoubkBw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-sodaville.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/gpio/gpio-sodaville.c b/drivers/gpio/gpio-sodaville.c index abd13c79ace09db228e975f93c92e727d3864ef8..6bc224d3a561077bf3438a70591= e1f313ac834f3 100644 --- a/drivers/gpio/gpio-sodaville.c +++ b/drivers/gpio/gpio-sodaville.c @@ -9,6 +9,7 @@ =20 #include #include +#include #include #include #include @@ -39,7 +40,7 @@ struct sdv_gpio_chip_data { void __iomem *gpio_pub_base; struct irq_domain *id; struct irq_chip_generic *gc; - struct gpio_chip chip; + struct gpio_generic_chip gen_gc; }; =20 static int sdv_gpio_pub_set_type(struct irq_data *d, unsigned int type) @@ -180,6 +181,7 @@ static int sdv_register_irqsupport(struct sdv_gpio_chip= _data *sd, static int sdv_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id) { + struct gpio_generic_chip_config config; struct sdv_gpio_chip_data *sd; int ret; u32 mux_val; @@ -206,15 +208,21 @@ static int sdv_gpio_probe(struct pci_dev *pdev, if (!ret) writel(mux_val, sd->gpio_pub_base + GPMUXCTL); =20 - ret =3D bgpio_init(&sd->chip, &pdev->dev, 4, - sd->gpio_pub_base + GPINR, sd->gpio_pub_base + GPOUTR, - NULL, sd->gpio_pub_base + GPOER, NULL, 0); + config =3D (typeof(config)){ + .dev =3D &pdev->dev, + .sz =3D 4, + .dat =3D sd->gpio_pub_base + GPINR, + .set =3D sd->gpio_pub_base + GPOUTR, + .dirout =3D sd->gpio_pub_base + GPOER, + }; + + ret =3D gpio_generic_chip_init(&sd->gen_gc, &config); if (ret) return ret; =20 - sd->chip.ngpio =3D SDV_NUM_PUB_GPIOS; + sd->gen_gc.gc.ngpio =3D SDV_NUM_PUB_GPIOS; =20 - ret =3D devm_gpiochip_add_data(&pdev->dev, &sd->chip, sd); + ret =3D devm_gpiochip_add_data(&pdev->dev, &sd->gen_gc.gc, sd); if (ret < 0) { dev_err(&pdev->dev, "gpiochip_add() failed.\n"); return ret; --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.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 8F1F230E0ED for ; Tue, 9 Sep 2025 09:16:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409374; cv=none; b=Yfl3QZ6BhH+e4tnwzTmSPiILX9zaU+eXi+neBbHxXmh5YgIDKZQrZDry9dzH+xYCjl4ViUHwr6QsSAXi34uxCBbDGFuul9p2paetbAec+mnpG1KYrWybHYdxj1PDmfowsePguWKELHgrtDhQeD+qRGKFoQFckMMI9GtfZmdkpDQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409374; c=relaxed/simple; bh=pfY5A0u470ZWmlLJkPgoDVi7l1fJw/+hwUAmIObpEP8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=vAETxnUvS3mO/BuVrlI4jp9TP79f7ys45MXwgpIStABNOZTjbAm5XA6SLv/Ons6l3Pck7VOwTAbp/QkgYsahE/le6SBYFZEaBeQEdZ1zTBsd9hfvXbNCV/AyBAJEf/dlmNJZG5uVDCY48CWuXkngnQgUWHWFFu3MA2zBissQosc= 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=AuK0gUgr; arc=none smtp.client-ip=209.85.221.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="AuK0gUgr" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-3dae49b117bso4690760f8f.1 for ; Tue, 09 Sep 2025 02:16:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409370; x=1758014170; 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=7NS6kcVwueQk8PTITkKoVosiwdk6Lg4fQNiLC3+K+D0=; b=AuK0gUgrqmPRHUjGvJSXt3LmL6oqBoiEW2mn/Uox+IybzG/3sNs+MgZ74t+Of8qoSm /Qf9Ot3AX7KZoPGzhuWpt93pJ6KHoGCu++in+e5SNw8nXeZsnDQGFZQEkGaU20jZx1qa Bv3AyuLQbAqBsUMFAVQkPCplOgqcHXpQmdtSIEHk0jWlkfZD/rK32voTen46dhaI2Rhz Mqu/INfRovcvg/ydb5xcaP4/ayVE5uuF1KYOlD1k3u9Ehhw2Wf44vjEnSpC5qv4JVQUU 5TDh2GDo6C8ZQIw0AvyuuWcEr1UOdWpVaCsO4ZW5CwowPBi2epJeZa4HL66c0/o5X8NQ SU1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409370; x=1758014170; 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=7NS6kcVwueQk8PTITkKoVosiwdk6Lg4fQNiLC3+K+D0=; b=I81HwF/Z3PbGCUjFLk4x+x5Utx/3KiP1Cw1ysDiRAyqltfAP1W0WBqYWz8j/pHvl7Z CalFbbrsaQAtfVZt3rflJ1Twju8tHJxod9dzKaCn0JCrXa71hPVvfe1NRR/Ku68RtIIK EicJF28sBnp4TBlXMUvuh+hb1NuL7l5+kDULarhqt8u033O8heHu91a40Zws1NwmL1mq MWEh9iGWD0KrelfONyH6sir15gjCmTu/EoV6UCj8JYhVQSThJ85+6p/Z/PODheH2Wtj/ oMcusRToSCsOqXYlmJ4wrPp2npm0vccrVq9HRqGhxXccANS7I6ZV5w/sdB3Mmc11Dtck ZqIw== X-Forwarded-Encrypted: i=1; AJvYcCW+m3H29nCP67sFiePRopaUiRoWyDp7k0x00jqzXxns7jOdeR1lLgIOnN9PKzHMI2bqtMMv6B8WFbv1c3A=@vger.kernel.org X-Gm-Message-State: AOJu0YzB3d+sA9/8kRdu8noEpOJjAStYPb9GFd6PEiNX1mq3Fx1His/J XI3CP0jChhAOHk8Eevb7+NLnzDCaX2xApKjU5CqW7YK226k8Y2Xr7T3b70rKfU7h1aE= X-Gm-Gg: ASbGnctXiywZ3Whiioj0Ubk3SFOw8W0m12PDufN39t2KgS2E6I64o1AVAjozhKayfiz VWPCzn6Ecih6+oMWtwN1AJinUekVz7j8hKdXTs7zJW0EwAYK0EgM1Dg4roDkcK9ou+6jBkjIG49 XKeSoCpQ1tXG4K1r+Ts/XNZeKXDlkYDYunXUgMfrFuSkzqMewtQizUw+mo/fGZlslni4MPy/NFO 1svi9RPqmnAxiNXiycCM5hSCGpxs4CC5TtPSFEBdww9fKEHg8fVYgGQQ8FGz207e6UstFodrZ/m 3yGMNvjbVYfVM6dLLam5eHvP0JdgT2eo152LY96IYLRiBPfgrNqYOqRGOUVj0fPFJuUWEaHBpO9 TleekF0rmsbkGDP0Eo9f06UW7vJUv X-Google-Smtp-Source: AGHT+IGoJXBvUJSpBt2lyPYKxW7iuqKGK81p5w4PzJvmsSblYb1erZflWT5xfvs5LzLHjloaRsoS9A== X-Received: by 2002:a5d:5f82:0:b0:3e7:4271:8c6d with SMTP id ffacd0b85a97d-3e742718faemr7197437f8f.34.1757409369974; Tue, 09 Sep 2025 02:16:09 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.16.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:16:08 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:41 +0200 Subject: [PATCH 14/15] gpio: mmio: use new generic GPIO chip API 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: <20250909-gpio-mmio-gpio-conv-part4-v1-14-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2852; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=ghLIXnylAYcLYVJg4ksyA9B4/RaoUKjw1Cc8UARhArE=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A7M1kWuQRnL65yzzeom2IENhFIls+CzXrAj boY3wL6vvGJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOwAKCRARpy6gFHHX cjUbD/sHaYXToO+u0YqX7txBkP4Ezr0jc2j0S4iqMhj2XV/ZOkALp/qxGiMGm3GaPndvBOHLlko a+JYIaEtSb2cUM4o/Q7qpaiHJY7TST7XfNadxyDo/SfLQtQr7BzQ5FBU7+WU8omyvO2EonGCvah cCGCSQagVc7uqle5HXUtXcx5bglGy23IdFAi3D5HcPbgu8r4hegVKRPB35R3L196GVHJOARdZlJ SqGKqXaoRrqsCjoV7KfdkJs7Aq8KZs5lAMV/E7/Vjs0OQ5oL+IGXlf1pkfPQrk+m+bxxPo+CD1s o1co0Zh6+J34EVC5uiOvxm4QiWuJNJZ4OrU//m1bYHhAksr0qaLZmf6sd2eJ05ZyV2pCwbRyGcK NdN/wr81ld7t7tuLtbiWO85UH3i8G7+jlHyAB5kk4Bu1czKO0SCtM90ng3QeNoqhG/sI++TESm4 JXHWeVwLLpSZqMU2Bf3EBFk0bPm1futJyBqmHcfDoPrXUJck+4IC/VrLUn09S8Y3evWzn9eTA2L NoxZIkWhOuNM8wZeBEuOPJ3IROTEAl0i0TNfkgOm76aAzuo5LXUEgUbIHQbNNi1KB3Wy8DD5i8d nkF6QDdT+keKJjVnvSQGBqIefYenhz+NehXtlsxXnYQKSdf3vpEEpWJ9iObJDEZVE3REDYl3+Il tXWZSivklUydFdQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Convert the driver to using the new generic GPIO chip interfaces from linux/gpio/generic.h. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpio-mmio.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c index 79e1be149c94842cb6fa6b657343b11e78701220..a5e2f8a826af40ec96d2a3ea582= 40f1ca8ed250c 100644 --- a/drivers/gpio/gpio-mmio.c +++ b/drivers/gpio/gpio-mmio.c @@ -57,6 +57,7 @@ o ` ~~~~\___/~~~~ ` control= ler in FPGA is ,.` #include =20 #include +#include =20 #include "gpiolib.h" =20 @@ -737,6 +738,8 @@ MODULE_DEVICE_TABLE(of, bgpio_of_match); =20 static int bgpio_pdev_probe(struct platform_device *pdev) { + struct gpio_generic_chip_config config; + struct gpio_generic_chip *gen_gc; struct device *dev =3D &pdev->dev; struct resource *r; void __iomem *dat; @@ -748,7 +751,6 @@ static int bgpio_pdev_probe(struct platform_device *pde= v) unsigned long flags =3D 0; unsigned int base; int err; - struct gpio_chip *gc; const char *label; =20 r =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat"); @@ -777,8 +779,8 @@ static int bgpio_pdev_probe(struct platform_device *pde= v) if (IS_ERR(dirin)) return PTR_ERR(dirin); =20 - gc =3D devm_kzalloc(&pdev->dev, sizeof(*gc), GFP_KERNEL); - if (!gc) + gen_gc =3D devm_kzalloc(&pdev->dev, sizeof(*gen_gc), GFP_KERNEL); + if (!gen_gc) return -ENOMEM; =20 if (device_is_big_endian(dev)) @@ -787,13 +789,24 @@ static int bgpio_pdev_probe(struct platform_device *p= dev) if (device_property_read_bool(dev, "no-output")) flags |=3D BGPIOF_NO_OUTPUT; =20 - err =3D bgpio_init(gc, dev, sz, dat, set, clr, dirout, dirin, flags); + config =3D (typeof(config)){ + .dev =3D dev, + .sz =3D sz, + .dat =3D dat, + .set =3D set, + .clr =3D clr, + .dirout =3D dirout, + .dirin =3D dirin, + .flags =3D flags, + }; + + err =3D gpio_generic_chip_init(gen_gc, &config); if (err) return err; =20 err =3D device_property_read_string(dev, "label", &label); if (!err) - gc->label =3D label; + gen_gc->gc.label =3D label; =20 /* * This property *must not* be used in device-tree sources, it's only @@ -801,11 +814,11 @@ static int bgpio_pdev_probe(struct platform_device *p= dev) */ err =3D device_property_read_u32(dev, "gpio-mmio,base", &base); if (!err && base <=3D INT_MAX) - gc->base =3D base; + gen_gc->gc.base =3D base; =20 - platform_set_drvdata(pdev, gc); + platform_set_drvdata(pdev, &gen_gc->gc); =20 - return devm_gpiochip_add_data(&pdev->dev, gc, NULL); + return devm_gpiochip_add_data(&pdev->dev, &gen_gc->gc, NULL); } =20 static const struct platform_device_id bgpio_id_table[] =3D { --=20 2.48.1 From nobody Thu Oct 2 23:57:55 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.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 B4D793115AE for ; Tue, 9 Sep 2025 09:16:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409379; cv=none; b=T5nZ+buEc1em+F/mnFAr8tRECJH64I1HzSLvQwJoXEfAm9Txg5WsTZlzgd25hko/GgneGazvaqZkaZUdYjPVyt58vhKMN/c6RKdkkAxuXOkHu65P1T1U5rRmc4o2Mr+b8ibZHAHvMRLuypLmfEPrUX2bDhKbAGpsakaoA4F/bHk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757409379; c=relaxed/simple; bh=mK34Re6z9JDwbhjfsALFdH/YPvLUo80jyAI1rpjLjA4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jhLSufYX/0OYC9EQfA5Cx121MZnRinpW/ZFlG6tKqxF1qDPkfD9NulB1bOE79Yy/KF7tVFa7apGfVnoXuw8F84umB7Kd0jLhaMJfFm6xvU8T5YPjthGFjfpOsfJqqFu51b75XxDD+hPl46fjiYL45MDEl2Ab6LSrZ5iwgocF3Xw= 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=ROq7ynOO; arc=none smtp.client-ip=209.85.221.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="ROq7ynOO" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3c46686d1e6so3492512f8f.3 for ; Tue, 09 Sep 2025 02:16:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1757409373; x=1758014173; 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=89JRRlcw3Te2tCJEh7obRoyT/vtPhvN03vy2e40Qyl4=; b=ROq7ynOOHNxrB/ZAyZST2tj8ttuy0svZ7eCMVU0ztiAhz4drJPE8ZEmySkiNNPNtXD UkSHjeR3bcBWbTgZpbQfIJXrEqNibcCYUjvTwgK6XPjSwz7XnfNHINhuzJB2VsLwL1ws A5u7puPwzxAA9pRSOSFCPsM1q/zTITYQwUKCf6eRsBxhu+RtGu+C2IPUsiTGnZItiSmK EvVuc7Er5DVbVdDl9i4y+sEZv23s9azs77BSrv5Te9U3myZWYE3dujk5kuBW83KVCEqD ADW9OMlx5m515ICNTAYJZD7VKWOhpL5dupdcGDA77iVhzgTjEK9FyHAsTwrjPIa9Kjcd hX3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757409373; x=1758014173; 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=89JRRlcw3Te2tCJEh7obRoyT/vtPhvN03vy2e40Qyl4=; b=hj8YMtPUcrknKEEFd952CxDkDRFgciiKP1rSgshcoFjW25DdMcQBrsLiRFriRo/1eU YrpWfFvjU21qihEer31AmMOdEO06Q47J0bqRcyzW5FIRCnXIaTJFRPfBBF2Y4qLd8h5m E2uTLOHvbgLjr2APC0RTdxTUi1a3xUDdk3o9XW0kXP7BlsVXi1jf6l1v3GxKhf2q0xVg zDTyTw3BLrAoxrFchipmeY4+5Z8ICfgGQklMuUOWS80bUNhq8NWtSM4KpsYLIbhvUJ+0 GSsKL2ffzPPhgsaDaCNQkGCjfwVglUsqblZDWIRv2SiThekYmNW7HH6trPIYuCCrces/ H5WA== X-Forwarded-Encrypted: i=1; AJvYcCWoUWJi/Hqzsq6ogFW/fQ5d+6peuBVrP6TCDecDlX1Ch1+ifsB0XI4/zTWkNNDlGAkgOHAFFtjYtGJzAnA=@vger.kernel.org X-Gm-Message-State: AOJu0YzbWfxYShZakVJfhL/NviBs/Rhuz+Zd+4xBmxOP8qqs7pdrVXRT 4ToxlIuLOpEfsUdcPXYTZClO29oDdxwL6ZI6d90xRGDy7hEJL+UMFsG4BH6pnn5KJ5M= X-Gm-Gg: ASbGncvcvtX14LpCrVcAa09ORXk5Lu8i00gqzhGtNPQ+YJbPHfvzY12tLsG6/mxSPDs +nrDVwqSphssYUrn1YFZOwzHe5d/p0/9fHDh6I0xQQ5rS3sVaFSE8t1xqBzXTzxhJnaNZ3yA7ji aAo+1/Na01V7ZtzCcX+zWJHl0mZjBxTF09GFDYRIuMyu9DS0ldll/yy6aEsb6uxy4lwLNzAzkn6 pCjtdxIb51/9vu6rEhI/UcKb4V/09PmYQWqEo33eQAszt0PYYuGLmhL+EP3zcjXYgAwOYD1tBwu IVUuFwDnvCZSAi9kS51r/D+CdiKzgAg7+qr0IPZnJVonIQFki2tqGeG+mEnR0fhdCe7kN+saIdt ekbjRW5/Ro0HA7d/0/Pz5pqB9tQrL X-Google-Smtp-Source: AGHT+IFzlM7vKAihJf15Uj3oNKQSeoxDzKu1Wdi58h1xYEfsOZ3obv37huDWn4KPj6vWLDmfMT7omA== X-Received: by 2002:a05:6000:1884:b0:3e7:4719:a024 with SMTP id ffacd0b85a97d-3e74719a54emr5199471f8f.18.1757409372655; Tue, 09 Sep 2025 02:16:12 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c1ee:7be9:3ebb:6cc0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7521c9caasm1900039f8f.19.2025.09.09.02.16.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Sep 2025 02:16:10 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 09 Sep 2025 11:15:42 +0200 Subject: [PATCH 15/15] gpio: move gpio-mmio-specific fields out of struct gpio_chip 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: <20250909-gpio-mmio-gpio-conv-part4-v1-15-9f723dc3524a@linaro.org> References: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> In-Reply-To: <20250909-gpio-mmio-gpio-conv-part4-v1-0-9f723dc3524a@linaro.org> To: Linus Walleij , Bartosz Golaszewski , Keguang Zhang , Alban Bedel , Doug Berger , Florian Fainelli , Broadcom internal kernel review list , Matthias Brugger , AngeloGioacchino Del Regno , Paul Walmsley , Samuel Holland , Yixun Lan , Andy Shevchenko Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=33076; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=NThnoStMKI0pgGqxM+umelN8jbpWk2tuYbqHoigOAzY=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBov/A7qs1eJ2rXDx/0jDuOq1l66aAVb/A8kqy7j 3lbbwm9seSJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaL/wOwAKCRARpy6gFHHX ckbQD/9AlewperBb1+zw5gRVDfWoDRMRdGGsHnVGXQebZMpUSKiC4I5PZN8RffZkF7dvM5EwdUW gstsp4GEqBiEUbH1YqnHaQnmbK/LOjbKgTzj3RCO1hXo2RprazKK/m/OyQqWkijajSgPx8IOg99 bvcCHCHFJ/tscARbGQKKCk115oLUmOgei1P+iAsOhUm2jLZsGqXb8PwXRP8Xq977aGqbSNFAug/ gkLAakwWuBoQ6Fn9wqtXnl+AtvH6M2kWlU3er3FFl7jxiZ8sSrAepyidbDlY9N54RlURdiwa7Up +oUfS2G8/Ic/G6BX8oShozn1IfZdhCvdafETYOa3pLaYqNm9SCWT3tBJ3BRqyecuSPjU9X2qlx7 2ljzmoNoydfj2cI5x4tDMN6FZ/t0vrccxFXFsIw/2whVp8+51xb25WR/UynLgofyUP/7mkIo9sW Cl0Nl8GML5oFWxnJk9qbxXq1RxJF1qywSuXdZK3ytvFufRzjzkws3rgPQICiqHP/UtFVrewhSbp MWy5CNivjw8gHcqiTDOTpbNSCWPfxwfG+b6h5IqoYjtNqoYVPhv2iuzW1WwlwttJvk1lMuRMcxb LL0J3YvWNfmdtGLwzWKcleRMBZI7UaMWZtDUfbLb82ehexwHRxtRpooWsPUNqOyEmFa/HCebxbp ZbdzzvrEGPVs3tw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski With all users of bgpio_init() converted to using the modernized generic GPIO chip API, we can now move the gpio-mmio-specific fields out of struct gpio_chip and into the dedicated struct gpio_generic_chip. To that end: adjust the gpio-mmio driver to the new layout, update the docs, etc. The changes in gpio-mlxbf2.c and gpio-mpc8xxx.c are here and not in their respective conversion commits because the former passes the address of the generic chip's lock to the __releases() annotation and we cannot really hide it while gpio-mpc8xxx.c accesses the shadow registers in a driver-specific workaround and there's no reason to make them available in a public API. Also: drop the relevant task from TODO as it's now done. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/TODO | 5 - drivers/gpio/gpio-mlxbf2.c | 2 +- drivers/gpio/gpio-mmio.c | 321 ++++++++++++++++++++++-----------------= ---- drivers/gpio/gpio-mpc8xxx.c | 5 +- include/linux/gpio/driver.h | 44 ------ include/linux/gpio/generic.h | 67 ++++++--- 6 files changed, 211 insertions(+), 233 deletions(-) diff --git a/drivers/gpio/TODO b/drivers/gpio/TODO index b797499e627ee9fdb1ee9c564b8278241f720850..8ed74e05903a972e99e0789319e= d19ebd8545a1a 100644 --- a/drivers/gpio/TODO +++ b/drivers/gpio/TODO @@ -131,11 +131,6 @@ Work items: helpers (x86 inb()/outb()) and convert port-mapped I/O drivers to use this with dry-coding and sending to maintainers to test =20 -- Move the MMIO GPIO specific fields out of struct gpio_chip into a - dedicated structure. Currently every GPIO chip has them if gpio-mmio is - enabled in Kconfig even if it itself doesn't register with the helper - library. - --------------------------------------------------------------------------= ----- =20 Generic regmap GPIO diff --git a/drivers/gpio/gpio-mlxbf2.c b/drivers/gpio/gpio-mlxbf2.c index f99f66cd189ca71c9d188dff0a0b42ef2223abb3..9520d26b20a5851ac8b5de239b8= f5980dabc2820 100644 --- a/drivers/gpio/gpio-mlxbf2.c +++ b/drivers/gpio/gpio-mlxbf2.c @@ -156,7 +156,7 @@ static int mlxbf2_gpio_lock_acquire(struct mlxbf2_gpio_= context *gs) * Release the YU arm_gpio_lock after changing the direction mode. */ static void mlxbf2_gpio_lock_release(struct mlxbf2_gpio_context *gs) - __releases(&gs->chip.gc.bgpio_lock) + __releases(&gs->chip.lock) __releases(yu_arm_gpio_lock_param.lock) { writel(YU_ARM_GPIO_LOCK_RELEASE, yu_arm_gpio_lock_param.io); diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c index a5e2f8a826af40ec96d2a3ea58240f1ca8ed250c..2fea986e10b87553f6847e96fe2= 14ba3da76c0e9 100644 --- a/drivers/gpio/gpio-mmio.c +++ b/drivers/gpio/gpio-mmio.c @@ -125,20 +125,23 @@ static unsigned long bgpio_read32be(void __iomem *reg) =20 static unsigned long bgpio_line2mask(struct gpio_chip *gc, unsigned int li= ne) { - if (gc->be_bits) - return BIT(gc->bgpio_bits - 1 - line); + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + + if (chip->be_bits) + return BIT(chip->bits - 1 - line); return BIT(line); } =20 static int bgpio_get_set(struct gpio_chip *gc, unsigned int gpio) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long pinmask =3D bgpio_line2mask(gc, gpio); - bool dir =3D !!(gc->bgpio_dir & pinmask); + bool dir =3D !!(chip->sdir & pinmask); =20 if (dir) - return !!(gc->read_reg(gc->reg_set) & pinmask); - else - return !!(gc->read_reg(gc->reg_dat) & pinmask); + return !!(chip->read_reg(chip->reg_set) & pinmask); + + return !!(chip->read_reg(chip->reg_dat) & pinmask); } =20 /* @@ -148,26 +151,28 @@ static int bgpio_get_set(struct gpio_chip *gc, unsign= ed int gpio) static int bgpio_get_set_multiple(struct gpio_chip *gc, unsigned long *mas= k, unsigned long *bits) { - unsigned long get_mask =3D 0; - unsigned long set_mask =3D 0; + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + unsigned long get_mask =3D 0, set_mask =3D 0; =20 /* Make sure we first clear any bits that are zero when we read the regis= ter */ *bits &=3D ~*mask; =20 - set_mask =3D *mask & gc->bgpio_dir; - get_mask =3D *mask & ~gc->bgpio_dir; + set_mask =3D *mask & chip->sdir; + get_mask =3D *mask & ~chip->sdir; =20 if (set_mask) - *bits |=3D gc->read_reg(gc->reg_set) & set_mask; + *bits |=3D chip->read_reg(chip->reg_set) & set_mask; if (get_mask) - *bits |=3D gc->read_reg(gc->reg_dat) & get_mask; + *bits |=3D chip->read_reg(chip->reg_dat) & get_mask; =20 return 0; } =20 static int bgpio_get(struct gpio_chip *gc, unsigned int gpio) { - return !!(gc->read_reg(gc->reg_dat) & bgpio_line2mask(gc, gpio)); + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + + return !!(chip->read_reg(chip->reg_dat) & bgpio_line2mask(gc, gpio)); } =20 /* @@ -176,9 +181,11 @@ static int bgpio_get(struct gpio_chip *gc, unsigned in= t gpio) static int bgpio_get_multiple(struct gpio_chip *gc, unsigned long *mask, unsigned long *bits) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + /* Make sure we first clear any bits that are zero when we read the regis= ter */ *bits &=3D ~*mask; - *bits |=3D gc->read_reg(gc->reg_dat) & *mask; + *bits |=3D chip->read_reg(chip->reg_dat) & *mask; return 0; } =20 @@ -188,6 +195,7 @@ static int bgpio_get_multiple(struct gpio_chip *gc, uns= igned long *mask, static int bgpio_get_multiple_be(struct gpio_chip *gc, unsigned long *mask, unsigned long *bits) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long readmask =3D 0; unsigned long val; int bit; @@ -200,7 +208,7 @@ static int bgpio_get_multiple_be(struct gpio_chip *gc, = unsigned long *mask, readmask |=3D bgpio_line2mask(gc, bit); =20 /* Read the register */ - val =3D gc->read_reg(gc->reg_dat) & readmask; + val =3D chip->read_reg(chip->reg_dat) & readmask; =20 /* * Mirror the result into the "bits" result, this will give line 0 @@ -219,19 +227,20 @@ static int bgpio_set_none(struct gpio_chip *gc, unsig= ned int gpio, int val) =20 static int bgpio_set(struct gpio_chip *gc, unsigned int gpio, int val) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long mask =3D bgpio_line2mask(gc, gpio); unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + raw_spin_lock_irqsave(&chip->lock, flags); =20 if (val) - gc->bgpio_data |=3D mask; + chip->sdata |=3D mask; else - gc->bgpio_data &=3D ~mask; + chip->sdata &=3D ~mask; =20 - gc->write_reg(gc->reg_dat, gc->bgpio_data); + chip->write_reg(chip->reg_dat, chip->sdata); =20 - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + raw_spin_unlock_irqrestore(&chip->lock, flags); =20 return 0; } @@ -239,31 +248,32 @@ static int bgpio_set(struct gpio_chip *gc, unsigned i= nt gpio, int val) static int bgpio_set_with_clear(struct gpio_chip *gc, unsigned int gpio, int val) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long mask =3D bgpio_line2mask(gc, gpio); =20 if (val) - gc->write_reg(gc->reg_set, mask); + chip->write_reg(chip->reg_set, mask); else - gc->write_reg(gc->reg_clr, mask); + chip->write_reg(chip->reg_clr, mask); =20 return 0; } =20 static int bgpio_set_set(struct gpio_chip *gc, unsigned int gpio, int val) { - unsigned long mask =3D bgpio_line2mask(gc, gpio); - unsigned long flags; + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + unsigned long mask =3D bgpio_line2mask(gc, gpio), flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + raw_spin_lock_irqsave(&chip->lock, flags); =20 if (val) - gc->bgpio_data |=3D mask; + chip->sdata |=3D mask; else - gc->bgpio_data &=3D ~mask; + chip->sdata &=3D ~mask; =20 - gc->write_reg(gc->reg_set, gc->bgpio_data); + chip->write_reg(chip->reg_set, chip->sdata); =20 - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + raw_spin_unlock_irqrestore(&chip->lock, flags); =20 return 0; } @@ -273,12 +283,13 @@ static void bgpio_multiple_get_masks(struct gpio_chip= *gc, unsigned long *set_mask, unsigned long *clear_mask) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); int i; =20 *set_mask =3D 0; *clear_mask =3D 0; =20 - for_each_set_bit(i, mask, gc->bgpio_bits) { + for_each_set_bit(i, mask, chip->bits) { if (test_bit(i, bits)) *set_mask |=3D bgpio_line2mask(gc, i); else @@ -291,25 +302,27 @@ static void bgpio_set_multiple_single_reg(struct gpio= _chip *gc, unsigned long *bits, void __iomem *reg) { - unsigned long flags; - unsigned long set_mask, clear_mask; + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + unsigned long flags, set_mask, clear_mask; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + raw_spin_lock_irqsave(&chip->lock, flags); =20 bgpio_multiple_get_masks(gc, mask, bits, &set_mask, &clear_mask); =20 - gc->bgpio_data |=3D set_mask; - gc->bgpio_data &=3D ~clear_mask; + chip->sdata |=3D set_mask; + chip->sdata &=3D ~clear_mask; =20 - gc->write_reg(reg, gc->bgpio_data); + chip->write_reg(reg, chip->sdata); =20 - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + raw_spin_unlock_irqrestore(&chip->lock, flags); } =20 static int bgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, unsigned long *bits) { - bgpio_set_multiple_single_reg(gc, mask, bits, gc->reg_dat); + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + + bgpio_set_multiple_single_reg(gc, mask, bits, chip->reg_dat); =20 return 0; } @@ -317,7 +330,9 @@ static int bgpio_set_multiple(struct gpio_chip *gc, uns= igned long *mask, static int bgpio_set_multiple_set(struct gpio_chip *gc, unsigned long *mas= k, unsigned long *bits) { - bgpio_set_multiple_single_reg(gc, mask, bits, gc->reg_set); + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + + bgpio_set_multiple_single_reg(gc, mask, bits, chip->reg_set); =20 return 0; } @@ -326,21 +341,24 @@ static int bgpio_set_multiple_with_clear(struct gpio_= chip *gc, unsigned long *mask, unsigned long *bits) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long set_mask, clear_mask; =20 bgpio_multiple_get_masks(gc, mask, bits, &set_mask, &clear_mask); =20 if (set_mask) - gc->write_reg(gc->reg_set, set_mask); + chip->write_reg(chip->reg_set, set_mask); if (clear_mask) - gc->write_reg(gc->reg_clr, clear_mask); + chip->write_reg(chip->reg_clr, clear_mask); =20 return 0; } =20 static int bgpio_dir_return(struct gpio_chip *gc, unsigned int gpio, bool = dir_out) { - if (!gc->bgpio_pinctrl) + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + + if (!chip->pinctrl) return 0; =20 if (dir_out) @@ -375,39 +393,42 @@ static int bgpio_simple_dir_out(struct gpio_chip *gc,= unsigned int gpio, =20 static int bgpio_dir_in(struct gpio_chip *gc, unsigned int gpio) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + raw_spin_lock_irqsave(&chip->lock, flags); =20 - gc->bgpio_dir &=3D ~bgpio_line2mask(gc, gpio); + chip->sdir &=3D ~bgpio_line2mask(gc, gpio); =20 - if (gc->reg_dir_in) - gc->write_reg(gc->reg_dir_in, ~gc->bgpio_dir); - if (gc->reg_dir_out) - gc->write_reg(gc->reg_dir_out, gc->bgpio_dir); + if (chip->reg_dir_in) + chip->write_reg(chip->reg_dir_in, ~chip->sdir); + if (chip->reg_dir_out) + chip->write_reg(chip->reg_dir_out, chip->sdir); =20 - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + raw_spin_unlock_irqrestore(&chip->lock, flags); =20 return bgpio_dir_return(gc, gpio, false); } =20 static int bgpio_get_dir(struct gpio_chip *gc, unsigned int gpio) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + /* Return 0 if output, 1 if input */ - if (gc->bgpio_dir_unreadable) { - if (gc->bgpio_dir & bgpio_line2mask(gc, gpio)) + if (chip->dir_unreadable) { + if (chip->sdir & bgpio_line2mask(gc, gpio)) return GPIO_LINE_DIRECTION_OUT; return GPIO_LINE_DIRECTION_IN; } =20 - if (gc->reg_dir_out) { - if (gc->read_reg(gc->reg_dir_out) & bgpio_line2mask(gc, gpio)) + if (chip->reg_dir_out) { + if (chip->read_reg(chip->reg_dir_out) & bgpio_line2mask(gc, gpio)) return GPIO_LINE_DIRECTION_OUT; return GPIO_LINE_DIRECTION_IN; } =20 - if (gc->reg_dir_in) - if (!(gc->read_reg(gc->reg_dir_in) & bgpio_line2mask(gc, gpio))) + if (chip->reg_dir_in) + if (!(chip->read_reg(chip->reg_dir_in) & bgpio_line2mask(gc, gpio))) return GPIO_LINE_DIRECTION_OUT; =20 return GPIO_LINE_DIRECTION_IN; @@ -415,18 +436,19 @@ static int bgpio_get_dir(struct gpio_chip *gc, unsign= ed int gpio) =20 static void bgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) { + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); unsigned long flags; =20 - raw_spin_lock_irqsave(&gc->bgpio_lock, flags); + raw_spin_lock_irqsave(&chip->lock, flags); =20 - gc->bgpio_dir |=3D bgpio_line2mask(gc, gpio); + chip->sdir |=3D bgpio_line2mask(gc, gpio); =20 - if (gc->reg_dir_in) - gc->write_reg(gc->reg_dir_in, ~gc->bgpio_dir); - if (gc->reg_dir_out) - gc->write_reg(gc->reg_dir_out, gc->bgpio_dir); + if (chip->reg_dir_in) + chip->write_reg(chip->reg_dir_in, ~chip->sdir); + if (chip->reg_dir_out) + chip->write_reg(chip->reg_dir_out, chip->sdir); =20 - raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags); + raw_spin_unlock_irqrestore(&chip->lock, flags); } =20 static int bgpio_dir_out_dir_first(struct gpio_chip *gc, unsigned int gpio, @@ -446,31 +468,30 @@ static int bgpio_dir_out_val_first(struct gpio_chip *= gc, unsigned int gpio, } =20 static int bgpio_setup_accessors(struct device *dev, - struct gpio_chip *gc, + struct gpio_generic_chip *chip, bool byte_be) { - - switch (gc->bgpio_bits) { + switch (chip->bits) { case 8: - gc->read_reg =3D bgpio_read8; - gc->write_reg =3D bgpio_write8; + chip->read_reg =3D bgpio_read8; + chip->write_reg =3D bgpio_write8; break; case 16: if (byte_be) { - gc->read_reg =3D bgpio_read16be; - gc->write_reg =3D bgpio_write16be; + chip->read_reg =3D bgpio_read16be; + chip->write_reg =3D bgpio_write16be; } else { - gc->read_reg =3D bgpio_read16; - gc->write_reg =3D bgpio_write16; + chip->read_reg =3D bgpio_read16; + chip->write_reg =3D bgpio_write16; } break; case 32: if (byte_be) { - gc->read_reg =3D bgpio_read32be; - gc->write_reg =3D bgpio_write32be; + chip->read_reg =3D bgpio_read32be; + chip->write_reg =3D bgpio_write32be; } else { - gc->read_reg =3D bgpio_read32; - gc->write_reg =3D bgpio_write32; + chip->read_reg =3D bgpio_read32; + chip->write_reg =3D bgpio_write32; } break; #if BITS_PER_LONG >=3D 64 @@ -480,13 +501,13 @@ static int bgpio_setup_accessors(struct device *dev, "64 bit big endian byte order unsupported\n"); return -EINVAL; } else { - gc->read_reg =3D bgpio_read64; - gc->write_reg =3D bgpio_write64; + chip->read_reg =3D bgpio_read64; + chip->write_reg =3D bgpio_write64; } break; #endif /* BITS_PER_LONG >=3D 64 */ default: - dev_err(dev, "unsupported data width %u bits\n", gc->bgpio_bits); + dev_err(dev, "unsupported data width %u bits\n", chip->bits); return -EINVAL; } =20 @@ -515,27 +536,25 @@ static int bgpio_setup_accessors(struct device *dev, * - an input direction register (named "dirin") where a 1 bit indicates * the GPIO is an input. */ -static int bgpio_setup_io(struct gpio_chip *gc, - void __iomem *dat, - void __iomem *set, - void __iomem *clr, - unsigned long flags) +static int bgpio_setup_io(struct gpio_generic_chip *chip, + const struct gpio_generic_chip_config *cfg) { + struct gpio_chip *gc =3D &chip->gc; =20 - gc->reg_dat =3D dat; - if (!gc->reg_dat) + chip->reg_dat =3D cfg->dat; + if (!chip->reg_dat) return -EINVAL; =20 - if (set && clr) { - gc->reg_set =3D set; - gc->reg_clr =3D clr; + if (cfg->set && cfg->clr) { + chip->reg_set =3D cfg->set; + chip->reg_clr =3D cfg->clr; gc->set =3D bgpio_set_with_clear; gc->set_multiple =3D bgpio_set_multiple_with_clear; - } else if (set && !clr) { - gc->reg_set =3D set; + } else if (cfg->set && !cfg->clr) { + chip->reg_set =3D cfg->set; gc->set =3D bgpio_set_set; gc->set_multiple =3D bgpio_set_multiple_set; - } else if (flags & BGPIOF_NO_OUTPUT) { + } else if (cfg->flags & BGPIOF_NO_OUTPUT) { gc->set =3D bgpio_set_none; gc->set_multiple =3D NULL; } else { @@ -543,10 +562,10 @@ static int bgpio_setup_io(struct gpio_chip *gc, gc->set_multiple =3D bgpio_set_multiple; } =20 - if (!(flags & BGPIOF_UNREADABLE_REG_SET) && - (flags & BGPIOF_READ_OUTPUT_REG_SET)) { + if (!(cfg->flags & BGPIOF_UNREADABLE_REG_SET) && + (cfg->flags & BGPIOF_READ_OUTPUT_REG_SET)) { gc->get =3D bgpio_get_set; - if (!gc->be_bits) + if (!chip->be_bits) gc->get_multiple =3D bgpio_get_set_multiple; /* * We deliberately avoid assigning the ->get_multiple() call @@ -557,7 +576,7 @@ static int bgpio_setup_io(struct gpio_chip *gc, */ } else { gc->get =3D bgpio_get; - if (gc->be_bits) + if (chip->be_bits) gc->get_multiple =3D bgpio_get_multiple_be; else gc->get_multiple =3D bgpio_get_multiple; @@ -566,27 +585,27 @@ static int bgpio_setup_io(struct gpio_chip *gc, return 0; } =20 -static int bgpio_setup_direction(struct gpio_chip *gc, - void __iomem *dirout, - void __iomem *dirin, - unsigned long flags) +static int bgpio_setup_direction(struct gpio_generic_chip *chip, + const struct gpio_generic_chip_config *cfg) { - if (dirout || dirin) { - gc->reg_dir_out =3D dirout; - gc->reg_dir_in =3D dirin; - if (flags & BGPIOF_NO_SET_ON_INPUT) + struct gpio_chip *gc =3D &chip->gc; + + if (cfg->dirout || cfg->dirin) { + chip->reg_dir_out =3D cfg->dirout; + chip->reg_dir_in =3D cfg->dirin; + if (cfg->flags & BGPIOF_NO_SET_ON_INPUT) gc->direction_output =3D bgpio_dir_out_dir_first; else gc->direction_output =3D bgpio_dir_out_val_first; gc->direction_input =3D bgpio_dir_in; gc->get_direction =3D bgpio_get_dir; } else { - if (flags & BGPIOF_NO_OUTPUT) + if (cfg->flags & BGPIOF_NO_OUTPUT) gc->direction_output =3D bgpio_dir_out_err; else gc->direction_output =3D bgpio_simple_dir_out; =20 - if (flags & BGPIOF_NO_INPUT) + if (cfg->flags & BGPIOF_NO_INPUT) gc->direction_input =3D bgpio_dir_in_err; else gc->direction_input =3D bgpio_simple_dir_in; @@ -595,117 +614,101 @@ static int bgpio_setup_direction(struct gpio_chip *= gc, return 0; } =20 -static int bgpio_request(struct gpio_chip *chip, unsigned gpio_pin) +static int bgpio_request(struct gpio_chip *gc, unsigned int gpio_pin) { - if (gpio_pin >=3D chip->ngpio) + struct gpio_generic_chip *chip =3D to_gpio_generic_chip(gc); + + if (gpio_pin >=3D gc->ngpio) return -EINVAL; =20 - if (chip->bgpio_pinctrl) - return gpiochip_generic_request(chip, gpio_pin); + if (chip->pinctrl) + return gpiochip_generic_request(gc, gpio_pin); =20 return 0; } =20 /** - * bgpio_init() - Initialize generic GPIO accessor functions - * @gc: the GPIO chip to set up - * @dev: the parent device of the new GPIO chip (compulsory) - * @sz: the size (width) of the MMIO registers in bytes, typically 1, 2 or= 4 - * @dat: MMIO address for the register to READ the value of the GPIO lines= , it - * is expected that a 1 in the corresponding bit in this register means the - * line is asserted - * @set: MMIO address for the register to SET the value of the GPIO lines,= it is - * expected that we write the line with 1 in this register to drive the GP= IO line - * high. - * @clr: MMIO address for the register to CLEAR the value of the GPIO line= s, it is - * expected that we write the line with 1 in this register to drive the GP= IO line - * low. It is allowed to leave this address as NULL, in that case the SET = register - * will be assumed to also clear the GPIO lines, by actively writing the l= ine - * with 0. - * @dirout: MMIO address for the register to set the line as OUTPUT. It is= assumed - * that setting a line to 1 in this register will turn that line into an - * output line. Conversely, setting the line to 0 will turn that line into - * an input. - * @dirin: MMIO address for the register to set this line as INPUT. It is = assumed - * that setting a line to 1 in this register will turn that line into an - * input line. Conversely, setting the line to 0 will turn that line into - * an output. - * @flags: Different flags that will affect the behaviour of the device, s= uch as - * endianness etc. + * gpio_generic_chip_init() - Initialize a generic GPIO chip. + * @chip: Generic GPIO chip to set up. + * @cfg: Generic GPIO chip configuration. + * + * Returns 0 on success, negative error number on failure. */ -int bgpio_init(struct gpio_chip *gc, struct device *dev, - unsigned long sz, void __iomem *dat, void __iomem *set, - void __iomem *clr, void __iomem *dirout, void __iomem *dirin, - unsigned long flags) +int gpio_generic_chip_init(struct gpio_generic_chip *chip, + const struct gpio_generic_chip_config *cfg) { + struct gpio_chip *gc =3D &chip->gc; + unsigned long flags =3D cfg->flags; + struct device *dev =3D cfg->dev; int ret; =20 - if (!is_power_of_2(sz)) + if (!is_power_of_2(cfg->sz)) return -EINVAL; =20 - gc->bgpio_bits =3D sz * 8; - if (gc->bgpio_bits > BITS_PER_LONG) + chip->bits =3D cfg->sz * 8; + if (chip->bits > BITS_PER_LONG) return -EINVAL; =20 - raw_spin_lock_init(&gc->bgpio_lock); + raw_spin_lock_init(&chip->lock); gc->parent =3D dev; gc->label =3D dev_name(dev); gc->base =3D -1; gc->request =3D bgpio_request; - gc->be_bits =3D !!(flags & BGPIOF_BIG_ENDIAN); + chip->be_bits =3D !!(flags & BGPIOF_BIG_ENDIAN); =20 ret =3D gpiochip_get_ngpios(gc, dev); if (ret) - gc->ngpio =3D gc->bgpio_bits; + gc->ngpio =3D chip->bits; =20 - ret =3D bgpio_setup_io(gc, dat, set, clr, flags); + ret =3D bgpio_setup_io(chip, cfg); if (ret) return ret; =20 - ret =3D bgpio_setup_accessors(dev, gc, flags & BGPIOF_BIG_ENDIAN_BYTE_ORD= ER); + ret =3D bgpio_setup_accessors(dev, chip, + flags & BGPIOF_BIG_ENDIAN_BYTE_ORDER); if (ret) return ret; =20 - ret =3D bgpio_setup_direction(gc, dirout, dirin, flags); + ret =3D bgpio_setup_direction(chip, cfg); if (ret) return ret; =20 if (flags & BGPIOF_PINCTRL_BACKEND) { - gc->bgpio_pinctrl =3D true; + chip->pinctrl =3D true; /* Currently this callback is only used for pincontrol */ gc->free =3D gpiochip_generic_free; } =20 - gc->bgpio_data =3D gc->read_reg(gc->reg_dat); + chip->sdata =3D chip->read_reg(chip->reg_dat); if (gc->set =3D=3D bgpio_set_set && !(flags & BGPIOF_UNREADABLE_REG_SET)) - gc->bgpio_data =3D gc->read_reg(gc->reg_set); + chip->sdata =3D chip->read_reg(chip->reg_set); =20 if (flags & BGPIOF_UNREADABLE_REG_DIR) - gc->bgpio_dir_unreadable =3D true; + chip->dir_unreadable =3D true; =20 /* * Inspect hardware to find initial direction setting. */ - if ((gc->reg_dir_out || gc->reg_dir_in) && + if ((chip->reg_dir_out || chip->reg_dir_in) && !(flags & BGPIOF_UNREADABLE_REG_DIR)) { - if (gc->reg_dir_out) - gc->bgpio_dir =3D gc->read_reg(gc->reg_dir_out); - else if (gc->reg_dir_in) - gc->bgpio_dir =3D ~gc->read_reg(gc->reg_dir_in); + if (chip->reg_dir_out) + chip->sdir =3D chip->read_reg(chip->reg_dir_out); + else if (chip->reg_dir_in) + chip->sdir =3D ~chip->read_reg(chip->reg_dir_in); /* * If we have two direction registers, synchronise * input setting to output setting, the library * can not handle a line being input and output at * the same time. */ - if (gc->reg_dir_out && gc->reg_dir_in) - gc->write_reg(gc->reg_dir_in, ~gc->bgpio_dir); + if (chip->reg_dir_out && chip->reg_dir_in) + chip->write_reg(chip->reg_dir_in, ~chip->sdir); } =20 return ret; } -EXPORT_SYMBOL_GPL(bgpio_init); +EXPORT_SYMBOL_GPL(gpio_generic_chip_init); =20 #if IS_ENABLED(CONFIG_GPIO_GENERIC_PLATFORM) =20 diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c index 38643fb813c562957076aab48d804f8048cee5e4..2bb6100840ea27fb63ce7cdc3e1= eb3e43526eb4d 100644 --- a/drivers/gpio/gpio-mpc8xxx.c +++ b/drivers/gpio/gpio-mpc8xxx.c @@ -71,7 +71,7 @@ static int mpc8572_gpio_get(struct gpio_chip *gc, unsigne= d int gpio) mpc8xxx_gc->regs + GPIO_DIR); val =3D gpio_generic_read_reg(&mpc8xxx_gc->chip, mpc8xxx_gc->regs + GPIO_DAT) & ~out_mask; - out_shadow =3D gc->bgpio_data & out_mask; + out_shadow =3D mpc8xxx_gc->chip.sdata & out_mask; =20 return !!((val | out_shadow) & mpc_pin2mask(gpio)); } @@ -399,7 +399,8 @@ static int mpc8xxx_probe(struct platform_device *pdev) gpio_generic_write_reg(&mpc8xxx_gc->chip, mpc8xxx_gc->regs + GPIO_IBE, 0xffffffff); /* Also, latch state of GPIOs configured as output by bootloader. */ - gc->bgpio_data =3D gpio_generic_read_reg(&mpc8xxx_gc->chip, + mpc8xxx_gc->chip.sdata =3D + gpio_generic_read_reg(&mpc8xxx_gc->chip, mpc8xxx_gc->regs + GPIO_DAT) & gpio_generic_read_reg(&mpc8xxx_gc->chip, mpc8xxx_gc->regs + GPIO_DIR); diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h index 9fcd4a988081f74d25dc88535705ba9265e56fd2..9b14fd20f13eee7d465e065e7de= d2c92e2bbc78e 100644 --- a/include/linux/gpio/driver.h +++ b/include/linux/gpio/driver.h @@ -388,28 +388,6 @@ struct gpio_irq_chip { * implies that if the chip supports IRQs, these IRQs need to be threaded * as the chip access may sleep when e.g. reading out the IRQ status * registers. - * @read_reg: reader function for generic GPIO - * @write_reg: writer function for generic GPIO - * @be_bits: if the generic GPIO has big endian bit order (bit 31 is repre= senting - * line 0, bit 30 is line 1 ... bit 0 is line 31) this is set to true by t= he - * generic GPIO core. It is for internal housekeeping only. - * @reg_dat: data (in) register for generic GPIO - * @reg_set: output set register (out=3Dhigh) for generic GPIO - * @reg_clr: output clear register (out=3Dlow) for generic GPIO - * @reg_dir_out: direction out setting register for generic GPIO - * @reg_dir_in: direction in setting register for generic GPIO - * @bgpio_dir_unreadable: indicates that the direction register(s) cannot - * be read and we need to rely on out internal state tracking. - * @bgpio_pinctrl: the generic GPIO uses a pin control backend. - * @bgpio_bits: number of register bits used for a generic GPIO i.e. - * * 8 - * @bgpio_lock: used to lock chip->bgpio_data. Also, this is needed to keep - * shadowed and real data registers writes together. - * @bgpio_data: shadowed data register for generic GPIO to clear/set bits - * safely. - * @bgpio_dir: shadowed direction register for generic GPIO to clear/set - * direction safely. A "1" in this word means the line is set as - * output. * * A gpio_chip can help platforms abstract various sources of GPIOs so * they can all be accessed through a common programming interface. @@ -475,23 +453,6 @@ struct gpio_chip { const char *const *names; bool can_sleep; =20 -#if IS_ENABLED(CONFIG_GPIO_GENERIC) - unsigned long (*read_reg)(void __iomem *reg); - void (*write_reg)(void __iomem *reg, unsigned long data); - bool be_bits; - void __iomem *reg_dat; - void __iomem *reg_set; - void __iomem *reg_clr; - void __iomem *reg_dir_out; - void __iomem *reg_dir_in; - bool bgpio_dir_unreadable; - bool bgpio_pinctrl; - int bgpio_bits; - raw_spinlock_t bgpio_lock; - unsigned long bgpio_data; - unsigned long bgpio_dir; -#endif /* CONFIG_GPIO_GENERIC */ - #ifdef CONFIG_GPIOLIB_IRQCHIP /* * With CONFIG_GPIOLIB_IRQCHIP we get an irqchip inside the gpiolib @@ -723,11 +684,6 @@ int gpiochip_populate_parent_fwspec_fourcell(struct gp= io_chip *gc, =20 #endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */ =20 -int bgpio_init(struct gpio_chip *gc, struct device *dev, - unsigned long sz, void __iomem *dat, void __iomem *set, - void __iomem *clr, void __iomem *dirout, void __iomem *dirin, - unsigned long flags); - #define BGPIOF_BIG_ENDIAN BIT(0) #define BGPIOF_UNREADABLE_REG_SET BIT(1) /* reg_set is unreadable */ #define BGPIOF_UNREADABLE_REG_DIR BIT(2) /* reg_dir is unreadable */ diff --git a/include/linux/gpio/generic.h b/include/linux/gpio/generic.h index 4c0626b53ec90388a034bc7797eefa53e7ea064e..162430d96660e96b995eb4a2e64= 183503fc618e3 100644 --- a/include/linux/gpio/generic.h +++ b/include/linux/gpio/generic.h @@ -50,9 +50,44 @@ struct gpio_generic_chip_config { * struct gpio_generic_chip - Generic GPIO chip implementation. * @gc: The underlying struct gpio_chip object, implementing low-level GPIO * chip routines. + * @read_reg: reader function for generic GPIO + * @write_reg: writer function for generic GPIO + * @be_bits: if the generic GPIO has big endian bit order (bit 31 is + * representing line 0, bit 30 is line 1 ... bit 0 is line 31) t= his + * is set to true by the generic GPIO core. It is for internal + * housekeeping only. + * @reg_dat: data (in) register for generic GPIO + * @reg_set: output set register (out=3Dhigh) for generic GPIO + * @reg_clr: output clear register (out=3Dlow) for generic GPIO + * @reg_dir_out: direction out setting register for generic GPIO + * @reg_dir_in: direction in setting register for generic GPIO + * @dir_unreadable: indicates that the direction register(s) cannot be rea= d and + * we need to rely on out internal state tracking. + * @pinctrl: the generic GPIO uses a pin control backend. + * @bits: number of register bits used for a generic GPIO + * i.e. * 8 + * @lock: used to lock chip->sdata. Also, this is needed to keep + * shadowed and real data registers writes together. + * @sdata: shadowed data register for generic GPIO to clear/set bits safel= y. + * @sdir: shadowed direction register for generic GPIO to clear/set direct= ion + * safely. A "1" in this word means the line is set as output. */ struct gpio_generic_chip { struct gpio_chip gc; + unsigned long (*read_reg)(void __iomem *reg); + void (*write_reg)(void __iomem *reg, unsigned long data); + bool be_bits; + void __iomem *reg_dat; + void __iomem *reg_set; + void __iomem *reg_clr; + void __iomem *reg_dir_out; + void __iomem *reg_dir_in; + bool dir_unreadable; + bool pinctrl; + int bits; + raw_spinlock_t lock; + unsigned long sdata; + unsigned long sdir; }; =20 static inline struct gpio_generic_chip * @@ -61,20 +96,8 @@ to_gpio_generic_chip(struct gpio_chip *gc) return container_of(gc, struct gpio_generic_chip, gc); } =20 -/** - * gpio_generic_chip_init() - Initialize a generic GPIO chip. - * @chip: Generic GPIO chip to set up. - * @cfg: Generic GPIO chip configuration. - * - * Returns 0 on success, negative error number on failure. - */ -static inline int -gpio_generic_chip_init(struct gpio_generic_chip *chip, - const struct gpio_generic_chip_config *cfg) -{ - return bgpio_init(&chip->gc, cfg->dev, cfg->sz, cfg->dat, cfg->set, - cfg->clr, cfg->dirout, cfg->dirin, cfg->flags); -} +int gpio_generic_chip_init(struct gpio_generic_chip *chip, + const struct gpio_generic_chip_config *cfg); =20 /** * gpio_generic_chip_set() - Set the GPIO line value of the generic GPIO c= hip. @@ -110,10 +133,10 @@ gpio_generic_chip_set(struct gpio_generic_chip *chip,= unsigned int offset, static inline unsigned long gpio_generic_read_reg(struct gpio_generic_chip *chip, void __iomem *reg) { - if (WARN_ON(!chip->gc.read_reg)) + if (WARN_ON(!chip->read_reg)) return 0; =20 - return chip->gc.read_reg(reg); + return chip->read_reg(reg); } =20 /** @@ -125,23 +148,23 @@ gpio_generic_read_reg(struct gpio_generic_chip *chip,= void __iomem *reg) static inline void gpio_generic_write_reg(struct gpio_generic_chip *chip, void __iomem *reg, unsigned long val) { - if (WARN_ON(!chip->gc.write_reg)) + if (WARN_ON(!chip->write_reg)) return; =20 - chip->gc.write_reg(reg, val); + chip->write_reg(reg, val); } =20 #define gpio_generic_chip_lock(gen_gc) \ - raw_spin_lock(&(gen_gc)->gc.bgpio_lock) + raw_spin_lock(&(gen_gc)->lock) =20 #define gpio_generic_chip_unlock(gen_gc) \ - raw_spin_unlock(&(gen_gc)->gc.bgpio_lock) + raw_spin_unlock(&(gen_gc)->lock) =20 #define gpio_generic_chip_lock_irqsave(gen_gc, flags) \ - raw_spin_lock_irqsave(&(gen_gc)->gc.bgpio_lock, flags) + raw_spin_lock_irqsave(&(gen_gc)->lock, flags) =20 #define gpio_generic_chip_unlock_irqrestore(gen_gc, flags) \ - raw_spin_unlock_irqrestore(&(gen_gc)->gc.bgpio_lock, flags) + raw_spin_unlock_irqrestore(&(gen_gc)->lock, flags) =20 DEFINE_LOCK_GUARD_1(gpio_generic_lock, struct gpio_generic_chip, --=20 2.48.1