mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-08-27 20:49:55 -04:00
a5953e141d
Change-Id: Ib020a8396299ad8e6957663574e8fb705e75c6a2 Signed-off-by: duxbbo <duxiaobo@huawei.com>
63 lines
1.7 KiB
C
63 lines
1.7 KiB
C
/*
|
|
* Copyright (c) 2021 Huawei Device Co., Ltd.
|
|
*
|
|
* HDF is dual licensed: you can use it either under the terms of
|
|
* the GPL, or the BSD license, at your option.
|
|
* See the LICENSE file in the root of this repository for complete details.
|
|
*/
|
|
|
|
#include "hdf_chip.h"
|
|
#include "hdf_chip_config.h"
|
|
#include "hdf_device_desc.h"
|
|
#include "hdf_power.h"
|
|
#include "hdf_reset.h"
|
|
#include "osal/osal_mem.h"
|
|
|
|
struct HdfVirtualDevice *CreateVirtualDevice(struct HdfChipConfig *config) {
|
|
struct HdfVirtualDevice *device = NULL;
|
|
int32_t ret = HDF_SUCCESS;
|
|
if (config == NULL) {
|
|
return NULL;
|
|
}
|
|
device = (struct HdfVirtualDevice *)OsalMemCalloc(sizeof(struct HdfVirtualDevice));
|
|
if (device == NULL) {
|
|
return NULL;
|
|
}
|
|
do {
|
|
device->name = config->name;
|
|
|
|
device->power = CreateVirtualPower(config->powers);
|
|
if (device->power == NULL) {
|
|
ret = HDF_FAILURE;
|
|
break;
|
|
}
|
|
|
|
device->reset = CreateVirtualReset(&config->reset);
|
|
if (device->reset == NULL) {
|
|
ret = HDF_FAILURE;
|
|
break;
|
|
}
|
|
} while (false);
|
|
|
|
if (ret != HDF_SUCCESS) {
|
|
ReleaseVirtualDevice(device);
|
|
device = NULL;
|
|
}
|
|
return device;
|
|
}
|
|
void ReleaseVirtualDevice(struct HdfVirtualDevice *device) {
|
|
if (device == NULL) {
|
|
return;
|
|
}
|
|
if (device->power != NULL && device->power->ops != NULL && device->power->ops->Release != NULL) {
|
|
device->power->ops->Release(device->power);
|
|
device->power = NULL;
|
|
}
|
|
|
|
if (device->reset != NULL && device->reset->ops != NULL && device->reset->ops->Release != NULL) {
|
|
device->reset->ops->Release(device->reset);
|
|
device->reset = NULL;
|
|
}
|
|
OsalMemFree(device);
|
|
}
|