• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #include "tfa9879_accessory_impl.h"
10 #include "audio_accessory_if.h"
11 #include "audio_core.h"
12 #include "audio_sapm.h"
13 #include "hdf_log.h"
14 
15 #define HDF_LOG_TAG "accessory"
16 
17 struct AccessoryData g_accessoryData = {
18     .Init = AccessoryDeviceInit,
19     .Read = AccessoryDeviceReadReg,
20     .Write = AccessoryDeviceWriteReg,
21     .AiaoRead = AccessoryAiaoDeviceReadReg,
22     .AiaoWrite = AccessoryAiaoDeviceWriteReg,
23 };
24 
25 struct AudioDaiOps g_accessoryDaiDeviceOps = {
26     .Startup = AccessoryDaiStartup,
27     .HwParams = AccessoryDaiHwParams,
28 };
29 
30 struct DaiData g_accessoryDaiData = {
31     .drvDaiName = "accessory_dai",
32     .DaiInit = AccessoryDaiDeviceInit,
33     .ops = &g_accessoryDaiDeviceOps,
34 };
35 
36 /* HdfDriverEntry */
GetServiceName(const struct HdfDeviceObject * device)37 static int32_t GetServiceName(const struct HdfDeviceObject *device)
38 {
39     const struct DeviceResourceNode *node = NULL;
40     struct DeviceResourceIface *drsOps = NULL;
41     int32_t ret;
42     if (device == NULL) {
43         AUDIO_DRIVER_LOG_ERR("input HdfDeviceObject object is nullptr.");
44         return HDF_FAILURE;
45     }
46     node = device->property;
47     if (node == NULL) {
48         AUDIO_DRIVER_LOG_ERR("get drs node is nullptr.");
49         return HDF_FAILURE;
50     }
51     drsOps = DeviceResourceGetIfaceInstance(HDF_CONFIG_SOURCE);
52     if (drsOps == NULL || drsOps->GetString == NULL) {
53         AUDIO_DRIVER_LOG_ERR("drsOps or drsOps getString is null!");
54         return HDF_FAILURE;
55     }
56     ret = drsOps->GetString(node, "serviceName", &g_accessoryData.drvAccessoryName, 0);
57     if (ret != HDF_SUCCESS) {
58         AUDIO_DRIVER_LOG_ERR("read serviceName fail!");
59         return ret;
60     }
61     return HDF_SUCCESS;
62 }
63 
64 /* HdfDriverEntry implementations */
AccessoryDriverInit(struct HdfDeviceObject * device)65 static int32_t AccessoryDriverInit(struct HdfDeviceObject *device)
66 {
67     int32_t ret;
68     AUDIO_DRIVER_LOG_DEBUG("entry.\n");
69     if (device == NULL) {
70         AUDIO_DRIVER_LOG_ERR("device is NULL.");
71         return HDF_ERR_INVALID_OBJECT;
72     }
73     ret = GetServiceName(device);
74     if (ret !=  HDF_SUCCESS) {
75         AUDIO_DRIVER_LOG_ERR("get service name fail.");
76         return ret;
77     }
78     ret = AudioRegisterAccessory(device, &g_accessoryData, &g_accessoryDaiData);
79     if (ret !=  HDF_SUCCESS) {
80         AUDIO_DRIVER_LOG_ERR("register dai fail.");
81         return ret;
82     }
83     AUDIO_DRIVER_LOG_INFO("success!");
84     return HDF_SUCCESS;
85 }
86 
87 /* HdfDriverEntry implementations */
AccessoryDriverBind(struct HdfDeviceObject * device)88 static int32_t AccessoryDriverBind(struct HdfDeviceObject *device)
89 {
90     (void)device;
91     AUDIO_DRIVER_LOG_INFO("success!");
92     return HDF_SUCCESS;
93 }
94 
95 /* HdfDriverEntry definitions */
96 struct HdfDriverEntry g_accessoryDriverEntry = {
97     .moduleVersion = 1,
98     .moduleName = "CODEC_TFA9879",
99     .Bind = AccessoryDriverBind,
100     .Init = AccessoryDriverInit,
101     .Release = NULL,
102 };
103 HDF_INIT(g_accessoryDriverEntry);
104