Skip to content

Commit

Permalink
ALSA: hda - pwr_nids cleanup for IDT codecs
Browse files Browse the repository at this point in the history
Clean up and fix pwr_nids for 92HD71 / 73 / 83 family codecs; remove
pwr_mapping which was incorrect.

The original pwr_nids support of 92HD83xxx was incorrect and never
actually worked before.  Now we should have things working correctly
without having to hack by DID anymore.

It is also not necessary to explicitly turn on all the pins near the
beginning of patch_stac92hd83xxx() now, the pins will go though
initialization properly.

Tested on 92HD66 / 71 / 73 / 75 / 83 / 89 / 91 demo boards.

Signed-off-by: Charles Chin <Charles.Chin@idt.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Charles Chin authored and Takashi Iwai committed Nov 11, 2011
1 parent d938e66 commit afef2cf
Showing 1 changed file with 9 additions and 24 deletions.
33 changes: 9 additions & 24 deletions sound/pci/hda/patch_sigmatel.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,6 @@ struct sigmatel_spec {

/* power management */
unsigned int num_pwrs;
const unsigned int *pwr_mapping;
const hda_nid_t *pwr_nids;
const hda_nid_t *dac_list;

Expand Down Expand Up @@ -374,18 +373,15 @@ static const unsigned long stac92hd73xx_capvols[] = {

#define STAC92HD83_DAC_COUNT 3

static const hda_nid_t stac92hd83xxx_pwr_nids[4] = {
0xa, 0xb, 0xd, 0xe,
static const hda_nid_t stac92hd83xxx_pwr_nids[7] = {
0x0a, 0x0b, 0x0c, 0xd, 0x0e,
0x0f, 0x10
};

static const hda_nid_t stac92hd83xxx_slave_dig_outs[2] = {
0x1e, 0,
};

static const unsigned int stac92hd83xxx_pwr_mapping[4] = {
0x03, 0x0c, 0x20, 0x40,
};

static const hda_nid_t stac92hd83xxx_dmic_nids[] = {
0x11, 0x20,
};
Expand Down Expand Up @@ -4470,8 +4466,12 @@ static int stac92xx_init(struct hda_codec *codec)
stac_toggle_power_map(codec, nid, 1);
continue;
}
if (enable_pin_detect(codec, nid, STAC_PWR_EVENT))
if (enable_pin_detect(codec, nid, STAC_PWR_EVENT)) {
stac_issue_unsol_event(codec, nid);
continue;
}
/* none of the above, turn the port OFF */
stac_toggle_power_map(codec, nid, 0);
}

/* sync mute LED */
Expand Down Expand Up @@ -4727,11 +4727,7 @@ static void stac_toggle_power_map(struct hda_codec *codec, hda_nid_t nid,
if (idx >= spec->num_pwrs)
return;

/* several codecs have two power down bits */
if (spec->pwr_mapping)
idx = spec->pwr_mapping[idx];
else
idx = 1 << idx;
idx = 1 << idx;

val = snd_hda_codec_read(codec, codec->afg, 0, 0x0fec, 0x0) & 0xff;
if (enable)
Expand Down Expand Up @@ -5629,9 +5625,6 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
snd_hda_codec_set_pincfg(codec, 0xf, 0x2181205e);
}

/* reset pin power-down; Windows may leave these bits after reboot */
snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7EC, 0);
snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7ED, 0);
codec->no_trigger_sense = 1;
codec->spec = spec;

Expand All @@ -5641,7 +5634,6 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
codec->slave_dig_outs = stac92hd83xxx_slave_dig_outs;
spec->digbeep_nid = 0x21;
spec->pwr_nids = stac92hd83xxx_pwr_nids;
spec->pwr_mapping = stac92hd83xxx_pwr_mapping;
spec->num_pwrs = ARRAY_SIZE(stac92hd83xxx_pwr_nids);
spec->multiout.dac_nids = spec->dac_nids;
spec->init = stac92hd83xxx_core_init;
Expand All @@ -5658,9 +5650,6 @@ static int patch_stac92hd83xxx(struct hda_codec *codec)
stac92xx_set_config_regs(codec,
stac92hd83xxx_brd_tbl[spec->board_config]);

if (spec->board_config != STAC_92HD83XXX_PWR_REF)
spec->num_pwrs = 0;

codec->patch_ops = stac92xx_patch_ops;

if (find_mute_led_gpio(codec, 0))
Expand Down Expand Up @@ -5869,8 +5858,6 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
(codec->revision_id & 0xf) == 1)
spec->stream_delay = 40; /* 40 milliseconds */

/* no output amps */
spec->num_pwrs = 0;
/* disable VSW */
spec->init = stac92hd71bxx_core_init;
unmute_init++;
Expand All @@ -5885,8 +5872,6 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
if ((codec->revision_id & 0xf) == 1)
spec->stream_delay = 40; /* 40 milliseconds */

/* no output amps */
spec->num_pwrs = 0;
/* fallthru */
default:
spec->init = stac92hd71bxx_core_init;
Expand Down

0 comments on commit afef2cf

Please sign in to comment.