HelenOS sources

root/uspace/drv/audio/hdaudio/spec/codec.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 * 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

/** @}
 */

/* [<][>][^][v][top][bottom][index][help] */
HelenOS homepage, sources at GitHub