14765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev/* acoustics_default.cpp
24765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev **
34765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** Copyright 2009 Wind River Systems
44765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev **
54765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** Licensed under the Apache License, Version 2.0 (the "License");
64765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** you may not use this file except in compliance with the License.
74765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** You may obtain a copy of the License at
84765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev **
94765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev **     http://www.apache.org/licenses/LICENSE-2.0
104765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev **
114765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** Unless required by applicable law or agreed to in writing, software
124765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** distributed under the License is distributed on an "AS IS" BASIS,
134765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** See the License for the specific language governing permissions and
154765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev ** limitations under the License.
164765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev */
174765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
184765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev#define LOG_TAG "AcousticsModule"
194765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev#include <utils/Log.h>
204765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
214765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev#include "AudioHardwareALSA.h"
224765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
234765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevnamespace android
244765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev{
254765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
264765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic int s_device_open(const hw_module_t*, const char*, hw_device_t**);
274765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic int s_device_close(hw_device_t*);
284765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
294765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic status_t s_use_handle(acoustic_device_t *, alsa_handle_t *);
304765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic status_t s_cleanup(acoustic_device_t *);
314765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic status_t s_set_params(acoustic_device_t *,
324765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev        AudioSystem::audio_in_acoustics, void *params);
334765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
344765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic hw_module_methods_t s_module_methods = {
354765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    open            : s_device_open
364765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev};
374765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
384113f34dfbaa8d82a5e1ef0265e916317161984dIliyan Malchevextern "C" hw_module_t HAL_MODULE_INFO_SYM = {
394765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    tag             : HARDWARE_MODULE_TAG,
404765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    version_major   : 1,
414765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    version_minor   : 0,
424765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    id              : ACOUSTICS_HARDWARE_MODULE_ID,
434765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    name            : "ALSA acoustics module",
444765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    author          : "Wind River",
454765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    methods         : &s_module_methods,
464765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dso             : 0,
474765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    reserved        : { 0, },
484765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev};
494765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
504765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic int s_device_open(const hw_module_t* module, const char* name,
514765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev        hw_device_t** device)
524765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev{
534765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    acoustic_device_t *dev;
544765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev = (acoustic_device_t *) malloc(sizeof(*dev));
554765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    if (!dev) return -ENOMEM;
564765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
574765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    memset(dev, 0, sizeof(*dev));
584765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
594765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    /* initialize the procs */
604765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->common.tag = HARDWARE_DEVICE_TAG;
614765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->common.version = 0;
624765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->common.module = (hw_module_t *) module;
634765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->common.close = s_device_close;
644765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
654765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    // Required methods...
664765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->use_handle = s_use_handle;
674765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->cleanup = s_cleanup;
684765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    dev->set_params = s_set_params;
694765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
704765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    // read, write, and recover are optional methods...
714765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
724765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    *device = &dev->common;
734765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    return 0;
744765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev}
754765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
764765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic int s_device_close(hw_device_t* device)
774765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev{
784765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    free(device);
794765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    return 0;
804765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev}
814765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
824765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic status_t s_use_handle(acoustic_device_t *dev, alsa_handle_t *h)
834765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev{
844765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    return NO_ERROR;
854765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev}
864765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
874765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic status_t s_cleanup(acoustic_device_t *dev)
884765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev{
899746c4758b161e26eec92b1ef1ff1bf0ba0bd268Ajay Dudani    ALOGD("Acoustics close stub called.");
904765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    return NO_ERROR;
914765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev}
924765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev
934765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchevstatic status_t s_set_params(acoustic_device_t *dev,
944765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev        AudioSystem::audio_in_acoustics acoustics, void *params)
954765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev{
969746c4758b161e26eec92b1ef1ff1bf0ba0bd268Ajay Dudani    ALOGD("Acoustics set_params stub called with %d.", (int)acoustics);
974765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev    return NO_ERROR;
984765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev}
994765c439491ddda3de658e62cc4a64d10e726b34Iliyan Malchev}
100