summaryrefslogtreecommitdiff
path: root/zephyr/shim/src
diff options
context:
space:
mode:
authorMichał Barnaś <mb@semihalf.com>2021-08-06 12:01:09 +0200
committerCommit Bot <commit-bot@chromium.org>2021-08-16 12:15:16 +0000
commit7c684a81a49c03cb5c8688c8607e883f7604dad8 (patch)
tree645ebdd3765d1dfac08c53d84101cd6e6f42fd15 /zephyr/shim/src
parent8e7f105716a105173dc8af41cb76437fee62e91a (diff)
downloadchrome-ec-7c684a81a49c03cb5c8688c8607e883f7604dad8.tar.gz
zephyr: add support for switchcap in device tree
This commit adds support for switchcap definition in device tree. It will allow to remove board specific files which implemented the switchcap functionalities. This will unify the logic between different board in zephyr. BRANCH=main BUG=b:194211207 TEST=Use linked TEST commits to see example of definitions for lazor Use GPIO or LN9310 version, build and flash to lazor. Board should be able to boot correctly. Signed-off-by: Michał Barnaś <mb@semihalf.com> Change-Id: Ib80a73dcb2db95e2dcf48e33f876a39246fd506a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3085670 Reviewed-by: Keith Short <keithshort@chromium.org>
Diffstat (limited to 'zephyr/shim/src')
-rw-r--r--zephyr/shim/src/CMakeLists.txt4
-rw-r--r--zephyr/shim/src/switchcap_gpio.c47
-rw-r--r--zephyr/shim/src/switchcap_ln9310.c51
3 files changed, 102 insertions, 0 deletions
diff --git a/zephyr/shim/src/CMakeLists.txt b/zephyr/shim/src/CMakeLists.txt
index 7be2e75fb2..5fee14dfbd 100644
--- a/zephyr/shim/src/CMakeLists.txt
+++ b/zephyr/shim/src/CMakeLists.txt
@@ -33,6 +33,10 @@ zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_MOTIONSENSE
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_PANIC panic.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_PWM pwm.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_RTC rtc.c)
+zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_SWITCHCAP_GPIO
+ switchcap_gpio.c)
+zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_SWITCHCAP_LN9310
+ switchcap_ln9310.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_TEMP_SENSOR temp_sensors.c
thermal.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_TIMER hwtimer.c)
diff --git a/zephyr/shim/src/switchcap_gpio.c b/zephyr/shim/src/switchcap_gpio.c
new file mode 100644
index 0000000000..c635978b8b
--- /dev/null
+++ b/zephyr/shim/src/switchcap_gpio.c
@@ -0,0 +1,47 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <devicetree.h>
+#include "common.h"
+#include "gpio.h"
+
+#if DT_NODE_EXISTS(DT_PATH(switchcap))
+
+#if !DT_NODE_HAS_COMPAT(DT_PATH(switchcap), switchcap_gpio)
+#error "Invalid /switchcap node in device tree"
+#endif
+
+#define SC_PIN_ENABLE_PHANDLE \
+ DT_PHANDLE_BY_IDX(DT_PATH(switchcap), enable_pin, 0)
+#define SC_PIN_ENABLE \
+ GPIO_SIGNAL(SC_PIN_ENABLE_PHANDLE)
+
+#define SC_PIN_POWER_GOOD_PHANDLE \
+ DT_PHANDLE_BY_IDX(DT_PATH(switchcap), power_good_pin, 0)
+#define SC_PIN_POWER_GOOD_EXISTS \
+ DT_NODE_EXISTS(SC_PIN_POWER_GOOD_PHANDLE)
+#define SC_PIN_POWER_GOOD \
+ GPIO_SIGNAL(SC_PIN_POWER_GOOD_PHANDLE)
+
+void board_set_switchcap_power(int enable)
+{
+ gpio_set_level(SC_PIN_ENABLE, enable);
+}
+
+int board_is_switchcap_enabled(void)
+{
+ return gpio_get_level(SC_PIN_ENABLE);
+}
+
+int board_is_switchcap_power_good(void)
+{
+#if SC_PIN_POWER_GOOD_EXISTS
+ return gpio_get_level(SC_PIN_POWER_GOOD);
+#else
+ return 1;
+#endif
+}
+
+#endif
diff --git a/zephyr/shim/src/switchcap_ln9310.c b/zephyr/shim/src/switchcap_ln9310.c
new file mode 100644
index 0000000000..997ed8d15f
--- /dev/null
+++ b/zephyr/shim/src/switchcap_ln9310.c
@@ -0,0 +1,51 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <devicetree.h>
+#include "common.h"
+#include "gpio.h"
+#include "ln9310.h"
+
+#if DT_NODE_EXISTS(DT_PATH(switchcap))
+
+#if !DT_NODE_HAS_COMPAT(DT_PATH(switchcap), switchcap_ln9310)
+#error "Invalid /switchcap node in device tree"
+#endif
+
+#define SC_PIN_ENABLE_L_PHANDLE \
+ DT_PHANDLE_BY_IDX(DT_PATH(switchcap), enable_l_pin, 0)
+#define SC_PIN_ENABLE_L \
+ GPIO_SIGNAL(SC_PIN_ENABLE_L_PHANDLE)
+
+#define SC_PORT_PHANDLE \
+ DT_PHANDLE(DT_PATH(switchcap), port)
+#define SC_PORT \
+ DT_ENUM_UPPER_TOKEN(SC_PORT_PHANDLE, enum_name)
+
+#define SC_ADDR_FLAGS \
+ DT_ENUM_UPPER_TOKEN(DT_PATH(switchcap), addr_flags)
+
+void board_set_switchcap_power(int enable)
+{
+ gpio_set_level(SC_PIN_ENABLE_L, !enable);
+ ln9310_software_enable(enable);
+}
+
+int board_is_switchcap_enabled(void)
+{
+ return !gpio_get_level(SC_PIN_ENABLE_L);
+}
+
+int board_is_switchcap_power_good(void)
+{
+ return ln9310_power_good();
+}
+
+const struct ln9310_config_t ln9310_config = {
+ .i2c_port = SC_PORT,
+ .i2c_addr_flags = SC_ADDR_FLAGS,
+};
+
+#endif