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; }
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; } }
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; }
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; }
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; }
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; }
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; }
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; }