summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainboard/prodrive/hermes/Makefile.inc3
-rw-r--r--src/mainboard/prodrive/hermes/hda_verb.c229
-rw-r--r--src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c77
-rw-r--r--src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h5
-rw-r--r--src/mainboard/prodrive/hermes/variants/r04/hda_verb.c72
5 files changed, 164 insertions, 222 deletions
diff --git a/src/mainboard/prodrive/hermes/Makefile.inc b/src/mainboard/prodrive/hermes/Makefile.inc
index 2dba6dac76..6f6a638aff 100644
--- a/src/mainboard/prodrive/hermes/Makefile.inc
+++ b/src/mainboard/prodrive/hermes/Makefile.inc
@@ -10,3 +10,6 @@ romstage-y += eeprom.c
ramstage-y += ramstage.c
ramstage-y += mainboard.c
ramstage-y += eeprom.c
+
+ramstage-$(CONFIG_AZALIA_PLUGIN_SUPPORT) += variants/baseboard/hda_verb.c
+ramstage-$(CONFIG_AZALIA_PLUGIN_SUPPORT) += variants/r04/hda_verb.c
diff --git a/src/mainboard/prodrive/hermes/hda_verb.c b/src/mainboard/prodrive/hermes/hda_verb.c
index be7dbb4ec6..23c542c478 100644
--- a/src/mainboard/prodrive/hermes/hda_verb.c
+++ b/src/mainboard/prodrive/hermes/hda_verb.c
@@ -2,232 +2,17 @@
#include <device/azalia_device.h>
#include <types.h>
+#include <console/console.h>
#include "variants/baseboard/include/eeprom.h"
-
-const u32 cim_verb_data[] = {
- 0x10ec0888, /* Codec Vendor / Device ID: Realtek ALC888 */
- 0x10ec0888, /* Subsystem ID */
- 10, /* Number of 4 dword sets */
- AZALIA_SUBVENDOR(0, 0x10ec0888),
-
- /* Port A: Front, Audio Header #1 */
- AZALIA_PIN_CFG(0, 0x14, AZALIA_PIN_DESC(
- INTEGRATED,
- INTERNAL,
- SPECIAL7,
- LINE_OUT,
- OTHER_ANALOG,
- COLOR_UNKNOWN,
- false,
- 0xf,
- 0
- )),
- /* Port B: Mic1, Line input (pink) */
- AZALIA_PIN_CFG(0, 0x15, AZALIA_PIN_DESC(
- JACK,
- EXTERNAL_PRIMARY_CHASSIS,
- REAR, //FIXME
- LINE_IN,
- STEREO_MONO_1_8,
- PINK,
- false,
- 0xf,
- 0
- )),
- /* Port C: Line, Speaker (only L) */
- AZALIA_PIN_CFG(0, 0x16, AZALIA_PIN_DESC(
- INTEGRATED,
- INTERNAL,
- NA,
- SPEAKER,
- TYPE_UNKNOWN,
- COLOR_UNKNOWN,
- false,
- 0xf,
- 0
- )),
- /* Port D: Sidesurr, Line out (green) */
- AZALIA_PIN_CFG(0, 0x17, AZALIA_PIN_DESC(
- //JACK,
- LINE_OUT,
- EXTERNAL_PRIMARY_CHASSIS,
- REAR, //FIXME
- LINE_OUT,
- STEREO_MONO_1_8,
- GREEN,
- false,
- 0xf,
- 0
- )),
- /* Port E: Line2, Line input (blue) */
- AZALIA_PIN_CFG(0, 0x18, AZALIA_PIN_DESC(
- JACK,
- EXTERNAL_PRIMARY_CHASSIS,
- REAR, //FIXME
- LINE_IN,
- STEREO_MONO_1_8,
- BLUE,
- false,
- 0xf,
- 0
- )),
- /* Port F: Mic2, Audio Header #2 */
- AZALIA_PIN_CFG(0, 0x19, AZALIA_PIN_DESC(
- INTEGRATED,
- INTERNAL,
- SPECIAL7,
- LINE_IN,
- OTHER_ANALOG,
- COLOR_UNKNOWN,
- false,
- 0xf,
- 0
- )),
- /* Port G: Not connected */
- AZALIA_PIN_CFG(0, 0x1a, AZALIA_PIN_DESC(
- NC,
- LOCATION_OTHER,
- NA,
- DEVICE_OTHER,
- TYPE_OTHER,
- COLOR_OTHER,
- true,
- 0,
- 0
- )),
- /* Port H: Not connected */
- AZALIA_PIN_CFG(0, 0x1b, AZALIA_PIN_DESC(
- NC,
- LOCATION_OTHER,
- NA,
- DEVICE_OTHER,
- TYPE_OTHER,
- COLOR_OTHER,
- true,
- 0,
- 0
- )),
-
- /* S/PDIF-OUT */
- AZALIA_PIN_CFG(0, 0x1e, AZALIA_PIN_DESC(
- INTEGRATED,
- INTERNAL,
- NA,
- SPDIF_OUT,
- OTHER_DIGITAL,
- COLOR_UNKNOWN,
- true,
- 0xf,
- 0
- )),
- /* S/PDIF-IN */
- AZALIA_PIN_CFG(0, 0x1f, AZALIA_PIN_DESC(
- INTEGRATED,
- INTERNAL,
- NA,
- SPDIF_IN,
- OTHER_DIGITAL,
- COLOR_UNKNOWN,
- true,
- 0xf,
- 0
- )),
-
- //FIXME COdec ID
- /*
- * VerbTable: CFL Display Audio Codec
- * Revision ID = 0xFF
- * Codec Vendor: 0x8086280B
- */
-
- 0x8086280B,
- 0xFFFFFFFF,
- 5, /* Number of 4 dword sets */
-
- /*
- * Display Audio Verb Table
- * For GEN9, the Vendor Node ID is 08h
- * Port to be exposed to the inbox driver in the vanilla mode
- * PORT C - BIT[7:6] = 01b
- */
- 0x00878140,
- 0x00878140,
- 0x00878140,
- 0x00878140,
- /* Pin Widget 5 - PORT B - Configuration Default: 0x18560010 */
- AZALIA_PIN_CFG(2, 0x05, 0x18560010),
- /* Pin Widget 6 - PORT C - Configuration Default: 0x18560020 */
- AZALIA_PIN_CFG(2, 0x06, 0x18560020),
- /* Pin Widget 7 - PORT D - Configuration Default: 0x18560030 */
- AZALIA_PIN_CFG(2, 0x07, 0x18560030),
- /* Disable the third converter and third Pin (NID 08h) */
- 0x00878140,
- 0x00878140,
- 0x00878140,
- 0x00878140,
-};
-
-const u32 pc_beep_verbs[0] = {};
-
-AZALIA_ARRAY_SIZES;
-
-static u32 get_port_c_vref_cfg(uint8_t blue_rear_vref)
-{
- switch (blue_rear_vref) {
- default:
- case 0:
- return 0x02040000;
- case 1:
- return 0x02041000;
- case 2:
- return 0x02044000;
- case 3:
- return 0x02045000;
- case 4:
- return 0x02046000;
- }
-}
-
-static u32 get_internal_audio_cfg(uint8_t internal_audio_connection)
-{
- switch (internal_audio_connection) {
- default:
- case 0:
- return AZALIA_PIN_CFG_NC(0);
- case 1:
- return 0x022a4c40;
- case 2:
- return AZALIA_PIN_DESC(
- INTEGRATED,
- INTERNAL,
- NA,
- SPEAKER,
- TYPE_UNKNOWN,
- COLOR_UNKNOWN,
- false,
- 0xf,
- 0);
- }
-}
+#include "variants/baseboard/include/variant/variants.h"
void mainboard_azalia_program_runtime_verbs(u8 *base, u32 viddid)
{
- if (viddid != 0x10ec0888)
- return;
+ if (viddid == 0x10ec0888) {
+ u8 hsi = get_bmc_hsi();
- const struct eeprom_board_settings *const board_cfg = get_board_settings();
-
- if (!board_cfg)
- return;
-
- const u32 config = get_internal_audio_cfg(board_cfg->internal_audio_connection);
-
- const u32 verbs[] = {
- AZALIA_PIN_CFG(0, 0x1b, config),
- 0x0205000d,
- get_port_c_vref_cfg(board_cfg->blue_rear_vref),
- };
-
- azalia_program_verb_table(base, verbs, ARRAY_SIZE(verbs));
+ if (hsi >= 4)
+ mainboard_r0x_configure_alc888(base, viddid);
+ }
}
diff --git a/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c b/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c
new file mode 100644
index 0000000000..dc9779496c
--- /dev/null
+++ b/src/mainboard/prodrive/hermes/variants/baseboard/hda_verb.c
@@ -0,0 +1,77 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <device/azalia_device.h>
+#include <types.h>
+
+const u32 cim_verb_data[] = {
+ 0x10ec0888, /* Codec Vendor / Device ID: Realtek ALC888 */
+ 0x10ec0888, /* Subsystem ID */
+ 17, /* Number of 4 dword sets */
+ AZALIA_SUBVENDOR(0, 0x10ec0888),
+
+ /* Port configuration control */
+
+ 0x018707e1, /* port B VREF 50% of LDO-OUT */
+ 0x019707e1, /* port F VREF 50% of LDO-OUT */
+ 0x01b707e1, /* port E VREF 50% of LDO-OUT*/
+ 0x0205000d, /* pin 37 vrefo hidden register - used as port C vref */
+
+ 0x02041000, /* pin 37 vrefo 50% of LDO-OUT */
+ 0x02041000, /* Dummy entry */
+ 0x02041000, /* Dummy entry */
+ 0x02041000, /* Dummy entry */
+
+ /* Pin widgets */
+ AZALIA_PIN_CFG(0, 0x11, 0x411111f0), /* SPDIF-OUT2 - disabled */
+ AZALIA_PIN_CFG(0, 0x12, 0x411111f0), /* digital MIC - disabled */
+ AZALIA_PIN_CFG(0, 0x14, 0x01014430), /* PORT D - rear line out */
+ AZALIA_PIN_CFG(0, 0x16, 0x411111f0), /* PORT G - disabled */
+ AZALIA_PIN_CFG(0, 0x17, 0x411111f0), /* PORT H - disabled */
+ AZALIA_PIN_CFG(0, 0x18, 0x01a19c50), /* PORT B - rear mic in */
+ AZALIA_PIN_CFG(0, 0x1c, 0x411111f0), /* CD audio - disabled */
+ AZALIA_PIN_CFG(0, 0x1d, 0x4004c601), /* BEEPIN */
+ AZALIA_PIN_CFG(0, 0x1e, 0x01452160), /* SPDIF-OUT */
+ AZALIA_PIN_CFG(0, 0x1f, 0x01C52170), /* SPDIF-IN */
+
+ /* Config for R02 and older */
+ AZALIA_PIN_CFG(0, 0x19, 0x02214c40), /* port F - front hp out */
+ AZALIA_PIN_CFG(0, 0x1a, 0x901001f0), /* port C - internal speaker */
+ AZALIA_PIN_CFG(0, 0x1b, 0x01813c10), /* port E - rear line in/mic - Blue */
+ AZALIA_PIN_CFG(0, 0x15, 0x02a19c20), /* port A - audio hdr input */
+
+ /*
+ * VerbTable: CFL Display Audio Codec
+ * Revision ID = 0xFF
+ * Codec Vendor: 0x8086280B
+ */
+ 0x8086280B,
+ 0xFFFFFFFF,
+ 5, /* Number of 4 dword sets */
+
+ AZALIA_SUBVENDOR(2, 0x80860101),
+
+ /*
+ * Display Audio Verb Table
+ * For GEN9, the Vendor Node ID is 08h
+ * Port to be exposed to the inbox driver in the vanilla mode
+ * PORT C - BIT[7:6] = 01b
+ */
+ 0x20878101,
+
+ /* Pin Widget 5 - PORT B - Configuration Default: 0x18560010 */
+ AZALIA_PIN_CFG(2, 0x05, 0x18560010),
+ /* Pin Widget 6 - PORT C - Configuration Default: 0x18560020 */
+ AZALIA_PIN_CFG(2, 0x06, 0x18560020),
+ /* Pin Widget 7 - PORT D - Configuration Default: 0x18560030 */
+ AZALIA_PIN_CFG(2, 0x07, 0x18560030),
+ /* Disable the third converter and third Pin (NID 08h) */
+ 0x20878100,
+
+ /* Dummy entries */
+ 0x20878100,
+ 0x20878100,
+};
+
+const u32 pc_beep_verbs[0] = {};
+
+AZALIA_ARRAY_SIZES;
diff --git a/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h b/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h
index 83cf232dd8..54a116143f 100644
--- a/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h
+++ b/src/mainboard/prodrive/hermes/variants/baseboard/include/variant/variants.h
@@ -1,4 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
#include <soc/cnl_memcfg_init.h>
+#include <types.h>
/* Return memory configuration structure. */
const struct cnl_mb_cfg *variant_memcfg_config(void);
+
+void mainboard_r0x_configure_alc888(u8 *base, u32 viddid);
diff --git a/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c b/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c
new file mode 100644
index 0000000000..ec008e9993
--- /dev/null
+++ b/src/mainboard/prodrive/hermes/variants/r04/hda_verb.c
@@ -0,0 +1,72 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <device/azalia_device.h>
+#include <types.h>
+
+#include "variant/variants.h"
+#include "eeprom.h"
+
+static const u32 r04_verb_data[] = {
+ AZALIA_PIN_CFG(0, 0x19, 0x02a19c20), /* PORT F - front mic in */
+ AZALIA_PIN_CFG(0, 0x1a, 0x01813c51), /* PORT C - rear line in (mic support) */
+ AZALIA_PIN_CFG(0, 0x15, 0x411111f0), /* PORT A - disabled */
+};
+
+static u32 get_port_c_vref_cfg(uint8_t blue_rear_vref)
+{
+ switch (blue_rear_vref) {
+ default:
+ case 0:
+ return 0x02040000;
+ case 1:
+ return 0x02041000;
+ case 2:
+ return 0x02044000;
+ case 3:
+ return 0x02045000;
+ case 4:
+ return 0x02046000;
+ }
+}
+
+static u32 get_internal_audio_cfg(uint8_t internal_audio_connection)
+{
+ switch (internal_audio_connection) {
+ default:
+ case 0:
+ return AZALIA_PIN_CFG_NC(0);
+ case 1:
+ return 0x022a4c40;
+ case 2:
+ return AZALIA_PIN_DESC(
+ INTEGRATED,
+ INTERNAL,
+ NA,
+ SPEAKER,
+ TYPE_UNKNOWN,
+ COLOR_UNKNOWN,
+ false,
+ 0xf,
+ 0);
+ }
+}
+
+void mainboard_r0x_configure_alc888(u8 *base, u32 viddid)
+{
+ /* Overwrite settings made by baseboard */
+ azalia_program_verb_table(base, r04_verb_data, ARRAY_SIZE(r04_verb_data));
+
+ const struct eeprom_board_settings *const board_cfg = get_board_settings();
+
+ if (!board_cfg)
+ return;
+
+ const u32 config = get_internal_audio_cfg(board_cfg->internal_audio_connection);
+
+ const u32 verbs[] = {
+ AZALIA_PIN_CFG(0, 0x1b, config),
+ 0x0205000d,
+ get_port_c_vref_cfg(board_cfg->blue_rear_vref),
+ };
+ azalia_program_verb_table(base, verbs, ARRAY_SIZE(verbs));
+}