Audio Driver (with bounty!)


Just for the fun of it, I decided to update my abefw_wrangler to convert the old firmware into json :D
JSON:
[
    {
        "type": 5,
        "type_string": "SND_SOC_FW_COEFF",
        "vendor_type": 0,
        "vendor_version": 996000,
        "size": 1100,
        "coefficients": {
            "count": 5,
            "c_header": "SndSocFwKControl",
            "enum": {
                "reg": 59,
                "reg2": 0,
                "shift_l": 0,
                "shift_r": 0,
                "max": 5,
                "mask": 4294967295,
                "count": 0,
                "values": {
                    "Flat Response": 0,
                    "800Hz HPF 0dB": 0,
                    "800Hz HPF -12dB": 0,
                    "800Hz HPF -20dB": 0,
                    "4000Hz LPF 0dB": 0
                },
                "c_header": "SndSocFwEnumControl"
            },
            "data": {
                "count": 5,
                "size": 500,
                "id": 59,
                "c_header": "SndSocFileCoeffData"
            }
        }
    },
    {
        "type": 5,
        "type_string": "SND_SOC_FW_COEFF",
        "vendor_type": 0,
        "vendor_version": 996000,
        "size": 1100,
        "coefficients": {
            "count": 5,
            "c_header": "SndSocFwKControl",
            "enum": {
                "reg": 60,
                "reg2": 0,
                "shift_l": 0,
                "shift_r": 0,
                "max": 5,
                "mask": 4294967295,
                "count": 0,
                "values": {
                    "Flat Response": 0,
                    "800Hz HPF 0dB": 0,
                    "800Hz HPF -12dB": 0,
                    "800Hz HPF -20dB": 0,
                    "450Hz HPF 0dB": 0
                },
                "c_header": "SndSocFwEnumControl"
            },
            "data": {
                "count": 5,
                "size": 500,
                "id": 60,
                "c_header": "SndSocFileCoeffData"
            }
        }
    },
    {
        "type": 5,
        "type_string": "SND_SOC_FW_COEFF",
        "vendor_type": 0,
        "vendor_version": 996000,
        "size": 1100,
        "coefficients": {
            "count": 5,
            "c_header": "SndSocFwKControl",
            "enum": {
                "reg": 61,
                "reg2": 0,
                "shift_l": 0,
                "shift_r": 0,
                "max": 5,
                "mask": 4294967295,
                "count": 0,
                "values": {
                    "Flat Response": 0,
                    "800Hz HPF 0dB": 0,
                    "800Hz HPF -12dB": 0,
                    "800Hz HPF -20dB": 0,
                    "450Hz HPF 0dB": 0
                },
                "c_header": "SndSocFwEnumControl"
            },
            "data": {
                "count": 5,
                "size": 500,
                "id": 61,
                "c_header": "SndSocFileCoeffData"
            }
        }
    },
    {
        "type": 5,
        "type_string": "SND_SOC_FW_COEFF",
        "vendor_type": 0,
        "vendor_version": 996000,
        "size": 1100,
        "coefficients": {
            "count": 4,
            "c_header": "SndSocFwKControl",
            "enum": {
                "reg": 62,
                "reg2": 0,
                "shift_l": 0,
                "shift_r": 0,
                "max": 4,
                "mask": 4294967295,
                "count": 0,
                "values": {
                    "Flat Response": 0,
                    "800Hz HPF 0dB": 0,
                    "800Hz HPF -12dB": 0,
                    "800Hz HPF -20dB": 0
                },
                "c_header": "SndSocFwEnumControl"
            },
            "data": {
                "count": 4,
                "size": 144,
                "id": 62,
                "c_header": "SndSocFileCoeffData"
            }
        }
    },
    {
        "type": 5,
        "type_string": "SND_SOC_FW_COEFF",
        "vendor_type": 0,
        "vendor_version": 996000,
        "size": 1100,
        "coefficients": {
            "count": 3,
            "c_header": "SndSocFwKControl",
            "enum": {
                "reg": 64,
                "reg2": 0,
                "shift_l": 0,
                "shift_r": 0,
                "max": 3,
                "mask": 4294967295,
                "count": 0,
                "values": {
                    "20kHz LPF 0dB": 0,
                    "20kHz LPF -12dB": 0,
                    "20kHz LPF -15dB": 0
                },
                "c_header": "SndSocFwEnumControl"
            },
            "data": {
                "count": 3,
                "size": 228,
                "id": 64,
                "c_header": "SndSocFileCoeffData"
            }
        }
    },
    {
        "type": 5,
        "type_string": "SND_SOC_FW_COEFF",
        "vendor_type": 0,
        "vendor_version": 996000,
        "size": 1100,
        "coefficients": {
            "count": 3,
            "c_header": "SndSocFwKControl",
            "enum": {
                "reg": 63,
                "reg2": 0,
                "shift_l": 0,
                "shift_r": 0,
                "max": 3,
                "mask": 4294967295,
                "count": 0,
                "values": {
                    "20kHz LPF 0dB": 0,
                    "20kHz LPF -12dB": 0,
                    "20kHz LPF -15dB": 0
                },
                "c_header": "SndSocFwEnumControl"
            },
            "data": {
                "count": 3,
                "size": 228,
                "id": 63,
                "c_header": "SndSocFileCoeffData"
            }
        }
    },
    {
        "type": 1,
        "type_string": "SND_SOC_FW_MIXER",
        "vendor_type": 0,
        "vendor_version": 0,
        "size": 2348,
        "mixer": {
            "count": 26,
            "c_header": "SndSocFwKControl",
            "controls": [
                {
                    "name": "DL1 Media Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 14,
                        "rreg": 14,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL1 Tones Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 17,
                        "rreg": 17,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL1 Voice Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 16,
                        "rreg": 16,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL1 Capture Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 15,
                        "rreg": 15,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL2 Media Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 18,
                        "rreg": 18,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL2 Tones Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 21,
                        "rreg": 21,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL2 Voice Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 20,
                        "rreg": 20,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL2 Capture Playback Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 19,
                        "rreg": 19,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "VXREC Media Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 26,
                        "rreg": 26,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "VXREC Tones Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 27,
                        "rreg": 27,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "VXREC Voice DL Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 28,
                        "rreg": 28,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "VXREC Voice UL Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 29,
                        "rreg": 29,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "AUDUL Media Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 30,
                        "rreg": 30,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "AUDUL Tones Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 31,
                        "rreg": 31,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "AUDUL Voice UL Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 32,
                        "rreg": 32,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "AUDUL Voice DL Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 33,
                        "rreg": 33,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "SDT UL Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 24,
                        "rreg": 24,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "SDT DL Volume",
                    "index": 8816129,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 25,
                        "rreg": 25,
                        "shift": 0,
                        "rshift": 0,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DMIC1 UL Volume",
                    "index": 8750337,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 22,
                        "rreg": 22,
                        "shift": 0,
                        "rshift": 1,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DMIC2 UL Volume",
                    "index": 8750337,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 23,
                        "rreg": 23,
                        "shift": 2,
                        "rshift": 3,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DMIC3 UL Volume",
                    "index": 8750337,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 24,
                        "rreg": 24,
                        "shift": 4,
                        "rshift": 5,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "AMIC UL Volume",
                    "index": 8750337,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 25,
                        "rreg": 25,
                        "shift": 6,
                        "rshift": 7,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "BT UL Volume",
                    "index": 8750337,
                    "access": 19,
                    "tlv_size": 16,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 149,
                        "platform_max": 149,
                        "reg": 29,
                        "rreg": 29,
                        "shift": 34,
                        "rshift": 35,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl",
                        "tlv": {
                            "numid": 1,
                            "length": 8,
                            "c_header": "SndSocFwControlTlv"
                        }
                    }
                },
                {
                    "name": "DL1 Mono Mixer",
                    "index": 8487169,
                    "access": 0,
                    "tlv_size": 0,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 1,
                        "platform_max": 1,
                        "reg": 14,
                        "rreg": 14,
                        "shift": 4,
                        "rshift": 4,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl"
                    }
                },
                {
                    "name": "DL2 Mono Mixer",
                    "index": 8487169,
                    "access": 0,
                    "tlv_size": 0,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 1,
                        "platform_max": 1,
                        "reg": 15,
                        "rreg": 15,
                        "shift": 5,
                        "rshift": 5,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl"
                    }
                },
                {
                    "name": "AUDUL Mono Mixer",
                    "index": 8487169,
                    "access": 0,
                    "tlv_size": 0,
                    "id_info": 1,
                    "c_header": "SndSocFwControlHeader",
                    "mixer": {
                        "min": 0,
                        "max": 1,
                        "platform_max": 1,
                        "reg": 16,
                        "rreg": 16,
                        "shift": 6,
                        "rshift": 6,
                        "invert": 0,
                        "c_header": "SndSocFwMixerControl"
                    }
                }
            ]
        }
    },
    {
        "type": 3,
        "type_string": "SND_SOC_FW_DAPM_WIDGET",
        "vendor_type": 0,
        "vendor_version": 0,
        "size": 16532,
        "dapm_widget": {
            "count": 46,
            "c_header": "SndSocFwKControl",
            "widgets": [
                {
                    "id": 23,
                    "name": "TONES_DL",
                    "sname": "",
                    "reg": 16,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "VX_DL",
                    "sname": "",
                    "reg": 17,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "VX_UL",
                    "sname": "",
                    "reg": 18,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "MM_UL1",
                    "sname": "",
                    "reg": 19,
                    "shift": 2,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "MM_UL2",
                    "sname": "",
                    "reg": 20,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "MM_DL",
                    "sname": "",
                    "reg": 21,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "MODEM_DL",
                    "sname": "",
                    "reg": 22,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "MODEM_UL",
                    "sname": "",
                    "reg": 23,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "PDM_UL1",
                    "sname": "",
                    "reg": 24,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "PDM_DL1",
                    "sname": "",
                    "reg": 25,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "PDM_DL2",
                    "sname": "",
                    "reg": 26,
                    "shift": 2,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "BT_VX_UL",
                    "sname": "BT Capture",
                    "reg": 27,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "BT_VX_DL",
                    "sname": "BT Playback",
                    "reg": 28,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "MM_EXT_UL",
                    "sname": "FM Capture",
                    "reg": 29,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 24,
                    "name": "MM_EXT_DL",
                    "sname": "FM Playback",
                    "reg": 30,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "DMIC0",
                    "sname": "DMIC0 Capture",
                    "reg": 31,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "DMIC1",
                    "sname": "DMIC1 Capture",
                    "reg": 32,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 23,
                    "name": "DMIC2",
                    "sname": "DMIC2 Capture",
                    "reg": 33,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 2,
                    "name": "MUX_UL00",
                    "sname": "",
                    "reg": 34,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 37,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL01",
                    "sname": "",
                    "reg": 35,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 38,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL02",
                    "sname": "",
                    "reg": 36,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 39,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL03",
                    "sname": "",
                    "reg": 37,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 40,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL04",
                    "sname": "",
                    "reg": 38,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 41,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL05",
                    "sname": "",
                    "reg": 39,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 42,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL10",
                    "sname": "",
                    "reg": 40,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 43,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_UL11",
                    "sname": "",
                    "reg": 41,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 44,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_VX0",
                    "sname": "",
                    "reg": 42,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 45,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "MUX_VX1",
                    "sname": "",
                    "reg": 43,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Route",
                            "index": 8552966,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 6,
                            "c_header": "SndSocFwControlHeader",
                            "enum": {
                                "reg": 46,
                                "reg2": 0,
                                "shift_l": 0,
                                "shift_r": 0,
                                "max": 15,
                                "mask": 15,
                                "count": 0,
                                "values": {
                                    "None": 0,
                                    "DMic0L": 0,
                                    "DMic0R": 0,
                                    "DMic1L": 0,
                                    "DMic1R": 0,
                                    "DMic2L": 0,
                                    "DMic2R": 0,
                                    "BT Left": 0,
                                    "BT Right": 0,
                                    "MMExt Left": 0,
                                    "MMExt Right": 0,
                                    "AMic0": 0,
                                    "AMic1": 0,
                                    "VX Left": 0,
                                    "VX Right": 0
                                },
                                "c_header": "SndSocFwEnumControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "DL1 Mixer",
                    "sname": "",
                    "reg": 44,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 4,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Tones",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 17,
                                "rreg": 17,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Voice",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 16,
                                "rreg": 16,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Capture",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 15,
                                "rreg": 15,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Multimedia",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 14,
                                "rreg": 14,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "DL2 Mixer",
                    "sname": "",
                    "reg": 45,
                    "shift": 2,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 4,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Tones",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 21,
                                "rreg": 21,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Voice",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 20,
                                "rreg": 20,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Capture",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 19,
                                "rreg": 19,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Multimedia",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 18,
                                "rreg": 18,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 7,
                    "name": "DL1 Media Volume",
                    "sname": "",
                    "reg": 46,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "Voice Capture Mixer",
                    "sname": "",
                    "reg": 47,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 3,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Tones Playback",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 31,
                                "rreg": 31,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Media Playback",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 30,
                                "rreg": 30,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Capture",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 32,
                                "rreg": 32,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "Capture Mixer",
                    "sname": "",
                    "reg": 48,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 4,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Tones",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 27,
                                "rreg": 27,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Voice Playback",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 29,
                                "rreg": 29,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Voice Capture",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 28,
                                "rreg": 28,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Media Playback",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 26,
                                "rreg": 26,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "Sidetone Mixer",
                    "sname": "",
                    "reg": 49,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 2,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Capture",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 24,
                                "rreg": 24,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        },
                        {
                            "name": "Playback",
                            "index": 8421377,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 25,
                                "rreg": 25,
                                "shift": 0,
                                "rshift": 0,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "DL1 PDM",
                    "sname": "",
                    "reg": 50,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Switch",
                            "index": 8683521,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 36,
                                "rreg": 36,
                                "shift": 1,
                                "rshift": 1,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "DL1 BT_VX",
                    "sname": "",
                    "reg": 51,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Switch",
                            "index": 8683521,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 36,
                                "rreg": 36,
                                "shift": 2,
                                "rshift": 2,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "DL1 MM_EXT",
                    "sname": "",
                    "reg": 52,
                    "shift": 1,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 1,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": [
                        {
                            "name": "Switch",
                            "index": 8683521,
                            "access": 0,
                            "tlv_size": 0,
                            "id_info": 1,
                            "c_header": "SndSocFwControlHeader",
                            "mixer": {
                                "min": 0,
                                "max": 1,
                                "platform_max": 1,
                                "reg": 36,
                                "rreg": 36,
                                "shift": 3,
                                "rshift": 3,
                                "invert": 0,
                                "c_header": "SndSocFwMixerControl"
                            }
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "Sidetone Capture VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "Voice Capture VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "DL1 Capture VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "DL2 Capture VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "VX UL VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "VX DL VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 5,
                    "name": "MM VMixer",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 1,
                    "name": "BE_OUT",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                },
                {
                    "id": 0,
                    "name": "BE_IN",
                    "sname": "",
                    "reg": -1,
                    "shift": 0,
                    "mask": 0,
                    "invert": false,
                    "ignore_suspend": false,
                    "kcontrol_count": 0,
                    "c_header": "SndSocFwDapmWidget",
                    "controls": []
                }
            ]
        }
    },
    {
        "type": 2,
        "type_string": "SND_SOC_FW_DAPM_GRAPH",
        "vendor_type": 0,
        "vendor_version": 0,
        "size": 19684,
        "dapm_graph": {
            "count": 205,
            "c_header": "SndSocFwKControl",
            "routes": [
                {
                    "sink": "MUX_UL00",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL00",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL1",
                    "control": null,
                    "source": "MUX_UL00",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL01",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL1",
                    "control": null,
                    "source": "MUX_UL01",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL02",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL1",
                    "control": null,
                    "source": "MUX_UL02",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL03",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL1",
                    "control": null,
                    "source": "MUX_UL03",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL04",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL1",
                    "control": null,
                    "source": "MUX_UL04",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL05",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL1",
                    "control": null,
                    "source": "MUX_UL05",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL10",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL2",
                    "control": null,
                    "source": "MUX_UL10",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_UL11",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_UL2",
                    "control": null,
                    "source": "MUX_UL11",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX0",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "DMic0L",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "DMic0R",
                    "source": "DMIC0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "DMic1L",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "DMic1R",
                    "source": "DMIC1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "DMic2L",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "DMic2R",
                    "source": "DMIC2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "BT Left",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "BT Right",
                    "source": "BT_VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "MMExt Left",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "MMExt Right",
                    "source": "MM_EXT_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "AMic0",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "AMic1",
                    "source": "PDM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "VX Left",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MUX_VX1",
                    "control": "VX Right",
                    "source": "Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 Mixer",
                    "control": "Tones",
                    "source": "TONES_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 Mixer",
                    "control": "Voice",
                    "source": "VX DL VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 Mixer",
                    "control": "Capture",
                    "source": "DL1 Capture VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 Capture VMixer",
                    "control": null,
                    "source": "MUX_UL10",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 Capture VMixer",
                    "control": null,
                    "source": "MUX_UL11",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 Mixer",
                    "control": "Multimedia",
                    "source": "MM_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Sidetone Mixer",
                    "control": "Playback",
                    "source": "DL1 Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Sidetone Mixer",
                    "control": "Capture",
                    "source": "Sidetone Capture VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Sidetone Capture VMixer",
                    "control": null,
                    "source": "MUX_VX0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Sidetone Capture VMixer",
                    "control": null,
                    "source": "MUX_VX1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 BT_VX",
                    "control": "Switch",
                    "source": "Sidetone Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 MM_EXT",
                    "control": "Switch",
                    "source": "Sidetone Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL1 PDM",
                    "control": "Switch",
                    "source": "Sidetone Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "PDM_DL1",
                    "control": null,
                    "source": "DL1 PDM",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "BT_VX_DL",
                    "control": null,
                    "source": "DL1 BT_VX",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_EXT_DL",
                    "control": null,
                    "source": "DL1 MM_EXT",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL2 Mixer",
                    "control": "Tones",
                    "source": "TONES_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL2 Mixer",
                    "control": "Voice",
                    "source": "VX DL VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL2 Mixer",
                    "control": "Capture",
                    "source": "DL2 Capture VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL2 Capture VMixer",
                    "control": null,
                    "source": "MUX_UL10",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL2 Capture VMixer",
                    "control": null,
                    "source": "MUX_UL11",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DL2 Mixer",
                    "control": "Multimedia",
                    "source": "MM_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "PDM_DL2",
                    "control": null,
                    "source": "DL2 Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Capture Mixer",
                    "control": "Tones",
                    "source": "TONES_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Capture Mixer",
                    "control": "Voice Playback",
                    "source": "VX DL VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Capture Mixer",
                    "control": "Voice Capture",
                    "source": "VX UL VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Capture Mixer",
                    "control": "Media Playback",
                    "source": "MM_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Voice Capture Mixer",
                    "control": "Tones Playback",
                    "source": "TONES_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Voice Capture Mixer",
                    "control": "Media Playback",
                    "source": "MM_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Voice Capture Mixer",
                    "control": "Capture",
                    "source": "Voice Capture VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Voice Capture VMixer",
                    "control": null,
                    "source": "MUX_VX0",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Voice Capture VMixer",
                    "control": null,
                    "source": "MUX_VX1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "VX UL VMixer",
                    "control": null,
                    "source": "Voice Capture Mixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "VX_UL",
                    "control": null,
                    "source": "VX UL VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MODEM_UL",
                    "control": null,
                    "source": "VX UL VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "VX DL VMixer",
                    "control": null,
                    "source": "VX_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "VX DL VMixer",
                    "control": null,
                    "source": "MODEM_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM1 Capture",
                    "control": null,
                    "source": "MM_UL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM2 Capture",
                    "control": null,
                    "source": "MM_UL2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "TONES_DL",
                    "control": null,
                    "source": "Tones Playback",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_DL",
                    "control": null,
                    "source": "MM VMixer",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM VMixer",
                    "control": null,
                    "source": "MMLP Playback",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM VMixer",
                    "control": null,
                    "source": "MM1 Playback",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "VX_DL",
                    "control": null,
                    "source": "Voice Playback",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Voice Capture",
                    "control": null,
                    "source": "VX_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MODEM_DL",
                    "control": null,
                    "source": "Modem Playback",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "Modem Capture",
                    "control": null,
                    "source": "MODEM_UL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "BE_OUT",
                    "control": null,
                    "source": "PDM_DL1",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "BE_OUT",
                    "control": null,
                    "source": "PDM_DL2",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "BE_OUT",
                    "control": null,
                    "source": "MM_EXT_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "BE_OUT",
                    "control": null,
                    "source": "BT_VX_DL",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "PDM_UL1",
                    "control": null,
                    "source": "BE_IN",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "BT_VX_UL",
                    "control": null,
                    "source": "BE_IN",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "MM_EXT_UL",
                    "control": null,
                    "source": "BE_IN",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DMIC0",
                    "control": null,
                    "source": "BE_IN",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DMIC1",
                    "control": null,
                    "source": "BE_IN",
                    "c_header": "SndSocFwDapmGraphElem"
                },
                {
                    "sink": "DMIC2",
                    "control": null,
                    "source": "BE_IN",
                    "c_header": "SndSocFwDapmGraphElem"
                }
            ]
        }
    },
    {
        "type": 1000,
        "type_string": "SND_SOC_FW_VENDOR_FW",
        "vendor_type": 0,
        "vendor_version": 0,
        "size": 54048,
        "fw": {
            "version": 38288,
            "pmem_size": 8192,
            "cmem_size": 7852,
            "dmem_size": 16384,
            "smem_size": 21600,
            "c_header": "AbeFirmwareHeader"
        }
    },
    {
        "type": 1001,
        "type_string": "SND_SOC_FW_VENDOR_CONFIG",
        "vendor_type": 0,
        "vendor_version": 0,
        "size": 6160
    }
]

NOTE: It's missing some binary data that don't fit that well into json. Might base64 encode it later
 
Last edited:
I've been quite busy lately, and even switched countries for the next couple of months. I quickly realized that letting my server at home do all the heavy compilations would not be suitable from across the globe, so I've spent the past few days getting a build environment for both Linux-3.8 (with working AESS) and Linux-6.x up and running. I've reached a point now where I can now quickly switch between the two kernels, and the entire build is reproducible (in case I accidentally delete my rootfs) and is booted over the network. No more moving SD cards back and forth! It's all based on Buildroot so the entire rootfs is built from scratch. Thanks to ccache, and using the same compiler for both environments, a clean build takes no more than 20 minutes and incremental builds ~10-30 seconds. I keep the build environments in separate git workspaces but have it setup to share downloads and ccache locations. This way I don't have to do clean builds when switching kernels.

So, what did I learn so far?

Well, Linux-3.8 is rock solid when it comes to audio playback. I had 2 audio test songs:
  • 44.1 kHz WAV file
  • 96 kHz WAV file
Playing each song separately with aplay consumes 0-1% CPU. Doing the same with paplay and pulseaudio consumes ~2% CPU. Playing back both songs at the same time (pulseaudio) consumes ~5% CPU, and the audio is still very good!

Then I tested the letux/aess-6.4-rc3 branch from https://git.goldelico.com/?p=letux-kernel.git;a=summary. I don't have any working AESS firmware, and from @hns's reports above it looks like the support is not quite there yet, so I used the "legacy" sound card mode. Playing back each song separately consumed about the same amount of CPU, but playing back both songs at the same time produced horrible results! A lot of noise and crackling! However, the CPU usage did not increase so I'm guessing my pulseaudio is not really configured properly to resample and mix audio sources. I've heard rumors that @aTc did the pulseaudio config for the Pyra. I might have to look into that to do a proper comparison.

To be continued!
 
NOTE: It's missing some binary data that don't fit that well into json. Might base64 encode it later
Done!

I'm guessing my pulseaudio is not really configured properly to resample and mix audio sources. I've heard rumors that @aTc did the pulseaudio config for the Pyra. I might have to look into that to do a proper comparison.
I found the pulseaudio configs for the Pyra but they didn't fit my board (and I wasn't smart enough to fix them). I'll leave that for now and focus on getting the AESS firmware ported to a modern kernel.

I did try and run PipeWire, but it requires memfd support, which was introduced in Linux-3.17 :|
 
Great work so far! I really appreciate your dedication to the Pyra/OMAP5432.

What exactly does your abefw wrangler/mangler do? Okay it parses and transforms the abe firmware. But what does it mean (for non kernel hackers) and what's the purpose to convert it into json?
 
Great work so far! I really appreciate your dedication to the Pyra/OMAP5432.

What exactly does your abefw wrangler/mangler do? Okay it parses and transforms the abe firmware. But what does it mean (for non kernel hackers) and what's the purpose to convert it into json?
The mainline Linux kernel has changed the format it uses to parse audio topology firmwares, so my idea was that I would parse the old firmware and convert it to the new format.

However, it looks like I'll soon be able to generate the firmware from its source files, in the new format, so the tool is just a neat hack now
 
Firmware creation and loading the blobs with 6.3-rc2 seems to be ok. Note that the file format has significantly changed since 3.8 or 3.15 which was the major part of work to create a firmware blob in the format a modern kernel can read (sound/soc-topology). So trying to understand or modify the old binary blobs is IMHO a little pointless since the source code for building them from source is on github (https://github.com/omap-audio). Yes, such a blob contains mixer definitions, path definitions and the real firmware binary for the Audio Engine processor.
I finally got a new firmware compiled! I got some help from @hns and this script: https://git.goldelico.com/?p=letux-...bbbac676d7665aa22;hb=refs/heads/letux-current

It ran fine on a minimal Debian rootfs after some updated ca-certificates.

I'll attach the firmware here so I don't loose it :)
 

Attachments

  • omap_aess-adfw.bin.zip
    15.9 KB · Views: 188
Inde
I try and changed the old with this ...but nothing changed.
So most probably we need a modded kernel image...or 6.x to be able to use it.
Indeed we have not backported any AESS fixes to a kernel before ca. v6.0. So I'd suggest to retire v5.x kernels as soon as possible.
Well, there is one big blocking point: it appears that PVR/SGX doesn't work with v5.10 and later. And TILER rotation had to be removed due to incompatible and unfixable upstream changes. Needs another team to look into this...

And yes, I had the same problem last year @Risca was stumbling over: how to build and adapt the old AESS firmware to the new binary format.
Therefore the source code was integrated into the Letux tree, modified and there is a script that pulls this code from the git repo and builds the firmware on the device.
This works for OMAP4 and OMAP5.

I hope I will find more time in the next months to look at the AESS code again so that @Risca does not have to solve things where I know they are solved or exist but have not documented anywhere.
 
I did some experiments with Letux-6.4 kernel today and I came as far as getting the same wizdapm graphs as shown before, but I'm unable to play any audio file:
Code:
# aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default:CARD=H58040000encode
    HDMI 58040000.encoder,
    Default Audio Device
sysdefault:CARD=H58040000encode
    HDMI 58040000.encoder,
    Default Audio Device
default:CARD=omap5uevm
    omap5-uevm,
    Default Audio Device
sysdefault:CARD=omap5uevm
    omap5-uevm,
    Default Audio Device
# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: H58040000encode [HDMI 58040000.encoder], device 0: HDMI 58040000.encoder snd-soc-dummy-dai-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 0: OMAP ABE Media1 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 2: OMAP ABE Voice (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 3: OMAP ABE Tones (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 4: OMAP ABE MODEM (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 5: OMAP ABE Media LP (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 11: Legacy McPDM twl6040-legacy-11 [Legacy McPDM twl6040-legacy-11]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: omap5uevm [omap5-uevm], device 12: Legacy McBSP snd-soc-dummy-dai-12 [Legacy McBSP snd-soc-dummy-dai-12]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
# aplay -D default:CARD=omap5uevm 01.\ The\ Rumbling.wav
aplay: main:831: audio open error: Invalid argument

No matter what I try, I get this Invalid argument return code. I haven't really gone into detail what it comes from. I may be missing some patches from @hns too.

I'll continue some other day :)
 
aplay -D default:CARD=omap5uevm 01.\ The\ Rumbling.wav
Maybe the Aplay Command is wrong?

From the Aplay Linux Man Page:

-D, --device=NAME
Can you try:


aplay --device=omap5uevm 01.\ The\ Rumbling.wav

and maybe you can try another Filename? Maybe it cannot play good Soundfiles with Spaces in the Filename from the Command Line?

Just one Idea..i do not know much but
aplay: main:831: audio open error: Invalid argument
Sound for me maybe wrong Play Command?
 
for me, only subdevice 11

card 1: omap5uevm [omap5-uevm], device 11: Legacy McPDM twl6040-legacy-11 [Legacy McPDM twl6040-legacy-11]

is working (in legacy mode). The "Invalid argument" comes from the kernel and is a symptom that the AESS binary is not running and responding on the other subdevices.

Yes, I had to modify the device tree a little: the ti,audio-routes which are in conflict if legacy mode AND firmware initialization should work.

Anyways this is great progress that you can repeat (almost) the same what I have.
 
for me, only subdevice 11

card 1: omap5uevm [omap5-uevm], device 11: Legacy McPDM twl6040-legacy-11 [Legacy McPDM twl6040-legacy-11]

is working (in legacy mode). The "Invalid argument" comes from the kernel and is a symptom that the AESS binary is not running and responding on the other subdevices.
I get "Invalid argument" also for the legacy playback device. It fails much earlier for me, during HW constraints sanity checking, so I have to dig into that.

Yes, I had to modify the device tree a little: the ti,audio-routes which are in conflict if legacy mode AND firmware initialization should work.

Anyways this is great progress that you can repeat (almost) the same what I have.
I know you've discussed this a bit with Tony and Péter on the Letux-kernel mailing list: https://lists.goldelico.com/pipermail/letux-kernel/2023-February/008484.html

I think I have all the audio routing changes that I need. This is how it looks for me on aess-6.4-rc3:
aess.png
omap5-uevm.png
twl6040-codec.png
 
I get "Invalid argument" also for the legacy playback device. It fails much earlier for me, during HW constraints sanity checking, so I have to dig into that.


I know you've discussed this a bit with Tony and Péter on the Letux-kernel mailing list: https://lists.goldelico.com/pipermail/letux-kernel/2023-February/008484.html

I think I have all the audio routing changes that I need. This is how it looks for me on aess-6.4-rc3:
View attachment 38800
View attachment 38803
View attachment 38802
Yes, I verified the audio routes using your tools quite a while ago.
Here are the most important diffs to arch/arm/boot/dts/ti/omap/omap4-panda-common.dtsi as an example
Code:
@@ -81,22 +81,31 @@ sound: sound {
                compatible = "ti,abe-twl6040";
                ti,model = "PandaBoard";

                ti,mcpdm = <&mcpdm>;
+               ti,mcbsp1 = <&mcbsp1>;  /* bluetooth */
+               ti,mcbsp2 = <&mcbsp2>;  /* fm radio */
+               ti,mcbsp3 = <&mcbsp3>;  /* modem */

                ti,twl6040 = <&twl6040>;
+               ti,aess = <&aess>;

                /* Audio routing */
                ti,audio-routing =
                        "Headset Stereophone", "HSOL",
                        "Headset Stereophone", "HSOR",
-                       "Ext Spk", "HFL",
-                       "Ext Spk", "HFR",
+                       "Earphone Spk", "EP",
                        "Line Out", "AUXL",
                        "Line Out", "AUXR",
+                       "Vibrator", "VIBRAL",
+                       "Vibrator", "VIBRAR",
                        "HSMIC", "Headset Mic",
                        "Headset Mic", "Headset Mic Bias",
+                       "MAINMIC", "Main Handset Mic",
+                       "Main Handset Mic", "Main Mic Bias",
+                       "SUBMIC", "Sub Handset Mic",
+                       "Sub Handset Mic", "Main Mic Bias",
                        "AFML", "Line In",
                        "AFMR", "Line In";
        };

+&aess {
+       status = "okay";
+};

+&mcbsp2 {
+       status = "okay";
+};
If I remember correctly, the "Ext Spk" entries were silently duplicated between firmware and device tree, leading to a mismatch and stopping correct initialization so that constraints fail (some backpointers or list entries missing). This was not visible in the graph only in code.
 
Yeah, I got the device tree changes, but there are more changes needed. For some reason, nobody is filling out struct snd_pcm_hardware::info so it remains zero.

I can see some code in sound/soc/ti/aess/omap-aess-pcm.c (omap_aess_pcm_open()) which conditionally fills it in, but only if dai->id == OMAP_AESS_DAI_MM1_LP. From what I understand, this is the "MultiMedia1 LP" DAI and it's not the DAI we want, so who is supposed to fill out these HW params?

On top of all, omap_aess_pcm_open() prints out:
Code:
[   76.929364] omap-mcpdm 40132000.mcpdm: omap_aess_pcm_close: mcpdm-legacy
which indicate that it has linked to the legacy McPDM interface :(
 
Yeah, I got the device tree changes, but there are more changes needed. For some reason, nobody is filling out struct snd_pcm_hardware::info so it remains zero.

I can see some code in sound/soc/ti/aess/omap-aess-pcm.c (omap_aess_pcm_open()) which conditionally fills it in, but only if dai->id == OMAP_AESS_DAI_MM1_LP. From what I understand, this is the "MultiMedia1 LP" DAI and it's not the DAI we want, so who is supposed to fill out these HW params?

On top of all, omap_aess_pcm_open() prints out:
Code:
[   76.929364] omap-mcpdm 40132000.mcpdm: omap_aess_pcm_close: mcpdm-legacy
which indicate that it has linked to the legacy McPDM interface :(
Interesting finding! May be the first hint what is missing...
I still have to find out how I did set up my PandaES and OMAP5EVM when I had to interrupt work on this project. Then I can look at this detail.
Maybe I have also some code not yet pushed.
BTW: there are several suspicious code locations marked with comments or #ifdef FIXME which likely also need a fix.
But if I remember correctly I did get timeout from communicating with the AES DSP which is likely a power management or clocking issue. Related to segfaults when trying to read out the PMEM.
 
BTW: there are several suspicious code locations marked with comments or #ifdef FIXME which likely also need a fix.
Yeah, I've noticed. I think I've fixed a few of them. I also have a local commit that defers probing of the abe-twl6040 driver until after the AESS driver has finished initializing. Solved some boot race conditions I was having. Still needs some polishing though
But if I remember correctly I did get timeout from communicating with the AES DSP which is likely a power management or clocking issue. Related to segfaults when trying to read out the PMEM.
That's what I was hoping to debug, but I can't seem to get there. I have a really hard time to grasp how the whole audio topology works, and where all the pieces come from :/
 
Back
Top