diff --git a/src/mainboard/google/bluey/Kconfig b/src/mainboard/google/bluey/Kconfig index 249990c9f8..0ddf0211ea 100644 --- a/src/mainboard/google/bluey/Kconfig +++ b/src/mainboard/google/bluey/Kconfig @@ -94,6 +94,12 @@ config MAINBOARD_NO_USB_A_PORT help Enable this option if your mainboard is not equipped with USB-A port. +config MAINBOARD_SUPPORTS_PARALLEL_CHARGING + bool + default n + help + Enable this option if your mainboard supports parallel charging. + config MAINBOARD_HAS_GOOGLE_TPM bool default n diff --git a/src/mainboard/google/bluey/board.h b/src/mainboard/google/bluey/board.h index af2715b898..40e63791dc 100644 --- a/src/mainboard/google/bluey/board.h +++ b/src/mainboard/google/bluey/board.h @@ -42,6 +42,7 @@ void setup_chromeos_gpios(void); bool is_off_mode(void); +void configure_parallel_charging(void); void enable_slow_battery_charging(void); void disable_slow_battery_charging(void); diff --git a/src/mainboard/google/bluey/charging.c b/src/mainboard/google/bluey/charging.c index bbb849d438..9d53372f9b 100644 --- a/src/mainboard/google/bluey/charging.c +++ b/src/mainboard/google/bluey/charging.c @@ -21,6 +21,35 @@ enum charging_status { CHRG_ENABLE, }; +#define PMC8380F_SLAVE_ID 0x05 +#define GPIO07_MODE_CTL 0x8E40 +#define GPIO07_DIG_OUT_SOURCE_CTL 0x8E44 +#define GPIO07_EN_CTL 0x8E46 +#define GPIO09_MODE_CTL 0x9040 +#define GPIO09_DIG_OUT_SOURCE_CTL 0x9044 +#define GPIO09_EN_CTL 0x9046 + +#define MODE_OUTPUT 0x01 +#define OUTPUT_INVERT 0x80 +#define PERPH_EN 0x80 + +/* + * Enable PMC8380F GPIO07 & GPIO09 for parallel charging. + */ +void configure_parallel_charging(void) +{ + if (!CONFIG(MAINBOARD_SUPPORTS_PARALLEL_CHARGING)) + return; + + printk(BIOS_INFO, "Configure parallel charging support\n"); + spmi_write8(SPMI_ADDR(PMC8380F_SLAVE_ID, GPIO07_MODE_CTL), MODE_OUTPUT); + spmi_write8(SPMI_ADDR(PMC8380F_SLAVE_ID, GPIO07_DIG_OUT_SOURCE_CTL), OUTPUT_INVERT); + spmi_write8(SPMI_ADDR(PMC8380F_SLAVE_ID, GPIO07_EN_CTL), PERPH_EN); + spmi_write8(SPMI_ADDR(PMC8380F_SLAVE_ID, GPIO09_MODE_CTL), MODE_OUTPUT); + spmi_write8(SPMI_ADDR(PMC8380F_SLAVE_ID, GPIO09_DIG_OUT_SOURCE_CTL), OUTPUT_INVERT); + spmi_write8(SPMI_ADDR(PMC8380F_SLAVE_ID, GPIO09_EN_CTL), PERPH_EN); +} + /* * Enable charging w/ 1A Icurrent supply at max. */ diff --git a/src/mainboard/google/bluey/mainboard.c b/src/mainboard/google/bluey/mainboard.c index 660a99f07a..7b31a8cba6 100644 --- a/src/mainboard/google/bluey/mainboard.c +++ b/src/mainboard/google/bluey/mainboard.c @@ -85,6 +85,8 @@ static void display_startup(void) static void mainboard_init(struct device *dev) { + configure_parallel_charging(); + /* Skip mainboard initialization if boot mode is "low-battery" or "off-mode charging"*/ if (is_low_power_boot()) return;