Enhance to check parameters and move volume_level_max array to audio_hal_volume_t
[platform/adaptation/spreadtrum/audio-hal-sc7727.git] / tizen-audio.c
1 /*
2  * audio-hal
3  *
4  * Copyright (c) 2015 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include "tizen-audio-internal.h"
25
26 audio_return_t audio_init(void **audio_handle)
27 {
28     audio_hal_t *ah;
29     audio_return_t ret = AUDIO_RET_OK;
30
31     AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
32
33     if (!(ah = malloc(sizeof(audio_hal_t)))) {
34         AUDIO_LOG_ERROR("failed to malloc()");
35         return AUDIO_ERR_RESOURCE;
36     }
37     if ((ret = _audio_volume_init(ah))) {
38         AUDIO_LOG_ERROR("failed to _audio_volume_init(), ret(0x%x)", ret);
39         goto error_exit;
40     }
41     if ((ret = _audio_routing_init(ah))) {
42         AUDIO_LOG_ERROR("failed to _audio_routing_init(), ret(0x%x)", ret);
43         goto error_exit;
44     }
45     if ((ret = _audio_stream_init(ah))) {
46         AUDIO_LOG_ERROR("failed to _audio_stream_init(), ret(0x%x)", ret);
47         goto error_exit;
48     }
49     if ((ret = _audio_pcm_init(ah))) {
50         AUDIO_LOG_ERROR("failed to _audio_pcm_init(), ret(0x%x)", ret);
51         goto error_exit;
52     }
53     if ((ret = _audio_modem_init(ah))) {
54         AUDIO_LOG_ERROR("failed to _audio_modem_init(), ret(0x%x)", ret);
55         goto error_exit;
56     }
57     if ((ret = _audio_comm_init(ah))) {
58         AUDIO_LOG_ERROR("failed to _audio_comm_init(), ret(0x%x)", ret);
59         goto error_exit;
60     }
61
62     *audio_handle = (void *)ah;
63     return AUDIO_RET_OK;
64
65 error_exit:
66     if (ah)
67         free(ah);
68
69     return ret;
70 }
71
72 audio_return_t audio_deinit(void *audio_handle)
73 {
74     audio_hal_t *ah = (audio_hal_t *)audio_handle;
75
76     AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
77
78     _audio_volume_deinit(ah);
79     _audio_routing_deinit(ah);
80     _audio_stream_deinit(ah);
81     _audio_pcm_deinit(ah);
82     _audio_modem_deinit(ah);
83     _audio_comm_deinit(ah);
84     free(ah);
85     ah = NULL;
86
87     return AUDIO_RET_OK;
88 }