Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c77dc2c2 authored by Mark Brown's avatar Mark Brown
Browse files

Merge branch 'topic/jack' of...

Merge branch 'topic/jack' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-tegra
parents 012baec5 77c71765
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -450,8 +450,10 @@ int soc_dai_hw_params(struct snd_pcm_substream *substream,
		      struct snd_soc_dai *dai);

/* Jack reporting */
int snd_soc_jack_new(struct snd_soc_codec *codec, const char *id, int type,
		     struct snd_soc_jack *jack);
int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type,
	struct snd_soc_jack *jack, struct snd_soc_jack_pin *pins,
	unsigned int num_pins);

void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);
int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,
			  struct snd_soc_jack_pin *pins);
@@ -659,7 +661,7 @@ struct snd_soc_jack_gpio {
struct snd_soc_jack {
	struct mutex mutex;
	struct snd_jack *jack;
	struct snd_soc_codec *codec;
	struct snd_soc_card *card;
	struct list_head pins;
	int status;
	struct blocking_notifier_head notifier;
+8 −6
Original line number Diff line number Diff line
@@ -783,19 +783,21 @@ static inline void sn95031_enable_jack_btn(struct snd_soc_codec *codec)
	snd_soc_write(codec, SN95031_BTNCTRL2, 0x01);
}

static int sn95031_get_headset_state(struct snd_soc_jack *mfld_jack)
static int sn95031_get_headset_state(struct snd_soc_codec *codec,
	struct snd_soc_jack *mfld_jack)
{
	int micbias = sn95031_get_mic_bias(mfld_jack->codec);
	int micbias = sn95031_get_mic_bias(codec);

	int jack_type = snd_soc_jack_get_type(mfld_jack, micbias);

	pr_debug("jack type detected = %d\n", jack_type);
	if (jack_type == SND_JACK_HEADSET)
		sn95031_enable_jack_btn(mfld_jack->codec);
		sn95031_enable_jack_btn(codec);
	return jack_type;
}

void sn95031_jack_detection(struct mfld_jack_data *jack_data)
void sn95031_jack_detection(struct snd_soc_codec *codec,
	struct mfld_jack_data *jack_data)
{
	unsigned int status;
	unsigned int mask = SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET;
@@ -809,11 +811,11 @@ void sn95031_jack_detection(struct mfld_jack_data *jack_data)
		status = SND_JACK_HEADSET | SND_JACK_BTN_1;
	} else if (jack_data->intr_id & 0x4) {
		pr_debug("headset or headphones inserted\n");
		status = sn95031_get_headset_state(jack_data->mfld_jack);
		status = sn95031_get_headset_state(codec, jack_data->mfld_jack);
	} else if (jack_data->intr_id & 0x8) {
		pr_debug("headset or headphones removed\n");
		status = 0;
		sn95031_disable_jack_btn(jack_data->mfld_jack->codec);
		sn95031_disable_jack_btn(codec);
	} else {
		pr_err("unidentified interrupt\n");
		return;
+2 −1
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ struct mfld_jack_data {
	struct snd_soc_jack *mfld_jack;
};

extern void sn95031_jack_detection(struct mfld_jack_data *jack_data);
extern void sn95031_jack_detection(struct snd_soc_codec *codec,
	struct mfld_jack_data *jack_data);

#endif
+3 −3
Original line number Diff line number Diff line
@@ -53,9 +53,9 @@ static int imx_es8328_dai_init(struct snd_soc_pcm_runtime *rtd)

	/* Headphone jack detection */
	if (gpio_is_valid(data->jack_gpio)) {
		ret = snd_soc_jack_new(rtd->codec, "Headphone",
		ret = snd_soc_card_jack_new(rtd->card, "Headphone",
					    SND_JACK_HEADPHONE | SND_JACK_BTN_0,
				       &headset_jack);
					    &headset_jack, NULL, 0);
		if (ret)
			return ret;

+5 −7
Original line number Diff line number Diff line
@@ -205,16 +205,14 @@ static int wm1133_ev1_init(struct snd_soc_pcm_runtime *rtd)
	struct snd_soc_dapm_context *dapm = &codec->dapm;

	/* Headphone jack detection */
	snd_soc_jack_new(codec, "Headphone", SND_JACK_HEADPHONE, &hp_jack);
	snd_soc_jack_add_pins(&hp_jack, ARRAY_SIZE(hp_jack_pins),
			      hp_jack_pins);
	snd_soc_card_jack_new(rtd->card, "Headphone", SND_JACK_HEADPHONE,
			      &hp_jack, hp_jack_pins, ARRAY_SIZE(hp_jack_pins));
	wm8350_hp_jack_detect(codec, WM8350_JDR, &hp_jack, SND_JACK_HEADPHONE);

	/* Microphone jack detection */
	snd_soc_jack_new(codec, "Microphone",
			 SND_JACK_MICROPHONE | SND_JACK_BTN_0, &mic_jack);
	snd_soc_jack_add_pins(&mic_jack, ARRAY_SIZE(mic_jack_pins),
			      mic_jack_pins);
	snd_soc_card_jack_new(rtd->card, "Microphone",
			      SND_JACK_MICROPHONE | SND_JACK_BTN_0, &mic_jack,
			      mic_jack_pins, ARRAY_SIZE(mic_jack_pins));
	wm8350_mic_jack_detect(codec, &mic_jack, SND_JACK_MICROPHONE,
			       SND_JACK_BTN_0);

Loading