Device driver for TI TLV320AIC1110 voice band codec

Work in Progress

TLV320AIC1110.cpp

Committer:
sam_grove
Date:
2013-05-15
Revision:
3:4592d862ef88
Parent:
1:4d559df5733e
Parent:
2:e7c7c0177dd8
Child:
4:470f89e786f9

File content as of revision 3:4592d862ef88:

/**
 * @file    TLV320AIC1110.cpp
 * @brief   Device driver - TLV320AIC1110 CODEC
 * @author  sam grove
 * @version 1.0
 * @see     http://www.ti.com/product/tlv320aic1110
 *
 * Copyright (c) 2013
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
#include "TLV320AIC1110.h"
#include "LogUtil.h"

TLV320AIC1110::TLV320AIC1110(I2C &i2c)
{
    _i2c = &i2c;
    _i2c->frequency(400000);
    
    return;
}

TLV320AIC1110::~TLV320AIC1110()
{
    return;
}

void TLV320AIC1110::init(void) const
{
    writeRegister(POWER_CONTROL, 0x9B);
    writeRegister(MODE_CONTROL, 0x00);
    writeRegister(AUX, 0x81);
    
    return;
}

void TLV320AIC1110::regDump(void) const
{
    for(int i=0; i<7; i++)
    {
        LOG(" Register 0x%02x 0x%02x\n", i, readRegister(i));
    }
    
    return;
}

void TLV320AIC1110::writeRegister(const TLV320AIC1110_REGISTERS reg, const uint8_t value) const
{
    const uint8_t w_address = 0xE2;
    uint8_t data[2] = {reg, value};
    
    __disable_irq();
    if (0 != _i2c->write(w_address, (char *)data, 2))
    {
        ERROR("write failed\n");
    }
    __enable_irq();
        
    return;
}

uint8_t TLV320AIC1110::readRegister(const uint8_t reg) const
{
    const uint8_t w_address = 0xE2;
    const uint8_t r_address = 0xE3;
    char data[1] = {reg};
    __disable_irq();
    _i2c->write(w_address, (char *)data, 1, 1);
    _i2c->read (r_address, data, 1);
    __enable_irq();
    
//    _i2c->start();
//    _i2c->write(w_address);
//    _i2c->write(reg);
//    _i2c->stop();
//    _i2c->start();
//    _i2c->write(r_address);
//    data[0] = _i2c->read(1);
//    _i2c->stop();
    
    return data[0];
}