* Add TP-Link Kasa KC110 (HI3518EV200 + OV2735)
New device variant: hi3518ev200_ultimate_tplink-kasa-kc110.
Contents:
- kc110-board-support package: PTZ binary (mmap'd PL061), gpio-motors
shim for the openipc web GUI, IR control script, and a boot-time
pinmux init that writes 0x1 to the chip7/chip8 pads (0x200f00e8/ec/
f0/fc/100/104). The OpenIPC kernel pinctrl driver does not auto-set
these for the KC110's pan motor / IR-cut / IR-LED pads — the vendor
firmware writes them explicitly in hn_config.sh. Without this,
PL061 GPIODATA writes succeed silently but the pads never drive
the ULN2803 / solenoid / LED.
- Device overlay:
* etc/sensors/ov2735_i2c_1080p.ini — input_mode=0 (MIPI), 1-lane
(was input_mode=4 / 4-lane in upstream cv200 osdrv, which is
wrong for OV2735).
* usr/bin/load_hisilicon — adds an "ov2735" case that mirrors
ov2710_mipi (same MIPI pinmux + clock).
* usr/share/openipc/customizer.sh — first-boot configuration:
RTL8188FU wlandev, sensor config path, IR-cut pin 64, backlight
pin 63, lightMonitor true (AE recovery after IR-cut toggle).
- README.md row.
Hardware notes:
- SoC: Hi3518EV200; Sensor: OV2735 (MIPI 1-lane, RAW10);
Wi-Fi: RTL8188FU (USB); Flash: W25Q128 16 MB NOR.
- PTZ: 4-phase unipolar steppers via ULN2803 darlington array.
Pan = vendor base-10 GPIO 81/74/73/72 = OpenIPC PL061 65/60/59/58;
tilt = 0/1/2/44 = 0/1/2/36 (vendor's "44" is bank 4 pin 4 — i.e.
pin 36 in OpenIPC's PL061 numbering, NOT 44).
- IR-cut filter: GPIO 64 (vendor 80) active-low; IR-LED: GPIO 63
(vendor 77).
Status: PTZ + GPIO + IR fully functional. Video pipeline currently
needs an LD_PRELOAD shim around HI_MIPI_SET_DEV_ATTR because upstream
majestic builds combo_dev_attr_t with enIntfMode=DC / raw_data_type=0
for MIPI sensors that need RAW10. The shim is downstream-only pending
a real fix to majestic upstream; this PR delivers the rest of the
KC110 board support and will produce a fully-functional camera once
the majestic fix lands.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* tplink-kasa-kc110: use ov2735_mipi_1080p.ini
Follow OpenIPC/firmware #2155, which ships the OV2735 MIPI config as a
separate ov2735_mipi_1080p.ini and leaves ov2735_i2c_1080p.ini (the
parallel/DVP config) untouched.
- Rename the device's bundled sensor .ini to ov2735_mipi_1080p.ini and
carry the full corrected MIPI config: input_mode=0 (MIPI),
data_type=2 (RAW10), lane_id 2-lane, Input_mod=5 (MIPI),
Mask_0=0xFFF00000. The previous bundled copy only had input_mode
fixed (data_type/Input_mod/Mask_0 were still the wrong DVP defaults).
- Point customizer.sh's isp.sensorConfig at the new file.
- Exclude the unused parallel ov2735_i2c_1080p.ini from the image.
Verified on a TP-Link Kasa KC110 (OV2735 2-lane MIPI RAW10): clean
image, correct AE, RTSP H.264 1080p.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: moontwister <moontwister@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2.6 KiB
kc110-board-support
Buildroot package providing KC110-specific hardware support for OpenIPC. Delivers:
| File | Purpose |
|---|---|
/usr/bin/ptz |
C binary (mmap PL061) for pan/tilt + IR-cut + IR-LED via vendor-base-10 GPIO numbering |
/usr/bin/gpio-motors |
451-byte shell shim that forwards calls to ptz pan/tilt (web-GUI compatible) |
/usr/bin/ir-control.sh |
Wrapper for IR-LED + IR-cut filter control |
/etc/init.d/S94pinmux-pan-ir |
Boot-time init that writes 0x1 to pinmux registers 0x200f00e8/ec/f0/fc/100/104 (KC110 chip7/8 pads) |
Layout
kc110-board-support/
├── Config.in # BR2_PACKAGE_KC110_BOARD_SUPPORT
├── kc110-board-support.mk # generic-package build + install rules
├── src/ # source tree (compiled with target toolchain)
│ ├── Makefile
│ └── ptz.c # ARM-static-stripped via cross-compile
└── files/ # installed as-is (no build step)
├── etc/init.d/S94pinmux-pan-ir
└── usr/bin/{gpio-motors,ir-control.sh}
Use from upstream openipc-firmware
The package lives at the repo root (kc110-board-support/) but must be discoverable by Buildroot inside the upstream tree via a symlink:
openipc/openipc-firmware/general/package/kc110-board-support → ../../../../kc110-board-support
The symlink is reconstructed by the setup step (below).
Setup after git pull of upstream
Because openipc/ is gitignored, the wire-in edits in the upstream tree are lost on each pull. Re-apply them from patches/openipc-wire-in-kc110.patch:
cd openipc/openipc-firmware
git apply ../../patches/openipc-wire-in-kc110.patch
# Re-create the symlink if it disappeared:
[ -L general/package/kc110-board-support ] || \
ln -s ../../../../kc110-board-support general/package/kc110-board-support
The patch adds:
- A
sourcestatement for the package ingeneral/package/Config.in BR2_PACKAGE_KC110_BOARD_SUPPORT=ytohi3518ev200_ultimate_defconfigand removesBR2_PACKAGE_GPIO_MOTORS=y(our shim replaces upstream's gpio-motors binary)
Build
Picked up automatically by BOARD=hi3518ev200_ultimate make all once the wire-in is applied. The ptz binary builds reproducibly — md5 e70f78d73c91248ba044082e3f21c54b across rebuilds.
Conflict with upstream gpio-motors
BR2_PACKAGE_GPIO_MOTORS (upstream) and BR2_PACKAGE_KC110_BOARD_SUPPORT both install /usr/bin/gpio-motors and cannot be enabled simultaneously. The wire-in patch removes BR2_PACKAGE_GPIO_MOTORS=y from the defconfig to avoid the collision.