* [PATCH v2 0/2] Handle shared reset GPIO for WSA883x speakers
@ 2025-07-18 10:46 Mohammad Rafi Shaik
2025-07-18 10:46 ` [PATCH v2 1/2] ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line Mohammad Rafi Shaik
2025-07-18 10:46 ` [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
0 siblings, 2 replies; 9+ messages in thread
From: Mohammad Rafi Shaik @ 2025-07-18 10:46 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel, linux-gpio,
quic_pkumpatl, kernel
On some Qualcomm platforms such as QCS6490-RB3Gen2, the multiple
WSA8830/WSA8835 speakers share a common reset (shutdown) GPIO.
To handle such cases, use the reset controller framework along with the
"reset-gpio" driver.
Tested on:
- QCS6490-RB3Gen2
changes in [v2]:
- Addressed the review comments from Krzysztof, Dmitry, Philipp.
- Used devm_reset_control_get_optional_shared_deasserted() api.
- created deasserts/asserts functions to handle reset gpios.
- Register devm action to safely disable the regulator on device removal.
- Link to V1: https://lore.kernel.org/linux-sound/20250620103012.360794-1-mohammad.rafi.shaik@oss.qualcomm.com/
Mohammad Rafi Shaik (2):
ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line
ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
.../bindings/sound/qcom,wsa883x.yaml | 11 ++-
sound/soc/codecs/wsa883x.c | 93 ++++++++++++++-----
2 files changed, 81 insertions(+), 23 deletions(-)
base-commit: e8352908bdcd2d0bcf0aca8c69fae85fd5ea5edb
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/2] ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line
2025-07-18 10:46 [PATCH v2 0/2] Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
@ 2025-07-18 10:46 ` Mohammad Rafi Shaik
2025-07-21 8:19 ` Krzysztof Kozlowski
2025-07-18 10:46 ` [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
1 sibling, 1 reply; 9+ messages in thread
From: Mohammad Rafi Shaik @ 2025-07-18 10:46 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel, linux-gpio,
quic_pkumpatl, kernel
On Qualcomm platforms such as QCS6490-RB3Gen2, the WSA883x speaker
amplifiers share the SD_N GPIO line between two speakers, thus
requires coordinated control when asserting the GPIO. Linux supports
shared GPIO handling via the "reset-gpios" property, which can be
used to specify either the powerdown or reset GPIOs.
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
---
.../devicetree/bindings/sound/qcom,wsa883x.yaml | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/qcom,wsa883x.yaml b/Documentation/devicetree/bindings/sound/qcom,wsa883x.yaml
index 14d312f9c345..098f1df62c8c 100644
--- a/Documentation/devicetree/bindings/sound/qcom,wsa883x.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,wsa883x.yaml
@@ -29,6 +29,10 @@ properties:
description: GPIO spec for Powerdown/Shutdown line to use (pin SD_N)
maxItems: 1
+ reset-gpios:
+ description: Powerdown/Shutdown line to use (pin SD_N)
+ maxItems: 1
+
vdd-supply:
description: VDD Supply for the Codec
@@ -50,10 +54,15 @@ required:
- compatible
- reg
- vdd-supply
- - powerdown-gpios
- "#thermal-sensor-cells"
- "#sound-dai-cells"
+oneOf:
+ - required:
+ - powerdown-gpios
+ - required:
+ - reset-gpios
+
unevaluatedProperties: false
examples:
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
2025-07-18 10:46 [PATCH v2 0/2] Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
2025-07-18 10:46 ` [PATCH v2 1/2] ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line Mohammad Rafi Shaik
@ 2025-07-18 10:46 ` Mohammad Rafi Shaik
2025-07-21 8:23 ` Krzysztof Kozlowski
1 sibling, 1 reply; 9+ messages in thread
From: Mohammad Rafi Shaik @ 2025-07-18 10:46 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel, linux-gpio,
quic_pkumpatl, kernel
On some Qualcomm platforms such as QCS6490-RB3Gen2, the multiple
WSA8830/WSA8835 speakers share a common reset (shutdown) GPIO.
To handle such cases, use the reset controller framework along
with the "reset-gpio" driver.
Register devm action to safely disable the regulator on device removal
to prevents a potential release warning from _regulator_put().
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
---
sound/soc/codecs/wsa883x.c | 93 +++++++++++++++++++++++++++++---------
1 file changed, 71 insertions(+), 22 deletions(-)
diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c
index 188363b03b93..eea160a08183 100644
--- a/sound/soc/codecs/wsa883x.c
+++ b/sound/soc/codecs/wsa883x.c
@@ -14,6 +14,7 @@
#include <linux/printk.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
+#include <linux/reset.h>
#include <linux/slab.h>
#include <linux/soundwire/sdw.h>
#include <linux/soundwire/sdw_registers.h>
@@ -468,6 +469,7 @@ struct wsa883x_priv {
struct sdw_stream_runtime *sruntime;
struct sdw_port_config port_config[WSA883X_MAX_SWR_PORTS];
struct gpio_desc *sd_n;
+ struct reset_control *sd_reset;
bool port_prepared[WSA883X_MAX_SWR_PORTS];
bool port_enable[WSA883X_MAX_SWR_PORTS];
int active_ports;
@@ -1546,6 +1548,53 @@ static const struct hwmon_chip_info wsa883x_hwmon_chip_info = {
.info = wsa883x_hwmon_info,
};
+static void wsa883x_reset_assert(void *data)
+{
+ struct wsa883x_priv *wsa883x = data;
+
+ if (wsa883x->sd_reset)
+ reset_control_assert(wsa883x->sd_reset);
+ else
+ gpiod_direction_output(wsa883x->sd_n, 1);
+}
+
+static void wsa883x_reset_deassert(struct wsa883x_priv *wsa883x)
+{
+ if (wsa883x->sd_reset)
+ reset_control_deassert(wsa883x->sd_reset);
+ else
+ gpiod_direction_output(wsa883x->sd_n, 0);
+}
+
+static void wsa883x_regulator_disable(void *data)
+{
+ struct wsa883x_priv *wsa883x = data;
+
+ regulator_disable(wsa883x->vdd);
+}
+
+static int wsa883x_get_reset(struct device *dev, struct wsa883x_priv *wsa883x)
+{
+ wsa883x->sd_reset = devm_reset_control_get_optional_shared_deasserted(dev, NULL);
+ if (IS_ERR(wsa883x->sd_reset))
+ return dev_err_probe(dev, PTR_ERR(wsa883x->sd_reset),
+ "Failed to get reset\n");
+ /*
+ * if sd_reset: NULL, so use the backwards compatible way for powerdown-gpios,
+ * which does not handle sharing GPIO properly.
+ */
+ if (!wsa883x->sd_reset) {
+ wsa883x->sd_n = devm_gpiod_get_optional(dev, "powerdown",
+ GPIOD_FLAGS_BIT_NONEXCLUSIVE |
+ GPIOD_OUT_HIGH);
+ if (IS_ERR(wsa883x->sd_n))
+ return dev_err_probe(dev, PTR_ERR(wsa883x->sd_n),
+ "Shutdown Control GPIO not found\n");
+ }
+
+ return 0;
+}
+
static int wsa883x_probe(struct sdw_slave *pdev,
const struct sdw_device_id *id)
{
@@ -1566,13 +1615,18 @@ static int wsa883x_probe(struct sdw_slave *pdev,
if (ret)
return dev_err_probe(dev, ret, "Failed to enable vdd regulator\n");
- wsa883x->sd_n = devm_gpiod_get_optional(dev, "powerdown",
- GPIOD_FLAGS_BIT_NONEXCLUSIVE | GPIOD_OUT_HIGH);
- if (IS_ERR(wsa883x->sd_n)) {
- ret = dev_err_probe(dev, PTR_ERR(wsa883x->sd_n),
- "Shutdown Control GPIO not found\n");
- goto err;
- }
+ ret = wsa883x_get_reset(dev, wsa883x);
+ if (ret)
+ return ret;
+
+ /*
+ * Register devm action to safely disable the regulator on device removal.
+ * This prevents a potential release warning from _regulator_put().
+ */
+ ret = devm_add_action_or_reset(dev, wsa883x_regulator_disable,
+ wsa883x);
+ if (ret)
+ return ret;
dev_set_drvdata(dev, wsa883x);
wsa883x->slave = pdev;
@@ -1595,15 +1649,16 @@ static int wsa883x_probe(struct sdw_slave *pdev,
pdev->prop.simple_clk_stop_capable = true;
pdev->prop.sink_dpn_prop = wsa_sink_dpn_prop;
pdev->prop.scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY;
- gpiod_direction_output(wsa883x->sd_n, 0);
+
+ wsa883x_reset_deassert(wsa883x);
+ ret = devm_add_action_or_reset(dev, wsa883x_reset_assert, wsa883x);
+ if (ret)
+ return ret;
wsa883x->regmap = devm_regmap_init_sdw(pdev, &wsa883x_regmap_config);
- if (IS_ERR(wsa883x->regmap)) {
- gpiod_direction_output(wsa883x->sd_n, 1);
- ret = dev_err_probe(dev, PTR_ERR(wsa883x->regmap),
- "regmap_init failed\n");
- goto err;
- }
+ if (IS_ERR(wsa883x->regmap))
+ return dev_err_probe(dev, PTR_ERR(wsa883x->regmap),
+ "regmap_init failed\n");
if (IS_REACHABLE(CONFIG_HWMON)) {
struct device *hwmon;
@@ -1623,16 +1678,10 @@ static int wsa883x_probe(struct sdw_slave *pdev,
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
- ret = devm_snd_soc_register_component(dev,
- &wsa883x_component_drv,
+ return devm_snd_soc_register_component(dev,
+ &wsa883x_component_drv,
wsa883x_dais,
ARRAY_SIZE(wsa883x_dais));
-err:
- if (ret)
- regulator_disable(wsa883x->vdd);
-
- return ret;
-
}
static int wsa883x_runtime_suspend(struct device *dev)
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line
2025-07-18 10:46 ` [PATCH v2 1/2] ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line Mohammad Rafi Shaik
@ 2025-07-21 8:19 ` Krzysztof Kozlowski
0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-21 8:19 UTC (permalink / raw)
To: Mohammad Rafi Shaik
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski, linux-arm-msm,
linux-sound, devicetree, linux-kernel, linux-gpio, quic_pkumpatl,
kernel
On Fri, Jul 18, 2025 at 04:16:27PM +0530, Mohammad Rafi Shaik wrote:
> On Qualcomm platforms such as QCS6490-RB3Gen2, the WSA883x speaker
> amplifiers share the SD_N GPIO line between two speakers, thus
> requires coordinated control when asserting the GPIO. Linux supports
> shared GPIO handling via the "reset-gpios" property, which can be
> used to specify either the powerdown or reset GPIOs.
>
> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
> ---
> .../devicetree/bindings/sound/qcom,wsa883x.yaml | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
2025-07-18 10:46 ` [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
@ 2025-07-21 8:23 ` Krzysztof Kozlowski
2025-07-22 10:56 ` Mohammad Rafi Shaik
0 siblings, 1 reply; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-21 8:23 UTC (permalink / raw)
To: Mohammad Rafi Shaik
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski, linux-arm-msm,
linux-sound, devicetree, linux-kernel, linux-gpio, quic_pkumpatl,
kernel
On Fri, Jul 18, 2025 at 04:16:28PM +0530, Mohammad Rafi Shaik wrote:
> On some Qualcomm platforms such as QCS6490-RB3Gen2, the multiple
> WSA8830/WSA8835 speakers share a common reset (shutdown) GPIO.
> To handle such cases, use the reset controller framework along
> with the "reset-gpio" driver.
>
> Register devm action to safely disable the regulator on device removal
> to prevents a potential release warning from _regulator_put().
It is not possible to remove the device - suppress bind attrs. How did
you trigger that?
>
> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
> ---
> sound/soc/codecs/wsa883x.c | 93 +++++++++++++++++++++++++++++---------
> 1 file changed, 71 insertions(+), 22 deletions(-)
...
> static int wsa883x_probe(struct sdw_slave *pdev,
> const struct sdw_device_id *id)
> {
> @@ -1566,13 +1615,18 @@ static int wsa883x_probe(struct sdw_slave *pdev,
> if (ret)
> return dev_err_probe(dev, ret, "Failed to enable vdd regulator\n");
>
> - wsa883x->sd_n = devm_gpiod_get_optional(dev, "powerdown",
> - GPIOD_FLAGS_BIT_NONEXCLUSIVE | GPIOD_OUT_HIGH);
> - if (IS_ERR(wsa883x->sd_n)) {
> - ret = dev_err_probe(dev, PTR_ERR(wsa883x->sd_n),
> - "Shutdown Control GPIO not found\n");
> - goto err;
> - }
> + ret = wsa883x_get_reset(dev, wsa883x);
> + if (ret)
> + return ret;
> +
> + /*
> + * Register devm action to safely disable the regulator on device removal.
> + * This prevents a potential release warning from _regulator_put().
> + */
> + ret = devm_add_action_or_reset(dev, wsa883x_regulator_disable,
> + wsa883x);
If removal is possible (but then explain in commit msg how), then this
should be separate commit with fixes and cc-stable, because you are
fixing actual bug - lack of regulator release on unbind.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
2025-07-21 8:23 ` Krzysztof Kozlowski
@ 2025-07-22 10:56 ` Mohammad Rafi Shaik
2025-07-22 11:06 ` Krzysztof Kozlowski
0 siblings, 1 reply; 9+ messages in thread
From: Mohammad Rafi Shaik @ 2025-07-22 10:56 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski, linux-arm-msm,
linux-sound, devicetree, linux-kernel, linux-gpio, quic_pkumpatl,
kernel
On 7/21/2025 1:53 PM, Krzysztof Kozlowski wrote:
> On Fri, Jul 18, 2025 at 04:16:28PM +0530, Mohammad Rafi Shaik wrote:
>> On some Qualcomm platforms such as QCS6490-RB3Gen2, the multiple
>> WSA8830/WSA8835 speakers share a common reset (shutdown) GPIO.
>> To handle such cases, use the reset controller framework along
>> with the "reset-gpio" driver.
>>
>> Register devm action to safely disable the regulator on device removal
>> to prevents a potential release warning from _regulator_put().
>
> It is not possible to remove the device - suppress bind attrs. How did
> you trigger that?
>
Ack,
I encountered the warning as regulator was being released unexpectedly,
triggering _regulator_put() warnings. While the device itself isn't
removed, Registering the devm action ensures safe cleanup without
triggering warnings.
Please check the below logs.
I could use some suggestions for this issue. please help with some
suggestions how i can approve this design.
Thanks,
Rafi.
>>
>> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
>> ---
>> sound/soc/codecs/wsa883x.c | 93 +++++++++++++++++++++++++++++---------
>> 1 file changed, 71 insertions(+), 22 deletions(-)
>
> ...
>
>> static int wsa883x_probe(struct sdw_slave *pdev,
>> const struct sdw_device_id *id)
>> {
>> @@ -1566,13 +1615,18 @@ static int wsa883x_probe(struct sdw_slave *pdev,
>> if (ret)
>> return dev_err_probe(dev, ret, "Failed to enable vdd regulator\n");
>>
>> - wsa883x->sd_n = devm_gpiod_get_optional(dev, "powerdown",
>> - GPIOD_FLAGS_BIT_NONEXCLUSIVE | GPIOD_OUT_HIGH);
>> - if (IS_ERR(wsa883x->sd_n)) {
>> - ret = dev_err_probe(dev, PTR_ERR(wsa883x->sd_n),
>> - "Shutdown Control GPIO not found\n");
>> - goto err;
>> - }
>> + ret = wsa883x_get_reset(dev, wsa883x);
>> + if (ret)
>> + return ret;
>> +
>> + /*
>> + * Register devm action to safely disable the regulator on device removal.
>> + * This prevents a potential release warning from _regulator_put().
>> + */
>> + ret = devm_add_action_or_reset(dev, wsa883x_regulator_disable,
>> + wsa883x);
>
> If removal is possible (but then explain in commit msg how), then this
> should be separate commit with fixes and cc-stable, because you are
> fixing actual bug - lack of regulator release on unbind.
>
Ack,
The Reason to introduced this change in same patch,
without devm_add_action_or_reset(dev, wsa883x_regulator_disable, wsa883x);
if i try to enable ->devm_reset_control_get_optional_shared_deasserted()
seeing below crash logs. _regulator_put() release warning.
logs
-----
[ 10.679294][ T90] ------------[ cut here ]------------
[ 10.684772][ T90] WARNING: CPU: 1 PID: 90 at
/drivers/regulator/core.c:2450 _regulator_put+0x50/0x60
[ 10.694344][ T90] Modules linked in: snd_soc_hdmi_codec
phy_qcom_edp venus_dec venus_enc videobuf2_dma_contig rpmsg_ctrl
qrtr_smd fastrpc rpmsg_char videobuf2_memops qcom_pd_mapper nb7vpq904m
msm lontium_lt9611uxc ucsi_glink typec_ucsi pmic_glink_altmode
qcom_battmgr aux_hpd_bridge ath11k_ahb ath11k hci_uart rtc_pm8xxx btqca
coresight_stm bluetooth qcom_pon stm_core venus_core pwrseq_qcom_wcn
drm_exec mac80211 ocmem v4l2_mem2mem gpu_sched videobuf2_v4l2 videodev
nvmem_qcom_spmi_sdam qcom_spmi_adc_tm5 snd_soc_sc8280xp
drm_display_helper qcom_vadc_common snd_soc_qcom_sdw coresight_tmc
snd_soc_qcom_common videobuf2_common qcom_stats coresight_etm4x
qcom_q6v5_pas phy_qcom_qmp_combo usb_f_qdss mc drm_dp_aux_bus
ecdh_generic qcom_pil_info qcom_q6v5 ecc coresight_replicator aux_bridge
coresight_csr qcom_sysmon coresight_funnel pwrseq_core gpi typec
i2c_qcom_geni qcom_common coresight icc_bwmon llcc_qcom qcom_glink_smem
qcrypto pinctrl_sc7280_lpass_lpi mdt_loader snd_soc_lpass_wsa_macro
sha256_generic pinctrl_lpass_lpi
[ 10.694524][ T90] snd_soc_lpass_va_macro display_connector
snd_soc_lpass_macro_common authenc drm_kms_helper libdes qrtr libarc4
icc_osm_l3 qcom_rng pmic_glink cfg80211 rfkill drm fuse ipv6
[ 10.804083][ T90] CPU: 1 UID: 0 PID: 90 Comm: kworker/u32:4 Not
tainted 6.14.0 #1
[ 10.811959][ T90] Hardware name: Qualcomm Technologies, Inc.
Robotics RB3gen2 (DT)
[ 10.819920][ T90] Workqueue: events_unbound deferred_probe_work_func
[ 10.826643][ T90] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT
-SSBS BTYPE=--)
[ 10.834510][ T90] pc : _regulator_put+0x50/0x60
[ 10.839362][ T90] lr : regulator_put+0x30/0x48
[ 10.844118][ T90] sp : ffff8000809e3670
[ 10.848244][ T90] x29: ffff8000809e3670 x28: 0000000000000000 x27:
ffff70941a04a080
[ 10.856300][ T90] x26: 0000000000000000 x25: ffffbfa860a9bee8 x24:
ffffbfa860e79cb0
[ 10.864354][ T90] x23: ffff709406e62640 x22: ffff709418668808 x21:
ffff8000809e3710
[ 10.872409][ T90] x20: ffff709415e81840 x19: ffffbfa86119b680 x18:
00000000ffffffff
[ 10.880462][ T90] x17: ffffbfa86013d058 x16: ffffbfa8601cbac4 x15:
ffff709419a70b48
[ 10.888517][ T90] x14: 0000000000000000 x13: ffff709400032b10 x12:
0000000000000000
[ 10.896573][ T90] x11: 0000000000000000 x10: ffffbfa85fdbcc60 x9 :
ffffbfa85fdbc7e0
[ 10.904627][ T90] x8 : ffff709418668ab0 x7 : ffff709418668ab0 x6 :
ffff709418668ab0
[ 10.912676][ T90] x5 : ffff709418668ab0 x4 : ffff709418668ab0 x3 :
ffff709415e807c0
[ 10.920727][ T90] x2 : ffff709406e62640 x1 : 0000000000000001 x0 :
ffff709415e81840
[ 10.928781][ T90] Call trace:
[ 10.932024][ T90] _regulator_put+0x50/0x60 (P)
[ 10.936877][ T90] regulator_put+0x30/0x48
-----------
Thanks & Regards,
Rafi.
> Best regards,
> Krzysztof
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
2025-07-22 10:56 ` Mohammad Rafi Shaik
@ 2025-07-22 11:06 ` Krzysztof Kozlowski
2025-07-22 11:11 ` Mohammad Rafi Shaik
0 siblings, 1 reply; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-22 11:06 UTC (permalink / raw)
To: Mohammad Rafi Shaik
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski, linux-arm-msm,
linux-sound, devicetree, linux-kernel, linux-gpio, quic_pkumpatl,
kernel
On 22/07/2025 12:56, Mohammad Rafi Shaik wrote:
>
>
> On 7/21/2025 1:53 PM, Krzysztof Kozlowski wrote:
>> On Fri, Jul 18, 2025 at 04:16:28PM +0530, Mohammad Rafi Shaik wrote:
>>> On some Qualcomm platforms such as QCS6490-RB3Gen2, the multiple
>>> WSA8830/WSA8835 speakers share a common reset (shutdown) GPIO.
>>> To handle such cases, use the reset controller framework along
>>> with the "reset-gpio" driver.
>>>
>>> Register devm action to safely disable the regulator on device removal
>>> to prevents a potential release warning from _regulator_put().
>>
>> It is not possible to remove the device - suppress bind attrs. How did
>> you trigger that?
>>
> Ack,
>
> I encountered the warning as regulator was being released unexpectedly,
> triggering _regulator_put() warnings. While the device itself isn't
> removed, Registering the devm action ensures safe cleanup without
> triggering warnings.
Logs are cut - you do not see the most important part, who puts the
regulator?
How unregistering regulator solves the incomplete get/put paths? It
feels like you are hiding real problem instead of fixing it.
>
> Please check the below logs.
>
> I could use some suggestions for this issue. please help with some
> suggestions how i can approve this design.
>
> Thanks,
> Rafi.
...
> [ 10.679294][ T90] ------------[ cut here ]------------
> [ 10.684772][ T90] WARNING: CPU: 1 PID: 90 at
> /drivers/regulator/core.c:2450 _regulator_put+0x50/0x60
> [ 10.694344][ T90] Modules linked in: snd_soc_hdmi_codec
> phy_qcom_edp venus_dec venus_enc videobuf2_dma_contig rpmsg_ctrl
> qrtr_smd fastrpc rpmsg_char videobuf2_memops qcom_pd_mapper nb7vpq904m
> msm lontium_lt9611uxc ucsi_glink typec_ucsi pmic_glink_altmode
> qcom_battmgr aux_hpd_bridge ath11k_ahb ath11k hci_uart rtc_pm8xxx btqca
> coresight_stm bluetooth qcom_pon stm_core venus_core pwrseq_qcom_wcn
> drm_exec mac80211 ocmem v4l2_mem2mem gpu_sched videobuf2_v4l2 videodev
> nvmem_qcom_spmi_sdam qcom_spmi_adc_tm5 snd_soc_sc8280xp
> drm_display_helper qcom_vadc_common snd_soc_qcom_sdw coresight_tmc
> snd_soc_qcom_common videobuf2_common qcom_stats coresight_etm4x
> qcom_q6v5_pas phy_qcom_qmp_combo usb_f_qdss mc drm_dp_aux_bus
> ecdh_generic qcom_pil_info qcom_q6v5 ecc coresight_replicator aux_bridge
> coresight_csr qcom_sysmon coresight_funnel pwrseq_core gpi typec
> i2c_qcom_geni qcom_common coresight icc_bwmon llcc_qcom qcom_glink_smem
> qcrypto pinctrl_sc7280_lpass_lpi mdt_loader snd_soc_lpass_wsa_macro
> sha256_generic pinctrl_lpass_lpi
> [ 10.694524][ T90] snd_soc_lpass_va_macro display_connector
> snd_soc_lpass_macro_common authenc drm_kms_helper libdes qrtr libarc4
> icc_osm_l3 qcom_rng pmic_glink cfg80211 rfkill drm fuse ipv6
> [ 10.804083][ T90] CPU: 1 UID: 0 PID: 90 Comm: kworker/u32:4 Not
> tainted 6.14.0 #1
> [ 10.811959][ T90] Hardware name: Qualcomm Technologies, Inc.
> Robotics RB3gen2 (DT)
> [ 10.819920][ T90] Workqueue: events_unbound deferred_probe_work_func
> [ 10.826643][ T90] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT
> -SSBS BTYPE=--)
> [ 10.834510][ T90] pc : _regulator_put+0x50/0x60
> [ 10.839362][ T90] lr : regulator_put+0x30/0x48
> [ 10.844118][ T90] sp : ffff8000809e3670
> [ 10.848244][ T90] x29: ffff8000809e3670 x28: 0000000000000000 x27:
> ffff70941a04a080
> [ 10.856300][ T90] x26: 0000000000000000 x25: ffffbfa860a9bee8 x24:
> ffffbfa860e79cb0
> [ 10.864354][ T90] x23: ffff709406e62640 x22: ffff709418668808 x21:
> ffff8000809e3710
> [ 10.872409][ T90] x20: ffff709415e81840 x19: ffffbfa86119b680 x18:
> 00000000ffffffff
> [ 10.880462][ T90] x17: ffffbfa86013d058 x16: ffffbfa8601cbac4 x15:
> ffff709419a70b48
> [ 10.888517][ T90] x14: 0000000000000000 x13: ffff709400032b10 x12:
> 0000000000000000
> [ 10.896573][ T90] x11: 0000000000000000 x10: ffffbfa85fdbcc60 x9 :
> ffffbfa85fdbc7e0
> [ 10.904627][ T90] x8 : ffff709418668ab0 x7 : ffff709418668ab0 x6 :
> ffff709418668ab0
> [ 10.912676][ T90] x5 : ffff709418668ab0 x4 : ffff709418668ab0 x3 :
> ffff709415e807c0
> [ 10.920727][ T90] x2 : ffff709406e62640 x1 : 0000000000000001 x0 :
Everything above is irrelevant.
> ffff709415e81840
> [ 10.928781][ T90] Call trace:
> [ 10.932024][ T90] _regulator_put+0x50/0x60 (P)
> [ 10.936877][ T90] regulator_put+0x30/0x48
> -----------
And this is only relevant information which tells nothing. Are you sure
you pasted FULL log?
>
> Thanks & Regards,
> Rafi.
>
>> Best regards,
>> Krzysztof
>>
>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
2025-07-22 11:06 ` Krzysztof Kozlowski
@ 2025-07-22 11:11 ` Mohammad Rafi Shaik
2025-07-22 12:38 ` Krzysztof Kozlowski
0 siblings, 1 reply; 9+ messages in thread
From: Mohammad Rafi Shaik @ 2025-07-22 11:11 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski, linux-arm-msm,
linux-sound, devicetree, linux-kernel, linux-gpio, quic_pkumpatl,
kernel
On 7/22/2025 4:36 PM, Krzysztof Kozlowski wrote:
> On 22/07/2025 12:56, Mohammad Rafi Shaik wrote:
>>
>>
>> On 7/21/2025 1:53 PM, Krzysztof Kozlowski wrote:
>>> On Fri, Jul 18, 2025 at 04:16:28PM +0530, Mohammad Rafi Shaik wrote:
>>>> On some Qualcomm platforms such as QCS6490-RB3Gen2, the multiple
>>>> WSA8830/WSA8835 speakers share a common reset (shutdown) GPIO.
>>>> To handle such cases, use the reset controller framework along
>>>> with the "reset-gpio" driver.
>>>>
>>>> Register devm action to safely disable the regulator on device removal
>>>> to prevents a potential release warning from _regulator_put().
>>>
>>> It is not possible to remove the device - suppress bind attrs. How did
>>> you trigger that?
>>>
>> Ack,
>>
>> I encountered the warning as regulator was being released unexpectedly,
>> triggering _regulator_put() warnings. While the device itself isn't
>> removed, Registering the devm action ensures safe cleanup without
>> triggering warnings.
>
> Logs are cut - you do not see the most important part, who puts the
> regulator?
>
> How unregistering regulator solves the incomplete get/put paths? It
> feels like you are hiding real problem instead of fixing it.
>
>>
>> Please check the below logs.
>>
>> I could use some suggestions for this issue. please help with some
>> suggestions how i can approve this design.
>>
>> Thanks,
>> Rafi.
>
>
> ...
>
>> [ 10.679294][ T90] ------------[ cut here ]------------
>> [ 10.684772][ T90] WARNING: CPU: 1 PID: 90 at
>> /drivers/regulator/core.c:2450 _regulator_put+0x50/0x60
>> [ 10.694344][ T90] Modules linked in: snd_soc_hdmi_codec
>> phy_qcom_edp venus_dec venus_enc videobuf2_dma_contig rpmsg_ctrl
>> qrtr_smd fastrpc rpmsg_char videobuf2_memops qcom_pd_mapper nb7vpq904m
>> msm lontium_lt9611uxc ucsi_glink typec_ucsi pmic_glink_altmode
>> qcom_battmgr aux_hpd_bridge ath11k_ahb ath11k hci_uart rtc_pm8xxx btqca
>> coresight_stm bluetooth qcom_pon stm_core venus_core pwrseq_qcom_wcn
>> drm_exec mac80211 ocmem v4l2_mem2mem gpu_sched videobuf2_v4l2 videodev
>> nvmem_qcom_spmi_sdam qcom_spmi_adc_tm5 snd_soc_sc8280xp
>> drm_display_helper qcom_vadc_common snd_soc_qcom_sdw coresight_tmc
>> snd_soc_qcom_common videobuf2_common qcom_stats coresight_etm4x
>> qcom_q6v5_pas phy_qcom_qmp_combo usb_f_qdss mc drm_dp_aux_bus
>> ecdh_generic qcom_pil_info qcom_q6v5 ecc coresight_replicator aux_bridge
>> coresight_csr qcom_sysmon coresight_funnel pwrseq_core gpi typec
>> i2c_qcom_geni qcom_common coresight icc_bwmon llcc_qcom qcom_glink_smem
>> qcrypto pinctrl_sc7280_lpass_lpi mdt_loader snd_soc_lpass_wsa_macro
>> sha256_generic pinctrl_lpass_lpi
>> [ 10.694524][ T90] snd_soc_lpass_va_macro display_connector
>> snd_soc_lpass_macro_common authenc drm_kms_helper libdes qrtr libarc4
>> icc_osm_l3 qcom_rng pmic_glink cfg80211 rfkill drm fuse ipv6
>> [ 10.804083][ T90] CPU: 1 UID: 0 PID: 90 Comm: kworker/u32:4 Not
>> tainted 6.14.0 #1
>> [ 10.811959][ T90] Hardware name: Qualcomm Technologies, Inc.
>> Robotics RB3gen2 (DT)
>> [ 10.819920][ T90] Workqueue: events_unbound deferred_probe_work_func
>> [ 10.826643][ T90] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT
>> -SSBS BTYPE=--)
>> [ 10.834510][ T90] pc : _regulator_put+0x50/0x60
>> [ 10.839362][ T90] lr : regulator_put+0x30/0x48
>> [ 10.844118][ T90] sp : ffff8000809e3670
>> [ 10.848244][ T90] x29: ffff8000809e3670 x28: 0000000000000000 x27:
>> ffff70941a04a080
>> [ 10.856300][ T90] x26: 0000000000000000 x25: ffffbfa860a9bee8 x24:
>> ffffbfa860e79cb0
>> [ 10.864354][ T90] x23: ffff709406e62640 x22: ffff709418668808 x21:
>> ffff8000809e3710
>> [ 10.872409][ T90] x20: ffff709415e81840 x19: ffffbfa86119b680 x18:
>> 00000000ffffffff
>> [ 10.880462][ T90] x17: ffffbfa86013d058 x16: ffffbfa8601cbac4 x15:
>> ffff709419a70b48
>> [ 10.888517][ T90] x14: 0000000000000000 x13: ffff709400032b10 x12:
>> 0000000000000000
>> [ 10.896573][ T90] x11: 0000000000000000 x10: ffffbfa85fdbcc60 x9 :
>> ffffbfa85fdbc7e0
>> [ 10.904627][ T90] x8 : ffff709418668ab0 x7 : ffff709418668ab0 x6 :
>> ffff709418668ab0
>> [ 10.912676][ T90] x5 : ffff709418668ab0 x4 : ffff709418668ab0 x3 :
>> ffff709415e807c0
>> [ 10.920727][ T90] x2 : ffff709406e62640 x1 : 0000000000000001 x0 :
>
> Everything above is irrelevant.
>
>> ffff709415e81840
>> [ 10.928781][ T90] Call trace:
>> [ 10.932024][ T90] _regulator_put+0x50/0x60 (P)
>> [ 10.936877][ T90] regulator_put+0x30/0x48
>> -----------
>
> And this is only relevant information which tells nothing. Are you sure
> you pasted FULL log?
>
sharing the full crash logs
---------------------------
[ 10.679294][ T90] ------------[ cut here ]------------
[ 10.684772][ T90] WARNING: CPU: 1 PID: 90 at
/drivers/regulator/core.c:2450 _regulator_put+0x50/0x60
[ 10.694344][ T90] Modules linked in: snd_soc_hdmi_codec
phy_qcom_edp venus_dec venus_enc videobuf2_dma_contig rpmsg_ctrl
qrtr_smd fastrpc rpmsg_char videobuf2_memops qcom_pd_mapper nb7vpq904m
msm lontium_lt9611uxc ucsi_glink typec_ucsi pmic_glink_altmode
qcom_battmgr aux_hpd_bridge ath11k_ahb ath11k hci_uart rtc_pm8xxx btqca
coresight_stm bluetooth qcom_pon stm_core venus_core pwrseq_qcom_wcn
drm_exec mac80211 ocmem v4l2_mem2mem gpu_sched videobuf2_v4l2 videodev
nvmem_qcom_spmi_sdam qcom_spmi_adc_tm5 snd_soc_sc8280xp
drm_display_helper qcom_vadc_common snd_soc_qcom_sdw coresight_tmc
snd_soc_qcom_common videobuf2_common qcom_stats coresight_etm4x
qcom_q6v5_pas phy_qcom_qmp_combo usb_f_qdss mc drm_dp_aux_bus
ecdh_generic qcom_pil_info qcom_q6v5 ecc coresight_replicator aux_bridge
coresight_csr qcom_sysmon coresight_funnel pwrseq_core gpi typec
i2c_qcom_geni qcom_common coresight icc_bwmon llcc_qcom qcom_glink_smem
qcrypto pinctrl_sc7280_lpass_lpi mdt_loader snd_soc_lpass_wsa_macro
sha256_generic pinctrl_lpass_lpi
[ 10.694524][ T90] snd_soc_lpass_va_macro display_connector
snd_soc_lpass_macro_common authenc drm_kms_helper libdes qrtr libarc4
icc_osm_l3 qcom_rng pmic_glink cfg80211 rfkill drm fuse ipv6
[ 10.804083][ T90] CPU: 1 UID: 0 PID: 90 Comm: kworker/u32:4 Not
tainted 6.14.0 #1
[ 10.811959][ T90] Hardware name: Qualcomm Technologies, Inc.
Robotics RB3gen2 (DT)
[ 10.819920][ T90] Workqueue: events_unbound deferred_probe_work_func
[ 10.826643][ T90] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT
-SSBS BTYPE=--)
[ 10.834510][ T90] pc : _regulator_put+0x50/0x60
[ 10.839362][ T90] lr : regulator_put+0x30/0x48
[ 10.844118][ T90] sp : ffff8000809e3670
[ 10.848244][ T90] x29: ffff8000809e3670 x28: 0000000000000000 x27:
ffff70941a04a080
[ 10.856300][ T90] x26: 0000000000000000 x25: ffffbfa860a9bee8 x24:
ffffbfa860e79cb0
[ 10.864354][ T90] x23: ffff709406e62640 x22: ffff709418668808 x21:
ffff8000809e3710
[ 10.872409][ T90] x20: ffff709415e81840 x19: ffffbfa86119b680 x18:
00000000ffffffff
[ 10.880462][ T90] x17: ffffbfa86013d058 x16: ffffbfa8601cbac4 x15:
ffff709419a70b48
[ 10.888517][ T90] x14: 0000000000000000 x13: ffff709400032b10 x12:
0000000000000000
[ 10.896573][ T90] x11: 0000000000000000 x10: ffffbfa85fdbcc60 x9 :
ffffbfa85fdbc7e0
[ 10.904627][ T90] x8 : ffff709418668ab0 x7 : ffff709418668ab0 x6 :
ffff709418668ab0
[ 10.912676][ T90] x5 : ffff709418668ab0 x4 : ffff709418668ab0 x3 :
ffff709415e807c0
[ 10.920727][ T90] x2 : ffff709406e62640 x1 : 0000000000000001 x0 :
ffff709415e81840
[ 10.928781][ T90] Call trace:
[ 10.932024][ T90] _regulator_put+0x50/0x60 (P)
[ 10.936877][ T90] regulator_put+0x30/0x48
[ 10.941276][ T90] devm_regulator_release+0x14/0x20
[ 10.946486][ T90] release_nodes+0x60/0xfc
[ 10.950886][ T90] devres_release_all+0x90/0xe0
[ 10.955737][ T90] device_unbind_cleanup+0x18/0x60
[ 10.960846][ T90] really_probe+0x210/0x2c0
[ 10.965341][ T90] __driver_probe_device+0x78/0x120
[ 10.970539][ T90] driver_probe_device+0x3c/0x154
[ 10.975561][ T90] __device_attach_driver+0xb8/0x140
[ 10.980854][ T90] bus_for_each_drv+0x88/0xe8
[ 10.985520][ T90] __device_attach+0xa0/0x190
[ 10.990185][ T90] device_initial_probe+0x14/0x20
[ 10.995209][ T90] bus_probe_device+0xb4/0xc0
[ 10.999876][ T90] device_add+0x5a4/0x780
[ 11.004187][ T90] device_register+0x20/0x30
[ 11.008767][ T90] sdw_slave_add+0x1a4/0x244
[ 11.013352][ T90] sdw_of_find_slaves+0x100/0x198
[ 11.018377][ T90] sdw_bus_master_add+0x1c0/0x310
[ 11.023401][ T90] qcom_swrm_probe+0x2a0/0x5a4
[ 11.028158][ T90] platform_probe+0x68/0xdc
[ 11.032654][ T90] really_probe+0xbc/0x2c0
[ 11.037052][ T90] __driver_probe_device+0x78/0x120
[ 11.042249][ T90] driver_probe_device+0x3c/0x154
[ 11.047273][ T90] __device_attach_driver+0xb8/0x140
[ 11.052568][ T90] bus_for_each_drv+0x88/0xe8
[ 11.057235][ T90] __device_attach+0xa0/0x190
[ 11.061903][ T90] device_initial_probe+0x14/0x20
[ 11.066926][ T90] bus_probe_device+0xb4/0xc0
[ 11.071595][ T90] deferred_probe_work_func+0x90/0xc8
[ 11.076974][ T90] process_one_work+0x16c/0x3f4
[ 11.081828][ T90] worker_thread+0x2c8/0x3e4
[ 11.086410][ T90] kthread+0x12c/0x210
[ 11.090455][ T90] ret_from_fork+0x10/0x20
[ 11.094857][ T90] ---[ end trace 0000000000000000 ]---
--------------------------
>>
>> Thanks & Regards,
>> Rafi.
>>
>>> Best regards,
>>> Krzysztof
>>>
>>
>
>
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers
2025-07-22 11:11 ` Mohammad Rafi Shaik
@ 2025-07-22 12:38 ` Krzysztof Kozlowski
0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-22 12:38 UTC (permalink / raw)
To: Mohammad Rafi Shaik
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
Philipp Zabel, Linus Walleij, Bartosz Golaszewski, linux-arm-msm,
linux-sound, devicetree, linux-kernel, linux-gpio, quic_pkumpatl,
kernel
On 22/07/2025 13:11, Mohammad Rafi Shaik wrote:
Again, trim the output from irrelevant parts.
> [ 10.928781][ T90] Call trace:
> [ 10.932024][ T90] _regulator_put+0x50/0x60 (P)
> [ 10.936877][ T90] regulator_put+0x30/0x48
> [ 10.941276][ T90] devm_regulator_release+0x14/0x20
> [ 10.946486][ T90] release_nodes+0x60/0xfc
> [ 10.950886][ T90] devres_release_all+0x90/0xe0
> [ 10.955737][ T90] device_unbind_cleanup+0x18/0x60
> [ 10.960846][ T90] really_probe+0x210/0x2c0
> [ 10.965341][ T90] __driver_probe_device+0x78/0x120
Although wsa probe function is not here, but this feels like it deferred
or exited with failure and some cleanups were incomplete. Current code
looks correct, so I suspect that whatever you did there introduced the
errors. So bug in your code is the answer that you converted it to devm
interface. That conversion should be rather separate patch.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-07-22 12:38 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-18 10:46 [PATCH v2 0/2] Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
2025-07-18 10:46 ` [PATCH v2 1/2] ASoC: dt-bindings: qcom,wsa8830: Add reset-gpios for shared line Mohammad Rafi Shaik
2025-07-21 8:19 ` Krzysztof Kozlowski
2025-07-18 10:46 ` [PATCH v2 2/2] ASoC: codecs: wsa883x: Handle shared reset GPIO for WSA883x speakers Mohammad Rafi Shaik
2025-07-21 8:23 ` Krzysztof Kozlowski
2025-07-22 10:56 ` Mohammad Rafi Shaik
2025-07-22 11:06 ` Krzysztof Kozlowski
2025-07-22 11:11 ` Mohammad Rafi Shaik
2025-07-22 12:38 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).