mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
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: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
a6bae20559
commit
ed208255e7
1 changed files with 36 additions and 13 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue