quine-linux/patches/snd-hda-codec-cs8409/vendor/README.md

93 lines
4.2 KiB
Markdown
Raw Normal View History

2026-09-26 01:25:14 -08:00
# snd-hda-codec-cs8409 (out-of-tree)
Out-of-tree Linux kernel module for the **Cirrus Logic CS8409** HD Audio bridge and related fixups (including **Apple** machine quirks). It mirrors the in-kernel ALSA HDA codec driver logic but can be built and updated without rebuilding the whole kernel.
## Requirements
- Linux kernel headers for the kernel you are running
(e.g. on Debian/Ubuntu/Pop!_OS: `linux-headers-$(uname -r)`)
- Toolchain able to build external modules (`gcc`, `make`, etc.)
- Build from a shell where `uname -r` matches the target kernel (or set `KVER` — see below)
## Build
Always build **from this directory** using the provided `Makefile` so module C flags are applied correctly:
```bash
cd /path/to/snd-hda-codec-cs8409
make
```
Do **not** run only:
```text
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
```
without passing the same `CFLAGS_MODULE` values as in the `Makefile` `all:` recipe. The Makefile sets defines such as `APPLE_CODECS` and `CONFIG_SND_HDA_RECONFIG` that this tree expects.
### Optional: build for another installed kernel
```bash
make KVER=6.18.7-76061807-generic
```
(Use the directory name under `/lib/modules/` for that kernel.)
### Install module into `updates/` (takes precedence over in-tree module)
```bash
sudo make install
sudo depmod -a # install target runs depmod; repeat if you copy the .ko manually
```
Reload the audio stack or reboot as appropriate on your distribution (e.g. unload/reload `snd-hda-intel` and related modules, or reboot).
## Kernel compatibility
Recent work in this repository targets **modern kernels (6.17+)** where the ALSA HDA stack uses:
- `struct hda_codec_driver` with `probe` / `remove` instead of the old `codec->patch_ops` / `.free` callbacks
- `snd_hda_gen_remove()` instead of the former `snd_hda_gen_free()` export (a compatibility wrapper in `hda_generic.h` maps the old name for this module)
The module has been verified to build and run on **6.18.x** (e.g. Pop!_OS). Older kernels may still work if the symbols and APIs match; if not, use a branch or commit intended for that era.
## Tested on
| Environment | Kernel | Notes |
|-------------|--------|--------|
| **Pop!_OS** | `6.18.7-76061807-generic` | `make` and `sudo make install` succeed; audio confirmed working after reload/reboot as needed on the test machine. |
Always install **kernel headers** that match your running kernel (`linux-headers-$(uname -r)` on Debian-based systems).
## Development
The **entire set of changes** in this repository as published here—the **kernel 6.17+ HDA API port** (`hda_codec_driver`, variant ops, `snd_hda_gen_remove` compatibility), **Makefile** / **`.gitignore`** updates, **README**, and related integration—was **written and iterated using [Cursor](https://cursor.com)** (AI-assisted editor). The CS8409 codec logic and Apple extensions remain **derived from Cirrus Logic and the Linux ALSA HDA codebase**; original **SPDX** and **copyright** lines in the source files still apply.
## Configuration flags (Makefile)
`KBUILD_EXTRA_CFLAGS` enables, among other things:
- `APPLE_CODECS` — Apple-specific paths in `patch_cirrus_apple.h`
- `APPLE_PINSENSE_FIXUP`
- `CONFIG_SND_HDA_RECONFIG`
A debug-oriented line is commented out in the `Makefile` (extra logging defines).
## License
The sources are under **GPL-2.0-or-later** (see SPDX headers in the individual files). This tree includes code attributed to Cirrus Logic and Takashi Iwai / the ALSA project, consistent with the upstream HDA codec drivers.
## Troubleshooting
| Issue | What to check |
|--------|----------------|
| `No rule to make target .../build` | Install kernel headers for `uname -r`. |
| Many errors about missing `cs8409_spec` fields | Build with this repo’s `make` (see above), not bare kbuild without `CFLAGS_MODULE`. |
| `modpost: "snd_hda_gen_free" undefined` | Use a tree that includes the `hda_generic.h` wrapper for `snd_hda_gen_remove` (kernel **≥ 6.17**). |
| Compiler differs from kernel | Usually a warning only; same major `gcc` as the distro kernel is ideal. |
## Contributing
Pull requests and reports against specific **kernel version** and **hardware** (PCI subsystem ID, machine model) help keep this module useful for others.