From nobody Tue Dec 2 02:19:56 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 1766E3358B4 for ; Wed, 19 Nov 2025 09:10:31 +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=1763543434; cv=none; b=M7MSvxlqRF3o7V2C+O1ViWPwevUnzStkKv+VLAj/ow7K0mTuP9Dd3Ma4wEr7zGXBHf4QRrOdicMv4/QLzPIrzLJmfegBPvNpJpxReNuI41yIMKyet8hMHVo/CCaN4H9FUyKSmQRhObhSCYm8XgXoD1s6SOoGooDH3TqFmoTDkto= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763543434; c=relaxed/simple; bh=4zqRWKe6A91rsanLN+R7KRDQ2S2tcRWB++5yv/JjcNE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=TfOkq1iTY4RryG2xKHlzoXQLjCWMkY7C/9hpTOpJDyZ341JFldfKWs6IXdlVuQx6jqEL/+l82V2ZPXTk+dZ7jCClQ2xb2r7SVDJ9TlTmpmK15UwBZWBd9kdYWlFT2Wc2zIZnw7TB1uSqJ7Kbv+i/1YCKO7h8BPKbjIz9r9SKxjA= 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=qqQm/6ob; 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="qqQm/6ob" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-42b3ad51fecso4721740f8f.1 for ; Wed, 19 Nov 2025 01:10:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1763543430; x=1764148230; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=YE4EP2vHwAOfDYFjAAxFpiiWrfOWjJkp8nzfRZHx8Kg=; b=qqQm/6obGSwwExbGZdwXR0H6I7/AMYMSDozrCoPH0HuxOR5KLTU2zi6bXS+paqzhpz 3KzLKG2J2UoXn4EYpLwxNAXs3XASSj58JZApFbntqMNkiQoUg/jiT3aaUr831fPDNjpO 0FWRcrwjYIZJVBET8HGmm41jN2JatciNLJNr6o+sndWspwlqEzzViHQi5s2LxAr5B4EU RLDHCFPFSnfR3pUtSXF9hD+vkOVdy3MUxzUOqrw+bVBm9KvpY4egyeT77hCMXYMY28qH X4xGtinUQN6Hro+S52ALrEOfeRc0zX14IDXalJrRjw6HfmMjnQCrgFgdSwOPv1ku6NTJ m9DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763543430; x=1764148230; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=YE4EP2vHwAOfDYFjAAxFpiiWrfOWjJkp8nzfRZHx8Kg=; b=CG8gGnPs1wTmm0IQi9Auy4fYFGvwPdcN35NFC71jFU4SuyqNCl/tudSAbV60+IOkuV t/0xYaCwlmn2rTpSM05ELUExwXoWXoaEy7/hlpiq4TMMJlJg4usjPQmnjfhGGWO+yCdg hMQXEEVJd7eFZPvFix58o3FJqLz/Ag5z48S+Vj5FCVtPQz4b9pccg0ZQ07S18BV8FW46 ZfYOFbl+Wi8WjNkViAOvv5ae51h66yTWz27tTx6RDhT/X8gHQwHPwiwtIfiVRFYUNgvi p8/pjUXeaArqRexvfADUP2yTBBmfwM/Wbd6k3LBJsjmG1NrsxkHLhgl0mkD00ZCxrSd0 MgNg== X-Forwarded-Encrypted: i=1; AJvYcCUvk24wAcNuJuYKgGR37yuVcOBLtY7YcZPg9zG0oFbi18cceTH0/99AUsDCK9PKNTt3uglAmxH6XridPHw=@vger.kernel.org X-Gm-Message-State: AOJu0YxYaLXgCWraFtHOQMPE1zq4oiK78srVXZrfmJJ9UAi2WoHOBBNn mWLRFCXhqUm/AwDQL+5eKDjKaVjQG3qKuRWUVm25o9j3GCJQeZCKTQX8mSkdB3WL3m4= X-Gm-Gg: ASbGncu4dG3r9X54SLFEH0yZYHUpI2pA+Yo7G5cFi2c+yg8mdN8Y0kPgWpAgSkbonir 24s9Aeb/NAza4HblWMqLbqXGNkRNRSAAUS4nVcjfGKQ4XgFLKVvXcci0aA9DRyv+eALr7QFPgs2 la+x1rzUPjfHgdeJbh277pdeaNhxhq/npya6WxXowbcrWZPfgl+r0B6Asq9RV7ykfTqzunsL3/P T5r47U5fRA02mHYyfbq45eSDNHZ070d//Sa1PQ5HMJwCsdFB26OJpyrPHGFaQpJqdGIkK/31U+W U159aQgwm20BYF2NvYaS7zO0nd83+PRMbhVKXVHnoK+8tLmJTaHCwB1pUGrEVusi3B3RuGylmza k4iYpptaeAVGrHGIdvRKPEZSyHB4EBXMFoItuAWHc5eQS2O78MBKeBybQxGwRP6HqwfcagiDY1f Kf6kKX X-Google-Smtp-Source: AGHT+IHUqL4AiPh3Lxs/BJo8HrorMM/Yb2oeCQiCieOWqwtZ1l/4ODlTZezCzSvp5hc6qozvX9gQdw== X-Received: by 2002:a05:6000:1847:b0:429:d3e9:667 with SMTP id ffacd0b85a97d-42b59349872mr18945075f8f.18.1763543430334; Wed, 19 Nov 2025 01:10:30 -0800 (PST) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:c10a:203f:120a:d2f9]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42b53f206e2sm37369280f8f.41.2025.11.19.01.10.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Nov 2025 01:10:29 -0800 (PST) From: Bartosz Golaszewski Date: Wed, 19 Nov 2025 10:10:24 +0100 Subject: [PATCH RFT/RFC] mfd: cs42l43: setup true links with software nodes 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: <20251119-cs42l43-gpio-swnodes-v1-1-25996afebd97@linaro.org> X-B4-Tracking: v=1; b=H4sIAH+JHWkC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDI1NDQ0NL3eRiE6McE2Pd9ILMfN3i8rz8lNRiXYsUk0TzVHNjoxQDSyWg1oK i1LTMCrCx0UpBbiH6QW7OSrG1tQBa1UAjbwAAAA== X-Change-ID: 20251119-cs42l43-gpio-swnodes-8d4a7e732d09 To: David Rhodes , Richard Fitzgerald , Lee Jones , Mark Brown , Charles Keepax , Andy Shevchenko , Philipp Zabel , Linus Walleij , Maciej Strozek , Andy Shevchenko Cc: linux-sound@vger.kernel.org, patches@opensource.cirrus.com, linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4611; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=o7oQ1XaVb5wC1ZDBDcJbldzYHxr5SKuSoMF0kqHvAK0=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpHYmBBfvF6ldeycbTuHmYL7zSkv8OFuOn00HZJ 1o+6FgKdUiJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaR2JgQAKCRAFnS7L/zaE w6oMD/92PuCX/DA05qVNAHA18lQ1nQ9rq/89KQv/B6gLTkk2NxwREQE72VlfEXzAIFKs8Z7TpwN 6aAtV4M0EqZ+/22ujJMIkJNWwrtRrcFg3cjAEfLkCgIu5M4vKRjT3LuOg66pyI2c8qNYHsZWQo8 AhGGJ7/+GPMChEska3BERvNbCiYTtjtakVeMx1PmOZ54uMaR4OPHLcSK6fpY8CUILdLXdc6XlTC DbqGQwcgjDlZ+HARaCU2M7b/GS13tGVZ2ruyzGL2ngce8oxyxlUyF2SBKsM3k4yV9KL7BykuRy1 8juUonyNrK+mseoeBoot/hnaaTxflHUq+ibL1GTNBr5UNE5yE5DXlEBf9/bcEQmoOt8/vDZjYnh uwT43vAFXk8cY1q7fVV9K3/va4WtIfwyleT5jKgZno0oTrqgnYPiKO465zImteXtutTcqAHDZHG wTxUi7n/sSd3R7gt6BxJebBEwls5DMmCZphqoO2xc1KKo0Xp5A5dxoQh/o+YjfoFJKO7m7ViaDz zDVwNW5kVSJaaxGb2jlYhYLzvlx92oEepz2vLlA68Tvs165KMsf6RiWsuglRDRbFck+c2wPDMIb NumGI5ax9s33LjFRstILQ8+/0IlO6ccd0ApiFqqO+nSnXaWxb7L2FygBaTBj/jLbA6uSQd61QM6 ke6g8KUYckMdCeg== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Currently the SPI driver sets up a software node rerefencing the GPIO controller exposing the chip-select GPIO but this node never gets attached to the actual GPIO provider. The lookup uses the weird way GPIO core performs the software node lookup by the swnode's name. We want to switch to a true firmware node lookup so the actual link must exist. Move the configuration to the MFD core and connect the SPI and pinctrl sub-devices with software node references. Fixes: 439fbc97502a ("spi: cs42l43: Add bridged cs35l56 amplifiers") Reported-by: Charles Keepax Closes: https://lore.kernel.org/all/aRyf7qDdHKABppP8@opensource.cirrus.com/ Signed-off-by: Bartosz Golaszewski --- Hi Charles! Please give this a try. It's only build-tested so far. I hope I understood correctly that it's the SPI driver that needs the "cs" GPIO from the pinctrl. Bartosz --- drivers/mfd/cs42l43.c | 25 +++++++++++++++++++++++-- drivers/spi/spi-cs42l43.c | 33 --------------------------------- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c index 107cfb983fec416bbdd31caa1e6a569026467735..629faf8674af651eb64aa63ec76= 8ba18c1c8b311 100644 --- a/drivers/mfd/cs42l43.c +++ b/drivers/mfd/cs42l43.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -512,9 +514,28 @@ static const char * const cs42l43_core_supplies[] =3D { =20 static const char * const cs42l43_parent_supplies[] =3D { "vdd-amp" }; =20 +static const struct software_node cs42l43_gpiochip_swnode =3D { + .name =3D "cs42l43-pinctrl", +}; + +static const struct property_entry cs42l43_cs_props[] =3D { + PROPERTY_ENTRY_GPIO("cs-gpios", &cs42l43_gpiochip_swnode, 0, GPIO_ACTIVE_= LOW), + { } +}; + +static const struct software_node cs42l43_spi_swnode =3D { + .properties =3D cs42l43_cs_props, +}; + static const struct mfd_cell cs42l43_devs[] =3D { - { .name =3D "cs42l43-pinctrl", }, - { .name =3D "cs42l43-spi", }, + { + .name =3D "cs42l43-pinctrl", + .swnode =3D &cs42l43_gpiochip_swnode, + }, + { + .name =3D "cs42l43-spi", + .swnode =3D &cs42l43_spi_swnode, + }, { .name =3D "cs42l43-codec", .parent_supplies =3D cs42l43_parent_supplies, diff --git a/drivers/spi/spi-cs42l43.c b/drivers/spi/spi-cs42l43.c index 14307dd800b744fee17edd864688a68c65666c68..fa844ce6cd7539bf764f792b99e= 8f8e191fc0c15 100644 --- a/drivers/spi/spi-cs42l43.c +++ b/drivers/spi/spi-cs42l43.c @@ -52,20 +52,6 @@ static struct spi_board_info amp_info_template =3D { .mode =3D SPI_MODE_0, }; =20 -static const struct software_node cs42l43_gpiochip_swnode =3D { - .name =3D "cs42l43-pinctrl", -}; - -static const struct software_node_ref_args cs42l43_cs_refs[] =3D { - SOFTWARE_NODE_REFERENCE(&cs42l43_gpiochip_swnode, 0, GPIO_ACTIVE_LOW), - SOFTWARE_NODE_REFERENCE(&swnode_gpio_undefined), -}; - -static const struct property_entry cs42l43_cs_props[] =3D { - PROPERTY_ENTRY_REF_ARRAY("cs-gpios", cs42l43_cs_refs), - {} -}; - static int cs42l43_spi_tx(struct regmap *regmap, const u8 *buf, unsigned i= nt len) { const u8 *end =3D buf + len; @@ -324,11 +310,6 @@ static void cs42l43_release_of_node(void *data) fwnode_handle_put(data); } =20 -static void cs42l43_release_sw_node(void *data) -{ - software_node_unregister(&cs42l43_gpiochip_swnode); -} - static int cs42l43_spi_probe(struct platform_device *pdev) { struct cs42l43 *cs42l43 =3D dev_get_drvdata(pdev->dev.parent); @@ -402,20 +383,6 @@ static int cs42l43_spi_probe(struct platform_device *p= dev) return dev_err_probe(priv->dev, ret, "Failed to get spk-id-gpios\n"); } - - ret =3D software_node_register(&cs42l43_gpiochip_swnode); - if (ret) - return dev_err_probe(priv->dev, ret, - "Failed to register gpio swnode\n"); - - ret =3D devm_add_action_or_reset(priv->dev, cs42l43_release_sw_node, NUL= L); - if (ret) - return ret; - - ret =3D device_create_managed_software_node(&priv->ctlr->dev, - cs42l43_cs_props, NULL); - if (ret) - return dev_err_probe(priv->dev, ret, "Failed to add swnode\n"); } else { device_set_node(&priv->ctlr->dev, fwnode); } --- base-commit: fe4d0dea039f2befb93f27569593ec209843b0f5 change-id: 20251119-cs42l43-gpio-swnodes-8d4a7e732d09 Best regards, --=20 Bartosz Golaszewski