From 864b2437b9a835792f23fd0ad0947b8bae6a3fad Mon Sep 17 00:00:00 2001 From: zhang Date: Thu, 2 Dec 2021 19:35:16 +0800 Subject: [PATCH 1/2] add the function of hdf power manager to linux and liteos-a Signed-off-by: zhang --- manager/Makefile | 1 + manager/src/devmgr_pm_reg.c | 123 ++++++++++++++++++++++++++++++++++++ test/Makefile | 3 +- 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100755 manager/src/devmgr_pm_reg.c diff --git a/manager/Makefile b/manager/Makefile index ed9d0b4..40df479 100644 --- a/manager/Makefile +++ b/manager/Makefile @@ -58,6 +58,7 @@ obj-y += \ $(HDF_FRAMEWORK_SRC_DIR)/framework/core/common/src/buildin_config_entry.o \ $(HDF_FRAMEWORK_SRC_DIR)/framework/core/adapter/vnode/src/hdf_vnode_adapter.o \ ./src/devmgr_load.o \ + ./src/devmgr_pm_reg.o \ $(SEC_FUNCTION_OBJECTS) ccflags-y += \ diff --git a/manager/src/devmgr_pm_reg.c b/manager/src/devmgr_pm_reg.c new file mode 100755 index 0000000..0eaf54b --- /dev/null +++ b/manager/src/devmgr_pm_reg.c @@ -0,0 +1,123 @@ +/* + * devmgr_pm.c + * + * HDF power manager of linux + * + * Copyright (c) 2021 Huawei Device Co., Ltd. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include +#include +#include "devmgr_service.h" +#include "hdf_base.h" +#include "hdf_log.h" + +#define HDF_MODULE_NAME "devmgr_pm" +#define HDF_LOG_TAG devmgr_pm + +static int devmgr_pm_suspend(struct device *dev) +{ + HDF_LOGD("%s enter", __func__); + struct IDevmgrService *devmgrService = DevmgrServiceGetInstance(); + if (devmgrService == NULL) { + return HDF_FAILURE; + } + + if (devmgrService->PowerStateChange(devmgrService, POWER_STATE_SUSPEND) != HDF_SUCCESS) { + HDF_LOGE("%s drivers suspend failed", __func__); + devmgrService->PowerStateChange(devmgrService, POWER_STATE_RESUME); + return HDF_FAILURE; + } + + return 0; +} + +static int devmgr_pm_resume(struct device *dev) +{ + HDF_LOGD("%s enter", __func__); + struct IDevmgrService *devmgrService = DevmgrServiceGetInstance(); + if (devmgrService == NULL) { + return HDF_FAILURE; + } + + devmgrService->PowerStateChange(devmgrService, POWER_STATE_RESUME); + HDF_LOGD("%s resume done", __func__); + return 0; +} + +static void devmgr_device_release(struct device *dev) +{ + HDF_LOGD("%s enter", __func__); +} + +static struct platform_device devmgr_pm_device = { + .name = HDF_MODULE_NAME, + .id = 0, + .dev = { + .release = devmgr_device_release, + } +}; + +static SIMPLE_DEV_PM_OPS(devmgr_pm, devmgr_pm_suspend, devmgr_pm_resume); + +static struct platform_driver devmgr_pm_driver = { + .probe = NULL, + .remove = NULL, + .suspend = NULL, + .resume = NULL, + .driver = { + .name = HDF_MODULE_NAME, + .owner = THIS_MODULE, + .of_match_table = NULL, + .pm = &devmgr_pm, + }, + .id_table = NULL, +}; + +static int __init devmgr_pm_init(void) +{ + int ret; + HDF_LOGD("%s enter", __func__); + ret = platform_driver_register(&devmgr_pm_driver); + if (ret != 0) { + HDF_LOGE("%s platform_driver_register failed err:%d", __func__, ret); + return ret; + } + ret = platform_device_register(&devmgr_pm_device); + if (ret != 0) { + HDF_LOGE("%s platform_device_register failed err:%d", __func__, ret); + platform_driver_unregister(&devmgr_pm_driver); + } + return ret; +} + +static void __exit devmgr_pm_exit(void) +{ + HDF_LOGD("%s enter", __func__); + platform_device_unregister(&devmgr_pm_device); + platform_driver_unregister(&devmgr_pm_driver); +} + +int DevMgrPmRegister(void) +{ + HDF_LOGD("%s enter", __func__); + return HDF_SUCCESS; +} +EXPORT_SYMBOL(DevMgrPmRegister); + +module_init(devmgr_pm_init); +module_exit(devmgr_pm_exit); + +MODULE_AUTHOR("Huawei Device CO., Ltd"); +MODULE_DESCRIPTION("HDF power manager Driver"); +MODULE_LICENSE("GPL v2"); diff --git a/test/Makefile b/test/Makefile index 60bf166..59d56bb 100644 --- a/test/Makefile +++ b/test/Makefile @@ -22,7 +22,8 @@ obj-y += $(HDF_FRAMWORK_TEST_ROOT)/common/hdf_main_test.o \ $(HDF_FRAMWORK_TEST_ROOT)/osal/osal_get_case_test.o \ $(HDF_FRAMWORK_TEST_ROOT)/manager/sample_driver_test.o \ $(HDF_FRAMWORK_TEST_ROOT)/utils/hcs_parser/unittest/hcs_config_test.o \ - $(HDF_FRAMWORK_TEST_ROOT)/utils/hcs_parser/unittest/hcs_parser_test.o + $(HDF_FRAMWORK_TEST_ROOT)/utils/hcs_parser/unittest/hcs_parser_test.o \ + $(HDF_FRAMWORK_TEST_ROOT)/pm/pm_driver_test.o obj-$(CONFIG_DRIVERS_HDF_PLATFORM_GPIO) += $(HDF_FRAMWORK_TEST_ROOT)/platform/common/gpio_test.o \ $(HDF_FRAMWORK_TEST_ROOT)/platform/entry/hdf_gpio_entry_test.o -- Gitee From af5e96aaf7658274f53ea14eba53e4b093fa1f61 Mon Sep 17 00:00:00 2001 From: zhang Date: Thu, 2 Dec 2021 19:49:47 +0800 Subject: [PATCH 2/2] add the function of hdf power manager to linux and liteos-a Signed-off-by: zhang --- manager/src/devmgr_pm_reg.c | 78 ++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/manager/src/devmgr_pm_reg.c b/manager/src/devmgr_pm_reg.c index 0eaf54b..8b34f3b 100755 --- a/manager/src/devmgr_pm_reg.c +++ b/manager/src/devmgr_pm_reg.c @@ -27,7 +27,7 @@ static int devmgr_pm_suspend(struct device *dev) { - HDF_LOGD("%s enter", __func__); + HDF_LOGD("%s enter", __func__); struct IDevmgrService *devmgrService = DevmgrServiceGetInstance(); if (devmgrService == NULL) { return HDF_FAILURE; @@ -39,12 +39,12 @@ static int devmgr_pm_suspend(struct device *dev) return HDF_FAILURE; } - return 0; + return 0; } static int devmgr_pm_resume(struct device *dev) { - HDF_LOGD("%s enter", __func__); + HDF_LOGD("%s enter", __func__); struct IDevmgrService *devmgrService = DevmgrServiceGetInstance(); if (devmgrService == NULL) { return HDF_FAILURE; @@ -52,66 +52,66 @@ static int devmgr_pm_resume(struct device *dev) devmgrService->PowerStateChange(devmgrService, POWER_STATE_RESUME); HDF_LOGD("%s resume done", __func__); - return 0; + return 0; } static void devmgr_device_release(struct device *dev) { - HDF_LOGD("%s enter", __func__); + HDF_LOGD("%s enter", __func__); } static struct platform_device devmgr_pm_device = { - .name = HDF_MODULE_NAME, - .id = 0, - .dev = { - .release = devmgr_device_release, - } + .name = HDF_MODULE_NAME, + .id = 0, + .dev = { + .release = devmgr_device_release, + } }; static SIMPLE_DEV_PM_OPS(devmgr_pm, devmgr_pm_suspend, devmgr_pm_resume); static struct platform_driver devmgr_pm_driver = { - .probe = NULL, - .remove = NULL, - .suspend = NULL, - .resume = NULL, - .driver = { - .name = HDF_MODULE_NAME, - .owner = THIS_MODULE, - .of_match_table = NULL, - .pm = &devmgr_pm, - }, - .id_table = NULL, + .probe = NULL, + .remove = NULL, + .suspend = NULL, + .resume = NULL, + .driver = { + .name = HDF_MODULE_NAME, + .owner = THIS_MODULE, + .of_match_table = NULL, + .pm = &devmgr_pm, + }, + .id_table = NULL, }; static int __init devmgr_pm_init(void) { - int ret; - HDF_LOGD("%s enter", __func__); - ret = platform_driver_register(&devmgr_pm_driver); - if (ret != 0) { - HDF_LOGE("%s platform_driver_register failed err:%d", __func__, ret); - return ret; - } - ret = platform_device_register(&devmgr_pm_device); - if (ret != 0) { - HDF_LOGE("%s platform_device_register failed err:%d", __func__, ret); - platform_driver_unregister(&devmgr_pm_driver); - } - return ret; + int ret; + HDF_LOGD("%s enter", __func__); + ret = platform_driver_register(&devmgr_pm_driver); + if (ret != 0) { + HDF_LOGE("%s platform_driver_register failed err:%d", __func__, ret); + return ret; + } + ret = platform_device_register(&devmgr_pm_device); + if (ret != 0) { + HDF_LOGE("%s platform_device_register failed err:%d", __func__, ret); + platform_driver_unregister(&devmgr_pm_driver); + } + return ret; } static void __exit devmgr_pm_exit(void) { - HDF_LOGD("%s enter", __func__); - platform_device_unregister(&devmgr_pm_device); - platform_driver_unregister(&devmgr_pm_driver); + HDF_LOGD("%s enter", __func__); + platform_device_unregister(&devmgr_pm_device); + platform_driver_unregister(&devmgr_pm_driver); } int DevMgrPmRegister(void) { - HDF_LOGD("%s enter", __func__); - return HDF_SUCCESS; + HDF_LOGD("%s enter", __func__); + return HDF_SUCCESS; } EXPORT_SYMBOL(DevMgrPmRegister); -- Gitee