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;