Merge branch 'for-2.6.39' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
authorTakashi Iwai <tiwai@suse.de>
Tue, 5 Apr 2011 07:12:21 +0000 (09:12 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 5 Apr 2011 07:12:21 +0000 (09:12 +0200)
sound/pci/hda/patch_realtek.c
sound/soc/codecs/tlv320dac33.c
sound/soc/codecs/twl6040.c

index 0ef0035..12c6f45 100644 (file)
@@ -9863,7 +9863,6 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
        SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD),
        SND_PCI_QUIRK(0x10f1, 0x2350, "TYAN-S2350", ALC888_6ST_DELL),
        SND_PCI_QUIRK(0x108e, 0x534d, NULL, ALC883_3ST_6ch),
-       SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte P35 DS3R", ALC882_6ST_DIG),
 
        SND_PCI_QUIRK(0x1462, 0x0349, "MSI", ALC883_TARGA_2ch_DIG),
        SND_PCI_QUIRK(0x1462, 0x040d, "MSI", ALC883_TARGA_2ch_DIG),
@@ -10700,6 +10699,7 @@ enum {
        PINFIX_LENOVO_Y530,
        PINFIX_PB_M5210,
        PINFIX_ACER_ASPIRE_7736,
+       PINFIX_GIGABYTE_880GM,
 };
 
 static const struct alc_fixup alc882_fixups[] = {
@@ -10731,6 +10731,13 @@ static const struct alc_fixup alc882_fixups[] = {
                .type = ALC_FIXUP_SKU,
                .v.sku = ALC_FIXUP_SKU_IGNORE,
        },
+       [PINFIX_GIGABYTE_880GM] = {
+               .type = ALC_FIXUP_PINS,
+               .v.pins = (const struct alc_pincfg[]) {
+                       { 0x14, 0x1114410 }, /* set as speaker */
+                       { }
+               }
+       },
 };
 
 static struct snd_pci_quirk alc882_fixup_tbl[] = {
@@ -10738,6 +10745,7 @@ static struct snd_pci_quirk alc882_fixup_tbl[] = {
        SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", PINFIX_LENOVO_Y530),
        SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", PINFIX_ABIT_AW9D_MAX),
        SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", PINFIX_ACER_ASPIRE_7736),
+       SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte", PINFIX_GIGABYTE_880GM),
        {}
 };
 
@@ -18774,8 +18782,6 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
                      ALC662_3ST_6ch_DIG),
        SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB20x", ALC662_AUTO),
        SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10),
-       SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L",
-                     ALC662_3ST_6ch_DIG),
        SND_PCI_QUIRK(0x152d, 0x2304, "Quanta WH1", ALC663_ASUS_H13),
        SND_PCI_QUIRK(0x1565, 0x820f, "Biostar TA780G M2+", ALC662_3ST_6ch_DIG),
        SND_PCI_QUIRK(0x1631, 0xc10c, "PB RS65", ALC663_ASUS_M51VA),
@@ -19449,6 +19455,7 @@ enum {
        ALC662_FIXUP_IDEAPAD,
        ALC272_FIXUP_MARIO,
        ALC662_FIXUP_CZC_P10T,
+       ALC662_FIXUP_GIGABYTE,
 };
 
 static const struct alc_fixup alc662_fixups[] = {
@@ -19477,12 +19484,20 @@ static const struct alc_fixup alc662_fixups[] = {
                        {}
                }
        },
+       [ALC662_FIXUP_GIGABYTE] = {
+               .type = ALC_FIXUP_PINS,
+               .v.pins = (const struct alc_pincfg[]) {
+                       { 0x14, 0x1114410 }, /* set as speaker */
+                       { }
+               }
+       },
 };
 
 static struct snd_pci_quirk alc662_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
        SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
        SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
+       SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte", ALC662_FIXUP_GIGABYTE),
        SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
        SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
        SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
index 00b6d87..eb1a0b4 100644 (file)
@@ -324,6 +324,10 @@ static void dac33_init_chip(struct snd_soc_codec *codec)
        dac33_write(codec, DAC33_OUT_AMP_CTRL,
                    dac33_read_reg_cache(codec, DAC33_OUT_AMP_CTRL));
 
+       dac33_write(codec, DAC33_LDAC_PWR_CTRL,
+                   dac33_read_reg_cache(codec, DAC33_LDAC_PWR_CTRL));
+       dac33_write(codec, DAC33_RDAC_PWR_CTRL,
+                   dac33_read_reg_cache(codec, DAC33_RDAC_PWR_CTRL));
 }
 
 static inline int dac33_read_id(struct snd_soc_codec *codec)
@@ -670,6 +674,7 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
 {
        struct snd_soc_codec *codec = dac33->codec;
        unsigned int delay;
+       unsigned long flags;
 
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_MODE1:
@@ -677,10 +682,10 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
                        DAC33_THRREG(dac33->nsample));
 
                /* Take the timestamps */
-               spin_lock_irq(&dac33->lock);
+               spin_lock_irqsave(&dac33->lock, flags);
                dac33->t_stamp2 = ktime_to_us(ktime_get());
                dac33->t_stamp1 = dac33->t_stamp2;
-               spin_unlock_irq(&dac33->lock);
+               spin_unlock_irqrestore(&dac33->lock, flags);
 
                dac33_write16(codec, DAC33_PREFILL_MSB,
                                DAC33_THRREG(dac33->alarm_threshold));
@@ -692,11 +697,11 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
                break;
        case DAC33_FIFO_MODE7:
                /* Take the timestamp */
-               spin_lock_irq(&dac33->lock);
+               spin_lock_irqsave(&dac33->lock, flags);
                dac33->t_stamp1 = ktime_to_us(ktime_get());
                /* Move back the timestamp with drain time */
                dac33->t_stamp1 -= dac33->mode7_us_to_lthr;
-               spin_unlock_irq(&dac33->lock);
+               spin_unlock_irqrestore(&dac33->lock, flags);
 
                dac33_write16(codec, DAC33_PREFILL_MSB,
                                DAC33_THRREG(DAC33_MODE7_MARGIN));
@@ -714,13 +719,14 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
 static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33)
 {
        struct snd_soc_codec *codec = dac33->codec;
+       unsigned long flags;
 
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_MODE1:
                /* Take the timestamp */
-               spin_lock_irq(&dac33->lock);
+               spin_lock_irqsave(&dac33->lock, flags);
                dac33->t_stamp2 = ktime_to_us(ktime_get());
-               spin_unlock_irq(&dac33->lock);
+               spin_unlock_irqrestore(&dac33->lock, flags);
 
                dac33_write16(codec, DAC33_NSAMPLE_MSB,
                                DAC33_THRREG(dac33->nsample));
@@ -773,10 +779,11 @@ static irqreturn_t dac33_interrupt_handler(int irq, void *dev)
 {
        struct snd_soc_codec *codec = dev;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
+       unsigned long flags;
 
-       spin_lock(&dac33->lock);
+       spin_lock_irqsave(&dac33->lock, flags);
        dac33->t_stamp1 = ktime_to_us(ktime_get());
-       spin_unlock(&dac33->lock);
+       spin_unlock_irqrestore(&dac33->lock, flags);
 
        /* Do not schedule the workqueue in Mode7 */
        if (dac33->fifo_mode != DAC33_FIFO_MODE7)
@@ -1173,15 +1180,16 @@ static snd_pcm_sframes_t dac33_dai_delay(
        unsigned int time_delta, uthr;
        int samples_out, samples_in, samples;
        snd_pcm_sframes_t delay = 0;
+       unsigned long flags;
 
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_BYPASS:
                break;
        case DAC33_FIFO_MODE1:
-               spin_lock(&dac33->lock);
+               spin_lock_irqsave(&dac33->lock, flags);
                t0 = dac33->t_stamp1;
                t1 = dac33->t_stamp2;
-               spin_unlock(&dac33->lock);
+               spin_unlock_irqrestore(&dac33->lock, flags);
                t_now = ktime_to_us(ktime_get());
 
                /* We have not started to fill the FIFO yet, delay is 0 */
@@ -1246,10 +1254,10 @@ static snd_pcm_sframes_t dac33_dai_delay(
                }
                break;
        case DAC33_FIFO_MODE7:
-               spin_lock(&dac33->lock);
+               spin_lock_irqsave(&dac33->lock, flags);
                t0 = dac33->t_stamp1;
                uthr = dac33->uthr;
-               spin_unlock(&dac33->lock);
+               spin_unlock_irqrestore(&dac33->lock, flags);
                t_now = ktime_to_us(ktime_get());
 
                /* We have not started to fill the FIFO yet, delay is 0 */
index 482fcdb..255901c 100644 (file)
@@ -1629,8 +1629,10 @@ static int twl6040_probe(struct snd_soc_codec *codec)
        priv->naudint = naudint;
        priv->workqueue = create_singlethread_workqueue("twl6040-codec");
 
-       if (!priv->workqueue)
+       if (!priv->workqueue) {
+               ret = -ENOMEM;
                goto work_err;
+       }
 
        INIT_DELAYED_WORK(&priv->delayed_work, twl6040_accessory_work);