예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #4
0
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;
}
예제 #5
0
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;
}