summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2022-03-31 17:51:06 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-04-12 07:42:21 +0000
commit7571b9cbe8994ea8694fcd08d7d1af01d6c4c4a3 (patch)
tree4d31d91e09cd520d57fa70c7133a404231539a9d
parentfe2fd964dfbe6ed8e1b39b268b8b0784adfa5310 (diff)
downloadchrome-ec-7571b9cbe8994ea8694fcd08d7d1af01d6c4c4a3.tar.gz
rt9490: add dt support for irq handler
Adds an `irq` property and auto generates the irq handler for rt9490 driver. BUG=b:220814055 TEST=zmake build krabby BRANCH=none Signed-off-by: Ting Shen <phoenixshen@google.com> Change-Id: I5603880378f2ddc67b296adaaabb4948c8cba355 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3562051 Reviewed-by: Keith Short <keithshort@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--zephyr/dts/bindings/usbc/richtek,rt9490-bc12.yaml6
-rw-r--r--zephyr/shim/include/usbc/utils.h8
-rw-r--r--zephyr/shim/src/CMakeLists.txt2
-rw-r--r--zephyr/shim/src/bc12_rt9490.c41
4 files changed, 57 insertions, 0 deletions
diff --git a/zephyr/dts/bindings/usbc/richtek,rt9490-bc12.yaml b/zephyr/dts/bindings/usbc/richtek,rt9490-bc12.yaml
index c228669fc7..94496455a3 100644
--- a/zephyr/dts/bindings/usbc/richtek,rt9490-bc12.yaml
+++ b/zephyr/dts/bindings/usbc/richtek,rt9490-bc12.yaml
@@ -5,3 +5,9 @@
description: USBC BC1.2
compatible: "richtek,rt9490-bc12"
+
+properties:
+ irq:
+ type: phandles
+ description: |
+ GPIO interrupt from BC1.2
diff --git a/zephyr/shim/include/usbc/utils.h b/zephyr/shim/include/usbc/utils.h
index a2ad495ea9..49b9aa4b71 100644
--- a/zephyr/shim/include/usbc/utils.h
+++ b/zephyr/shim/include/usbc/utils.h
@@ -25,4 +25,12 @@
*/
#define USBC_PORT(id) DT_REG_ADDR(DT_PARENT(id))
+/*
+ * Get the port number from a child of `named-usbc-port` node.
+ *
+ * @param inst: instance number of the node
+ */
+#define USBC_PORT_FROM_INST(inst) USBC_PORT(DT_DRV_INST(inst))
+
+
#endif /* __CROS_EC_ZEPHYR_SHIM_USBC_UTIL */
diff --git a/zephyr/shim/src/CMakeLists.txt b/zephyr/shim/src/CMakeLists.txt
index 4afacd396e..57c3748a6e 100644
--- a/zephyr/shim/src/CMakeLists.txt
+++ b/zephyr/shim/src/CMakeLists.txt
@@ -24,6 +24,8 @@ zephyr_library_sources_ifdef(no_libgcc libgcc_${ARCH}.S)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_ADC adc.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_BATTERY
battery.c)
+zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_CHARGER_RT9490
+ bc12_rt9490.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_HOST_INTERFACE_ESPI
espi.c)
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_FAN fan.c)
diff --git a/zephyr/shim/src/bc12_rt9490.c b/zephyr/shim/src/bc12_rt9490.c
new file mode 100644
index 0000000000..68798241d5
--- /dev/null
+++ b/zephyr/shim/src/bc12_rt9490.c
@@ -0,0 +1,41 @@
+/* Copyright 2022 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.
+ */
+
+#define DT_DRV_COMPAT richtek_rt9490_bc12
+
+#include <devicetree.h>
+#include "driver/charger/rt9490.h"
+#include "gpio/gpio_int.h"
+#include "hooks.h"
+#include "usbc/utils.h"
+
+#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT)
+
+static void rt9490_bc12_enable_irqs(void)
+{
+ DT_INST_FOREACH_STATUS_OKAY(BC12_GPIO_ENABLE_INTERRUPT);
+}
+DECLARE_HOOK(HOOK_INIT, rt9490_bc12_enable_irqs, HOOK_PRIO_DEFAULT);
+
+#define GPIO_SIGNAL_FROM_INST(inst) \
+ GPIO_SIGNAL(DT_PHANDLE(DT_INST_PHANDLE(inst, irq), irq_pin))
+
+#define RT9490_DISPATCH_INTERRUPT(inst) \
+ IF_ENABLED(DT_INST_NODE_HAS_PROP(inst, irq), \
+ (case GPIO_SIGNAL_FROM_INST(inst): \
+ rt9490_interrupt(USBC_PORT_FROM_INST(inst)); \
+ break; \
+ ))
+
+void rt9490_bc12_dt_interrupt(enum gpio_signal signal)
+{
+ switch (signal) {
+ DT_INST_FOREACH_STATUS_OKAY(RT9490_DISPATCH_INTERRUPT);
+ default:
+ break;
+ }
+}
+
+#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */