Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 353481
b: refs/heads/master
c: ea9b43a
h: refs/heads/master
i:
  353479: ce7f183
v: v3
  • Loading branch information
Takashi Iwai committed Feb 12, 2013
1 parent a639496 commit 928c4f6
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9958922a320d6ee9e9f96b30110bc3765b3e8299
refs/heads/master: ea9b43addc4d90ca5b029f47f85ca152320a1e8d
43 changes: 21 additions & 22 deletions trunk/sound/pci/hda/hda_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -2332,11 +2332,12 @@ struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);

static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
int dev)
int start_idx)
{
int idx;
for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
if (!find_mixer_ctl(codec, name, dev, idx))
int i, idx;
/* 16 ctlrs should be large enough */
for (i = 0, idx = start_idx; i < 16; i++, idx++) {
if (!find_mixer_ctl(codec, name, 0, idx))
return idx;
}
return -EBUSY;
Expand Down Expand Up @@ -3305,30 +3306,29 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
int err;
struct snd_kcontrol *kctl;
struct snd_kcontrol_new *dig_mix;
int idx, dev = 0;
const int spdif_pcm_dev = 1;
int idx = 0;
const int spdif_index = 16;
struct hda_spdif_out *spdif;
struct hda_bus *bus = codec->bus;

if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
type == HDA_PCM_TYPE_SPDIF) {
dev = spdif_pcm_dev;
} else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
idx = spdif_index;
} else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
type == HDA_PCM_TYPE_HDMI) {
for (idx = 0; idx < codec->spdif_out.used; idx++) {
spdif = snd_array_elem(&codec->spdif_out, idx);
for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx);
if (!kctl)
break;
kctl->id.device = spdif_pcm_dev;
}
/* suppose a single SPDIF device */
for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
if (!kctl)
break;
kctl->id.index = spdif_index;
}
codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
}
if (!codec->primary_dig_out_type)
codec->primary_dig_out_type = type;
if (!bus->primary_dig_out_type)
bus->primary_dig_out_type = type;

idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev);
idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx);
if (idx < 0) {
printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
return -EBUSY;
Expand All @@ -3338,7 +3338,6 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
kctl = snd_ctl_new1(dig_mix, codec);
if (!kctl)
return -ENOMEM;
kctl->id.device = dev;
kctl->id.index = idx;
kctl->private_value = codec->spdif_out.used - 1;
err = snd_hda_ctl_add(codec, associated_nid, kctl);
Expand Down
3 changes: 2 additions & 1 deletion trunk/sound/pci/hda/hda_codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,8 @@ struct hda_bus {
unsigned int response_reset:1; /* controller was reset */
unsigned int in_reset:1; /* during reset operation */
unsigned int power_keep_link_on:1; /* don't power off HDA link */

int primary_dig_out_type; /* primary digital out PCM type */
};

/*
Expand Down Expand Up @@ -846,7 +848,6 @@ struct hda_codec {
struct mutex hash_mutex;
struct snd_array spdif_out;
unsigned int spdif_in_enable; /* SPDIF input enable? */
int primary_dig_out_type; /* primary digital out PCM type */
const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */
struct snd_array init_pins; /* initial (BIOS) pin configurations */
struct snd_array driver_pins; /* pin configs set by codec parser */
Expand Down

0 comments on commit 928c4f6

Please sign in to comment.