Exemplo n.º 1
0
}

static int asrc_set_rate(struct snd_kcontrol *kcontrol,
			 struct snd_ctl_elem_value *ucontrol)
{
	if (asrc_func == ucontrol->value.enumerated.item[0])
		return 0;

	asrc_func = ucontrol->value.enumerated.item[0];
	asrc_esai_data.output_sample_rate = asrc_rates[asrc_func + 4];

	return 1;
}

static const struct snd_kcontrol_new asrc_controls[] = {
	SOC_ENUM_EXT("ASRC", asrc_enum[0], asrc_get_rate,
		     asrc_set_rate),
};

#endif

static int imx_3stack_cs42888_init(struct snd_soc_codec *codec)
{

#if defined(CONFIG_MXC_ASRC) || defined(CONFIG_MXC_ASRC_MODULE)
	int i;
	int ret;
	for (i = 0; i < ARRAY_SIZE(asrc_controls); i++) {
		ret = snd_ctl_add(codec->card,
				  snd_soc_cnew(&asrc_controls[i], codec, NULL));
		if (ret < 0)
			return ret;
Exemplo n.º 2
0
	struct wm8804_priv *wm8804 = container_of(nb, struct wm8804_priv, \
						  disable_nb[n]); \
	if (event & REGULATOR_EVENT_DISABLE) { \
		regcache_mark_dirty(wm8804->regmap);	\
	} \
	return 0; \
}

WM8804_REGULATOR_EVENT(0)
WM8804_REGULATOR_EVENT(1)

static const char *txsrc_text[] = { "S/PDIF RX", "AIF" };
static SOC_ENUM_SINGLE_EXT_DECL(txsrc, txsrc_text);

static const struct snd_kcontrol_new wm8804_snd_controls[] = {
	SOC_ENUM_EXT("Input Source", txsrc, txsrc_get, txsrc_put),
	SOC_SINGLE("TX Playback Switch", WM8804_PWRDN, 2, 1, 1),
	SOC_SINGLE("AIF Playback Switch", WM8804_PWRDN, 4, 1, 1)
};

static int txsrc_get(struct snd_kcontrol *kcontrol,
		     struct snd_ctl_elem_value *ucontrol)
{
	struct snd_soc_codec *codec;
	unsigned int src;

	codec = snd_soc_kcontrol_codec(kcontrol);
	src = snd_soc_read(codec, WM8804_SPDTX4);
	if (src & 0x40)
		ucontrol->value.integer.value[0] = 1;
	else
Exemplo n.º 3
0
	return 1;
}

static const struct snd_soc_dapm_widget u1_dapm_widgets[] = {
	SND_SOC_DAPM_HP("Headset Out", NULL),
	SND_SOC_DAPM_MIC("Mic In", NULL),
	SND_SOC_DAPM_LINE("Line In", NULL),
};

static const struct soc_enum u1_aud_enum[] = {
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(u1_aud_scenario),
			    u1_aud_scenario),
};

static const struct snd_kcontrol_new u1_aud_controls[] = {
	SOC_ENUM_EXT("U1 Audio Mode", u1_aud_enum[0],
		     u1_mc1n2_getp, u1_mc1n2_setp),
};

static const struct snd_soc_dapm_route u1_dapm_routes[] = {
	/* Connections to Headset */
	{"Headset Out", NULL, "HPOUT1L"},
	{"Headset Out", NULL, "HPOUT1R"},
	/* Connections to Mics */
	{"IN1LN", NULL, "Mic In"},
	{"IN1RN", NULL, "Mic In"},
	/* Connections to Line In */
	{"IN2LN", NULL, "Line In"},
	{"IN2RN", NULL, "Line In"},
};

static int u1_hifiaudio_init(struct snd_soc_pcm_runtime *rtd)
Exemplo n.º 4
0
        // set APLL clock setting
        EnableApll1(false);
        EnableApll2(false);
        EnableI2SDivPower(AUDIO_APLL1_DIV0, false);
        EnableI2SDivPower(AUDIO_APLL2_DIV0, false);
        AudDrv_APLL1Tuner_Clk_Off();
        AudDrv_APLL2Tuner_Clk_Off();
        AudDrv_Clk_Off();
    }
    return 0;
}


static const struct snd_kcontrol_new Audio_snd_I2S0dl1_controls[] =
{
    SOC_ENUM_EXT("Audio_I2S0dl1_hd_Switch", Audio_I2S0dl1_Enum[0], Audio_I2S0dl1_hdoutput_Get, Audio_I2S0dl1_hdoutput_Set),
};

static struct snd_pcm_hardware mtk_I2S0dl1_hardware =
{
    .info = (SNDRV_PCM_INFO_MMAP |
    SNDRV_PCM_INFO_INTERLEAVED |
    SNDRV_PCM_INFO_RESUME |
    SNDRV_PCM_INFO_MMAP_VALID),
    .formats =   SND_SOC_ADV_MT_FMTS,
    .rates =        SOC_HIGH_USE_RATE,
    .rate_min =     SOC_HIGH_USE_RATE_MIN,
    .rate_max =     SOC_HIGH_USE_RATE_MAX,
    .channels_min =     SOC_NORMAL_USE_CHANNELS_MIN,
    .channels_max =     SOC_NORMAL_USE_CHANNELS_MAX,
    .buffer_bytes_max = SOC_NORMAL_USE_BUFFERSIZE_MAX,
Exemplo n.º 5
0
static int msm8930_pmic_gain_put(struct snd_kcontrol *kcontrol,
					struct snd_ctl_elem_value *ucontrol)
{
	int ret = 0;
	msm8930_pmic_spk_gain = ucontrol->value.integer.value[0];
	if (socinfo_get_pmic_model() != PMIC_MODEL_PM8917)
		ret = pm8xxx_spk_gain(msm8930_pmic_spk_gain);
	pr_debug("%s: msm8930_pmic_spk_gain = %d"
			 " ucontrol->value.integer.value[0] = %d\n", __func__,
			 msm8930_pmic_spk_gain,
			 (int) ucontrol->value.integer.value[0]);
	return ret;
}

static const struct snd_kcontrol_new sitar_msm8930_controls[] = {
	SOC_ENUM_EXT("Speaker Function", msm8930_enum[0], msm8930_get_spk,
		msm8930_set_spk),
	SOC_ENUM_EXT("SLIM_0_RX Channels", msm8930_enum[1],
		msm8930_slim_0_rx_ch_get, msm8930_slim_0_rx_ch_put),
	SOC_ENUM_EXT("SLIM_0_TX Channels", msm8930_enum[2],
		msm8930_slim_0_tx_ch_get, msm8930_slim_0_tx_ch_put),
	SOC_ENUM_EXT("PMIC SPK Gain", msm8960_pmic_spk_gain_enum[0],
		msm8930_pmic_gain_get, msm8930_pmic_gain_put),
	SOC_ENUM_EXT("Internal BTSCO SampleRate", msm8930_btsco_enum[0],
		msm8930_btsco_rate_get, msm8930_btsco_rate_put),
};

static void *def_sitar_mbhc_cal(void)
{
	void *sitar_cal;
	struct sitar_mbhc_btn_detect_cfg *btn_cfg;
	u16 *btn_low, *btn_high;
}

static int Audio_i2s0_ExtCodec_EchoRef_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
{
    printk("%s()\n", __func__);
    if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(i2s0_ExtCodec_EchoRef))
    {
        printk("return -EINVAL\n");
        return -EINVAL;
    }
    mi2s0_extcodec_echoref_control = ucontrol->value.integer.value[0];
    return 0;
}
static const struct snd_kcontrol_new Audio_snd_i2s0_controls[] =
{
    SOC_ENUM_EXT("Audio_i2s0_SideGen_Switch", Audio_i2s0_Enum[0], Audio_i2s0_SideGen_Get, Audio_i2s0_SideGen_Set),
    SOC_ENUM_EXT("Audio_i2s0_hd_Switch", Audio_i2s0_Enum[1], Audio_i2s0_hdoutput_Get, Audio_i2s0_hdoutput_Set),
    SOC_ENUM_EXT("Audio_ExtCodec_EchoRef_Switch", Audio_i2s0_Enum[2], Audio_i2s0_ExtCodec_EchoRef_Get, Audio_i2s0_ExtCodec_EchoRef_Set),
};

static struct snd_pcm_hardware mtk_i2s0_hardware =
{
    .info = (SNDRV_PCM_INFO_MMAP |
    SNDRV_PCM_INFO_INTERLEAVED |
    SNDRV_PCM_INFO_RESUME |
    SNDRV_PCM_INFO_MMAP_VALID),
    .formats =      Dl1_MAX_BUFFER_SIZE,
    .rates =        SOC_HIGH_USE_RATE,
    .rate_min =     SOC_HIGH_USE_RATE_MIN,
    .rate_max =     SOC_HIGH_USE_RATE_MAX,
    .channels_min =     SOC_NORMAL_USE_CHANNELS_MIN,
Exemplo n.º 7
0
	{"LINE1L", NULL, "b Mic Bias 2.5V"},
	{"b Mic Bias 2.5V", NULL, "HS Mic"}
};

static const char *spk_function[] = {"Off", "On"};
static const char *input_function[] = {"ADC", "Digital Mic"};
static const char *jack_function[] = {"Off", "TV-OUT", "Headphone", "Headset"};

static const struct soc_enum rx51_enum[] = {
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_function), spk_function),
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(input_function), input_function),
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(jack_function), jack_function),
};

static const struct snd_kcontrol_new aic34_rx51_controls[] = {
	SOC_ENUM_EXT("Speaker Function", rx51_enum[0],
		     rx51_get_spk, rx51_set_spk),
	SOC_ENUM_EXT("Input Select",  rx51_enum[1],
		     rx51_get_input, rx51_set_input),
	SOC_ENUM_EXT("Jack Function", rx51_enum[2],
		     rx51_get_jack, rx51_set_jack),
	SOC_DAPM_PIN_SWITCH("FM Transmitter"),
};

static const struct snd_kcontrol_new aic34_rx51_controlsb[] = {
	SOC_DAPM_PIN_SWITCH("Earphone"),
};

static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
{
	struct snd_soc_codec *codec = rtd->codec;
	struct snd_soc_dapm_context *dapm = &codec->dapm;
Exemplo n.º 8
0
	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
	struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
	int r;

	dev_dbg(codec->dev, "%s: enter.\n", __func__);

	r = wl1273->core->set_volume(wl1273->core,
				     ucontrol->value.integer.value[0]);
	if (r)
		return r;

	return 1;
}

static const struct snd_kcontrol_new wl1273_controls[] = {
	SOC_ENUM_EXT("Codec Mode", wl1273_enum,
		     snd_wl1273_get_audio_route, snd_wl1273_set_audio_route),
	SOC_ENUM_EXT("Audio Switch", wl1273_audio_enum,
		     snd_wl1273_fm_audio_get,  snd_wl1273_fm_audio_put),
	SOC_SINGLE_EXT("Volume", 0, 0, WL1273_MAX_VOLUME, 0,
		       snd_wl1273_fm_volume_get, snd_wl1273_fm_volume_put),
};

static int wl1273_startup(struct snd_pcm_substream *substream,
			  struct snd_soc_dai *dai)
{
	struct snd_soc_pcm_runtime *rtd = substream->private_data;
	struct snd_soc_codec *codec = rtd->codec;
	struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);

	switch (wl1273->mode) {
	case WL1273_MODE_BT:
Exemplo n.º 9
0
    }
    else
    {
        // set APLL clock setting
        EnableApll1(false);
        EnableApll2(false);
        EnableI2SDivPower(AUDIO_APLL1_DIV0, false);
        EnableI2SDivPower(AUDIO_APLL2_DIV0, false);
    }
    AudDrv_Clk_Off();
    return 0;
}

static const struct snd_kcontrol_new Audio_snd_i2s0_controls[] =
{
    SOC_ENUM_EXT("Audio_i2s0_SideGen_Switch", Audio_i2s0_Enum[0], Audio_i2s0_SideGen_Get, Audio_i2s0_SideGen_Set),
    SOC_ENUM_EXT("Audio_i2s0_hd_Switch", Audio_i2s0_Enum[1], Audio_i2s0_hdoutput_Get, Audio_i2s0_hdoutput_Set),
};

static struct snd_pcm_hardware mtk_i2s0_hardware =
{
    .info = (SNDRV_PCM_INFO_MMAP |
    SNDRV_PCM_INFO_INTERLEAVED |
    SNDRV_PCM_INFO_RESUME |
    SNDRV_PCM_INFO_MMAP_VALID),
    .formats =      Dl1_MAX_BUFFER_SIZE,
    .rates =        SOC_HIGH_USE_RATE,
    .rate_min =     SOC_HIGH_USE_RATE_MIN,
    .rate_max =     SOC_HIGH_USE_RATE_MAX,
    .channels_min =     SOC_NORMAL_USE_CHANNELS_MIN,
    .channels_max =     SOC_NORMAL_USE_CHANNELS_MAX,
	.startup = tab3_wm1811_aif3_startup,
	.shutdown = tab3_wm1811_aif3_shutdown,
	.hw_params = tab3_wm1811_aif3_hw_params,
};

static const struct snd_kcontrol_new tab3_controls[] = {
	SOC_DAPM_PIN_SWITCH("HP"),
	SOC_DAPM_PIN_SWITCH("SPK"),
	SOC_DAPM_PIN_SWITCH("RCV"),
	SOC_DAPM_PIN_SWITCH("LINE"),
	SOC_DAPM_PIN_SWITCH("HDMI"),
	SOC_DAPM_PIN_SWITCH("Main Mic"),
	SOC_DAPM_PIN_SWITCH("Sub Mic"),
	SOC_DAPM_PIN_SWITCH("Headset Mic"),

	SOC_ENUM_EXT("AIF2 Mode", aif2_mode_enum[0],
		get_aif2_mode, set_aif2_mode),

	SOC_ENUM_EXT("KPCS Mode", kpcs_mode_enum[0],
		get_kpcs_mode, set_kpcs_mode),

	SOC_ENUM_EXT("Input Clamp", input_clamp_enum[0],
		get_input_clamp, set_input_clamp),

	SOC_ENUM_EXT("LineoutSwitch Mode", lineout_mode_enum[0],
		get_lineout_mode, set_lineout_mode),

	SOC_ENUM_EXT("AIF2 digital mute", switch_mode_enum[0],
		get_aif2_mute_status, set_aif2_mute_status),

};
Exemplo n.º 11
0
		return 0;

	twl6040_power_mode = ucontrol->value.integer.value[0];
	abe_dsp_set_power_mode(twl6040_power_mode);

	return 1;
}

static const char *power_texts[] = {"Low-Power", "High-Performance"};

static const struct soc_enum sdp4430_enum[] = {
	SOC_ENUM_SINGLE_EXT(2, power_texts),
};

static const struct snd_kcontrol_new sdp4430_controls[] = {
	SOC_ENUM_EXT("TWL6040 Power Mode", sdp4430_enum[0],
		sdp4430_get_power_mode, sdp4430_set_power_mode),
};

/* SDP4430 machine DAPM */
static const struct snd_soc_dapm_widget sdp4430_twl6040_dapm_widgets[] = {
	SND_SOC_DAPM_MIC("Ext Mic", NULL),
	SND_SOC_DAPM_SPK("Ext Spk", NULL),
	SND_SOC_DAPM_MIC("Headset Mic", NULL),
	SND_SOC_DAPM_HP("Headset Stereophone", NULL),
	SND_SOC_DAPM_SPK("Earphone Spk", NULL),
	SND_SOC_DAPM_INPUT("Aux/FM Stereo In"),
	SND_SOC_DAPM_SUPPLY("AV Switch Supply",
			    SND_SOC_NOPM, 0, 0, sdp4430_av_switch_event,
			    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
	SND_SOC_DAPM_MIC("Digital Mic 0", NULL),
	SND_SOC_DAPM_MIC("Digital Mic 1", NULL),
Exemplo n.º 12
0
	"Speaker",
	"Mute",
#if 0
	"Capture Line In",
	"Headphones",
	"Capture Mic1",
#endif
};

static const struct soc_enum smdk_scenario_enum[] = {
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(smdk_scenarios),smdk_scenarios),
};

static const struct snd_kcontrol_new wm8987_imapx200_controls[] = {
#if 0
	SOC_ENUM_EXT("SMDK Mode", smdk_scenario_enum[0],
		imapx200_get_scenario, imapx200_set_scenario),
#endif
};

/*
 * This is an example machine initialisation for a wm8987 connected to a
 * imapx200. It is missing logic to detect hp/mic insertions and logic
 * to re-route the audio in such an event.
 */
static int imapx200_wm8987_init(struct snd_soc_codec *codec)
{
	int i, err;

	/* set endpoints to default mode */
//	set_scenario_endpoints(codec, IMAPX200_AUDIO_OFF);
Exemplo n.º 13
0
	/* Same as the above but no mic bias for line signals */
	{"MICIN", NULL, "Line Jack"},

	{NULL, NULL, NULL},
};

static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset",
	"Off"};
static const char *spk_function[] = {"On", "Off"};
static const struct soc_enum pavo_enum[] = {
	SOC_ENUM_SINGLE_EXT(5, jack_function),
	SOC_ENUM_SINGLE_EXT(2, spk_function),
};

static const struct snd_kcontrol_new jzcodec_pavo_controls[] = {
	SOC_ENUM_EXT("Jack Function", pavo_enum[0], pavo_get_jack,
		pavo_set_jack),
	SOC_ENUM_EXT("Speaker Function", pavo_enum[1], pavo_get_spk,
		pavo_set_spk),
};

/*
 * Pavo for a jzcodec as connected on jz4740 Device
 */
static int pavo_jzcodec_init(struct snd_soc_codec *codec)
{
	int i, err;
	
	snd_soc_dapm_nc_pin(codec, "LLINEIN");
	snd_soc_dapm_nc_pin(codec, "RLINEIN");

	/* Add pavo specific controls */
Exemplo n.º 14
0
		return -EINVAL;
	if (drvdata->mclk_sel == val)
		return 0;

	drvdata->mclk_sel = val;

	return 1;
}

/*
 * Controls
 */

static struct snd_kcontrol_new mop500_ab8500_ctrls[] = {
	SOC_ENUM_EXT("Master Clock Select",
		soc_enum_mclk,
		mclk_input_control_get, mclk_input_control_put),
	SOC_DAPM_PIN_SWITCH("Headset Left"),
	SOC_DAPM_PIN_SWITCH("Headset Right"),
	SOC_DAPM_PIN_SWITCH("Earpiece"),
	SOC_DAPM_PIN_SWITCH("Speaker Left"),
	SOC_DAPM_PIN_SWITCH("Speaker Right"),
	SOC_DAPM_PIN_SWITCH("LineOut Left"),
	SOC_DAPM_PIN_SWITCH("LineOut Right"),
	SOC_DAPM_PIN_SWITCH("Vibra 1"),
	SOC_DAPM_PIN_SWITCH("Vibra 2"),
	SOC_DAPM_PIN_SWITCH("Mic 1"),
	SOC_DAPM_PIN_SWITCH("Mic 2"),
	SOC_DAPM_PIN_SWITCH("LineIn Left"),
	SOC_DAPM_PIN_SWITCH("LineIn Right"),
	SOC_DAPM_PIN_SWITCH("DMic 1"),
		((device == CTP_COMMS_MSIC_VOIP_DEV) &&\
		ctl->ssp_voip_master_mode)) ||
		(device == CTP_COMMS_IFX_MODEM_DEV &&\
		ctl->ssp_modem_master_mode)) {

		snd_soc_dai_set_sysclk(cpu_dai, SSP_CLK_ONCHIP,
				substream->runtime->rate, 0);

	}

	return 0;
} /* ctp_comms_dai_link_prepare */

static const struct snd_kcontrol_new ssp_comms_controls[] = {
		SOC_ENUM_EXT("SSP BT Master Mode",
				ssp_bt_sco_master_mode_enum,
				get_ssp_bt_sco_master_mode,
				set_ssp_bt_sco_master_mode),
		SOC_ENUM_EXT("SSP VOIP Master Mode",
				ssp_voip_master_mode_enum,
				get_ssp_voip_master_mode,
				set_ssp_voip_master_mode),
		SOC_ENUM_EXT("SSP Modem Master Mode",
				ssp_modem_master_mode_enum,
				get_ssp_modem_master_mode,
				set_ssp_modem_master_mode),
		SOC_DAPM_PIN_SWITCH("Headphone"),
		SOC_DAPM_PIN_SWITCH("Headset Mic"),
		SOC_DAPM_PIN_SWITCH("Ext Spk"),
		SOC_DAPM_PIN_SWITCH("Int Mic"),
		SOC_DAPM_PIN_SWITCH("Receiver"),
};
	/* Headphone connects to IN3R with Bias */
	{"IN3R", NULL, "Mic Bias"},
	{"Mic Bias", NULL, "Headphone Jack"},
	{"ADCL", NULL, "CLK_SYS_ENA"},
	{"ADCR", NULL, "CLK_SYS_ENA"},
	{"DACL", NULL, "CLK_SYS_ENA"},
	{"DACR", NULL, "CLK_SYS_ENA"},
};

static const char *cmn_status[] = {"Off", "On"};
static const struct soc_enum msm8660_enum[] = {
	SOC_ENUM_SINGLE_EXT(2, cmn_status),
};

static const struct snd_kcontrol_new wm8903_msm8660_controls[] = {
	SOC_ENUM_EXT("Speaker Function", msm8660_enum[0], msm8660_get_spk,
		msm8660_set_spk),
	SOC_ENUM_EXT("Headset Function", msm8660_enum[0], msm8660_get_hs,
		msm8660_set_hs),
	SOC_ENUM_EXT("Headphone Function", msm8660_enum[0], msm8660_get_hph,
		msm8660_set_hph),
};

static int msm8660_audrx_init(struct snd_soc_pcm_runtime *rtd)
{
	struct snd_soc_codec *codec = rtd->codec;
	int err;

	snd_soc_dapm_disable_pin(&codec->dapm, "Ext Spk");
	snd_soc_dapm_enable_pin(&codec->dapm, "CLK_SYS_ENA");

	err = snd_soc_add_controls(codec, wm8903_msm8660_controls,
	ucontrol->value.integer.value[0] =
		voc_get_pp_enable(voc_get_session_id(VOICE_SESSION_NAME),
				MODULE_ID_VOICE_MODULE_ST);
	return 0;
}

static struct snd_kcontrol_new msm_voice_controls[] = {
	SOC_SINGLE_MULTI_EXT("Voice Rx Device Mute", SND_SOC_NOPM, 0, VSID_MAX,
				0, 3, NULL, msm_voice_rx_device_mute_put),
	SOC_SINGLE_MULTI_EXT("Voice Tx Device Mute", SND_SOC_NOPM, 0, VSID_MAX,
				0, 3, NULL, msm_voice_tx_device_mute_put),
	SOC_SINGLE_MULTI_EXT("Voice Tx Mute", SND_SOC_NOPM, 0, VSID_MAX,
				0, 3, NULL, msm_voice_mute_put),
	SOC_SINGLE_MULTI_EXT("Voice Rx Gain", SND_SOC_NOPM, 0, VSID_MAX, 0, 3,
				NULL, msm_voice_gain_put),
	SOC_ENUM_EXT("TTY Mode", msm_tty_mode_enum[0], msm_voice_tty_mode_get,
				msm_voice_tty_mode_put),
	SOC_SINGLE_MULTI_EXT("Slowtalk Enable", SND_SOC_NOPM, 0, VSID_MAX, 0, 2,
				msm_voice_slowtalk_get, msm_voice_slowtalk_put),
#ifdef CONFIG_SEC_DHA_SOL_MAL
#if defined(CONFIG_AUDIO_DUAL_CP) || defined(CONFIG_MACH_KLTE_CTC) \
	|| defined(CONFIG_MACH_KLTE_CMCCDUOS) || defined(CONFIG_MACH_KLTE_CUDUOS) \
	|| defined(CONFIG_MACH_MEGA23GEUR_OPEN) || defined(CONFIG_MACH_MS01_EUR_3G) \
	|| defined(CONFIG_MACH_MEGA2LTE_KTT) || defined(CONFIG_MACH_ATLANTIC3GEUR_OPEN) \
	|| defined(CONFIG_MACH_MS01_EUR_LTE) || defined(CONFIG_MACH_MS01_KOR_LTE) || defined(CONFIG_DSDA_VIA_UART)
	SOC_SINGLE_MULTI_EXT("Sec Set DHA data", SND_SOC_NOPM, 0, VSID_MAX, 0, 15,
				msm_sec_dha_get, msm_sec_dha_put),
#else
	SOC_SINGLE_MULTI_EXT("Sec Set DHA data", SND_SOC_NOPM, 0, 65535, 0, 14,
				msm_sec_dha_get, msm_sec_dha_put),
#endif
#endif	/* CONFIG_SEC_DHA_SOL_MAL */
			0, tegra_get_avp_device, tegra_set_avp_device),
	{
		.name = "AVP DMA channel id", \
		.iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
		.info = snd_soc_info_volsw, \
		.access = SNDRV_CTL_ELEM_ACCESS_READ, \
		.get = tegra_get_dma_ch_id, \
		.private_value = SOC_SINGLE_VALUE(0, 0, \
			TEGRA_DMA_MAX_CHANNELS, 0)
	},
	SOC_SINGLE_EXT("AVP DMA address", 0, 0, 0xFFFFFFFF, \
			0, tegra_get_dma_addr, tegra_set_dma_addr),
};

static const struct snd_kcontrol_new tegra_i2s_lpbk_control =
	SOC_ENUM_EXT("I2S LoopBack", tegra_enum, tegra_get_i2sloopback,
			tegra_set_i2sloopback);

static int tegra_set_headset_plug_state(struct snd_kcontrol *kcontrol,
			      struct snd_ctl_elem_value *ucontrol)
{
	struct tegra_asoc_utils_data *data = snd_kcontrol_chip(kcontrol);
	int switch_state;

	data->headset_plug_state = ucontrol->value.integer.value[0];
	switch_state = data->headset_plug_state == 1 ? BIT_HEADSET
		: BIT_NO_HEADSET;
	if (psdev)
		switch_set_state(psdev, switch_state);

	return 1;
}
Exemplo n.º 19
0
SOC_ENUM("DRC Decay", drc_dcy),
SOC_SINGLE("DRC Quick Release Switch", WM9081_DRC_1, 2, 1, 0),
SOC_SINGLE_TLV("DRC Quick Release Volume", WM9081_DRC_2, 6, 3, 0, drc_qr_tlv),
SOC_ENUM("DRC Quick Release Decay", drc_qr_dcy),
SOC_SINGLE_TLV("DRC Startup Volume", WM9081_DRC_1, 6, 18, 0, drc_startup_tlv),

SOC_SINGLE("EQ Switch", WM9081_EQ_1, 0, 1, 0),

SOC_SINGLE("Speaker DC Volume", WM9081_ANALOGUE_SPEAKER_1, 3, 5, 0),
SOC_SINGLE("Speaker AC Volume", WM9081_ANALOGUE_SPEAKER_1, 0, 5, 0),
SOC_SINGLE("Speaker Switch", WM9081_ANALOGUE_SPEAKER_PGA, 7, 1, 1),
SOC_SINGLE("Speaker ZC Switch", WM9081_ANALOGUE_SPEAKER_PGA, 6, 1, 0),
SOC_SINGLE_TLV("Speaker Volume", WM9081_ANALOGUE_SPEAKER_PGA, 0, 63, 0,
	       out_tlv),
SOC_ENUM("DAC Deemphasis", dac_deemph),
SOC_ENUM_EXT("Speaker Mode", speaker_mode, speaker_mode_get, speaker_mode_put),
};

static const struct snd_kcontrol_new wm9081_eq_controls[] = {
SOC_SINGLE_TLV("EQ1 Volume", WM9081_EQ_1, 11, 24, 0, eq_tlv),
SOC_SINGLE_TLV("EQ2 Volume", WM9081_EQ_1, 6, 24, 0, eq_tlv),
SOC_SINGLE_TLV("EQ3 Volume", WM9081_EQ_1, 1, 24, 0, eq_tlv),
SOC_SINGLE_TLV("EQ4 Volume", WM9081_EQ_2, 11, 24, 0, eq_tlv),
SOC_SINGLE_TLV("EQ5 Volume", WM9081_EQ_2, 6, 24, 0, eq_tlv),
};

static const struct snd_kcontrol_new mixer[] = {
SOC_DAPM_SINGLE("IN1 Switch", WM9081_ANALOGUE_MIXER, 0, 1, 0),
SOC_DAPM_SINGLE("IN2 Switch", WM9081_ANALOGUE_MIXER, 2, 1, 0),
SOC_DAPM_SINGLE("Playback Switch", WM9081_ANALOGUE_MIXER, 4, 1, 0),
};
{
	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
	struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec);

	printk(" %s [%d] current record path %d\n",__FUNCTION__,__LINE__, max98090->rec_path);

	ucontrol->value.integer.value[0] = max98090->rec_path;

	return 0;
}

//-----------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------
static const struct snd_kcontrol_new max98090_snd_controls[] = {
	/* Path Control */
	SOC_ENUM_EXT("Playback Path", path_control_enum[0],
                max98090_get_playback_path, max98090_set_playback_path),

	SOC_ENUM_EXT("MIC Path", path_control_enum[1],
                max98090_get_record_path, max98090_set_record_path),
};

static int max98090_add_widgets(struct snd_soc_codec *codec)
{
	snd_soc_add_codec_controls(codec, max98090_snd_controls,
									     ARRAY_SIZE(max98090_snd_controls));
	return 0;
}

#if defined(CONFIG_MAX98090_HEADSET) 
//-----------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------
Exemplo n.º 21
0
{
    printk("%s()\n", __func__);
    if (mt_soc_lowjitter_control == ucontrol->value.integer.value[0])
    {
    }
    else
    {
    }
    mt_soc_lowjitter_control = ucontrol->value.integer.value[0];
    return 0;
}


static const struct snd_kcontrol_new mt_soc_controls[] =
{
    SOC_ENUM_EXT("I2S low Jitter fucntion", mt_soc_machine_enum[0], mt6595_get_lowjitter, mt6595_set_lowjitter),
};

static struct snd_soc_card snd_soc_card_mt =
{
    .name       = "mt-snd-card",
    .dai_link   = mt_soc_dai_common,
    .num_links  = ARRAY_SIZE(mt_soc_dai_common),
    .controls = mt_soc_controls,
    .num_controls = ARRAY_SIZE(mt_soc_controls),
};

static struct platform_device *mt_snd_device;

static int __init mt_soc_snd_init(void)
{
Exemplo n.º 22
0
	if (mode >= ARRAY_SIZE(ams_delta_audio_mode))
		return -EINVAL;

	ucontrol->value.enumerated.item[0] = mode;

	return 0;
}

static const struct soc_enum ams_delta_audio_enum[] = {
	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ams_delta_audio_mode),
						ams_delta_audio_mode),
};

static const struct snd_kcontrol_new ams_delta_audio_controls[] = {
	SOC_ENUM_EXT("Audio Mode", ams_delta_audio_enum[0],
			ams_delta_get_audio_mode, ams_delta_set_audio_mode),
};

/* Hook switch */
static struct snd_soc_jack ams_delta_hook_switch;
static struct snd_soc_jack_gpio ams_delta_hook_switch_gpios[] = {
	{
		.gpio = 4,
		.name = "hook_switch",
		.report = SND_JACK_HEADSET,
		.invert = 1,
		.debounce_time = 150,
	}
};

/* After we are able to control the codec over the modem,
Exemplo n.º 23
0
	else
		plat->amp_enable(0);

	return 0;
}

/* imx_3stack card dapm widgets */
static const struct snd_soc_dapm_widget imx_3stack_dapm_widgets[] = {
	SND_SOC_DAPM_MIC("Mic Jack", NULL),
	SND_SOC_DAPM_LINE("Line In Jack", NULL),
	SND_SOC_DAPM_SPK("Ext Spk", spk_amp_event),
	SND_SOC_DAPM_HP("Headphone Jack", NULL),
};

static const struct snd_kcontrol_new rt5621_machine_controls[] = {
	SOC_ENUM_EXT("Jack Function", rt5621_enum[0], rt5621_get_jack,
		     rt5621_set_jack),
	SOC_ENUM_EXT("Speaker Function", rt5621_enum[1], rt5621_get_spk,
		     rt5621_set_spk),
	SOC_ENUM_EXT("Line In Function", rt5621_enum[1], rt5621_get_line_in,
		     rt5621_set_line_in),
};

#if defined(CONFIG_MXC_ASRC) || defined(CONFIG_MXC_ASRC_MODULE)
static int asrc_func;

static const char *asrc_function[] = {
	"disable", "32KHz", "44.1KHz", "48KHz", "96KHz" };

static const struct soc_enum asrc_enum[] = {
	SOC_ENUM_SINGLE_EXT(5, asrc_function),
};
Exemplo n.º 24
0
			struct snd_kcontrol *kcontrol,
			struct snd_ctl_elem_value *ucontrol)
{
	pr_info("%s %ld\n", __func__, ucontrol->value.integer.value[0]);
	if (ucontrol->value.integer.value[0] == 0)
		set_speaker_amp_control_enable(false);
	else
		set_speaker_amp_control_enable(true);

	return 0;
}


static const struct snd_kcontrol_new tfa98xx_snd_controls[] = {
	SOC_ENUM_EXT("TFA98XX_CHANNEL",
		speaker_channel_enum,
		tfa98xx_codec_get_speaker_channel_control,
		tfa98xx_codec_put_speaker_channel_control),

	SOC_ENUM_EXT("TFA98XX_BYPASS_DSP",
		speaker_bypass_dsp_enum,
		tfa98xx_codec_get_speaker_bypass_dsp_control,
		tfa98xx_codec_put_speaker_bypass_dsp_control),

	SOC_ENUM_EXT("TFA98XX_SYNCED",
		speaker_synced_enum,
		tfa98xx_codec_get_speaker_synced_control,
		tfa98xx_codec_put_speaker_synced_control),

	SOC_ENUM_EXT("TFA98XX_LR",
		speaker_lr_enum,
		tfa98xx_codec_get_speaker_lr_control,
Exemplo n.º 25
0
			0, 0x34, 0xE4, aout_tlv),
	SOC_DOUBLE_R_SX_TLV("ADC Mixer Volume",
			CS42L51_ADCA_VOL, CS42L51_ADCB_VOL,
			0, 0x19, 0x7F, adc_pcm_tlv),
	SOC_DOUBLE_R("ADC Mixer Switch",
			CS42L51_ADCA_VOL, CS42L51_ADCB_VOL, 7, 1, 1),
	SOC_SINGLE("Playback Deemphasis Switch", CS42L51_DAC_CTL, 3, 1, 0),
	SOC_SINGLE("Auto-Mute Switch", CS42L51_DAC_CTL, 2, 1, 0),
	SOC_SINGLE("Soft Ramp Switch", CS42L51_DAC_CTL, 1, 1, 0),
	SOC_SINGLE("Zero Cross Switch", CS42L51_DAC_CTL, 0, 0, 0),
	SOC_DOUBLE_TLV("Mic Boost Volume",
			CS42L51_MIC_CTL, 0, 1, 1, 0, boost_tlv),
	SOC_SINGLE_TLV("Bass Volume", CS42L51_TONE_CTL, 0, 0xf, 1, tone_tlv),
	SOC_SINGLE_TLV("Treble Volume", CS42L51_TONE_CTL, 4, 0xf, 1, tone_tlv),
	SOC_ENUM_EXT("PCM channel mixer",
			cs42l51_chan_mix,
			cs42l51_get_chan_mix, cs42l51_set_chan_mix),
};

/*
 * to power down, one must:
 * 1.) Enable the PDN bit
 * 2.) enable power-down for the select channels
 * 3.) disable the PDN bit.
 */
static int cs42l51_pdn_event(struct snd_soc_dapm_widget *w,
		struct snd_kcontrol *kcontrol, int event)
{
	switch (event) {
	case SND_SOC_DAPM_PRE_PMD:
		snd_soc_update_bits(w->codec, CS42L51_POWER_CTL1,
Exemplo n.º 26
0
	ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_CBS_CFS);
	if (ret < 0)
		pr_err("set fmt cpu dai failed\n");

	return ret;
}

static const struct soc_enum msm_snd_enum[] = {
	SOC_ENUM_SINGLE_EXT(2, sec_mi2s_rx_ch_text),
	SOC_ENUM_SINGLE_EXT(2, pri_mi2s_tx_ch_text),
	SOC_ENUM_SINGLE_EXT(2, sec_mi2s_rx2_group_text),
};

static const struct snd_kcontrol_new msm_snd_controls[] = {
	SOC_ENUM_EXT("Internal BTSCO SampleRate", msm_btsco_enum[0],
		     msm_btsco_rate_get, msm_btsco_rate_put),
	SOC_ENUM_EXT("MI2S_RX Channels", msm_snd_enum[0],
			msm_sec_mi2s_rx_ch_get, msm_sec_mi2s_rx_ch_put),
	SOC_ENUM_EXT("MI2S_TX Channels", msm_snd_enum[1],
			msm_pri_mi2s_tx_ch_get, msm_pri_mi2s_tx_ch_put),
	SOC_ENUM_EXT("MI2S_RX_VIBRA Channels", msm_snd_enum[0],
			msm_sec_mi2s_rx2_ch_get, msm_sec_mi2s_rx2_ch_put),
	SOC_ENUM_EXT("Vibrator AMP Control", msm_vibrator_amp_control_enum[0],
			msm_vibrator_amp_control_get, msm_vibrator_amp_control_put),
	SOC_ENUM_EXT("MI2S_SD0_SD1 Group", msm_snd_enum[2],
			msm_sec_mi2s_rx2_group_get, msm_sec_mi2s_rx2_group_put),
};

static int msm_audrx_init(struct snd_soc_pcm_runtime *rtd)
{
Exemplo n.º 27
0
	SOC_DOUBLE_R("Speaker Switch", WM8985_LOUT2_SPK_VOLUME_CTRL,
		WM8985_ROUT2_SPK_VOLUME_CTRL, 6, 1, 1),

	SOC_SINGLE("High Pass Filter Switch", WM8985_ADC_CONTROL, 8, 1, 0),
	SOC_ENUM("High Pass Filter Mode", filter_mode),
	SOC_SINGLE("High Pass Filter Cutoff", WM8985_ADC_CONTROL, 4, 7, 0),

	SOC_DOUBLE_R_TLV("Aux Bypass Volume",
		WM8985_LEFT_MIXER_CTRL, WM8985_RIGHT_MIXER_CTRL, 6, 7, 0,
		aux_tlv),

	SOC_DOUBLE_R_TLV("Input PGA Bypass Volume",
		WM8985_LEFT_MIXER_CTRL, WM8985_RIGHT_MIXER_CTRL, 2, 7, 0,
		bypass_tlv),

	SOC_ENUM_EXT("Equalizer Function", eqmode, eqmode_get, eqmode_put),
	SOC_ENUM("EQ1 Cutoff", eq1_cutoff),
	SOC_SINGLE_TLV("EQ1 Volume", WM8985_EQ1_LOW_SHELF,  0, 24, 1, eq_tlv),
	SOC_ENUM("EQ2 Bandwidth", eq2_bw),
	SOC_ENUM("EQ2 Cutoff", eq2_cutoff),
	SOC_SINGLE_TLV("EQ2 Volume", WM8985_EQ2_PEAK_1, 0, 24, 1, eq_tlv),
	SOC_ENUM("EQ3 Bandwidth", eq3_bw),
	SOC_ENUM("EQ3 Cutoff", eq3_cutoff),
	SOC_SINGLE_TLV("EQ3 Volume", WM8985_EQ3_PEAK_2, 0, 24, 1, eq_tlv),
	SOC_ENUM("EQ4 Bandwidth", eq4_bw),
	SOC_ENUM("EQ4 Cutoff", eq4_cutoff),
	SOC_SINGLE_TLV("EQ4 Volume", WM8985_EQ4_PEAK_3, 0, 24, 1, eq_tlv),
	SOC_ENUM("EQ5 Cutoff", eq5_cutoff),
	SOC_SINGLE_TLV("EQ5 Volume", WM8985_EQ5_HIGH_SHELF, 0, 24, 1, eq_tlv),

	SOC_ENUM("3D Depth", depth_3d),
Exemplo n.º 28
0
static const SOC_ENUM_SINGLE_DECL(
	rt3261_rxdp1_enum, RT3261_DUMMY_PR3F,
	9, rt3261_rxdp1_src);

static const struct snd_kcontrol_new rt3261_rxdp1_mux =
	SOC_DAPM_ENUM("RxDP1 sel", rt3261_rxdp1_enum);
	
static const struct snd_kcontrol_new rt3261_dsp_snd_controls[] = {
	SOC_ENUM("RxDC input data", rt3261_rxdc_data_enum),
	SOC_ENUM("RxDP input data", rt3261_rxdp_data_enum),
	SOC_ENUM("TxDC input data", rt3261_txdc_data_enum),
	SOC_ENUM("TxDP input data", rt3261_txdp_data_enum),
	SOC_ENUM("SRC for RxDP", rt3261_src_rxdp_enum),
	SOC_ENUM("SRC for TxDP", rt3261_src_txdp_enum),
	/* AEC */
	SOC_ENUM_EXT("DSP Function Switch", rt3261_dsp_enum,
		rt3261_dsp_get, rt3261_dsp_put),
};

static int rt3261_dsp_patch_3(struct snd_soc_codec *codec)
{
	struct rt3261_dsp_param param;
	int ret, i;

	param.cmd_fmt = 0x0090;
	param.addr = 0x0064;
	param.data = 0x0004;
	param.cmd = RT3261_DSP_CMD_RW;
	ret = rt3261_dsp_write(codec, &param);
	if (ret < 0) {
		dev_err(codec->dev,
			"Fail to set DSP 3 bytes patch entrance: %d\n", ret);
	case 1:
		msm8960_auxpcm_rate = SAMPLE_RATE_16KHZ;
		break;
	default:
		msm8960_auxpcm_rate = SAMPLE_RATE_8KHZ;
		break;
	}
	pr_info("%s: msm8960_auxpcm_rate = %d"
		"ucontrol->value.integer.value[0] = %d\n", __func__,
		msm8960_auxpcm_rate,
		(int)ucontrol->value.integer.value[0]);
	return 0;
}

static const struct snd_kcontrol_new tabla_msm8960_controls[] = {
	SOC_ENUM_EXT("Speaker Function", msm8960_enum[0], msm8960_get_spk,
		msm8960_set_spk),
	SOC_ENUM_EXT("SLIM_0_RX Channels", msm8960_enum[1],
		msm8960_slim_0_rx_ch_get, msm8960_slim_0_rx_ch_put),
	SOC_ENUM_EXT("SLIM_0_TX Channels", msm8960_enum[2],
		msm8960_slim_0_tx_ch_get, msm8960_slim_0_tx_ch_put),
	SOC_SINGLE_EXT("SPK AMP SWITCH", SND_SOC_NOPM, 0, 1, 0,
	spk_get_ctl, spk_set_ctl),
	SOC_ENUM_EXT("Internal BTSCO SampleRate", msm8960_btsco_enum[0],
		msm8960_btsco_rate_get, msm8960_btsco_rate_put),
	SOC_ENUM_EXT("AUX PCM SampleRate", msm8960_auxpcm_enum[0],
		msm8960_auxpcm_rate_get, msm8960_auxpcm_rate_put),
};

#if 0 //FIXME
static const struct snd_kcontrol_new tabla_xbvol_controls[] = {
         SOC_SINGLE_TLV("LINEOUT1XB Volume", TABLA_A_RX_LINE_1_GAIN, 0, 12, 1,
Exemplo n.º 30
0
	case 0:
		mdm9615_btsco_rate = BTSCO_RATE_8KHZ;
		break;
	case 1:
		mdm9615_btsco_rate = BTSCO_RATE_16KHZ;
		break;
	default:
		mdm9615_btsco_rate = BTSCO_RATE_8KHZ;
		break;
	}
	pr_debug("%s: mdm9615_btsco_rate = %d\n", __func__, mdm9615_btsco_rate);
	return 0;
}

static const struct snd_kcontrol_new tabla_mdm9615_controls[] = {
	SOC_ENUM_EXT("Speaker Function", mdm9615_enum[0], mdm9615_get_spk,
		mdm9615_set_spk),
	SOC_ENUM_EXT("SLIM_0_RX Channels", mdm9615_enum[1],
		mdm9615_slim_0_rx_ch_get, mdm9615_slim_0_rx_ch_put),
	SOC_ENUM_EXT("SLIM_0_TX Channels", mdm9615_enum[2],
		mdm9615_slim_0_tx_ch_get, mdm9615_slim_0_tx_ch_put),
};

static const struct snd_kcontrol_new int_btsco_rate_mixer_controls[] = {
	SOC_ENUM_EXT("Internal BTSCO SampleRate", mdm9615_btsco_enum[0],
		mdm9615_btsco_rate_get, mdm9615_btsco_rate_put),
};

static int mdm9615_btsco_init(struct snd_soc_pcm_runtime *rtd)
{
	int err = 0;
	struct snd_soc_platform *platform = rtd->platform;