diff options
-rw-r--r-- | src/northbridge/intel/haswell/minihd.c | 5 | ||||
-rw-r--r-- | src/soc/intel/broadwell/minihd.c | 5 | ||||
-rw-r--r-- | src/soc/intel/broadwell/pch/hda.c | 4 | ||||
-rw-r--r-- | src/southbridge/intel/lynxpoint/azalia.c | 4 | ||||
-rw-r--r-- | src/southbridge/intel/lynxpoint/hda_verb.c | 92 | ||||
-rw-r--r-- | src/southbridge/intel/lynxpoint/hda_verb.h | 1 |
6 files changed, 8 insertions, 103 deletions
diff --git a/src/northbridge/intel/haswell/minihd.c b/src/northbridge/intel/haswell/minihd.c index 6896464d5c..558f41fd43 100644 --- a/src/northbridge/intel/haswell/minihd.c +++ b/src/northbridge/intel/haswell/minihd.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <console/console.h> +#include <device/azalia_device.h> #include <device/device.h> #include <device/pci.h> #include <device/pci_ids.h> @@ -78,8 +79,8 @@ static void minihd_init(struct device *dev) if (codec_mask) { for (i = 3; i >= 0; i--) { if (codec_mask & (1 << i)) - hda_codec_init(base, i, sizeof(minihd_verb_table), - minihd_verb_table); + azalia_codec_init(base, i, minihd_verb_table, + sizeof(minihd_verb_table)); } } } diff --git a/src/soc/intel/broadwell/minihd.c b/src/soc/intel/broadwell/minihd.c index a07d9b1524..396c283845 100644 --- a/src/soc/intel/broadwell/minihd.c +++ b/src/soc/intel/broadwell/minihd.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <console/console.h> +#include <device/azalia_device.h> #include <device/device.h> #include <device/pci.h> #include <device/pci_ids.h> @@ -79,8 +80,8 @@ static void minihd_init(struct device *dev) if (codec_mask) { for (i = 3; i >= 0; i--) { if (codec_mask & (1 << i)) - hda_codec_init(base, i, sizeof(minihd_verb_table), - minihd_verb_table); + azalia_codec_init(base, i, minihd_verb_table, + sizeof(minihd_verb_table)); } } diff --git a/src/soc/intel/broadwell/pch/hda.c b/src/soc/intel/broadwell/pch/hda.c index 2230614887..5c5e08fc31 100644 --- a/src/soc/intel/broadwell/pch/hda.c +++ b/src/soc/intel/broadwell/pch/hda.c @@ -18,9 +18,7 @@ static void codecs_init(u8 *base, u32 codec_mask) /* Can support up to 4 codecs */ for (i = 3; i >= 0; i--) { if (codec_mask & (1 << i)) - hda_codec_init(base, i, - cim_verb_data_size, - cim_verb_data); + azalia_codec_init(base, i, cim_verb_data, cim_verb_data_size); } if (pc_beep_verbs_size) diff --git a/src/southbridge/intel/lynxpoint/azalia.c b/src/southbridge/intel/lynxpoint/azalia.c index 8e138f168f..9201caabf8 100644 --- a/src/southbridge/intel/lynxpoint/azalia.c +++ b/src/southbridge/intel/lynxpoint/azalia.c @@ -18,9 +18,7 @@ static void codecs_init(u8 *base, u32 codec_mask) /* Can support up to 4 codecs */ for (i = 3; i >= 0; i--) { if (codec_mask & (1 << i)) - hda_codec_init(base, i, - cim_verb_data_size, - cim_verb_data); + azalia_codec_init(base, i, cim_verb_data, cim_verb_data_size); } if (pc_beep_verbs_size) diff --git a/src/southbridge/intel/lynxpoint/hda_verb.c b/src/southbridge/intel/lynxpoint/hda_verb.c index ba30f1d036..809ab3b77a 100644 --- a/src/southbridge/intel/lynxpoint/hda_verb.c +++ b/src/southbridge/intel/lynxpoint/hda_verb.c @@ -46,95 +46,3 @@ no_codec: printk(BIOS_DEBUG, "HDA: No codec!\n"); return 0; } - -/* - * Wait 50usec for the codec to indicate it is ready. - * No response would imply that the codec is non-operative. - */ -static int hda_wait_for_ready(u8 *base) -{ - /* Use a 50 usec timeout - the Linux kernel uses the same duration */ - int timeout = 50; - - while (timeout--) { - u32 reg32 = read32(base + HDA_ICII_REG); - if (!(reg32 & HDA_ICII_BUSY)) - return 0; - udelay(1); - } - - return -1; -} - -/* - * Wait 50usec for the codec to indicate that it accepted the previous command. - * No response would imply that the code is non-operative. - */ -static int hda_wait_for_valid(u8 *base) -{ - u32 reg32; - /* Use a 50 usec timeout - the Linux kernel uses the same duration */ - int timeout = 50; - - /* Send the verb to the codec */ - reg32 = read32(base + HDA_ICII_REG); - reg32 |= HDA_ICII_BUSY | HDA_ICII_VALID; - write32(base + HDA_ICII_REG, reg32); - - while (timeout--) { - reg32 = read32(base + HDA_ICII_REG); - if ((reg32 & (HDA_ICII_VALID | HDA_ICII_BUSY)) == HDA_ICII_VALID) - return 0; - udelay(1); - } - - return -1; -} - -int hda_codec_init(u8 *base, int addr, int verb_size, const u32 *verb_data) -{ - const u32 *verb; - u32 reg32, size; - int rc; - - printk(BIOS_DEBUG, "HDA: Initializing codec #%d\n", addr); - - if (!verb_size || !verb_data) { - printk(BIOS_DEBUG, "HDA: No verb list!\n"); - return -1; - } - - /* 1 */ - if (hda_wait_for_ready(base) < 0) { - printk(BIOS_DEBUG, " codec not ready.\n"); - return -1; - } - - reg32 = (addr << 28) | 0x000f0000; - write32(base + HDA_IC_REG, reg32); - - if (hda_wait_for_valid(base) < 0) { - printk(BIOS_DEBUG, " codec not valid.\n"); - return -1; - } - - /* 2 */ - reg32 = read32(base + HDA_IR_REG); - printk(BIOS_DEBUG, "HDA: codec viddid: %08x\n", reg32); - - size = azalia_find_verb(verb_data, verb_size, reg32, &verb); - if (!size) { - printk(BIOS_DEBUG, "HDA: No verb table entry found\n"); - return -1; - } - - /* 3 */ - rc = azalia_program_verb_table(base, verb, size); - - if (rc < 0) - printk(BIOS_DEBUG, "HDA: verb not loaded\n"); - else - printk(BIOS_DEBUG, "HDA: verb loaded.\n"); - - return rc; -} diff --git a/src/southbridge/intel/lynxpoint/hda_verb.h b/src/southbridge/intel/lynxpoint/hda_verb.h index 327811f324..1d6ef39b98 100644 --- a/src/southbridge/intel/lynxpoint/hda_verb.h +++ b/src/southbridge/intel/lynxpoint/hda_verb.h @@ -6,6 +6,5 @@ #include <stdint.h> int hda_codec_detect(u8 *base); -int hda_codec_init(u8 *base, int addr, int verb_size, const u32 *verb_data); #endif |