sound fixes for v3.10-rc2

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)
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.19 (GNU/Linux)
 
 iQIcBAABAgAGBQJRlf1dAAoJEGwxgFQ9KSmkkN4P/R+JSjE7igXAARpCzBZUNHRX
 XpTEs/6wSHVujo5KNhe3KN+F/1WHxVJu8x9kPIkZCGmWvLRS/y1XKgDgJjqRPYqO
 Sx47G6ZIXDyn7KUFnEOZnE7j9kmwxezL4TE9k4vMfxGPINVNX8hvSpsXMwwCtZZL
 1IUFbV305yvjrcerffQBUVhLcPb8Z3/rYmEZsOD0ITzoww6Z2K7bNPqDEKYlav0r
 cuVLRX1Tc38j4BdHBsuaOmTlYdB7UWjfmYfVhAhyDu72F46RUBQhoncGyfyayvg4
 uqkSKBRCM7APjuc5zYyO70C5ZB3dt8EXuF45/Np6rllqL9luNYsqFXO/TtrfFoz/
 PFCxWW89+203GEcAn5IMn2k/eDX+dv9V0mc+TuhvGXC+Dls/DPz8o/BZ1ELnqKOu
 y+YENGIIA72OteP2JEi8Q0VmmRh9PN0Eg2b72AnOyrSzs4+8s8I09Nt86I7jN/ya
 ROLlR7B2cG+Zop58mqMceN3GAs9UvWLzKAeVhxVf1+UOFSiJsmcmiH25Rj72uKOG
 yRW36ShCxu0xMr+RgiiGI1jdpqzYLQ0aEVxTpnexIi+ibGbmns5GT+z+VMJfT9Uz
 5QfXmJd6kxeyomjdiCzqT42wEJsFgRNoNjL+NPLFPPWKZ3PrAEQl3/hAX4Qe4g2h
 WAwJn9WrjLuWuRxVErCe
 =p+Ok
 -----END PGP SIGNATURE-----

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()
This commit is contained in:
Linus Torvalds 2013-05-17 07:17:48 -07:00
commit 8f710dd34a
9 changed files with 53 additions and 37 deletions

View file

@ -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[] = {
.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] = {

View file

@ -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;

View file

@ -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

View file

@ -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)
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,
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;
} }

View file

@ -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),

View file

@ -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

View file

@ -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;
} }

View file

@ -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) {

View file

@ -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
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");
} }