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            hwInfo = [
200a7ce71fSopenharmony_ci                /*
210a7ce71fSopenharmony_ci                    Playback/Captrue, formats, rates, rate_min, rate_max, channels_min, channels_max,
220a7ce71fSopenharmony_ci                    buffer_bytes_max, period_bytes_min, period_bytes_max, periods_min, periods_max
230a7ce71fSopenharmony_ci                */
240a7ce71fSopenharmony_ci                1, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5,
250a7ce71fSopenharmony_ci                2, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5,
260a7ce71fSopenharmony_ci            ];
270a7ce71fSopenharmony_ci
280a7ce71fSopenharmony_ci            regConfig {
290a7ce71fSopenharmony_ci                /* reg, value */
300a7ce71fSopenharmony_ci                initSeqConfig = [
310a7ce71fSopenharmony_ci                    0x14,    0x04000002,
320a7ce71fSopenharmony_ci                    0x18,    0xFD200004,
330a7ce71fSopenharmony_ci                    0x1C,    0x00180018,
340a7ce71fSopenharmony_ci                    0x20,    0x8F8F0028,
350a7ce71fSopenharmony_ci                    0x24,    0x00005C5C,
360a7ce71fSopenharmony_ci                    0x28,    0x00130000,
370a7ce71fSopenharmony_ci                    0x2c,    0x00303E2E,
380a7ce71fSopenharmony_ci                    0x30,    0xFF035AC2,
390a7ce71fSopenharmony_ci                    0x34,    0x08000001,
400a7ce71fSopenharmony_ci                    0x38,    0x06062424,
410a7ce71fSopenharmony_ci                    0x3C,    0x0000C001,
420a7ce71fSopenharmony_ci                    0x14,    0x04000002
430a7ce71fSopenharmony_ci                ];
440a7ce71fSopenharmony_ci
450a7ce71fSopenharmony_ci                /*
460a7ce71fSopenharmony_ci                    Mixer
470a7ce71fSopenharmony_ci                    reg: register address
480a7ce71fSopenharmony_ci                    rreg: register address
490a7ce71fSopenharmony_ci                    shift: shift bits
500a7ce71fSopenharmony_ci                    rshift: rshift bits
510a7ce71fSopenharmony_ci                    min: min value
520a7ce71fSopenharmony_ci                    max: max value
530a7ce71fSopenharmony_ci                    mask: mask of value
540a7ce71fSopenharmony_ci                    invert: enum InvertVal 0-uninvert 1-invert
550a7ce71fSopenharmony_ci                    value: value
560a7ce71fSopenharmony_ci                */
570a7ce71fSopenharmony_ci                ctrlParamsSeqConfig = [
580a7ce71fSopenharmony_ci                    0x2004,  0x2004,  8,    8,    0x28,   0x7F,   0x7F,   0,    0,  //"Main Playback Volume"
590a7ce71fSopenharmony_ci                    0x3c,    0x3c,    24,   24,   0x0,    0x57,   0x7F,   1,    0,  //"Main Capture Volume"
600a7ce71fSopenharmony_ci                    0x38,    0x38,    31,   31,   0x0,    0x1,    0x1,    0,    0,  //"Playback Mute"
610a7ce71fSopenharmony_ci                    0x3c,    0x3c,    31,   31,   0x0,    0x1,    0x1,    0,    0,  //"Capture Mute"
620a7ce71fSopenharmony_ci                    0x20,    0x20,    16,   16,   0x0,    0xF,    0x1F,   0,    0,  //"Mic Left Gain"
630a7ce71fSopenharmony_ci                    0x20,    0x20,    24,   24,   0x0,    0xF,    0x1F,   0,    0,  //"Mic Right Gain"
640a7ce71fSopenharmony_ci                    0x2000,  0x2000,  16,   16,   0x0,    0x7,    0x7,    0,    0,  //"Render Channel Mode"
650a7ce71fSopenharmony_ci                    0x1000,  0x1000,  16,   16,   0x0,    0x7,    0x7,    0,    0   //"Capture Channel Mode"
660a7ce71fSopenharmony_ci                ];
670a7ce71fSopenharmony_ci
680a7ce71fSopenharmony_ci                controlsConfig = [
690a7ce71fSopenharmony_ci                    /*
700a7ce71fSopenharmony_ci                        "Master Playback Volume",
710a7ce71fSopenharmony_ci                        "Master Capture Volume",
720a7ce71fSopenharmony_ci                        "Playback Mute",
730a7ce71fSopenharmony_ci                        "Capture Mute",
740a7ce71fSopenharmony_ci                        "Mic Left Gain",
750a7ce71fSopenharmony_ci                        "Mic Right Gain",
760a7ce71fSopenharmony_ci                        "External Codec Enable",
770a7ce71fSopenharmony_ci                        "Internally Codec Enable",
780a7ce71fSopenharmony_ci                        "Render Channel Mode",
790a7ce71fSopenharmony_ci                        "Capture Channel Mode"
800a7ce71fSopenharmony_ci                    */
810a7ce71fSopenharmony_ci
820a7ce71fSopenharmony_ci                    /*array index, iface, mixer/mux, enable,*/
830a7ce71fSopenharmony_ci                    0,  2,  0,  0,
840a7ce71fSopenharmony_ci                    1,  2,  0,  1,
850a7ce71fSopenharmony_ci                    2,  2,  0,  1,
860a7ce71fSopenharmony_ci                    3,  2,  0,  1,
870a7ce71fSopenharmony_ci                    4,  2,  0,  1,
880a7ce71fSopenharmony_ci                    5,  2,  0,  1,
890a7ce71fSopenharmony_ci                    8,  2,  0,  0,
900a7ce71fSopenharmony_ci                    9,  2,  0,  0,
910a7ce71fSopenharmony_ci                ];
920a7ce71fSopenharmony_ci
930a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
940a7ce71fSopenharmony_ci                daiStartupSeqConfig = [
950a7ce71fSopenharmony_ci                    0x24,    0x24,    11,    11,    0x0,    0x1,    0x1,    0,   0x1    // adc_tune_En09
960a7ce71fSopenharmony_ci                ];
970a7ce71fSopenharmony_ci
980a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
990a7ce71fSopenharmony_ci                daiParamsSeqConfig = [
1000a7ce71fSopenharmony_ci                    0x30,    0x30,    13,   13,    0x0,    0x1F,   0x1F,    0,    0x0,    // i2s_frequency
1010a7ce71fSopenharmony_ci                    0x1C,    0x1C,    6,    6,     0x0,    0x3,    0x3,     0,    0x0,    // adc_mode_sel
1020a7ce71fSopenharmony_ci                    0x30,    0x30,    22,   22,    0x0,    0x3,    0x3,     0,    0x0,    // i2s_datawith
1030a7ce71fSopenharmony_ci                ];
1040a7ce71fSopenharmony_ci
1050a7ce71fSopenharmony_ci                // Mixer: reg, rreg, shift, rshift, min, max, mask, invert, value
1060a7ce71fSopenharmony_ci                ctrlSapmParamsSeqConfig = [
1070a7ce71fSopenharmony_ci                    0x20,    0x20,    23,    23,    0x0,    0x1,    0x1,    0,    0,     // LPGA MIC 0 -- connect MIC
1080a7ce71fSopenharmony_ci                    0x20,    0x20,    31,    31,    0x0,    0x1,    0x1,    0,    0,     // RPGA MIC 0 -- connect MIC
1090a7ce71fSopenharmony_ci                    0x30,    0x30,    27,    27,    0x0,    0x1,    0x1,    0,    0,     // dacl to dacr mixer
1100a7ce71fSopenharmony_ci                    0x30,    0x30,    26,    26,    0x0,    0x1,    0x1,    0,    0      // dacr to dacl mixer
1110a7ce71fSopenharmony_ci                ];
1120a7ce71fSopenharmony_ci
1130a7ce71fSopenharmony_ci                /* index = "ADCL", "ADCR", "DACL", "DACR", "LPGA", "RPGA", "SPKL", "SPKR", "MIC"*/
1140a7ce71fSopenharmony_ci                // sapmType, compNameIndex, reg, mask, shift, invert, kcontrolNews, kcontrolsNum
1150a7ce71fSopenharmony_ci                sapmComponent = [
1160a7ce71fSopenharmony_ci                    10,    0,     0x20,      0x1,       15,    1,     0,     0, // ADCL
1170a7ce71fSopenharmony_ci                    10,    1,     0x20,      0x1,       14,    1,     0,     0, // ADCR
1180a7ce71fSopenharmony_ci                    11,    2,     0x14,      0x1,       11,    1,     0,     0, // DACL
1190a7ce71fSopenharmony_ci                    11,    3,     0x14,      0x1,       12,    1,     0,     0, // DACR
1200a7ce71fSopenharmony_ci                    17,    4,     0x20,      0x1,       13,    1,     1,     1, // LPGA
1210a7ce71fSopenharmony_ci                    17,    5,     0x20,      0x1,       12,    1,     2,     1, // RPGA
1220a7ce71fSopenharmony_ci                    15,    6,     0xFFFF,    0xFFFF,    0,     0,     0,     0, // SPKL
1230a7ce71fSopenharmony_ci                    15,    7,     0xFFFF,    0xFFFF,    0,     0,     0,     0, // SPKR
1240a7ce71fSopenharmony_ci                    17,    52,    0xFFFF,    0xFFFF,    0,     0,     3,     1, // SPKL PGA
1250a7ce71fSopenharmony_ci                    17,    53,    0xFFFF,    0xFFFF,    0,     0,     4,     1, // SPKR PGA
1260a7ce71fSopenharmony_ci                    13,    40,    0xFFFF,    0xFFFF,    0,     0,     0,     0, // MIC1
1270a7ce71fSopenharmony_ci                    13,    41,    0xFFFF,    0xFFFF,    0,     0,     0,     0  // MIC2
1280a7ce71fSopenharmony_ci                ];
1290a7ce71fSopenharmony_ci
1300a7ce71fSopenharmony_ci                /* array index, iface, mixer/mux, enable */
1310a7ce71fSopenharmony_ci                sapmConfig = [
1320a7ce71fSopenharmony_ci                    0,    2,    0,    1,
1330a7ce71fSopenharmony_ci                    1,    2,    0,    1,
1340a7ce71fSopenharmony_ci                    2,    2,    0,    1,
1350a7ce71fSopenharmony_ci                    3,    2,    0,    1
1360a7ce71fSopenharmony_ci                ];
1370a7ce71fSopenharmony_ci            }
1380a7ce71fSopenharmony_ci        }
1390a7ce71fSopenharmony_ci        controller_0x120c1031 :: codec_controller {
1400a7ce71fSopenharmony_ci            match_attr = "hdf_codec_driver_ex";
1410a7ce71fSopenharmony_ci            serviceName = "codec_service_1";
1420a7ce71fSopenharmony_ci            codecDaiName = "tfa9879_codec_dai";
1430a7ce71fSopenharmony_ci
1440a7ce71fSopenharmony_ci            regConfig {
1450a7ce71fSopenharmony_ci                /*  regAddr: register address
1460a7ce71fSopenharmony_ci                    regValue: config register value
1470a7ce71fSopenharmony_ci                    mask: mask of value
1480a7ce71fSopenharmony_ci                    shift: shift bits
1490a7ce71fSopenharmony_ci                    max: max value
1500a7ce71fSopenharmony_ci                    min: min value
1510a7ce71fSopenharmony_ci                    invert: enum Tfa9879InvertVal 0-uninvert 1-invert
1520a7ce71fSopenharmony_ci                */
1530a7ce71fSopenharmony_ci
1540a7ce71fSopenharmony_ci                /* reg, value */
1550a7ce71fSopenharmony_ci                /* regAddr, regValue, mask, shift, max, min, invert, opsType */
1560a7ce71fSopenharmony_ci                /* reg, rreg, shift, value, min, max, mask, invert */
1570a7ce71fSopenharmony_ci                resetSeqConfig = [
1580a7ce71fSopenharmony_ci                    0x00,    0x0
1590a7ce71fSopenharmony_ci                ];
1600a7ce71fSopenharmony_ci
1610a7ce71fSopenharmony_ci                hwInfo = [
1620a7ce71fSopenharmony_ci                    /*
1630a7ce71fSopenharmony_ci                        Playback/Captrue, formats, rates, rate_min, rate_max, channels_min, channels_max,
1640a7ce71fSopenharmony_ci                        buffer_bytes_max, period_bytes_min, period_bytes_max, periods_min, periods_max
1650a7ce71fSopenharmony_ci                    */
1660a7ce71fSopenharmony_ci                    1, 0xF, 0xFF, 8000, 96000, 1, 2, 1, 2, 3, 4, 5,
1670a7ce71fSopenharmony_ci                ];
1680a7ce71fSopenharmony_ci
1690a7ce71fSopenharmony_ci                /* reg, value */
1700a7ce71fSopenharmony_ci                initSeqConfig = [
1710a7ce71fSopenharmony_ci                    0x00,    0x0001,
1720a7ce71fSopenharmony_ci                    0x01,    0x0a18,
1730a7ce71fSopenharmony_ci                    0x02,    0x0007,
1740a7ce71fSopenharmony_ci                    0x03,    0x0a18,
1750a7ce71fSopenharmony_ci                    0x04,    0x0007,
1760a7ce71fSopenharmony_ci                    0x05,    0x59DD,
1770a7ce71fSopenharmony_ci                    0x06,    0xC63E,
1780a7ce71fSopenharmony_ci                    0x07,    0x651A,
1790a7ce71fSopenharmony_ci                    0x08,    0xE53E,
1800a7ce71fSopenharmony_ci                    0x09,    0x4616,
1810a7ce71fSopenharmony_ci                    0x0A,    0xD33E,
1820a7ce71fSopenharmony_ci                    0x0B,    0x4DF3,
1830a7ce71fSopenharmony_ci                    0x0C,    0xEA3E,
1840a7ce71fSopenharmony_ci                    0x0D,    0x5EE0,
1850a7ce71fSopenharmony_ci                    0x0E,    0xF93E,
1860a7ce71fSopenharmony_ci                    0x0F,    0x0008,
1870a7ce71fSopenharmony_ci                    0x10,    0x92BA,
1880a7ce71fSopenharmony_ci                    0x11,    0x12A5,
1890a7ce71fSopenharmony_ci                    0x12,    0x0004,
1900a7ce71fSopenharmony_ci                    0x13,    0x1031,
1910a7ce71fSopenharmony_ci                    0x14,    0x0000
1920a7ce71fSopenharmony_ci                ];
1930a7ce71fSopenharmony_ci
1940a7ce71fSopenharmony_ci                /*  reg: register address
1950a7ce71fSopenharmony_ci                    rreg: register address
1960a7ce71fSopenharmony_ci                    shift: shift bits
1970a7ce71fSopenharmony_ci                    rshift: rshift bits
1980a7ce71fSopenharmony_ci                    min: min value
1990a7ce71fSopenharmony_ci                    max: max value
2000a7ce71fSopenharmony_ci                    mask: mask of value
2010a7ce71fSopenharmony_ci                    invert: enum InvertVal 0-uninvert 1-invert
2020a7ce71fSopenharmony_ci                    value: value
2030a7ce71fSopenharmony_ci                */
2040a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
2050a7ce71fSopenharmony_ci                ctrlParamsSeqConfig = [
2060a7ce71fSopenharmony_ci                    0x13,    0x13,    0,     0,     0x0,    0xBC,  0xFF,    1,   0x0,    // output volume
2070a7ce71fSopenharmony_ci                    0x14,    0x14,    9,     9,     0x0,    0x1,   0x1,     0,   0x0,    // output mute
2080a7ce71fSopenharmony_ci                    0x01,    0x01,    10,    10,    0x0,    0x3,   0x3,     0,   0x0     // output channel
2090a7ce71fSopenharmony_ci                ];
2100a7ce71fSopenharmony_ci
2110a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
2120a7ce71fSopenharmony_ci                daiStartupSeqConfig = [
2130a7ce71fSopenharmony_ci                    0x00,    0x00,    0,    0,    0x0,    0xF,    0xF,    0,   0x9    // work
2140a7ce71fSopenharmony_ci                ];
2150a7ce71fSopenharmony_ci
2160a7ce71fSopenharmony_ci                /* reg, rreg, shift, rshift, min, max, mask, invert, value */
2170a7ce71fSopenharmony_ci                daiParamsSeqConfig = [
2180a7ce71fSopenharmony_ci                    0x01,    0x01,    6,    6,    0x0,    0xF,   0xF,    0,    0x0,    // i2s_frequency
2190a7ce71fSopenharmony_ci                    0x01,    0x01,    3,    3,    0x0,    0x7,   0x7,    0,    0x0,    // i2s_format
2200a7ce71fSopenharmony_ci                    0x01,    0x01,    10,   10,   0x0,    0x3,   0x3,    0,    0x0     // i2s_channel
2210a7ce71fSopenharmony_ci                ];
2220a7ce71fSopenharmony_ci
2230a7ce71fSopenharmony_ci                /*array index, iface, mixer/mux, enable,*/
2240a7ce71fSopenharmony_ci                controlsConfig = [
2250a7ce71fSopenharmony_ci                    /*
2260a7ce71fSopenharmony_ci                        "Master Playback Volume",
2270a7ce71fSopenharmony_ci                        "Playback Mute",
2280a7ce71fSopenharmony_ci                        "Render Channel Mode"
2290a7ce71fSopenharmony_ci                    */
2300a7ce71fSopenharmony_ci                    0,  2,  0,  1,
2310a7ce71fSopenharmony_ci                    2,  2,  0,  1,
2320a7ce71fSopenharmony_ci                    8,  2,  0,  1
2330a7ce71fSopenharmony_ci                ];
2340a7ce71fSopenharmony_ci            }
2350a7ce71fSopenharmony_ci        }
2360a7ce71fSopenharmony_ci    }
2370a7ce71fSopenharmony_ci}
238