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

Commit ed208255 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Add GPIO setup for MacBook pro 5,5 with CS420x



GPIO3 seems corresponding to EAPD that is required for the speaker
output.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent a6bae205
Loading
Loading
Loading
Loading
+36 −13
Original line number Original line Diff line number Diff line
@@ -53,6 +53,10 @@ struct cs_spec {


	struct hda_bind_ctls *capture_bind[2];
	struct hda_bind_ctls *capture_bind[2];


	unsigned int gpio_mask;
	unsigned int gpio_dir;
	unsigned int gpio_data;

	struct hda_pcm pcm_rec[2];	/* PCM information */
	struct hda_pcm pcm_rec[2];	/* PCM information */


	unsigned int hp_detect:1;
	unsigned int hp_detect:1;
@@ -981,6 +985,16 @@ static int cs_init(struct hda_codec *codec)
	struct cs_spec *spec = codec->spec;
	struct cs_spec *spec = codec->spec;


	snd_hda_sequence_write(codec, cs_coef_init_verbs);
	snd_hda_sequence_write(codec, cs_coef_init_verbs);

	if (spec->gpio_mask) {
		snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_MASK,
				    spec->gpio_mask);
		snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DIRECTION,
				    spec->gpio_dir);
		snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
				    spec->gpio_data);
	}

	init_output(codec);
	init_output(codec);
	init_input(codec);
	init_input(codec);
	init_digital(codec);
	init_digital(codec);
@@ -1041,6 +1055,19 @@ static int cs_parse_auto_config(struct hda_codec *codec)
	int err;
	int err;


	err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL);
	err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL);
	if (err < 0)
		return err;

	err = parse_output(codec);
	if (err < 0)
		return err;
	err = parse_input(codec);
	if (err < 0)
		return err;
	err = parse_digital_output(codec);
	if (err < 0)
		return err;
	err = parse_digital_input(codec);
	if (err < 0)
	if (err < 0)
		return err;
		return err;
	return 0;
	return 0;
@@ -1106,20 +1133,16 @@ static int patch_cs420x(struct hda_codec *codec)
	if (spec->board_config >= 0)
	if (spec->board_config >= 0)
		fix_pincfg(codec, spec->board_config);
		fix_pincfg(codec, spec->board_config);


	err = cs_parse_auto_config(codec);
	switch (spec->board_config) {
	if (err < 0)
	case CS420X_MBP55:
		goto error;
		/* GPIO3 = EAPD? */
		spec->gpio_mask = 0x08;
		spec->gpio_dir = 0x08;
		spec->gpio_data = 0x08;
		break;
	}


	err = parse_output(codec);
	err = cs_parse_auto_config(codec);
	if (err < 0)
		goto error;
	err = parse_input(codec);
	if (err < 0)
		goto error;
	err = parse_digital_output(codec);
	if (err < 0)
		goto error;
	err = parse_digital_input(codec);
	if (err < 0)
	if (err < 0)
		goto error;
		goto error;