Tfa98xx_Error_t Tfa9890_specific(Tfa98xx_handle_t handle) { Tfa98xx_Error_t error = Tfa98xx_Error_Ok; unsigned short value; ALOGD("[%s][%s] 2", __FILE__, __func__); if (!handle_is_open(handle)) return Tfa98xx_Error_NotOpen; /* reset all i2C registers to default */ error = Tfa98xx_WriteRegister16(handle, 0x09, 0x0002); if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_ReadRegister16(handle, 0x09, &value); } if (Tfa98xx_Error_Ok == error) { /* DSP must be in control of the amplifier to avoid plops */ value |= TFA98XX_SYS_CTRL_AMPE_POS; error = Tfa98xx_WriteRegister16(handle, 0x09, value); } /* some other registers must be set for optimal amplifier behaviour */ if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x06, 0x000F); // not for n1c } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x07, 0x8FFF); // not for n1c } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x08, 0x7832); // change for n1c } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x09, 0x824D); } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x0A, 0x38E5); // not for n1c } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x0E, 0x0F01);// not for n1c } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x46, 0x4000);// not for n1c } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x47, 0x5901); } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x48, 0x06C0); } if (Tfa98xx_Error_Ok == error) { error = Tfa98xx_WriteRegister16(handle, 0x49, 0xAD93); } return error; }
static int tfa98xx_codec_remove(struct snd_soc_codec *codec) { enum Tfa98xx_Error err; pr_info("%s\n", __func__); if (handle_is_open(handles[TOP])) { err = Tfa98xx_Close(handles[TOP]); if (err != Tfa98xx_Error_Ok) pr_err("%s: Top Tfa98xx_Close failed\n", __func__); handles[TOP] = -1; } if (handle_is_open(handles[BOTTOM])) { err = Tfa98xx_Close(handles[BOTTOM]); if (err != Tfa98xx_Error_Ok) pr_err("%s: Top Tfa98xx_Close failed\n", __func__); handles[TOP] = -1; } return 0; }
enum Tfa98xx_Error Tfa9890_specific(Tfa98xx_handle_t handle) { enum Tfa98xx_Error error = Tfa98xx_Error_Ok; if (!handle_is_open(handle)) return Tfa98xx_Error_NotOpen; /* all i2C registers are already set to default for N1C2 */ return error; }
Tfa98xx_Error_t Tfa9890_specific(Tfa98xx_handle_t handle) { Tfa98xx_Error_t error = Tfa98xx_Error_Ok; unsigned short value = 0; //unsigned short value; if (!handle_is_open(handle)) return Tfa98xx_Error_NotOpen; /* all i2C registers are already set to default for N1C2 */ return error; }
static int tfa98xx_codec_probe(struct snd_soc_codec *codec) { enum Tfa98xx_Error err; pr_info("%s\n", __func__); if (!handle_is_open(handles[TOP])) { err = Tfa98xx_Open(TOP_I2C_ADDRESS, &handles[TOP]); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Top Tfa98xx_Open failed\n", __func__); return -EINVAL; } pr_info("TOP channel open %d\n", handles[TOP]); } if (!handle_is_open(handles[BOTTOM])) { err = Tfa98xx_Open(BOTTOM_I2C_ADDRESS, &handles[BOTTOM]); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Bottom Tfa98xx_Open failed\n", __func__); return -EINVAL; } pr_info("BOTTOM channel open %d\n", handles[BOTTOM]); } return 0; }