summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zephyr/Kconfig21
-rw-r--r--zephyr/dts/bindings/switchcap/switchcap-gpio.yaml16
-rw-r--r--zephyr/dts/bindings/switchcap/switchcap-ln9310.yaml27
-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
6 files changed, 165 insertions, 1 deletions
diff --git a/zephyr/Kconfig b/zephyr/Kconfig
index 7041fd63ef..05b9d5d055 100644
--- a/zephyr/Kconfig
+++ b/zephyr/Kconfig
@@ -627,6 +627,22 @@ config PLATFORM_EC_SWITCH
This also enables the "mmapinfo" console command to report the current
state of all switches.
+choice PLATFORM_EC_SWITCHCAP_TYPE
+ prompt "Enable switchcap support"
+ optional
+ help
+ Enable support for switchcap used to power on the AP.
+ If enabled, type of switchcap must be selected and node in device
+ tree must be added that describes the driver and pins used to control
+ the switchcap.
+
+config PLATFORM_EC_SWITCHCAP_GPIO
+ bool "GPIO controlled switchcap"
+ help
+ Enable support for the GPIO controlled switchcap.
+ Pins used for controlling the switchcap must be defined in board's
+ device tree.
+
config PLATFORM_EC_SWITCHCAP_LN9310
bool "LN9310 switchcap driver"
depends on PLATFORM_EC_I2C
@@ -634,7 +650,10 @@ config PLATFORM_EC_SWITCHCAP_LN9310
Enable support for the LION Semiconductor LN9310 switched
capacitor converter. This will export definitions for
ln9310_init, ln9310_interrupt, and ln9310_power_good, which
- project-specific code should call appropriately.
+ project-specific code should call appropriately if there's
+ no switchcap node in device tree.
+
+endchoice
config PLATFORM_EC_SYSTEM_UNLOCKED
bool "System unlocked: allow dangerous commands while in development"
diff --git a/zephyr/dts/bindings/switchcap/switchcap-gpio.yaml b/zephyr/dts/bindings/switchcap/switchcap-gpio.yaml
new file mode 100644
index 0000000000..5d1a25bf94
--- /dev/null
+++ b/zephyr/dts/bindings/switchcap/switchcap-gpio.yaml
@@ -0,0 +1,16 @@
+description: SwitchCap controlled by gpios
+
+compatible: "switchcap-gpio"
+
+properties:
+ enable-pin:
+ type: phandle
+ required: true
+ description: |
+ GPIO used to enable the switch cap
+
+ power-good-pin:
+ type: phandle
+ required: false
+ description: |
+ GPIO used to read if power is good
diff --git a/zephyr/dts/bindings/switchcap/switchcap-ln9310.yaml b/zephyr/dts/bindings/switchcap/switchcap-ln9310.yaml
new file mode 100644
index 0000000000..afd89aacc6
--- /dev/null
+++ b/zephyr/dts/bindings/switchcap/switchcap-ln9310.yaml
@@ -0,0 +1,27 @@
+description: SwitchCap controlled by LN9310
+
+compatible: "switchcap-ln9310"
+
+properties:
+ enable-l-pin:
+ type: phandle
+ required: true
+ description: |
+ GPIO used to enable the switch cap - active low
+
+ port:
+ type: phandle
+ required: true
+ description: |
+ I2C port used to communicate with controller
+
+ addr-flags:
+ type: string
+ default: "LN9310_I2C_ADDR_0_FLAGS"
+ enum:
+ - "LN9310_I2C_ADDR_0_FLAGS"
+ - "LN9310_I2C_ADDR_1_FLAGS"
+ - "LN9310_I2C_ADDR_2_FLAGS"
+ - "LN9310_I2C_ADDR_3_FLAGS"
+ description: |
+ I2C address of controller
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