Loading sound/core/jack.c +1 −0 Original line number Diff line number Diff line Loading @@ -141,6 +141,7 @@ int snd_jack_new(struct snd_card *card, const char *id, int type, fail_input: input_free_device(jack->input_dev); kfree(jack->id); kfree(jack); return err; } Loading sound/pci/au88x0/au88x0_core.c +11 −3 Original line number Diff line number Diff line Loading @@ -1252,11 +1252,19 @@ static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) { static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma) { stream_t *dma = &vortex->dma_adb[adbdma]; int temp; int temp, page, delta; temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)); temp = (dma->period_virt * dma->period_bytes) + (temp & (dma->period_bytes - 1)); return temp; page = (temp & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT; if (dma->nr_periods >= 4) delta = (page - dma->period_real) & 3; else { delta = (page - dma->period_real); if (delta < 0) delta += dma->nr_periods; } return (dma->period_virt + delta) * dma->period_bytes + (temp & (dma->period_bytes - 1)); } static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma) Loading sound/pci/hda/hda_intel.c +1 −0 Original line number Diff line number Diff line Loading @@ -2308,6 +2308,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x8410, "ASUS", POS_FIX_LPIB), SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), SND_PCI_QUIRK(0x1179, 0xff10, "Toshiba A100-259", POS_FIX_LPIB), Loading sound/pci/hda/patch_conexant.c +54 −14 Original line number Diff line number Diff line Loading @@ -3114,6 +3114,8 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = { SND_PCI_QUIRK(0x1028, 0x0401, "Dell Vostro 1014", CXT5066_DELL_VOSTRO), SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO), SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD), SND_PCI_QUIRK(0x1028, 0x050f, "Dell Inspiron", CXT5066_IDEAPAD), SND_PCI_QUIRK(0x1028, 0x0510, "Dell Vostro", CXT5066_IDEAPAD), SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP), SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_ASUS), SND_PCI_QUIRK(0x1043, 0x1643, "Asus K52JU", CXT5066_ASUS), Loading Loading @@ -3410,7 +3412,7 @@ static void cx_auto_parse_output(struct hda_codec *codec) } } spec->multiout.dac_nids = spec->private_dac_nids; spec->multiout.max_channels = nums * 2; spec->multiout.max_channels = spec->multiout.num_dacs * 2; if (cfg->hp_outs > 0) spec->auto_mute = 1; Loading Loading @@ -3729,9 +3731,9 @@ static int cx_auto_init(struct hda_codec *codec) return 0; } static int cx_auto_add_volume(struct hda_codec *codec, const char *basename, static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename, const char *dir, int cidx, hda_nid_t nid, int hda_dir) hda_nid_t nid, int hda_dir, int amp_idx) { static char name[32]; static struct snd_kcontrol_new knew[] = { Loading @@ -3743,7 +3745,8 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename, for (i = 0; i < 2; i++) { struct snd_kcontrol *kctl; knew[i].private_value = HDA_COMPOSE_AMP_VAL(nid, 3, 0, hda_dir); knew[i].private_value = HDA_COMPOSE_AMP_VAL(nid, 3, amp_idx, hda_dir); knew[i].subdevice = HDA_SUBDEV_AMP_FLAG; knew[i].index = cidx; snprintf(name, sizeof(name), "%s%s %s", basename, dir, sfx[i]); Loading @@ -3759,6 +3762,9 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename, return 0; } #define cx_auto_add_volume(codec, str, dir, cidx, nid, hda_dir) \ cx_auto_add_volume_idx(codec, str, dir, cidx, nid, hda_dir, 0) #define cx_auto_add_pb_volume(codec, nid, str, idx) \ cx_auto_add_volume(codec, str, " Playback", idx, nid, HDA_OUTPUT) Loading Loading @@ -3808,30 +3814,61 @@ static int cx_auto_build_input_controls(struct hda_codec *codec) struct conexant_spec *spec = codec->spec; struct auto_pin_cfg *cfg = &spec->autocfg; static const char *prev_label; int i, err, cidx; int i, err, cidx, conn_len; hda_nid_t conn[HDA_MAX_CONNECTIONS]; int multi_adc_volume = 0; /* If the ADC nid has several input volumes */ int adc_nid = spec->adc_nids[0]; err = cx_auto_add_volume(codec, "Capture", "", 0, spec->adc_nids[0], conn_len = snd_hda_get_connections(codec, adc_nid, conn, HDA_MAX_CONNECTIONS); if (conn_len < 0) return conn_len; multi_adc_volume = cfg->num_inputs > 1 && conn_len > 1; if (!multi_adc_volume) { err = cx_auto_add_volume(codec, "Capture", "", 0, adc_nid, HDA_INPUT); if (err < 0) return err; } prev_label = NULL; cidx = 0; for (i = 0; i < cfg->num_inputs; i++) { hda_nid_t nid = cfg->inputs[i].pin; const char *label; if (!(get_wcaps(codec, nid) & AC_WCAP_IN_AMP)) int j; int pin_amp = get_wcaps(codec, nid) & AC_WCAP_IN_AMP; if (!pin_amp && !multi_adc_volume) continue; label = hda_get_autocfg_input_label(codec, cfg, i); if (label == prev_label) cidx++; else cidx = 0; prev_label = label; err = cx_auto_add_volume(codec, label, " Capture", cidx, if (pin_amp) { err = cx_auto_add_volume(codec, label, " Boost", cidx, nid, HDA_INPUT); if (err < 0) return err; } if (!multi_adc_volume) continue; for (j = 0; j < conn_len; j++) { if (conn[j] == nid) { err = cx_auto_add_volume_idx(codec, label, " Capture", cidx, adc_nid, HDA_INPUT, j); if (err < 0) return err; break; } } } return 0; } Loading Loading @@ -3902,6 +3939,8 @@ static struct hda_codec_preset snd_hda_preset_conexant[] = { .patch = patch_cxt5066 }, { .id = 0x14f15069, .name = "CX20585", .patch = patch_cxt5066 }, { .id = 0x14f1506e, .name = "CX20590", .patch = patch_cxt5066 }, { .id = 0x14f15097, .name = "CX20631", .patch = patch_conexant_auto }, { .id = 0x14f15098, .name = "CX20632", Loading @@ -3928,6 +3967,7 @@ MODULE_ALIAS("snd-hda-codec-id:14f15066"); MODULE_ALIAS("snd-hda-codec-id:14f15067"); MODULE_ALIAS("snd-hda-codec-id:14f15068"); MODULE_ALIAS("snd-hda-codec-id:14f15069"); MODULE_ALIAS("snd-hda-codec-id:14f1506e"); MODULE_ALIAS("snd-hda-codec-id:14f15097"); MODULE_ALIAS("snd-hda-codec-id:14f15098"); MODULE_ALIAS("snd-hda-codec-id:14f150a1"); Loading sound/pci/hda/patch_via.c +1 −1 Original line number Diff line number Diff line Loading @@ -567,7 +567,7 @@ static void via_auto_init_analog_input(struct hda_codec *codec) hda_nid_t nid = cfg->inputs[i].pin; if (spec->smart51_enabled && is_smart51_pins(spec, nid)) ctl = PIN_OUT; else if (i == AUTO_PIN_MIC) else if (cfg->inputs[i].type == AUTO_PIN_MIC) ctl = PIN_VREF50; else ctl = PIN_IN; Loading Loading
sound/core/jack.c +1 −0 Original line number Diff line number Diff line Loading @@ -141,6 +141,7 @@ int snd_jack_new(struct snd_card *card, const char *id, int type, fail_input: input_free_device(jack->input_dev); kfree(jack->id); kfree(jack); return err; } Loading
sound/pci/au88x0/au88x0_core.c +11 −3 Original line number Diff line number Diff line Loading @@ -1252,11 +1252,19 @@ static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) { static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma) { stream_t *dma = &vortex->dma_adb[adbdma]; int temp; int temp, page, delta; temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)); temp = (dma->period_virt * dma->period_bytes) + (temp & (dma->period_bytes - 1)); return temp; page = (temp & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT; if (dma->nr_periods >= 4) delta = (page - dma->period_real) & 3; else { delta = (page - dma->period_real); if (delta < 0) delta += dma->nr_periods; } return (dma->period_virt + delta) * dma->period_bytes + (temp & (dma->period_bytes - 1)); } static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma) Loading
sound/pci/hda/hda_intel.c +1 −0 Original line number Diff line number Diff line Loading @@ -2308,6 +2308,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x8410, "ASUS", POS_FIX_LPIB), SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), SND_PCI_QUIRK(0x1179, 0xff10, "Toshiba A100-259", POS_FIX_LPIB), Loading
sound/pci/hda/patch_conexant.c +54 −14 Original line number Diff line number Diff line Loading @@ -3114,6 +3114,8 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = { SND_PCI_QUIRK(0x1028, 0x0401, "Dell Vostro 1014", CXT5066_DELL_VOSTRO), SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO), SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD), SND_PCI_QUIRK(0x1028, 0x050f, "Dell Inspiron", CXT5066_IDEAPAD), SND_PCI_QUIRK(0x1028, 0x0510, "Dell Vostro", CXT5066_IDEAPAD), SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP), SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_ASUS), SND_PCI_QUIRK(0x1043, 0x1643, "Asus K52JU", CXT5066_ASUS), Loading Loading @@ -3410,7 +3412,7 @@ static void cx_auto_parse_output(struct hda_codec *codec) } } spec->multiout.dac_nids = spec->private_dac_nids; spec->multiout.max_channels = nums * 2; spec->multiout.max_channels = spec->multiout.num_dacs * 2; if (cfg->hp_outs > 0) spec->auto_mute = 1; Loading Loading @@ -3729,9 +3731,9 @@ static int cx_auto_init(struct hda_codec *codec) return 0; } static int cx_auto_add_volume(struct hda_codec *codec, const char *basename, static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename, const char *dir, int cidx, hda_nid_t nid, int hda_dir) hda_nid_t nid, int hda_dir, int amp_idx) { static char name[32]; static struct snd_kcontrol_new knew[] = { Loading @@ -3743,7 +3745,8 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename, for (i = 0; i < 2; i++) { struct snd_kcontrol *kctl; knew[i].private_value = HDA_COMPOSE_AMP_VAL(nid, 3, 0, hda_dir); knew[i].private_value = HDA_COMPOSE_AMP_VAL(nid, 3, amp_idx, hda_dir); knew[i].subdevice = HDA_SUBDEV_AMP_FLAG; knew[i].index = cidx; snprintf(name, sizeof(name), "%s%s %s", basename, dir, sfx[i]); Loading @@ -3759,6 +3762,9 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename, return 0; } #define cx_auto_add_volume(codec, str, dir, cidx, nid, hda_dir) \ cx_auto_add_volume_idx(codec, str, dir, cidx, nid, hda_dir, 0) #define cx_auto_add_pb_volume(codec, nid, str, idx) \ cx_auto_add_volume(codec, str, " Playback", idx, nid, HDA_OUTPUT) Loading Loading @@ -3808,30 +3814,61 @@ static int cx_auto_build_input_controls(struct hda_codec *codec) struct conexant_spec *spec = codec->spec; struct auto_pin_cfg *cfg = &spec->autocfg; static const char *prev_label; int i, err, cidx; int i, err, cidx, conn_len; hda_nid_t conn[HDA_MAX_CONNECTIONS]; int multi_adc_volume = 0; /* If the ADC nid has several input volumes */ int adc_nid = spec->adc_nids[0]; err = cx_auto_add_volume(codec, "Capture", "", 0, spec->adc_nids[0], conn_len = snd_hda_get_connections(codec, adc_nid, conn, HDA_MAX_CONNECTIONS); if (conn_len < 0) return conn_len; multi_adc_volume = cfg->num_inputs > 1 && conn_len > 1; if (!multi_adc_volume) { err = cx_auto_add_volume(codec, "Capture", "", 0, adc_nid, HDA_INPUT); if (err < 0) return err; } prev_label = NULL; cidx = 0; for (i = 0; i < cfg->num_inputs; i++) { hda_nid_t nid = cfg->inputs[i].pin; const char *label; if (!(get_wcaps(codec, nid) & AC_WCAP_IN_AMP)) int j; int pin_amp = get_wcaps(codec, nid) & AC_WCAP_IN_AMP; if (!pin_amp && !multi_adc_volume) continue; label = hda_get_autocfg_input_label(codec, cfg, i); if (label == prev_label) cidx++; else cidx = 0; prev_label = label; err = cx_auto_add_volume(codec, label, " Capture", cidx, if (pin_amp) { err = cx_auto_add_volume(codec, label, " Boost", cidx, nid, HDA_INPUT); if (err < 0) return err; } if (!multi_adc_volume) continue; for (j = 0; j < conn_len; j++) { if (conn[j] == nid) { err = cx_auto_add_volume_idx(codec, label, " Capture", cidx, adc_nid, HDA_INPUT, j); if (err < 0) return err; break; } } } return 0; } Loading Loading @@ -3902,6 +3939,8 @@ static struct hda_codec_preset snd_hda_preset_conexant[] = { .patch = patch_cxt5066 }, { .id = 0x14f15069, .name = "CX20585", .patch = patch_cxt5066 }, { .id = 0x14f1506e, .name = "CX20590", .patch = patch_cxt5066 }, { .id = 0x14f15097, .name = "CX20631", .patch = patch_conexant_auto }, { .id = 0x14f15098, .name = "CX20632", Loading @@ -3928,6 +3967,7 @@ MODULE_ALIAS("snd-hda-codec-id:14f15066"); MODULE_ALIAS("snd-hda-codec-id:14f15067"); MODULE_ALIAS("snd-hda-codec-id:14f15068"); MODULE_ALIAS("snd-hda-codec-id:14f15069"); MODULE_ALIAS("snd-hda-codec-id:14f1506e"); MODULE_ALIAS("snd-hda-codec-id:14f15097"); MODULE_ALIAS("snd-hda-codec-id:14f15098"); MODULE_ALIAS("snd-hda-codec-id:14f150a1"); Loading
sound/pci/hda/patch_via.c +1 −1 Original line number Diff line number Diff line Loading @@ -567,7 +567,7 @@ static void via_auto_init_analog_input(struct hda_codec *codec) hda_nid_t nid = cfg->inputs[i].pin; if (spec->smart51_enabled && is_smart51_pins(spec, nid)) ctl = PIN_OUT; else if (i == AUTO_PIN_MIC) else if (cfg->inputs[i].type == AUTO_PIN_MIC) ctl = PIN_VREF50; else ctl = PIN_IN; Loading