summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/core/power_domain.h85
-rw-r--r--components/drivers/include/drivers/ofw.h2
-rw-r--r--components/drivers/include/drivers/platform.h1
-rw-r--r--components/drivers/include/rtdevice.h1
4 files changed, 89 insertions, 0 deletions
diff --git a/components/drivers/include/drivers/core/power_domain.h b/components/drivers/include/drivers/core/power_domain.h
new file mode 100644
index 0000000000..6b1f7cde65
--- /dev/null
+++ b/components/drivers/include/drivers/core/power_domain.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-11-21 GuEe-GUI first version
+ */
+
+#ifndef __RT_DM_POWER_DOMAIN_H__
+#define __RT_DM_POWER_DOMAIN_H__
+
+#include <rthw.h>
+#include <rtthread.h>
+
+#include <ref.h>
+
+#define RT_POWER_DOMAIN_OBJ_NAME "PMD"
+#define RT_POWER_DOMAIN_PROXY_OBJ_NAME "PMP"
+
+struct rt_ofw_node;
+struct rt_ofw_cell_args;
+
+struct rt_dm_power_domain_unit
+{
+ rt_list_t list;
+
+ int id;
+ struct rt_dm_power_domain *domain;
+};
+
+struct rt_dm_power_domain_proxy
+{
+ struct rt_object parent;
+
+ struct rt_dm_power_domain *(*ofw_parse)(struct rt_dm_power_domain_proxy *proxy,
+ struct rt_ofw_cell_args *args);
+};
+
+struct rt_dm_power_domain
+{
+ struct rt_object parent;
+
+ struct rt_device *dev;
+ struct rt_dm_power_domain *parent_domain;
+
+ rt_list_t list;
+ rt_list_t child_nodes;
+ rt_list_t unit_nodes;
+
+ struct rt_ref ref;
+ struct rt_spinlock lock;
+
+ rt_err_t (*power_on)(struct rt_dm_power_domain *domain);
+ rt_err_t (*power_off)(struct rt_dm_power_domain *domain);
+ rt_err_t (*attach_dev)(struct rt_dm_power_domain *domain, struct rt_device *dev);
+ rt_err_t (*detach_dev)(struct rt_dm_power_domain *domain, struct rt_device *dev);
+
+ void *pirv;
+};
+
+void rt_dm_power_domain_proxy_default_name(struct rt_dm_power_domain_proxy *proxy);
+void rt_dm_power_domain_proxy_ofw_bind(struct rt_dm_power_domain_proxy *proxy,
+ struct rt_ofw_node *np);
+
+rt_err_t rt_dm_power_domain_register(struct rt_dm_power_domain *domain);
+rt_err_t rt_dm_power_domain_unregister(struct rt_dm_power_domain *domain);
+
+rt_err_t rt_dm_power_domain_register_child(struct rt_dm_power_domain *domain,
+ struct rt_dm_power_domain *child_domain);
+rt_err_t rt_dm_power_domain_unregister_child(struct rt_dm_power_domain *domain,
+ struct rt_dm_power_domain *child_domain);
+
+rt_err_t rt_dm_power_domain_power_on(struct rt_dm_power_domain *domain);
+rt_err_t rt_dm_power_domain_power_off(struct rt_dm_power_domain *domain);
+
+struct rt_dm_power_domain *rt_dm_power_domain_get_by_index(struct rt_device *dev, int index);
+struct rt_dm_power_domain *rt_dm_power_domain_get_by_name(struct rt_device *dev, const char *name);
+rt_err_t rt_dm_power_domain_put(struct rt_dm_power_domain *domain);
+
+rt_err_t rt_dm_power_domain_attach(struct rt_device *dev, rt_bool_t on);
+rt_err_t rt_dm_power_domain_detach(struct rt_device *dev, rt_bool_t off);
+
+#endif /* __RT_DM_POWER_DOMAIN_H__ */
diff --git a/components/drivers/include/drivers/ofw.h b/components/drivers/include/drivers/ofw.h
index 809a84d4a4..7531dfe3c5 100644
--- a/components/drivers/include/drivers/ofw.h
+++ b/components/drivers/include/drivers/ofw.h
@@ -430,6 +430,8 @@ rt_inline rt_bool_t rt_ofw_node_is_type(const struct rt_ofw_node *np, const char
struct rt_ofw_stub *rt_ofw_stub_probe_range(struct rt_ofw_node *np,
const struct rt_ofw_stub *stub_start, const struct rt_ofw_stub *stub_end);
+struct rt_object *rt_ofw_parse_object(struct rt_ofw_node *np, const char *obj_name, const char *cells_name);
+
rt_err_t rt_ofw_console_setup(void);
const char *rt_ofw_bootargs_select(const char *key, int index);
diff --git a/components/drivers/include/drivers/platform.h b/components/drivers/include/drivers/platform.h
index d63980fc65..5dac6762b5 100644
--- a/components/drivers/include/drivers/platform.h
+++ b/components/drivers/include/drivers/platform.h
@@ -54,6 +54,7 @@ rt_err_t rt_platform_driver_register(struct rt_platform_driver *pdrv);
rt_err_t rt_platform_device_register(struct rt_platform_device *pdev);
rt_err_t rt_platform_ofw_device_probe_child(struct rt_ofw_node *np);
+rt_err_t rt_platform_ofw_free(struct rt_platform_device *pdev);
#define RT_PLATFORM_DRIVER_EXPORT(driver) RT_DRIVER_EXPORT(driver, platform, BUILIN)
diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h
index 863e9d8503..5b080fced7 100644
--- a/components/drivers/include/rtdevice.h
+++ b/components/drivers/include/rtdevice.h
@@ -42,6 +42,7 @@ extern "C" {
#ifdef RT_USING_DM
#include "drivers/core/dm.h"
#include "drivers/core/numa.h"
+#include "drivers/core/power_domain.h"
#include "drivers/platform.h"
#ifdef RT_USING_OFW