From f73cbba686d50e97338271675b366240e016f11b Mon Sep 17 00:00:00 2001 From: "Goh, Wei Khang1" Date: Fri, 21 Aug 2026 15:26:14 +0800 Subject: [PATCH 1/9] acpi: ipu8: Expand configuration support for 8x D3 AR0234 Add DES1, a second MAX96724 deserializer on I2C2/MIPI port 2, with four GMSL channels (CH00..CH03) each carrying a D3 AR0234 camera through a MAX9295A serializer, mirroring the existing DES0 layout. This expands the D3 AR0234 GMSL configuration from one deserializer with two cameras to two deserializers with eight cameras total. Bump the DefinitionBlock OEM revision and update the file header and channel comments to match. Signed-off-by: Goh, Wei Khang1 --- acpi/ipu8/max96724_d3_ar0234.asl | 197 +++++++++++++++++++++++++++++-- 1 file changed, 188 insertions(+), 9 deletions(-) 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 From d96cbac612e1f96de9dedc99977fef741be80351 Mon Sep 17 00:00:00 2001 From: "Goh, Wei Khang1" Date: Fri, 21 Aug 2026 15:26:32 +0800 Subject: [PATCH 2/9] config: ar0234: Add IPU8 sensor entries for 8x D3 AR0234 Extend ar0234.json from two sensor entries to eight (ar0234_acpi-1..8) to match the 8x D3 AR0234 GMSL topology. Bump vcCount from 2 to 4 for all entries and update the I2C addresses in each VIDEO_PIXEL_ARRAY videonode to match the new per-channel sensor addressing. Signed-off-by: Goh, Wei Khang1 --- config/ar0234/ipu8/libcamhal_configs.json | 2 +- config/ar0234/ipu8/sensors/ar0234.json | 1160 ++++++++++++++++++++- 2 files changed, 1157 insertions(+), 5 deletions(-) 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" } ] } ], From 48b94feb25d26f08ce305914507ffb9ef07fdb73 Mon Sep 17 00:00:00 2001 From: "Goh, Wei Khang1" Date: Wed, 2 Sep 2026 18:05:35 +0800 Subject: [PATCH 3/9] config: ar0234: Regenerate IPU75XA GCSS for tag 20260406_1900_297 Regenerate AR0234.IPU75XA.xml/.bin with systool 26.31.3.0 (tag 20260406_1900_297): - Switch the raw-only setting's isys output link from packed SINGLE_PL_10_P to unpacked SINGLE_PL_10 to enable unpacked RAW. - Add the missing isys:output -> lbff_Bayer main data input link for the preview/video settings. Signed-off-by: Goh, Wei Khang1 --- config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin | Bin 90560 -> 90388 bytes config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.xml | 20 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin b/config/ar0234/ipu75xa/gcss/AR0234.IPU75XA.bin index 313fad15067faa626aacbf08312f6f473430f537..018c8f9f5d22d557560f44b6e43981dcd19fd653 100644 GIT binary patch delta 674 zcmX?bn03k_Rz(INsCoA-SrSMy0`V($P6j3hZUzAcRR$>rc?RZ*s_{IRPbFmTYGY(z zEIIgd;sk|>TXI-ILJX4~*_9_hVB?wizyT_-kTILnLzIC5P1;}*6AzO3M5b)c30jz{ zCVv1bLr63-XLH`L$D-^3GY^tPAxk!=LMYJrK-V!$PGpUr?7_;zxdJExaYZ6)Hs^;d z1TTKF1se~iMFUJEkS&|DVJeh2aij9&0AG&DIqVLcCsx6fII?FWcrYa~91ffU2VhDJ zIkFKvm=YgO2hNDAFeQqd*$5s?i4B(n=Ym%-C4yYpNIXXF_{lH0csO7DhsiT?XLA~e zGD3X@lE1;t!&#vP6Zy!U&2hjU!rPp}^FUR#gTlc$*b(E(v5a0`V($b_Ov9ZU$8bO$I3jHU^f7it#*A>#rv5YGY&w zS$OpP#2y7k#>o>I<0scJ3UGpCK&CKGW@J~M?7--QBr=gPo7YE_fdNI$!~-^yKQQv3 zNq~&=VdmkTp@pV=vH-IOnrI?(Ht!RAG<6_j4*(57l~~ASF!2JmVW@2L4yeRPzP|fDXGH+1?CAbj8o4hfhWb@f= wAk~`}o(9W9DZ_6t`R#AH89@rR2YNFyGfpm0blkp|hmjqp2u$DfS~Es=0A>l-WdHyG 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. + From 681283e7a98078abf1ea69f7726795821df066a0 Mon Sep 17 00:00:00 2001 From: "Khai Wen, Ng" Date: Tue, 25 Aug 2026 16:53:29 +0800 Subject: [PATCH 4/9] drivers: d4xx: Add External Frame Sync support Add fwnode property read-back from ASL, and perform register write to D457 FW. Signed-off-by: Khai Wen, Ng --- drivers/media/i2c/d4xx.c | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) 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 From 96849290f67962d2888d82a8cd67b30fdc59370b Mon Sep 17 00:00:00 2001 From: "Khai Wen, Ng" Date: Fri, 4 Sep 2026 01:40:40 +0800 Subject: [PATCH 5/9] acpi: robinson: Enable D457 Frame Sync for LGE D457 is using MFP0 for external sync, and getting external sync signal from MFP7 of MAX96724. Signed-off-by: Khai Wen, Ng --- .../3_d3_isx031_1_d457_frame_sync.asl | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) 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 From 16b8d0ed5a881b539499234bf7b29d72b65a408a Mon Sep 17 00:00:00 2001 From: "Khai Wen, Ng" Date: Tue, 25 Aug 2026 17:29:33 +0800 Subject: [PATCH 6/9] acpi: Add Frame Sync support to _cam_common_d457 Remove reset-gpios for d457. RS MIPI driver does not use it. MFP0 was used for Frame Sync instead. Add gmsl-frame-sync-enable into ASL to be read-back by driver. Signed-off-by: Khai Wen, Ng --- acpi/ipu7/_cam_common_d457.asl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/acpi/ipu7/_cam_common_d457.asl b/acpi/ipu7/_cam_common_d457.asl index 74f93cac..e58710a5 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,12 @@ Name (_DSD, Package () // _DSD: Device-Specific Data * 1 is active low for reset * */ - Package () { "reset-gpios", Package () { DESCH_SER_GPIOREF, 0, 0, 1 } }, +#ifdef EXTERNAL_FRAME_SYNC + Package () { "fsin-gpios", Package () { DESCH_SER_GPIOREF, 0, 0, 1 } }, + 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 () From 13f7c9e2e6a86ec2229340bb255a379f143f6ce8 Mon Sep 17 00:00:00 2001 From: "Khai Wen, Ng" Date: Fri, 4 Sep 2026 01:59:23 +0800 Subject: [PATCH 7/9] acpi: Add DESCH_SER_FSIN_GPIO and DESCH_SER_RESET_GPIO into _common_ Add DESCH_SER_RESET_GPIO for Reset GPIO. Add DESCH_SER_FSIN_GPIO for Fsin GPIO. Signed-off-by: Khai Wen, Ng --- acpi/ipu7/_cam_common_d457.asl | 4 ++- acpi/ipu7/_cam_common_isx031.asl | 4 ++- acpi/ipu7/_ser_common_max9295.asl | 45 ++++++++++++++++++++++++++----- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/acpi/ipu7/_cam_common_d457.asl b/acpi/ipu7/_cam_common_d457.asl index e58710a5..3df5c07a 100644 --- a/acpi/ipu7/_cam_common_d457.asl +++ b/acpi/ipu7/_cam_common_d457.asl @@ -74,8 +74,10 @@ Name (_DSD, Package () // _DSD: Device-Specific Data * 1 is active low for reset * */ -#ifdef EXTERNAL_FRAME_SYNC +#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 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/_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() { From b3abb024a536ed89ff87a662be2646ca3a7f726f Mon Sep 17 00:00:00 2001 From: "Sodhi, Vunny" Date: Thu, 3 Sep 2026 13:00:25 +0800 Subject: [PATCH 8/9] ipu7: acpi: fix LINK_FREQ macro expansion in max96724 include The LINK_FREQ_VAL indirection added in 898a6a065e ("ipu7: acpi: isx031 max linq freq") does not work: iasl's preprocessor expands LINK_FREQ_VAL to the token LINK_FREQ but does not recursively expand LINK_FREQ further, so the literal identifier ends up in the AML source and iasl fails with a syntax error, e.g.: ./script/gen_ssdt.sh acpi/ipu7/max96724_d3_isx031.asl ... Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ } }, Error 6126 - syntax error Drop the LINK_FREQ_VAL alias and use LINK_FREQ directly, matching the pattern already used by acpi/ipu6/_des_common_max96724.asl. Callers keep the same interface ("#define LINK_FREQ " before include, "#undef LINK_FREQ" after). When the includer does not provide LINK_FREQ, only default it for the duration of this include and undef it on the way out, so the default does not leak to subsequent includes or block a later "#define LINK_FREQ" in the same translation unit. A LINK_FREQ_DEFAULTED sentinel tracks whether this include is the one that installed the default. Signed-off-by: Sodhi, Vunny --- acpi/ipu7/_des_common_max96724.asl | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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 From 8158753289a0cd753d0789a9b5d42949a41174fa Mon Sep 17 00:00:00 2001 From: "Khai Wen, Ng" Date: Fri, 4 Sep 2026 02:46:24 +0800 Subject: [PATCH 9/9] acpi: ipu7: Remove obsolete DESCH_SER_EXTRA_GPIO_PIN Align with robinson bay implementation. Signed-off-by: Khai Wen, Ng --- acpi/ipu7/max96724_sensing_isx031_fs.asl | 40 +++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) 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