Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 157868
b: refs/heads/master
c: 96f845d
h: refs/heads/master
v: v3
  • Loading branch information
Takashi Iwai committed Aug 28, 2009
1 parent 0ba94e3 commit 2eedb9e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 8 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: 286f5875ca5c4e58432e3e6ca386ea4294275d84
refs/heads/master: 96f845de89be6be12112d7b388cdf366dccfe12d
30 changes: 23 additions & 7 deletions trunk/sound/pci/hda/patch_sigmatel.c
Original file line number Diff line number Diff line change
Expand Up @@ -3580,21 +3580,30 @@ static int get_connection_index(struct hda_codec *codec, hda_nid_t mux,
}

/* create a volume assigned to the given pin (only if supported) */
/* return 1 if the volume control is created */
static int create_elem_capture_vol(struct hda_codec *codec, hda_nid_t nid,
const char *label)
const char *label, int direction)
{
unsigned int caps, nums;
char name[32];
int err;

if (!(get_wcaps(codec, nid) & AC_WCAP_IN_AMP))
if (direction == HDA_OUTPUT)
caps = AC_WCAP_OUT_AMP;
else
caps = AC_WCAP_IN_AMP;
if (!(get_wcaps(codec, nid) & caps))
return 0;
caps = query_amp_caps(codec, nid, HDA_OUTPUT);
caps = query_amp_caps(codec, nid, direction);
nums = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT;
if (!nums)
return 0;
snprintf(name, sizeof(name), "%s Capture Volume", label);
return stac92xx_add_control(codec->spec, STAC_CTL_WIDGET_VOL, name,
HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT));
err = stac92xx_add_control(codec->spec, STAC_CTL_WIDGET_VOL, name,
HDA_COMPOSE_AMP_VAL(nid, 3, 0, direction));
if (err < 0)
return err;
return 1;
}

/* create playback/capture controls for input pins on dmic capable codecs */
Expand Down Expand Up @@ -3643,9 +3652,15 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
else
label = stac92xx_dmic_labels[dimux->num_items];

err = create_elem_capture_vol(codec, nid, label);
err = create_elem_capture_vol(codec, nid, label, HDA_INPUT);
if (err < 0)
return err;
if (!err) {
err = create_elem_capture_vol(codec, nid, label,
HDA_OUTPUT);
if (err < 0)
return err;
}

dimux->items[dimux->num_items].label = label;
dimux->items[dimux->num_items].index = index;
Expand Down Expand Up @@ -3766,7 +3781,8 @@ static int stac92xx_auto_create_analog_input_ctls(struct hda_codec *codec, const
continue;

err = create_elem_capture_vol(codec, nid,
auto_pin_cfg_labels[i]);
auto_pin_cfg_labels[i],
HDA_INPUT);
if (err < 0)
return err;

Expand Down

0 comments on commit 2eedb9e

Please sign in to comment.