提交 d5d6eba9 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  ALSA: snd-aica: declare MODULE_FIRMWARE
  ALSA: hda - Don't initialize CORB/RIRB for single_cmd mode
  ALSA: usb-audio: fix combine_word problem
  sound: Replace old style lock initializer
  ASoC: S3C64XX I2S: Enable audio-bus clock
  ASoC: OMAP: Don't try to set unsupported OMAP_DMA_DATA_BURST_16 on OMAP1
  ALSA: hda, move hp_bseries_system
  sound: Use KERN_WARNING instead of KERN_WARN, which does not exist
  ALSA: intel8x0: Mute External Amplifier by default for another Sony model
  ALSA: hda - Add OLPC XO-1.5 PCI ID
  ALSA: hda - Enable GPIO control for mute LED on HP systems
...@@ -219,7 +219,9 @@ static int shared_resources_initialised; ...@@ -219,7 +219,9 @@ static int shared_resources_initialised;
* Mid level stuff * Mid level stuff
*/ */
struct sound_settings dmasound = { .lock = SPIN_LOCK_UNLOCKED }; struct sound_settings dmasound = {
.lock = __SPIN_LOCK_UNLOCKED(dmasound.lock)
};
static inline void sound_silence(void) static inline void sound_silence(void)
{ {
......
...@@ -157,7 +157,7 @@ static void sb_intr (sb_devc *devc) ...@@ -157,7 +157,7 @@ static void sb_intr (sb_devc *devc)
break; break;
default: default:
/* printk(KERN_WARN "Sound Blaster: Unexpected interrupt\n"); */ /* printk(KERN_WARNING "Sound Blaster: Unexpected interrupt\n"); */
; ;
} }
} }
...@@ -177,7 +177,7 @@ static void sb_intr (sb_devc *devc) ...@@ -177,7 +177,7 @@ static void sb_intr (sb_devc *devc)
break; break;
default: default:
/* printk(KERN_WARN "Sound Blaster: Unexpected interrupt\n"); */ /* printk(KERN_WARNING "Sound Blaster: Unexpected interrupt\n"); */
; ;
} }
} }
......
...@@ -782,7 +782,7 @@ printk(KERN_INFO "FKS: ess_handle_channel %s irq_mode=%d\n", channel, irq_mode); ...@@ -782,7 +782,7 @@ printk(KERN_INFO "FKS: ess_handle_channel %s irq_mode=%d\n", channel, irq_mode);
break; break;
default:; default:;
/* printk(KERN_WARN "ESS: Unexpected interrupt\n"); */ /* printk(KERN_WARNING "ESS: Unexpected interrupt\n"); */
} }
} }
......
...@@ -722,9 +722,10 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus, ...@@ -722,9 +722,10 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
chip->last_cmd[addr]); chip->last_cmd[addr]);
chip->single_cmd = 1; chip->single_cmd = 1;
bus->response_reset = 0; bus->response_reset = 0;
/* re-initialize CORB/RIRB */ /* release CORB/RIRB */
azx_free_cmd_io(chip); azx_free_cmd_io(chip);
azx_init_cmd_io(chip); /* disable unsolicited responses */
azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
return -1; return -1;
} }
...@@ -865,7 +866,9 @@ static int azx_reset(struct azx *chip) ...@@ -865,7 +866,9 @@ static int azx_reset(struct azx *chip)
} }
/* Accept unsolicited responses */ /* Accept unsolicited responses */
azx_writel(chip, GCTL, azx_readl(chip, GCTL) | ICH6_GCTL_UNSOL); if (!chip->single_cmd)
azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
ICH6_GCTL_UNSOL);
/* detect codecs */ /* detect codecs */
if (!chip->codec_mask) { if (!chip->codec_mask) {
...@@ -980,7 +983,8 @@ static void azx_init_chip(struct azx *chip) ...@@ -980,7 +983,8 @@ static void azx_init_chip(struct azx *chip)
azx_int_enable(chip); azx_int_enable(chip);
/* initialize the codec command I/O */ /* initialize the codec command I/O */
azx_init_cmd_io(chip); if (!chip->single_cmd)
azx_init_cmd_io(chip);
/* program the position buffer */ /* program the position buffer */
azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr); azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
......
...@@ -2325,6 +2325,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = { ...@@ -2325,6 +2325,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
CXT5066_LAPTOP), CXT5066_LAPTOP),
SND_PCI_QUIRK(0x1028, 0x02f5, "Dell", SND_PCI_QUIRK(0x1028, 0x02f5, "Dell",
CXT5066_DELL_LAPTOP), CXT5066_DELL_LAPTOP),
SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT5066_OLPC_XO_1_5),
{} {}
}; };
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/dmi.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/asoundef.h> #include <sound/asoundef.h>
#include <sound/jack.h> #include <sound/jack.h>
...@@ -1693,6 +1694,8 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = { ...@@ -1693,6 +1694,8 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
"DFI LanParty", STAC_92HD71BXX_REF), "DFI LanParty", STAC_92HD71BXX_REF),
SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30fb, SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30fb,
"HP dv4-1222nr", STAC_HP_DV4_1222NR), "HP dv4-1222nr", STAC_HP_DV4_1222NR),
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x1720,
"HP", STAC_HP_DV5),
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3080, SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3080,
"HP", STAC_HP_DV5), "HP", STAC_HP_DV5),
SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x30f0, SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x30f0,
...@@ -4665,6 +4668,26 @@ static void stac92xx_unsol_event(struct hda_codec *codec, unsigned int res) ...@@ -4665,6 +4668,26 @@ static void stac92xx_unsol_event(struct hda_codec *codec, unsigned int res)
} }
} }
static int hp_bseries_system(u32 subsystem_id)
{
switch (subsystem_id) {
case 0x103c307e:
case 0x103c307f:
case 0x103c3080:
case 0x103c3081:
case 0x103c1722:
case 0x103c1723:
case 0x103c1724:
case 0x103c1725:
case 0x103c1726:
case 0x103c1727:
case 0x103c1728:
case 0x103c1729:
return 1;
}
return 0;
}
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
static void stac92hd_proc_hook(struct snd_info_buffer *buffer, static void stac92hd_proc_hook(struct snd_info_buffer *buffer,
struct hda_codec *codec, hda_nid_t nid) struct hda_codec *codec, hda_nid_t nid)
...@@ -4754,6 +4777,11 @@ static int stac92xx_hp_check_power_status(struct hda_codec *codec, ...@@ -4754,6 +4777,11 @@ static int stac92xx_hp_check_power_status(struct hda_codec *codec,
else else
spec->gpio_data |= spec->gpio_led; /* white */ spec->gpio_data |= spec->gpio_led; /* white */
if (hp_bseries_system(codec->subsystem_id)) {
/* LED state is inverted on these systems */
spec->gpio_data ^= spec->gpio_led;
}
stac_gpio_set(codec, spec->gpio_mask, stac_gpio_set(codec, spec->gpio_mask,
spec->gpio_dir, spec->gpio_dir,
spec->gpio_data); spec->gpio_data);
...@@ -5243,6 +5271,7 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) ...@@ -5243,6 +5271,7 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
{ {
struct sigmatel_spec *spec; struct sigmatel_spec *spec;
struct hda_verb *unmute_init = stac92hd71bxx_unmute_core_init; struct hda_verb *unmute_init = stac92hd71bxx_unmute_core_init;
unsigned int pin_cfg;
int err = 0; int err = 0;
spec = kzalloc(sizeof(*spec), GFP_KERNEL); spec = kzalloc(sizeof(*spec), GFP_KERNEL);
...@@ -5426,6 +5455,45 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) ...@@ -5426,6 +5455,45 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
break; break;
} }
if (hp_bseries_system(codec->subsystem_id)) {
pin_cfg = snd_hda_codec_get_pincfg(codec, 0x0f);
if (get_defcfg_device(pin_cfg) == AC_JACK_LINE_OUT ||
get_defcfg_device(pin_cfg) == AC_JACK_SPEAKER ||
get_defcfg_device(pin_cfg) == AC_JACK_HP_OUT) {
/* It was changed in the BIOS to just satisfy MS DTM.
* Lets turn it back into slaved HP
*/
pin_cfg = (pin_cfg & (~AC_DEFCFG_DEVICE))
| (AC_JACK_HP_OUT <<
AC_DEFCFG_DEVICE_SHIFT);
pin_cfg = (pin_cfg & (~(AC_DEFCFG_DEF_ASSOC
| AC_DEFCFG_SEQUENCE)))
| 0x1f;
snd_hda_codec_set_pincfg(codec, 0x0f, pin_cfg);
}
}
if ((codec->subsystem_id >> 16) == PCI_VENDOR_ID_HP) {
const struct dmi_device *dev = NULL;
while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING,
NULL, dev))) {
if (strcmp(dev->name, "HP_Mute_LED_1")) {
switch (codec->vendor_id) {
case 0x111d7608:
spec->gpio_led = 0x01;
break;
case 0x111d7600:
case 0x111d7601:
case 0x111d7602:
case 0x111d7603:
spec->gpio_led = 0x08;
break;
}
break;
}
}
}
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
if (spec->gpio_led) { if (spec->gpio_led) {
spec->gpio_mask |= spec->gpio_led; spec->gpio_mask |= spec->gpio_led;
......
...@@ -1948,6 +1948,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = { ...@@ -1948,6 +1948,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
.name = "HP xw4200", /* AD1981B*/ .name = "HP xw4200", /* AD1981B*/
.type = AC97_TUNE_HP_ONLY .type = AC97_TUNE_HP_ONLY
}, },
{
.subvendor = 0x104d,
.subdevice = 0x8144,
.name = "Sony",
.type = AC97_TUNE_INV_EAPD
},
{ {
.subvendor = 0x104d, .subvendor = 0x104d,
.subdevice = 0x8197, .subdevice = 0x8197,
......
...@@ -49,6 +49,7 @@ MODULE_AUTHOR("Adrian McMenamin <adrian@mcmen.demon.co.uk>"); ...@@ -49,6 +49,7 @@ MODULE_AUTHOR("Adrian McMenamin <adrian@mcmen.demon.co.uk>");
MODULE_DESCRIPTION("Dreamcast AICA sound (pcm) driver"); MODULE_DESCRIPTION("Dreamcast AICA sound (pcm) driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_SUPPORTED_DEVICE("{{Yamaha/SEGA, AICA}}"); MODULE_SUPPORTED_DEVICE("{{Yamaha/SEGA, AICA}}");
MODULE_FIRMWARE("aica_firmware.bin");
/* module parameters */ /* module parameters */
#define CARD_NAME "AICA" #define CARD_NAME "AICA"
......
...@@ -195,8 +195,12 @@ static int omap_pcm_prepare(struct snd_pcm_substream *substream) ...@@ -195,8 +195,12 @@ static int omap_pcm_prepare(struct snd_pcm_substream *substream)
else else
omap_enable_dma_irq(prtd->dma_ch, OMAP_DMA_FRAME_IRQ); omap_enable_dma_irq(prtd->dma_ch, OMAP_DMA_FRAME_IRQ);
omap_set_dma_src_burst_mode(prtd->dma_ch, OMAP_DMA_DATA_BURST_16); if (!(cpu_class_is_omap1())) {
omap_set_dma_dest_burst_mode(prtd->dma_ch, OMAP_DMA_DATA_BURST_16); omap_set_dma_src_burst_mode(prtd->dma_ch,
OMAP_DMA_DATA_BURST_16);
omap_set_dma_dest_burst_mode(prtd->dma_ch,
OMAP_DMA_DATA_BURST_16);
}
return 0; return 0;
} }
......
...@@ -220,6 +220,8 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev) ...@@ -220,6 +220,8 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
goto err; goto err;
} }
clk_enable(i2s->iis_cclk);
ret = s3c_i2sv2_probe(pdev, dai, i2s, 0); ret = s3c_i2sv2_probe(pdev, dai, i2s, 0);
if (ret) if (ret)
goto err_clk; goto err_clk;
......
...@@ -210,7 +210,7 @@ struct snd_usb_midi_endpoint_info { ...@@ -210,7 +210,7 @@ struct snd_usb_midi_endpoint_info {
/* /*
*/ */
#define combine_word(s) ((*s) | ((unsigned int)(s)[1] << 8)) #define combine_word(s) ((*(s)) | ((unsigned int)(s)[1] << 8))
#define combine_triple(s) (combine_word(s) | ((unsigned int)(s)[2] << 16)) #define combine_triple(s) (combine_word(s) | ((unsigned int)(s)[2] << 16))
#define combine_quad(s) (combine_triple(s) | ((unsigned int)(s)[3] << 24)) #define combine_quad(s) (combine_triple(s) | ((unsigned int)(s)[3] << 24))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册