static void aic3008_i2s_control(int dsp_enum) { AUD_DBG("%s %d\n", __func__, dsp_enum); switch (dsp_enum) { case Phone_Default: case Phone_BT: case VOIP_BT: case VOIP_BT_HW_AEC: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_config("AUD_BT_SEL", TEGRA_GPIO_PK5, GPIO_OUTPUT); } break; case FM_Headset: case FM_Speaker: power_config("AUD_FM_SEL", TEGRA_GPIO_PK6, GPIO_OUTPUT); break; default: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_deconfig("AUD_BT_SEL", TEGRA_GPIO_PK5, GPIO_OUTPUT); } power_deconfig("AUD_FM_SEL", TEGRA_GPIO_PK6, GPIO_OUTPUT); break; } return; }
static void aic3008_amp_powerdown(int type) { switch (type) { case HEADSET_AMP: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_deconfig("AUD_HEADPHONE_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT); } break; case SPEAKER_AMP: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { #if (defined(CONFIG_SND_AMP_TFA9887)) set_tfa9887_spkamp(0, 0); #endif } else { power_deconfig("AUD_SPK_EN", TEGRA_GPIO_PP6, GPIO_OUTPUT); } break; case DOCK_AMP: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { } else { power_deconfig("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT); } dock_config("TEGRA_GPIO_DESK_AUD", TEGRA_GPIO_PCC5, false, true); break; default: AUD_ERR("aic3008_amp_powerdown unknown type %d\n", type); break; } return; }
static void aic3008_suspend(void) { spin_lock(&aic3008_power_ctl->spin_lock); if (pcbid >= PROJECT_PHASE_XD) { power_deconfig("AUD_MCLK_EN", TEGRA_GPIO_PN1, GPIO_OUTPUT); } else if (pcbid >= PROJECT_PHASE_XA && pcbid <= PROJECT_PHASE_XC) { power_deconfig("AUD_MCLK_EN", TEGRA_GPIO_PX7, GPIO_OUTPUT); } else AUD_ERR("%s: no pcbid satisfy.", __func__); common_deconfig(); aic3008_power_ctl->isPowerOn = false; spin_unlock(&aic3008_power_ctl->spin_lock); return; }
static void aic3008_amp_powerdown(int type) { switch (type) { case HEADSET_AMP: break; case SPEAKER_AMP: power_deconfig("AUD_SPK_EN", TEGRA_GPIO_PP6, GPIO_OUTPUT); break; case DOCK_AMP: power_deconfig("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT); config_tegra_desk_aud_gpios(false, true); break; } return; }
static void aic3008_suspend(void) { spin_lock(&aic3008_power_ctl->spin_lock); power_deconfig("AUD_MCLK_EN", TEGRA_GPIO_PX7, GPIO_OUTPUT); common_deconfig(); aic3008_power_ctl->isPowerOn = false; spin_unlock(&aic3008_power_ctl->spin_lock); return; }
static void aic3008_amp_powerdown(int type) { switch (type) { case HEADSET_AMP: break; case SPEAKER_AMP: power_deconfig("AUD_SPK_EN", TEGRA_GPIO_PP6, GPIO_OUTPUT); break; case DOCK_AMP: power_deconfig("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT); dock_config("TEGRA_GPIO_DESK_AUD", TEGRA_GPIO_PCC5, false, true); break; default: AUD_ERR("aic3008_amp_powerdown unknown type %d\n", type); break; } return; }
static void aic3008_hs_vol_control(int db) { switch (db) { case BEATS_GAIN_ON: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_config("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, GPIO_OUTPUT); } break; case BEATS_GAIN_OFF: if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) { power_deconfig("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, GPIO_OUTPUT); } break; default: break; } return; }