Add GC2395/CAMSS rear camera driver and fix audio, earpiece, micbias, and modem routing
This commit is contained in:
@@ -31,16 +31,21 @@ This manual covers flashing, operating, and customizing **Bananarchy Linux** (`v
|
||||
- Includes instant case toggling during preedit, full 32-character ASCII punctuation/symbol entry, terminal control sequences (`^A`–`^Z`, `Esc`, `Tab`, `F1`–`F12`), and a `450ms` long-press `*` `Ctrl+` modifier latch.
|
||||
3. **Bantam AI agent (`prebuilt/bantam/bantam`)**:
|
||||
- Fetched from the latest `master` branch of `https://code.luxferre.top/luxferre/bantam-cpp`, cross-compiled for `armv7`, and installed to `/usr/bin/bantam` and `/usr/local/bin/bantam` (with no default `.bantam.cfg` pre-created).
|
||||
4. **Mainline 6.12.1-msm8916 QDSP6 audio, voice call & LTE modem stack**:
|
||||
4. **Mainline 6.12.1-msm8916 QDSP6 audio (loudspeaker, earpiece, MEMS & headset mics), voice call & LTE modem stack**:
|
||||
- Patched `q6core`, `q6afe`, `q6afe-dai`, `q6voice-dai`, `q6mvm`, and device trees (`VoiceMMode1` DAI + PM8909 WCD codec).
|
||||
- WirePlumber `50-s16le.lua` (`S16LE` sample format enforcement), ALSA UCM2 profiles (`HiFi.conf` and `VoiceCall.conf`), `q6voiced`, `rmtfs`, `msm-modem-uim-selection`, `msm8909-modem-wwan-port`, and `ModemManager`.
|
||||
5. **Memory & swap tuning for 512 MB RAM**:
|
||||
- Automatic PM8909 WCD analog codec register initialization at boot (`CDC_A_MICB_1_VAL` `0xf141 = 0x60` for 2.8V internal MEMS microphone bias, and `CDC_A_RX_EAR_CTL` `0xf1c0 |= 0x20` for +6 dB earpiece PA gain).
|
||||
- WirePlumber `50-s16le.lua` (`S16LE` sample format enforcement), ALSA UCM2 profiles (`qdsp6.conf`, `HiFi.conf`, and `VoiceCall.conf`), `q6voiced` (`card=0, device=2`), `sxmo_audio.sh` / `sxmo_modemaudio.sh` PipeWire UCM profile switching, `sxmo_ob.sh` (`WOB_DISABLE_PLEDGE=1`), `rmtfs`, `msm-modem-uim-selection`, `msm8909-modem-wwan-port`, and `ModemManager` (`mmcli`).
|
||||
5. **Rear 2MP camera (`src/msm8905-cam/`) & SY7807 torch LED (`src/leds-msm8905-torch/`)**:
|
||||
- `msm8905-cam.ko`: powers PM8909 LDOs (`L2` 1.2V, `L6` 1.8V, `L17` 2.85V) and `CAMSS_MCLK0` (24 MHz on GPIO 26), configures the GalaxyCore `GC2395` MIPI CSI-2 sensor (`blsp_i2c3` `0x37`) and MSM8909 `CAMSS` (`CSIPHY0 -> CSID0 -> ISPIF -> VFE0 RDI0 -> VBIF -> CMA`), and exposes `/dev/video0` (`800x600` 24-bit `RGB3` V4L2 capture device).
|
||||
- `leds-msm8905-torch.ko`: exposes `/sys/class/leds/white:torch` (`GPIO 31`), configures WCD micbias/earpiece registers at boot, and hooks PM8909 `PON` clean shutdown.
|
||||
6. **Memory & swap tuning for 512 MB RAM**:
|
||||
- `384 MiB` ZSTD-compressed `zram0` swap (priority `100`) + `512 MiB` `/swapfile` (priority `10`), with `vm.swappiness=100` and `vm.page-cluster=0`.
|
||||
6. **Preinstalled on-device development & scripting stack**:
|
||||
7. **Preinstalled on-device development & scripting stack**:
|
||||
- **C / C++ toolchain & build tools**: `gcc`, `g++`, `musl-dev`, `make`, `git`, `nano`
|
||||
- **Janet**: `janet`, `janet-dev`, `jpm` (Janet package manager)
|
||||
- **Perl**: `perl`, `perl-io-socket-ssl` (`IO::Socket::SSL`)
|
||||
- **Tcl & SQLite**: `tcl`, `tcl-lib` (`tcllib`), `tcl-tls`, `sqlite` (`sqlite3`), `sqlite-tcl` (`tcl-sqlite`)
|
||||
- **Hardware & media utilities**: `v4l-utils` (`v4l2-ctl`), `i2c-tools`, `ffmpeg`, `mpv`, `imv`
|
||||
|
||||
---
|
||||
|
||||
@@ -218,10 +223,74 @@ You can switch between **vertical (`splitv`, one under another)**, **horizontal
|
||||
## 4. Default credentials, USB SSH & Bantam AI agent
|
||||
|
||||
- **Username**: `user`
|
||||
- **Password**: `147147` (`doas` and `sudo` enabled)
|
||||
- **Password**: `147147` (`doas` and `sudo` enabled, with passwordless `doas` configured for `wheel` in `/etc/doas.d/50-sxmo.conf`)
|
||||
- **USB networking SSH**:
|
||||
```bash
|
||||
ssh user@172.16.42.1
|
||||
```
|
||||
- **Bantam AI agent**:
|
||||
Run `bantam` in the terminal (`Foot`) or over SSH. Configure your endpoint/API key via environment variables or `~/.bantam.cfg` when needed.
|
||||
|
||||
---
|
||||
|
||||
## 5. Camera, audio, flashlight & cellular modem reference
|
||||
|
||||
### 5.1 Taking photos with the rear camera (`/dev/video0`)
|
||||
|
||||
The `msm8905-cam` kernel module drives the rear 2MP GalaxyCore `GC2395` sensor through MSM8909 `CAMSS` (`CSIPHY0 -> CSID0 -> ISPIF -> VFE0 -> VBIF`) and registers `/dev/video0` (`800x600` 24-bit `RGB3`).
|
||||
|
||||
To capture a photo to `~/photo.jpg` (or `.png`), stream a frame with `v4l2-ctl` and encode it with `ffmpeg -f rawvideo`:
|
||||
```bash
|
||||
v4l2-ctl -d /dev/video0 \
|
||||
--set-fmt-video=width=800,height=600,pixelformat=RGB3 \
|
||||
--stream-mmap --stream-count=1 --stream-to=/tmp/frame.rgb && \
|
||||
ffmpeg -hide_banner -loglevel error \
|
||||
-f rawvideo -pixel_format rgb24 -video_size 800x600 \
|
||||
-i /tmp/frame.rgb -frames:v 1 -y ~/photo.jpg && \
|
||||
rm -f /tmp/frame.rgb
|
||||
```
|
||||
- **Viewing photos on the phone**: run `imv ~/photo.jpg` or `mpv ~/photo.jpg`.
|
||||
- **Why `v4l2-ctl` + `ffmpeg -f rawvideo` is used**: Alpine's `libavdevice` links against `libv4l2.so.0`, whose `v4l2_mmap` wrapper on 32-bit ARM (`musl` 64-bit `off_t`) misaligns variadic `syscall(SYS_mmap2, ...)` arguments. Capturing via `v4l2-ctl` and encoding via `ffmpeg -f rawvideo` bypasses `libv4l2` completely.
|
||||
|
||||
### 5.2 Switching speakers (loudspeaker vs. earpiece) & recording microphone audio
|
||||
|
||||
Both the rear loudspeaker (`Speaker` / `SPK_OUT`) and the front earpiece speaker (`Earpiece` / `EAR`, boosted by +6 dB in `CDC_A_RX_EAR_CTL`), as well as the internal MEMS microphone (`Mic1` / `AMIC3`, biased at 2.8V in `CDC_A_MICB_1_VAL`) and 3.5mm headset microphone (`Mic2` / `AMIC2`), are managed through PipeWire/WirePlumber and `sxmo_audio.sh`:
|
||||
|
||||
- **List available audio outputs (`Speaker`, `Earpiece`, `Headphones`)**:
|
||||
```bash
|
||||
sxmo_audio.sh out list
|
||||
```
|
||||
- **Switch active output to the rear loudspeaker**:
|
||||
```bash
|
||||
sxmo_audio.sh out set "Speaker"
|
||||
```
|
||||
- **Switch active output to the front earpiece speaker**:
|
||||
```bash
|
||||
sxmo_audio.sh out set "Earpiece"
|
||||
```
|
||||
- **Record from the internal MEMS microphone (`Mic1`)**:
|
||||
```bash
|
||||
pw-record --rate=48000 --channels=1 --format=s16 ~/recording.wav
|
||||
```
|
||||
|
||||
### 5.3 Flashlight (`white:torch`) & keypad backlight (`white:kbd_backlight`)
|
||||
|
||||
- **Turn rear flashlight on / off**:
|
||||
```bash
|
||||
brightnessctl -d white:torch set 1
|
||||
brightnessctl -d white:torch set 0
|
||||
```
|
||||
- **Set keypad backlight brightness (`0`–`255`)**:
|
||||
```bash
|
||||
brightnessctl -d white:kbd_backlight set 255
|
||||
```
|
||||
|
||||
### 5.4 GSM / WCDMA / LTE modem & voice calls (`ModemManager` & `q6voiced`)
|
||||
|
||||
- **Inspect modem registration, operator, and signal quality**:
|
||||
```bash
|
||||
mmcli -m any
|
||||
```
|
||||
- **Place or manage voice calls and SMS**:
|
||||
Use the Sxmo **Phone** / **Texts** menu (`Left softkey`) or `mmcli -m any --voice-list-calls` / `mmcli -m any --messaging-list-sms`. In-call audio is automatically routed between the modem (`VoiceMMode1`) and the PM8909 WCD codec by the `q6voiced` service and `sxmo_modemaudio.sh`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user