From ead783791dada15d9df6810243b96c21a01b7a93 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 5 Apr 2013 11:39:18 -0700 Subject: [PATCH] 3.4-stable patches added patches: alsa-hda-bug-fix-on-return-value-when-getting-hdmi-eld-info.patch alsa-hda-enabling-realtek-alc-671-codec.patch alsa-hda-fix-typo-in-proc-output.patch regmap-cache-fix-regcache-rbtree-sync.patch reiserfs-fix-warning-and-inode-leak-when-deleting-inode-with-xattrs.patch spi-mpc512x-psc-optionally-keep-psc-ss-asserted-across-xfer-segmensts.patch spi-s3c64xx-modified-error-interrupt-handling-and-init.patch ubifs-make-space-fixup-work-in-the-remount-case.patch --- ...urn-value-when-getting-hdmi-eld-info.patch | 34 +++++++ ...a-hda-enabling-realtek-alc-671-codec.patch | 41 +++++++++ .../alsa-hda-fix-typo-in-proc-output.patch | 31 +++++++ ...egmap-cache-fix-regcache-rbtree-sync.patch | 39 ++++++++ ...leak-when-deleting-inode-with-xattrs.patch | 39 ++++++++ queue-3.4/series | 8 ++ ...sc-ss-asserted-across-xfer-segmensts.patch | 43 +++++++++ ...ed-error-interrupt-handling-and-init.patch | 88 +++++++++++++++++++ ...space-fixup-work-in-the-remount-case.patch | 66 ++++++++++++++ 9 files changed, 389 insertions(+) create mode 100644 queue-3.4/alsa-hda-bug-fix-on-return-value-when-getting-hdmi-eld-info.patch create mode 100644 queue-3.4/alsa-hda-enabling-realtek-alc-671-codec.patch create mode 100644 queue-3.4/alsa-hda-fix-typo-in-proc-output.patch create mode 100644 queue-3.4/regmap-cache-fix-regcache-rbtree-sync.patch create mode 100644 queue-3.4/reiserfs-fix-warning-and-inode-leak-when-deleting-inode-with-xattrs.patch create mode 100644 queue-3.4/spi-mpc512x-psc-optionally-keep-psc-ss-asserted-across-xfer-segmensts.patch create mode 100644 queue-3.4/spi-s3c64xx-modified-error-interrupt-handling-and-init.patch create mode 100644 queue-3.4/ubifs-make-space-fixup-work-in-the-remount-case.patch diff --git a/queue-3.4/alsa-hda-bug-fix-on-return-value-when-getting-hdmi-eld-info.patch b/queue-3.4/alsa-hda-bug-fix-on-return-value-when-getting-hdmi-eld-info.patch new file mode 100644 index 00000000000..da3aa86a6b8 --- /dev/null +++ b/queue-3.4/alsa-hda-bug-fix-on-return-value-when-getting-hdmi-eld-info.patch @@ -0,0 +1,34 @@ +From 2ef5692efad330b67a234e2c49edad38538751e7 Mon Sep 17 00:00:00 2001 +From: Mengdong Lin +Date: Thu, 28 Mar 2013 05:20:22 -0400 +Subject: ALSA: hda - bug fix on return value when getting HDMI ELD info + +From: Mengdong Lin + +commit 2ef5692efad330b67a234e2c49edad38538751e7 upstream. + +In function snd_hdmi_get_eld(), the variable 'ret' should be initialized to 0. +Otherwise it will be returned uninitialized as non-zero after ELD info is got +successfully. Thus hdmi_present_sense() will always assume ELD info is invalid +by mistake, and /proc file system cannot show the proper ELD info. + +Signed-off-by: Mengdong Lin +Acked-by: David Henningsson +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_eld.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/pci/hda/hda_eld.c ++++ b/sound/pci/hda/hda_eld.c +@@ -322,7 +322,7 @@ int snd_hdmi_get_eld(struct hdmi_eld *el + struct hda_codec *codec, hda_nid_t nid) + { + int i; +- int ret; ++ int ret = 0; + int size; + unsigned char *buf; + diff --git a/queue-3.4/alsa-hda-enabling-realtek-alc-671-codec.patch b/queue-3.4/alsa-hda-enabling-realtek-alc-671-codec.patch new file mode 100644 index 00000000000..92797167730 --- /dev/null +++ b/queue-3.4/alsa-hda-enabling-realtek-alc-671-codec.patch @@ -0,0 +1,41 @@ +From 1d87caa69c04008e09f5ff47b5e6acb6116febc7 Mon Sep 17 00:00:00 2001 +From: Rainer Koenig +Date: Thu, 4 Apr 2013 08:40:38 +0200 +Subject: ALSA: hda - Enabling Realtek ALC 671 codec + +From: Rainer Koenig + +commit 1d87caa69c04008e09f5ff47b5e6acb6116febc7 upstream. + +* Added the device ID to the modalias list and assinged ALC662 patches +for it +* Added 4 port support for the device ID 0671 in alc662_parse_auto_config + +Signed-off-by: Rainer Koenig +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -6629,7 +6629,8 @@ static int alc662_parse_auto_config(stru + const hda_nid_t *ssids; + + if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 || +- codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670) ++ codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670 || ++ codec->vendor_id == 0x10ec0671) + ssids = alc663_ssids; + else + ssids = alc662_ssids; +@@ -7056,6 +7057,7 @@ static const struct hda_codec_preset snd + { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, + { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 }, + { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, ++ { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 }, + { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, + { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, + { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, diff --git a/queue-3.4/alsa-hda-fix-typo-in-proc-output.patch b/queue-3.4/alsa-hda-fix-typo-in-proc-output.patch new file mode 100644 index 00000000000..bc359029ad8 --- /dev/null +++ b/queue-3.4/alsa-hda-fix-typo-in-proc-output.patch @@ -0,0 +1,31 @@ +From aeb3a97222832e5457c4b72d72235098ce4bfe8d Mon Sep 17 00:00:00 2001 +From: David Henningsson +Date: Thu, 4 Apr 2013 11:47:13 +0200 +Subject: ALSA: hda - fix typo in proc output + +From: David Henningsson + +commit aeb3a97222832e5457c4b72d72235098ce4bfe8d upstream. + +Rename "Digitial In" to "Digital In". This function is only used for +proc output, so should not cause any problems to change. + +Signed-off-by: David Henningsson +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_codec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/pci/hda/hda_codec.c ++++ b/sound/pci/hda/hda_codec.c +@@ -165,7 +165,7 @@ const char *snd_hda_get_jack_type(u32 cf + "Line Out", "Speaker", "HP Out", "CD", + "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand", + "Line In", "Aux", "Mic", "Telephony", +- "SPDIF In", "Digitial In", "Reserved", "Other" ++ "SPDIF In", "Digital In", "Reserved", "Other" + }; + + return jack_types[(cfg & AC_DEFCFG_DEVICE) diff --git a/queue-3.4/regmap-cache-fix-regcache-rbtree-sync.patch b/queue-3.4/regmap-cache-fix-regcache-rbtree-sync.patch new file mode 100644 index 00000000000..6517016d091 --- /dev/null +++ b/queue-3.4/regmap-cache-fix-regcache-rbtree-sync.patch @@ -0,0 +1,39 @@ +From 8abac3ba51b5525354e9b2ec0eed1c9e95c905d9 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Wed, 13 Mar 2013 16:38:33 +0100 +Subject: regmap: cache Fix regcache-rbtree sync + +From: Lars-Peter Clausen + +commit 8abac3ba51b5525354e9b2ec0eed1c9e95c905d9 upstream. + +The last register block, which falls into the specified range, is not handled +correctly. The formula which calculates the number of register which should be +synced is inverse (and off by one). E.g. if all registers in that block should +be synced only one is synced, and if only one should be synced all (but one) are +synced. To calculate the number of registers that need to be synced we need to +subtract the number of the first register in the block from the max register +number and add one. This patch updates the code accordingly. + +The issue was introduced in commit ac8d91c ("regmap: Supply ranges to the sync +operations"). + +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/base/regmap/regcache-rbtree.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/base/regmap/regcache-rbtree.c ++++ b/drivers/base/regmap/regcache-rbtree.c +@@ -392,7 +392,7 @@ static int regcache_rbtree_sync(struct r + base = 0; + + if (max < rbnode->base_reg + rbnode->blklen) +- end = rbnode->base_reg + rbnode->blklen - max; ++ end = max - rbnode->base_reg + 1; + else + end = rbnode->blklen; + diff --git a/queue-3.4/reiserfs-fix-warning-and-inode-leak-when-deleting-inode-with-xattrs.patch b/queue-3.4/reiserfs-fix-warning-and-inode-leak-when-deleting-inode-with-xattrs.patch new file mode 100644 index 00000000000..ebaaaa7ff54 --- /dev/null +++ b/queue-3.4/reiserfs-fix-warning-and-inode-leak-when-deleting-inode-with-xattrs.patch @@ -0,0 +1,39 @@ +From 35e5cbc0af240778e61113286c019837e06aeec6 Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Fri, 29 Mar 2013 15:39:16 +0100 +Subject: reiserfs: Fix warning and inode leak when deleting inode with xattrs + +From: Jan Kara + +commit 35e5cbc0af240778e61113286c019837e06aeec6 upstream. + +After commit 21d8a15a (lookup_one_len: don't accept . and ..) reiserfs +started failing to delete xattrs from inode. This was due to a buggy +test for '.' and '..' in fill_with_dentries() which resulted in passing +'.' and '..' entries to lookup_one_len() in some cases. That returned +error and so we failed to iterate over all xattrs of and inode. + +Fix the test in fill_with_dentries() along the lines of the one in +lookup_one_len(). + +Reported-by: Pawel Zawora +Signed-off-by: Jan Kara +Signed-off-by: Greg Kroah-Hartman + +--- + fs/reiserfs/xattr.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/fs/reiserfs/xattr.c ++++ b/fs/reiserfs/xattr.c +@@ -187,8 +187,8 @@ fill_with_dentries(void *buf, const char + if (dbuf->count == ARRAY_SIZE(dbuf->dentries)) + return -ENOSPC; + +- if (name[0] == '.' && (name[1] == '\0' || +- (name[1] == '.' && name[2] == '\0'))) ++ if (name[0] == '.' && (namelen < 2 || ++ (namelen == 2 && name[1] == '.'))) + return 0; + + dentry = lookup_one_len(name, dbuf->xadir, namelen); diff --git a/queue-3.4/series b/queue-3.4/series index decb332879d..1b47d3e5d7f 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -1 +1,9 @@ asoc-dma-sh7760-fix-compile-error.patch +regmap-cache-fix-regcache-rbtree-sync.patch +spi-s3c64xx-modified-error-interrupt-handling-and-init.patch +spi-mpc512x-psc-optionally-keep-psc-ss-asserted-across-xfer-segmensts.patch +ubifs-make-space-fixup-work-in-the-remount-case.patch +reiserfs-fix-warning-and-inode-leak-when-deleting-inode-with-xattrs.patch +alsa-hda-bug-fix-on-return-value-when-getting-hdmi-eld-info.patch +alsa-hda-enabling-realtek-alc-671-codec.patch +alsa-hda-fix-typo-in-proc-output.patch diff --git a/queue-3.4/spi-mpc512x-psc-optionally-keep-psc-ss-asserted-across-xfer-segmensts.patch b/queue-3.4/spi-mpc512x-psc-optionally-keep-psc-ss-asserted-across-xfer-segmensts.patch new file mode 100644 index 00000000000..88aee5028ca --- /dev/null +++ b/queue-3.4/spi-mpc512x-psc-optionally-keep-psc-ss-asserted-across-xfer-segmensts.patch @@ -0,0 +1,43 @@ +From 1ad849aee5f53353ed88d9cd3d68a51b03a7d44f Mon Sep 17 00:00:00 2001 +From: Anatolij Gustschin +Date: Wed, 13 Mar 2013 14:57:43 +0100 +Subject: spi/mpc512x-psc: optionally keep PSC SS asserted across xfer segmensts + +From: Anatolij Gustschin + +commit 1ad849aee5f53353ed88d9cd3d68a51b03a7d44f upstream. + +Some SPI slave devices require asserted chip select signal across +multiple transfer segments of an SPI message. Currently the driver +always de-asserts the internal SS signal for every single transfer +segment of the message and ignores the 'cs_change' flag of the +transfer description. Disable the internal chip select (SS) only +if this is needed and indicated by the 'cs_change' flag. + +Without this change, each partial transfer of a surrounding +multi-part SPI transaction might erroneously change the SS +signal, which might prevent slaves from answering the request +that was sent in a previous transfer segment because the +transaction could be considered aborted (SS was de-asserted +before reading the response). + +Reported-by: Gerhard Sittig +Signed-off-by: Anatolij Gustschin +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/spi/spi-mpc512x-psc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/spi/spi-mpc512x-psc.c ++++ b/drivers/spi/spi-mpc512x-psc.c +@@ -164,7 +164,7 @@ static int mpc512x_psc_spi_transfer_rxtx + + for (i = count; i > 0; i--) { + data = tx_buf ? *tx_buf++ : 0; +- if (len == EOFBYTE) ++ if (len == EOFBYTE && t->cs_change) + setbits32(&fifo->txcmd, MPC512x_PSC_FIFO_EOF); + out_8(&fifo->txdata_8, data); + len--; diff --git a/queue-3.4/spi-s3c64xx-modified-error-interrupt-handling-and-init.patch b/queue-3.4/spi-s3c64xx-modified-error-interrupt-handling-and-init.patch new file mode 100644 index 00000000000..71a1901912a --- /dev/null +++ b/queue-3.4/spi-s3c64xx-modified-error-interrupt-handling-and-init.patch @@ -0,0 +1,88 @@ +From 375981f2e14868be16cafbffd34a4f16a6ee01c6 Mon Sep 17 00:00:00 2001 +From: Girish K S +Date: Wed, 13 Mar 2013 12:13:30 +0530 +Subject: spi/s3c64xx: modified error interrupt handling and init + +From: Girish K S + +commit 375981f2e14868be16cafbffd34a4f16a6ee01c6 upstream. + +The status of the interrupt is available in the status register, +so reading the clear pending register and writing back the same +value will not actually clear the pending interrupts. This patch +modifies the interrupt handler to read the status register and +clear the corresponding pending bit in the clear pending register. + +Modified the hwInit function to clear all the pending interrupts. + +Signed-off-by: Girish K S +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/spi/spi-s3c64xx.c | 41 +++++++++++++++++++++++++---------------- + 1 file changed, 25 insertions(+), 16 deletions(-) + +--- a/drivers/spi/spi-s3c64xx.c ++++ b/drivers/spi/spi-s3c64xx.c +@@ -889,25 +889,30 @@ static irqreturn_t s3c64xx_spi_irq(int i + { + struct s3c64xx_spi_driver_data *sdd = data; + struct spi_master *spi = sdd->master; +- unsigned int val; +- +- val = readl(sdd->regs + S3C64XX_SPI_PENDING_CLR); +- +- val &= S3C64XX_SPI_PND_RX_OVERRUN_CLR | +- S3C64XX_SPI_PND_RX_UNDERRUN_CLR | +- S3C64XX_SPI_PND_TX_OVERRUN_CLR | +- S3C64XX_SPI_PND_TX_UNDERRUN_CLR; ++ unsigned int val, clr = 0; + +- writel(val, sdd->regs + S3C64XX_SPI_PENDING_CLR); ++ val = readl(sdd->regs + S3C64XX_SPI_STATUS); + +- if (val & S3C64XX_SPI_PND_RX_OVERRUN_CLR) ++ if (val & S3C64XX_SPI_ST_RX_OVERRUN_ERR) { ++ clr = S3C64XX_SPI_PND_RX_OVERRUN_CLR; + dev_err(&spi->dev, "RX overrun\n"); +- if (val & S3C64XX_SPI_PND_RX_UNDERRUN_CLR) ++ } ++ if (val & S3C64XX_SPI_ST_RX_UNDERRUN_ERR) { ++ clr |= S3C64XX_SPI_PND_RX_UNDERRUN_CLR; + dev_err(&spi->dev, "RX underrun\n"); +- if (val & S3C64XX_SPI_PND_TX_OVERRUN_CLR) ++ } ++ if (val & S3C64XX_SPI_ST_TX_OVERRUN_ERR) { ++ clr |= S3C64XX_SPI_PND_TX_OVERRUN_CLR; + dev_err(&spi->dev, "TX overrun\n"); +- if (val & S3C64XX_SPI_PND_TX_UNDERRUN_CLR) ++ } ++ if (val & S3C64XX_SPI_ST_TX_UNDERRUN_ERR) { ++ clr |= S3C64XX_SPI_PND_TX_UNDERRUN_CLR; + dev_err(&spi->dev, "TX underrun\n"); ++ } ++ ++ /* Clear the pending irq by setting and then clearing it */ ++ writel(clr, sdd->regs + S3C64XX_SPI_PENDING_CLR); ++ writel(0, sdd->regs + S3C64XX_SPI_PENDING_CLR); + + return IRQ_HANDLED; + } +@@ -931,9 +936,13 @@ static void s3c64xx_spi_hwinit(struct s3 + writel(0, regs + S3C64XX_SPI_MODE_CFG); + writel(0, regs + S3C64XX_SPI_PACKET_CNT); + +- /* Clear any irq pending bits */ +- writel(readl(regs + S3C64XX_SPI_PENDING_CLR), +- regs + S3C64XX_SPI_PENDING_CLR); ++ /* Clear any irq pending bits, should set and clear the bits */ ++ val = S3C64XX_SPI_PND_RX_OVERRUN_CLR | ++ S3C64XX_SPI_PND_RX_UNDERRUN_CLR | ++ S3C64XX_SPI_PND_TX_OVERRUN_CLR | ++ S3C64XX_SPI_PND_TX_UNDERRUN_CLR; ++ writel(val, regs + S3C64XX_SPI_PENDING_CLR); ++ writel(0, regs + S3C64XX_SPI_PENDING_CLR); + + writel(0, regs + S3C64XX_SPI_SWAP_CFG); + diff --git a/queue-3.4/ubifs-make-space-fixup-work-in-the-remount-case.patch b/queue-3.4/ubifs-make-space-fixup-work-in-the-remount-case.patch new file mode 100644 index 00000000000..c733037437e --- /dev/null +++ b/queue-3.4/ubifs-make-space-fixup-work-in-the-remount-case.patch @@ -0,0 +1,66 @@ +From 67e753ca41782913d805ff4a8a2b0f60b26b7915 Mon Sep 17 00:00:00 2001 +From: Artem Bityutskiy +Date: Thu, 14 Mar 2013 10:49:23 +0200 +Subject: UBIFS: make space fixup work in the remount case + +From: Artem Bityutskiy + +commit 67e753ca41782913d805ff4a8a2b0f60b26b7915 upstream. + +The UBIFS space fixup is a useful feature which allows to fixup the "broken" +flash space at the time of the first mount. The "broken" space is usually the +result of using a "dumb" industrial flasher which is not able to skip empty +NAND pages and just writes all 0xFFs to the empty space, which has grave +side-effects for UBIFS when UBIFS trise to write useful data to those empty +pages. + +The fix-up feature works roughly like this: +1. mkfs.ubifs sets the fixup flag in UBIFS superblock when creating the image + (see -F option) +2. when the file-system is mounted for the first time, UBIFS notices the fixup + flag and re-writes the entire media atomically, which may take really a lot + of time. +3. UBIFS clears the fixup flag in the superblock. + +This works fine when the file system is mounted R/W for the very first time. +But it did not really work in the case when we first mount the file-system R/O, +and then re-mount R/W. The reason was that we started the fixup procedure too +late, which we cannot really do because we have to fixup the space before it +starts being used. + +Signed-off-by: Artem Bityutskiy +Reported-by: Mark Jackson +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ubifs/super.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- a/fs/ubifs/super.c ++++ b/fs/ubifs/super.c +@@ -1582,6 +1582,12 @@ static int ubifs_remount_rw(struct ubifs + c->remounting_rw = 1; + c->ro_mount = 0; + ++ if (c->space_fixup) { ++ err = ubifs_fixup_free_space(c); ++ if (err) ++ return err; ++ } ++ + err = check_free_space(c); + if (err) + goto out; +@@ -1698,12 +1704,6 @@ static int ubifs_remount_rw(struct ubifs + err = dbg_check_space_info(c); + } + +- if (c->space_fixup) { +- err = ubifs_fixup_free_space(c); +- if (err) +- goto out; +- } +- + mutex_unlock(&c->umount_mutex); + return err; + -- 2.47.3