diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 1f5b6636f..0b57d71d4 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -60,6 +60,7 @@ jobs: - gk7202v300_lite_cootli_camv0103 - gk7202v300_lite_ipg-g3-wr - gk7202v300_lite_xg521 + - gk7205v200_lite_cpplus-cp-unc-ta21l2c - gk7205v200_lite_tiandy-tc-c321n - gk7205v200_lite_vixand-ipc-1 - gk7205v200_lite_vixand-iph-5-4g diff --git a/README.md b/README.md index f30eb330e..cb70931e5 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ CMCC HDC-51 A5-V12 T21N SC2235 RTL8189FTV_SDIO NOR_16M done CMCC HDC-51 A6-V10 T31L JXF37 RTL8188FU_USB NOR_16M done CMCC HDC-51 A6-V11 T31L SC2332 RTL8188FU_USB NOR_16M done Cootli CAMV0103 GK7202V300 SC223A SSV6355_USB NOR_8M in progress +CP Plus CP-UNC-TA21L2C GK7205V200 SC223A - NOR_16M video-ok, ir-cut-no, audio-no Emax Wyvern Link SSC338Q IMX415 NOR_16M done Foscam X5 SSC337DE GC4653 RTL8188FU_USB NOR_16M done G.Craftsman GCA50 T31ZX GC4653 - NOR_16M done diff --git a/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/NOTES.md b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/NOTES.md new file mode 100644 index 000000000..ae71f1610 --- /dev/null +++ b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/NOTES.md @@ -0,0 +1,38 @@ +![OpenIPC logo][logo] + +## OpenIPC Builder +_Experimental system for building OpenIPC firmware for known devices_ + + +### Release notes for the device + +**CP Plus CP-UNC-TA21L2C** — Dahua-OEM 2 MP full-colour bullet/turret camera. + +| | | +|---|---| +| SoC | Goke **gk7205v200** (lite), ARM Cortex-A7 | +| Sensor | SmartSens **SC223A** (chip-id `0xcb3e`), 2-lane MIPI, 1080p30 | +| Flash | 16 MiB SPI-NOR (XM25QH128); built with the standard 8 MiB layout | +| Wi-Fi | none (wired-only) | +| Audio | present on the hardware; not wired up in this profile yet | + +#### Board specifics +The SC223A on this board is on the SoC's **hardware I2C0**, routed to the +**VI-RAW** pads (`0x112c0060/0x64`, func2) instead of the default mipi-sensor +pads (`0x112c0030/0x34`, func1) that the SDK `board=demo` bring-up probes. The +sensor also needs a 27 MHz MCLK (`0x120100f0 = 0x19`, div6); the SDK default +`0x11` (div4) leaves it unresponsive. Both are handled in +`general/overlay/etc/init.d/S71devmem`, which runs after `S70vendor` +(`load_goke`) and before `S95majestic`. No kernel module is required — the +stock `open_sensor_i2c` reaches the sensor over `/dev/i2c-0` once the pads are +muxed. Sensor reset/enable is `GPIO8_7` (`SENSOR_RSTN`, func2). + +Verified on hardware: chip-id `0xcb3e` over HW I2C0, MIPI PHY lock at +1920x1080 with zero error counters, majestic streams correct colour 1080p. + +#### TODO +- Characterise and wire up the IR-cut / night-mode GPIOs. +- Enable audio. + + +[logo]: https://openipc.org/assets/openipc-logo-black.svg diff --git a/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/br-ext-chip-goke/configs/gk7205v200_lite_cpplus-cp-unc-ta21l2c_defconfig b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/br-ext-chip-goke/configs/gk7205v200_lite_cpplus-cp-unc-ta21l2c_defconfig new file mode 100644 index 000000000..fa9890e30 --- /dev/null +++ b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/br-ext-chip-goke/configs/gk7205v200_lite_cpplus-cp-unc-ta21l2c_defconfig @@ -0,0 +1,66 @@ +# Architecture +BR2_arm=y +BR2_cortex_a7=y +BR2_ARM_EABI=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_ARM_INSTRUCTIONS_THUMB2=y + +# Toolchain +BR2_TOOLCHAIN_EXTERNAL=y +BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y +BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-musleabi" +BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y +BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y +BR2_TOOLCHAIN_EXTERNAL_CXX=y + +# Kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/gk7205v200.generic.config" +BR2_LINUX_KERNEL_UIMAGE=y +BR2_LINUX_KERNEL_XZ=y + +# Filesystem +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" +BR2_PACKAGE_UBOOT_TOOLS=y +BR2_PACKAGE_ZLIB=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_MOSQUITTO=y +# BR2_PACKAGE_MOSQUITTO_BROKER is not set +BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y +BR2_PACKAGE_WIREGUARD_TOOLS=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y + +# OpenIPC +BR2_OPENIPC_SOC_VENDOR="goke" +BR2_OPENIPC_SOC_MODEL="gk7205v200" +BR2_OPENIPC_SOC_FAMILY="gk7205v200" +BR2_OPENIPC_VARIANT="lite" +BR2_OPENIPC_FLASH_SIZE="8" + +# Packages +BR2_PACKAGE_DROPBEAR_OPENIPC=y +BR2_PACKAGE_GOKE_OSDRV_GK7205V200=y +BR2_PACKAGE_HISILICON_OPENSDK=y +BR2_PACKAGE_IPCTOOL=y +BR2_PACKAGE_JSONFILTER=y +BR2_PACKAGE_LIBCURL_OPENIPC=y +BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y +# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set +# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set +BR2_PACKAGE_LIBEVENT_OPENIPC=y +BR2_PACKAGE_LIBOGG_OPENIPC=y +BR2_PACKAGE_MAJESTIC_FONTS=y +BR2_PACKAGE_MAJESTIC_WEBUI=y +BR2_PACKAGE_MAJESTIC=y +BR2_PACKAGE_MBEDTLS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC=y +BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y +BR2_PACKAGE_VTUND_OPENIPC=y +BR2_PACKAGE_YAML_CLI=y diff --git a/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/overlay/etc/init.d/S71devmem b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/overlay/etc/init.d/S71devmem new file mode 100755 index 000000000..349f11e19 --- /dev/null +++ b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/overlay/etc/init.d/S71devmem @@ -0,0 +1,31 @@ +#!/bin/sh +# +# CP Plus CP-UNC-TA21L2C (Goke gk7205v200, SmartSens SC223A) board pinmux. +# +# Runs after S70vendor (load_goke), overriding the SDK board=demo defaults +# for this board's actual wiring: +# - the SC223A i2c is on hardware I2C0 routed to the VI-RAW pads +# (0x60/0x64 func2), not the default mipi-sensor pads (0x30/0x34 func1); +# - sensor reset/enable is GPIO8_7 (SENSOR_RSTN, func2); +# - the SC223A needs a 27 MHz MCLK (div6 = 0x19); the SDK default 0x11 +# (div4) is wrong, so the sensor never ACKs without this. +# (load_goke already muxes SENSOR_CLK 0x112c0028 to func1, so it is left as-is.) +# +case "$1" in + start) + devmem 0x112c0030 32 0x0 # default I2C0 SDA -> GPIO (de-mux) + devmem 0x112c0034 32 0x0 # default I2C0 SCL -> GPIO (de-mux) + devmem 0x112c0060 32 0x2 # GPIO7_2 -> I2C0_SDA (func2, VI-RAW) + devmem 0x112c0064 32 0x2 # GPIO7_3 -> I2C0_SCL (func2, VI-RAW) + devmem 0x112c0048 32 0x2 # GPIO8_7 -> SENSOR_RSTN (func2) + devmem 0x120100f0 32 0x19 # sensor MCLK = 27 MHz (div6) + ;; + + stop) + ;; + + *) + echo "Usage: $0 {start}" + exit 1 + ;; +esac diff --git a/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/overlay/usr/share/openipc/customizer.sh b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/overlay/usr/share/openipc/customizer.sh new file mode 100755 index 000000000..e0809c4b6 --- /dev/null +++ b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/overlay/usr/share/openipc/customizer.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Perform basic settings on a known IP camera +# +# +# Set sensor +# +fw_setenv sensor sc223a +# +# Set custom upgrade url +# +fw_setenv upgrade 'https://github.com/OpenIPC/builder/releases/download/latest/gk7205v200_lite_cpplus-cp-unc-ta21l2c-nor.tgz' +# +# +# Set custom majestic settings +# +cli -s .system.maxFps 30 +cli -s .video0.fps 30 +cli -s .video0.codec h265 +cli -s .osd.enabled true +cli -s .osd.template "OpenIPC | %F %T %Z" +# +# Night mode / IR-cut and audio: the GPIO pins for the IR-cut filter and +# IR LEDs on this board are not characterised yet, so they are left at +# defaults (TODO). +# +# +# This device is wired-only (no wlan). +# +adduser viewer -s /bin/false -D -H +echo viewer:123456 | chpasswd +# +exit 0 diff --git a/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/scripts/excludes/gk7205v200_lite.list b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/scripts/excludes/gk7205v200_lite.list new file mode 100644 index 000000000..75d8f71a2 --- /dev/null +++ b/devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/general/scripts/excludes/gk7205v200_lite.list @@ -0,0 +1,47 @@ +/etc/sensors/60fps/720p_imx307_i2c_2l.ini +/etc/sensors/WDR/5M_imx335.ini +/etc/sensors/WDR/imx335_i2c_4M.ini +/etc/sensors/4l_sc223a_i2c_1080p.ini +/etc/sensors/5M_imx335.ini +/etc/sensors/bt656_720p.ini +/etc/sensors/gc1054_i2c_720p.ini +/etc/sensors/gc2053_i2c_1080p.ini +/etc/sensors/gc4023_i2c_4M.ini +/etc/sensors/gc4653_i2c_4M.ini +/etc/sensors/gc5603_i2c_5M.ini +/etc/sensors/imx307_i2c_2l_1080p.ini +/etc/sensors/imx335_i2c_4M.ini +/etc/sensors/jxf23_i2c_1080p.ini +/etc/sensors/jxf23_i2c_dc_1080p.ini +/etc/sensors/sc200ai_i2c_1080p.ini +/etc/sensors/sc2232h_i2c_1080p.ini +/etc/sensors/sc2239_i2c_1080p.ini +/etc/sensors/sc2335_i2c_1080p.ini +/etc/sensors/smtsec_imx307_i2c_4l_1080p.ini +/etc/sensors/jxh63_i2c_720p.ini +# +/etc/sensors/iq/imx335.ini +/etc/sensors/iq/sc2232.ini +# +/usr/lib/sensors/libsns_bt656.so +/usr/lib/sensors/libsns_f23.so +/usr/lib/sensors/libsns_f37.so +/usr/lib/sensors/libsns_gc2053.so +/usr/lib/sensors/libsns_gc4653_2l.so +/usr/lib/sensors/libsns_imx307.so +/usr/lib/sensors/libsns_imx307_2l.so +/usr/lib/sensors/libsns_imx335.so +/usr/lib/sensors/libsns_sc200ai.so +/usr/lib/sensors/libsns_sc2239.so +/usr/lib/sensors/libsns_sc223a_4l.so +/usr/lib/sensors/libsns_sc2335.so +/usr/lib/sensors/libsns_sc2232h.so +/usr/lib/sensors/libsns_sc3235.so +/usr/lib/sensors/libsns_sc3335.so +/usr/lib/sensors/libsns_h63.so +# +/lib/modules/4.9.37/kernel/drivers/i2c/busses/i2c-tiny-usb.ko +/lib/modules/4.9.37/kernel/drivers/scsi/scsi_mod.ko +/lib/modules/4.9.37/kernel/drivers/scsi/scsi_transport_fc.ko +/lib/modules/4.9.37/kernel/drivers/scsi/sd_mod.ko +/lib/modules/4.9.37/kernel/fs/f2fs/f2fs.ko