diff options
-rw-r--r-- | src/mainboard/google/poppy/acpi/mipi_camera.asl | 43 | ||||
-rw-r--r-- | src/mainboard/google/poppy/smihandler.c | 7 | ||||
-rw-r--r-- | src/mainboard/google/poppy/variants/baseboard/gpio.c | 2 | ||||
-rw-r--r-- | src/mainboard/google/poppy/variants/soraka/gpio.c | 2 |
4 files changed, 45 insertions, 9 deletions
diff --git a/src/mainboard/google/poppy/acpi/mipi_camera.asl b/src/mainboard/google/poppy/acpi/mipi_camera.asl index 38cf060bdb..3cf4ec0196 100644 --- a/src/mainboard/google/poppy/acpi/mipi_camera.asl +++ b/src/mainboard/google/poppy/acpi/mipi_camera.asl @@ -27,6 +27,47 @@ Scope (\_SB.PCI0.I2C2) Return (0x0F) } + Method (PMON, 0, Serialized) { + /* + * Turn on 3V3_VDD. It takes around 1 ms for voltage to + * settle to 3.3 Volt. Provide additional 2 ms delay. + */ + STXS(EN_PP3300_DX_CAM) + Sleep (3) + } + + Method (PMOF, 0, Serialized) { + /* Make Sure all PMIC outputs are off. */ + If (LEqual (VSIC, Zero)) { + CTXS(EN_PP3300_DX_CAM) + } + } + + Name (_PR0, Package (0x01) { CPMC }) + Name (_PR3, Package (0x01) { CPMC }) + + /* Power resource methods for PMIC */ + PowerResource (CPMC, 0, 0) { + Name (RSTO, 1) + Method (_ON, 0, Serialized) { + PMON() + /* Do not reset PMIC across S3 and S0ix cycle */ + if (Lequal (RSTO, 1)) { + CTXS(EN_CAM_PMIC_RST_L) + Sleep(1) + STXS(EN_CAM_PMIC_RST_L) + Sleep (3) + RSTO = 0 + } + } + Method (_OFF, 0, Serialized) { + PMOF() + } + Method (_STA, 0, Serialized) { + Return (GTXS(EN_PP3300_DX_CAM)) + } + } + /* Marks the availability of all the operation regions */ Name (AVBL, Zero) Name (AVGP, Zero) @@ -290,6 +331,7 @@ Scope (\_SB.PCI0.I2C2) If (LEqual (VSIC, Zero)) { VSIO = 0 Sleep(1) + PMOF() } } } ElseIf (LEqual (Arg0, 1)) { @@ -297,6 +339,7 @@ Scope (\_SB.PCI0.I2C2) If (LLess (VSIC, 4)) { /* Turn on VSIO */ If (LEqual (VSIC, Zero)) { + PMON() VSIO = 3 if (LNotEqual (IOVA, 52)) { diff --git a/src/mainboard/google/poppy/smihandler.c b/src/mainboard/google/poppy/smihandler.c index 1a86d0f773..70d0ab4edf 100644 --- a/src/mainboard/google/poppy/smihandler.c +++ b/src/mainboard/google/poppy/smihandler.c @@ -27,17 +27,10 @@ void mainboard_smi_espi_handler(void) chromeec_smi_process_events(); } -static void mainboard_gpio_smi_sleep(void) -{ - /* Power down camera PMIC */ - gpio_set(EN_PP3300_DX_CAM, 0); -} - void mainboard_smi_sleep(u8 slp_typ) { chromeec_smi_sleep(slp_typ, MAINBOARD_EC_S3_WAKE_EVENTS, MAINBOARD_EC_S5_WAKE_EVENTS); - mainboard_gpio_smi_sleep(); } int mainboard_smi_apmc(u8 apmc) diff --git a/src/mainboard/google/poppy/variants/baseboard/gpio.c b/src/mainboard/google/poppy/variants/baseboard/gpio.c index 803a63100f..e74e4afcf6 100644 --- a/src/mainboard/google/poppy/variants/baseboard/gpio.c +++ b/src/mainboard/google/poppy/variants/baseboard/gpio.c @@ -145,7 +145,7 @@ static const struct pad_config gpio_table[] = { /* C10 : UART0_RTS# ==> EC_CAM_PMIC_RST_L */ PAD_CFG_GPO(GPP_C10, 1, DEEP), /* C11 : UART0_CTS# ==> EN_PP3300_DX_CAM */ - PAD_CFG_GPO(GPP_C11, 1, DEEP), + PAD_CFG_GPO(GPP_C11, 0, DEEP), /* C12 : UART1_RXD ==> PCH_MEM_CONFIG[0] */ PAD_CFG_GPI(GPP_C12, NONE, DEEP), /* C13 : UART1_TXD ==> PCH_MEM_CONFIG[1] */ diff --git a/src/mainboard/google/poppy/variants/soraka/gpio.c b/src/mainboard/google/poppy/variants/soraka/gpio.c index 6f7a3e70e4..cd1258db95 100644 --- a/src/mainboard/google/poppy/variants/soraka/gpio.c +++ b/src/mainboard/google/poppy/variants/soraka/gpio.c @@ -143,7 +143,7 @@ static const struct pad_config gpio_table[] = { /* C10 : UART0_RTS# ==> EC_CAM_PMIC_RST_L */ PAD_CFG_GPO(GPP_C10, 1, DEEP), /* C11 : UART0_CTS# ==> EN_PP3300_DX_CAM */ - PAD_CFG_GPO(GPP_C11, 1, DEEP), + PAD_CFG_GPO(GPP_C11, 0, DEEP), /* C12 : UART1_RXD ==> PCH_MEM_CONFIG[0] */ PAD_CFG_GPI(GPP_C12, NONE, DEEP), /* C13 : UART1_TXD ==> PCH_MEM_CONFIG[1] */ |