NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-evbarm/59873: RPI 3B vcaudio(4) puts bogus errors on audioplay(1)



>Number:         59873
>Category:       port-evbarm
>Synopsis:       RPI 3B vcaudio(4) puts bogus errors on audioplay(1)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    port-evbarm-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Jan 01 06:20:00 +0000 2026
>Originator:     Izumi Tsutsui
>Release:        NetBSD 11.99.4 (also happens 10.1)
>Organization:
>Environment:
System: NetBSD armv7 11.99.4 NetBSD 11.99.4 (GENERIC) #1: Sun Dec 21 19:20:18 JST 2025  tsutsui@mirage:/s/cvs/src/sys/arch/evbarm/compile/GENERIC evbarm
Architecture: earmv7hf (also happens on aarch64)
Machine: evbarm
>Description:
On my Raspberry Pi 3B, if audioplay(1) is passed non-existent audio file,
the kernel emits the following errors:

```
armv7-% audioplay non-existent-file.wav
audioplay: could not open non-existent-file.wav: No such file or directory
[ 314735.791236] audio0(vcaudio0): setting play.port=0 failed: errno=22
[ 314735.791236] audio0(vcaudio0): setting play.port=0 failed: errno=22
```

>How-To-Repeat:
See above.

>Fix:
No idea.

Wrong return values (EINVAL) or bad error handling in
vcaudio_set_port() (in VCAUDIO_OUTPUT_SELECT case?)
in src/sys/arch/arm/broadcom/bcm2835_vcaudio.c ?

```
static int
vcaudio_set_port(void *priv, mixer_ctrl_t *mc)
{
	struct vcaudio_softc *sc = priv;

	switch (mc->dev) {
	case VCAUDIO_OUTPUT_MASTER_VOLUME:
	case VCAUDIO_INPUT_DAC_VOLUME:
		sc->sc_swvol = mc->un.value.level[AUDIO_MIXER_LEVEL_LEFT];
		return 0;
	case VCAUDIO_OUTPUT_AUTO_VOLUME:
		return vcaudio_set_volume(sc, VCAUDIO_DEST_AUTO,
		    mc->un.value.level[AUDIO_MIXER_LEVEL_LEFT]);
	case VCAUDIO_OUTPUT_HEADPHONE_VOLUME:
		return vcaudio_set_volume(sc, VCAUDIO_DEST_HP,
		    mc->un.value.level[AUDIO_MIXER_LEVEL_LEFT]);
	case VCAUDIO_OUTPUT_HDMI_VOLUME:
		return vcaudio_set_volume(sc, VCAUDIO_DEST_HDMI,
		    mc->un.value.level[AUDIO_MIXER_LEVEL_LEFT]);
	case VCAUDIO_OUTPUT_SELECT:
		if (mc->un.ord < 0 || mc->un.ord > 2)
			return EINVAL;
		sc->sc_dest = mc->un.ord;
		return vcaudio_set_volume(sc, mc->un.ord,
		    sc->sc_hwvol[mc->un.ord]);
	}
	return ENXIO;
}
```

---
Izumi Tsutsui



Home | Main Index | Thread Index | Old Index