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