static int nc_power_up_pb(unsigned int port) { struct sc_reg_access sc_access[7]; int retval = 0; if (snd_pmic_ops_nc.card_status == SND_CARD_UN_INIT) retval = nc_init_card(); if (retval) return retval; if (port == 0xFF) return 0; nc_enable_audiodac(MUTE); msleep(30); pr_debug("powering up pb....\n"); sc_access[0].reg_addr = VAUDIOCNT; sc_access[0].value = 0x27; sc_access[0].mask = 0x27; sc_access[1].reg_addr = VREFPLL; if (port == 0) { sc_access[1].value = 0x3A; sc_access[1].mask = 0x3A; } else if (port == 1) { sc_access[1].value = 0x35; sc_access[1].mask = 0x35; } retval = sst_sc_reg_access(sc_access, PMIC_READ_MODIFY, 2); sc_access[0].reg_addr = POWERCTRL1; if (port == 0) { sc_access[0].value = 0x40; sc_access[0].mask = 0x40; } else if (port == 1) { sc_access[0].value = 0x01; sc_access[0].mask = 0x01; } sc_access[1].reg_addr = POWERCTRL2; sc_access[1].value = 0x0C; sc_access[1].mask = 0x0C; sc_access[2].reg_addr = DRVPOWERCTRL; sc_access[2].value = 0x86; sc_access[2].mask = 0x86; sst_sc_reg_access(sc_access, PMIC_READ_MODIFY, 3); msleep(30); return nc_enable_audiodac(UNMUTE); }
static int nc_power_down(void) { int retval = 0; struct sc_reg_access sc_access[5]; if (snd_pmic_ops_nc.card_status == SND_CARD_UN_INIT) retval = nc_init_card(); if (retval) return retval; nc_enable_audiodac(MUTE); pr_debug("powering dn nc_power_down ....\n"); if (snd_pmic_ops_nc.output_dev_id == MONO_EARPIECE || snd_pmic_ops_nc.output_dev_id == INTERNAL_SPKR) nc_set_amp_power(0); msleep(30); sc_access[0].reg_addr = DRVPOWERCTRL; sc_access[0].value = 0x00; sc_access[0].mask = 0x00; sst_sc_reg_access(sc_access, PMIC_WRITE, 1); sc_access[0].reg_addr = POWERCTRL1; sc_access[0].value = 0x00; sc_access[0].mask = 0x00; sc_access[1].reg_addr = POWERCTRL2; sc_access[1].value = 0x00; sc_access[1].mask = 0x00; sst_sc_reg_access(sc_access, PMIC_WRITE, 2); msleep(30); sc_access[0].reg_addr = VREFPLL; sc_access[0].value = 0x10; sc_access[0].mask = 0x10; sc_access[1].reg_addr = VAUDIOCNT; sc_access[1].value = 0x25; sc_access[1].mask = 0x25; retval = sst_sc_reg_access(sc_access, PMIC_WRITE, 2); msleep(30); return nc_enable_audiodac(UNMUTE); }
static int nc_power_down_pb(unsigned int device) { int retval = 0; struct sc_reg_access sc_access[5]; if (snd_pmic_ops_nc.card_status == SND_CARD_UN_INIT) retval = nc_init_card(); if (retval) return retval; pr_debug("powering dn pb....\n"); mutex_lock(&snd_pmic_ops_nc.lock); nc_enable_audiodac(MUTE); msleep(30); sc_access[0].reg_addr = DRVPOWERCTRL; sc_access[0].value = 0x00; sc_access[0].mask = 0x00; sst_sc_reg_access(sc_access, PMIC_WRITE, 1); msleep(30); sc_access[0].reg_addr = POWERCTRL1; sc_access[0].value = 0x00; sc_access[0].mask = 0x41; sc_access[1].reg_addr = POWERCTRL2; sc_access[1].value = 0x00; sc_access[1].mask = 0x0C; sst_sc_reg_access(sc_access, PMIC_READ_MODIFY, 2); msleep(30); snd_pmic_ops_nc.pb_on = 0; nc_enable_audiodac(UNMUTE); mutex_unlock(&snd_pmic_ops_nc.lock); return 0; }
static int nc_power_up_pb(unsigned int port) { struct sc_reg_access sc_access[7]; int retval = 0; if (snd_pmic_ops_nc.card_status == SND_CARD_UN_INIT) retval = nc_init_card(); if (retval) return retval; if (port == 0xFF) return 0; mutex_lock(&snd_pmic_ops_nc.lock); nc_enable_audiodac(MUTE); msleep(30); pr_debug("powering up pb....\n"); sc_access[0].reg_addr = VAUDIOCNT; sc_access[0].value = 0x27; sc_access[0].mask = 0x27; sc_access[1].reg_addr = VREFPLL; if (port == 0) { sc_access[1].value = 0x3A; sc_access[1].mask = 0x3A; } else if (port == 1) { sc_access[1].value = 0x35; sc_access[1].mask = 0x35; } retval = sst_sc_reg_access(sc_access, PMIC_READ_MODIFY, 2); sc_access[0].reg_addr = POWERCTRL1; if (port == 0) { sc_access[0].value = 0x40; sc_access[0].mask = 0x40; } else if (port == 1) { sc_access[0].value = 0x01; sc_access[0].mask = 0x01; } sc_access[1].reg_addr = POWERCTRL2; sc_access[1].value = 0x0C; sc_access[1].mask = 0x0C; sc_access[2].reg_addr = DRVPOWERCTRL; sc_access[2].value = 0x86; sc_access[2].mask = 0x86; sst_sc_reg_access(sc_access, PMIC_READ_MODIFY, 3); msleep(30); snd_pmic_ops_nc.pb_on = 1; /* * There is a mismatch between Playback Sources and the enumerated * values of output sources. This mismatch causes ALSA upper to send * Item 1 for Internal Speaker, but the expected enumeration is 2! For * now, treat MONO_EARPIECE and INTERNAL_SPKR identically and power up * the needed resources */ if (snd_pmic_ops_nc.output_dev_id == MONO_EARPIECE || snd_pmic_ops_nc.output_dev_id == INTERNAL_SPKR) nc_set_amp_power(1); nc_enable_audiodac(UNMUTE); mutex_unlock(&snd_pmic_ops_nc.lock); return 0; }