mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 11:19:37 +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];
|
||||
|
||||
unsigned int gpio_mask;
|
||||
unsigned int gpio_dir;
|
||||
unsigned int gpio_data;
|
||||
|
||||
struct hda_pcm pcm_rec[2]; /* PCM information */
|
||||
|
||||
unsigned int hp_detect:1;
|
||||
|
@ -981,6 +985,16 @@ static int cs_init(struct hda_codec *codec)
|
|||
struct cs_spec *spec = codec->spec;
|
||||
|
||||
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_input(codec);
|
||||
init_digital(codec);
|
||||
|
@ -1041,6 +1055,19 @@ static int cs_parse_auto_config(struct hda_codec *codec)
|
|||
int err;
|
||||
|
||||
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)
|
||||
return err;
|
||||
return 0;
|
||||
|
@ -1106,20 +1133,16 @@ static int patch_cs420x(struct hda_codec *codec)
|
|||
if (spec->board_config >= 0)
|
||||
fix_pincfg(codec, spec->board_config);
|
||||
|
||||
err = cs_parse_auto_config(codec);
|
||||
if (err < 0)
|
||||
goto error;
|
||||
switch (spec->board_config) {
|
||||
case CS420X_MBP55:
|
||||
/* GPIO3 = EAPD? */
|
||||
spec->gpio_mask = 0x08;
|
||||
spec->gpio_dir = 0x08;
|
||||
spec->gpio_data = 0x08;
|
||||
break;
|
||||
}
|
||||
|
||||
err = parse_output(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);
|
||||
err = cs_parse_auto_config(codec);
|
||||
if (err < 0)
|
||||
goto error;
|
||||
|
||||
|
|
Loading…
Reference in a new issue