summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSue Chen <sue.chen@quanta.corp-partner.google.com>2021-05-04 11:24:04 +0800
committerCommit Bot <commit-bot@chromium.org>2021-06-11 23:16:52 +0000
commit1a1bdaf3a0631dd66974bc1e1fd9c3084512a016 (patch)
treef9fba3a9bdc305fcb9c361c05f1503f2a1c9f3dd
parent01f8b5fc152da71e7bf8ae56981aef0c78188e1f (diff)
downloadchrome-ec-1a1bdaf3a0631dd66974bc1e1fd9c3084512a016.tar.gz
Limozeen: buck IC solution
LAZOR model uses DA9313. The other model uses I2C to check that the dut has LN9310 or buck IC. Set VBOB_EN instead of SWITCH_ON_L for buck IC. BUG=b:190250108 BRANCH=trogdor TEST=Make sure dut can power on. Signed-off-by: Sue Chen <sue.chen@quanta.corp-partner.google.com> Change-Id: Ib70d7e37323747e270c44658bb38ccfa48532a80 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2943986 Reviewed-by: Wai-Hong Tam <waihong@google.com> Tested-by: Wai-Hong Tam <waihong@google.com> Commit-Queue: Wai-Hong Tam <waihong@google.com>
-rw-r--r--board/lazor/sku.c15
-rw-r--r--board/lazor/sku.h3
-rw-r--r--board/lazor/switchcap.c77
3 files changed, 52 insertions, 43 deletions
diff --git a/board/lazor/sku.c b/board/lazor/sku.c
index fa271b5475..a4ef6c6b22 100644
--- a/board/lazor/sku.c
+++ b/board/lazor/sku.c
@@ -84,3 +84,18 @@ __override uint16_t board_get_ps8xxx_product_id(int port)
return PS8805_PRODUCT_ID;
}
+
+int board_has_da9313(void)
+{
+ return get_model() == LAZOR;
+}
+
+int board_has_buck_ic(void)
+{
+ return get_model() == LIMOZEEN && system_get_board_version() == 0;
+}
+
+int board_has_ln9310(void)
+{
+ return get_model() == LIMOZEEN && system_get_board_version() != 0;
+}
diff --git a/board/lazor/sku.h b/board/lazor/sku.h
index d37b502bd4..22b3c6d723 100644
--- a/board/lazor/sku.h
+++ b/board/lazor/sku.h
@@ -9,5 +9,8 @@
#define __CROS_EC_SKU_H
int board_is_clamshell(void);
+int board_has_da9313(void);
+int board_has_ln9310(void);
+int board_has_buck_ic(void);
#endif /* __CROS_EC_SKU_H */
diff --git a/board/lazor/switchcap.c b/board/lazor/switchcap.c
index b22bb57673..16f4a54c79 100644
--- a/board/lazor/switchcap.c
+++ b/board/lazor/switchcap.c
@@ -12,6 +12,7 @@
#include "i2c.h"
#include "power/qcom.h"
#include "system.h"
+#include "sku.h"
#define CPRINTS(format, args...) cprints(CC_I2C, format, ## args)
#define CPRINTF(format, args...) cprintf(CC_I2C, format, ## args)
@@ -22,31 +23,24 @@ const struct ln9310_config_t ln9310_config = {
.i2c_addr_flags = LN9310_I2C_ADDR_0_FLAGS,
};
-static int board_has_ln9310(void)
+static void switchcap_init(void)
{
- static int ln9310_present = -1;
- int status, val;
-
- /* Cache the status of LN9310 present or not */
- if (ln9310_present == -1) {
- status = i2c_read8(ln9310_config.i2c_port,
- ln9310_config.i2c_addr_flags,
- LN9310_REG_CHIP_ID,
- &val);
+ if (board_has_da9313()) {
+ CPRINTS("Use switchcap: DA9313");
/*
- * Any error reading LN9310 CHIP_ID over I2C means the chip
- * not present. Fallback to use DA9313 switchcap.
+ * When the chip in power down mode, it outputs high-Z.
+ * Set pull-down to avoid floating.
*/
- ln9310_present = !status && val == LN9310_CHIP_ID;
- }
-
- return ln9310_present;
-}
+ gpio_set_flags(GPIO_DA9313_GPIO0, GPIO_INPUT | GPIO_PULL_DOWN);
-static void switchcap_init(void)
-{
- if (board_has_ln9310()) {
+ /*
+ * Configure DA9313 enable, push-pull output. Don't set the
+ * level here; otherwise, it will override its value and
+ * shutdown the switchcap when sysjump to RW.
+ */
+ gpio_set_flags(GPIO_SWITCHCAP_ON, GPIO_OUTPUT);
+ } else if (board_has_ln9310()) {
CPRINTS("Use switchcap: LN9310");
/* Configure and enable interrupt for LN9310 */
@@ -84,47 +78,44 @@ static void switchcap_init(void)
gpio_set_level(GPIO_SWITCHCAP_ON_L, 1);
ln9310_init();
}
+ } else if (board_has_buck_ic()) {
+ CPRINTS("Use Buck IC");
} else {
- CPRINTS("Use switchcap: DA9313");
-
- /*
- * When the chip in power down mode, it outputs high-Z.
- * Set pull-down to avoid floating.
- */
- gpio_set_flags(GPIO_DA9313_GPIO0, GPIO_INPUT | GPIO_PULL_DOWN);
-
- /*
- * Configure DA9313 enable, push-pull output. Don't set the
- * level here; otherwise, it will override its value and
- * shutdown the switchcap when sysjump to RW.
- */
- gpio_set_flags(GPIO_SWITCHCAP_ON, GPIO_OUTPUT);
+ CPRINTS("ERROR: No switchcap solution");
}
}
DECLARE_HOOK(HOOK_INIT, switchcap_init, HOOK_PRIO_DEFAULT);
void board_set_switchcap_power(int enable)
{
- if (board_has_ln9310()) {
+ if (board_has_da9313()) {
+ gpio_set_level(GPIO_SWITCHCAP_ON, enable);
+ } else if (board_has_ln9310()) {
gpio_set_level(GPIO_SWITCHCAP_ON_L, !enable);
ln9310_software_enable(enable);
- } else {
- gpio_set_level(GPIO_SWITCHCAP_ON, enable);
+ } else if (board_has_buck_ic()) {
+ gpio_set_level(GPIO_VBOB_EN, enable);
}
}
int board_is_switchcap_enabled(void)
{
- if (board_has_ln9310())
- return !gpio_get_level(GPIO_SWITCHCAP_ON_L);
- else
+ if (board_has_da9313())
return gpio_get_level(GPIO_SWITCHCAP_ON);
+ else if (board_has_ln9310())
+ return !gpio_get_level(GPIO_SWITCHCAP_ON_L);
+
+ /* Board has buck ic*/
+ return gpio_get_level(GPIO_VBOB_EN);
}
int board_is_switchcap_power_good(void)
{
- if (board_has_ln9310())
- return ln9310_power_good();
- else
+ if (board_has_da9313())
return gpio_get_level(GPIO_DA9313_GPIO0);
+ else if (board_has_ln9310())
+ return ln9310_power_good();
+
+ /* Board has buck ic no way to check POWER GOOD */
+ return 1;
}