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