Identity
| Part | AwiNic AW8737SCSR (the simple-audio-amplifier binding) |
| Role | Drives the PinePhone Pro internal loudspeaker. Inputs are the codec’s HPOL/HPOR (not SPO/SPO); enable is a single GPIO |
| Bus / address | None — analog input + GPIO enable, no register interface |
| GPIO / IRQ | Enable pin on GPIO0_B3 (active high) |
| Datasheet | AW8737 datasheet (AwiNic, community archive) |
| Pine64 wiki | PinePhone Pro hardware |
| Schematic | sheet 7 (speaker amplifier section) |
Status — ● working
Loudspeaker playback works on every boot. The driver toggles the enable
GPIO on SOUND_MIXER_PCMTRIG_START and de-asserts it on _STOP, so the
amp is only powered while a stream is open. Before that lifecycle
landed ( 3b23d2f audio: drive simple amplifier enable GPIO + be6f2f1 audio: include GPIO definitions for simple amp ), audio worked
only when the GPIO happened to drift HIGH at boot — a clean reboot would
land it LOW and the cone would silently drop out.
Driver
- Our tree:
src/sys/dev/sound/fdt/simple_amplifier.c(254 lines) — implements thesimple-audio-amplifierDT binding for FreeBSD’s sound subsystem. - Linux equivalent: the
simple-audio-amplifierLinux DT binding is handled by the ASoC simple-card / simple-amplifier helpers; the closest single-file analogue issound/soc/codecs/simple-amplifier.c. The AW8737 is a board component, not a driver target.
The driver is intentionally tiny: a simple-audio-amplifier DT binding,
one GPIO descriptor, and a hook into the PCM trigger path so playback
start/stop drives the enable line. It also accepts audio_dai_set_sysclk
and audio_dai_set_chanspeed as no-ops: simple-audio-card forwards
those calls to aux-devs, but this GPIO amplifier has no clock input, so a
non-zero return only produces a false failed to set sysclk for aux node
message on serial. The previously-documented “no VCC
supply” warning still fires — the DTS doesn’t reference the RK818
regulator (vcc_io) that supplies AVDD, but the amp is powered
in practice from the PMIC’s default rails.
The schematic-level surprise (per essay 13) is that the AW8737 is fed from the codec’s HPOL/HPOR outputs — what the datasheet calls headphone outputs. SPOL/SPOR are wired to the earpiece. Any debugging that targets the codec’s SPO mixer is debugging the wrong path for “loudspeaker silent.”
Open work
- Wire the
AVDDregulator reference in DTS so the kernel stops logging “no VCC supply.” - Validate behaviour during sleep / wake transitions when suspend/resume eventually lands.
- Mute pop on enable transitions has not been measured; ramped enable is not implemented.
Related
- On-device audio — the bring-up arc, including the GPIO-drift symptom.
- Cross-driver audit — the audio section.
- Component: RT5640 — codec feeding this amp.
- Component: rk_i2s — upstream I2S path.