Print this page
10619 audiohd ignores digital output pins such as HDMI/DP
@@ -130,10 +130,11 @@
#define AUDIOHD_PIN_NUMS 6
#define AUDIOHD_PIN_NO_CONN 0x40000000
#define AUDIOHD_PIN_IN_ENABLE 0x20
#define AUDIOHD_PIN_OUT_ENABLE 0x40
#define AUDIOHD_PIN_PRES_MASK 0x80000000
+#define AUDIOHD_PIN_ELDV_MASK 0x40000000
#define AUDIOHD_PIN_CONTP_OFF 0x1e
#define AUDIOHD_PIN_CON_JACK 0
#define AUDIOHD_PIN_CON_FIXED 0x2
#define AUDIOHD_PIN_CONTP_MASK 0x3
#define AUDIOHD_PIN_VREF_L1 0x20
@@ -340,11 +341,10 @@
#define AUDIOHDC_VERB_GET_UNS_ENABLE 0xf08
#define AUDIOHDC_VERB_SET_UNS_ENABLE 0x708
#define AUDIOHDC_VERB_GET_PIN_SENSE 0xf09
-#define AUDIOHDC_VERB_GET_PIN_SENSE 0xf09
#define AUDIOHDC_VERB_EXEC_PIN_SENSE 0x709
#define AUDIOHDC_VERB_GET_BEEP_GEN 0xf0a
#define AUDIOHDC_VERB_SET_BEEP_GEN 0x70a
@@ -368,10 +368,19 @@
#define AUDIOHDC_VERB_SET_GPIO_DATA 0x715
#define AUDIOHDC_VERB_GET_GPIO_STCK 0xf1a
#define AUDIOHDC_VERB_SET_GPIO_STCK 0x71a
+#define AUDIOHDC_VERB_GET_DIP_SIZE 0xf2e
+#define AUDIOHDC_VERB_GET_ELD 0xf2f
+
+#define AUDIOHDC_VERB_SET_DIP_INDEX 0x730
+#define AUDIOHDC_VERB_SET_DIP_DATA 0x731
+#define AUDIOHDC_VERB_SET_DIP_XMIT 0x732
+
+#define AUDIOHDC_VERB_SET_ASP_CHMAP 0x734
+
#define AUDIOHDC_GPIO_ENABLE 0xff
#define AUDIOHDC_GPIO_DIRECT 0xf1
#define AUDIOHDC_GPIO_DATA_CTRL 0xff
#define AUDIOHDC_GPIO_STCK_CTRL 0xff
@@ -481,10 +490,110 @@
#define AUDIOHD_SAMP_RATE48 0x00000040
#define AUDIOHD_SAMP_RATE96 0x00000100
#define AUDIOHD_SAMP_RATE192 0x00000400
/*
+ * Data Island Packet - Size info
+ */
+#define AUDIOHD_DIP_SIZE_AF 0x0
+#define AUDIOHD_DIP_SIZE_ELD 0x8
+#define AUDIOHD_DIP_SIZE_ELD_MASK 0xff
+
+/*
+ * Data Island Packet - Data
+ */
+#define AUDIOHD_DIP_DATA_LEN 32
+
+/*
+ * Data Island Packet - Xmit
+ */
+#define AUDIOHD_DIP_XMIT_STOP 0x00
+#define AUDIOHD_DIP_XMIT_ONCE 0x80
+#define AUDIOHD_DIP_XMIT_BEST_EFFORT 0xc0
+
+/*
+ * EDID-like data (ELD)
+ */
+typedef struct {
+ uint8_t sad_nchan:3;
+ uint8_t sad_format:4;
+ uint8_t sad_rsvd:1;
+ uint8_t sad_freq;
+ uint8_t sad_bitr;
+} audiohd_sad_t;
+
+#define AUDIOHD_SAD_FORMAT_LPCM 1
+#define AUDIOHD_SAD_FORMAT_AC3 2
+#define AUDIOHD_SAD_FORMAT_MPEG1 3
+#define AUDIOHD_SAD_FORMAT_MP3 4
+#define AUDIOHD_SAD_FORMAT_MPEG2 5
+#define AUDIOHD_SAD_FORMAT_AAC 6
+#define AUDIOHD_SAD_FORMAT_DTS 7
+#define AUDIOHD_SAD_FORMAT_ATRAC 8
+#define AUDIOHD_SAD_FORMAT_SACD 9
+#define AUDIOHD_SAD_FORMAT_DDPLUS 10
+#define AUDIOHD_SAD_FORMAT_DTSHD 11
+#define AUDIOHD_SAD_FORMAT_MLP 12
+#define AUDIOHD_SAD_FORMAT_DST 13
+#define AUDIOHD_SAD_FORMAT_WMA 14
+
+#define AUDIOHD_SAD_FREQ_32 0x1
+#define AUDIOHD_SAD_FREQ_44 0x2
+#define AUDIOHD_SAD_FREQ_48 0x4
+#define AUDIOHD_SAD_FREQ_88 0x8
+#define AUDIOHD_SAD_FREQ_96 0x10
+#define AUDIOHD_SAD_FREQ_176 0x20
+#define AUDIOHD_SAD_FREQ_192 0x40
+
+#define AUDIOHD_SAD_BITRATE_16 0x1
+#define AUDIOHD_SAD_BITRATE_20 0x2
+#define AUDIOHD_SAD_BITRATE_24 0x4
+
+typedef struct {
+ uint8_t eld_rsvd1:3;
+ uint8_t eld_ver:5;
+ uint8_t eld_rsvd2;
+ uint8_t eld_baseline_size;
+ uint8_t eld_rsvd3;
+ uint8_t eld_mnl:5;
+ uint8_t eld_cea_edid_ver:3;
+ uint8_t eld_hdcp:1;
+ uint8_t eld_s_ai:1;
+ uint8_t eld_conn_type:2;
+ uint8_t eld_sad_count:4;
+ uint8_t eld_aud_synch_delay;
+ uint8_t eld_channels;
+ uint64_t eld_port_id;
+ char eld_manufacturer_name[2];
+ char eld_product_code[2];
+ char eld_monitor_name[16];
+ audiohd_sad_t eld_cea_sad[15];
+ size_t eld_size;
+} audiohd_eld_t;
+
+#define AUDIOHD_ELD_HDR_LEN 4
+
+#define AUDIOHD_ELD_VER_2 0x02
+#define AUDIOHD_ELD_VER_NODRV 0x1f
+#define AUDIOHD_ELD_MAX_MNL 16
+#define AUDIOHD_ELD_CEA_861 1
+#define AUDIOHD_ELD_CEA_861_A 2
+#define AUDIOHD_ELD_CEA_861_BCD 3
+
+#define AUDIOHD_ELD_CONN_HDMI 0
+#define AUDIOHD_ELD_CONN_DP 1
+
+#define AUDIOHD_ELD_CHAN_FLR 0x01 /* front left/right */
+#define AUDIOHD_ELD_CHAN_LFE 0x02 /* low frequency effect */
+#define AUDIOHD_ELD_CHAN_FC 0x04 /* front center */
+#define AUDIOHD_ELD_CHAN_RLR 0x08 /* rear left/right */
+#define AUDIOHD_ELD_CHAN_RC 0x10 /* rear center */
+#define AUDIOHD_ELD_CHAN_FLRC 0x20 /* front left/right of center */
+#define AUDIOHD_ELD_CHAN_RLRC 0x40 /* rear left/right of center */
+
+
+/*
* buffer descriptor list entry of stream descriptor
*/
typedef struct {
uint64_t sbde_addr;
uint32_t sbde_len;
@@ -517,11 +626,11 @@
DTYPE_HP_OUT,
DTYPE_CD,
DTYPE_SPDIF_OUT,
DTYPE_DIGIT_OUT,
DTYPE_MODEM_SIDE,
- DTYPE_MODEM_HNAD_SIDE,
+ DTYPE_MODEM_HAND_SIDE,
DTYPE_LINE_IN,
DTYPE_AUX,
DTYPE_MIC_IN,
DTYPE_TEL,
DTYPE_SPDIF_IN,
@@ -757,10 +866,12 @@
int mg_gain[AUDIOHD_MAX_CONN];
int mg_wid[AUDIOHD_MAX_CONN];
int num;
int finish;
+ /* EDID-like data for HDMI/DP */
+ audiohd_eld_t *eld;
};
typedef struct {
ddi_dma_handle_t ad_dmahdl;
ddi_acc_handle_t ad_acchdl;