/* * Copyright (c) 2014 Jiri Svoboda * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @addtogroup hdaudio * @{ */ /** @file High Definition Audio codec interface */ #ifndef SPEC_CODEC_H #define SPEC_CODEC_H typedef enum { /** Get Parameter */ hda_param_get = 0xf00, /** Connection Select Control / Get */ hda_conn_sel_get = 0xf01, /** Connection Select Control / Set */ hda_conn_sel_set = 0x701, /** Get Connection List Entry */ hda_clist_entry_get = 0xf02, /** Processing State / Get */ hda_proc_state_get = 0xf03, /** Processing State / Set */ hda_proc_state_set = 0x703, /** Coefficient Index / Get */ hda_coef_index_get = 0xd, /** Coefficient Index / Set */ hda_coef_index_set = 0x5, /** Processing Coefficient / Get */ hda_proc_coef_get = 0xc, /** Processing Coefficient / Set */ hda_proc_coef_set = 0x4, /** Amplifier Gain/Mute / Get */ hda_amp_gain_mute_get = 0xb, /** Amplifier Gain/Mute / Set */ hda_amp_gain_mute_set = 0x3, /** Converter Format / Get */ hda_converter_fmt_get = 0xa, /** Converter Format / Set */ hda_converter_fmt_set = 0x2, /** S/PDIF Converter Control / Get */ hda_spdif_ctl_get = 0xf0d, /** S/PDIF Converter Control / Set 1 */ hda_spdif_ctl_set1 = 0x70d, /** S/PDIF Converter Control / Set 2 */ hda_spdif_ctl_set2 = 0x70e, /** S/PDIF Converter Control / Set 3 */ hda_spdif_ctl_set3 = 0x73e, /** S/PDIF Converter Control / Set 4 */ hda_spdif_ctl_set4 = 0x73f, /** Power State / Get */ hda_power_state_get = 0xf05, /** Power State / Set */ hda_power_state_set = 0x705, /** Converter Control / Get */ hda_converter_ctl_get = 0xf06, /** Converter Control / Set */ hda_converter_ctl_set = 0x706, /** SDI Select / Get */ hda_sdi_select_get = 0xf04, /** SDI Select / Set */ hda_sdi_select_set = 0x704, /** Pin Control / Get */ hda_pin_ctl_get = 0xf07, /** Pin Control / Set */ hda_pin_ctl_set = 0x707, /** Unsolicited Response Control / Get */ hda_unsol_resp_get = 0xf08, /** Unsolicied Response Control / Set */ hda_unsol_resp_set = 0x708, /** Pin Sense / Get */ hda_pin_sense_get = 0xf09, /** Pin Sense / Execute */ hda_pin_sense_exec = 0x709, /** EAPD/BTL Enable / Get */ hda_eapd_btl_enable_get = 0xf0c, /** EAPD/BTL Enable / Set */ hda_eapd_btl_enable_set = 0x70c, /** GPI Data / Get */ hda_gpi_data_get = 0xf10, /** GPI Data / Set */ hda_gpi_data_set = 0x710, /** GPI Wake Enable / Get */ hda_gpi_wakeen_get = 0xf11, /** GPI Wake Enable / Set */ hda_gpi_wakeen_set = 0x711, /** GPI Unsolicited Enable / Get */ hda_gpi_unsol_get = 0xf12, /** GPI Unsolicited Enable / Set */ hda_gpi_unsol_set = 0x712, /** GPI Sticky / Get */ hda_gpi_sticky_get = 0xf13, /** GPI Sticky / Set */ hda_gpi_sticky_set = 0x713, /** GPO Data / Get */ hda_gpo_data_get = 0xf14, /** GPO Data / Set */ hda_gpo_data_set = 0x714, /** GPIO Data / Get */ hda_gpio_data_get = 0xf15, /** GPIO Data / Set */ hda_gpio_data_set = 0x715, /** GPIO Enable / Get */ hda_gpio_enable_get = 0xf16, /** GPIO Enable / Set */ hda_gpio_enable_set = 0x716, /** GPIO Direction / Get */ hda_gpio_dir_get = 0xf17, /** GPIO Direction / Set */ hda_gpio_dir_set = 0x717, /** GPIO Wake Enable / Get */ hda_gpio_wakeen_get = 0xf18, /** GPIO Wake Enable / Set */ hda_gpio_wakeen_set = 0x718, /** GPIO Unsolicited Enable / Get */ hda_gpio_unsol_get = 0xf19, /** GPIO Unsolicited Enable / Set */ hda_gpio_unsol_set = 0x719, /** GPIO Sticky Mask / Get */ hda_gpio_sticky_get = 0xf1a, /** GPIO Sticky Mask / Set */ hda_hpio_sticky_set = 0x71a, /** Beep Generation / Get */ hda_beep_gen_get = 0xf0a, /** Beep Generation / Set */ hda_beep_gen_set = 0x70a, /** Volume Knob / Get */ hda_vol_knob_get = 0xf0f, /** Volume Knob / Set */ hda_vol_knob_set = 0x70f, /** Implementation Identification / Get */ hda_impl_ident_get = 0xf20, /** Implementation Identification / Set 1 */ hda_impl_ident_set1 = 0x720, /** Implementation Identification / Set 2 */ hda_impl_ident_set2 = 0x721, /** Implementation Identification / Set 3 */ hda_impl_ident_set3 = 0x722, /** Implementation Identification / Set 4 */ hda_impl_ident_set4 = 0x723, /** Configuration Default / Get */ hda_cfg_def_get = 0xf1c, /** Configuration Default / Set 1 */ hda_cfg_def_set1 = 0x71c, /** Configuration Default / Set 2 */ hda_cfg_def_set2 = 0x71d, /** Configuration Default / Set 3 */ hda_cfg_def_set3 = 0x71e, /** Configuration Default / Set 4 */ hda_cfg_def_set4 = 0x71f, /** Stripe Control / Get */ hda_stripe_ctl_get = 0xf24, /** Stripe Control / Set */ hda_stripe_ctl_set = 0x724, /** Function Reset / Execute */ hda_fun_rst_exec = 0x7ff, /** ELD Data / Get */ hda_eld_data_get = 0xf2f, /** Converter Channel Count / Get */ hda_cvt_chan_cnt_get = 0xf2d, /** Converter Channel Count / Set */ hda_cvt_chan_cnt_set = 0x72d, /** DIP-Size / Get */ hda_dip_size_get = 0xf2e, /** DIP-Index / Get */ hda_dip_index_get = 0xf30, /** DIP-Index / Set */ hda_dip_index_set = 0x730, /** DIP-Data / Get */ hda_dip_data_get = 0xf31, /** DIP-Data / Set */ hda_dip_data_set = 0x731, /** DIP-XmitCtrl / Get */ hda_dip_xmitctrl_get = 0xf32, /** DIP-XmitCtrl / Set */ hda_dip_xmitctrl_set = 0x732, /** Protection Control / Get */ hda_prot_ctl_get = 0xf33, /** Protection Control / Set */ hda_prot_ctl_set = 0x733, /** ASP Channel Mapping / Get */ hda_asp_chanmap_get = 0xf34, /** ASP Channel Mapping / Set */ hda_asp_chanmap_set = 0x734 } hda_verb_t; typedef enum { /** Vendor ID */ hda_vendor_id = 0x00, /** Revision ID */ hda_revision_id = 0x02, /** Subordinate Node Count */ hda_sub_nc = 0x04, /** Function Group Type */ hda_fgrp_type = 0x05, /** Audio Function Group Capabilities */ hda_afg_caps = 0x08, /** Audio Widget Capabilities */ hda_aw_caps = 0x09, /** Supported PCM Size, Rates */ hda_supp_rates = 0x0a, /** Supported Stream Formats */ hda_supp_formats = 0x0b, /** Pin Capabilities */ hda_pin_caps = 0x0c, /** Input Amplifier Capabilities */ hda_in_amp_caps = 0x0d, /** Output Amplifier Capabilities */ hda_out_amp_caps = 0x12, /** Connection List Length */ hda_clist_len = 0x0e, /** Supported Power States */ hda_supp_pwr_states = 0x0f, /** Processing Capabilities */ hda_proc_caps = 0x10, /** GP I/O Count */ hda_gpio_cnt = 0x11, /** Volume Knob Capabilities */ hda_volk_nob_caps = 0x13 } hda_param_id_t; /** Subordinate Node Count Response bits */ typedef enum { /** Starting Node Number (H) */ subnc_startnode_h = 23, /** Starting Node Number (L) */ subnc_startnode_l = 16, /** Total Node Count (H) */ subnc_nodecount_h = 7, /** Total Node Count (L) */ subnc_nodecount_l = 0 } hda_sub_nc_bits_t; /** Function Group Type Response bits */ typedef enum { /** UnSol Capable */ fgrpt_unsol = 8, /** Group Type (H) */ fgrpt_type_h = 7, /** Group Type (L) */ fgrpt_type_l = 0 } hda_fgrp_type_bits_t; /** Function Group Type */ typedef enum { /** Audio Function Group */ fgrp_afg = 0x01, /** Vendor Defined Modem Function Group */ fgrp_vdmfg = 0x02 } hda_fgrp_type_t; /** Connection List Length Response bits */ typedef enum { /** Long Form */ cll_longform = 7, /** Connection List Length (H) */ cll_len_h = 6, /** Connection List Length (L) */ cll_len_l = 0 } hda_clist_len_bits_t; /** Audio Widget Capabilities Bits */ typedef enum { /** Type (H) */ awc_type_h = 23, /** Type (L) */ awc_type_l = 20, /** Chan Count Ext (H) */ awc_chan_count_ext_h = 15, /** Chan Count Ext (L) */ awc_chan_count_ext_l = 13, /** CP Caps */ awc_cp_caps = 12, /** L-R Swap */ awc_lr_swap = 11, /** Power Control */ awc_power_cntrl = 10, /** Digital */ awc_digital = 9, /** Conn List */ awc_conn_list = 8, /** Unsol Capable */ awc_unsol_capable = 7, /** Proc Widget */ awc_proc_widget = 6, /** Stripe */ awc_stripe = 5, /** Format Override */ awc_fmt_override = 4, /** Amp Param Override */ awc_amp_param_override = 3, /** Out Amp Present */ awc_out_amp_present = 2, /** In Amp Present */ awc_in_amp_present = 1, /** Chan Count LSB (Stereo) */ awc_chan_count_lsb = 0 } hda_awidget_caps_bits_t; /** Pin Capabilities */ typedef enum { /** High Bit Rate */ pwc_hbr = 27, /** Display Port */ pwc_dp = 24, /** EAPD Capable */ pwc_eapd = 16, /** VRef Control (H) */ pwc_vrefctl_h = 15, /** VRef Control (L) */ pwc_vrefctl_l = 8, /** HDMI */ pwc_hdmi = 7, /** Balanced I/O Pins */ pwc_bal_io = 6, /** Input Capable */ pwc_input = 5, /** Output Capable */ pwc_output = 4, /** Headphone Drive Capable */ pwc_hpd = 3, /** Presence Detect Capable */ pwc_presence = 2, /** Trigger Required */ pwc_trigger_reqd = 1, /** Impedance Sense Capable */ pwc_imp_sense = 0 } hda_pin_caps_bits_t; /** Audio Widget Type */ typedef enum { /** Audio Output */ awt_audio_output = 0x0, /** Audio Input */ awt_audio_input = 0x1, /** Audio Mixer */ awt_audio_mixer = 0x2, /** Audio Selector */ awt_audio_selector = 0x3, /** Pin Complex */ awt_pin_complex = 0x4, /** Power Widget */ awt_power_widget = 0x5, /** Volume Knob Widget */ awt_volume_knob = 0x6, /** Beep Generator Widget */ awt_beep_generator = 0x7, /** Vendor-defined audio widget */ awt_vendor_defined = 0xf } hda_awidget_type_t; /** Converter Control bits */ typedef enum { /** Stream (H) */ cctl_stream_h = 7, /** Stream (L) */ cctl_stream_l = 4, /** Channel (H) */ cctl_channel_h = 3, /** Channel (L) */ cctl_channel_l = 0 } hda_converter_ctl_bits_t; /** Pin Widget Control bits */ typedef enum { /** Headphone Drive Enable */ pctl_hpd_enable = 7, /** Out Enable */ pctl_out_enable = 6, /** In Enable */ pctl_in_enable = 5, /** Voltage Reference Enable (H) */ pctl_vref_enable_h = 2, /** Voltage Reference Enable (L) */ pctl_vref_enable_l = 0, /** Encoded Packet Type (H) */ pctl_ept_h = 1, /** Encoded Packet Type (L) */ pctl_ept_l = 0 } hda_pin_ctl_bits_t; #endif /** @} */