diff --git a/acpi/ipu7/_cam_common_d457.asl b/acpi/ipu7/_cam_common_d457.asl index 74f93cac..3df5c07a 100644 --- a/acpi/ipu7/_cam_common_d457.asl +++ b/acpi/ipu7/_cam_common_d457.asl @@ -65,8 +65,6 @@ Name (_DSD, Package () // _DSD: Device-Specific Data Package () { "mipi-img-clock-frequency", 96000000 }, // 96 MHz /* - * Sensor specific GPIOs, reset-gpios will be used by d4xx.c - * when devm_gpiod_get_optional is being called with "reset" consumer. * For details, please refer to ACPI GPIO binding documentation * https://www.kernel.org/doc/html/latest/firmware-guide/acpi/gpio-properties.html * @@ -76,7 +74,14 @@ Name (_DSD, Package () // _DSD: Device-Specific Data * 1 is active low for reset * */ - Package () { "reset-gpios", Package () { DESCH_SER_GPIOREF, 0, 0, 1 } }, +#ifdef DESCH_SER_FSIN_GPIO + Package () { "fsin-gpios", Package () { DESCH_SER_GPIOREF, 0, 0, 1 } }, +#endif +#ifdef EXTERNAL_FRAME_SYNC + Package () { "gmsl-frame-sync-enable", EXTERNAL_FRAME_SYNC }, +#else + Package () { "gmsl-frame-sync-enable", 0 }, // Disabled by default +#endif }, ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), // Hierarchical Data Extension Package () diff --git a/acpi/ipu7/_cam_common_isx031.asl b/acpi/ipu7/_cam_common_isx031.asl index d3872698..2a8b39e2 100644 --- a/acpi/ipu7/_cam_common_isx031.asl +++ b/acpi/ipu7/_cam_common_isx031.asl @@ -76,7 +76,9 @@ Name (_DSD, Package () // _DSD: Device-Specific Data * 1 is active low for reset * */ +#ifdef DESCH_SER_RESET_GPIO Package () { "reset-gpios", Package () { DESCH_SER_GPIOREF, 0, 0, 1 } }, +#endif /* * FSIN GPIOs, fsin-gpios will be used by isx031.c * when devm_gpiod_get_optional is being called with "fsin" consumer. @@ -87,7 +89,7 @@ Name (_DSD, Package () // _DSD: Device-Specific Data * 1 is active low for FSIN * */ -#ifdef EXTERNAL_FRAME_SYNC +#ifdef DESCH_SER_FSIN_GPIO Package () { "fsin-gpios", Package () { DESCH_SER_GPIOREF, 0, 1, 1 } }, #endif /* diff --git a/acpi/ipu7/_des_common_max96724.asl b/acpi/ipu7/_des_common_max96724.asl index 142b0c23..e2daec2f 100644 --- a/acpi/ipu7/_des_common_max96724.asl +++ b/acpi/ipu7/_des_common_max96724.asl @@ -19,9 +19,8 @@ */ #ifndef LINK_FREQ -#define LINK_FREQ_VAL 1000000000 -#else -#define LINK_FREQ_VAL LINK_FREQ +#define LINK_FREQ 1000000000 +#define LINK_FREQ_DEFAULTED #endif Name (_UID, Zero) // _UID: Unique ID @@ -200,7 +199,7 @@ Name (PRT4, Package() #else Package () { "mipi-img-data-lanes", Package() { 1, 2 } }, // 2 lanes for CPHY/DPHY on Intel MIPI CRD #endif - Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ_VAL } }, // 1 GHz to be used by Intel IPU driver as link frequency + Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ } }, // 1 GHz to be used by Intel IPU driver as link frequency }, }) @@ -215,7 +214,7 @@ Name (PRT5, Package() #else Package () { "mipi-img-data-lanes", Package() { 1, 2 } }, // 2 lanes for CPHY/DPHY on Intel MIPI CRD #endif - Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ_VAL } }, // 1 GHz to be used by Intel IPU driver as link frequency + Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ } }, // 1 GHz to be used by Intel IPU driver as link frequency }, }) @@ -230,7 +229,7 @@ Name (PRT6, Package() #else Package () { "mipi-img-data-lanes", Package() { 1, 2 } }, // 2 lanes for CPHY/DPHY on Intel MIPI CRD #endif - Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ_VAL } }, // 1 GHz to be used by Intel IPU driver as link frequency + Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ } }, // 1 GHz to be used by Intel IPU driver as link frequency }, }) @@ -245,8 +244,11 @@ Name (PRT7, Package() #else Package () { "mipi-img-data-lanes", Package() { 1, 2 } }, // 2 lanes for CPHY/DPHY on Intel MIPI CRD #endif - Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ_VAL } }, // 1 GHz to be used by Intel IPU driver as link frequency + Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ } }, // 1 GHz to be used by Intel IPU driver as link frequency }, }) -#undef LINK_FREQ_VAL \ No newline at end of file +#ifdef LINK_FREQ_DEFAULTED +#undef LINK_FREQ +#undef LINK_FREQ_DEFAULTED +#endif \ No newline at end of file diff --git a/acpi/ipu7/_ser_common_max9295.asl b/acpi/ipu7/_ser_common_max9295.asl index fadef2f6..f5a22143 100644 --- a/acpi/ipu7/_ser_common_max9295.asl +++ b/acpi/ipu7/_ser_common_max9295.asl @@ -10,11 +10,30 @@ * DESCH_LINK_NUM - DES channel number (e.g. 0 for CH00, 1 for CH01), used in CSI2Bus * DESCH_SER_I2C - SER I2C slave address (e.g. 0x40, 0x62), used in I2cSerialBusV2 * CAM_ALIAS - Camera alias I2C address used in i2c-alias-pool in _DSD - * DESCH_SER_EXTRA_GPIO_PIN - (Optional) SER Extra GPIO pin number, used in GpioIo + * DESCH_SER_RESET_GPIO - (Optional) SER Reset GPIO pin number, used in GpioIo + * DESCH_SER_FSIN_GPIO - (Optional) SER Extra GPIO pin number, used in GpioIo * DESCH_SER_FSYNC_RX_ID - (Optional) GMSL GPIO ID the DES sends frame sync as, used in MFP node * DESCH_SER_X/Y/Z/U_VC - (Optional) SER VC filter for Pipe X/Y/Z/U, specifically for MAX96717 driver */ +#ifndef DESCH_SER_RESET_GPIO +#ifndef DESCH_SER_FSIN_GPIO + +#define DESCH_SER_RESET_GPIO 0 + +#endif +#endif + +#ifdef DESCH_SER_RESET_GPIO +#ifdef DESCH_SER_FSIN_GPIO + +#if DESCH_SER_RESET_GPIO == DESCH_SER_FSIN_GPIO +#error "DESCH_SER_RESET_GPIO and DESCH_SER_FSIN_GPIO cannot be the same GPIO pin number" +#endif + +#endif +#endif + Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) // bit 0: device is present, bit 1: device is enabled, bit 2: device is shown in UI, bit 3: device is functional @@ -72,9 +91,11 @@ Name(_CRS, ResourceTemplate () // _CRS: Current Resource Settings DESCH_SER_PATH, // ResourceSourceIndex (Path to SER GPIO controller, e.g. "\\_SB.PC00.DESx.CHxx.SERx" based on which Link) 0) // ResourceUsage (Must be 0) { - 0, // Pin 0 (e.g. MFP0 on MAX9295) -#ifdef DESCH_SER_EXTRA_GPIO_PIN - DESCH_SER_EXTRA_GPIO_PIN, // Extra pin (e.g. MFP7 on MAX9295) +#ifdef DESCH_SER_RESET_GPIO + DESCH_SER_RESET_GPIO, // Pin 0 (e.g. MFP0 on MAX9295) +#endif +#ifdef DESCH_SER_FSIN_GPIO + DESCH_SER_FSIN_GPIO, // Extra pin (e.g. MFP7 on MAX9295) #endif } }) @@ -112,10 +133,19 @@ Name (_DSD, Package () // _DSD: Device-Specific Data Package () { "Pipe-Y", "PIPY" }, // Pipe Y Package () { "Pipe-Z", "PIPZ" }, // Pipe Z Package () { "Pipe-U", "PIPU" }, // Pipe U +#ifdef EXTERNAL_FRAME_SYNC +#ifdef DESCH_SER_FSYNC_RX_ID +#ifdef DESCH_SER_FSIN_GPIO Package () { "fsync", "MFP" }, // fsync pin configuration +#endif +#endif +#endif } }) +#ifdef EXTERNAL_FRAME_SYNC +#ifdef DESCH_SER_FSYNC_RX_ID +#ifdef DESCH_SER_FSIN_GPIO Name (MFP, Package() { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties @@ -124,11 +154,14 @@ Name (MFP, Package() #ifdef DESCH_SER_FSYNC_RX_ID Package () { "maxim,rx-id", DESCH_SER_FSYNC_RX_ID }, // GMSL GPIO ID sent by the DES #endif - #ifdef DESCH_SER_EXTRA_GPIO_PIN - Package () { "gmsl-frame-sync-gpio-pin", DESCH_SER_EXTRA_GPIO_PIN }, + #ifdef DESCH_SER_FSIN_GPIO + Package () { "gmsl-frame-sync-gpio-pin", DESCH_SER_FSIN_GPIO }, #endif }, }) +#endif +#endif +#endif Name (PRT0, Package() { diff --git a/acpi/ipu7/max96724_sensing_isx031_fs.asl b/acpi/ipu7/max96724_sensing_isx031_fs.asl index fde0edf4..99898c3d 100644 --- a/acpi/ipu7/max96724_sensing_isx031_fs.asl +++ b/acpi/ipu7/max96724_sensing_isx031_fs.asl @@ -29,7 +29,9 @@ * DESCH_SER_PATH - SERx ACPI path string (e.g. "\\_SB.PC00.DES0.CH00.SER0") * DESCH_SER_REF - SERx ACPI namespace reference (e.g. \_SB.PC00.DES0.CH00.SER0) * DESCH_SER_GPIOREF - SERx GPIO controller reference (e.g. ^^SER0) - * DESCH_SER_EXTRA_GPIO_PIN - Extra SER GPIO pin number (Sensing-specific, e.g. 7) + * DESCH_SER_RESET_GPIO - (Optional) SER RESET GPIO pin number (e.g. 0 for MFP0 of Serializer) + * DESCH_SER_FSIN_GPIO - (Optional) SER FSIN GPIO pin number (e.g. 7 for MFP7 of Serializer) + * DESCH_SER_FSYNC_RX_ID - (Optional) SER FSYNC RX pin ID (e.g. 7 to receive signal from MFP7 of Deserializer) * EXTERNAL_FRAME_SYNC - Camera external frame sync FSIN GPIO enablement * CAM_ALIAS - Camera alias I2C address used in i2c-alias-pool of the SER * CAM_LANES - Number of MIPI data lanes for the camera (e.g. 2, 4) @@ -71,7 +73,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260821) #define DESCH_SER_GPIOREF ^^SER0 #define CAM_ALIAS 0x54 #define CAM_LANES 4 - #define DESCH_SER_EXTRA_GPIO_PIN 7 + #define DESCH_SER_RESET_GPIO 0 + #define DESCH_SER_FSIN_GPIO 7 #define DESCH_SER_FSYNC_RX_ID 7 #include "_des_ch_common_isx031.asl" @@ -84,8 +87,15 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260821) #undef DESCH_LINK_NUM #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_RESET_GPIO + #undef DESCH_SER_RESET_GPIO +#endif +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO +#endif +#ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID +#endif #undef EXTERNAL_FRAME_SYNC #undef CAM_ALIAS #undef CAM_LANES @@ -100,7 +110,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260821) #define DESCH_LINK_NUM 1 #define DESCH_SER_I2C 0x40 #define DESCH_SER_GPIOREF ^^SER1 - #define DESCH_SER_EXTRA_GPIO_PIN 7 + #define DESCH_SER_RESET_GPIO 0 + #define DESCH_SER_FSIN_GPIO 7 #define DESCH_SER_FSYNC_RX_ID 7 #define EXTERNAL_FRAME_SYNC 1 #define CAM_ALIAS 0x55 @@ -115,8 +126,15 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260821) #undef DESCH_LINK_NUM #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_RESET_GPIO + #undef DESCH_SER_RESET_GPIO +#endif +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO +#endif +#ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID +#endif #undef EXTERNAL_FRAME_SYNC #undef CAM_ALIAS #undef CAM_LANES @@ -128,7 +146,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260821) #define DESCH_CH_PATH "\\_SB.PC00.DES0.CH03" #define DESCH_SER_PATH "\\_SB.PC00.DES0.CH03.SER3" #define DESCH_SER_REF \_SB.PC00.DES0.CH03.SER3 - #define DESCH_SER_EXTRA_GPIO_PIN 8 + #define DESCH_SER_FSIN_GPIO 8 + #define DESCH_SER_RESET_GPIO 0 #define DESCH_SER_FSYNC_RX_ID 7 #define EXTERNAL_FRAME_SYNC 1 #define DESCH_LINK_NUM 3 @@ -146,8 +165,15 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260821) #undef DESCH_LINK_NUM #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_RESET_GPIO + #undef DESCH_SER_RESET_GPIO +#endif +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO +#endif +#ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID +#endif #undef EXTERNAL_FRAME_SYNC #undef CAM_ALIAS #undef CAM_LANES diff --git a/acpi/ipu7/robinson_bay/3_d3_isx031_1_d457_frame_sync.asl b/acpi/ipu7/robinson_bay/3_d3_isx031_1_d457_frame_sync.asl index 17d82898..feb74589 100644 --- a/acpi/ipu7/robinson_bay/3_d3_isx031_1_d457_frame_sync.asl +++ b/acpi/ipu7/robinson_bay/3_d3_isx031_1_d457_frame_sync.asl @@ -35,8 +35,9 @@ * DESCH_SER_PATH - SERx ACPI path string (e.g. "\\_SB.PC00.DES0.CH00.SER0") * DESCH_SER_REF - SERx ACPI namespace reference (e.g. \_SB.PC00.DES0.CH00.SER0) * DESCH_SER_GPIOREF - SERx GPIO controller reference (e.g. ^^SER0) - * DESCH_SER_EXTRA_GPIO_PIN - (Optional) Extra SER GPIO pin number (e.g. 7) - * DESCH_SER_FSYNC_RX_ID - (Optional) SER FSYNC RX pin ID (e.g. 7) + * DESCH_SER_RESET_GPIO - (Optional) SER RESET GPIO pin number (e.g. 0 for MFP0 of Serializer) + * DESCH_SER_FSIN_GPIO - (Optional) SER FSIN GPIO pin number (e.g. 7 for MFP7 of Serializer) + * DESCH_SER_FSYNC_RX_ID - (Optional) SER FSYNC RX pin ID (e.g. 7 to receive signal from MFP7 of Deserializer) * DESCH_SER_X/Y/Z/U_VC - (Optional) VC mapping/filter for D457 streams (Package of VC indices) * EXTERNAL_FRAME_SYNC - Camera external frame sync FSIN GPIO enablement * CAM_ALIAS - Camera alias I2C address used in i2c-alias-pool of the SER @@ -65,7 +66,7 @@ * DESCH_SER_REF, DESCH_SER_GPIOREF are all updated if connection changed. * * 3x D3 ISX031 on MIPI-0 (90, 180, 270), --> DES0, channel 1,2,3 : frame sync enabled - * 1x RealSense on MIPI-2 (90) --> DES1, channel 1 : frame sync disabled + * 1x RealSense on MIPI-2 (90) --> DES1, channel 1 : frame sync enabled * */ @@ -104,7 +105,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #define DESCH_LINK_NUM 1 #define DESCH_SER_I2C 0x40 #define DESCH_SER_GPIOREF ^^SER1 - #define DESCH_SER_EXTRA_GPIO_PIN 8 + #define DESCH_SER_RESET_GPIO 0 + #define DESCH_SER_FSIN_GPIO 8 #define DESCH_SER_FSYNC_RX_ID 7 #define CAM_ALIAS 0x55 #define CAM_LANES 4 @@ -118,8 +120,11 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #undef DESCH_LINK_NUM #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF -#ifdef DESCH_SER_EXTRA_GPIO_PIN - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_RESET_GPIO + #undef DESCH_SER_RESET_GPIO +#endif +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO #endif #ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID @@ -137,7 +142,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #define DESCH_LINK_NUM 2 #define DESCH_SER_I2C 0x40 #define DESCH_SER_GPIOREF ^^SER2 - #define DESCH_SER_EXTRA_GPIO_PIN 8 + #define DESCH_SER_RESET_GPIO 0 + #define DESCH_SER_FSIN_GPIO 8 #define DESCH_SER_FSYNC_RX_ID 7 #define CAM_ALIAS 0x56 #define CAM_LANES 4 @@ -151,8 +157,11 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #undef DESCH_LINK_NUM #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF -#ifdef DESCH_SER_EXTRA_GPIO_PIN - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_RESET_GPIO + #undef DESCH_SER_RESET_GPIO +#endif +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO #endif #ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID @@ -170,7 +179,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #define DESCH_LINK_NUM 3 #define DESCH_SER_I2C 0x40 #define DESCH_SER_GPIOREF ^^SER3 - #define DESCH_SER_EXTRA_GPIO_PIN 8 + #define DESCH_SER_RESET_GPIO 0 + #define DESCH_SER_FSIN_GPIO 8 #define DESCH_SER_FSYNC_RX_ID 7 #define CAM_ALIAS 0x57 #define CAM_LANES 4 @@ -184,8 +194,11 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #undef DESCH_LINK_NUM #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF -#ifdef DESCH_SER_EXTRA_GPIO_PIN - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_RESET_GPIO + #undef DESCH_SER_RESET_GPIO +#endif +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO #endif #ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID @@ -212,7 +225,7 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) Device (DES1) { -// #define EXTERNAL_FRAME_SYNC 1 + #define EXTERNAL_FRAME_SYNC 1 // DES-level defines for DES1 #define DES_PHY_TYPE 0 @@ -225,7 +238,7 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #define DES_REF \_SB.PC00.DES1 #define DES_PIPE_STR_AUTOSELECT 0 #define I2C_SPEED 100000 -// #define DES_FSIN_GPIO_PIN 7 + #define DES_FSIN_GPIO_PIN 7 #include "_des_common_max96724.asl" // Channel 1 (D457 MFP0 fsync) @@ -242,7 +255,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #define DESCH_SER_Y_VC Package () { 1 } #define DESCH_SER_Z_VC Package () { 2 } #define DESCH_SER_U_VC Package () { 3 } -// #define DESCH_SER_FSYNC_RX_ID 0 + #define DESCH_SER_FSIN_GPIO 0 + #define DESCH_SER_FSYNC_RX_ID 7 #define CAM_ALIAS 0x55 #define CAM_LANES 2 #include "_des_ch_common_d457.asl" @@ -261,8 +275,8 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_ROB", 0x20260827) #undef DESCH_SER_Y_VC #undef DESCH_SER_Z_VC #undef DESCH_SER_U_VC -#ifdef DESCH_SER_EXTRA_GPIO_PIN - #undef DESCH_SER_EXTRA_GPIO_PIN +#ifdef DESCH_SER_FSIN_GPIO + #undef DESCH_SER_FSIN_GPIO #endif #ifdef DESCH_SER_FSYNC_RX_ID #undef DESCH_SER_FSYNC_RX_ID diff --git a/acpi/ipu8/max96724_d3_ar0234.asl b/acpi/ipu8/max96724_d3_ar0234.asl index ac465904..7b84de93 100644 --- a/acpi/ipu8/max96724_d3_ar0234.asl +++ b/acpi/ipu8/max96724_d3_ar0234.asl @@ -3,8 +3,8 @@ * Copyright (c) 2026 Intel Corporation. * * SSDT overlay: D3 AR0234 GMSL camera configuration on PTL platform - * One MAX96724 deserializers (DES0) with CPHY connection to PTL platform, - * each carrying two D3 AR0234 cameras over GMSL Links 0..1, fronted by MAX9295A serializers. + * Two MAX96724 deserializers (DES0, DES1) with CPHY connection to PTL platform, + * each carrying four D3 AR0234 cameras over GMSL Links 0..3, fronted by MAX9295A serializers. * * DES-level defines (set per DESx, undef'd at the end of each Device): * DES_PHY_TYPE - DES PHY type (0 for CPHY, 1 for DPHY) @@ -56,57 +56,236 @@ DefinitionBlock ("", "SSDT", 2, "", "IMG_IPU", 0x20260820) #define DES_REF \_SB.PC00.DES0 #include "_des_common_max96724.asl" - // Channel-level defines for Channel 0 (CH00) + // Channel-level defines for Channel 0 + #define DESCH_LINK_NUM 0 #define DESCH_CH CH00 #define DESCH_SER SER0 #define DESCH_CAM CAM0 + #define DESCH_SER_I2C 0x40 #define DESCH_CH_PATH "\\_SB.PC00.DES0.CH00" #define DESCH_SER_PATH "\\_SB.PC00.DES0.CH00.SER0" #define DESCH_SER_REF \_SB.PC00.DES0.CH00.SER0 - #define DESCH_LINK_NUM 0 - #define DESCH_SER_I2C 0x40 #define DESCH_SER_GPIOREF ^^SER0 #define CAM_ALIAS 0x54 #define CAM_LANES 2 #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM #undef DESCH_CH #undef DESCH_SER #undef DESCH_CAM + #undef DESCH_SER_I2C #undef DESCH_CH_PATH #undef DESCH_SER_PATH #undef DESCH_SER_REF - #undef DESCH_LINK_NUM - #undef DESCH_SER_I2C #undef DESCH_SER_GPIOREF #undef CAM_ALIAS #undef CAM_LANES - // Channel 1 + // Channel-level defines for Channel 1 + #define DESCH_LINK_NUM 1 #define DESCH_CH CH01 #define DESCH_SER SER1 #define DESCH_CAM CAM1 + #define DESCH_SER_I2C 0x40 #define DESCH_CH_PATH "\\_SB.PC00.DES0.CH01" #define DESCH_SER_PATH "\\_SB.PC00.DES0.CH01.SER1" #define DESCH_SER_REF \_SB.PC00.DES0.CH01.SER1 + #define DESCH_SER_GPIOREF ^^SER1 + #define CAM_ALIAS 0x55 + #define CAM_LANES 2 + #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM + #undef DESCH_CH + #undef DESCH_SER + #undef DESCH_CAM + #undef DESCH_SER_I2C + #undef DESCH_CH_PATH + #undef DESCH_SER_PATH + #undef DESCH_SER_REF + #undef DESCH_SER_GPIOREF + #undef CAM_ALIAS + #undef CAM_LANES + + // Channel-level defines for Channel 2 + #define DESCH_LINK_NUM 2 + #define DESCH_CH CH02 + #define DESCH_SER SER2 + #define DESCH_CAM CAM2 + #define DESCH_SER_I2C 0x40 + #define DESCH_CH_PATH "\\_SB.PC00.DES0.CH02" + #define DESCH_SER_PATH "\\_SB.PC00.DES0.CH02.SER2" + #define DESCH_SER_REF \_SB.PC00.DES0.CH02.SER2 + #define DESCH_SER_GPIOREF ^^SER2 + #define CAM_ALIAS 0x56 + #define CAM_LANES 2 + #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM + #undef DESCH_CH + #undef DESCH_SER + #undef DESCH_CAM + #undef DESCH_SER_I2C + #undef DESCH_CH_PATH + #undef DESCH_SER_PATH + #undef DESCH_SER_REF + #undef DESCH_SER_GPIOREF + #undef CAM_ALIAS + #undef CAM_LANES + + // Channel-level defines for Channel 3 + #define DESCH_LINK_NUM 3 + #define DESCH_CH CH03 + #define DESCH_SER SER3 + #define DESCH_CAM CAM3 + #define DESCH_SER_I2C 0x40 + #define DESCH_CH_PATH "\\_SB.PC00.DES0.CH03" + #define DESCH_SER_PATH "\\_SB.PC00.DES0.CH03.SER3" + #define DESCH_SER_REF \_SB.PC00.DES0.CH03.SER3 + #define DESCH_SER_GPIOREF ^^SER3 + #define CAM_ALIAS 0x57 + #define CAM_LANES 2 + #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM + #undef DESCH_CH + #undef DESCH_SER + #undef DESCH_CAM + #undef DESCH_SER_I2C + #undef DESCH_CH_PATH + #undef DESCH_SER_PATH + #undef DESCH_SER_REF + #undef DESCH_SER_GPIOREF + #undef CAM_ALIAS + #undef CAM_LANES + + // Clean up DES0-level defines + #undef DES_PHY_TYPE + #undef DES_I2C_ADDR + #undef DES_LANES + #undef DES_INTERNAL_PHY + #undef DES_TO_MIPI_PORT + #undef DES_I2C_BUS + #undef DES_PATH + #undef DES_REF + } + + Device (DES1) + { + /* + * For detailed explanation of each define, + * please refer to the comment block at the top of this file. + */ + + // DES-level defines for DES1. + #define DES_PHY_TYPE 0 + #define DES_I2C_ADDR 0x0027 + #define DES_LANES 2 + #define DES_INTERNAL_PHY 4 + #define DES_TO_MIPI_PORT 2 + #define DES_I2C_BUS "\\_SB.PC00.I2C0" + #define DES_PATH "\\_SB.PC00.DES1" + #define DES_REF \_SB.PC00.DES1 + #include "_des_common_max96724.asl" + + // Channel-level defines for Channel 0 + #define DESCH_LINK_NUM 0 + #define DESCH_CH CH00 + #define DESCH_SER SER0 + #define DESCH_CAM CAM0 + #define DESCH_SER_I2C 0x40 + #define DESCH_CH_PATH "\\_SB.PC00.DES1.CH00" + #define DESCH_SER_PATH "\\_SB.PC00.DES1.CH00.SER0" + #define DESCH_SER_REF \_SB.PC00.DES1.CH00.SER0 + #define DESCH_SER_GPIOREF ^^SER0 + #define CAM_ALIAS 0x54 + #define CAM_LANES 2 + #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM + #undef DESCH_CH + #undef DESCH_SER + #undef DESCH_CAM + #undef DESCH_SER_I2C + #undef DESCH_CH_PATH + #undef DESCH_SER_PATH + #undef DESCH_SER_REF + #undef DESCH_SER_GPIOREF + #undef CAM_ALIAS + #undef CAM_LANES + + // Channel-level defines for Channel 1 #define DESCH_LINK_NUM 1 + #define DESCH_CH CH01 + #define DESCH_SER SER1 + #define DESCH_CAM CAM1 #define DESCH_SER_I2C 0x40 + #define DESCH_CH_PATH "\\_SB.PC00.DES1.CH01" + #define DESCH_SER_PATH "\\_SB.PC00.DES1.CH01.SER1" + #define DESCH_SER_REF \_SB.PC00.DES1.CH01.SER1 #define DESCH_SER_GPIOREF ^^SER1 #define CAM_ALIAS 0x55 #define CAM_LANES 2 #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM #undef DESCH_CH #undef DESCH_SER #undef DESCH_CAM + #undef DESCH_SER_I2C #undef DESCH_CH_PATH #undef DESCH_SER_PATH #undef DESCH_SER_REF + #undef DESCH_SER_GPIOREF + #undef CAM_ALIAS + #undef CAM_LANES + + // Channel-level defines for Channel 2 + #define DESCH_LINK_NUM 2 + #define DESCH_CH CH02 + #define DESCH_SER SER2 + #define DESCH_CAM CAM2 + #define DESCH_SER_I2C 0x40 + #define DESCH_CH_PATH "\\_SB.PC00.DES1.CH02" + #define DESCH_SER_PATH "\\_SB.PC00.DES1.CH02.SER2" + #define DESCH_SER_REF \_SB.PC00.DES1.CH02.SER2 + #define DESCH_SER_GPIOREF ^^SER2 + #define CAM_ALIAS 0x56 + #define CAM_LANES 2 + #include "_des_ch_common_ar0234.asl" #undef DESCH_LINK_NUM + #undef DESCH_CH + #undef DESCH_SER + #undef DESCH_CAM #undef DESCH_SER_I2C + #undef DESCH_CH_PATH + #undef DESCH_SER_PATH + #undef DESCH_SER_REF #undef DESCH_SER_GPIOREF #undef CAM_ALIAS #undef CAM_LANES - // Clean up DES0-level defines + // Channel-level defines for Channel 3 + #define DESCH_LINK_NUM 3 + #define DESCH_CH CH03 + #define DESCH_SER SER3 + #define DESCH_CAM CAM3 + #define DESCH_SER_I2C 0x40 + #define DESCH_CH_PATH "\\_SB.PC00.DES1.CH03" + #define DESCH_SER_PATH "\\_SB.PC00.DES1.CH03.SER3" + #define DESCH_SER_REF \_SB.PC00.DES1.CH03.SER3 + #define DESCH_SER_GPIOREF ^^SER3 + #define CAM_ALIAS 0x57 + #define CAM_LANES 2 + #include "_des_ch_common_ar0234.asl" + #undef DESCH_LINK_NUM + #undef DESCH_CH + #undef DESCH_SER + #undef DESCH_CAM + #undef DESCH_SER_I2C + #undef DESCH_CH_PATH + #undef DESCH_SER_PATH + #undef DESCH_SER_REF + #undef DESCH_SER_GPIOREF + #undef CAM_ALIAS + #undef CAM_LANES + + // Clean up DES1-level defines #undef DES_PHY_TYPE #undef DES_I2C_ADDR #undef DES_LANES diff --git a/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin b/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin index 313fad15..018c8f9f 100644 Binary files a/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin and b/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin differ diff --git a/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.xml b/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.xml index 308b7bcd..843b366c 100644 --- a/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.xml +++ b/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.xml @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - + @@ -177,6 +177,7 @@ limitations under the License. + @@ -304,6 +305,7 @@ limitations under the License. + @@ -431,6 +433,7 @@ limitations under the License. + @@ -566,6 +569,7 @@ limitations under the License. + @@ -602,7 +606,7 @@ limitations under the License. - + @@ -739,6 +743,7 @@ limitations under the License. + @@ -877,6 +882,7 @@ limitations under the License. + @@ -1015,6 +1021,7 @@ limitations under the License. + @@ -1161,6 +1168,7 @@ limitations under the License. + @@ -1302,6 +1310,7 @@ limitations under the License. + @@ -1444,6 +1453,7 @@ limitations under the License. + @@ -1586,6 +1596,7 @@ limitations under the License. + @@ -1736,6 +1747,7 @@ limitations under the License. + @@ -1872,6 +1884,7 @@ limitations under the License. + @@ -2009,6 +2022,7 @@ limitations under the License. + @@ -2146,6 +2160,7 @@ limitations under the License. + @@ -2291,6 +2306,7 @@ limitations under the License. + diff --git a/config/ar0234/ipu8/libcamhal_configs.json b/config/ar0234/ipu8/libcamhal_configs.json index 4a8a7245..3e658c3e 100644 --- a/config/ar0234/ipu8/libcamhal_configs.json +++ b/config/ar0234/ipu8/libcamhal_configs.json @@ -21,7 +21,7 @@ // Supported sensors list: // ar0234-a-0 - for mipi setup, where sensor connected on crd1 (port 0) // ar0234-b-2 - for mipi setup, where sensor connected on crd2 (port 2) - // ar0234 - for gmsl setup with x2 sensors, where sensors detected as sensor 1 - sensor 2 + // ar0234 - for gmsl setup with x8 sensors, where sensors detected as sensor 1 - sensor 8 "availableSensors": ["ar0234-a-0","ar0234-b-2","ar0234"], "videoStreamNum" : 2 } diff --git a/config/ar0234/ipu8/sensors/ar0234.json b/config/ar0234/ipu8/sensors/ar0234.json index 22868851..06375db8 100644 --- a/config/ar0234/ipu8/sensors/ar0234.json +++ b/config/ar0234/ipu8/sensors/ar0234.json @@ -20,7 +20,7 @@ { "name": "ar0234_acpi-1", "description": "AR0234 GMSL Sensor 1", - "vcCount": 2, + "vcCount": 4, "vcId": 0, "vcGroupId": 0, "MediaCtlConfig": [ @@ -31,7 +31,7 @@ "videonode": [ { "name": "Intel IPU7 ISYS Capture 0", "videoNodeType": "VIDEO_GENERIC" }, { "name": "Intel IPU7 CSI2 0", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, - { "name": "ar0234 22-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + { "name": "ar0234 25-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } ] } ], @@ -212,7 +212,7 @@ { "name": "ar0234_acpi-2", "description": "AR0234 GMSL Sensor 2", - "vcCount": 2, + "vcCount": 4, "vcId": 1, "vcGroupId": 0, "MediaCtlConfig": [ @@ -223,7 +223,1159 @@ "videonode": [ { "name": "Intel IPU7 ISYS Capture 1", "videoNodeType": "VIDEO_GENERIC" }, { "name": "Intel IPU7 CSI2 0", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, - { "name": "ar0234 23-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + { "name": "ar0234 26-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", + "MANUAL_WHITE_BALANCE", + "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", + "PER_FRAME_CONTROL", + "SCENE_MODE" + ], + "fpsRange": [ 10, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ + "AUTO", + "MANUAL" + ], + "supportedVideoStabilizationModes": [ + "OFF" + ], + "supportedSceneMode": [ + "NORMAL" + ], + "supportedAntibandingMode": [ + "AUTO", + "50Hz", + "60Hz", + "OFF" + ], + "supportedAwbMode": [ + "AUTO", + "INCANDESCENT", + "FLUORESCENT", + "DAYLIGHT", + "FULL_OVERCAST", + "PARTLY_OVERCAST", + "SUNSET", + "VIDEO_CONFERENCE", + "MANUAL_CCT_RANGE", + "MANUAL_WHITE_POINT", + "MANUAL_GAIN", + "MANUAL_COLOR_TRANSFORM" + ], + "supportedAfMode": [ + "OFF" + ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + // 0: OFF, 1: SIMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [44, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1280, 960 ], + "sensor.info.pixelArraySize": [1280, 960], + // 1280x1.12um 960x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [1], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 4, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "sensor.opaqueRawSize": [1280, 960, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1280, 960, 0, + 35, 1280, 960, 0, + 34, 1280, 960, 0 + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1280, 960, 33333333, + 35, 1280, 960, 33333333, + 34, 1280, 960, 33333333 + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1280, 960, 33333333 + ], + // maximum JPEG size: 1920*1200*1.5 + "jpeg.maxSize": [3456000], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ + ["NORMAL", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"], + ["STILL_CAPTURE", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"] + ], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [ + ["VIDEO", "DFLT", "DFLT", "DFLT", "DFLT"] + ], + // ascending order request + "supportedISysSizes": [[1280, 960]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 0, + "digitalGainLag": 0, + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "AR0234.IPU8.bin", + "graphSettingsType": "coupled", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": ["NVM", 590], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { + "Off": 0, + "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1280, 960], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": false + }, + { + "name": "ar0234_acpi-3", + "description": "AR0234 GMSL Sensor 3", + "vcCount": 4, + "vcId": 2, + "vcGroupId": 0, + "MediaCtlConfig": [ + { + "id": 0, + "configMode": "AUTO", + "output": [1280, 960], + "videonode": [ + { "name": "Intel IPU7 ISYS Capture 2", "videoNodeType": "VIDEO_GENERIC" }, + { "name": "Intel IPU7 CSI2 0", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, + { "name": "ar0234 27-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", + "MANUAL_WHITE_BALANCE", + "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", + "PER_FRAME_CONTROL", + "SCENE_MODE" + ], + "fpsRange": [ 10, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ + "AUTO", + "MANUAL" + ], + "supportedVideoStabilizationModes": [ + "OFF" + ], + "supportedSceneMode": [ + "NORMAL" + ], + "supportedAntibandingMode": [ + "AUTO", + "50Hz", + "60Hz", + "OFF" + ], + "supportedAwbMode": [ + "AUTO", + "INCANDESCENT", + "FLUORESCENT", + "DAYLIGHT", + "FULL_OVERCAST", + "PARTLY_OVERCAST", + "SUNSET", + "VIDEO_CONFERENCE", + "MANUAL_CCT_RANGE", + "MANUAL_WHITE_POINT", + "MANUAL_GAIN", + "MANUAL_COLOR_TRANSFORM" + ], + "supportedAfMode": [ + "OFF" + ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + // 0: OFF, 1: SIMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [44, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1280, 960 ], + "sensor.info.pixelArraySize": [1280, 960], + // 1280x1.12um 960x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [1], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 4, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "sensor.opaqueRawSize": [1280, 960, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1280, 960, 0, + 35, 1280, 960, 0, + 34, 1280, 960, 0 + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1280, 960, 33333333, + 35, 1280, 960, 33333333, + 34, 1280, 960, 33333333 + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1280, 960, 33333333 + ], + // maximum JPEG size: 1920*1200*1.5 + "jpeg.maxSize": [3456000], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ + ["NORMAL", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"], + ["STILL_CAPTURE", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"] + ], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [ + ["VIDEO", "DFLT", "DFLT", "DFLT", "DFLT"] + ], + // ascending order request + "supportedISysSizes": [[1280, 960]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 0, + "digitalGainLag": 0, + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "AR0234.IPU8.bin", + "graphSettingsType": "coupled", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": ["NVM", 590], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { + "Off": 0, + "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1280, 960], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": false + }, + { + "name": "ar0234_acpi-4", + "description": "AR0234 GMSL Sensor 4", + "vcCount": 4, + "vcId": 3, + "vcGroupId": 0, + "MediaCtlConfig": [ + { + "id": 0, + "configMode": "AUTO", + "output": [1280, 960], + "videonode": [ + { "name": "Intel IPU7 ISYS Capture 3", "videoNodeType": "VIDEO_GENERIC" }, + { "name": "Intel IPU7 CSI2 0", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, + { "name": "ar0234 28-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", + "MANUAL_WHITE_BALANCE", + "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", + "PER_FRAME_CONTROL", + "SCENE_MODE" + ], + "fpsRange": [ 10, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ + "AUTO", + "MANUAL" + ], + "supportedVideoStabilizationModes": [ + "OFF" + ], + "supportedSceneMode": [ + "NORMAL" + ], + "supportedAntibandingMode": [ + "AUTO", + "50Hz", + "60Hz", + "OFF" + ], + "supportedAwbMode": [ + "AUTO", + "INCANDESCENT", + "FLUORESCENT", + "DAYLIGHT", + "FULL_OVERCAST", + "PARTLY_OVERCAST", + "SUNSET", + "VIDEO_CONFERENCE", + "MANUAL_CCT_RANGE", + "MANUAL_WHITE_POINT", + "MANUAL_GAIN", + "MANUAL_COLOR_TRANSFORM" + ], + "supportedAfMode": [ + "OFF" + ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + // 0: OFF, 1: SIMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [44, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1280, 960 ], + "sensor.info.pixelArraySize": [1280, 960], + // 1280x1.12um 960x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [1], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 4, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "sensor.opaqueRawSize": [1280, 960, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1280, 960, 0, + 35, 1280, 960, 0, + 34, 1280, 960, 0 + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1280, 960, 33333333, + 35, 1280, 960, 33333333, + 34, 1280, 960, 33333333 + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1280, 960, 33333333 + ], + // maximum JPEG size: 1920*1200*1.5 + "jpeg.maxSize": [3456000], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ + ["NORMAL", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"], + ["STILL_CAPTURE", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"] + ], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [ + ["VIDEO", "DFLT", "DFLT", "DFLT", "DFLT"] + ], + // ascending order request + "supportedISysSizes": [[1280, 960]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 0, + "digitalGainLag": 0, + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "AR0234.IPU8.bin", + "graphSettingsType": "coupled", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": ["NVM", 590], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { + "Off": 0, + "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1280, 960], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": false + }, + { + "name": "ar0234_acpi-5", + "description": "AR0234 GMSL Sensor 5", + "vcCount": 4, + "vcId": 0, + "vcGroupId": 0, + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [1280, 960], + "videonode": [ + { "name": "Intel IPU7 ISYS Capture 16", "videoNodeType": "VIDEO_GENERIC" }, + { "name": "Intel IPU7 CSI2 2", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, + { "name": "ar0234 21-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", + "MANUAL_WHITE_BALANCE", + "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", + "PER_FRAME_CONTROL", + "SCENE_MODE" + ], + "fpsRange": [ 10, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ + "AUTO", + "MANUAL" + ], + "supportedVideoStabilizationModes": [ + "OFF" + ], + "supportedSceneMode": [ + "NORMAL" + ], + "supportedAntibandingMode": [ + "AUTO", + "50Hz", + "60Hz", + "OFF" + ], + "supportedAwbMode": [ + "AUTO", + "INCANDESCENT", + "FLUORESCENT", + "DAYLIGHT", + "FULL_OVERCAST", + "PARTLY_OVERCAST", + "SUNSET", + "VIDEO_CONFERENCE", + "MANUAL_CCT_RANGE", + "MANUAL_WHITE_POINT", + "MANUAL_GAIN", + "MANUAL_COLOR_TRANSFORM" + ], + "supportedAfMode": [ + "OFF" + ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + // 0: OFF, 1: SIMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [44, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1280, 960 ], + "sensor.info.pixelArraySize": [1280, 960], + // 1280x1.12um 960x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [1], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 4, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "sensor.opaqueRawSize": [1280, 960, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1280, 960, 0, + 35, 1280, 960, 0, + 34, 1280, 960, 0 + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1280, 960, 33333333, + 35, 1280, 960, 33333333, + 34, 1280, 960, 33333333 + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1280, 960, 33333333 + ], + // maximum JPEG size: 1920*1200*1.5 + "jpeg.maxSize": [3456000], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ + ["NORMAL", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"], + ["STILL_CAPTURE", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"] + ], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [ + ["VIDEO", "DFLT", "DFLT", "DFLT", "DFLT"] + ], + // ascending order request + "supportedISysSizes": [[1280, 960]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 0, + "digitalGainLag": 0, + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "AR0234.IPU8.bin", + "graphSettingsType": "coupled", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": ["NVM", 590], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { + "Off": 0, + "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1280, 960], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": false + }, + { + "name": "ar0234_acpi-6", + "description": "AR0234 GMSL Sensor 6", + "vcCount": 4, + "vcId": 1, + "vcGroupId": 0, + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [1280, 960], + "videonode": [ + { "name": "Intel IPU7 ISYS Capture 17", "videoNodeType": "VIDEO_GENERIC" }, + { "name": "Intel IPU7 CSI2 2", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, + { "name": "ar0234 22-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", + "MANUAL_WHITE_BALANCE", + "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", + "PER_FRAME_CONTROL", + "SCENE_MODE" + ], + "fpsRange": [ 10, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ + "AUTO", + "MANUAL" + ], + "supportedVideoStabilizationModes": [ + "OFF" + ], + "supportedSceneMode": [ + "NORMAL" + ], + "supportedAntibandingMode": [ + "AUTO", + "50Hz", + "60Hz", + "OFF" + ], + "supportedAwbMode": [ + "AUTO", + "INCANDESCENT", + "FLUORESCENT", + "DAYLIGHT", + "FULL_OVERCAST", + "PARTLY_OVERCAST", + "SUNSET", + "VIDEO_CONFERENCE", + "MANUAL_CCT_RANGE", + "MANUAL_WHITE_POINT", + "MANUAL_GAIN", + "MANUAL_COLOR_TRANSFORM" + ], + "supportedAfMode": [ + "OFF" + ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + // 0: OFF, 1: SIMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [44, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1280, 960 ], + "sensor.info.pixelArraySize": [1280, 960], + // 1280x1.12um 960x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [1], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 4, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "sensor.opaqueRawSize": [1280, 960, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1280, 960, 0, + 35, 1280, 960, 0, + 34, 1280, 960, 0 + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1280, 960, 33333333, + 35, 1280, 960, 33333333, + 34, 1280, 960, 33333333 + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1280, 960, 33333333 + ], + // maximum JPEG size: 1920*1200*1.5 + "jpeg.maxSize": [3456000], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ + ["NORMAL", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"], + ["STILL_CAPTURE", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"] + ], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [ + ["VIDEO", "DFLT", "DFLT", "DFLT", "DFLT"] + ], + // ascending order request + "supportedISysSizes": [[1280, 960]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 0, + "digitalGainLag": 0, + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "AR0234.IPU8.bin", + "graphSettingsType": "coupled", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": ["NVM", 590], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { + "Off": 0, + "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1280, 960], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": false + }, + { + "name": "ar0234_acpi-7", + "description": "AR0234 GMSL Sensor 7", + "vcCount": 4, + "vcId": 2, + "vcGroupId": 0, + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [1280, 960], + "videonode": [ + { "name": "Intel IPU7 ISYS Capture 18", "videoNodeType": "VIDEO_GENERIC" }, + { "name": "Intel IPU7 CSI2 2", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, + { "name": "ar0234 23-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", + "MANUAL_WHITE_BALANCE", + "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", + "PER_FRAME_CONTROL", + "SCENE_MODE" + ], + "fpsRange": [ 10, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ + "AUTO", + "MANUAL" + ], + "supportedVideoStabilizationModes": [ + "OFF" + ], + "supportedSceneMode": [ + "NORMAL" + ], + "supportedAntibandingMode": [ + "AUTO", + "50Hz", + "60Hz", + "OFF" + ], + "supportedAwbMode": [ + "AUTO", + "INCANDESCENT", + "FLUORESCENT", + "DAYLIGHT", + "FULL_OVERCAST", + "PARTLY_OVERCAST", + "SUNSET", + "VIDEO_CONFERENCE", + "MANUAL_CCT_RANGE", + "MANUAL_WHITE_POINT", + "MANUAL_GAIN", + "MANUAL_COLOR_TRANSFORM" + ], + "supportedAfMode": [ + "OFF" + ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + // 0: OFF, 1: SIMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [44, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1280, 960 ], + "sensor.info.pixelArraySize": [1280, 960], + // 1280x1.12um 960x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [1], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 4, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "sensor.opaqueRawSize": [1280, 960, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1280, 960, 0, + 35, 1280, 960, 0, + 34, 1280, 960, 0 + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1280, 960, 33333333, + 35, 1280, 960, 33333333, + 34, 1280, 960, 33333333 + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1280, 960, 33333333 + ], + // maximum JPEG size: 1920*1200*1.5 + "jpeg.maxSize": [3456000], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ + ["NORMAL", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"], + ["STILL_CAPTURE", "VIDEO", "AR0234_GRBG_1280_960_NVL.IPU8"] + ], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [ + ["VIDEO", "DFLT", "DFLT", "DFLT", "DFLT"] + ], + // ascending order request + "supportedISysSizes": [[1280, 960]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 0, + "digitalGainLag": 0, + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "AR0234.IPU8.bin", + "graphSettingsType": "coupled", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": ["NVM", 590], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { + "Off": 0, + "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1280, 960], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": false + }, + { + "name": "ar0234_acpi-8", + "description": "AR0234 GMSL Sensor 8", + "vcCount": 4, + "vcId": 3, + "vcGroupId": 0, + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [1280, 960], + "videonode": [ + { "name": "Intel IPU7 ISYS Capture 19", "videoNodeType": "VIDEO_GENERIC" }, + { "name": "Intel IPU7 CSI2 2", "videoNodeType": "VIDEO_ISYS_RECEIVER" }, + { "name": "ar0234 24-0010", "videoNodeType": "VIDEO_PIXEL_ARRAY" } ] } ], diff --git a/drivers/media/i2c/d4xx.c b/drivers/media/i2c/d4xx.c index b78613e1..9da3c211 100644 --- a/drivers/media/i2c/d4xx.c +++ b/drivers/media/i2c/d4xx.c @@ -31,6 +31,8 @@ #define DS5_DRIVER_NAME_DFU "d4xx-dfu" #define DS5_FW_VERSION 0x030C #define DS5_FW_BUILD 0x030E +#define DS5_FRAME_SYNC_MIN_FW_VERSION 0x0511 +#define DS5_FRAME_SYNC_MIN_FW_BUILD 0x030A #define DS5_DEVICE_TYPE 0x0310 #define DS5_DEVICE_TYPE_D45X 6 #define DS5_DEVICE_TYPE_D43X 5 @@ -86,6 +88,7 @@ #define DS5_EXPOSURE_ROI_RIGHT 0x001C #define DS5_MANUAL_LASER_POWER 0x0024 #define DS5_PWM_FREQUENCY 0x0028 +#define DS5_CAMERA_SYNC_MODE 0x002C #define DS5_CONFIG_STATUS 0x4800 #define DS5_DEPTH_CONFIG_STATUS 0x4800 @@ -197,6 +200,8 @@ #define DS5_MAX_LOG_POLL (DS5_MAX_LOG_WAIT / DS5_MAX_LOG_SLEEP) #define DS5_N_CONTROLS 8 +#define DS5_EXTERNAL_SYNC_MODE 0x3 + /* helper function */ #define to_ds5(_sd) container_of(_sd, struct ds5, sd) @@ -417,6 +422,8 @@ struct ds5 { struct ds5_platform_data *platform_data; struct gpio_desc *reset_gpio; + bool frame_sync_enable; + struct regmap *regmap; struct mutex mutex; @@ -2979,6 +2986,44 @@ static int ds5_hw_init(struct i2c_client *client, struct ds5 *ds5) return ret; } +static int ds5_fs_init(struct i2c_client *client, struct ds5 *ds5) +{ + int ret = 0; + u32 val = 0; + + dev_dbg(&client->dev, "Initialising Frame Sync\n"); + + ds5->frame_sync_enable = false; + + if (!fwnode_property_read_u32(dev_fwnode(&client->dev), "gmsl-frame-sync-enable", &val)) + ds5->frame_sync_enable = !!val; + + if (ds5->frame_sync_enable && + (ds5->fw_version < DS5_FRAME_SYNC_MIN_FW_VERSION || + (ds5->fw_version == DS5_FRAME_SYNC_MIN_FW_VERSION && + ds5->fw_build < DS5_FRAME_SYNC_MIN_FW_BUILD))) { + dev_warn(&client->dev, + "External GMSL frame_sync requires firmware 5.17.3.10 or newer\n"); + ds5->frame_sync_enable = false; + } + + if (ds5->frame_sync_enable) { + // Sync Mode = 3 is Independent Sync to Depth Stream and RGB Stream + + ret = ds5_write(ds5, DS5_DEPTH_CONTROL_BASE | DS5_CAMERA_SYNC_MODE, + DS5_EXTERNAL_SYNC_MODE); + if (ret) { + dev_err(&client->dev, "%s: failed to set frame sync mode: %d\n", + __func__, ret); + return ret; + } + } + + dev_info(&client->dev, "External GMSL frame_sync %s\n", + ds5->frame_sync_enable ? "enabled" : "disabled"); + + return 0; +} static int ds5_hw_set_auto_exposure(struct ds5 *state, u32 base, s32 val) { @@ -5321,6 +5366,12 @@ static int ds5_probe(struct i2c_client *client) goto probe_error_media_entity_cleanup; } + ret = ds5_fs_init(client, ds5); + if (ret) { + dev_err(&client->dev, "failed to init fs: %d", ret); + goto probe_error_media_entity_cleanup; + } + mutex_init(&ds5->mutex); #ifdef CONFIG_SYSFS