10a7ce71fSopenharmony_ciroot {
20a7ce71fSopenharmony_ci    platform {
30a7ce71fSopenharmony_ci        template codec_controller {
40a7ce71fSopenharmony_ci            match_attr = "";
50a7ce71fSopenharmony_ci            serviceName = "";
60a7ce71fSopenharmony_ci            codecDaiName = "";
70a7ce71fSopenharmony_ci        }
80a7ce71fSopenharmony_ci        controller_0x120c1030 :: codec_controller {
90a7ce71fSopenharmony_ci            match_attr = "hdf_codec_driver";
100a7ce71fSopenharmony_ci            serviceName = "codec_service_0";
110a7ce71fSopenharmony_ci            codecDaiName = "codec_dai";
120a7ce71fSopenharmony_ci
130a7ce71fSopenharmony_ci            idInfo {
140a7ce71fSopenharmony_ci                chipName = "hi3516";
150a7ce71fSopenharmony_ci                chipIdRegister = 0x113c0000;
160a7ce71fSopenharmony_ci                chipIdSize = 0x1000;
170a7ce71fSopenharmony_ci            }
180a7ce71fSopenharmony_ci
190a7ce71fSopenharmony_ci            regConfig {
200a7ce71fSopenharmony_ci                /* reg, value */
210a7ce71fSopenharmony_ci                initSeqConfig = [
220a7ce71fSopenharmony_ci                    0x14,    0x04000002,
230a7ce71fSopenharmony_ci                    0x18,    0xFD200004,
240a7ce71fSopenharmony_ci                    0x1C,    0x00180018,
250a7ce71fSopenharmony_ci                    0x20,    0x83830028,
260a7ce71fSopenharmony_ci                    0x24,    0x00005C5C,
270a7ce71fSopenharmony_ci                    0x28,    0x00130000,
280a7ce71fSopenharmony_ci                    0x30,    0xFF035A00,
290a7ce71fSopenharmony_ci                    0x34,    0x08000001,
300a7ce71fSopenharmony_ci                    0x38,    0x06062424,
310a7ce71fSopenharmony_ci                    0x3C,    0x1E1EC001,
320a7ce71fSopenharmony_ci                    0x14,    0x04000002
330a7ce71fSopenharmony_ci                ];
340a7ce71fSopenharmony_ci
350a7ce71fSopenharmony_ci                /*  reg: register address
360a7ce71fSopenharmony_ci                    rreg: register address
370a7ce71fSopenharmony_ci                    shift: shift bits
380a7ce71fSopenharmony_ci                    rshift: rshift bits
390a7ce71fSopenharmony_ci                    min: min value
400a7ce71fSopenharmony_ci                    max: max value
410a7ce71fSopenharmony_ci                    mask: mask of value
420a7ce71fSopenharmony_ci                    invert: enum InvertVal 0-uninvert 1-invert
430a7ce71fSopenharmony_ci                    value: value
440a7ce71fSopenharmony_ci                */
450a7ce71fSopenharmony_ci                ctrlParamsSeqConfig = [
460a7ce71fSopenharmony_ci                    0x2004,  0x2004,  8,    8,    0x28,   0x7F,   0x7F,   0,    0,  //"Main Playback Volume"
470a7ce71fSopenharmony_ci                    0x3c,    0x3c,    24,   24,   0x0,    0x57,   0x7F,   1,    0,  //"Main Capture Volume"
480a7ce71fSopenharmony_ci                    0x38,    0x38,    31,   31,   0x0,    0x1,    0x1,    0,    0,  //"Playback Mute"
490a7ce71fSopenharmony_ci                    0x3c,    0x3c,    31,   31,   0x0,    0x1,    0x1,    0,    0,  //"Capture Mute"
500a7ce71fSopenharmony_ci                    0x20,    0x20,    16,   16,   0x0,    0xF,    0x1F,   0,    0,  //"Mic Left Gain"
510a7ce71fSopenharmony_ci                    0x20,    0x20,    24,   24,   0x0,    0xF,    0x1F,   0,    0,  //"Mic Right Gain"
520a7ce71fSopenharmony_ci                    0x2000,  0x2000,  16,   16,   0x0,    0x7,    0x7,    0,    0,  //"Render Channel Mode"
530a7ce71fSopenharmony_ci                    0x1000,  0x1000,  16,   16,   0x0,    0x7,    0x7,    0,    0   //"Capture Channel Mode"
540a7ce71fSopenharmony_ci                ];
550a7ce71fSopenharmony_ci
560a7ce71fSopenharmony_ci                controlsConfig = [
570a7ce71fSopenharmony_ci                    /*
580a7ce71fSopenharmony_ci                        "Master Playback Volume",
590a7ce71fSopenharmony_ci                        "Master Capture Volume",
600a7ce71fSopenharmony_ci                        "Playback Mute",
610a7ce71fSopenharmony_ci                        "Capture Mute",
620a7ce71fSopenharmony_ci                        "Mic Left Gain",
630a7ce71fSopenharmony_ci                        "Mic Right Gain",
640a7ce71fSopenharmony_ci                        "External Codec Enable",
650a7ce71fSopenharmony_ci                        "Internally Codec Enable",
660a7ce71fSopenharmony_ci                        "Render Channel Mode",
670a7ce71fSopenharmony_ci                        "Capture Channel Mode"
680a7ce71fSopenharmony_ci                    */
690a7ce71fSopenharmony_ci
700a7ce71fSopenharmony_ci                    /*array index, iface, enable*/
710a7ce71fSopenharmony_ci                    0,  0,  0,
720a7ce71fSopenharmony_ci                    1,  1,  1,
730a7ce71fSopenharmony_ci                    2,  0,  1,
740a7ce71fSopenharmony_ci                    3,  1,  1,
750a7ce71fSopenharmony_ci                    4,  2,  1,
760a7ce71fSopenharmony_ci                    5,  2,  1,
770a7ce71fSopenharmony_ci                    8,  6,  0,
780a7ce71fSopenharmony_ci                    9,  6,  0,
790a7ce71fSopenharmony_ci                ];
800a7ce71fSopenharmony_ci
810a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
820a7ce71fSopenharmony_ci                daiStartupSeqConfig = [
830a7ce71fSopenharmony_ci                    0x24,    0x24,    11,    11,    0x0,    0x1,    0x1,    0,   0x1    // adc_tune_En09
840a7ce71fSopenharmony_ci                ];
850a7ce71fSopenharmony_ci
860a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
870a7ce71fSopenharmony_ci                daiParamsSeqConfig = [
880a7ce71fSopenharmony_ci                    0x30,    0x30,    13,   13,    0x0,    0x1F,   0x1F,    0,    0x0,    // i2s_frequency
890a7ce71fSopenharmony_ci                    0x1C,    0x1C,    6,    6,     0x0,    0x3,    0x3,     0,    0x0,    // adc_mode_sel
900a7ce71fSopenharmony_ci                    0x30,    0x30,    22,   22,    0x0,    0x3,    0x3,     0,    0x0,    // i2s_datawith
910a7ce71fSopenharmony_ci                ];
920a7ce71fSopenharmony_ci
930a7ce71fSopenharmony_ci                ctrlSapmParamsSeqConfig = [
940a7ce71fSopenharmony_ci                    0x20,    0x20,    23,    23,    0x0,    0x1,    0x1,    0,    0,     //LPGA MIC 0 -- connect MIC
950a7ce71fSopenharmony_ci                    0x20,    0x20,    31,    31,    0x0,    0x1,    0x1,    0,    0,     //RPGA MIC 0 -- connect MIC
960a7ce71fSopenharmony_ci                    0x30,    0x30,    27,    27,    0x0,    0x1,    0x1,    0,    0,     //dacl to dacr mixer
970a7ce71fSopenharmony_ci                    0x30,    0x30,    26,    26,    0x0,    0x1,    0x1,    0,    0      //dacr to dacl mixer
980a7ce71fSopenharmony_ci                ];
990a7ce71fSopenharmony_ci
1000a7ce71fSopenharmony_ci                /* index = "ADCL", "ADCR", "DACL", "DACR", "LPGA", "RPGA", "SPKL", "SPKR", "MIC"*/
1010a7ce71fSopenharmony_ci                sapmComponent = [
1020a7ce71fSopenharmony_ci                    10,    0,    0x20,    0x1,    15,    1,     0,     0, //ADCL
1030a7ce71fSopenharmony_ci                    10,    1,    0x20,    0x1,    14,    1,     0,     0, //ADCR
1040a7ce71fSopenharmony_ci                    11,    2,    0x14,    0x1,    11,    1,     0,     0, //DACL
1050a7ce71fSopenharmony_ci                    11,    3,    0x14,    0x1,    12,    1,     0,     0, //DACR
1060a7ce71fSopenharmony_ci                    8,     4,    0x20,    0x1,    13,    1,     1,     1, //LPGA
1070a7ce71fSopenharmony_ci                    8,     5,    0x20,    0x1,    12,    1,     2,     1, //RPGA
1080a7ce71fSopenharmony_ci                    15,    6,     0,      0x1,    0,     0,     3,     1, //SPKL
1090a7ce71fSopenharmony_ci                    15,    7,     0,      0x1,    0,     0,     4,     1, //SPKR
1100a7ce71fSopenharmony_ci                    0,     8,     0,      0x1,    0,     0,     0,     0  //MIC
1110a7ce71fSopenharmony_ci                ];
1120a7ce71fSopenharmony_ci
1130a7ce71fSopenharmony_ci                /*array index, iface, enable*/
1140a7ce71fSopenharmony_ci                sapmConfig = [
1150a7ce71fSopenharmony_ci                    0,    5,    1,
1160a7ce71fSopenharmony_ci                    1,    5,    1,
1170a7ce71fSopenharmony_ci                    2,    0,    1,
1180a7ce71fSopenharmony_ci                    3,    0,    1
1190a7ce71fSopenharmony_ci                ];
1200a7ce71fSopenharmony_ci            }
1210a7ce71fSopenharmony_ci        }
1220a7ce71fSopenharmony_ci        controller_0x120c1031 :: codec_controller {
1230a7ce71fSopenharmony_ci            match_attr = "hdf_codec_driver_ex";
1240a7ce71fSopenharmony_ci            serviceName = "codec_service_1";
1250a7ce71fSopenharmony_ci            codecDaiName = "accessory_dai";
1260a7ce71fSopenharmony_ci
1270a7ce71fSopenharmony_ci            regConfig {
1280a7ce71fSopenharmony_ci                /*  regAddr: register address
1290a7ce71fSopenharmony_ci                    regValue: config register value
1300a7ce71fSopenharmony_ci                    mask: mask of value
1310a7ce71fSopenharmony_ci                    shift: shift bits
1320a7ce71fSopenharmony_ci                    max: max value
1330a7ce71fSopenharmony_ci                    min: min value
1340a7ce71fSopenharmony_ci                    invert: enum Tfa9879InvertVal 0-uninvert 1-invert
1350a7ce71fSopenharmony_ci                */
1360a7ce71fSopenharmony_ci
1370a7ce71fSopenharmony_ci                /* reg, value */
1380a7ce71fSopenharmony_ci                /* regAddr, regValue, mask, shift, max, min, invert, opsType */
1390a7ce71fSopenharmony_ci                /* reg, rreg, shift, value, min, max, mask, invert */
1400a7ce71fSopenharmony_ci                resetSeqConfig = [
1410a7ce71fSopenharmony_ci                    0x00,    0x0
1420a7ce71fSopenharmony_ci                ];
1430a7ce71fSopenharmony_ci
1440a7ce71fSopenharmony_ci                /* reg, value */
1450a7ce71fSopenharmony_ci                initSeqConfig = [
1460a7ce71fSopenharmony_ci                    0x00,    0x0001,
1470a7ce71fSopenharmony_ci                    0x01,    0x0a18,
1480a7ce71fSopenharmony_ci                    0x02,    0x0007,
1490a7ce71fSopenharmony_ci                    0x03,    0x0a18,
1500a7ce71fSopenharmony_ci                    0x04,    0x0007,
1510a7ce71fSopenharmony_ci                    0x05,    0x59DD,
1520a7ce71fSopenharmony_ci                    0x06,    0xC63E,
1530a7ce71fSopenharmony_ci                    0x07,    0x651A,
1540a7ce71fSopenharmony_ci                    0x08,    0xE53E,
1550a7ce71fSopenharmony_ci                    0x09,    0x4616,
1560a7ce71fSopenharmony_ci                    0x0A,    0xD33E,
1570a7ce71fSopenharmony_ci                    0x0B,    0x4DF3,
1580a7ce71fSopenharmony_ci                    0x0C,    0xEA3E,
1590a7ce71fSopenharmony_ci                    0x0D,    0x5EE0,
1600a7ce71fSopenharmony_ci                    0x0E,    0xF93E,
1610a7ce71fSopenharmony_ci                    0x0F,    0x0008,
1620a7ce71fSopenharmony_ci                    0x10,    0x92BA,
1630a7ce71fSopenharmony_ci                    0x11,    0x12A5,
1640a7ce71fSopenharmony_ci                    0x12,    0x0004,
1650a7ce71fSopenharmony_ci                    0x13,    0x1031,
1660a7ce71fSopenharmony_ci                    0x14,    0x0000
1670a7ce71fSopenharmony_ci                ];
1680a7ce71fSopenharmony_ci
1690a7ce71fSopenharmony_ci                /*  reg: register address
1700a7ce71fSopenharmony_ci                    rreg: register address
1710a7ce71fSopenharmony_ci                    shift: shift bits
1720a7ce71fSopenharmony_ci                    rshift: rshift bits
1730a7ce71fSopenharmony_ci                    min: min value
1740a7ce71fSopenharmony_ci                    max: max value
1750a7ce71fSopenharmony_ci                    mask: mask of value
1760a7ce71fSopenharmony_ci                    invert: enum InvertVal 0-uninvert 1-invert
1770a7ce71fSopenharmony_ci                    value: value
1780a7ce71fSopenharmony_ci                */
1790a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
1800a7ce71fSopenharmony_ci                ctrlParamsSeqConfig = [
1810a7ce71fSopenharmony_ci                    0x13,    0x13,    0,     0,     0x0,    0xBC,  0xFF,    1,   0x0,    // output volume
1820a7ce71fSopenharmony_ci                    0x14,    0x14,    9,     9,     0x0,    0x1,   0x1,     0,   0x0,    // output mute
1830a7ce71fSopenharmony_ci                    0x01,    0x01,    10,    10,    0x0,    0x3,   0x3,     0,   0x0     // output channel
1840a7ce71fSopenharmony_ci                ];
1850a7ce71fSopenharmony_ci
1860a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
1870a7ce71fSopenharmony_ci                daiStartupSeqConfig = [
1880a7ce71fSopenharmony_ci                    0x00,    0x00,    0,    0,    0x0,    0xF,    0xF,    0,   0x9    // work
1890a7ce71fSopenharmony_ci                ];
1900a7ce71fSopenharmony_ci
1910a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
1920a7ce71fSopenharmony_ci                daiParamsSeqConfig = [
1930a7ce71fSopenharmony_ci                    0x01,    0x01,    6,    6,    0x0,    0xF,   0xF,    0,    0x0,    // i2s_frequency
1940a7ce71fSopenharmony_ci                    0x01,    0x01,    3,    3,    0x0,    0x7,   0x7,    0,    0x0,    // i2s_format
1950a7ce71fSopenharmony_ci                    0x01,    0x01,    10,   10,   0x0,    0x3,   0x3,    0,    0x0     // i2s_channel
1960a7ce71fSopenharmony_ci                ];
1970a7ce71fSopenharmony_ci
1980a7ce71fSopenharmony_ci                controlsConfig = [
1990a7ce71fSopenharmony_ci                    /*
2000a7ce71fSopenharmony_ci                        "Master Playback Volume",
2010a7ce71fSopenharmony_ci                        "Playback Mute",
2020a7ce71fSopenharmony_ci                        "Render Channel Mode"
2030a7ce71fSopenharmony_ci                    */
2040a7ce71fSopenharmony_ci                    /*array index, iface, enable*/
2050a7ce71fSopenharmony_ci                    0,  0,  1,
2060a7ce71fSopenharmony_ci                    2,  0,  1,
2070a7ce71fSopenharmony_ci                    8,  6,  1
2080a7ce71fSopenharmony_ci                ];
2090a7ce71fSopenharmony_ci            }
2100a7ce71fSopenharmony_ci        }
2110a7ce71fSopenharmony_ci    }
2120a7ce71fSopenharmony_ci}
213