Commit 8f710dd3 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "A fairly calm update at this time, as seen in the short log, only one
  fix per person: including,

   - a few ASoC fixes (da7213 dmic, ux500 AD slot, wm0010 error path)
   - a copule of HD-audio fixes
   - a few other misc fixes (MIPS allmodconfig, proc output in usb, old
     PowerBook support)"

* tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: usb-audio: proc: use found syncmaxsize to determine feedback format
  ALSA: hda - Add headset mic support for another Dell machine
  ALSA: snd-aoa: Add a layout entry for PowerBook6,5
  ALSA: hda - Check the activity of the NID to be powered down
  sound: Fix make allmodconfig on MIPS correctly
  ASoC: da7213: Fix setting dmic_samplephase and dmic_clk_rate
  ASoC: ux500: Swap even/odd AD slot definitions
  ASoC: wm0010: fix error return code in wm0010_boot()
parents ec50f2a9 e6135fe9
...@@ -113,6 +113,7 @@ MODULE_ALIAS("sound-layout-100"); ...@@ -113,6 +113,7 @@ MODULE_ALIAS("sound-layout-100");
MODULE_ALIAS("aoa-device-id-14"); MODULE_ALIAS("aoa-device-id-14");
MODULE_ALIAS("aoa-device-id-22"); MODULE_ALIAS("aoa-device-id-22");
MODULE_ALIAS("aoa-device-id-35"); MODULE_ALIAS("aoa-device-id-35");
MODULE_ALIAS("aoa-device-id-44");
/* onyx with all but microphone connected */ /* onyx with all but microphone connected */
static struct codec_connection onyx_connections_nomic[] = { static struct codec_connection onyx_connections_nomic[] = {
...@@ -361,6 +362,13 @@ static struct layout layouts[] = { ...@@ -361,6 +362,13 @@ static struct layout layouts[] = {
.connections = tas_connections_nolineout, .connections = tas_connections_nolineout,
}, },
}, },
/* PowerBook6,5 */
{ .device_id = 44,
.codecs[0] = {
.name = "tas",
.connections = tas_connections_all,
},
},
/* PowerBook6,7 */ /* PowerBook6,7 */
{ .layout_id = 80, { .layout_id = 80,
.codecs[0] = { .codecs[0] = {
......
...@@ -200,7 +200,8 @@ static int i2sbus_add_dev(struct macio_dev *macio, ...@@ -200,7 +200,8 @@ static int i2sbus_add_dev(struct macio_dev *macio,
* We probably cannot handle all device-id machines, * We probably cannot handle all device-id machines,
* so restrict to those we do handle for now. * so restrict to those we do handle for now.
*/ */
if (id && (*id == 22 || *id == 14 || *id == 35)) { if (id && (*id == 22 || *id == 14 || *id == 35 ||
*id == 44)) {
snprintf(dev->sound.modalias, 32, snprintf(dev->sound.modalias, 32,
"aoa-device-id-%d", *id); "aoa-device-id-%d", *id);
ok = 1; ok = 1;
......
...@@ -250,7 +250,7 @@ config MSND_FIFOSIZE ...@@ -250,7 +250,7 @@ config MSND_FIFOSIZE
menuconfig SOUND_OSS menuconfig SOUND_OSS
tristate "OSS sound modules" tristate "OSS sound modules"
depends on ISA_DMA_API && VIRT_TO_BUS depends on ISA_DMA_API && VIRT_TO_BUS
depends on !ISA_DMA_SUPPORT_BROKEN depends on !GENERIC_ISA_DMA_SUPPORT_BROKEN
help help
OSS is the Open Sound System suite of sound card drivers. They make OSS is the Open Sound System suite of sound card drivers. They make
sound programming easier since they provide a common API. Say Y or sound programming easier since they provide a common API. Say Y or
......
...@@ -606,6 +606,10 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid, ...@@ -606,6 +606,10 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
return false; return false;
} }
/* check whether the NID is referred by any active paths */
#define is_active_nid_for_any(codec, nid) \
is_active_nid(codec, nid, HDA_OUTPUT, 0)
/* get the default amp value for the target state */ /* get the default amp value for the target state */
static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid, static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
int dir, unsigned int caps, bool enable) int dir, unsigned int caps, bool enable)
...@@ -759,7 +763,8 @@ static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path) ...@@ -759,7 +763,8 @@ static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
for (i = 0; i < path->depth; i++) { for (i = 0; i < path->depth; i++) {
hda_nid_t nid = path->path[i]; hda_nid_t nid = path->path[i];
if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3)) { if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3) &&
!is_active_nid_for_any(codec, nid)) {
snd_hda_codec_write(codec, nid, 0, snd_hda_codec_write(codec, nid, 0,
AC_VERB_SET_POWER_STATE, AC_VERB_SET_POWER_STATE,
AC_PWRST_D3); AC_PWRST_D3);
...@@ -4157,7 +4162,7 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec, ...@@ -4157,7 +4162,7 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
return power_state; return power_state;
if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER) if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
return power_state; return power_state;
if (is_active_nid(codec, nid, HDA_OUTPUT, 0)) if (is_active_nid_for_any(codec, nid))
return power_state; return power_state;
return AC_PWRST_D3; return AC_PWRST_D3;
} }
......
...@@ -3482,6 +3482,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { ...@@ -3482,6 +3482,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x1028, 0x05c9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x05c9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x05ca, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x05ca, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x05cb, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x05cb, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x05de, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x05e9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x05e9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x05ea, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x05ea, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x05eb, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x05eb, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
......
...@@ -348,25 +348,25 @@ ...@@ -348,25 +348,25 @@
/* AB8500_ADSLOTSELX */ /* AB8500_ADSLOTSELX */
#define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_ODD 0x00 #define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_ODD 0x00
#define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD 0x01 #define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD 0x10
#define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD 0x02 #define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD 0x20
#define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_ODD 0x03 #define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_ODD 0x30
#define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_ODD 0x04 #define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_ODD 0x40
#define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_ODD 0x05 #define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_ODD 0x50
#define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_ODD 0x06 #define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_ODD 0x60
#define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_ODD 0x07 #define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_ODD 0x70
#define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_ODD 0x08 #define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_ODD 0x80
#define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_ODD 0x0F #define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_ODD 0xF0
#define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_EVEN 0x00 #define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_EVEN 0x00
#define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_EVEN 0x10 #define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_EVEN 0x01
#define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN 0x20 #define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN 0x02
#define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_EVEN 0x30 #define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_EVEN 0x03
#define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_EVEN 0x40 #define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_EVEN 0x04
#define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_EVEN 0x50 #define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_EVEN 0x05
#define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_EVEN 0x60 #define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_EVEN 0x06
#define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_EVEN 0x70 #define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_EVEN 0x07
#define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_EVEN 0x80 #define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_EVEN 0x08
#define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_EVEN 0xF0 #define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_EVEN 0x0F
#define AB8500_ADSLOTSELX_EVEN_SHIFT 0 #define AB8500_ADSLOTSELX_EVEN_SHIFT 0
#define AB8500_ADSLOTSELX_ODD_SHIFT 4 #define AB8500_ADSLOTSELX_ODD_SHIFT 4
......
...@@ -1488,17 +1488,17 @@ static int da7213_probe(struct snd_soc_codec *codec) ...@@ -1488,17 +1488,17 @@ static int da7213_probe(struct snd_soc_codec *codec)
DA7213_DMIC_DATA_SEL_SHIFT); DA7213_DMIC_DATA_SEL_SHIFT);
break; break;
} }
switch (pdata->dmic_data_sel) { switch (pdata->dmic_samplephase) {
case DA7213_DMIC_SAMPLE_ON_CLKEDGE: case DA7213_DMIC_SAMPLE_ON_CLKEDGE:
case DA7213_DMIC_SAMPLE_BETWEEN_CLKEDGE: case DA7213_DMIC_SAMPLE_BETWEEN_CLKEDGE:
dmic_cfg |= (pdata->dmic_data_sel << dmic_cfg |= (pdata->dmic_samplephase <<
DA7213_DMIC_SAMPLEPHASE_SHIFT); DA7213_DMIC_SAMPLEPHASE_SHIFT);
break; break;
} }
switch (pdata->dmic_data_sel) { switch (pdata->dmic_clk_rate) {
case DA7213_DMIC_CLK_3_0MHZ: case DA7213_DMIC_CLK_3_0MHZ:
case DA7213_DMIC_CLK_1_5MHZ: case DA7213_DMIC_CLK_1_5MHZ:
dmic_cfg |= (pdata->dmic_data_sel << dmic_cfg |= (pdata->dmic_clk_rate <<
DA7213_DMIC_CLK_RATE_SHIFT); DA7213_DMIC_CLK_RATE_SHIFT);
break; break;
} }
......
...@@ -667,6 +667,7 @@ static int wm0010_boot(struct snd_soc_codec *codec) ...@@ -667,6 +667,7 @@ static int wm0010_boot(struct snd_soc_codec *codec)
/* On wm0010 only the CLKCTRL1 value is used */ /* On wm0010 only the CLKCTRL1 value is used */
pll_rec.clkctrl1 = wm0010->pll_clkctrl1; pll_rec.clkctrl1 = wm0010->pll_clkctrl1;
ret = -ENOMEM;
len = pll_rec.length + 8; len = pll_rec.length + 8;
out = kzalloc(len, GFP_KERNEL); out = kzalloc(len, GFP_KERNEL);
if (!out) { if (!out) {
......
...@@ -116,21 +116,22 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s ...@@ -116,21 +116,22 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s
} }
static void proc_dump_ep_status(struct snd_usb_substream *subs, static void proc_dump_ep_status(struct snd_usb_substream *subs,
struct snd_usb_endpoint *ep, struct snd_usb_endpoint *data_ep,
struct snd_usb_endpoint *sync_ep,
struct snd_info_buffer *buffer) struct snd_info_buffer *buffer)
{ {
if (!ep) if (!data_ep)
return; return;
snd_iprintf(buffer, " Packet Size = %d\n", ep->curpacksize); snd_iprintf(buffer, " Packet Size = %d\n", data_ep->curpacksize);
snd_iprintf(buffer, " Momentary freq = %u Hz (%#x.%04x)\n", snd_iprintf(buffer, " Momentary freq = %u Hz (%#x.%04x)\n",
subs->speed == USB_SPEED_FULL subs->speed == USB_SPEED_FULL
? get_full_speed_hz(ep->freqm) ? get_full_speed_hz(data_ep->freqm)
: get_high_speed_hz(ep->freqm), : get_high_speed_hz(data_ep->freqm),
ep->freqm >> 16, ep->freqm & 0xffff); data_ep->freqm >> 16, data_ep->freqm & 0xffff);
if (ep->freqshift != INT_MIN) { if (sync_ep && data_ep->freqshift != INT_MIN) {
int res = 16 - ep->freqshift; int res = 16 - data_ep->freqshift;
snd_iprintf(buffer, " Feedback Format = %d.%d\n", snd_iprintf(buffer, " Feedback Format = %d.%d\n",
(ep->syncmaxsize > 3 ? 32 : 24) - res, res); (sync_ep->syncmaxsize > 3 ? 32 : 24) - res, res);
} }
} }
...@@ -140,8 +141,7 @@ static void proc_dump_substream_status(struct snd_usb_substream *subs, struct sn ...@@ -140,8 +141,7 @@ static void proc_dump_substream_status(struct snd_usb_substream *subs, struct sn
snd_iprintf(buffer, " Status: Running\n"); snd_iprintf(buffer, " Status: Running\n");
snd_iprintf(buffer, " Interface = %d\n", subs->interface); snd_iprintf(buffer, " Interface = %d\n", subs->interface);
snd_iprintf(buffer, " Altset = %d\n", subs->altset_idx); snd_iprintf(buffer, " Altset = %d\n", subs->altset_idx);
proc_dump_ep_status(subs, subs->data_endpoint, buffer); proc_dump_ep_status(subs, subs->data_endpoint, subs->sync_endpoint, buffer);
proc_dump_ep_status(subs, subs->sync_endpoint, buffer);
} else { } else {
snd_iprintf(buffer, " Status: Stop\n"); snd_iprintf(buffer, " Status: Stop\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment