Linux kernel driver and userspace integration for the front-facing camera of the HUAWEI MateBook E (Kaby Lake, Intel IPU3 ImgU / TPS68470 PMIC).
- Hardware ISP Acceleration: Powered by Intel IPU3 ImgU via
libcameraandPipeWire. - Zero Heavy CPU Usage: Near 0% CPU consumption during streaming (unlike software ISP / CPU debayer).
- Auto Exposure (AE) & Auto White Balance (AWB): Real-time hardware tuning handled by IPU3 IPA algorithms with display Gamma 2.2 and tuned BLC.
- Resolution:
- 1080p (
1920x1080) @ ~30 fps (Default Viewfinder / Webcam mode). - 720p (
1280x720) @ ~45 fps. - Full 5MP (
2592x1944) still raw capture support.
- 1080p (
- Desktop Application Compatibility: Works out-of-the-box in GNOME Camera (Snapshot), Chromium / Chrome, Firefox, OBS Studio, Cheese, and WebRTC video conferencing.
| Item | Value | Source |
|---|---|---|
| Model | Huawei MateBook E (BL-W09 / BL-W19 / Kaby Lake) | DMI HUAWEI / HUAWEI MateBook E |
| Sensor | GalaxyCore GC5024 (Chip ID 0x5024) |
ACPI GCTI5024, hardware verified |
| Location | Built-in Front Camera (定焦 / Fixed Focus) | ACPI SSDB + hardware |
| I2C Bus | 0x37 on I2C2 (\_SB.PCI0.I2C2) |
ACPI _CRS |
| Data Lanes | 2 MIPI CSI-2 lanes @ 420 MHz link frequency | ACPI SSDB |
| MCLK | 19.2 MHz | ACPI SSDB + tps68470 PLL |
| Native Resolution | 2592 x 1944 (5 MP, 10-bit Bayer BGGR, 1.4µm pixel) | Vendor spec / Hardware registers |
| PMIC | TI TPS68470 (INT3472) at I2C2:0x4c |
ACPI |
| Sensor Reset | tps68470-gpio line 9 (s_resetn, active low) |
Hardware verified |
| PMIC Clock | PLLCTL = 0xD0, then PLL enable bit |
clk-tps68470.c |
On stock kernels, the Intel IPU3 capture nodes exist but fail with VIDIOC_STREAMON returned -1 (Link has been severed) because:
- No
gc5024sensor driver in mainline Linux (drivers/media/i2c/). - Missing TPS68470 board data for Huawei MateBook E, so
int3472-tps68470bails out withNo board-data found for this model, failing to power the sensor rails or clock. - Missing
GCTI5024entry inipu-bridge, preventing the ACPI camera graph from connecting to the CIO2 receiver. - Missing GC5024 definitions in
libcamera, so IPU3 hardware ISP would reject the camera without sensor properties and tuning YAML.
This repository provides two ways to use the camera:
GC5024 Sensor -> CIO2 (MIPI CSI-2) -> IPU3 ImgU (Hardware ISP)
|
libcamera (IPA AE/AWB)
|
PipeWire / WirePlumber
|
GNOME Camera / Browsers / Video Apps
- CPU Usage: ~0%
- Quality: Hardware demosaicing, AE/AWB hardware stats, Gamma 2.2 correction.
GC5024 Sensor -> CIO2 -> /dev/video0 -> gc5024-camera (userspace) -> v4l2loopback (/dev/video20)
- Useful for headless environments or manual raw capture testing.
For Arch Linux / Manjaro:
sudo pacman -S --needed dkms linux-headers base-devel libcamera pipewire-libcamera gst-plugin-libcameraFor Ubuntu / Debian / Fedora:
Ensure kernel headers, DKMS, and libcamera with PipeWire plugins are installed.
Run the install script as your normal user (uses sudo internally):
./tools/install.shThis will automatically:
- Install
gc5024sensor driver as a DKMS module (/extra/gc5024.ko). - Install patched
ipu-bridgeandintel_skl_int3472_tps68470modules as DKMS. - Configure module loading and options in
/etc/modprobe.d/and/etc/modules-load.d/.
Verify that the sensor is detected:
dmesg | grep -E "gc5024|ipu-bridge"
# Output should show:
# ipu-bridge: Found supported sensor GCTI5024:00
# gc5024 2-0037: Identified GC5024 sensor (chip id 0x5024)Run the helper script:
./tools/setup_libcamera.shThis will:
- Clone libcamera.
- Apply
patches/0003-libcamera-add-GalaxyCore-GC5024-support.patch. - Build and install
libcamerawith IPU3 pipeline and signed IPA module. - Install the tuning configuration to
/usr/share/libcamera/ipa/ipu3/gc5024.yaml.
Verify with cam:
cam -c 1 -IYou should see:
Using camera \_SB_.PCI0.I2C2.CAM1 as cam0
0: 1920x1080-NV12
Launch GNOME Camera (Snapshot), Firefox, or Chrome — the camera will be recognized as "Built-in Front Camera" streaming at 1080p 30fps.
├── src/
│ ├── gc5024.c # Linux V4L2 subdev sensor driver
│ ├── gc5024_regs.h # GC5024 register map definitions
│ └── Makefile # Kernel kbuild file
├── patches/
│ ├── 0001-media-ipu-bridge-add-GalaxyCore-GC5024-sensor.patch
│ ├── 0002-platform-x86-int3472-add-Huawei-MateBook-E-board-data.patch
│ └── 0003-libcamera-add-GalaxyCore-GC5024-support.patch
├── tuning/
│ └── ipu3/gc5024.yaml # libcamera IPU3 IPA tuning profile
├── dkms/ # DKMS packaging configs
├── tools/
│ ├── install.sh # DKMS kernel driver installer
│ ├── setup_libcamera.sh # Automated libcamera IPU3 builder
│ ├── probe_gpios.sh # Hardware diagnostic script for TPS68470
│ ├── test_capture.sh # Raw frame capture test
│ └── raw2png.py # Software Bayer to PNG converter
├── apps/
│ └── gc5024-camera.c # Standalone fallback userspace ISP
└── docs/ # Hardware documentation and register tables
PLLCTL = 0xD0: Configures external capacitor5 << 4and crystal oscillator1 << 7, followed by PLL enable bit. Without this, no 19.2 MHz MCLK is produced.s_resetn(GPIO 9): The sensor is held in active-low reset until SGPO bit 2 is driven high.- Power Rails:
dvdd(CORE) = 1.2 Vavdd(ANA) = 2.8152 Vdovdd(VIO / VSIO) = 1.8 V
- The rails and MCLK must stabilize before
resetis deasserted, otherwise the sensor NAKs on the I2C bus.
The GC5024 supports native windowing without scaling:
- 1080p Mode:
1952x1096window cropped to1920x1080@ 31.5 fps. - 720p Mode:
1312x736window cropped to1280x720@ 45.9 fps. - Vertical Blanking:
P0:0x07/0x08controls VB (not VTS). Correct configuration prevents frame rate halving.
- Kernel modules and patches: GPL-2.0
- libcamera tuning files and userspace scripts: MIT / CC0-1.0