162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci# Copyright (C) 2019 Renesas Electronics Corp. 362306a36Sopenharmony_ci%YAML 1.2 462306a36Sopenharmony_ci--- 562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/media/i2c/maxim,max9286.yaml# 662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 762306a36Sopenharmony_ci 862306a36Sopenharmony_cititle: Maxim Integrated Quad GMSL Deserializer 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cimaintainers: 1162306a36Sopenharmony_ci - Jacopo Mondi <jacopo+renesas@jmondi.org> 1262306a36Sopenharmony_ci - Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> 1362306a36Sopenharmony_ci - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> 1462306a36Sopenharmony_ci - Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cidescription: | 1762306a36Sopenharmony_ci The MAX9286 deserializer receives video data on up to 4 Gigabit Multimedia 1862306a36Sopenharmony_ci Serial Links (GMSL) and outputs them on a CSI-2 D-PHY port using up to 4 data 1962306a36Sopenharmony_ci lanes. 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci In addition to video data, the GMSL links carry a bidirectional control 2262306a36Sopenharmony_ci channel that encapsulates I2C messages. The MAX9286 forwards all I2C traffic 2362306a36Sopenharmony_ci not addressed to itself to the other side of the links, where a GMSL 2462306a36Sopenharmony_ci serializer will output it on a local I2C bus. In the other direction all I2C 2562306a36Sopenharmony_ci traffic received over GMSL by the MAX9286 is output on the local I2C bus. 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciproperties: 2862306a36Sopenharmony_ci '#address-cells': 2962306a36Sopenharmony_ci const: 1 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci '#size-cells': 3262306a36Sopenharmony_ci const: 0 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci compatible: 3562306a36Sopenharmony_ci const: maxim,max9286 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci reg: 3862306a36Sopenharmony_ci description: I2C device address 3962306a36Sopenharmony_ci maxItems: 1 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci poc-supply: 4262306a36Sopenharmony_ci description: Regulator providing Power over Coax to all the ports 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci enable-gpios: 4562306a36Sopenharmony_ci description: GPIO connected to the \#PWDN pin with inverted polarity 4662306a36Sopenharmony_ci maxItems: 1 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci gpio-controller: true 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci '#gpio-cells': 5162306a36Sopenharmony_ci const: 2 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci maxim,bus-width: 5462306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 5562306a36Sopenharmony_ci enum: [ 24, 27, 32 ] 5662306a36Sopenharmony_ci description: | 5762306a36Sopenharmony_ci The GMSL serial data bus width. This setting is normally controlled by 5862306a36Sopenharmony_ci the BWS pin, but may be overridden with this property. The value must 5962306a36Sopenharmony_ci match the configuration of the remote serializers. 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci maxim,i2c-remote-bus-hz: 6262306a36Sopenharmony_ci enum: [ 8470, 28300, 84700, 105000, 173000, 339000, 533000, 837000 ] 6362306a36Sopenharmony_ci default: 105000 6462306a36Sopenharmony_ci description: | 6562306a36Sopenharmony_ci The I2C clock frequency for the remote I2C buses. The value must match 6662306a36Sopenharmony_ci the configuration of the remote serializers. 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci maxim,reverse-channel-microvolt: 6962306a36Sopenharmony_ci minimum: 30000 7062306a36Sopenharmony_ci maximum: 200000 7162306a36Sopenharmony_ci default: 170000 7262306a36Sopenharmony_ci description: | 7362306a36Sopenharmony_ci Initial amplitude of the reverse control channel, in micro volts. 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci The initial amplitude shall be adjusted to a value compatible with the 7662306a36Sopenharmony_ci configuration of the connected remote serializer. 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci Some camera modules (for example RDACM20) include an on-board MCU that 7962306a36Sopenharmony_ci pre-programs the embedded serializer with power supply noise immunity 8062306a36Sopenharmony_ci (high-threshold) enabled. A typical value of the deserializer's reverse 8162306a36Sopenharmony_ci channel amplitude to communicate with pre-programmed serializers is 8262306a36Sopenharmony_ci 170000 micro volts. 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci A typical value for the reverse channel amplitude to communicate with 8562306a36Sopenharmony_ci a remote serializer whose high-threshold noise immunity is not enabled 8662306a36Sopenharmony_ci is 100000 micro volts 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci maxim,gpio-poc: 8962306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32-array 9062306a36Sopenharmony_ci minItems: 2 9162306a36Sopenharmony_ci maxItems: 2 9262306a36Sopenharmony_ci description: | 9362306a36Sopenharmony_ci Index of the MAX9286 gpio output line (0 or 1) that controls Power over 9462306a36Sopenharmony_ci Coax to the cameras and its associated polarity flag. 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci The property accepts an array of two unsigned integers, the first being 9762306a36Sopenharmony_ci the gpio line index (0 or 1) and the second being the gpio line polarity 9862306a36Sopenharmony_ci flag (GPIO_ACTIVE_HIGH or GPIO_ACTIVE_LOW) as defined in 9962306a36Sopenharmony_ci <include/dt-bindings/gpio/gpio.h>. 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci When the remote cameras power is controlled by one of the MAX9286 gpio 10262306a36Sopenharmony_ci lines, this property has to be used to specify which line among the two 10362306a36Sopenharmony_ci available ones controls the remote camera power enablement. 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci When this property is used it is not possible to register a gpio 10662306a36Sopenharmony_ci controller as the gpio lines are controlled directly by the MAX9286 and 10762306a36Sopenharmony_ci not available for consumers, nor the 'poc-supply' property should be 10862306a36Sopenharmony_ci specified. 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci ports: 11162306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/ports 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci properties: 11462306a36Sopenharmony_ci port@0: 11562306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/port 11662306a36Sopenharmony_ci description: GMSL Input 0 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci port@1: 11962306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/port 12062306a36Sopenharmony_ci description: GMSL Input 1 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci port@2: 12362306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/port 12462306a36Sopenharmony_ci description: GMSL Input 2 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci port@3: 12762306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/port 12862306a36Sopenharmony_ci description: GMSL Input 3 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci port@4: 13162306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/$defs/port-base 13262306a36Sopenharmony_ci unevaluatedProperties: false 13362306a36Sopenharmony_ci description: CSI-2 Output 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci properties: 13662306a36Sopenharmony_ci endpoint: 13762306a36Sopenharmony_ci $ref: /schemas/media/video-interfaces.yaml# 13862306a36Sopenharmony_ci unevaluatedProperties: false 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci properties: 14162306a36Sopenharmony_ci data-lanes: true 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci required: 14462306a36Sopenharmony_ci - data-lanes 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci required: 14762306a36Sopenharmony_ci - port@4 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci i2c-mux: 15062306a36Sopenharmony_ci type: object 15162306a36Sopenharmony_ci $ref: /schemas/i2c/i2c-mux.yaml# 15262306a36Sopenharmony_ci unevaluatedProperties: false 15362306a36Sopenharmony_ci description: | 15462306a36Sopenharmony_ci Each GMSL link is modelled as a child bus of an i2c bus multiplexer/switch. 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci patternProperties: 15762306a36Sopenharmony_ci "^i2c@[0-3]$": 15862306a36Sopenharmony_ci type: object 15962306a36Sopenharmony_ci additionalProperties: false 16062306a36Sopenharmony_ci description: | 16162306a36Sopenharmony_ci Child node of the i2c bus multiplexer which represents a GMSL link. 16262306a36Sopenharmony_ci Each serializer device on the GMSL link remote end is represented with 16362306a36Sopenharmony_ci an i2c-mux child node. The MAX9286 chip supports up to 4 GMSL 16462306a36Sopenharmony_ci channels. 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci properties: 16762306a36Sopenharmony_ci reg: 16862306a36Sopenharmony_ci description: The index of the GMSL channel. 16962306a36Sopenharmony_ci maxItems: 1 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci '#address-cells': 17262306a36Sopenharmony_ci const: 1 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci '#size-cells': 17562306a36Sopenharmony_ci const: 0 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci patternProperties: 17862306a36Sopenharmony_ci "^camera@[a-f0-9]+$": 17962306a36Sopenharmony_ci type: object 18062306a36Sopenharmony_ci description: | 18162306a36Sopenharmony_ci The remote camera device, composed by a GMSL serializer and a 18262306a36Sopenharmony_ci connected video source. 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci properties: 18562306a36Sopenharmony_ci compatible: 18662306a36Sopenharmony_ci description: The remote device compatible string. 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci reg: 18962306a36Sopenharmony_ci minItems: 2 19062306a36Sopenharmony_ci maxItems: 3 19162306a36Sopenharmony_ci description: | 19262306a36Sopenharmony_ci The I2C addresses to be assigned to the remote devices through 19362306a36Sopenharmony_ci address reprogramming. The number of entries depends on the 19462306a36Sopenharmony_ci requirements of the currently connected remote device. 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci port: 19762306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/port 19862306a36Sopenharmony_ci description: Connection to the MAX9286 sink. 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci required: 20162306a36Sopenharmony_ci - compatible 20262306a36Sopenharmony_ci - reg 20362306a36Sopenharmony_ci - port 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci additionalProperties: false 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_cipatternProperties: 20862306a36Sopenharmony_ci "^port[0-3]-poc-supply$": 20962306a36Sopenharmony_ci description: Regulator providing Power over Coax for a particular port 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_cirequired: 21262306a36Sopenharmony_ci - compatible 21362306a36Sopenharmony_ci - reg 21462306a36Sopenharmony_ci - ports 21562306a36Sopenharmony_ci - i2c-mux 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ciallOf: 21862306a36Sopenharmony_ci # Only one way of specifying power supplies is allowed: 'maxim,gpio-poc', 21962306a36Sopenharmony_ci # 'poc-supply' or per-port poc-supply. Additionally, if 'maxim,gpio-poc' is 22062306a36Sopenharmony_ci # present, then 'gpio-controller' isn't allowed. 22162306a36Sopenharmony_ci - if: 22262306a36Sopenharmony_ci required: 22362306a36Sopenharmony_ci - maxim,gpio-poc 22462306a36Sopenharmony_ci then: 22562306a36Sopenharmony_ci properties: 22662306a36Sopenharmony_ci poc-supply: false 22762306a36Sopenharmony_ci gpio-controller: false 22862306a36Sopenharmony_ci patternProperties: 22962306a36Sopenharmony_ci "^port[0-3]-poc-supply$": false 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci - if: 23262306a36Sopenharmony_ci required: 23362306a36Sopenharmony_ci - poc-supply 23462306a36Sopenharmony_ci then: 23562306a36Sopenharmony_ci patternProperties: 23662306a36Sopenharmony_ci "^port[0-3]-poc-supply$": false 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ciadditionalProperties: false 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ciexamples: 24162306a36Sopenharmony_ci - | 24262306a36Sopenharmony_ci #include <dt-bindings/gpio/gpio.h> 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci i2c@e66d8000 { 24562306a36Sopenharmony_ci #address-cells = <1>; 24662306a36Sopenharmony_ci #size-cells = <0>; 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci reg = <0 0xe66d8000>; 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci gmsl-deserializer@2c { 25162306a36Sopenharmony_ci compatible = "maxim,max9286"; 25262306a36Sopenharmony_ci reg = <0x2c>; 25362306a36Sopenharmony_ci poc-supply = <&camera_poc_12v>; 25462306a36Sopenharmony_ci enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>; 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_ci gpio-controller; 25762306a36Sopenharmony_ci #gpio-cells = <2>; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci maxim,i2c-remote-bus-hz = <339000>; 26062306a36Sopenharmony_ci maxim,reverse-channel-microvolt = <170000>; 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci ports { 26362306a36Sopenharmony_ci #address-cells = <1>; 26462306a36Sopenharmony_ci #size-cells = <0>; 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci port@0 { 26762306a36Sopenharmony_ci reg = <0>; 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci max9286_in0: endpoint { 27062306a36Sopenharmony_ci remote-endpoint = <&rdacm20_out0>; 27162306a36Sopenharmony_ci }; 27262306a36Sopenharmony_ci }; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci port@1 { 27562306a36Sopenharmony_ci reg = <1>; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci max9286_in1: endpoint { 27862306a36Sopenharmony_ci remote-endpoint = <&rdacm20_out1>; 27962306a36Sopenharmony_ci }; 28062306a36Sopenharmony_ci }; 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci port@2 { 28362306a36Sopenharmony_ci reg = <2>; 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci max9286_in2: endpoint { 28662306a36Sopenharmony_ci remote-endpoint = <&rdacm20_out2>; 28762306a36Sopenharmony_ci }; 28862306a36Sopenharmony_ci }; 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci port@3 { 29162306a36Sopenharmony_ci reg = <3>; 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci max9286_in3: endpoint { 29462306a36Sopenharmony_ci remote-endpoint = <&rdacm20_out3>; 29562306a36Sopenharmony_ci }; 29662306a36Sopenharmony_ci }; 29762306a36Sopenharmony_ci 29862306a36Sopenharmony_ci port@4 { 29962306a36Sopenharmony_ci reg = <4>; 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci max9286_out: endpoint { 30262306a36Sopenharmony_ci data-lanes = <1 2 3 4>; 30362306a36Sopenharmony_ci remote-endpoint = <&csi40_in>; 30462306a36Sopenharmony_ci }; 30562306a36Sopenharmony_ci }; 30662306a36Sopenharmony_ci }; 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci i2c-mux { 30962306a36Sopenharmony_ci #address-cells = <1>; 31062306a36Sopenharmony_ci #size-cells = <0>; 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci i2c@0 { 31362306a36Sopenharmony_ci #address-cells = <1>; 31462306a36Sopenharmony_ci #size-cells = <0>; 31562306a36Sopenharmony_ci reg = <0>; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci camera@51 { 31862306a36Sopenharmony_ci compatible = "imi,rdacm20"; 31962306a36Sopenharmony_ci reg = <0x51>, <0x61>; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_ci port { 32262306a36Sopenharmony_ci rdacm20_out0: endpoint { 32362306a36Sopenharmony_ci remote-endpoint = <&max9286_in0>; 32462306a36Sopenharmony_ci }; 32562306a36Sopenharmony_ci }; 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci }; 32862306a36Sopenharmony_ci }; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci i2c@1 { 33162306a36Sopenharmony_ci #address-cells = <1>; 33262306a36Sopenharmony_ci #size-cells = <0>; 33362306a36Sopenharmony_ci reg = <1>; 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci camera@52 { 33662306a36Sopenharmony_ci compatible = "imi,rdacm20"; 33762306a36Sopenharmony_ci reg = <0x52>, <0x62>; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci port { 34062306a36Sopenharmony_ci rdacm20_out1: endpoint { 34162306a36Sopenharmony_ci remote-endpoint = <&max9286_in1>; 34262306a36Sopenharmony_ci }; 34362306a36Sopenharmony_ci }; 34462306a36Sopenharmony_ci }; 34562306a36Sopenharmony_ci }; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci i2c@2 { 34862306a36Sopenharmony_ci #address-cells = <1>; 34962306a36Sopenharmony_ci #size-cells = <0>; 35062306a36Sopenharmony_ci reg = <2>; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci camera@53 { 35362306a36Sopenharmony_ci compatible = "imi,rdacm20"; 35462306a36Sopenharmony_ci reg = <0x53>, <0x63>; 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci port { 35762306a36Sopenharmony_ci rdacm20_out2: endpoint { 35862306a36Sopenharmony_ci remote-endpoint = <&max9286_in2>; 35962306a36Sopenharmony_ci }; 36062306a36Sopenharmony_ci }; 36162306a36Sopenharmony_ci }; 36262306a36Sopenharmony_ci }; 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci i2c@3 { 36562306a36Sopenharmony_ci #address-cells = <1>; 36662306a36Sopenharmony_ci #size-cells = <0>; 36762306a36Sopenharmony_ci reg = <3>; 36862306a36Sopenharmony_ci 36962306a36Sopenharmony_ci camera@54 { 37062306a36Sopenharmony_ci compatible = "imi,rdacm20"; 37162306a36Sopenharmony_ci reg = <0x54>, <0x64>; 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ci port { 37462306a36Sopenharmony_ci rdacm20_out3: endpoint { 37562306a36Sopenharmony_ci remote-endpoint = <&max9286_in3>; 37662306a36Sopenharmony_ci }; 37762306a36Sopenharmony_ci }; 37862306a36Sopenharmony_ci }; 37962306a36Sopenharmony_ci }; 38062306a36Sopenharmony_ci }; 38162306a36Sopenharmony_ci }; 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci /* 38462306a36Sopenharmony_ci * Example of a deserializer that controls the camera Power over Coax 38562306a36Sopenharmony_ci * through one of its gpio lines. 38662306a36Sopenharmony_ci */ 38762306a36Sopenharmony_ci gmsl-deserializer@6c { 38862306a36Sopenharmony_ci compatible = "maxim,max9286"; 38962306a36Sopenharmony_ci reg = <0x6c>; 39062306a36Sopenharmony_ci enable-gpios = <&gpio 14 GPIO_ACTIVE_HIGH>; 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci /* 39362306a36Sopenharmony_ci * The remote camera power is controlled by MAX9286 GPIO line #0. 39462306a36Sopenharmony_ci * No 'poc-supply' nor 'gpio-controller' are specified. 39562306a36Sopenharmony_ci */ 39662306a36Sopenharmony_ci maxim,gpio-poc = <0 GPIO_ACTIVE_LOW>; 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci /* 39962306a36Sopenharmony_ci * Do not describe connections as they're the same as in the previous 40062306a36Sopenharmony_ci * example. 40162306a36Sopenharmony_ci */ 40262306a36Sopenharmony_ci ports { 40362306a36Sopenharmony_ci #address-cells = <1>; 40462306a36Sopenharmony_ci #size-cells = <0>; 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci port@4 { 40762306a36Sopenharmony_ci reg = <4>; 40862306a36Sopenharmony_ci }; 40962306a36Sopenharmony_ci }; 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci i2c-mux { 41262306a36Sopenharmony_ci #address-cells = <1>; 41362306a36Sopenharmony_ci #size-cells = <0>; 41462306a36Sopenharmony_ci }; 41562306a36Sopenharmony_ci }; 41662306a36Sopenharmony_ci }; 417