From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 C6B30371D1D for ; Mon, 13 Jul 2026 21:58:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783979914; cv=none; b=kf3lm2sMmhTl4FOqc9CGy8VG/8ycl+WCwwWQRiL6y3YSGBvJbnqGlUeUHIT1zNrINvuvYnDt7/8arEQt54GMJjaQE1l1l4Yb8mSn9ramWq4UaQuYsekYHkwkWTptxXJ8YjeKUXJkNKrJKCuFqRkdaj0/RCgZl2+t/baFUL6+tLE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783979914; c=relaxed/simple; bh=29e1zWLx7tR8NGQ6MXjQX3b25i7ejmmUrpbreYdw5K8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rRx2IiQyRXChCkJcwNh5kvFDjf7obPIpFnGBf2BUf9a3kGc6jNPoMJZ0gEXuN9vi0YtlJbXwKFLSReqrzB59+B4JBRlqpt64CLeOmUUJci2c/XHFgFRjMWlugoV/qFcMR+ERh3EuhIryQaYeVAGa9YJBn0nUXuCbXR47p9D+5dQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WoY2M2oL; arc=none smtp.client-ip=209.85.215.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WoY2M2oL" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-ca957432c7fso2499713a12.1 for ; Mon, 13 Jul 2026 14:58:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783979911; x=1784584711; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RlMUdZeGBVP+uq5JMmWJnIlIlnx5G6dUdNZ/G/e6M0A=; b=WoY2M2oL+xzXzZYOLyobN3ZtXeyafQHO/uTae8rIaFGhY0vrj6Q88PO22a3YDops1Y OVwk3UaUEd4vbBveo24CRaufEOtxYYM2mbKzJE1mzBdn7Kwrquzjnm7OUyxbSjiLs2Dg tVsIlmPuRqwyezR9jwf+xqnAqp4JmZ9NQp7tLFBuy6nBH345gfiGTEssRerdtlYsB6si S2ZGUzsO8clsTnQDbV7B1OAimTrDYiiFN9xZxzBsWUvNAGS3XOaDz/sTms9OYX2EITM4 iG0it9T9OYtWPphWL1RtZzmgE2ZN8hC3U4ZHXDLfD7YgVlFvGdJ4tsXCbqlfgZiSERoN 2Nsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783979911; x=1784584711; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=RlMUdZeGBVP+uq5JMmWJnIlIlnx5G6dUdNZ/G/e6M0A=; b=jaMJGelZgNe9JcpiAsFVbfpaYNReCvDJ5gKsCehhg5iNHlODlehKSFTreB5seWG1il tRcGPYgI+1yplOUwil8qTqWmx4Qw88pyuJL9VTm/RbcmWOM6N5VBSB/Z9PX8lTULgOsu J1bb04PGWOVauLjhc434OOeddtjxxrt8/XQWTMhZxaIMOwaRCLV3iEgf1BuBLDE0av3k 8Yw38nPQCkTZN6KcAoJtl6EBt9/vQeq09yQkVAkreH2VNBQZ+R+rnQe25VRqclI8+O6C TUHyCTkJG9o40nIc9SIWG1Tdrvkid7C9pd5PoeZuKvtWH00epnNwYn0EcbnIW3+zIh8o zzzA== X-Forwarded-Encrypted: i=1; AHgh+RqA6LnQHOaIPSqkaytIF5TdQGCy1+n3O6CWMBZpmpFdjWfXXOHakE7wBGwHyKOPEYLiOVlgDgF1ZvqHZRQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yztd+m2KaZd2DuYr/0SOf5Z8s3w/RBjyTTT+nViOx3vpvHox3J9 8qa1842hJAC5X2p29F1PtR6WNrEO90kGTJjv5MUM5GXF5YE+EHl56t7/Sd+4WQ== X-Gm-Gg: AfdE7cnch75fWTo+NwlwPjmkRX+sy0PegsBCCMoJTib0OZBxHHigYSqdsloW1LD3UAb t8QibMPX1mU6U+qUWcZa6EbMuEzAaygPcGNdFsZ8eVWmWFQXxeCPkJHVoX09jTaP1idbPHggq6+ w2OTxvuEwA7+X5PyCGO35+slwaKXi+fdATa79++b43dQDs4Hi9ZLb2mQHYMzYcaJS3tb+ss7GO7 7Hu38nqEoLz8uE8vn9W/iJHPMg9bd61c2dTePY5GrxAPfsX5QdTWUu4CLkWq9e70S+0+FYFJwMd lOX390wUKFoK2Zmt+mUezCLAms8lQiXxM1d0zF0nboQVQdxEj+mLufLAGSaLHXgKGk+rUf+09a3 dNt0+NiMgRDNiWSrjweqTJz1ocqDZZp3e7SRh0KIJBXhebjPPLawo9UsOCs7Y6HES535BKRD9Qw tr555+lvMXIP+IfarirrWWffHmikRtwOWDKvjufnzK5g73P3Azyd+uqt+xsK6Oo2UOpse+mqsrV 1GdDdWFiYkf9Fw= X-Received: by 2002:a05:6a21:4c08:b0:3bf:d1f9:b1d9 with SMTP id adf61e73a8af0-3c110ba2a1amr10746536637.57.1783979911168; Mon, 13 Jul 2026 14:58:31 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:e15f:5d5f:580b:f2e9]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13b8a5992c9sm28371487c88.4.2026.07.13.14.58.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2026 14:58:30 -0700 (PDT) From: Dmitry Torokhov Date: Mon, 13 Jul 2026 14:58:23 -0700 Subject: [PATCH v2 2/3] ssb: gpio: Add and register software node for GPIO controller 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: 7bit Message-Id: <20260713-b4-bcm47xx-swnode-v2-2-2b879f0c193c@gmail.com> References: <20260713-b4-bcm47xx-swnode-v2-0-2b879f0c193c@gmail.com> In-Reply-To: <20260713-b4-bcm47xx-swnode-v2-0-2b879f0c193c@gmail.com> To: =?utf-8?q?Rafa=C5=82_Mi=C5=82ecki?= , Michael Buesch , Hauke Mehrtens , Thomas Bogendoerfer Cc: Bartosz Golaszewski , Arnd Bergmann , linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org X-Mailer: b4 0.16-dev-b242f We want to convert the legacy gpio-keys platform device on BCM47XX boards to use software nodes. To do this properly and allow referencing the GPIO controller by address rather than relying on name-based matching (which is being removed from the gpiolib core), we need to associate the GPIO controller with a software node. Introduce ssb_gpio_swnode, register it, and associate it with the gpio_chip. Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Dmitry Torokhov --- drivers/ssb/driver_gpio.c | 48 ++++++++++++++++++++++++++++++++++++++++------- include/linux/ssb/ssb.h | 2 ++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/drivers/ssb/driver_gpio.c b/drivers/ssb/driver_gpio.c index 905657c925bc..87922479946c 100644 --- a/drivers/ssb/driver_gpio.c +++ b/drivers/ssb/driver_gpio.c @@ -15,8 +15,14 @@ #include #include #include +#include #include +const struct software_node ssb_gpio_swnode = { + .name = "ssb-gpio", +}; +EXPORT_SYMBOL_GPL(ssb_gpio_swnode); + /************************************************** * Shared @@ -232,6 +238,8 @@ static int ssb_gpio_chipco_init(struct ssb_bus *bus) chip->to_irq = ssb_gpio_to_irq; #endif chip->ngpio = 16; + if (bus->bustype == SSB_BUSTYPE_SSB) + chip->fwnode = software_node_fwnode(&ssb_gpio_swnode); /* There is just one SoC in one device and its GPIO addresses should be * deterministic to address them more easily. The other buses could get * a random base number. @@ -433,10 +441,12 @@ static int ssb_gpio_extif_init(struct ssb_bus *bus) * deterministic to address them more easily. The other buses could get * a random base number. */ - if (bus->bustype == SSB_BUSTYPE_SSB) - chip->base = 0; - else - chip->base = -1; + if (bus->bustype == SSB_BUSTYPE_SSB) { + chip->base = 0; + chip->fwnode = software_node_fwnode(&ssb_gpio_swnode); + } else { + chip->base = -1; + } err = ssb_gpio_irq_extif_domain_init(bus); if (err) @@ -464,11 +474,33 @@ static int ssb_gpio_extif_init(struct ssb_bus *bus) int ssb_gpio_init(struct ssb_bus *bus) { + int err = 0; + + /* + * Register software node only for the host SoC bus. There is only + * one SoC instance in the system, so there are no concerns with + * registration conflicts. + */ + if (bus->bustype == SSB_BUSTYPE_SSB) { + err = software_node_register(&ssb_gpio_swnode); + if (err) + return err; + } + if (ssb_chipco_available(&bus->chipco)) - return ssb_gpio_chipco_init(bus); + err = ssb_gpio_chipco_init(bus); else if (ssb_extif_available(&bus->extif)) - return ssb_gpio_extif_init(bus); - return -1; + err = ssb_gpio_extif_init(bus); + else + err = -ENODEV; + + if (err) { + if (bus->bustype == SSB_BUSTYPE_SSB) + software_node_unregister(&ssb_gpio_swnode); + return err; + } + + return 0; } int ssb_gpio_unregister(struct ssb_bus *bus) @@ -476,6 +508,8 @@ int ssb_gpio_unregister(struct ssb_bus *bus) if (ssb_chipco_available(&bus->chipco) || ssb_extif_available(&bus->extif)) { gpiochip_remove(&bus->gpio); + if (bus->bustype == SSB_BUSTYPE_SSB) + software_node_unregister(&ssb_gpio_swnode); return 0; } return -1; diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 7fee9afa9458..67cb66f6f5ed 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h @@ -671,4 +671,6 @@ int ssb_pcibios_plat_dev_init(struct pci_dev *dev); int ssb_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); #endif /* CONFIG_SSB_EMBEDDED */ +extern const struct software_node ssb_gpio_swnode; + #endif /* LINUX_SSB_H_ */ -- 2.55.0.795.g602f6c329a-goog