Tony Huang has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/48945 )
Change subject: mb/google/octopus: add audio codec into SSFC support for Meep ......................................................................
mb/google/octopus: add audio codec into SSFC support for Meep
Also change GPIO_137 for headphone detect DA7219 set to level trigger RT5682 set to edge_both trigger
BUG=b:171757619 BRANCH=octopus TEST=adjust SSFC value of CBI to select RT5682 or DA7219 then check whether device tree is updated correspondingly by disabling unselected one.
Change-Id: I37390535e263b4b9547ad7307278e3360ba836bd Signed-off-by: Tony Huang tony-huang@quanta.corp-partner.google.com --- M src/mainboard/google/octopus/Kconfig.name M src/mainboard/google/octopus/variants/meep/gpio.c M src/mainboard/google/octopus/variants/meep/overridetree.cb M src/mainboard/google/octopus/variants/meep/variant.c 4 files changed, 106 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/45/48945/1
diff --git a/src/mainboard/google/octopus/Kconfig.name b/src/mainboard/google/octopus/Kconfig.name index 6e3dbf4..4e24e5a 100644 --- a/src/mainboard/google/octopus/Kconfig.name +++ b/src/mainboard/google/octopus/Kconfig.name @@ -40,6 +40,7 @@ select BASEBOARD_OCTOPUS_LAPTOP select BOARD_GOOGLE_BASEBOARD_OCTOPUS select NHLT_DA7219 if INCLUDE_NHLT_BLOBS + select NHLT_RT5682 if INCLUDE_NHLT_BLOBS
config BOARD_GOOGLE_AMPTON bool "-> Ampton" diff --git a/src/mainboard/google/octopus/variants/meep/gpio.c b/src/mainboard/google/octopus/variants/meep/gpio.c index 31cd64e..91fcc81 100644 --- a/src/mainboard/google/octopus/variants/meep/gpio.c +++ b/src/mainboard/google/octopus/variants/meep/gpio.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */
+#include <baseboard/cbi_ssfc.h> #include <baseboard/gpio.h> #include <baseboard/variants.h> #include <gpio.h> @@ -15,6 +16,18 @@ DISPUPD), };
+static const struct pad_config rt5682_override_table[] = { + PAD_NC(GPIO_104, UP_20K), + + /* GPIO_137 -- HP_INT_ODL */ + PAD_CFG_GPI_APIC_IOS(GPIO_137, NONE, DEEP, EDGE_BOTH, INVERT, HIZCRx1, + DISPUPD), + + /* EN_PP3300_TOUCHSCREEN */ + PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_146, 0, DEEP, NONE, Tx0RxDCRx0, + DISPUPD), +}; + static const struct pad_config hdmi_sku_override_table[] = { PAD_NC(GPIO_104, UP_20K),
@@ -29,19 +42,45 @@ DISPUPD), };
+static const struct pad_config rt5682_hdmi_sku_override_table[] = { + PAD_NC(GPIO_104, UP_20K), + + /* HV_DDI1_DDC_SDA */ + PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_126, NONE, DEEP, NF1, HIZCRx1, + DISPUPD), + /* HV_DDI1_DDC_SCL */ + PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_127, NONE, DEEP, NF1, HIZCRx1, + DISPUPD), + /* GPIO_137 -- HP_INT_ODL */ + PAD_CFG_GPI_APIC_IOS(GPIO_137, NONE, DEEP, EDGE_BOTH, INVERT, HIZCRx1, + DISPUPD), + /* EN_PP3300_TOUCHSCREEN */ + PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_146, 0, DEEP, NONE, Tx0RxDCRx0, + DISPUPD), +}; + const struct pad_config *variant_override_gpio_table(size_t *num) { uint32_t sku_id; sku_id = google_chromeec_get_board_sku(); + uint32_t codec = ssfc_get_audio_codec();
switch (sku_id) { case SKU_33_DORP: case SKU_34_DORP: case SKU_35_DORP: case SKU_36_DORP: + if (codec == SSFC_AUDIO_CODEC_RT5682) { + *num = ARRAY_SIZE(hdmi_sku_override_table); + return rt5682_hdmi_sku_override_table; + } *num = ARRAY_SIZE(hdmi_sku_override_table); return hdmi_sku_override_table; default: + if (codec == SSFC_AUDIO_CODEC_RT5682) { + *num = ARRAY_SIZE(rt5682_override_table); + return rt5682_override_table; + } *num = ARRAY_SIZE(default_override_table); return default_override_table; } diff --git a/src/mainboard/google/octopus/variants/meep/overridetree.cb b/src/mainboard/google/octopus/variants/meep/overridetree.cb index a29d6fa..8752141 100644 --- a/src/mainboard/google/octopus/variants/meep/overridetree.cb +++ b/src/mainboard/google/octopus/variants/meep/overridetree.cb @@ -181,6 +181,19 @@ register "mic_amp_in_sel" = ""diff"" device i2c 1a on end end + chip drivers/i2c/generic + register "hid" = ""10EC5682"" + register "name" = ""RT58"" + register "desc" = ""Realtek RT5682"" + register "irq" = "ACPI_IRQ_LEVEL_LOW(GPIO_137_IRQ)" + register "probed" = "1" + register "property_count" = "1" + # Set the jd_src to RT5668_JD1 for jack detection + register "property_list[0].type" = "ACPI_DP_TYPE_INTEGER" + register "property_list[0].name" = ""realtek,jd-src"" + register "property_list[0].integer" = "1" + device i2c 1a on end + end end # - I2C 5 device pci 17.2 on chip drivers/i2c/generic diff --git a/src/mainboard/google/octopus/variants/meep/variant.c b/src/mainboard/google/octopus/variants/meep/variant.c index df4dbd6..362b219 100644 --- a/src/mainboard/google/octopus/variants/meep/variant.c +++ b/src/mainboard/google/octopus/variants/meep/variant.c @@ -5,6 +5,53 @@ #include <baseboard/variants.h> #include <variant/sku.h> #include <sar.h> +#include <baseboard/cbi_ssfc.h> +#include <console/console.h> +#include <device/device.h> +#include <soc/pci_devs.h> +#include <string.h> + +static void audio_codec_init_by_SSFC(void) +{ +#if !DEVTREE_EARLY + struct device *audio_i2c_host; + const struct device *audio_dev; + const struct bus *audio_i2c_bus; + char name; + + audio_i2c_host = pcidev_path_on_root(PCH_DEVFN_I2C5); + audio_i2c_bus = audio_i2c_host->link_list; + audio_dev = audio_i2c_bus->children; + + switch (ssfc_get_audio_codec()) { + case SSFC_AUDIO_CODEC_DEFAULT: + case SSFC_AUDIO_CODEC_DA7219: + name = 'D'; + printk(BIOS_INFO, "Enable DA7219.\n"); + break; + case SSFC_AUDIO_CODEC_RT5682: + name = 'R'; + printk(BIOS_ERR, "Enable RT5682.\n"); + break; + default: + printk(BIOS_ERR, + "can't identify any audio codec source from SSFC.\n"); + return; + } + + for (audio_dev = audio_dev; audio_dev; audio_dev = audio_dev->sibling) { + if (audio_dev->chip_ops && audio_dev->chip_ops->enable_dev) + audio_dev->chip_ops->enable_dev((struct device *)audio_dev); + printk(BIOS_ERR, "audio codec dev path %s.\n", + dev_name((struct device *)audio_dev)); + + if (!strncmp(dev_name(audio_dev), &name, 1)) + ((struct device *)audio_dev)->enabled = 1; + else + ((struct device *)audio_dev)->enabled = 0; + } +#endif +}
const char *get_wifi_sar_cbfs_filename(void) { @@ -51,3 +98,9 @@ return "vbt.bin"; } } + +void variant_update_devtree(struct device *dev) +{ + + audio_codec_init_by_SSFC(); +}