Appendix · reference

AwiNic AW8737 (speaker amplifier)

Mono Class-D speaker amplifier on HPOL/HPOR with a GPIO enable

Identity

PartAwiNic AW8737SCSR (the simple-audio-amplifier binding)
RoleDrives the PinePhone Pro internal loudspeaker. Inputs are the codec’s HPOL/HPOR (not SPO/SPO); enable is a single GPIO
Bus / addressNone — analog input + GPIO enable, no register interface
GPIO / IRQEnable pin on GPIO0_B3 (active high)
DatasheetAW8737 datasheet (AwiNic, community archive)
Pine64 wikiPinePhone Pro hardware
Schematicsheet 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

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