static int max9877_i2c_probe(struct i2c_client *client,
			                 const struct i2c_device_id *id)
{
	u8 pData = 0, i;

	FI
	//printk("%s() called\n", __func__);
	max9877_i2c_client = client;
	i2c_set_clientdata(client, max9877_i2c_client);

	max9877_write(max9877_i2c_client, 0x01, 0x1F); 
	max9877_write(max9877_i2c_client, 0x02, 0x1F);
	max9877_write(max9877_i2c_client, 0x03, 0x1F);
	max9877_write(max9877_i2c_client, 0x04, 
		(1 << 7) |  /* Operational mode  */
		(0 << 6) |  /* Bypass mode disabled */
		(0 << 4) |  /* Class D : 1176, CHARGE-PUMP : 588  */
		(0x9) );  	/* SPK:INA1+INA2+INB1+INB2, LHP:INA1+INB2, RHP:INA2+INB2 */

#if AUDIO_SPECIFIC_DEBUG
	/* real all */
    for(i = 0; i <= 0x4; i++) {
		max9877_read(max9877_i2c_client, i, &pData);
		P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
	}
#endif

	return 0;
}
Exemple #2
0
static void set_amp_gain(struct snd_soc_codec *codec, int mode)
{
	P("SET AMP gain : %x\n", mode);

	/* VOICEMEMO Path : only SPK */
	if ((mode & 0xf0) == MM_AUDIO_VOICEMEMO)
		mode = MM_AUDIO_PLAYBACK_SPK;

	/* Set AMP tunning value */
	switch (mode) 
	{
		case MM_AUDIO_PLAYBACK_SPK_HP :
			/* Earjack Gain : -23dB */
			P("Set Default SPK+HP AMP gain");
			max9877_write(max9877_i2c_client, 0x01, 0x1F); 
			max9877_write(max9877_i2c_client, 0x02, 0x1F); 
			max9877_write(max9877_i2c_client, 0x03, 0x1F); 
			break;
		case MM_AUDIO_PLAYBACK_RING_SPK_HP :
			P("Set Default SPK+HP AMP gain");
            /* Earjack Gain : -21dB */
			max9877_write(max9877_i2c_client, 0x01, 0x1F); 
			max9877_write(max9877_i2c_client, 0x02, 0x11); //0x10 -> 0x11
			max9877_write(max9877_i2c_client, 0x03, 0x11); //0x10 -> 0x11
			break;
		default :
			/* Earjack Gain : 0dB */
			P("Set Default AMP gain");
			mdelay(10);
			max9877_write(max9877_i2c_client, 0x01, 0x1F); 
			max9877_write(max9877_i2c_client, 0x02, 0x1F); 
			max9877_write(max9877_i2c_client, 0x03, 0x1F); 
			break;
	}
}
Exemple #3
0
int amp_set_path(int path)
{
#if AUDIO_SPECIFIC_DEBUG_PRINT_MAX_REGS
	int i; 
	u8 pData;

	/* real all */
    for(i = 0; i <= 0x4; i++) {
		max9877_read(max9877_i2c_client, i, &pData);
		P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
	}
#endif

	if (path == AK4671_AMP_PATH_SPK) {
		P("AMP Path : SPK");
		max9877_write(max9877_i2c_client, 0x04, 
			(1 << 7) |  /* Operational mode  */
			(0 << 6) |  /* Bypass mode disabled */
			(0 << 4) |  /* Class D : 1176, CHARGE-PUMP : 588  */
			(0x1) );  	/* SPK:INA1INB1 */
	} else if (path == AK4671_AMP_PATH_HP) {
		P("AMP Path : HP");
		max9877_write(max9877_i2c_client, 0x04, 
			(1 << 7) |  /* Operational mode  */
			(0 << 6) |  /* Bypass mode disabled */
			(0 << 4) |  /* Class D : 1176, CHARGE-PUMP : 588  */
			(0x5) );  	/* LHP:INB1, RHP:INB2 */
	} else if (path == AK4671_AMP_PATH_SPK_HP) {
		P("AMP Path : SPK & HP");
		max9877_write(max9877_i2c_client, 0x04, 
			(1 << 7) |  /* Operational mode  */
			(0 << 6) |  /* Bypass mode disabled */
			(0 << 4) |  /* Class D : 1176, CHARGE-PUMP : 588  */
			(0x6) );  	/* SPK:INB1+INB2   LHP:INB1, RHP:INB2 */
			// (0x3) );  	/* SPK:INA1+INA2   LHP:INA1, RHP:INA2 */
	}

#if AUDIO_SPECIFIC_DEBUG_PRINT_MAX_REGS
	/* real all */
    for(i = 0; i <= 0x4; i++) {
		max9877_read(max9877_i2c_client, i, &pData);
		P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
	}
#endif

	ak4671_amp_path = path;

	return 0;
}
Exemple #4
0
int amp_set_path(int path)
{
    int i;

#if MAX9877_SPECIFIC_DEBUG
    u8 pData;
    /* real all */
    for(i = 0; i <= 0x4; i++) {
        max9877_read(&max9877_i2c_client, i, &pData);
        P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
    }
#endif

    if (path == AK4671_AMP_PATH_SPK) {
        P("AMP Path : SPK");
        max9877_write(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL,
                      //SHDN |  /* Operational mode  */
                      (BYPASS & (~BYPASS)) |  /* Bypass mode disabled */
                      (OSC0 & (~OSC0))	 | /* Class D : 1176, CHARGE-PUMP : 588  */
                      (OUTMODE0) );  	/* SPK:INA1INB1 */
    } else if (path == AK4671_AMP_PATH_HP) {
        P("AMP Path : HP");
        max9877_write(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL,
                      //SHDN |  /* Operational mode  */
                      (BYPASS & (~BYPASS)) |  /* Bypass mode disabled */
                      (OSC0 & (~OSC0))	 | /* Class D : 1176, CHARGE-PUMP : 588  */
                      (OUTMODE0 | OUTMODE2) );  	/* LHP:INB1, RHP:INB2 */
    } else if (path == AK4671_AMP_PATH_SPK_HP) {
        P("AMP Path : SPK & HP");
        max9877_write(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL,
                      //SHDN |  /* Operational mode  */
                      (BYPASS & (~BYPASS)) |  /* Bypass mode disabled */
                      (OSC0 & (~OSC0))	 | /* Class D : 1176, CHARGE-PUMP : 588  */
                      (OUTMODE1|OUTMODE2) );  	/* SPK:INB1+INB2   LHP:INB1, RHP:INB2 */
    }

    cur_amp_path =  path ;

#if MAX9877_SPECIFIC_DEBUG
    /* real all */
    for(i = 0; i <= MAX9877_OUTPUT_MODE_CONTROL; i++) {
        max9877_read(&max9877_i2c_client, i, &pData);
        P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
    }
#endif
    return 0;
}
Exemple #5
0
int amp_enable(int en)
{
	u8 pData = 0;

	P("AMP EN : %d", en);
	max9877_read(max9877_i2c_client, 0x04, &pData);

	if (en)  {
		max9877_write(max9877_i2c_client, 0x04, 
			pData | 1 << 7 ); /* Low Power shutdown mode : 1 */
		mdelay(10);
	} else {
		max9877_write(max9877_i2c_client, 0x01, 0x00); 
		max9877_write(max9877_i2c_client, 0x02, 0x00); 
		max9877_write(max9877_i2c_client, 0x03, 0x00); 

		mdelay(10);
		max9877_write(max9877_i2c_client, 0x04, 
			pData & ~(1 << 7) ); /* Low Power shutdown mode : 0 */
	}
	
	return 0;
}
Exemple #6
0
static int max9877_codec_probe(struct i2c_adapter *adap, int addr, int kind)
{
    int ret;
#if MAX9877_SPECIFIC_DEBUG
    u8 pData = 0, i;
#endif

//	FI
    max9877_i2c_client.adapter = adap;
    max9877_i2c_client.addr = addr;

    ret = i2c_attach_client(&max9877_i2c_client);
    if (ret < 0) {
        printk("failed to attach max9877 at addr %x\n", addr);
        return -1;
    }

    max9877_write(&max9877_i2c_client, MAX9877_SPEAKER_VOLUME, KMAX9877_Output_Gain_0ToMinus7(0));
    max9877_write(&max9877_i2c_client, MAX9877_LEFT_HEADPHONE_VOLUME, KMAX9877_Output_Gain_0ToMinus7(0));
    max9877_write(&max9877_i2c_client, MAX9877_RIGHT_HEADPHONE_VOLUME, KMAX9877_Output_Gain_0ToMinus7(0));
    max9877_write(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL,
                  SHDN |  /* Operational mode  */
                  (BYPASS & (~BYPASS)) | /* Bypass mode disabled */
                  (OSC0 & (~OSC0))	 | /* Class D : 1176, CHARGE-PUMP : 588  */
                  (OUTMODE0|OUTMODE3)); 	/* SPK:INA1+INA2+INB1+INB2, LHP:INA1+INB2, RHP:INA2+INB2 */


#if MAX9877_SPECIFIC_DEBUG
    /* real all */
    for(i = 0; i <= MAX9877_OUTPUT_MODE_CONTROL; i++) {
        max9877_read(&max9877_i2c_client, i, &pData);
        P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
    }
#endif

    return 0;
}
static int max9877_codec_probe(struct i2c_adapter *adap, int addr, int kind)
{
	int ret;
#if AUDIO_SPECIFIC_DEBUG
	u8 pData = 0, i;
#endif

	FI
	max9877_i2c_client.adapter = adap;
	max9877_i2c_client.addr = addr;

	ret = i2c_attach_client(&max9877_i2c_client);
	if (ret < 0) {
		printk("failed to attach max9877 at addr %x\n", addr);
		return -1;
	}

	max9877_write(&max9877_i2c_client, 0x01, 0x1F); 
	max9877_write(&max9877_i2c_client, 0x02, 0x1F);
	max9877_write(&max9877_i2c_client, 0x03, 0x1F);
	max9877_write(&max9877_i2c_client, 0x04, 
		(1 << 7) |  /* Operational mode  */
		(0 << 6) |  /* Bypass mode disabled */
		(0 << 4) |  /* Class D : 1176, CHARGE-PUMP : 588  */
		(0x9) );  	/* SPK:INA1+INA2+INB1+INB2, LHP:INA1+INB2, RHP:INA2+INB2 */

#if AUDIO_SPECIFIC_DEBUG
	/* real all */
    for(i = 0; i <= 0x4; i++) {
		max9877_read(&max9877_i2c_client, i, &pData);
		P("MAX9877 REG - 0x%02x : 0x%02x", i, pData);
	}
#endif

	return 0;
}
Exemple #8
0
int amp_set_register(unsigned char reg, unsigned char val)
{
    P("AMP Register (Write) reg:0x%02x, val:0x%02x\n", reg, val);
    max9877_write(&max9877_i2c_client, reg, val);
    return 0;
}
Exemple #9
0
int amp_enable(int en)
{
    u8 pData = 0;

    P("AMP EN : %d", en);
    max9877_read(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL, &pData);

    if (en) {
        max9877_write(&max9877_i2c_client, MAX9877_SPEAKER_VOLUME, 0);
        max9877_write(&max9877_i2c_client, MAX9877_LEFT_HEADPHONE_VOLUME,0);
        max9877_write(&max9877_i2c_client, MAX9877_RIGHT_HEADPHONE_VOLUME,0);

        max9877_write(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL, pData | SHDN ); /* Low Power shutdown mode : 1 */
        mdelay(30);

        if (cur_amp_path == AK4671_AMP_PATH_SPK_HP)
        {   /*when ringtone earphone level under 100db for ear : HW require  */
            max9877_write(&max9877_i2c_client, MAX9877_SPEAKER_VOLUME, 31);
            max9877_write(&max9877_i2c_client, MAX9877_LEFT_HEADPHONE_VOLUME,0x11);
            max9877_write(&max9877_i2c_client, MAX9877_RIGHT_HEADPHONE_VOLUME,0x11);
        }
        else if (cur_amp_path == AK4671_AMP_PATH_HP)
        {
            max9877_write(&max9877_i2c_client, MAX9877_SPEAKER_VOLUME, 0);
            max9877_write(&max9877_i2c_client, MAX9877_LEFT_HEADPHONE_VOLUME,31);
            max9877_write(&max9877_i2c_client, MAX9877_RIGHT_HEADPHONE_VOLUME,31);
        }
        else if (cur_amp_path == AK4671_AMP_PATH_SPK)
        {
            max9877_write(&max9877_i2c_client, MAX9877_SPEAKER_VOLUME, 31);
            max9877_write(&max9877_i2c_client, MAX9877_LEFT_HEADPHONE_VOLUME,0);
            max9877_write(&max9877_i2c_client, MAX9877_RIGHT_HEADPHONE_VOLUME,0);
        }

    } else {
        max9877_write(&max9877_i2c_client, MAX9877_SPEAKER_VOLUME, 0);
        max9877_write(&max9877_i2c_client, MAX9877_LEFT_HEADPHONE_VOLUME,0);
        max9877_write(&max9877_i2c_client, MAX9877_RIGHT_HEADPHONE_VOLUME,0);

        mdelay(30);
        max9877_write(&max9877_i2c_client, MAX9877_OUTPUT_MODE_CONTROL, pData & ~SHDN ); /* Low Power shutdown mode : 0 */

    }
    return 0;
}