aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainboard/google/poppy/acpi/mipi_camera.asl43
-rw-r--r--src/mainboard/google/poppy/smihandler.c7
-rw-r--r--src/mainboard/google/poppy/variants/baseboard/gpio.c2
-rw-r--r--src/mainboard/google/poppy/variants/soraka/gpio.c2
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] */