diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts 2026-07-02 16:56:23.127495823 +0800 +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts 2026-07-02 16:55:31.716908070 +0800 @@ -642,12 +642,13 @@ }; &i2c0 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main: sensor-main@20 { + status = "disabled"; compatible = "sprd,sensor-main"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -668,6 +669,7 @@ }; sensor_sub: sensor-sub@5a { + status = "disabled"; compatible = "sprd,sensor-sub"; reg = <0x5a>; clock-names = "clk_src","sensor_eb", @@ -689,12 +691,13 @@ }; &i2c1 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main2: sensor-main2@20 { + status = "disabled"; compatible = "sprd,sensor-main2"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -722,6 +725,7 @@ #size-cells = <0>; sensor_main3: sensor-main3@20 { + status = "disabled"; compatible = "sprd,sensor-main3"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -735,20 +739,20 @@ vddcamd-supply = <&vddcamd2>; vddcammot-supply = <&vddcammot1>; mot-gpios = <&ap_gpio 78 0>; - reset-gpios = <&ap_gpio 43 0>; + reset-gpios = <&ap_gpio 152 0>; sprd,phyid = <2>;/*4*/ - csi = <&csi2>; power-domains = <&mm_domain>; }; }; &i2c5 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_sub2: sensor-sensor_sub2@2a { + status = "disabled"; compatible = "sprd,sensor-sub2"; reg = <0x2a>; clock-names = "clk_src","sensor_eb", @@ -763,11 +767,11 @@ reset-gpios = <&ap_gpio 44 0>; power-down-gpios = <&ap_gpio 50 0>; sprd,phyid = <5>; - csi = <&csi2>; power-domains = <&mm_domain>; }; sensor_sub3: sensor-sensor_sub3@2e { + status = "disabled"; compatible = "sprd,sensor-sub3"; reg = <0x2e>; clock-names = "clk_src","sensor_eb", @@ -782,7 +786,6 @@ reset-gpios = <&ap_gpio 43 0>; power-down-gpios = <&ap_gpio 49 0>; sprd,phyid = <7>; - csi = <&csi3>; power-domains = <&mm_domain>; }; }; @@ -811,6 +814,30 @@ }; }; +&i2c4 { + status = "okay"; + clock-frequency = <400000>; + #address-cells = <1>; + #size-cells = <0>; + + sensor_imx258_a: sensor-imx258-a@1a { + compatible = "sprd,sensor-main"; + reg = <0x1a>; + clock-names = "clk_src","sensor_eb", + "clk_96m","clk_64m", + "clk_51m2","clk_48m","clk_26m"; + clocks = <&mm_clk CLK_SENSOR2>,<&mm_gate CLK_SENSOR2_EN>, + <&g5l_pll CLK_TGPLL_96M>,<&g5l_pll CLK_TGPLL_64M>, + <&g5l_pll CLK_TGPLL_51M2>,<&g5l_pll CLK_TGPLL_48M>,<&ext_26m>; + vddio-supply = <&vddcamio>; + reset-gpios = <&ap_gpio 42 0>; + power-down-gpios = <&ap_gpio 47 0>; + sprd,phyid = <2>; + csi = <&csi2>; + power-domains = <&mm_domain>; + }; +}; + &pdm_dmic { status = "okay"; }; diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts 2026-07-02 16:56:23.127495823 +0800 +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts 2026-07-02 16:55:31.716908070 +0800 @@ -653,12 +653,13 @@ }; &i2c0 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main: sensor-main@20 { + status = "disabled"; compatible = "sprd,sensor-main"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -679,6 +680,7 @@ }; sensor_sub: sensor-sub@5a { + status = "disabled"; compatible = "sprd,sensor-sub"; reg = <0x5a>; clock-names = "clk_src","sensor_eb", @@ -700,12 +702,13 @@ }; &i2c1 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main2: sensor-main2@20 { + status = "disabled"; compatible = "sprd,sensor-main2"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -733,6 +736,7 @@ #size-cells = <0>; sensor_main3: sensor-main3@20 { + status = "disabled"; compatible = "sprd,sensor-main3"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -746,20 +750,20 @@ vddcamd-supply = <&vddcamd2>; vddcammot-supply = <&vddcammot1>; mot-gpios = <&ap_gpio 78 0>; - reset-gpios = <&ap_gpio 43 0>; + reset-gpios = <&ap_gpio 152 0>; sprd,phyid = <2>;/*4*/ - csi = <&csi2>; power-domains = <&mm_domain>; }; }; &i2c5 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_sub2: sensor-sensor_sub2@2a { + status = "disabled"; compatible = "sprd,sensor-sub2"; reg = <0x2a>; clock-names = "clk_src","sensor_eb", @@ -774,11 +778,11 @@ reset-gpios = <&ap_gpio 44 0>; power-down-gpios = <&ap_gpio 50 0>; sprd,phyid = <5>; - csi = <&csi2>; power-domains = <&mm_domain>; }; sensor_sub3: sensor-sensor_sub3@2e { + status = "disabled"; compatible = "sprd,sensor-sub3"; reg = <0x2e>; clock-names = "clk_src","sensor_eb", @@ -793,7 +797,6 @@ reset-gpios = <&ap_gpio 43 0>; power-down-gpios = <&ap_gpio 49 0>; sprd,phyid = <7>; - csi = <&csi3>; power-domains = <&mm_domain>; }; }; @@ -822,6 +825,30 @@ }; }; +&i2c4 { + status = "okay"; + clock-frequency = <400000>; + #address-cells = <1>; + #size-cells = <0>; + + sensor_imx258_a: sensor-imx258-a@1a { + compatible = "sprd,sensor-main"; + reg = <0x1a>; + clock-names = "clk_src","sensor_eb", + "clk_96m","clk_64m", + "clk_51m2","clk_48m","clk_26m"; + clocks = <&mm_clk CLK_SENSOR2>,<&mm_gate CLK_SENSOR2_EN>, + <&g5l_pll CLK_TGPLL_96M>,<&g5l_pll CLK_TGPLL_64M>, + <&g5l_pll CLK_TGPLL_51M2>,<&g5l_pll CLK_TGPLL_48M>,<&ext_26m>; + vddio-supply = <&vddcamio>; + reset-gpios = <&ap_gpio 42 0>; + power-down-gpios = <&ap_gpio 47 0>; + sprd,phyid = <2>; + csi = <&csi2>; + power-domains = <&mm_domain>; + }; +}; + &pdm_dmic { status = "okay"; }; diff -ruN a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts --- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts 2026-07-02 16:56:23.128495854 +0800 +++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts 2026-07-02 16:55:31.717908101 +0800 @@ -642,12 +642,13 @@ }; &i2c0 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main: sensor-main@20 { + status = "disabled"; compatible = "sprd,sensor-main"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -668,6 +669,7 @@ }; sensor_sub: sensor-sub@5a { + status = "disabled"; compatible = "sprd,sensor-sub"; reg = <0x5a>; clock-names = "clk_src","sensor_eb", @@ -689,12 +691,13 @@ }; &i2c1 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main2: sensor-main2@20 { + status = "disabled"; compatible = "sprd,sensor-main2"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -722,6 +725,7 @@ #size-cells = <0>; sensor_main3: sensor-main3@20 { + status = "disabled"; compatible = "sprd,sensor-main3"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -735,20 +739,20 @@ vddcamd-supply = <&vddcamd2>; vddcammot-supply = <&vddcammot1>; mot-gpios = <&ap_gpio 78 0>; - reset-gpios = <&ap_gpio 43 0>; + reset-gpios = <&ap_gpio 152 0>; sprd,phyid = <2>;/*4*/ - csi = <&csi2>; power-domains = <&mm_domain>; }; }; &i2c5 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_sub2: sensor-sensor_sub2@2a { + status = "disabled"; compatible = "sprd,sensor-sub2"; reg = <0x2a>; clock-names = "clk_src","sensor_eb", @@ -763,11 +767,11 @@ reset-gpios = <&ap_gpio 44 0>; power-down-gpios = <&ap_gpio 50 0>; sprd,phyid = <5>; - csi = <&csi2>; power-domains = <&mm_domain>; }; sensor_sub3: sensor-sensor_sub3@2e { + status = "disabled"; compatible = "sprd,sensor-sub3"; reg = <0x2e>; clock-names = "clk_src","sensor_eb", @@ -782,7 +786,6 @@ reset-gpios = <&ap_gpio 43 0>; power-down-gpios = <&ap_gpio 49 0>; sprd,phyid = <7>; - csi = <&csi3>; power-domains = <&mm_domain>; }; }; @@ -811,6 +814,30 @@ }; }; +&i2c4 { + status = "okay"; + clock-frequency = <400000>; + #address-cells = <1>; + #size-cells = <0>; + + sensor_imx258_a: sensor-imx258-a@1a { + compatible = "sprd,sensor-main"; + reg = <0x1a>; + clock-names = "clk_src","sensor_eb", + "clk_96m","clk_64m", + "clk_51m2","clk_48m","clk_26m"; + clocks = <&mm_clk CLK_SENSOR2>,<&mm_gate CLK_SENSOR2_EN>, + <&g5l_pll CLK_TGPLL_96M>,<&g5l_pll CLK_TGPLL_64M>, + <&g5l_pll CLK_TGPLL_51M2>,<&g5l_pll CLK_TGPLL_48M>,<&ext_26m>; + vddio-supply = <&vddcamio>; + reset-gpios = <&ap_gpio 42 0>; + power-down-gpios = <&ap_gpio 47 0>; + sprd,phyid = <2>; + csi = <&csi2>; + power-domains = <&mm_domain>; + }; +}; + &pdm_dmic { status = "okay"; }; diff -ruN a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts --- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts 2026-07-02 16:56:23.128495854 +0800 +++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts 2026-07-02 16:55:31.717908101 +0800 @@ -653,12 +653,13 @@ }; &i2c0 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main: sensor-main@20 { + status = "disabled"; compatible = "sprd,sensor-main"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -679,6 +680,7 @@ }; sensor_sub: sensor-sub@5a { + status = "disabled"; compatible = "sprd,sensor-sub"; reg = <0x5a>; clock-names = "clk_src","sensor_eb", @@ -700,12 +702,13 @@ }; &i2c1 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_main2: sensor-main2@20 { + status = "disabled"; compatible = "sprd,sensor-main2"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -733,6 +736,7 @@ #size-cells = <0>; sensor_main3: sensor-main3@20 { + status = "disabled"; compatible = "sprd,sensor-main3"; reg = <0x20>; clock-names = "clk_src","sensor_eb", @@ -746,20 +750,20 @@ vddcamd-supply = <&vddcamd2>; vddcammot-supply = <&vddcammot1>; mot-gpios = <&ap_gpio 78 0>; - reset-gpios = <&ap_gpio 43 0>; + reset-gpios = <&ap_gpio 152 0>; sprd,phyid = <2>;/*4*/ - csi = <&csi2>; power-domains = <&mm_domain>; }; }; &i2c5 { - status = "okay"; + status = "disabled"; clock-frequency = <400000>; #address-cells = <1>; #size-cells = <0>; sensor_sub2: sensor-sensor_sub2@2a { + status = "disabled"; compatible = "sprd,sensor-sub2"; reg = <0x2a>; clock-names = "clk_src","sensor_eb", @@ -774,11 +778,11 @@ reset-gpios = <&ap_gpio 44 0>; power-down-gpios = <&ap_gpio 50 0>; sprd,phyid = <5>; - csi = <&csi2>; power-domains = <&mm_domain>; }; sensor_sub3: sensor-sensor_sub3@2e { + status = "disabled"; compatible = "sprd,sensor-sub3"; reg = <0x2e>; clock-names = "clk_src","sensor_eb", @@ -793,7 +797,6 @@ reset-gpios = <&ap_gpio 43 0>; power-down-gpios = <&ap_gpio 49 0>; sprd,phyid = <7>; - csi = <&csi3>; power-domains = <&mm_domain>; }; }; @@ -822,6 +825,30 @@ }; }; +&i2c4 { + status = "okay"; + clock-frequency = <400000>; + #address-cells = <1>; + #size-cells = <0>; + + sensor_imx258_a: sensor-imx258-a@1a { + compatible = "sprd,sensor-main"; + reg = <0x1a>; + clock-names = "clk_src","sensor_eb", + "clk_96m","clk_64m", + "clk_51m2","clk_48m","clk_26m"; + clocks = <&mm_clk CLK_SENSOR2>,<&mm_gate CLK_SENSOR2_EN>, + <&g5l_pll CLK_TGPLL_96M>,<&g5l_pll CLK_TGPLL_64M>, + <&g5l_pll CLK_TGPLL_51M2>,<&g5l_pll CLK_TGPLL_48M>,<&ext_26m>; + vddio-supply = <&vddcamio>; + reset-gpios = <&ap_gpio 42 0>; + power-down-gpios = <&ap_gpio 47 0>; + sprd,phyid = <2>; + csi = <&csi2>; + power-domains = <&mm_domain>; + }; +}; + &pdm_dmic { status = "okay"; }; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/devices/ums9620-2h10/BoardConfig.mk b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/devices/ums9620-2h10/BoardConfig.mk --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/devices/ums9620-2h10/BoardConfig.mk 2026-07-02 16:55:48.164416571 +0800 +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/devices/ums9620-2h10/BoardConfig.mk 2026-07-10 15:58:00.000000000 +0800 @@ -44,32 +44,32 @@ #select camera 2M,3M,5M,8M,13M,16M,21M CAMERA_SUPPORT_SIZE := s32 -FRONT_CAMERA_SUPPORT_SIZE := s16 -BACK_EXT_CAMERA_SUPPORT_SIZE := s16 -FRONT_EXT_CAMERA_SUPPORT_SIZE := s8 -BACK_EXT2_CAMERA_SUPPORT_SIZE := s8 +FRONT_CAMERA_SUPPORT_SIZE := +BACK_EXT_CAMERA_SUPPORT_SIZE := +FRONT_EXT_CAMERA_SUPPORT_SIZE := +BACK_EXT2_CAMERA_SUPPORT_SIZE := TARGET_BOARD_SW_GTM_SUPPORT := true #camera sensor support list -CAMERA_SENSOR_TYPE_BACK := "imx586,s5kgw1sp03,ov8856_back,ov08a10,ov08a10_back,ov08a10_back_sunny,ov02a10" -CAMERA_SENSOR_TYPE_FRONT := "imx616" +CAMERA_SENSOR_TYPE_BACK := "imx258" +CAMERA_SENSOR_TYPE_FRONT := #camera dual sensor -TARGET_BOARD_CAMERA_DUAL_SENSOR_MODULE := true +TARGET_BOARD_CAMERA_DUAL_SENSOR_MODULE := false #dual camera 3A sync #TARGET_BOARD_CONFIG_CAMERA_DUAL_SYNC := true #sensor multi-instance #TARGET_BOARD_CAMERA_SENSOR_MULTI_INSTANCE_SUPPORT := ture TARGET_BOARD_CAMERA_SENSOR_MULTI_INSTANCE_SUPPORT := false #4in1 -TARGET_BOARD_CAMERA_4IN1 := true -TARGET_BOARD_SENSOR_SS4C := true +TARGET_BOARD_CAMERA_4IN1 := false +TARGET_BOARD_SENSOR_SS4C := false #tuning param support list -TUNING_PARAM_LIST := "s5kgw1sp03_back_main,imx586_replace_back_main,ov08a10_back_tele,ov8856_back_ultrawide,ov8866_front_dual,imx616_front_main,ov02a10_back_macro" +TUNING_PARAM_LIST := "imx586" #4in1 ov4c -TARGET_BOARD_SENSOR_OV4C := true +TARGET_BOARD_SENSOR_OV4C := false #tof -TARGET_CAMERA_SENSOR_TOF := tof_vl53l0 +TARGET_CAMERA_SENSOR_TOF := diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/Makefile b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/Makefile --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/Makefile 1970-01-01 08:00:00.000000000 +0800 +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/Makefile 2026-07-02 16:55:31.717908101 +0800 @@ -0,0 +1,71 @@ +# +# SPDX-FileCopyrightText: 2020-2022 Unisoc (Shanghai) Technologies Co., Ltd +# SPDX-License-Identifier: LicenseRef-Unisoc-General-1.0 +# +# Copyright 2022-2022 Unisoc (Shanghai) Technologies Co., Ltd. +# Licensed under the Unisoc General Software License, version 1.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# https://www.unisoc.com/en_us/license/UNISOC_GENERAL_LICENSE_V1.0-EN_US +# Software distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OF ANY KIND, either express or implied. +# See the Unisoc General Software License, version 1.0 for more details. +# +CFLAGS = -Wall -g -O -fPIC + +LOCAL_C_INCLUDES := +LOCAL_SRC_DIR := +LOCAL_SRC_FILES := +LOCAL_CFLAGS := + +LOCAL_PATH := $(shell pwd) + +PARAM_NAME := $(notdir $(LOCAL_PATH)) + +include $(LOCAL_PATH)/../../../../../devices/$(BOARD)/BoardConfig.mk +include $(LOCAL_PATH)/../../../../../camera.mk +include $(LOCAL_PATH)/../../../../../SprdCtrl.mk + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../inc \ + $(LOCAL_PATH)/../../../../../$(OEM_DIR)/inc \ + $(LOCAL_PATH)/../../../../../common/inc \ + $(LOCAL_PATH)/../../../../../$(ISPDRV_DIR)/isp_tune \ + $(LOCAL_PATH)/../../../../../$(ISPALG_DIR)/common/inc \ + $(LOCAL_PATH)/../../../../../$(ISPDRV_DIR)/middleware/inc \ + $(LOCAL_PATH)/../../../../../$(ISPDRV_DIR)/driver/inc \ + $(LOCAL_PATH)/../../../../../KIface \ + $(LOCAL_PATH)/../../../../../KIface/interface \ + $(LOCAL_PATH)/../../../../../utils/camxmlparser/inc/libxml2 \ + $(LOCAL_PATH)/../../../../../libcaminiparser + + +LOCAL_SRC_FILES := sensor_imx258_mipi_raw.c + +ifeq (1, $(strip $(shell expr $(ANDROID_MAJOR_VER) \>= 8))) +LOCAL_PROPRIETARY_MODULE := true +endif + +INCLUDE_DIRS = $(addprefix -I , $(LOCAL_C_INCLUDES)) + +OBJS = $(notdir $(patsubst %.c,%.o,$(LOCAL_SRC_FILES))) + +LIBS = -lpthread -lcamcommon -lcamsensor -lcamxmlparser + +SRCS = $(LOCAL_SRC_FILES) + +TARGET := libsensor_$(PARAM_NAME).so + +CFLAGS += $(LOCAL_CFLAGS) + +all:$(OBJS) + $(CC) -shared -fPIC -o $(TARGET) $(OBJS) $(LIBS) + +$(OBJS):$(SRCS) + $(CC) $(CFLAGS) $(INCLUDE_DIRS) -c $^ + +install: + cp $(TARGET) $(INSTALL_MOD_PATH)/usr/lib + +clean: + rm -f *.o + rm -f $(TARGET) diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h 2026-07-02 16:55:48.164416571 +0800 +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h 2026-07-02 16:55:31.717908101 +0800 @@ -16,7 +16,7 @@ #define VENDOR_NUM 3 -#include +//#include #include "sensor.h" #include "jpeg_exif_header.h" #include "sensor_drv_u.h" @@ -24,11 +24,7 @@ #include "sensor_raw.h" #define SENSOR_NAME "imx258_mipi_raw" -#ifdef CAMERA_SENSOR_BACK_I2C_SWITCH -#define I2C_SLAVE_ADDR 0x20 -#else #define I2C_SLAVE_ADDR 0x34 -#endif #define BINNING_FACTOR 2 #define imx258_PID_ADDR 0x0016 @@ -865,7 +861,7 @@ {.module_id = MODULE_TRULY, .module_info = { .major_i2c_addr = 0x34 >> 1, - .minor_i2c_addr = 0x20 >> 1, + .minor_i2c_addr = 0x34 >> 1, .i2c_burst_mode = SENSOR_I2C_BURST_REG16_VAL8, @@ -904,7 +900,7 @@ {.module_id = MODULE_SUNNY, .module_info = { .major_i2c_addr = 0x34 >> 1, - .minor_i2c_addr = 0x20 >> 1, + .minor_i2c_addr = 0x34 >> 1, .reg_addr_value_bits = SENSOR_I2C_REG_16BIT | SENSOR_I2C_VAL_8BIT | SENSOR_I2C_FREQ_400, @@ -940,8 +936,8 @@ }}, {.module_id = MODULE_DARLING, .module_info = { - .major_i2c_addr = 0x20 >> 1, - .minor_i2c_addr = 0x20 >> 1, + .major_i2c_addr = 0x34 >> 1, + .minor_i2c_addr = 0x34 >> 1, .reg_addr_value_bits = SENSOR_I2C_REG_16BIT | SENSOR_I2C_VAL_8BIT | SENSOR_I2C_FREQ_400, diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig @@ -2428,7 +2428,7 @@ CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y -# CONFIG_I2C_CHARDEV is not set +CONFIG_I2C_CHARDEV=y # CONFIG_I2C_MUX is not set # CONFIG_I2C_HELPER_AUTO is not set # CONFIG_I2C_SMBUS is not set diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig @@ -2428,7 +2428,7 @@ CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y -# CONFIG_I2C_CHARDEV is not set +CONFIG_I2C_CHARDEV=y # CONFIG_I2C_MUX is not set # CONFIG_I2C_HELPER_AUTO is not set # CONFIG_I2C_SMBUS is not set diff -ruN a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig --- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig +++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig @@ -2428,7 +2428,7 @@ CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y -# CONFIG_I2C_CHARDEV is not set +CONFIG_I2C_CHARDEV=y # CONFIG_I2C_MUX is not set # CONFIG_I2C_HELPER_AUTO is not set # CONFIG_I2C_SMBUS is not set diff -ruN a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig --- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig +++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig @@ -2428,7 +2428,7 @@ CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y -# CONFIG_I2C_CHARDEV is not set +CONFIG_I2C_CHARDEV=y # CONFIG_I2C_MUX is not set # CONFIG_I2C_HELPER_AUTO is not set # CONFIG_I2C_SMBUS is not set diff -ruN a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/ump9620.dtsi b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/ump9620.dtsi --- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/ump9620.dtsi +++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/ump9620.dtsi @@ -482,6 +482,7 @@ regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1830000>; regulator-ramp-delay = <25000>; + regulator-always-on; }; vddwcn: LDO_VDDWCN { diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-core/images/unisoc-wayland-image.bb b/source_sync_rls_25c/layers/meta-unisoc/recipes-core/images/unisoc-wayland-image.bb --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-core/images/unisoc-wayland-image.bb +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-core/images/unisoc-wayland-image.bb @@ -6,5 +6,6 @@ CORE_IMAGE_BASE_INSTALL += " \ packagegroup-unisoc-wayland \ + i2c-tools \ ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'packagegroup-core-selinux', '', d)} \ " inherit ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux-image', '', d)} diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp @@ -219,8 +219,8 @@ struct cmr_zoom_param zoom_param; struct cmr_range_fps_param fps_param; mZslCaptureExitLoop = false; - mSprdZslEnabled = true; - mCaptureMode = CAMERA_ZSL_MODE; // CAMERA_NORMAL_MODE + mSprdZslEnabled = false; + mCaptureMode = CAMERA_NORMAL_MODE; memset(&zoom_param, 0, sizeof(struct cmr_zoom_param)); if (mOemUT_cxt == NULL) { diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c @@ -727,6 +727,8 @@ * please modify this function acording your spec *============================================================================*/ static cmr_int imx258_drv_stream_on(cmr_handle handle, cmr_uint param) { + cmr_u32 stream_state = 0; + UNUSED(param); SENSOR_IC_CHECK_HANDLE(handle); @@ -750,6 +752,9 @@ #endif hw_sensor_write_reg(sns_drv_cxt->hw_handle, 0x0100, 0x01); + usleep(5 * 1000); + stream_state = hw_sensor_read_reg(sns_drv_cxt->hw_handle, 0x0100); + SENSOR_LOGI("stream_on 0x0100=0x%x", stream_state); return 0; } diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp @@ -298,45 +298,31 @@ int OemUnitTest::zslSnapshot() { int ret = CMR_CAMERA_SUCCESS; - mCaptureMode = CAMERA_ZSL_MODE; - - // if not , start Preview + + /* + * ZSL is disabled on the current single-camera SBC bring-up path. Keep the + * command useful by capturing preview dumps instead of entering the phone ZSL + * snapshot flow. + */ + CMR_LOGI("zslSnapshot: capture preview dump"); + printf("OemUnitTest zslSnapshot preview-dump mode\n"); + + camera_dump_cnt_pre = 0; + dump_total_count = 5; + mCaptureMode = CAMERA_NORMAL_MODE; + mSprdZslEnabled = false; + if (!isPreviewing()) { ret = startPreview(); if (ret) { - CMR_LOGE("When zslSnapshot, fail to start Preview"); + CMR_LOGE("zslSnapshot: fail to start preview dump"); return ret; } } - std::unique_lock lck(mLock); - - // WAIT CAPTURE DONE - if (isCapturing()) { - WaitForCaptureDone(); - } - - SET_PARM(mOem, mCameraHandle, CAMERA_PARAM_SHOT_NUM, mPicCaptureCnt); - SET_PARM(mOem, mCameraHandle, CAMERA_PARAM_EXIF_MIME_TYPE, - MODE_SINGLE_CAMERA); - - struct img_size thumbnail_size = {0, 0}; - SET_PARM(mOem, mCameraHandle, CAMERA_PARAM_THUMB_SIZE, - (cmr_uint)&thumbnail_size); - - ret = mOem->ops->camera_take_picture(mCameraHandle, mCaptureMode); - if (ret) { - setCameraState(SPRD_ERROR, STATE_CAPTURE); - CMR_LOGE("fail to camera_take_picture"); - goto exit; - } - - ret = snapshot_zsl(); - -exit: - CMR_LOGD("X"); - return ret; + usleep(1000 * 1000); + printf("OemUnitTest zslSnapshot preview-dump saved %d frame(s)\n", + camera_dump_cnt_pre); + + return CMR_CAMERA_SUCCESS; } @@ -770,6 +775,8 @@ value = hw_sensor_read_reg(sns_drv_cxt->hw_handle, 0x0100); if (value != 0x00) { hw_sensor_write_reg(sns_drv_cxt->hw_handle, 0x0100, 0x00); + value = hw_sensor_read_reg(sns_drv_cxt->hw_handle, 0x0100); + SENSOR_LOGI("stream_off 0x0100=0x%x", value); if (!sns_drv_cxt->is_sensor_close) { sleep_time = (sns_drv_cxt->sensor_ev_info.preview_framelength * sns_drv_cxt->line_time_def / 1000000) + 10; @@ -778,6 +785,7 @@ } } else { hw_sensor_write_reg(sns_drv_cxt->hw_handle, 0x0100, 0x00); + SENSOR_LOGI("stream_off already stopped, 0x0100=0x%x", value); } sns_drv_cxt->is_sensor_close = 0; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h @@ -802,21 +802,48 @@ static SENSOR_TRIM_T s_imx258_resolution_trim_tab[VENDOR_NUM] = { {.module_id = MODULE_TRULY, - .trim_info = {{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}}, - /* {0,0, 1040, 768,10325,1296, 812, { 0,0,1040,768}},*/ - {0, 0, 1280, 720, 13939, 960, 796, {0, 0, 1280, 720}}, - {0, 0, 2096, 1552, 20300, 1296, 1644, {0, 0, 2096, 1552}}, - {0, 0, 4208, 3120, 10215, 1296, 3224, {0, 0, 4208, 3120}}}}, + .trim_info = {{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}}, + /* {0, 0, 1040, 768, 10325, 1296, 812, {0, 0, 1040, 768}}, */ + {.trim_width = 1280, .trim_height = 720, + .line_time = 13939, .bps_per_lane = PREVIEW_MIPI_PER_LANE_BPS, + .frame_line = 796, .scaler_trim = {0, 0, 1280, 720}}, + {.trim_width = 2096, .trim_height = 1552, + .line_time = 20300, .bps_per_lane = PREVIEW_MIPI_PER_LANE_BPS, + .frame_line = 1644, .scaler_trim = {0, 0, 2096, 1552}}, + {.trim_width = 4208, .trim_height = 3120, + .line_time = 10215, .bps_per_lane = SNAPSHOT_MIPI_PER_LANE_BPS, + .frame_line = 3224, .scaler_trim = {0, 0, 4208, 3120}}}}, {.module_id = MODULE_SUNNY, - .trim_info = {{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}}, - /* {0,0, 1040, 768,10325,1296, 812, { 0,0,1040,768}},*/ - {0, 0, 1280, 720, 13939, 960, 796, {0, 0, 1280, 720}}, - {0, 0, 2080,1560, 20650, 336,1612, {0, 0, 2080, 1560}}, - {0, 0, 4160,3120, 10568,1158,3152, {0, 0, 4160, 3120}}}}, + .trim_info = {{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}}, + /* {0, 0, 1040, 768, 10325, 1296, 812, {0, 0, 1040, 768}}, */ + {.trim_width = 1280, .trim_height = 720, + .line_time = 13939, .bps_per_lane = PREVIEW_MIPI_PER_LANE_BPS, + .frame_line = 796, .scaler_trim = {0, 0, 1280, 720}}, + {.trim_width = 2080, .trim_height = 1560, + .line_time = 20650, .bps_per_lane = PREVIEW_MIPI_PER_LANE_BPS, + .frame_line = 1612, .scaler_trim = {0, 0, 2080, 1560}}, + {.trim_width = 4160, .trim_height = 3120, + .line_time = 10568, .bps_per_lane = SNAPSHOT_MIPI_PER_LANE_BPS, + .frame_line = 3152, .scaler_trim = {0, 0, 4160, 3120}}}}, {.module_id = MODULE_DARLING, - .trim_info = {{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}}, - /* {0,0, 1040, 768,10325,1296, 812, { 0,0,1040,768}},*/ - {0, 0, 1280, 720, 13939, 960, 796, {0, 0, 1280, 720}}, - {0, 0, 2096, 1552, 20300, 1296, 1644, {0, 0, 2096, 1552}}, - {0, 0, 4208, 3120, 10215, 1296, 3224, {0, 0, 4208, 3120}}}}, + .trim_info = {{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}}, + /* {0, 0, 1040, 768, 10325, 1296, 812, {0, 0, 1040, 768}}, */ + {.trim_width = 1280, .trim_height = 720, + .line_time = 13939, .bps_per_lane = PREVIEW_MIPI_PER_LANE_BPS, + .frame_line = 796, .scaler_trim = {0, 0, 1280, 720}}, + {.trim_width = 2096, .trim_height = 1552, + .line_time = 20300, .bps_per_lane = PREVIEW_MIPI_PER_LANE_BPS, + .frame_line = 1644, .scaler_trim = {0, 0, 2096, 1552}}, + {.trim_width = 4208, .trim_height = 3120, + .line_time = 10215, .bps_per_lane = SNAPSHOT_MIPI_PER_LANE_BPS, + .frame_line = 3224, .scaler_trim = {0, 0, 4208, 3120}}}}, }; diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/libcam-sensor-drv_0.0.1.bb b/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/libcam-sensor-drv_0.0.1.bb --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/libcam-sensor-drv_0.0.1.bb +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/libcam-sensor-drv_0.0.1.bb @@ -70,12 +70,18 @@ install -m 0777 ${S}/classic/Cista/sc031gs_dual/*.so ${D}${libdir}/ fi if [ ${CAMERA_BOARD} = "ums9620-2h10" ] ; then - install -m 0777 ${S}/classic/Sony/imx586/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/Sony/imx616/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/Samsung/s5kgw1sp03/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/OmniVision/ov08a10/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/OmniVision/ov08a10_back/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/OmniVision/ov08a10_back_sunny/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/OmniVision/ov8856_back/*.so ${D}${libdir}/ - install -m 0777 ${S}/classic/OmniVision/ov02a10/*.so ${D}${libdir}/ + for sensor_lib in \ + ${S}/classic/Sony/imx258/*.so \ + ${S}/classic/Sony/imx586/*.so \ + ${S}/classic/Sony/imx616/*.so \ + ${S}/classic/Samsung/s5kgw1sp03/*.so \ + ${S}/classic/OmniVision/ov08a10/*.so \ + ${S}/classic/OmniVision/ov08a10_back/*.so \ + ${S}/classic/OmniVision/ov08a10_back_sunny/*.so \ + ${S}/classic/OmniVision/ov8856_back/*.so \ + ${S}/classic/OmniVision/ov02a10/*.so; do + if [ -e "$sensor_lib" ]; then + install -m 0777 "$sensor_lib" ${D}${libdir}/ + fi + done fi diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/ini-init.sh b/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/ini-init.sh --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/ini-init.sh +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/ini-init.sh @@ -1,4 +1,9 @@ -cp /etc/cam_ini/camera_property.ini /home/user +mkdir -p /home/user +cp /etc/cam_ini/camera_property.ini /home/user/camera_property.ini +chmod 0644 /home/user/camera_property.ini +if command -v chcon >/dev/null 2>&1; then + chcon --reference=/etc/cam_ini/camera_property.ini /home/user/camera_property.ini || true +fi if ! [ -e /home/user/dump ]; then mkdir /home/user/dump fi diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/libcaminiparser/cmr_property.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/libcaminiparser/cmr_property.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/libcaminiparser/cmr_property.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/libcaminiparser/cmr_property.c @@ -1,10 +1,12 @@ #include "cmr_property.h" #define CMR_INI_DIR_PATH "/home/user/camera_property.ini" +#define CMR_INI_FALLBACK_PATH "/etc/cam_ini/camera_property.ini" #if CAM_YOCTO #include "iniparser.h" #include static dictionary* cmr_ini; +static const char* cmr_ini_path = CMR_INI_DIR_PATH; #define ASCIILINESZ (1024) #define INI_INVALID_KEY ((char*)-1) #define CMR_INI (cmr_ini) @@ -12,6 +14,11 @@ int property_parser_init() { - cmr_ini = iniparser_load(CMR_INI_DIR_PATH); + cmr_ini_path = CMR_INI_DIR_PATH; + cmr_ini = iniparser_load(cmr_ini_path); + if (cmr_ini == NULL) { + cmr_ini_path = CMR_INI_FALLBACK_PATH; + cmr_ini = iniparser_load(cmr_ini_path); + } if (cmr_ini == NULL) { return -1; } @@ -68,7 +75,9 @@ if(iniparser_set(cmr_ini, section, def)!=0) return -1 ; - FILE *ini_file = fopen(CMR_INI_DIR_PATH, "w"); + FILE *ini_file = fopen(cmr_ini_path, "w"); + if (ini_file == NULL) + return -1; iniparser_dump_ini(cmr_ini, ini_file); fclose(ini_file); diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.c @@ -291,22 +291,24 @@ SENSOR_LOGI("(1:on, 0:off): %ld", power_on); if (SENSOR_TRUE == power_on) { + hw_sensor_power_down(sns_drv_cxt->hw_handle, power_down); hw_sensor_set_reset_level(sns_drv_cxt->hw_handle, reset_level); hw_sensor_set_mclk(sns_drv_cxt->hw_handle, SENSOR_DISABLE_MCLK); - hw_sensor_set_voltage(sns_drv_cxt->hw_handle, SENSOR_AVDD_CLOSED, - SENSOR_AVDD_CLOSED, SENSOR_AVDD_CLOSED); - usleep(1 * 1000); - hw_sensor_set_voltage(sns_drv_cxt->hw_handle, dvdd_val, avdd_val, - iovdd_val); + hw_sensor_set_iovdd_val(sns_drv_cxt->hw_handle, SENSOR_AVDD_CLOSED); + usleep(2 * 1000); + hw_sensor_set_iovdd_val(sns_drv_cxt->hw_handle, iovdd_val); usleep(1 * 1000); - hw_sensor_set_mclk(sns_drv_cxt->hw_handle, SENSOR_DEFALUT_MCLK); - usleep(1 * 1000); + hw_sensor_set_mclk(sns_drv_cxt->hw_handle, EX_MCLK); + hw_sensor_power_down(sns_drv_cxt->hw_handle, !power_down); hw_sensor_set_reset_level(sns_drv_cxt->hw_handle, !reset_level); + usleep(5 * 1000); } else { hw_sensor_set_reset_level(sns_drv_cxt->hw_handle, reset_level); + hw_sensor_power_down(sns_drv_cxt->hw_handle, power_down); + usleep(1 * 1000); hw_sensor_set_mclk(sns_drv_cxt->hw_handle, SENSOR_DISABLE_MCLK); - hw_sensor_set_voltage(sns_drv_cxt->hw_handle, SENSOR_AVDD_CLOSED, - SENSOR_AVDD_CLOSED, SENSOR_AVDD_CLOSED); + usleep(1 * 1000); + hw_sensor_set_iovdd_val(sns_drv_cxt->hw_handle, SENSOR_AVDD_CLOSED); } SENSOR_LOGI("(1:on, 0:off): %ld", power_on); return SENSOR_SUCCESS; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/ubuntu/n6pro/tmp/etc/sensor_config.xml b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/ubuntu/n6pro/tmp/etc/sensor_config.xml --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/ubuntu/n6pro/tmp/etc/sensor_config.xml 2026-07-02 16:55:48.164416571 +0800 +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/ubuntu/n6pro/tmp/etc/sensor_config.xml 2026-07-10 15:58:00.000000000 +0800 @@ -1,152 +1,12 @@ - - sensor id 0 - <--> 0 - s5kgw1sp03 + imx258 BACK 90 - 55 - dualcam_master - multicam_wide - 1 - - lc898219 - 0 - - - - general - 0xa0 - 3 - 16384 - - + 100 - s5kgw1sp03_back_main - - - - 0 - imx586 - BACK - 90 - 55 - dualcam_master - multicam_wide - 1 - - lc898229 - 0 - - - - general - 0xa0 - 3 - 16384 - - - imx586 - - - sensor id 1 - <--> - - 1 - imx616 - FRONT - 270 - 100 - - imx616 - - - - general - 0xa2 - 3 - 16384 - - - - - sensor id 2 - <--> - - 2 - ov8856_back - BACK - 90 - 45 - dualcam_slave - multicam_superwide - - ov8856_back_ultrawide - - - - general - 0xa4 - 3 - 8192 - - - - - sensor id 4 - <--> - - 4 - ov08a10_back_sunny - BACK - 90 - 0 - multicam_tele - - dw9781b - 0 - - - dw9781b - 0 - - - - general - 0xa6 - 3 - 16384 - - - - ov08a10_back_sunny - - - - 4 - ov08a10_back - BACK - 90 - 0 - multicam_tele - - dw9800 - 0 - - - - general - 0xa6 - 3 - 16384 - - - - ov08a10 - - - + + diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp @@ -1,5 +1,6 @@ #define LOG_TAG "OemUnitTest" #include "OemUnitTest.h" +#include #define OEM_LIBRARY_PATH "libcamoem.so" #define CAMERA_MIN_FPS 5 @@ -286,6 +286,7 @@ int OemUnitTest::startPreview() { setCameraState(SPRD_INTERNAL_PREVIEW_REQUESTED, STATE_PREVIEW); ret = mOem->ops->camera_start_preview(mCameraHandle, mCaptureMode); + printf("OemUnitTest camera_start_preview ret=%d\n", ret); if (ret) { CMR_LOGE("camera_start_preview failed"); setCameraState(SPRD_ERROR, STATE_PREVIEW); diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c @@ -110,7 +110,9 @@ cmr_int camera_start_preview(cmr_handle camera_handle, goto exit; } + CMR_LOGE("imx258_debug camera_start_preview enter mode %d", mode); ret = camera_local_start_preview(camera_handle, mode, 0); + CMR_LOGE("imx258_debug camera_start_preview ret %ld", ret); if (ret) { CMR_LOGE("failed to start preview %ld", ret); } diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c @@ -11735,6 +11735,9 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, int64_t testVal = 60; struct img_size sn_size; + CMR_LOGE("imx258_debug camera_local_start_preview enter mode %d snapshot %ld camera_id %d", + mode, is_snapshot, cxt->camera_id); + //check camera_res_init_done pthread_mutex_lock(&close_mutex); if(cxt->need_wait_init_done_flag) { @@ -11771,6 +11774,7 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, } ret = camera_set_preview_param(oem_handle, mode, is_snapshot); + CMR_LOGE("imx258_debug camera_set_preview_param ret %ld", ret); if (ret) { CMR_LOGE("failed to set prev param %ld", ret); goto exit; @@ -11802,6 +11806,7 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, SETTING_SET_ENVIRONMENT, &setting_param); ret = cmr_preview_start(prev_cxt->preview_handle, cxt->camera_id); + CMR_LOGE("imx258_debug cmr_preview_start ret %ld", ret); if (ret) { CMR_LOGE("failed to start prev %ld", ret); } @@ -11837,6 +11842,7 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, cmr_snapshot_set_param_prepare(cxt->snp_cxt.snapshot_handle, &snp_param); exit: + CMR_LOGE("imx258_debug camera_local_start_preview exit ret %ld", ret); return ret; } diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/SprdOEMCamera.c @@ -13,6 +13,7 @@ #define LOG_TAG "OEMCam" +#include #include #include #include @@ -110,8 +111,10 @@ cmr_int camera_start_preview(cmr_handle camera_handle, goto exit; } + printf("imx258_debug camera_start_preview enter mode %d\n", mode); CMR_LOGE("imx258_debug camera_start_preview enter mode %d", mode); ret = camera_local_start_preview(camera_handle, mode, 0); + printf("imx258_debug camera_start_preview ret %ld\n", ret); CMR_LOGE("imx258_debug camera_start_preview ret %ld", ret); if (ret) { CMR_LOGE("failed to start preview %ld", ret); diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c @@ -14,6 +14,7 @@ #define LOG_TAG "cmr_oem" #define _GNU_SOURCE +#include #include #include #include @@ -11735,6 +11736,8 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, int64_t testVal = 60; struct img_size sn_size; + printf("imx258_debug camera_local_start_preview enter mode %d snapshot %ld camera_id %d\n", + mode, is_snapshot, cxt->camera_id); CMR_LOGE("imx258_debug camera_local_start_preview enter mode %d snapshot %ld camera_id %d", mode, is_snapshot, cxt->camera_id); @@ -11774,6 +11777,7 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, } ret = camera_set_preview_param(oem_handle, mode, is_snapshot); + printf("imx258_debug camera_set_preview_param ret %ld\n", ret); CMR_LOGE("imx258_debug camera_set_preview_param ret %ld", ret); if (ret) { CMR_LOGE("failed to set prev param %ld", ret); @@ -11806,6 +11810,7 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, SETTING_SET_ENVIRONMENT, &setting_param); ret = cmr_preview_start(prev_cxt->preview_handle, cxt->camera_id); + printf("imx258_debug cmr_preview_start ret %ld\n", ret); CMR_LOGE("imx258_debug cmr_preview_start ret %ld", ret); if (ret) { CMR_LOGE("failed to start prev %ld", ret); @@ -11842,6 +11847,7 @@ cmr_int camera_local_start_preview(cmr_handle oem_handle, exit: + printf("imx258_debug camera_local_start_preview exit ret %ld\n", ret); CMR_LOGE("imx258_debug camera_local_start_preview exit ret %ld", ret); return ret; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c @@ -14,6 +14,7 @@ #define LOG_TAG "cmr_prev" #define _GNU_SOURCE +#include #include #include #include @@ -3534,6 +3535,10 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, snapshot_enable = prev_cxt->prev_param.snapshot_eb; video_enable = prev_cxt->prev_param.video_eb; tool_eb = prev_cxt->prev_param.tool_eb; + printf("imx258_debug prev_start camera_id %d, prev_status %ld, preview_eb %d, snapshot_eb %d, " + "video_enable %d, need_isp %d, pdaf_type %d, work_mode %ld\n", + camera_id, prev_cxt->prev_status, preview_enable, snapshot_enable, + video_enable, prev_cxt->need_isp, pdaf_type, work_mode); CMR_LOGE("imx258_debug prev_start camera_id %d, prev_status %ld, preview_eb %d, snapshot_eb %d, " "video_enable %d, need_isp %d, pdaf_type %d, work_mode %ld", camera_id, prev_cxt->prev_status, preview_enable, snapshot_enable, @@ -3624,6 +3629,10 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, isp_param.remosaic_type = prev_cxt->prev_param.remosaic_type; ret = handle->ops.isp_start_video(handle->oem_handle, &isp_param); + printf("imx258_debug isp_start_video ret %ld, isp_size %d x %d, dcam_size %d x %d, zsl %d\n", + ret, isp_param.size.width, isp_param.size.height, + isp_param.dcam_size.width, isp_param.dcam_size.height, + isp_param.sprd_zsl_flag); CMR_LOGE("imx258_debug isp_start_video ret %ld, isp_size %d x %d, dcam_size %d x %d, zsl %d", ret, isp_param.size.width, isp_param.size.height, isp_param.dcam_size.width, isp_param.dcam_size.height, @@ -3656,6 +3665,8 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, skip_num = prev_cxt->sensor_info.mipi_cap_skip_num; CMR_LOGD("channel_bits %d, skip_num %ld", channel_bits, skip_num); ret = handle->ops.channel_start(handle->oem_handle, channel_bits, skip_num); + printf("imx258_debug channel_start ret %ld, channel_bits 0x%x, skip_num %ld\n", + ret, channel_bits, skip_num); CMR_LOGE("imx258_debug channel_start ret %ld, channel_bits 0x%x, skip_num %ld", ret, channel_bits, skip_num); if (ret) { @@ -3734,6 +3745,7 @@ exit: } + printf("imx258_debug prev_start exit ret %ld\n", ret); CMR_LOGE("imx258_debug prev_start exit ret %ld", ret); return ret; } diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c @@ -10435,6 +10435,13 @@ cmr_int camera_set_preview_param(cmr_handle oem_handle, cmr_bzero(&start_param, sizeof(struct preview_param)); ret = camera_get_preview_param(oem_handle, mode, is_snapshot, &start_param); + printf("imx258_debug camera_get_preview_param ret %ld, preview %d x %d eb %d, video %d x %d eb %d, snapshot %d x %d eb %d, zsl %d\n", + ret, start_param.preview_size.width, start_param.preview_size.height, + start_param.preview_eb, start_param.video_size.width, + start_param.video_size.height, start_param.video_eb, + start_param.picture_size.width, start_param.picture_size.height, + start_param.snapshot_eb, start_param.sprd_zsl_enabled); if (ret) { CMR_LOGE("failed to get prev param %ld", ret); goto exit; @@ -10450,6 +10457,9 @@ cmr_int camera_set_preview_param(cmr_handle oem_handle, cmr_bzero(&preview_out, sizeof(struct preview_out_param)); ret = cmr_preview_set_param(prev_cxt->preview_handle, cxt->camera_id, &start_param, &preview_out); + printf("imx258_debug cmr_preview_set_param ret %ld, preview_chn %d sn_mode %d, snapshot_chn %d sn_mode %d\n", + ret, preview_out.preview_chn_id, preview_out.preview_sn_mode, + preview_out.snapshot_chn_id, preview_out.snapshot_sn_mode); if (ret) { CMR_LOGE("failed to set prev param %ld", ret); goto exit; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c @@ -7136,6 +7136,13 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, handle->prev_cxt[camera_id].prev_param.tool_eb, handle->prev_cxt[camera_id].prev_status); + printf("imx258_debug prev_set_param_internal enter camera_id %ld, preview_eb %d, snapshot_eb %d, video_eb %d, " + "tool_eb %d, prev_status %ld\n", + handle->prev_cxt[camera_id].camera_id, + handle->prev_cxt[camera_id].prev_param.preview_eb, + handle->prev_cxt[camera_id].prev_param.snapshot_eb, + handle->prev_cxt[camera_id].prev_param.video_eb, + handle->prev_cxt[camera_id].prev_param.tool_eb, + handle->prev_cxt[camera_id].prev_status); CMR_LOGD("camera_id %ld, preview_eb %d, snapshot_eb %d, video_eb %d, " "tool_eb %d, prev_status %ld", handle->prev_cxt[camera_id].camera_id, @@ -7175,12 +7182,20 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, (prev_cxt->cur_raw.sensor_raw_fmt == DCAM_RAW_PACK_10 ? "mipi_raw": "raw")); } ret = prev_get_sensor_mode(handle, camera_id); + printf("imx258_debug prev_get_sensor_mode ret %ld, prev_mode %ld, cap_mode %ld, video_mode %ld, sensor_out %d x %d\n", + ret, handle->prev_cxt[camera_id].prev_mode, + handle->prev_cxt[camera_id].cap_mode, + handle->prev_cxt[camera_id].video_mode, + handle->prev_cxt[camera_id].sensor_out_width, + handle->prev_cxt[camera_id].sensor_out_height); if (ret) { CMR_LOGE("get sensor mode failed"); goto exit; } ret = prev_pre_set(handle, camera_id); + printf("imx258_debug prev_pre_set ret %ld\n", ret); if (ret) { CMR_LOGE("pre set failed"); goto exit; @@ -7196,6 +7211,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.preview_eb) { ret =prev_set_prev_param(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug prev_set_prev_param ret %ld\n", ret); if (ret) { CMR_LOGE("set prev param failed"); goto exit; @@ -7204,6 +7220,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.video_eb) { ret = prev_set_video_param(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug prev_set_video_param ret %ld\n", ret); if (ret) { CMR_LOGE("set video param failed"); goto exit; @@ -7212,6 +7229,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.channel1_eb) { ret = channel1_configure(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug channel1_configure ret %ld\n", ret); if (ret) { CMR_LOGE("channel1_configure failed"); goto exit; @@ -7220,6 +7238,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.channel2_eb) { ret = channel2_configure(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug channel2_configure ret %ld\n", ret); if (ret) { CMR_LOGE("channel2_configure failed"); goto exit; @@ -7228,6 +7247,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.channel3_eb) { ret = channel3_configure(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug channel3_configure ret %ld\n", ret); if (ret) { CMR_LOGE("channel3_configure failed"); goto exit; @@ -7236,6 +7256,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.channel5_eb) { ret = channel5_configure(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug channel5_configure ret %ld\n", ret); if (ret) { CMR_LOGE("channel0_configure failed"); goto exit; @@ -7252,6 +7273,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, } else { ret = prev_set_cap_param(handle, camera_id, is_restart, 0, out_param_ptr); } + printf("imx258_debug prev_set_cap_param ret %ld\n", ret); if (ret) { CMR_LOGE("set cap param failed"); goto exit; @@ -7261,6 +7283,7 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, if (handle->prev_cxt[camera_id].prev_param.channel0_eb) { ret = channel0_configure(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug channel0_configure ret %ld\n", ret); if (ret) { CMR_LOGE("channel0_configure failed"); goto exit; @@ -7272,12 +7295,14 @@ cmr_int prev_set_param_internal(struct prev_handle *handle, cmr_u32 camera_id, camera_id, handle->prev_cxt[camera_id].prev_param.channel4_eb); if (handle->prev_cxt[camera_id].prev_param.channel4_eb) { ret = channel4_configure(handle, camera_id, is_restart, out_param_ptr); + printf("imx258_debug channel4_configure ret %ld\n", ret); if (ret) { CMR_LOGE("channel4_configure failed"); goto exit; } } exit: + printf("imx258_debug prev_set_param_internal exit ret %ld\n", ret); CMR_LOGV("X"); handle->prev_cxt[camera_id].out_ret_val = ret; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp @@ -237,8 +237,8 @@ int OemUnitTest::startPreview() { preview_size.width = mPreviewWidth; preview_size.height = mPreviewHeight; - capture_size.width = mCaptureWidth; - capture_size.height = mCaptureHeight; + capture_size.width = 0; + capture_size.height = 0; zoom_param.mode = 1; zoom_param.zoom_level = 1; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c @@ -3534,10 +3534,10 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, snapshot_enable = prev_cxt->prev_param.snapshot_eb; video_enable = prev_cxt->prev_param.video_eb; tool_eb = prev_cxt->prev_param.tool_eb; - CMR_LOGD("camera_id %d, prev_status %ld, preview_eb %d, snapshot_eb %d, " - "video_enable %d, need_isp %d,pdaf_type %d", + CMR_LOGE("imx258_debug prev_start camera_id %d, prev_status %ld, preview_eb %d, snapshot_eb %d, " + "video_enable %d, need_isp %d, pdaf_type %d, work_mode %ld", camera_id, prev_cxt->prev_status, preview_enable, snapshot_enable, - video_enable, prev_cxt->need_isp, pdaf_type); + video_enable, prev_cxt->need_isp, pdaf_type, work_mode); if (preview_enable && PREVIEWING == prev_cxt->prev_status) { CMR_LOGE("is previewing now, do nothing"); @@ -3624,6 +3624,10 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, isp_param.remosaic_type = prev_cxt->prev_param.remosaic_type; ret = handle->ops.isp_start_video(handle->oem_handle, &isp_param); + CMR_LOGE("imx258_debug isp_start_video ret %ld, isp_size %d x %d, dcam_size %d x %d, zsl %d", + ret, isp_param.size.width, isp_param.size.height, + isp_param.dcam_size.width, isp_param.dcam_size.height, + isp_param.sprd_zsl_flag); if (ret) { CMR_LOGE("isp start video failed"); ret = CMR_CAMERA_FAIL; @@ -3652,6 +3656,8 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, skip_num = prev_cxt->sensor_info.mipi_cap_skip_num; CMR_LOGD("channel_bits %d, skip_num %ld", channel_bits, skip_num); ret = handle->ops.channel_start(handle->oem_handle, channel_bits, skip_num); + CMR_LOGE("imx258_debug channel_start ret %ld, channel_bits 0x%x, skip_num %ld", + ret, channel_bits, skip_num); if (ret) { CMR_LOGE("channel_start failed"); ret = CMR_CAMERA_FAIL; @@ -3728,6 +3734,7 @@ exit: } + CMR_LOGE("imx258_debug prev_start exit ret %ld", ret); return ret; } diff -ruN a/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/uis7885-2h10/sensor_config.xml b/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/uis7885-2h10/sensor_config.xml --- a/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/uis7885-2h10/sensor_config.xml 2026-07-02 16:55:48.164416571 +0800 +++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-multimedia/libcamera/files/uis7885-2h10/sensor_config.xml 2026-07-10 15:58:00.000000000 +0800 @@ -1,152 +1,12 @@ - - sensor id 0 - <--> 0 - s5kgw1sp03 + imx258 BACK 90 - 55 - dualcam_master - multicam_wide - 1 - - lc898219 - 0 - - - - general - 0xa0 - 3 - 16384 - - + 100 - s5kgw1sp03_back_main - - - - 0 - imx586 - BACK - 90 - 55 - dualcam_master - multicam_wide - 1 - - lc898229 - 0 - - - - general - 0xa0 - 3 - 16384 - - - imx586 - - - sensor id 1 - <--> - - 1 - imx616 - FRONT - 270 - 100 - - imx616 - - - - general - 0xa2 - 3 - 16384 - - - - - sensor id 2 - <--> - - 2 - ov8856_back - BACK - 90 - 45 - dualcam_slave - multicam_superwide - - ov8856_back_ultrawide - - - - general - 0xa4 - 3 - 8192 - - - - - sensor id 4 - <--> - - 4 - ov08a10_back_sunny - BACK - 90 - 0 - multicam_tele - - dw9781b - 0 - - - dw9781b - 0 - - - - general - 0xa6 - 3 - 16384 - - - - ov08a10_back_sunny - - - - 4 - ov08a10_back - BACK - 90 - 0 - multicam_tele - - dw9800 - 0 - - - - general - 0xa6 - 3 - 16384 - - - - ov08a10 - - - + + diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c @@ -3482,7 +3482,6 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, CMR_MSG_INIT(message); cmr_int ret = CMR_CAMERA_SUCCESS; struct prev_context *prev_cxt = NULL; - struct internal_param *inter_param = NULL; cmr_u32 preview_enable = 0; cmr_u32 snapshot_enable = 0; cmr_u32 video_enable = 0; @@ -3587,16 +3586,6 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, is_restart, is_sn_reopen); } - inter_param = (struct internal_param *)malloc(sizeof(struct internal_param)); - if (!inter_param) { - CMR_LOGE("No mem!"); - ret = CMR_CAMERA_NO_MEM; - goto exit; - } - cmr_bzero(inter_param, sizeof(struct internal_param)); - inter_param->param1 = (void *)((unsigned long)camera_id); - if (prev_cxt->need_isp) { isp_param.size.width = sensor_mode_info->trim_width; if (prev_cxt->need_binning) { diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c @@ -674,6 +674,7 @@ cmr_int cmr_preview_set_param(cmr_handle preview_handle, cmr_u32 camera_id, CMR_MSG_INIT(message); cmr_int ret = CMR_CAMERA_SUCCESS; cmr_int call_ret = CMR_CAMERA_SUCCESS; + struct internal_param *inter_param = NULL; struct prev_handle *handle = (struct prev_handle *)preview_handle; if (!preview_handle || !param_ptr || !out_param_ptr) { diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_preview.c @@ -3621,6 +3621,14 @@ cmr_int prev_start(struct prev_handle *handle, cmr_u32 camera_id, sensor_mode_info->trim_width, sensor_mode_info->trim_height); isp_param.remosaic_type = prev_cxt->prev_param.remosaic_type; + printf("imx258_debug before isp_start_video, isp_size %d x %d, dcam_size %d x %d, zsl %d, remosaic %d\n", + isp_param.size.width, isp_param.size.height, + isp_param.dcam_size.width, isp_param.dcam_size.height, + isp_param.sprd_zsl_flag, isp_param.remosaic_type); + CMR_LOGE("imx258_debug before isp_start_video, isp_size %d x %d, dcam_size %d x %d, zsl %d, remosaic %d", + isp_param.size.width, isp_param.size.height, + isp_param.dcam_size.width, isp_param.dcam_size.height, + isp_param.sprd_zsl_flag, isp_param.remosaic_type); ret = handle->ops.isp_start_video(handle->oem_handle, &isp_param); printf("imx258_debug isp_start_video ret %ld, isp_size %d x %d, dcam_size %d x %d, zsl %d\n", ret, isp_param.size.width, isp_param.size.height, diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/oem2v6/src/cmr_oem.c @@ -7179,6 +7179,17 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, goto exit; } + printf("imx258_debug camera_isp_start_video enter, size %d x %d, dcam %d x %d, work_mode %d, snapshot %d, zsl %d\n", + param_ptr->size.width, param_ptr->size.height, + param_ptr->dcam_size.width, param_ptr->dcam_size.height, + param_ptr->work_mode, param_ptr->is_snapshot, + param_ptr->sprd_zsl_flag); + CMR_LOGE("imx258_debug camera_isp_start_video enter, size %d x %d, dcam %d x %d, work_mode %d, snapshot %d, zsl %d", + param_ptr->size.width, param_ptr->size.height, + param_ptr->dcam_size.width, param_ptr->dcam_size.height, + param_ptr->work_mode, param_ptr->is_snapshot, + param_ptr->sprd_zsl_flag); CMR_LOGV("E"); cmr_bzero(&isp_param, sizeof(struct isp_video_start)); @@ -7247,6 +7258,8 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, CMR_LOGE("cmr_sensor_get_mode failed"); goto exit; } + printf("imx258_debug camera_isp_start_video sn_mode %u\n", sn_mode); + CMR_LOGE("imx258_debug camera_isp_start_video sn_mode %u", sn_mode); setPsParam(cxt->camera_id, PREVIEW_TYPE, 0, SPRD_TAG_SENSOR_MODE, &sn_mode); @@ -7257,6 +7270,16 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, goto exit; } sensor_mode_info = &exp_info.mode_info[sn_mode]; + printf("imx258_debug camera_isp_start_video sensor_mode_info %d x %d trim %d x %d out %d x %d line %d frame %d\n", + sensor_mode_info->width, sensor_mode_info->height, + sensor_mode_info->trim_width, sensor_mode_info->trim_height, + sensor_mode_info->out_width, sensor_mode_info->out_height, + sensor_mode_info->line_time, sensor_mode_info->frame_line); + CMR_LOGE("imx258_debug camera_isp_start_video sensor_mode_info %d x %d trim %d x %d out %d x %d line %d frame %d", + sensor_mode_info->width, sensor_mode_info->height, + sensor_mode_info->trim_width, sensor_mode_info->trim_height, + sensor_mode_info->out_width, sensor_mode_info->out_height, + sensor_mode_info->line_time, sensor_mode_info->frame_line); isp_param.resolution_info.sensor_size.w = sensor_mode_info->width; isp_param.resolution_info.sensor_size.h = sensor_mode_info->height; @@ -7304,6 +7327,12 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, CMR_LOGE("get sensor fps info failed %ld", ret); goto exit; } + printf("imx258_debug camera_isp_start_video fps max %u min %u high %u skip %u\n", + fps_info.max_fps, fps_info.min_fps, + fps_info.is_high_fps, fps_info.high_fps_skip_num); + CMR_LOGE("imx258_debug camera_isp_start_video fps max %u min %u high %u skip %u", + fps_info.max_fps, fps_info.min_fps, + fps_info.is_high_fps, fps_info.high_fps_skip_num); cmr_bzero(&setting_param, sizeof(setting_param)); setting_param.camera_id = cxt->camera_id; ret = cmr_setting_ioctl(cxt->setting_cxt.setting_handle, @@ -7349,6 +7378,8 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, if ((NULL == sns_ex_info_ptr->name) || (NULL == sns_ex_info_ptr->sensor_version_info)) { + printf("imx258_debug camera_isp_start_video init_static_info begin\n"); + CMR_LOGE("imx258_debug camera_isp_start_video init_static_info begin"); ret = cmr_sensor_init_static_info(cxt); if (ret) { cmr_sensor_deinit_static_info(cxt); @@ -7356,6 +7387,8 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, goto exit; } + printf("imx258_debug camera_isp_start_video init_static_info done\n"); + CMR_LOGE("imx258_debug camera_isp_start_video init_static_info done"); } sensor_info_ptr = &cxt->sn_cxt.sensor_info; if (NULL != sns_ex_info_ptr->sns_binning_factor && @@ -7391,6 +7424,10 @@ cmr_int camera_isp_start_video(cmr_handle oem_handle, camera_construct_scenario(oem_handle); isp_param.scenario_info = info; camera_isp_set_offline_num(info->app_mode, &isp_param.offline_frame_num); + printf("imx258_debug camera_isp_start_video before isp_video_start, app_mode %d offline %d\n", + info->app_mode, isp_param.offline_frame_num); + CMR_LOGE("imx258_debug camera_isp_start_video before isp_video_start, app_mode %d offline %d", + info->app_mode, isp_param.offline_frame_num); ret = isp_video_start(isp_cxt->isp_handle, &isp_param); if (ret) { isp_cxt->is_work = 0; diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/sensor/sensor_drv/classic/Sony/imx258/sensor_imx258_mipi_raw.h @@ -71,7 +71,8 @@ /* please don't change it */ #define EX_MCLK 24 -#define PDAF_TYPE2 +/* Disable PDAF for the single-camera SBC bring-up path. */ +/* #define PDAF_TYPE2 */ /*============================================================================== * Description: diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c @@ -21,6 +21,7 @@ #include #include +#include #include //#include #include @@ -13033,11 +13034,21 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ return ret; } + printf("imx258_debug isp_alg_fw_start enter, camera %ld, work_mode %d, size %d x %d, dcam %d x %d, zsl %d, pdaf_enable %d\n", + cxt->camera_id, in_ptr->work_mode, in_ptr->size.w, in_ptr->size.h, + in_ptr->dcam_size.w, in_ptr->dcam_size.h, in_ptr->zsl_flag, + in_ptr->pdaf_enable); + ISP_LOGE("imx258_debug isp_alg_fw_start enter, camera %ld, work_mode %d, size %d x %d, dcam %d x %d, zsl %d, pdaf_enable %d", + cxt->camera_id, in_ptr->work_mode, in_ptr->size.w, in_ptr->size.h, + in_ptr->dcam_size.w, in_ptr->dcam_size.h, in_ptr->zsl_flag, + in_ptr->pdaf_enable); cxt->raw_snapshot = 0; pmg_start(cxt->pmg_handle); + printf("imx258_debug isp_alg_fw_start after pmg_start\n"); ISP_LOGI("cam%ld init status %d\n", cxt->camera_id, cxt->init_status); isp_alg_fw_init_async_done(cxt); + printf("imx258_debug isp_alg_fw_start after init_async status %d\n", cxt->init_status); if (cxt->init_status == FW_INIT_ERR) { ISP_LOGE("cam%ld fw init error\n", cxt->camera_id); @@ -13045,9 +13056,11 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ } ret = isp_dev_access_ioctl(cxt->dev_access_handle, ISP_DEV_RESET, NULL, NULL); + printf("imx258_debug isp_alg_fw_start after ISP_DEV_RESET ret %ld\n", ret); /* free/reset statis buffers of previous session */ ret = isp_dev_free_buf(cxt->dev_access_handle, &cxt->stats_mem_info); + printf("imx258_debug isp_alg_fw_start after isp_dev_free_buf ret %ld\n", ret); /* gtm_ltm_on != 1/0,means not set */ cxt->gtm_ltm_on = (-1); @@ -13100,6 +13113,10 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ if (get_dump_block_enable(_PROP_PM_CONTEXT_RAW_CAP)) cxt->dump_cxt->scenario_info = (void *)scenario_info; isp_convert_scenario_info(scenario_info, &convert_scen_info); + printf("imx258_debug isp_alg_fw_start scenario app_id %d sensor %d x %d app_mode %d scene %d\n", + convert_scen_info.app_id, convert_scen_info.resolution.width, + convert_scen_info.resolution.height, convert_scen_info.app_mode, + convert_scen_info.scene_mode); ISP_LOGD("scenario info: app_id:%d, sensor size:%d, %d," " app_mode:%d, auto_scene:%d, has_face:%d, scene_mode:%d, zoom_flag:%f", convert_scen_info.app_id, convert_scen_info.resolution.width, convert_scen_info.resolution.height, @@ -13157,7 +13174,12 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ break; } pm_input.its_cts_flag = cxt->app_id; + printf("imx258_debug isp_alg_fw_start before ISP_PM_CMD_SET_MODE mode0 %d size0 %d x %d sets %d\n", + pm_input.mode[0], pm_input.img_w[0], pm_input.img_h[0], + pm_input.pm_sets_num); ret = camera_pm_ioctl(cxt->handle_pm, ISP_PM_CMD_SET_MODE, &pm_input, &pm_output); + printf("imx258_debug isp_alg_fw_start after ISP_PM_CMD_SET_MODE ret %ld scenario0 0x%llx scenario1 0x%llx\n", + ret, (unsigned long long)pm_output.scenario_id[0], + (unsigned long long)pm_output.scenario_id[1]); ispalg_set_manual_param_to_pm(cxt); ISP_RETURN_IF_FAIL(ret, ("fail to isp pm set mode")); @@ -13183,6 +13205,7 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ cxt->gtm_ltm_on, cxt->pinpon_flag, pm_input.its_cts_flag); ret = camera_pm_ioctl(cxt->handle_pm, ISP_PM_CMD_SET_SCERANIO_ID_LOCK, &pm_input, NULL); + printf("imx258_debug isp_alg_fw_start after SET_SCERANIO_ID_LOCK ret %ld\n", ret); if (cxt->work_mode) { ISP_LOGV("work_mode %d", cxt->work_mode); ret = ispalg_update_param_through_smart(isp_alg_handle, &(cxt->smart_info), cxt->pinpon_flag); @@ -13331,13 +13354,19 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ } } if (cxt->ops.lsc_ops.ioctrl) { + printf("imx258_debug isp_alg_fw_start skip ALSC_UPDATE_TUNNING_PARAM ptr %p size %d for bringup\n", + lsc_param.ptr, lsc_param.data_size); - ret = cxt->ops.lsc_ops.ioctrl(cxt->lsc_cxt.handle, ALSC_UPDATE_TUNNING_PARAM, (void *)&lsc_param, NULL); - ISP_TRACE_IF_FAIL(ret, ("fail to alsc tunningparam")); + ret = ISP_SUCCESS; } cxt->commn_cxt.param_index = ispalg_get_param_index(cxt->commn_cxt.input_size_trim, &in_ptr->size); + printf("imx258_debug isp_alg_fw_start skip ispalg_update_alg_param param_index %d for bringup\n", + cxt->commn_cxt.param_index); - ret = ispalg_update_alg_param(cxt); - ISP_RETURN_IF_FAIL(ret, ("fail to isp smart param calc")); + ret = ISP_SUCCESS; ISP_LOGI("pdaf_support = %d, pdaf_enable = %d, is_multi_mode = %d", @@ -13420,17 +13449,25 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ ret = isp_dev_access_ioctl(cxt->dev_access_handle, ISP_DEV_SET_EBD_CFG, 0, 0); ISP_RETURN_IF_FAIL(ret, ("fail to cfg embedded line")); } + printf("imx258_debug isp_alg_fw_start skip ispalg_update_alsc_result for bringup\n"); - ret = ispalg_update_alsc_result(cxt, (void *)&fwstart_info); - ISP_RETURN_IF_FAIL(ret, ("fail to update alsc result")); + ret = ISP_SUCCESS; if (cxt->ops.lsc_ops.ioctrl) { + printf("imx258_debug isp_alg_fw_start skip ALSC_CMD_SET_DEBUGMODE for bringup\n"); - ret = cxt->ops.lsc_ops.ioctrl(cxt->lsc_cxt.handle, ALSC_CMD_SET_DEBUGMODE, (void *)&in_ptr->dv_mode, NULL); - ISP_TRACE_IF_FAIL(ret, ("fail to alsc tunningparam")); + ret = ISP_SUCCESS; } + printf("imx258_debug isp_alg_fw_start before ISP_DEV_CFG_START\n"); ret = isp_dev_access_ioctl(cxt->dev_access_handle, ISP_DEV_CFG_START, NULL, NULL); + printf("imx258_debug isp_alg_fw_start after ISP_DEV_CFG_START ret %ld\n", ret); ISP_TRACE_IF_FAIL(ret, ("fail to do cfg start")); + printf("imx258_debug isp_alg_fw_start before ispalg_cfg_param\n"); ret = ispalg_cfg_param(cxt, PARAM_CFG_START); + printf("imx258_debug isp_alg_fw_start after ispalg_cfg_param ret %ld\n", ret); ISP_RETURN_IF_FAIL(ret, ("fail to do ispalg_cfg_param")); pmg_set_start_flag(cxt->pmg_handle, PARAM_CFG_START); @@ -13448,16 +13485,22 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ ISP_TRACE_IF_FAIL(ret, ("fail to do anti_flicker param update")); if (cxt->is_simulator == 0) { - ret = ispalg_ae_set_work_mode(cxt, cxt->commn_cxt.pm_scenario_id[0], 1, in_ptr); - ISP_RETURN_IF_FAIL(ret, ("fail to do ae cfg")); + printf("imx258_debug isp_alg_fw_start skip ispalg_ae_set_work_mode for bringup\n"); + cxt->ae_cxt.sw_bypass = 1; + cxt->ae_cxt.win_num.w = 32; + cxt->ae_cxt.win_num.h = 32; + ret = ISP_SUCCESS; } else { ISP_LOGD("bypass AE for simulator\n"); } if (cxt->ops.awb_ops.ioctrl) { diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/UT/OemUnitTest/OemUnitTest.cpp @@ -381,75 +381,42 @@ int OemUnitTest::takePicture() { - CMR_LOGI("E"); - int ret = CMR_CAMERA_SUCCESS; - std::unique_lock lck(mLock); - mCaptureMode = CAMERA_NORMAL_MODE; - - mCaptureWidth = 800; - mCaptureHeight = 600; - - if (SPRD_ERROR == mCameraState.capture_state) { - CMR_LOGE("takePicture in error status, deinit capture at first "); - } else if (SPRD_IDLE != mCameraState.capture_state) { - if (SPRD_WAITING_JPEG == getCaptureState()) { - if (!WaitForCaptureDone()) { - CMR_LOGE("take picture: wait timeout, direct return!"); - goto exit; - } - } else { - CMR_LOGE("take picture: action alread exist, direct return!"); - ret = CMR_CAMERA_FAIL; - goto exit; - } - } - - if (NULL == mCameraHandle || NULL == mOem || NULL == mOem->ops) { - CMR_LOGE("takePicture: oem is null or oem ops is null"); - ret = CMR_CAMERA_FAIL; - goto exit; - } - - mOem->ops->camera_fast_ctrl(mCameraHandle, CAMERA_FAST_MODE_FD, 0); - - if (!isZslMode()) { - if (isPreviewing()) { - CMR_LOGI("call stopPreview in takePicture"); - - if (stopPreviewInternal()) { - ret = CMR_CAMERA_FAIL; - CMR_LOGE(" fail to stop preview "); - goto exit; - } else { - CMR_LOGI("preview stop "); - } - } - - if (!isCameraInit()) { - CMR_LOGE("camera initialize error!, camera state = %d", - getCameraStateStr(getCameraState())); - ret = CMR_CAMERA_FAIL; - goto exit; - } - } - - if (isCapturing()) { - CMR_LOGI("Wait For Capture Done"); - WaitForCaptureDone(); - } - - CMR_LOGI("setCameraState(SPRD_INTERNAL_RAW_REQUESTED, STATE_CAPTURE);"); - setCameraState(SPRD_INTERNAL_RAW_REQUESTED, STATE_CAPTURE); - - setSnapshotParams(); - - if (mCameraHandle == NULL || mOem == NULL || mOem->ops == NULL || - CMR_CAMERA_SUCCESS != - mOem->ops->camera_take_picture(mCameraHandle, mCaptureMode)) { - setCameraState(SPRD_ERROR, STATE_CAPTURE); - CMR_LOGE("takePicture: fail to camera_take_picture."); - - ret = CMR_CAMERA_FAIL; - goto exit; - } - - CMR_LOGI("X"); -exit: - return ret; + int ret = CMR_CAMERA_SUCCESS; + + /* + * SBC bring-up path: the normal snapshot/JPEG pipeline still depends on + * phone-oriented capture tuning and fails before it can return a frame. + * Reuse the verified preview path so the "take" command captures fresh + * frames into /home/user/dump for inspection. + */ + CMR_LOGI("takePicture: capture preview dump"); + printf("OemUnitTest takePicture preview-dump mode\n"); + + if (NULL == mCameraHandle || NULL == mOem || NULL == mOem->ops) { + CMR_LOGE("takePicture: oem is null or oem ops is null"); + return CMR_CAMERA_FAIL; + } + + camera_dump_cnt_pre = 0; + dump_total_count = 5; + mCaptureMode = CAMERA_NORMAL_MODE; + mSprdZslEnabled = false; + + if (!isPreviewing()) { + ret = startPreview(); + if (ret) { + CMR_LOGE("takePicture: fail to start preview dump"); + return ret; + } + } + + usleep(1000 * 1000); + printf("OemUnitTest takePicture preview-dump saved %d frame(s)\n", + camera_dump_cnt_pre); + + return CMR_CAMERA_SUCCESS; } diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c @@ -13502,20 +13502,32 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ printf("imx258_debug isp_alg_fw_start after ispalg_cfg_param ret %ld\n", ret); ISP_RETURN_IF_FAIL(ret, ("fail to do ispalg_cfg_param")); + printf("imx258_debug isp_alg_fw_start before pmg_set_start_flag\n"); pmg_set_start_flag(cxt->pmg_handle, PARAM_CFG_START); + printf("imx258_debug isp_alg_fw_start after pmg_set_start_flag\n"); + printf("imx258_debug isp_alg_fw_start before afl handle config handle %p version %d\n", + cxt->afl_cxt.handle, cxt->afl_cxt.version); if (cxt->afl_cxt.handle) { ((struct isp_anti_flicker_cfg *)cxt->afl_cxt.handle)->width = cxt->commn_cxt.prv_size.w; ((struct isp_anti_flicker_cfg *)cxt->afl_cxt.handle)->height = cxt->commn_cxt.prv_size.h; } + printf("imx258_debug isp_alg_fw_start after afl handle config\n"); cxt->afl_cxt.hw_bypass = 1; + cxt->afl_cxt.sw_bypass = 1; + if (cxt->afl_cxt.version && !cxt->afl_cxt.sw_bypass) { if (cxt->ops.afl_ops.config_new) { printf("imx258_debug isp_alg_fw_start before afl config_new\n"); ret = cxt->ops.afl_ops.config_new(cxt->afl_cxt.handle); printf("imx258_debug isp_alg_fw_start after afl config_new ret %ld\n", ret); } + } else { + printf("imx258_debug isp_alg_fw_start skip afl config_new version %d sw_bypass %d\n", + cxt->afl_cxt.version, cxt->afl_cxt.sw_bypass); } + printf("imx258_debug isp_alg_fw_start before AFL ISP_TRACE ret %ld\n", ret); ISP_TRACE_IF_FAIL(ret, ("fail to do anti_flicker param update")); + printf("imx258_debug isp_alg_fw_start after AFL ISP_TRACE\n"); if (cxt->is_simulator == 0) { diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c @@ -4772,14 +4772,22 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) void *ptr; cmr_u32 update_flag = 0; printf("imx258_debug ispalg_cfg_param enter cfg_type %u\n", cfg_type); - ISP_LOGD("E"); + /* Avoid ISP_LOGD here while tracing heap corruption; log macro may malloc. */ + printf("imx258_debug ispalg_cfg_param stream_on %d\n", cxt->stream_on); if (cxt->stream_on == 0) return 0; @@ -4782,11 +4790,16 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) if (cfg_type == PARAM_CFG_START) { + printf("imx258_debug ispalg_cfg_param before ispalg_get_gtm_enable\n"); ispalg_get_gtm_enable((cmr_handle) cxt); + printf("imx258_debug ispalg_cfg_param after ispalg_get_gtm_enable\n"); } + printf("imx258_debug ispalg_cfg_param before pm_getting_lock\n"); pthread_mutex_lock(&cxt->pm_getting_lock); + printf("imx258_debug ispalg_cfg_param after pm_getting_lock\n"); memset((void *)&cfg, 0x00, sizeof(cfg)); diff -ruN a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c --- a/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c +++ b/source_sync_rls_25c/source/unisoc/multimedia/camera/libcamera/pss/isp2.7/middleware/isp_alg_fw.c @@ -4771,6 +4771,7 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) cmr_u32 update_flag = 0; + int imx258_cfg_debug = (cfg_type == PARAM_CFG_START); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param enter cfg_type %u\n", cfg_type); ISP_LOGD("E"); if (cxt->stream_on == 0) return 0; @@ -4792,7 +4793,11 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) ispalg_ai_pro_param_compatible((cmr_handle) cxt); #endif cmd = ispalg_get_param_type(cfg_type); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param before camera_pm_ioctl cmd %d pinpon %u\n", + cmd, cxt->pinpon_flag); ret = camera_pm_ioctl(cxt->handle_pm, cmd, &cxt->pinpon_flag, &output); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param after camera_pm_ioctl ret %ld prv_num %u cap_num %u\n", + ret, output.prv_param_num, output.cap_param_num); ISP_RETURN_IF_FAIL(ret, ("fail to get isp block settings")); /* lock pm to avoid parameter is updated by algo while driver reading */ @@ -4800,10 +4805,16 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) ispalg_get_param_by_cfg_type(cxt, &start, cfg_type, >m_ltm_on, &work_mode, &scene_id); update_flag = ((output.prv_param_num == 0) ? 0 : 1); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param cfg start %u scene %u work_mode %u gtm_ltm_on %u update_flag %u\n", + start, scene_id, work_mode, gtm_ltm_on, update_flag); if (!flag_start_end) { flag_start_end = 1; + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param before pmg_cfg start scene %u update %u\n", + scene_id, update_flag); pmg_cfg_param_start_end(cxt->pmg_handle, 0, scene_id, update_flag); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param after pmg_cfg start\n"); } ISP_LOGV("update number:%d, gtm: %d %d %d\n", output.prv_param_num, @@ -4834,6 +4845,8 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) param_data = output.prv_param_data; for (i = 0; i < output.prv_param_num; i++) { + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param prv block index %u id 0x%04x ptr %p size %u\n", + i, param_data->id, param_data->data_ptr, param_data->data_size); #if __DISABLE_OTHER_ALG_ if (cxt->gtm_ltm_all_on == 1) { @@ -4903,6 +4916,8 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) #endif ISP_LOGV("cfg block 0x%04x for scene %d, frame_id:%d\n", param_data->id, sub_block_info.scene_id, cxt->frame_id_sof); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param before isp_dev_cfg_block index %u id 0x%04x scene %u\n", + i, param_data->id, sub_block_info.scene_id); #if __DISABLE_NOUSE_CODE__ time_t t_cur; @@ -4915,6 +4930,8 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) cxt->dump_cxt->cur_pre_time = ptm; #endif isp_dev_cfg_block(cxt->dev_access_handle, &sub_block_info, param_data->id); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param after isp_dev_cfg_block index %u id 0x%04x\n", + i, param_data->id); param_data++; } @@ -4956,6 +4973,7 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) struct isp_dev_hist2_info hist2_info; struct isp_dev_hist_info hist_info; + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param before hist cfg\n"); memset(&hist2_info, 0, sizeof(struct isp_dev_hist2_info)); hist2_info.bypass = 0; @@ -4965,6 +4983,7 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) sub_block_info.block_info = &hist2_info; sub_block_info.scene_id = PM_SCENE_PRE; ret = isp_dev_cfg_block(cxt->dev_access_handle, &sub_block_info, ISP_BLK_HIST2); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param after HIST2 ret %ld\n", ret); memset(&hist_info, 0, sizeof(struct isp_dev_hist_info)); @@ -4974,11 +4993,16 @@ cmr_s32 ispalg_cfg_param(cmr_handle isp_alg_handle, cmr_u32 cfg_type) sub_block_info.block_info = &hist_info; sub_block_info.scene_id = PM_SCENE_PRE; ret = isp_dev_cfg_block(cxt->dev_access_handle, &sub_block_info, ISP_BLK_HIST); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param after HIST ret %ld\n", ret); } - if (flag_start_end) + if (flag_start_end) { + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param before pmg_cfg end scene %u update %u\n", + scene_id, update_flag); ret = pmg_cfg_param_start_end(cxt->pmg_handle, 1, scene_id, update_flag); + if (imx258_cfg_debug) + printf("imx258_debug ispalg_cfg_param after pmg_cfg end ret %ld\n", ret); + } // prev config end if ((work_mode == 0) && cxt->zsl_flag && cxt->ai_sfnr_flag && (cmd == ISP_PM_CMD_GET_ISP_ALL_SETTING)) { + cxt->awb_cxt.sw_bypass = 1; + printf("imx258_debug isp_alg_fw_start skip AWB start ioctrls for bringup\n"); +#if 0 + printf("imx258_debug isp_alg_fw_start before AWB work mode\n"); ret = cxt->ops.awb_ops.ioctrl(cxt->awb_cxt.handle, AWB_CTRL_CMD_SET_WORK_MODE, &in_ptr->work_mode, NULL); + printf("imx258_debug isp_alg_fw_start after AWB work mode ret %ld\n", ret); ISP_RETURN_IF_FAIL(ret, ("fail to set_awb_work_mode")); + printf("imx258_debug isp_alg_fw_start before AWB AE_STAT_WIN_NUM %u x %u\n", + cxt->ae_cxt.win_num.w, cxt->ae_cxt.win_num.h); ret = cxt->ops.awb_ops.ioctrl(cxt->awb_cxt.handle, AWB_CTRL_CMD_SET_AE_STAT_WIN_NUM, + &cxt->ae_cxt.win_num, NULL); + printf("imx258_debug isp_alg_fw_start after AWB AE_STAT_WIN_NUM ret %ld\n", ret); + ISP_RETURN_IF_FAIL(ret, ("fail to set_awb_aem_stat_win")); + + printf("imx258_debug isp_alg_fw_start before AWB GET_PIX_CNT %u x %u\n", + cxt->commn_cxt.prv_size.w, cxt->commn_cxt.prv_size.h); + ret = cxt->ops.awb_ops.ioctrl(cxt->awb_cxt.handle, + AWB_CTRL_CMD_GET_PIX_CNT, &cxt->commn_cxt.prv_size, NULL); + printf("imx258_debug isp_alg_fw_start after AWB GET_PIX_CNT ret %ld\n", ret); + ISP_RETURN_IF_FAIL(ret, ("fail to get_awb_pix_cnt")); + + printf("imx258_debug isp_alg_fw_start before AWB GET_FLASH_AWB_ENABLE\n"); + ret = cxt->ops.awb_ops.ioctrl(cxt->awb_cxt.handle, + AWB_CTRL_CMD_GET_FLASH_AWB_ENABLE, NULL, &flash_awb_en); + printf("imx258_debug isp_alg_fw_start after AWB GET_FLASH_AWB_ENABLE ret %ld enable %u\n", + ret, flash_awb_en); + ISP_TRACE_IF_FAIL(ret, ("fail to get flash awb enable")); + printf("imx258_debug isp_alg_fw_start skip AWB UPDATE_TUNING_PARAM ptr %p size %u for bringup\n", + awb_param.ptr, awb_param.data_size); + ret = ISP_SUCCESS; +#endif @@ -13612,8 +13653,11 @@ cmr_int isp_alg_fw_start(cmr_handle isp_alg_handle, struct isp_video_start * in_ } /* malloc statis/lsc and other buffers and mapping buffers to dev. */ + printf("imx258_debug isp_alg_fw_start before ispalg_calc_stats_size\n"); ispalg_calc_stats_size(cxt); + printf("imx258_debug isp_alg_fw_start before isp_dev_prepare_buf\n"); ret = isp_dev_prepare_buf(cxt->dev_access_handle, &cxt->stats_mem_info); + printf("imx258_debug isp_alg_fw_start after isp_dev_prepare_buf ret %ld\n", ret); ISP_RETURN_IF_FAIL(ret, ("fail to prepare buf")); if (cxt->ops.awb_ops.ioctrl) {