summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2013-01-06 20:43:35 +0100
committerMichael Olbrich <m.olbrich@pengutronix.de>2013-04-06 15:02:56 +0200
commite30485e73cae77c4234ac7c3ee9c2ac9d007fe5b (patch)
tree1e5a61a33c0a25545887ec8d4eef860218aee5b5
parent2a29a7c94fec016dd2e9301a783d6cae1f7bbce1 (diff)
downloadplatform-pengutronix-raspberrypi-e30485e73cae77c4234ac7c3ee9c2ac9d007fe5b.tar.gz
platform-pengutronix-raspberrypi-e30485e73cae77c4234ac7c3ee9c2ac9d007fe5b.tar.xz
kernel: update to 3.6.11 and latest patches
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
-rw-r--r--kernelconfig-3.6.11 (renamed from kernelconfig-3.6.10)3
-rw-r--r--patches/linux-3.6.11/0001-Add-dwc_otg-driver.patch (renamed from patches/linux-3.6.10/0001-Add-dwc_otg-driver.patch)6
-rw-r--r--patches/linux-3.6.11/0002-Main-bcm2708-linux-port.patch (renamed from patches/linux-3.6.10/0002-Main-bcm2708-linux-port.patch)0
-rw-r--r--patches/linux-3.6.11/0003-bcm2708-watchdog-driver.patch (renamed from patches/linux-3.6.10/0003-bcm2708-watchdog-driver.patch)0
-rw-r--r--patches/linux-3.6.11/0004-bcm2708-framebuffer-driver.patch (renamed from patches/linux-3.6.10/0004-bcm2708-framebuffer-driver.patch)0
-rw-r--r--patches/linux-3.6.11/0005-bcm2708-vchiq-driver.patch (renamed from patches/linux-3.6.10/0005-bcm2708-vchiq-driver.patch)0
-rw-r--r--patches/linux-3.6.11/0006-Allow-mac-address-to-be-set-in-smsc95xx.patch (renamed from patches/linux-3.6.10/0006-Allow-mac-address-to-be-set-in-smsc95xx.patch)0
-rw-r--r--patches/linux-3.6.11/0007-Fix-headers-for-vchiq-vcos-to-be-GPLv2.patch (renamed from patches/linux-3.6.10/0007-Fix-headers-for-vchiq-vcos-to-be-GPLv2.patch)0
-rw-r--r--patches/linux-3.6.11/0008-Fix-some-issues-reported.-Lower-case-module-paramete.patch (renamed from patches/linux-3.6.10/0008-Fix-some-issues-reported.-Lower-case-module-paramete.patch)0
-rw-r--r--patches/linux-3.6.11/0009-Build-anything-reasonable-as-a-module.-Thanks-to-asb.patch (renamed from patches/linux-3.6.10/0009-Build-anything-reasonable-as-a-module.-Thanks-to-asb.patch)0
-rw-r--r--patches/linux-3.6.11/0010-Add-config-option-to-enable-L2-cache.patch (renamed from patches/linux-3.6.10/0010-Add-config-option-to-enable-L2-cache.patch)0
-rw-r--r--patches/linux-3.6.11/0011-Fix-bug-where-vchiq-fails-when-L2-enabled.patch (renamed from patches/linux-3.6.10/0011-Fix-bug-where-vchiq-fails-when-L2-enabled.patch)0
-rw-r--r--patches/linux-3.6.11/0012-Add-devtmpfs-for-archlinux-and-emergency-and-debug-c.patch (renamed from patches/linux-3.6.10/0012-Add-devtmpfs-for-archlinux-and-emergency-and-debug-c.patch)0
-rw-r--r--patches/linux-3.6.11/0013-Fix-32bpp-framebuffer-by-adding-alpha-bits.patch (renamed from patches/linux-3.6.10/0013-Fix-32bpp-framebuffer-by-adding-alpha-bits.patch)0
-rw-r--r--patches/linux-3.6.11/0014-Enable-L2-cache-is-now-the-default.-Invert-sense-of-.patch (renamed from patches/linux-3.6.10/0014-Enable-L2-cache-is-now-the-default.-Invert-sense-of-.patch)0
-rw-r--r--patches/linux-3.6.11/0015-Allow-24bpp-for-framebuffer.patch (renamed from patches/linux-3.6.10/0015-Allow-24bpp-for-framebuffer.patch)0
-rw-r--r--patches/linux-3.6.11/0016-Disable-debug-code-in-dwc_otg-driver-unless-CONFIG_U.patch (renamed from patches/linux-3.6.10/0016-Disable-debug-code-in-dwc_otg-driver-unless-CONFIG_U.patch)0
-rw-r--r--patches/linux-3.6.11/0017-Enable-high-resolution-timers.patch (renamed from patches/linux-3.6.10/0017-Enable-high-resolution-timers.patch)0
-rw-r--r--patches/linux-3.6.11/0018-Fix-for-mmc-timeouts-when-erasing-multiple-blocks.patch (renamed from patches/linux-3.6.10/0018-Fix-for-mmc-timeouts-when-erasing-multiple-blocks.patch)0
-rw-r--r--patches/linux-3.6.11/0019-Fix-problem-with-dma-that-could-corrupt-sdcard-espec.patch (renamed from patches/linux-3.6.10/0019-Fix-problem-with-dma-that-could-corrupt-sdcard-espec.patch)0
-rw-r--r--patches/linux-3.6.11/0020-Update-to-match-latest-vc-side-vchiq.-Allows-vchiq-c.patch (renamed from patches/linux-3.6.10/0020-Update-to-match-latest-vc-side-vchiq.-Allows-vchiq-c.patch)0
-rw-r--r--patches/linux-3.6.11/0021-First-pass-at-alsa-sound-driver.-Some-functionality-.patch (renamed from patches/linux-3.6.10/0021-First-pass-at-alsa-sound-driver.-Some-functionality-.patch)0
-rw-r--r--patches/linux-3.6.11/0022-Cast-to-avoid-warning.patch (renamed from patches/linux-3.6.10/0022-Cast-to-avoid-warning.patch)0
-rw-r--r--patches/linux-3.6.11/0023-Add-new-ioctl-to-match-latest-vc-side-code.patch (renamed from patches/linux-3.6.10/0023-Add-new-ioctl-to-match-latest-vc-side-code.patch)0
-rw-r--r--patches/linux-3.6.11/0024-Enable-sound-kernel-modules.-Tidy-formatting.-Fix-ct.patch (renamed from patches/linux-3.6.10/0024-Enable-sound-kernel-modules.-Tidy-formatting.-Fix-ct.patch)0
-rw-r--r--patches/linux-3.6.11/0025-Add-missing-header-file-update-for-vc_mem-iocts.patch (renamed from patches/linux-3.6.10/0025-Add-missing-header-file-update-for-vc_mem-iocts.patch)0
-rw-r--r--patches/linux-3.6.11/0026-Remove-most-of-the-alsa-debug-messages.patch (renamed from patches/linux-3.6.10/0026-Remove-most-of-the-alsa-debug-messages.patch)0
-rw-r--r--patches/linux-3.6.11/0027-add-temporary-workaround-for-fbset-crashes.patch (renamed from patches/linux-3.6.10/0027-add-temporary-workaround-for-fbset-crashes.patch)0
-rw-r--r--patches/linux-3.6.11/0028-Fix-harmless-base-size-typo.patch (renamed from patches/linux-3.6.10/0028-Fix-harmless-base-size-typo.patch)0
-rw-r--r--patches/linux-3.6.11/0029-Replace-if-1-sections-by-local-configuration-defines.patch (renamed from patches/linux-3.6.10/0029-Replace-if-1-sections-by-local-configuration-defines.patch)0
-rw-r--r--patches/linux-3.6.11/0030-Don-t-send-data-block-when-emitting-silence.patch (renamed from patches/linux-3.6.10/0030-Don-t-send-data-block-when-emitting-silence.patch)0
-rw-r--r--patches/linux-3.6.11/0031-Fix-hopefully-for-DWC_MEMCPY-kernel-panics.-Thanks-t.patch (renamed from patches/linux-3.6.10/0031-Fix-hopefully-for-DWC_MEMCPY-kernel-panics.-Thanks-t.patch)0
-rw-r--r--patches/linux-3.6.11/0032-Build-modules-needed-for-USB-booting-into-kernel.patch (renamed from patches/linux-3.6.10/0032-Build-modules-needed-for-USB-booting-into-kernel.patch)0
-rw-r--r--patches/linux-3.6.11/0033-Whitespace-tidy.-Thanks-Roger.patch (renamed from patches/linux-3.6.10/0033-Whitespace-tidy.-Thanks-Roger.patch)0
-rw-r--r--patches/linux-3.6.11/0034-Update-vchiq-to-match-GPU-version.-Should-still-be-c.patch (renamed from patches/linux-3.6.10/0034-Update-vchiq-to-match-GPU-version.-Should-still-be-c.patch)0
-rw-r--r--patches/linux-3.6.11/0035-added-support-for-TT-in-the-USB-driver.-Thanks-Naren.patch (renamed from patches/linux-3.6.10/0035-added-support-for-TT-in-the-USB-driver.-Thanks-Naren.patch)0
-rw-r--r--patches/linux-3.6.11/0036-Swap-Red-and-Blue-over-in-32bpp-framebuffer-mode.patch (renamed from patches/linux-3.6.10/0036-Swap-Red-and-Blue-over-in-32bpp-framebuffer-mode.patch)0
-rw-r--r--patches/linux-3.6.11/0037-Update-emergency-config-to-match-latest-debug-one.patch (renamed from patches/linux-3.6.10/0037-Update-emergency-config-to-match-latest-debug-one.patch)0
-rw-r--r--patches/linux-3.6.11/0038-Use-dwc_alloc_atomic.-Thanks-bootc.patch (renamed from patches/linux-3.6.10/0038-Use-dwc_alloc_atomic.-Thanks-bootc.patch)0
-rw-r--r--patches/linux-3.6.11/0039-possible-fix-for-sdcard-missing-status.-Thank-naren.patch (renamed from patches/linux-3.6.10/0039-possible-fix-for-sdcard-missing-status.-Thank-naren.patch)0
-rw-r--r--patches/linux-3.6.11/0040-Fix-BUG-in-bcm2708_fb_set_par-doesn-t-work-if-the-co.patch (renamed from patches/linux-3.6.10/0040-Fix-BUG-in-bcm2708_fb_set_par-doesn-t-work-if-the-co.patch)0
-rw-r--r--patches/linux-3.6.11/0041-Fix-for-DWC-OTG-HCD-URB-Dequeue-has-NULL-URB-panic.-.patch (renamed from patches/linux-3.6.10/0041-Fix-for-DWC-OTG-HCD-URB-Dequeue-has-NULL-URB-panic.-.patch)0
-rw-r--r--patches/linux-3.6.11/0042-Fix-for-bug-in-mbox_read.-Thanks-lp0.patch (renamed from patches/linux-3.6.10/0042-Fix-for-bug-in-mbox_read.-Thanks-lp0.patch)0
-rw-r--r--patches/linux-3.6.11/0043-Add-__VCCOREVER__-to-makefile.patch (renamed from patches/linux-3.6.10/0043-Add-__VCCOREVER__-to-makefile.patch)0
-rw-r--r--patches/linux-3.6.11/0044-Change-PHYS_OFFSET-to-PLAT_PHYS_OFFSET.patch (renamed from patches/linux-3.6.10/0044-Change-PHYS_OFFSET-to-PLAT_PHYS_OFFSET.patch)0
-rw-r--r--patches/linux-3.6.11/0045-sdcard-patch-improvements-from-naren.patch (renamed from patches/linux-3.6.10/0045-sdcard-patch-improvements-from-naren.patch)0
-rw-r--r--patches/linux-3.6.11/0046-Invert-sense-of-sdcard-access-trigger-OK-LED-so-it-i.patch (renamed from patches/linux-3.6.10/0046-Invert-sense-of-sdcard-access-trigger-OK-LED-so-it-i.patch)0
-rw-r--r--patches/linux-3.6.11/0047-Added-power-off-message-to-allow-kexec-to-work.-Than.patch (renamed from patches/linux-3.6.10/0047-Added-power-off-message-to-allow-kexec-to-work.-Than.patch)0
-rw-r--r--patches/linux-3.6.11/0048-remove-unwanted-file.patch (renamed from patches/linux-3.6.10/0048-remove-unwanted-file.patch)0
-rw-r--r--patches/linux-3.6.11/0049-Enable-PREEMPT-and-SCHED_AUTOGROUP.patch (renamed from patches/linux-3.6.10/0049-Enable-PREEMPT-and-SCHED_AUTOGROUP.patch)0
-rw-r--r--patches/linux-3.6.11/0050-Added-support-for-USB-webcams.patch (renamed from patches/linux-3.6.10/0050-Added-support-for-USB-webcams.patch)0
-rw-r--r--patches/linux-3.6.11/0051-Enable-ipv6-due-to-popular-demand.patch (renamed from patches/linux-3.6.10/0051-Enable-ipv6-due-to-popular-demand.patch)0
-rw-r--r--patches/linux-3.6.11/0052-Fix-regression-in-debug-kernel-config-options.patch (renamed from patches/linux-3.6.10/0052-Fix-regression-in-debug-kernel-config-options.patch)0
-rw-r--r--patches/linux-3.6.11/0053-bcm2835-ctl-fix-alsamixer-control.patch (renamed from patches/linux-3.6.10/0053-bcm2835-ctl-fix-alsamixer-control.patch)0
-rw-r--r--patches/linux-3.6.11/0054-bcm2835-ctl-limit-maximal-volume-to-4db.patch (renamed from patches/linux-3.6.10/0054-bcm2835-ctl-limit-maximal-volume-to-4db.patch)0
-rw-r--r--patches/linux-3.6.11/0055-Add-iptables-and-devtmpfs_mount-to-non-cutdown-confi.patch (renamed from patches/linux-3.6.10/0055-Add-iptables-and-devtmpfs_mount-to-non-cutdown-confi.patch)0
-rw-r--r--patches/linux-3.6.11/0056-sdhci-bcm2708-speed-up-DMA-sync.patch (renamed from patches/linux-3.6.10/0056-sdhci-bcm2708-speed-up-DMA-sync.patch)0
-rw-r--r--patches/linux-3.6.11/0057-sdhci-bcm2708-remove-custom-clock-handling.patch (renamed from patches/linux-3.6.10/0057-sdhci-bcm2708-remove-custom-clock-handling.patch)0
-rw-r--r--patches/linux-3.6.11/0058-sdhci-bcm2708-add-additional-quirks.patch (renamed from patches/linux-3.6.10/0058-sdhci-bcm2708-add-additional-quirks.patch)0
-rw-r--r--patches/linux-3.6.11/0059-sdhci-bcm2708-add-allow_highspeed-parameter.patch (renamed from patches/linux-3.6.10/0059-sdhci-bcm2708-add-allow_highspeed-parameter.patch)0
-rw-r--r--patches/linux-3.6.11/0060-sdhci-bcm2708-assume-50-MHz-eMMC-clock.patch (renamed from patches/linux-3.6.10/0060-sdhci-bcm2708-assume-50-MHz-eMMC-clock.patch)0
-rw-r--r--patches/linux-3.6.11/0061-Allow-emmc-clock-to-be-specified-as-command-line-par.patch (renamed from patches/linux-3.6.10/0061-Allow-emmc-clock-to-be-specified-as-command-line-par.patch)0
-rw-r--r--patches/linux-3.6.11/0062-sdhci-bcm2708-raise-DMA-sync-timeout.patch (renamed from patches/linux-3.6.10/0062-sdhci-bcm2708-raise-DMA-sync-timeout.patch)0
-rw-r--r--patches/linux-3.6.11/0063-Fix-bool-int-error.patch (renamed from patches/linux-3.6.10/0063-Fix-bool-int-error.patch)0
-rw-r--r--patches/linux-3.6.11/0064-Fix-bool-int-error-part-2.patch (renamed from patches/linux-3.6.10/0064-Fix-bool-int-error-part-2.patch)0
-rw-r--r--patches/linux-3.6.11/0065-More-config-options-for-iptables-device-mapper-PPP_M.patch (renamed from patches/linux-3.6.10/0065-More-config-options-for-iptables-device-mapper-PPP_M.patch)0
-rw-r--r--patches/linux-3.6.11/0066-Explicitly-set-usb-host-channels-to-8-as-in-the-spec.patch (renamed from patches/linux-3.6.10/0066-Explicitly-set-usb-host-channels-to-8-as-in-the-spec.patch)0
-rw-r--r--patches/linux-3.6.11/0067-Add-hfs-hfsplus-modules.patch (renamed from patches/linux-3.6.10/0067-Add-hfs-hfsplus-modules.patch)0
-rw-r--r--patches/linux-3.6.11/0068-Remove-silence-method-and-use-atomic-flags-for-kmall.patch (renamed from patches/linux-3.6.10/0068-Remove-silence-method-and-use-atomic-flags-for-kmall.patch)0
-rw-r--r--patches/linux-3.6.11/0069-Fix-unintended-line-swap-that-cause-cause-memory-lea.patch (renamed from patches/linux-3.6.10/0069-Fix-unintended-line-swap-that-cause-cause-memory-lea.patch)0
-rw-r--r--patches/linux-3.6.11/0070-Use-ndelay-rather-than-udelay.-Thanks-lb.patch (renamed from patches/linux-3.6.10/0070-Use-ndelay-rather-than-udelay.-Thanks-lb.patch)0
-rw-r--r--patches/linux-3.6.11/0071-Add-NFSD.-Add-some-dvb-options.-Add-CONFIG_LOCALVERS.patch (renamed from patches/linux-3.6.10/0071-Add-NFSD.-Add-some-dvb-options.-Add-CONFIG_LOCALVERS.patch)0
-rw-r--r--patches/linux-3.6.11/0072-Fixed-issue-with-some-keyboards-giving-too-much-data.patch (renamed from patches/linux-3.6.10/0072-Fixed-issue-with-some-keyboards-giving-too-much-data.patch)0
-rw-r--r--patches/linux-3.6.11/0073-Add-802.1q-vlan-module.patch (renamed from patches/linux-3.6.10/0073-Add-802.1q-vlan-module.patch)0
-rw-r--r--patches/linux-3.6.11/0074-Add-interrupt-support-to-gpio-driver.-Thanks-Mrkva.patch (renamed from patches/linux-3.6.10/0074-Add-interrupt-support-to-gpio-driver.-Thanks-Mrkva.patch)0
-rw-r--r--patches/linux-3.6.11/0075-Add-a-pm_power_off-function-that-resets-us-and-indic.patch (renamed from patches/linux-3.6.10/0075-Add-a-pm_power_off-function-that-resets-us-and-indic.patch)0
-rw-r--r--patches/linux-3.6.11/0076-Store-palette-info-where-GPU-can-see-it-so-8bpp-mode.patch (renamed from patches/linux-3.6.10/0076-Store-palette-info-where-GPU-can-see-it-so-8bpp-mode.patch)0
-rw-r--r--patches/linux-3.6.11/0077-Avoid-blanking-console-when-not-in-palettised-mode.patch (renamed from patches/linux-3.6.10/0077-Avoid-blanking-console-when-not-in-palettised-mode.patch)0
-rw-r--r--patches/linux-3.6.11/0078-Add-mechanism-to-reduce-the-number-of-SOF-interrupts.patch (renamed from patches/linux-3.6.10/0078-Add-mechanism-to-reduce-the-number-of-SOF-interrupts.patch)0
-rw-r--r--patches/linux-3.6.11/0079-Updating-dwc_otg-driver-to-fix-issue-releasing-pcm-s.patch (renamed from patches/linux-3.6.10/0079-Updating-dwc_otg-driver-to-fix-issue-releasing-pcm-s.patch)0
-rw-r--r--patches/linux-3.6.11/0080-Backport-of-Chris-Boot-s-i2c-and-spi-drivers.patch (renamed from patches/linux-3.6.10/0080-Backport-of-Chris-Boot-s-i2c-and-spi-drivers.patch)0
-rw-r--r--patches/linux-3.6.11/0081-forgotten-files.patch (renamed from patches/linux-3.6.10/0081-forgotten-files.patch)0
-rw-r--r--patches/linux-3.6.11/0082-Enable-I2C-and-SPI-modules-in-full-config.patch (renamed from patches/linux-3.6.10/0082-Enable-I2C-and-SPI-modules-in-full-config.patch)0
-rw-r--r--patches/linux-3.6.11/0083-Possible-fix-for-failure-to-boot-with-compressed-ker.patch (renamed from patches/linux-3.6.10/0083-Possible-fix-for-failure-to-boot-with-compressed-ker.patch)0
-rw-r--r--patches/linux-3.6.11/0084-Another-try-at-fixing-compressed-kernel-booting.patch (renamed from patches/linux-3.6.10/0084-Another-try-at-fixing-compressed-kernel-booting.patch)0
-rw-r--r--patches/linux-3.6.11/0085-Add-missing-UART0_CLOCK-from-last-commit.patch (renamed from patches/linux-3.6.10/0085-Add-missing-UART0_CLOCK-from-last-commit.patch)0
-rw-r--r--patches/linux-3.6.11/0086-Change-to-add-SCSI-tape-support-as-loadable-modules-.patch (renamed from patches/linux-3.6.10/0086-Change-to-add-SCSI-tape-support-as-loadable-modules-.patch)0
-rw-r--r--patches/linux-3.6.11/0087-Add-temporary-fix-for-hang-when-quitting-X.patch (renamed from patches/linux-3.6.10/0087-Add-temporary-fix-for-hang-when-quitting-X.patch)0
-rw-r--r--patches/linux-3.6.11/0088-Better-fix-for-quitting-X-hang.-Interrupted-mailbox-.patch (renamed from patches/linux-3.6.10/0088-Better-fix-for-quitting-X-hang.-Interrupted-mailbox-.patch)0
-rw-r--r--patches/linux-3.6.11/0089-Add-sync_after_dma-module-parameter.patch (renamed from patches/linux-3.6.10/0089-Add-sync_after_dma-module-parameter.patch)0
-rw-r--r--patches/linux-3.6.11/0090-Add-SPI_SPI_DEV-module.patch (renamed from patches/linux-3.6.10/0090-Add-SPI_SPI_DEV-module.patch)0
-rw-r--r--patches/linux-3.6.11/0091-Fix-var.width-var.height.-They-actually-mean-display.patch (renamed from patches/linux-3.6.10/0091-Fix-var.width-var.height.-They-actually-mean-display.patch)0
-rw-r--r--patches/linux-3.6.11/0092-The-TIMER_PERIOD-should-be-calculated-using-the-time.patch (renamed from patches/linux-3.6.10/0092-The-TIMER_PERIOD-should-be-calculated-using-the-time.patch)0
-rw-r--r--patches/linux-3.6.11/0093-update-bcmrpi_defconfig-with-various-user-requests.patch (renamed from patches/linux-3.6.10/0093-update-bcmrpi_defconfig-with-various-user-requests.patch)0
-rw-r--r--patches/linux-3.6.11/0094-Possible-fix-for-USB-packets-going-missing.-Thank-gs.patch (renamed from patches/linux-3.6.10/0094-Possible-fix-for-USB-packets-going-missing.-Thank-gs.patch)0
-rw-r--r--patches/linux-3.6.11/0095-Revert-Possible-fix-for-USB-packets-going-missing.-T.patch (renamed from patches/linux-3.6.10/0095-Revert-Possible-fix-for-USB-packets-going-missing.-T.patch)0
-rw-r--r--patches/linux-3.6.11/0096-dwc_common_port-remove-unused-cruft-with-onerous-dep.patch (renamed from patches/linux-3.6.10/0096-dwc_common_port-remove-unused-cruft-with-onerous-dep.patch)0
-rw-r--r--patches/linux-3.6.11/0097-arm-remove-divdi3-it-s-not-necessary-at-all.patch (renamed from patches/linux-3.6.10/0097-arm-remove-divdi3-it-s-not-necessary-at-all.patch)0
-rw-r--r--patches/linux-3.6.11/0098-Remove-some-patch-backup-files.patch (renamed from patches/linux-3.6.10/0098-Remove-some-patch-backup-files.patch)0
-rw-r--r--patches/linux-3.6.11/0099-mach-bcm2708-fix-mach-debug-macro.S-so-that-early-pr.patch (renamed from patches/linux-3.6.10/0099-mach-bcm2708-fix-mach-debug-macro.S-so-that-early-pr.patch)0
-rw-r--r--patches/linux-3.6.11/0100-sound-arm-bcm2835.c-add-linux-module.h-include.patch (renamed from patches/linux-3.6.10/0100-sound-arm-bcm2835.c-add-linux-module.h-include.patch)0
-rw-r--r--patches/linux-3.6.11/0101-vcos-add-linux-kernel.h-include.patch (renamed from patches/linux-3.6.10/0101-vcos-add-linux-kernel.h-include.patch)0
-rw-r--r--patches/linux-3.6.11/0102-bcm2708-update-for-3.2-kernel.patch (renamed from patches/linux-3.6.10/0102-bcm2708-update-for-3.2-kernel.patch)0
-rw-r--r--patches/linux-3.6.11/0103-bcm2708-use-a-constant-SC_MULT-SC_SHIFT.patch (renamed from patches/linux-3.6.10/0103-bcm2708-use-a-constant-SC_MULT-SC_SHIFT.patch)0
-rw-r--r--patches/linux-3.6.11/0104-Sync-with-bootc-s-file.patch (renamed from patches/linux-3.6.10/0104-Sync-with-bootc-s-file.patch)0
-rw-r--r--patches/linux-3.6.11/0105-sdhci-bcm2708-use-extension-FIFO-to-buffer-DMA-trans.patch (renamed from patches/linux-3.6.10/0105-sdhci-bcm2708-use-extension-FIFO-to-buffer-DMA-trans.patch)0
-rw-r--r--patches/linux-3.6.11/0106-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch (renamed from patches/linux-3.6.10/0106-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch)0
-rw-r--r--patches/linux-3.6.11/0107-Add-module-parameter-for-missing_status-quirk.-sdhci.patch (renamed from patches/linux-3.6.10/0107-Add-module-parameter-for-missing_status-quirk.-sdhci.patch)0
-rw-r--r--patches/linux-3.6.11/0108-Some-fixed-for-ALSA.-Mute-and-volume-changing-should.patch (renamed from patches/linux-3.6.10/0108-Some-fixed-for-ALSA.-Mute-and-volume-changing-should.patch)0
-rw-r--r--patches/linux-3.6.11/0109-Fix-spinlock-recursion-in-sdhci-bcm2708.c.patch (renamed from patches/linux-3.6.10/0109-Fix-spinlock-recursion-in-sdhci-bcm2708.c.patch)0
-rw-r--r--patches/linux-3.6.11/0110-Revert-Add-mechanism-to-reduce-the-number-of-SOF-int.patch (renamed from patches/linux-3.6.10/0110-Revert-Add-mechanism-to-reduce-the-number-of-SOF-int.patch)0
-rw-r--r--patches/linux-3.6.11/0111-Enable-CONFIG_CRYPTO_XTS.patch (renamed from patches/linux-3.6.10/0111-Enable-CONFIG_CRYPTO_XTS.patch)0
-rw-r--r--patches/linux-3.6.11/0112-Update-Synopsys-USB-OTG-driver-to-v2.94a-and-disable.patch (renamed from patches/linux-3.6.10/0112-Update-Synopsys-USB-OTG-driver-to-v2.94a-and-disable.patch)2
-rw-r--r--patches/linux-3.6.11/0113-Merged-in-microframe-scheduler-currently-disabled.-E.patch (renamed from patches/linux-3.6.10/0113-Merged-in-microframe-scheduler-currently-disabled.-E.patch)0
-rw-r--r--patches/linux-3.6.11/0114-Make-microframe-schedule-patch-a-little-closer-to-de.patch (renamed from patches/linux-3.6.10/0114-Make-microframe-schedule-patch-a-little-closer-to-de.patch)0
-rw-r--r--patches/linux-3.6.11/0115-Remove-remove-documentation-from-the-source-tree.patch (renamed from patches/linux-3.6.10/0115-Remove-remove-documentation-from-the-source-tree.patch)0
-rw-r--r--patches/linux-3.6.11/0116-Fix-for-broken-GPIO-with-3.2-kernel.patch (renamed from patches/linux-3.6.10/0116-Fix-for-broken-GPIO-with-3.2-kernel.patch)0
-rw-r--r--patches/linux-3.6.11/0117-Revert-Disable-IRQs-in-dwc_otg_hcd_qh_free-because-D.patch (renamed from patches/linux-3.6.10/0117-Revert-Disable-IRQs-in-dwc_otg_hcd_qh_free-because-D.patch)0
-rw-r--r--patches/linux-3.6.11/0118-Regenerate-defconfigs-for-udpated-kernel-verision.patch (renamed from patches/linux-3.6.10/0118-Regenerate-defconfigs-for-udpated-kernel-verision.patch)0
-rw-r--r--patches/linux-3.6.11/0119-Another-fix-for-10-second-hang-on-closing-sound-driv.patch (renamed from patches/linux-3.6.10/0119-Another-fix-for-10-second-hang-on-closing-sound-driv.patch)0
-rw-r--r--patches/linux-3.6.11/0120-amba-pl011-Don-t-send-a-character-during-startup.patch (renamed from patches/linux-3.6.10/0120-amba-pl011-Don-t-send-a-character-during-startup.patch)0
-rw-r--r--patches/linux-3.6.11/0121-Revert-Regenerate-defconfigs-for-udpated-kernel-veri.patch (renamed from patches/linux-3.6.10/0121-Revert-Regenerate-defconfigs-for-udpated-kernel-veri.patch)0
-rw-r--r--patches/linux-3.6.11/0122-Regenerate-defconfigs-for-updated-kernel-verision-tr.patch (renamed from patches/linux-3.6.10/0122-Regenerate-defconfigs-for-updated-kernel-verision-tr.patch)0
-rw-r--r--patches/linux-3.6.11/0123-Read-memory-size-for-vc_mem-through-mailbox-property.patch (renamed from patches/linux-3.6.10/0123-Read-memory-size-for-vc_mem-through-mailbox-property.patch)0
-rw-r--r--patches/linux-3.6.11/0124-Revert-amba-pl011-Don-t-send-a-character-during-star.patch (renamed from patches/linux-3.6.10/0124-Revert-amba-pl011-Don-t-send-a-character-during-star.patch)0
-rw-r--r--patches/linux-3.6.11/0125-Update-to-dwc_otg-3.00.-Seems-to-be-a-very-minor-upd.patch (renamed from patches/linux-3.6.10/0125-Update-to-dwc_otg-3.00.-Seems-to-be-a-very-minor-upd.patch)0
-rw-r--r--patches/linux-3.6.11/0126-enabling-the-realtime-clock-1-wire-chip-DS1307-and-1.patch (renamed from patches/linux-3.6.10/0126-enabling-the-realtime-clock-1-wire-chip-DS1307-and-1.patch)0
-rw-r--r--patches/linux-3.6.11/0127-Switch-of-tracing-options-in-kernel.-Costs-20-in-ipe.patch (renamed from patches/linux-3.6.10/0127-Switch-of-tracing-options-in-kernel.-Costs-20-in-ipe.patch)0
-rw-r--r--patches/linux-3.6.11/0128-Turn-on-microframe_schedule-by-default.-Can-still-be.patch (renamed from patches/linux-3.6.10/0128-Turn-on-microframe_schedule-by-default.-Can-still-be.patch)0
-rw-r--r--patches/linux-3.6.11/0129-Add-low-latency-mode-to-sdcard-driver.-Enable-with-s.patch (renamed from patches/linux-3.6.10/0129-Add-low-latency-mode-to-sdcard-driver.-Enable-with-s.patch)0
-rw-r--r--patches/linux-3.6.11/0130-Fix-build-for-non-preempt-case.-Fix-warning.patch (renamed from patches/linux-3.6.10/0130-Fix-build-for-non-preempt-case.-Fix-warning.patch)0
-rw-r--r--patches/linux-3.6.11/0131-Add-config-options-to-allow-iotop-to-run.patch (renamed from patches/linux-3.6.10/0131-Add-config-options-to-allow-iotop-to-run.patch)0
-rw-r--r--patches/linux-3.6.11/0132-Fix-for-vmalloc-failure-with-modprobe-and-cutdown-ke.patch (renamed from patches/linux-3.6.10/0132-Fix-for-vmalloc-failure-with-modprobe-and-cutdown-ke.patch)0
-rw-r--r--patches/linux-3.6.11/0133-Enable-low-latency-mode-by-default-in-sdcard-driver..patch (renamed from patches/linux-3.6.10/0133-Enable-low-latency-mode-by-default-in-sdcard-driver..patch)0
-rw-r--r--patches/linux-3.6.11/0134-Add-FIQ-patch-to-dwc_otg-driver.-Enable-with-dwc_otg.patch (renamed from patches/linux-3.6.10/0134-Add-FIQ-patch-to-dwc_otg-driver.-Enable-with-dwc_otg.patch)0
-rw-r--r--patches/linux-3.6.11/0135-Fix-typo.patch (renamed from patches/linux-3.6.10/0135-Fix-typo.patch)0
-rw-r--r--patches/linux-3.6.11/0136-Add-non-mainline-source-for-rtl8188cu-wireless-drive.patch (renamed from patches/linux-3.6.10/0136-Add-non-mainline-source-for-rtl8188cu-wireless-drive.patch)0
-rw-r--r--patches/linux-3.6.11/0137-Add-verious-user-config-requests.patch (renamed from patches/linux-3.6.10/0137-Add-verious-user-config-requests.patch)0
-rw-r--r--patches/linux-3.6.11/0138-Don-t-believe-KDIR-is-required-when-building-as-part.patch (renamed from patches/linux-3.6.10/0138-Don-t-believe-KDIR-is-required-when-building-as-part.patch)0
-rw-r--r--patches/linux-3.6.11/0139-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch (renamed from patches/linux-3.6.10/0139-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch)0
-rw-r--r--patches/linux-3.6.11/0140-Add-cpufreq-driver.patch (renamed from patches/linux-3.6.10/0140-Add-cpufreq-driver.patch)0
-rw-r--r--patches/linux-3.6.11/0141-Tidy-up-debug-messages.patch (renamed from patches/linux-3.6.10/0141-Tidy-up-debug-messages.patch)0
-rw-r--r--patches/linux-3.6.11/0142-Enable-fiq-fix-by-default.-Add-NAK-holdoff-scheme.-E.patch (renamed from patches/linux-3.6.10/0142-Enable-fiq-fix-by-default.-Add-NAK-holdoff-scheme.-E.patch)0
-rw-r--r--patches/linux-3.6.11/0143-Added-hwmon-thermal-driver-for-reporting-core-temper.patch (renamed from patches/linux-3.6.10/0143-Added-hwmon-thermal-driver-for-reporting-core-temper.patch)0
-rw-r--r--patches/linux-3.6.11/0144-Add-config-options-for-thermal-sensor-L2TP-RT2800USB.patch (renamed from patches/linux-3.6.10/0144-Add-config-options-for-thermal-sensor-L2TP-RT2800USB.patch)0
-rw-r--r--patches/linux-3.6.11/0145-Remove-some-unnecessary-dmesg-output.patch (renamed from patches/linux-3.6.10/0145-Remove-some-unnecessary-dmesg-output.patch)0
-rw-r--r--patches/linux-3.6.11/0146-Switch-to-powersave-governor.-We-ll-enable-ondemand-.patch (renamed from patches/linux-3.6.10/0146-Switch-to-powersave-governor.-We-ll-enable-ondemand-.patch)0
-rw-r--r--patches/linux-3.6.11/0147-Enable-multiple-ALSA-channels.patch (renamed from patches/linux-3.6.10/0147-Enable-multiple-ALSA-channels.patch)0
-rw-r--r--patches/linux-3.6.11/0148-Remove-vcos-abstraction-layer-from-ALSA-driver.-Than.patch (renamed from patches/linux-3.6.10/0148-Remove-vcos-abstraction-layer-from-ALSA-driver.-Than.patch)0
-rw-r--r--patches/linux-3.6.11/0149-Fix-Kernel-OOPS-in-SDHCI-on-boot-with-the-llm-patch..patch (renamed from patches/linux-3.6.10/0149-Fix-Kernel-OOPS-in-SDHCI-on-boot-with-the-llm-patch..patch)0
-rw-r--r--patches/linux-3.6.11/0150-Use-system-timer-for-udelay-so-unaffected-by-cpufreq.patch (renamed from patches/linux-3.6.10/0150-Use-system-timer-for-udelay-so-unaffected-by-cpufreq.patch)0
-rw-r--r--patches/linux-3.6.11/0151-Move-__delay-function-into-assembly-to-get-accurate-.patch (renamed from patches/linux-3.6.10/0151-Move-__delay-function-into-assembly-to-get-accurate-.patch)0
-rw-r--r--patches/linux-3.6.11/0152-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch (renamed from patches/linux-3.6.10/0152-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch)0
-rw-r--r--patches/linux-3.6.11/0153-Allow-the-number-of-cycles-delay-between-sdcard-peri.patch (renamed from patches/linux-3.6.10/0153-Allow-the-number-of-cycles-delay-between-sdcard-peri.patch)0
-rw-r--r--patches/linux-3.6.11/0154-Fix-vc-mem-by-using-module-parameters.patch (renamed from patches/linux-3.6.10/0154-Fix-vc-mem-by-using-module-parameters.patch)0
-rw-r--r--patches/linux-3.6.11/0155-Move-to-version-5-of-VCHIQ.-Note-this-requires-a-cor.patch (renamed from patches/linux-3.6.10/0155-Move-to-version-5-of-VCHIQ.-Note-this-requires-a-cor.patch)0
-rw-r--r--patches/linux-3.6.11/0156-Add-in-missed-vchiq-files.patch (renamed from patches/linux-3.6.10/0156-Add-in-missed-vchiq-files.patch)0
-rw-r--r--patches/linux-3.6.11/0157-Make-vchiq-enabled-by-default.-Tidy-Kconfig-file.patch (renamed from patches/linux-3.6.10/0157-Make-vchiq-enabled-by-default.-Tidy-Kconfig-file.patch)0
-rw-r--r--patches/linux-3.6.11/0158-Support-dummy-vc-mem-ioctl-used-by-vcdbg.patch (renamed from patches/linux-3.6.10/0158-Support-dummy-vc-mem-ioctl-used-by-vcdbg.patch)0
-rw-r--r--patches/linux-3.6.11/0159-Remove-BUG-call-from-vchiq-that-is-trigger-when-alsa.patch (renamed from patches/linux-3.6.10/0159-Remove-BUG-call-from-vchiq-that-is-trigger-when-alsa.patch)0
-rw-r--r--patches/linux-3.6.11/0160-Fix-up-issues-with-rebase.patch (renamed from patches/linux-3.6.10/0160-Fix-up-issues-with-rebase.patch)0
-rw-r--r--patches/linux-3.6.11/0161-Add-vc_cma-driver-to-enable-use-of-CMA.patch (renamed from patches/linux-3.6.10/0161-Add-vc_cma-driver-to-enable-use-of-CMA.patch)0
-rw-r--r--patches/linux-3.6.11/0162-Add-missing-CMA-files.patch (renamed from patches/linux-3.6.10/0162-Add-missing-CMA-files.patch)0
-rw-r--r--patches/linux-3.6.11/0163-Fix-reboot-with-new-restart-method-of-machine-driver.patch (renamed from patches/linux-3.6.10/0163-Fix-reboot-with-new-restart-method-of-machine-driver.patch)0
-rw-r--r--patches/linux-3.6.11/0164-smsc95xx-sleep-before-read-for-lengthy-operations.patch (renamed from patches/linux-3.6.10/0164-smsc95xx-sleep-before-read-for-lengthy-operations.patch)0
-rw-r--r--patches/linux-3.6.11/0165-smsc95xx-remove-unnecessary-variables.patch (renamed from patches/linux-3.6.10/0165-smsc95xx-remove-unnecessary-variables.patch)0
-rw-r--r--patches/linux-3.6.11/0166-smsc95xx-check-return-code-from-control-messages.patch (renamed from patches/linux-3.6.10/0166-smsc95xx-check-return-code-from-control-messages.patch)0
-rw-r--r--patches/linux-3.6.11/0167-smsc95xx-fix-resume-when-usb-device-is-reset.patch (renamed from patches/linux-3.6.10/0167-smsc95xx-fix-resume-when-usb-device-is-reset.patch)0
-rw-r--r--patches/linux-3.6.11/0168-smsc95xx-enable-power-saving-mode-during-system-susp.patch (renamed from patches/linux-3.6.10/0168-smsc95xx-enable-power-saving-mode-during-system-susp.patch)0
-rw-r--r--patches/linux-3.6.11/0169-smsc95xx-add-wol-magic-packet-support.patch (renamed from patches/linux-3.6.10/0169-smsc95xx-add-wol-magic-packet-support.patch)0
-rw-r--r--patches/linux-3.6.11/0170-smsc95xx-fix-tx-checksum-offload-for-big-endian.patch (renamed from patches/linux-3.6.10/0170-smsc95xx-fix-tx-checksum-offload-for-big-endian.patch)0
-rw-r--r--patches/linux-3.6.11/0171-Update-to-latest-vchiq.patch (renamed from patches/linux-3.6.10/0171-Update-to-latest-vchiq.patch)0
-rw-r--r--patches/linux-3.6.11/0172-Make-sure-we-wait-for-the-reset-to-finish.patch (renamed from patches/linux-3.6.10/0172-Make-sure-we-wait-for-the-reset-to-finish.patch)0
-rw-r--r--patches/linux-3.6.11/0173-Add-missing-pctv452e-DVB-module.patch (renamed from patches/linux-3.6.10/0173-Add-missing-pctv452e-DVB-module.patch)0
-rw-r--r--patches/linux-3.6.11/0174-Add-Simon-Hall-s-dma-helper-module-useful-in-future-.patch (renamed from patches/linux-3.6.10/0174-Add-Simon-Hall-s-dma-helper-module-useful-in-future-.patch)0
-rw-r--r--patches/linux-3.6.11/0175-Add-missing-options-from-more-recent-3.2.27-kernel-c.patch (renamed from patches/linux-3.6.10/0175-Add-missing-options-from-more-recent-3.2.27-kernel-c.patch)0
-rw-r--r--patches/linux-3.6.11/0176-lirc-added-support-for-RaspberryPi-GPIO.patch (renamed from patches/linux-3.6.10/0176-lirc-added-support-for-RaspberryPi-GPIO.patch)0
-rw-r--r--patches/linux-3.6.11/0177-Enable-building-of-lirc-rpi.patch (renamed from patches/linux-3.6.10/0177-Enable-building-of-lirc-rpi.patch)0
-rw-r--r--patches/linux-3.6.11/0178-Update-list-of-modules-build-with-next-kernel.-Fixes.patch (renamed from patches/linux-3.6.10/0178-Update-list-of-modules-build-with-next-kernel.-Fixes.patch)0
-rw-r--r--patches/linux-3.6.11/0179-Avoid-the-high-load-and-block-task-messages-by-start.patch (renamed from patches/linux-3.6.10/0179-Avoid-the-high-load-and-block-task-messages-by-start.patch)0
-rw-r--r--patches/linux-3.6.11/0180-Enable-CMA-in-defconfig.patch (renamed from patches/linux-3.6.10/0180-Enable-CMA-in-defconfig.patch)0
-rw-r--r--patches/linux-3.6.11/0181-Avoid-undefined-symbol-in-radio-shark.ko.patch (renamed from patches/linux-3.6.10/0181-Avoid-undefined-symbol-in-radio-shark.ko.patch)0
-rw-r--r--patches/linux-3.6.11/0182-Allow-mailbox-driver-to-be-called-from-user-code-tho.patch (renamed from patches/linux-3.6.10/0182-Allow-mailbox-driver-to-be-called-from-user-code-tho.patch)0
-rw-r--r--patches/linux-3.6.11/0183-usbnet-ratelimit-kevent-may-have-been-dropped-warnin.patch (renamed from patches/linux-3.6.10/0183-usbnet-ratelimit-kevent-may-have-been-dropped-warnin.patch)0
-rw-r--r--patches/linux-3.6.11/0184-Lazy-CRC-quirk-Implemented-retrying-mechanisms-for-S.patch (renamed from patches/linux-3.6.10/0184-Lazy-CRC-quirk-Implemented-retrying-mechanisms-for-S.patch)0
-rw-r--r--patches/linux-3.6.11/0185-Leave-missing_status-enabled-for-now.patch (renamed from patches/linux-3.6.10/0185-Leave-missing_status-enabled-for-now.patch)0
-rw-r--r--patches/linux-3.6.11/0186-Update-to-latest-cma-and-vchiq.patch (renamed from patches/linux-3.6.10/0186-Update-to-latest-cma-and-vchiq.patch)0
-rw-r--r--patches/linux-3.6.11/0187-Allow-CMA-pool-to-be-shared-with-other-drivers.patch (renamed from patches/linux-3.6.10/0187-Allow-CMA-pool-to-be-shared-with-other-drivers.patch)0
-rw-r--r--patches/linux-3.6.11/0188-Add-CoDel-network-scheduling.-Add-HIDRAW.-Remove-CMA.patch (renamed from patches/linux-3.6.10/0188-Add-CoDel-network-scheduling.-Add-HIDRAW.-Remove-CMA.patch)0
-rw-r--r--patches/linux-3.6.11/0189-Default-to-dwc_otp.lpm_enable-0.patch (renamed from patches/linux-3.6.10/0189-Default-to-dwc_otp.lpm_enable-0.patch)0
-rw-r--r--patches/linux-3.6.11/0190-Add-CONFIG_CFG80211_WEXT-and-CONFIG_MMC_SPI.patch (renamed from patches/linux-3.6.10/0190-Add-CONFIG_CFG80211_WEXT-and-CONFIG_MMC_SPI.patch)0
-rw-r--r--patches/linux-3.6.11/0191-Increase-default-coherent-pool-so-vchiq-starts-up.patch (renamed from patches/linux-3.6.10/0191-Increase-default-coherent-pool-so-vchiq-starts-up.patch)0
-rw-r--r--patches/linux-3.6.11/0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch (renamed from patches/linux-3.6.10/0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch)0
-rw-r--r--patches/linux-3.6.11/0193-Bluetooth-Increase-HCI-command-tx-timeout.patch (renamed from patches/linux-3.6.10/0193-Bluetooth-Increase-HCI-command-tx-timeout.patch)0
-rw-r--r--patches/linux-3.6.11/0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch (renamed from patches/linux-3.6.10/0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch)0
-rw-r--r--patches/linux-3.6.11/0195-Update-to-Simon-s-latest-dmaer-module.patch1201
-rw-r--r--patches/linux-3.6.11/0196-Add-retry-for-vchiq-init.-Needed-in-some-cases-when-.patch47
-rw-r--r--patches/linux-3.6.11/0197-Silence-bootup-errors-from-timer-and-gpio.patch46
-rw-r--r--patches/linux-3.6.11/0198-Remove-RTC_HCTOSYS-as-it-produces-a-kernel-boot-erro.patch29
-rw-r--r--patches/linux-3.6.11/0199-Make-CMA-kernel-messages-quieter-when-not-fatal.patch44
-rw-r--r--patches/linux-3.6.11/0200-Add-missing-USB_NET-modules.patch32
-rw-r--r--patches/linux-3.6.11/0201-Add-mutex-around-bcm_mailbox_property-function.patch38
-rw-r--r--patches/linux-3.6.11/0202-Enable-ZRAM-and-RFKILL-config-options.patch39
-rw-r--r--patches/linux-3.6.11/0203-dwc_otg-fix-bug-in-dwc_otg_hcd.c-resulting-in-silent.patch35
-rw-r--r--patches/linux-3.6.11/0204-Add-config-options-for-netfilter-log-and-more-dvb-mo.patch43
-rw-r--r--patches/linux-3.6.11/0205-Add-more-dvb-modules.patch152
-rw-r--r--patches/linux-3.6.11/0206-Return-error-value-from-bcm2708_setup_state.-Thanks-.patch20
-rw-r--r--patches/linux-3.6.11/0207-spi-spi-bcm2708-respect-per-transfer-SPI-clock-speed.patch43
-rw-r--r--patches/linux-3.6.11/0208-spi-bcm2708-add-9-bit-support-using-LoSSI-mode.patch68
-rw-r--r--patches/linux-3.6.11/0209-Add-hwrng-hardware-random-number-generator-driver.patch176
-rw-r--r--patches/linux-3.6.11/0210-Add-HW_RANDOM-BATMAN_ADV-and-CONFIG_NET_IPGRE.patch38
-rw-r--r--patches/linux-3.6.11/0211-Add-raid0-module.patch20
-rw-r--r--patches/linux-3.6.11/0212-Update-vchiq-to-version-supporting-querying-peer-ver.patch295
-rw-r--r--patches/linux-3.6.11/0213-Use-control-messages-for-audio-data-to-fix-scratch-h.patch487
-rw-r--r--patches/linux-3.6.11/0214-Default-force_bulk-to-false.patch21
-rw-r--r--patches/linux-3.6.11/0215-Add-missing-newlines-to-log-messages.patch97
-rw-r--r--patches/linux-3.6.11/0216-Changed-wording-on-logging.-Previously-we-received-e.patch32
-rw-r--r--patches/linux-3.6.11/0217-Fix-for-low-bogomips-value-reported.patch68
-rw-r--r--patches/linux-3.6.11/0218-dwc_otg-Fix-unsafe-access-of-QTD-during-URB-enqueue.patch85
-rw-r--r--patches/linux-3.6.11/0219-dwc_otg-Fix-incorrect-URB-allocation-error-handling.patch39
-rw-r--r--patches/linux-3.6.11/0220-Added-inverted-transmitter-support.patch79
-rw-r--r--patches/linux-3.6.11/0221-fbcon-clear-the-logo-bitmap-from-the-margin-area.patch38
-rw-r--r--patches/linux-3.6.11/0222-Add-config-request-CONFIG_IP_SCTP.patch37
-rw-r--r--patches/linux-3.6.11/0223-Add-retry-on-error-and-tidy-of-temperature-driver.patch125
-rw-r--r--patches/linux-3.6.11/0224-Add-SPEAKUP-and-SPEAKUP_SYNTH_SOFT-kernel-modules.patch21
-rw-r--r--patches/linux-3.6.11/0225-ARM-VFP-fix-emulation-of-second-VFP-instruction.patch49
-rw-r--r--patches/linux-3.6.11/0226-ARM-7492-1-add-strstr-declaration-for-decompressors.patch30
-rw-r--r--patches/linux-3.6.11/0227-dwc_otg-fix-potential-use-after-free-case-in-interru.patch30
-rw-r--r--patches/linux-3.6.11/0228-fix-missing-modulo-for-bit-in-bank-computation-in-bc.patch22
-rw-r--r--patches/linux-3.6.11/0229-dwc_otg-add-handling-of-SPLIT-transaction-data-toggl.patch52
-rw-r--r--patches/linux-3.6.11/0230-USB-option-add-Telekom-Speedstick-LTE-II.patch46
-rw-r--r--patches/linux-3.6.11/0231-Increase-the-minimum-alsa-buffer-size-as-we-get-unde.patch22
-rw-r--r--patches/linux-3.6.11/0232-USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch38
-rw-r--r--patches/linux-3.6.11/0233-Add-bitbanging-pullups-use-them-for-w1-gpio.patch145
-rw-r--r--patches/linux-3.6.11/0234-Run-Lindent-to-fix-whitespace-fix-braces.patch757
-rw-r--r--patches/linux-3.6.11/0235-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch251
-rw-r--r--patches/linux-3.6.11/0236-USB-add-OWL-CM-160-support-to-cp210x-driver.patch25
-rw-r--r--patches/linux-3.6.11/0237-Add-device-ID-330d.patch34
-rw-r--r--patches/linux-3.6.11/0238-dwc_otg-implement-tasklet-for-returning-URBs-to-usbc.patch240
-rw-r--r--patches/linux-3.6.11/0239-Added-Device-IDs-for-August-DVB-T-205.patch64
-rw-r--r--patches/linux-3.6.11/0240-Revert-ARM-7668-1-fix-memset-related-crashes-caused-.patch166
-rw-r--r--patches/linux-3.6.11/0241-Move-definition-of-fiq_fix_enable-to-bcm2708.c-to-al.patch38
-rw-r--r--patches/linux-3.6.11/0242-Revert-back-to-smaller-alsa-buffer.patch28
-rw-r--r--patches/linux-3.6.11/0301-Release-raspberrypi-20130406.patch (renamed from patches/linux-3.6.10/0201-Release-raspberrypi-20121217.patch)10
-rw-r--r--patches/linux-3.6.11/series (renamed from patches/linux-3.6.10/series)62
-rw-r--r--platformconfig4
246 files changed, 5599 insertions, 20 deletions
diff --git a/kernelconfig-3.6.10 b/kernelconfig-3.6.11
index 75e7758..5e6fd91 100644
--- a/kernelconfig-3.6.10
+++ b/kernelconfig-3.6.11
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.6.10-20121217 Kernel Configuration
+# Linux/arm 3.6.11-20130406 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -2059,7 +2059,6 @@ CONFIG_USB_STORAGE_ONETOUCH=m
CONFIG_USB_STORAGE_KARMA=m
CONFIG_USB_STORAGE_CYPRESS_ATACB=m
CONFIG_USB_STORAGE_ENE_UB6250=m
-CONFIG_USB_UAS=y
CONFIG_USB_LIBUSUAL=y
#
diff --git a/patches/linux-3.6.10/0001-Add-dwc_otg-driver.patch b/patches/linux-3.6.11/0001-Add-dwc_otg-driver.patch
index 5bd8795..b6c7dbb 100644
--- a/patches/linux-3.6.10/0001-Add-dwc_otg-driver.patch
+++ b/patches/linux-3.6.11/0001-Add-dwc_otg-driver.patch
@@ -704,7 +704,7 @@ index 69ecd3c..0431b4e 100644
return i;
}
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index fe7faf0..a3d4646 100644
+index fe7faf0..a3d4646d 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -25,7 +25,6 @@
@@ -1438,7 +1438,7 @@ index 0000000..a553a9d
+
diff --git a/drivers/usb/host/dwc_common_port/doc/doxygen.cfg b/drivers/usb/host/dwc_common_port/doc/doxygen.cfg
new file mode 100644
-index 0000000..605b9da
+index 0000000..605b9dab
--- /dev/null
+++ b/drivers/usb/host/dwc_common_port/doc/doxygen.cfg
@@ -0,0 +1,270 @@
@@ -10758,7 +10758,7 @@ index 0000000..3a7dd71
+}
diff --git a/drivers/usb/host/dwc_common_port/dwc_cc.h b/drivers/usb/host/dwc_common_port/dwc_cc.h
new file mode 100644
-index 0000000..6b46419
+index 0000000..6b464191
--- /dev/null
+++ b/drivers/usb/host/dwc_common_port/dwc_cc.h
@@ -0,0 +1,209 @@
diff --git a/patches/linux-3.6.10/0002-Main-bcm2708-linux-port.patch b/patches/linux-3.6.11/0002-Main-bcm2708-linux-port.patch
index dae8b43..dae8b43 100644
--- a/patches/linux-3.6.10/0002-Main-bcm2708-linux-port.patch
+++ b/patches/linux-3.6.11/0002-Main-bcm2708-linux-port.patch
diff --git a/patches/linux-3.6.10/0003-bcm2708-watchdog-driver.patch b/patches/linux-3.6.11/0003-bcm2708-watchdog-driver.patch
index b537702..b537702 100644
--- a/patches/linux-3.6.10/0003-bcm2708-watchdog-driver.patch
+++ b/patches/linux-3.6.11/0003-bcm2708-watchdog-driver.patch
diff --git a/patches/linux-3.6.10/0004-bcm2708-framebuffer-driver.patch b/patches/linux-3.6.11/0004-bcm2708-framebuffer-driver.patch
index f3ebda7..f3ebda7 100644
--- a/patches/linux-3.6.10/0004-bcm2708-framebuffer-driver.patch
+++ b/patches/linux-3.6.11/0004-bcm2708-framebuffer-driver.patch
diff --git a/patches/linux-3.6.10/0005-bcm2708-vchiq-driver.patch b/patches/linux-3.6.11/0005-bcm2708-vchiq-driver.patch
index 08016e9..08016e9 100644
--- a/patches/linux-3.6.10/0005-bcm2708-vchiq-driver.patch
+++ b/patches/linux-3.6.11/0005-bcm2708-vchiq-driver.patch
diff --git a/patches/linux-3.6.10/0006-Allow-mac-address-to-be-set-in-smsc95xx.patch b/patches/linux-3.6.11/0006-Allow-mac-address-to-be-set-in-smsc95xx.patch
index 2db0750..2db0750 100644
--- a/patches/linux-3.6.10/0006-Allow-mac-address-to-be-set-in-smsc95xx.patch
+++ b/patches/linux-3.6.11/0006-Allow-mac-address-to-be-set-in-smsc95xx.patch
diff --git a/patches/linux-3.6.10/0007-Fix-headers-for-vchiq-vcos-to-be-GPLv2.patch b/patches/linux-3.6.11/0007-Fix-headers-for-vchiq-vcos-to-be-GPLv2.patch
index f38c111..f38c111 100644
--- a/patches/linux-3.6.10/0007-Fix-headers-for-vchiq-vcos-to-be-GPLv2.patch
+++ b/patches/linux-3.6.11/0007-Fix-headers-for-vchiq-vcos-to-be-GPLv2.patch
diff --git a/patches/linux-3.6.10/0008-Fix-some-issues-reported.-Lower-case-module-paramete.patch b/patches/linux-3.6.11/0008-Fix-some-issues-reported.-Lower-case-module-paramete.patch
index 62a9aa4..62a9aa4 100644
--- a/patches/linux-3.6.10/0008-Fix-some-issues-reported.-Lower-case-module-paramete.patch
+++ b/patches/linux-3.6.11/0008-Fix-some-issues-reported.-Lower-case-module-paramete.patch
diff --git a/patches/linux-3.6.10/0009-Build-anything-reasonable-as-a-module.-Thanks-to-asb.patch b/patches/linux-3.6.11/0009-Build-anything-reasonable-as-a-module.-Thanks-to-asb.patch
index 9c338c6..9c338c6 100644
--- a/patches/linux-3.6.10/0009-Build-anything-reasonable-as-a-module.-Thanks-to-asb.patch
+++ b/patches/linux-3.6.11/0009-Build-anything-reasonable-as-a-module.-Thanks-to-asb.patch
diff --git a/patches/linux-3.6.10/0010-Add-config-option-to-enable-L2-cache.patch b/patches/linux-3.6.11/0010-Add-config-option-to-enable-L2-cache.patch
index 256685d..256685d 100644
--- a/patches/linux-3.6.10/0010-Add-config-option-to-enable-L2-cache.patch
+++ b/patches/linux-3.6.11/0010-Add-config-option-to-enable-L2-cache.patch
diff --git a/patches/linux-3.6.10/0011-Fix-bug-where-vchiq-fails-when-L2-enabled.patch b/patches/linux-3.6.11/0011-Fix-bug-where-vchiq-fails-when-L2-enabled.patch
index cb2633d..cb2633d 100644
--- a/patches/linux-3.6.10/0011-Fix-bug-where-vchiq-fails-when-L2-enabled.patch
+++ b/patches/linux-3.6.11/0011-Fix-bug-where-vchiq-fails-when-L2-enabled.patch
diff --git a/patches/linux-3.6.10/0012-Add-devtmpfs-for-archlinux-and-emergency-and-debug-c.patch b/patches/linux-3.6.11/0012-Add-devtmpfs-for-archlinux-and-emergency-and-debug-c.patch
index f20f0f5..f20f0f5 100644
--- a/patches/linux-3.6.10/0012-Add-devtmpfs-for-archlinux-and-emergency-and-debug-c.patch
+++ b/patches/linux-3.6.11/0012-Add-devtmpfs-for-archlinux-and-emergency-and-debug-c.patch
diff --git a/patches/linux-3.6.10/0013-Fix-32bpp-framebuffer-by-adding-alpha-bits.patch b/patches/linux-3.6.11/0013-Fix-32bpp-framebuffer-by-adding-alpha-bits.patch
index a8a0dee..a8a0dee 100644
--- a/patches/linux-3.6.10/0013-Fix-32bpp-framebuffer-by-adding-alpha-bits.patch
+++ b/patches/linux-3.6.11/0013-Fix-32bpp-framebuffer-by-adding-alpha-bits.patch
diff --git a/patches/linux-3.6.10/0014-Enable-L2-cache-is-now-the-default.-Invert-sense-of-.patch b/patches/linux-3.6.11/0014-Enable-L2-cache-is-now-the-default.-Invert-sense-of-.patch
index 597feb1..597feb1 100644
--- a/patches/linux-3.6.10/0014-Enable-L2-cache-is-now-the-default.-Invert-sense-of-.patch
+++ b/patches/linux-3.6.11/0014-Enable-L2-cache-is-now-the-default.-Invert-sense-of-.patch
diff --git a/patches/linux-3.6.10/0015-Allow-24bpp-for-framebuffer.patch b/patches/linux-3.6.11/0015-Allow-24bpp-for-framebuffer.patch
index ed3cdb3..ed3cdb3 100644
--- a/patches/linux-3.6.10/0015-Allow-24bpp-for-framebuffer.patch
+++ b/patches/linux-3.6.11/0015-Allow-24bpp-for-framebuffer.patch
diff --git a/patches/linux-3.6.10/0016-Disable-debug-code-in-dwc_otg-driver-unless-CONFIG_U.patch b/patches/linux-3.6.11/0016-Disable-debug-code-in-dwc_otg-driver-unless-CONFIG_U.patch
index 072f2e6..072f2e6 100644
--- a/patches/linux-3.6.10/0016-Disable-debug-code-in-dwc_otg-driver-unless-CONFIG_U.patch
+++ b/patches/linux-3.6.11/0016-Disable-debug-code-in-dwc_otg-driver-unless-CONFIG_U.patch
diff --git a/patches/linux-3.6.10/0017-Enable-high-resolution-timers.patch b/patches/linux-3.6.11/0017-Enable-high-resolution-timers.patch
index 087cd48..087cd48 100644
--- a/patches/linux-3.6.10/0017-Enable-high-resolution-timers.patch
+++ b/patches/linux-3.6.11/0017-Enable-high-resolution-timers.patch
diff --git a/patches/linux-3.6.10/0018-Fix-for-mmc-timeouts-when-erasing-multiple-blocks.patch b/patches/linux-3.6.11/0018-Fix-for-mmc-timeouts-when-erasing-multiple-blocks.patch
index c87441b..c87441b 100644
--- a/patches/linux-3.6.10/0018-Fix-for-mmc-timeouts-when-erasing-multiple-blocks.patch
+++ b/patches/linux-3.6.11/0018-Fix-for-mmc-timeouts-when-erasing-multiple-blocks.patch
diff --git a/patches/linux-3.6.10/0019-Fix-problem-with-dma-that-could-corrupt-sdcard-espec.patch b/patches/linux-3.6.11/0019-Fix-problem-with-dma-that-could-corrupt-sdcard-espec.patch
index 46b5149..46b5149 100644
--- a/patches/linux-3.6.10/0019-Fix-problem-with-dma-that-could-corrupt-sdcard-espec.patch
+++ b/patches/linux-3.6.11/0019-Fix-problem-with-dma-that-could-corrupt-sdcard-espec.patch
diff --git a/patches/linux-3.6.10/0020-Update-to-match-latest-vc-side-vchiq.-Allows-vchiq-c.patch b/patches/linux-3.6.11/0020-Update-to-match-latest-vc-side-vchiq.-Allows-vchiq-c.patch
index ca43e6d..ca43e6d 100644
--- a/patches/linux-3.6.10/0020-Update-to-match-latest-vc-side-vchiq.-Allows-vchiq-c.patch
+++ b/patches/linux-3.6.11/0020-Update-to-match-latest-vc-side-vchiq.-Allows-vchiq-c.patch
diff --git a/patches/linux-3.6.10/0021-First-pass-at-alsa-sound-driver.-Some-functionality-.patch b/patches/linux-3.6.11/0021-First-pass-at-alsa-sound-driver.-Some-functionality-.patch
index f4efad2..f4efad2 100644
--- a/patches/linux-3.6.10/0021-First-pass-at-alsa-sound-driver.-Some-functionality-.patch
+++ b/patches/linux-3.6.11/0021-First-pass-at-alsa-sound-driver.-Some-functionality-.patch
diff --git a/patches/linux-3.6.10/0022-Cast-to-avoid-warning.patch b/patches/linux-3.6.11/0022-Cast-to-avoid-warning.patch
index 0aca4f5..0aca4f5 100644
--- a/patches/linux-3.6.10/0022-Cast-to-avoid-warning.patch
+++ b/patches/linux-3.6.11/0022-Cast-to-avoid-warning.patch
diff --git a/patches/linux-3.6.10/0023-Add-new-ioctl-to-match-latest-vc-side-code.patch b/patches/linux-3.6.11/0023-Add-new-ioctl-to-match-latest-vc-side-code.patch
index 4f29eb2..4f29eb2 100644
--- a/patches/linux-3.6.10/0023-Add-new-ioctl-to-match-latest-vc-side-code.patch
+++ b/patches/linux-3.6.11/0023-Add-new-ioctl-to-match-latest-vc-side-code.patch
diff --git a/patches/linux-3.6.10/0024-Enable-sound-kernel-modules.-Tidy-formatting.-Fix-ct.patch b/patches/linux-3.6.11/0024-Enable-sound-kernel-modules.-Tidy-formatting.-Fix-ct.patch
index b4ae6fe..b4ae6fe 100644
--- a/patches/linux-3.6.10/0024-Enable-sound-kernel-modules.-Tidy-formatting.-Fix-ct.patch
+++ b/patches/linux-3.6.11/0024-Enable-sound-kernel-modules.-Tidy-formatting.-Fix-ct.patch
diff --git a/patches/linux-3.6.10/0025-Add-missing-header-file-update-for-vc_mem-iocts.patch b/patches/linux-3.6.11/0025-Add-missing-header-file-update-for-vc_mem-iocts.patch
index 0533e73..0533e73 100644
--- a/patches/linux-3.6.10/0025-Add-missing-header-file-update-for-vc_mem-iocts.patch
+++ b/patches/linux-3.6.11/0025-Add-missing-header-file-update-for-vc_mem-iocts.patch
diff --git a/patches/linux-3.6.10/0026-Remove-most-of-the-alsa-debug-messages.patch b/patches/linux-3.6.11/0026-Remove-most-of-the-alsa-debug-messages.patch
index 8553229..8553229 100644
--- a/patches/linux-3.6.10/0026-Remove-most-of-the-alsa-debug-messages.patch
+++ b/patches/linux-3.6.11/0026-Remove-most-of-the-alsa-debug-messages.patch
diff --git a/patches/linux-3.6.10/0027-add-temporary-workaround-for-fbset-crashes.patch b/patches/linux-3.6.11/0027-add-temporary-workaround-for-fbset-crashes.patch
index 66a028b..66a028b 100644
--- a/patches/linux-3.6.10/0027-add-temporary-workaround-for-fbset-crashes.patch
+++ b/patches/linux-3.6.11/0027-add-temporary-workaround-for-fbset-crashes.patch
diff --git a/patches/linux-3.6.10/0028-Fix-harmless-base-size-typo.patch b/patches/linux-3.6.11/0028-Fix-harmless-base-size-typo.patch
index f4c7bc8..f4c7bc8 100644
--- a/patches/linux-3.6.10/0028-Fix-harmless-base-size-typo.patch
+++ b/patches/linux-3.6.11/0028-Fix-harmless-base-size-typo.patch
diff --git a/patches/linux-3.6.10/0029-Replace-if-1-sections-by-local-configuration-defines.patch b/patches/linux-3.6.11/0029-Replace-if-1-sections-by-local-configuration-defines.patch
index 1e885d0..1e885d0 100644
--- a/patches/linux-3.6.10/0029-Replace-if-1-sections-by-local-configuration-defines.patch
+++ b/patches/linux-3.6.11/0029-Replace-if-1-sections-by-local-configuration-defines.patch
diff --git a/patches/linux-3.6.10/0030-Don-t-send-data-block-when-emitting-silence.patch b/patches/linux-3.6.11/0030-Don-t-send-data-block-when-emitting-silence.patch
index 614831e..614831e 100644
--- a/patches/linux-3.6.10/0030-Don-t-send-data-block-when-emitting-silence.patch
+++ b/patches/linux-3.6.11/0030-Don-t-send-data-block-when-emitting-silence.patch
diff --git a/patches/linux-3.6.10/0031-Fix-hopefully-for-DWC_MEMCPY-kernel-panics.-Thanks-t.patch b/patches/linux-3.6.11/0031-Fix-hopefully-for-DWC_MEMCPY-kernel-panics.-Thanks-t.patch
index 80887ee..80887ee 100644
--- a/patches/linux-3.6.10/0031-Fix-hopefully-for-DWC_MEMCPY-kernel-panics.-Thanks-t.patch
+++ b/patches/linux-3.6.11/0031-Fix-hopefully-for-DWC_MEMCPY-kernel-panics.-Thanks-t.patch
diff --git a/patches/linux-3.6.10/0032-Build-modules-needed-for-USB-booting-into-kernel.patch b/patches/linux-3.6.11/0032-Build-modules-needed-for-USB-booting-into-kernel.patch
index 7b57066..7b57066 100644
--- a/patches/linux-3.6.10/0032-Build-modules-needed-for-USB-booting-into-kernel.patch
+++ b/patches/linux-3.6.11/0032-Build-modules-needed-for-USB-booting-into-kernel.patch
diff --git a/patches/linux-3.6.10/0033-Whitespace-tidy.-Thanks-Roger.patch b/patches/linux-3.6.11/0033-Whitespace-tidy.-Thanks-Roger.patch
index db8329c..db8329c 100644
--- a/patches/linux-3.6.10/0033-Whitespace-tidy.-Thanks-Roger.patch
+++ b/patches/linux-3.6.11/0033-Whitespace-tidy.-Thanks-Roger.patch
diff --git a/patches/linux-3.6.10/0034-Update-vchiq-to-match-GPU-version.-Should-still-be-c.patch b/patches/linux-3.6.11/0034-Update-vchiq-to-match-GPU-version.-Should-still-be-c.patch
index 11de021..11de021 100644
--- a/patches/linux-3.6.10/0034-Update-vchiq-to-match-GPU-version.-Should-still-be-c.patch
+++ b/patches/linux-3.6.11/0034-Update-vchiq-to-match-GPU-version.-Should-still-be-c.patch
diff --git a/patches/linux-3.6.10/0035-added-support-for-TT-in-the-USB-driver.-Thanks-Naren.patch b/patches/linux-3.6.11/0035-added-support-for-TT-in-the-USB-driver.-Thanks-Naren.patch
index da119ea..da119ea 100644
--- a/patches/linux-3.6.10/0035-added-support-for-TT-in-the-USB-driver.-Thanks-Naren.patch
+++ b/patches/linux-3.6.11/0035-added-support-for-TT-in-the-USB-driver.-Thanks-Naren.patch
diff --git a/patches/linux-3.6.10/0036-Swap-Red-and-Blue-over-in-32bpp-framebuffer-mode.patch b/patches/linux-3.6.11/0036-Swap-Red-and-Blue-over-in-32bpp-framebuffer-mode.patch
index a3a891a..a3a891a 100644
--- a/patches/linux-3.6.10/0036-Swap-Red-and-Blue-over-in-32bpp-framebuffer-mode.patch
+++ b/patches/linux-3.6.11/0036-Swap-Red-and-Blue-over-in-32bpp-framebuffer-mode.patch
diff --git a/patches/linux-3.6.10/0037-Update-emergency-config-to-match-latest-debug-one.patch b/patches/linux-3.6.11/0037-Update-emergency-config-to-match-latest-debug-one.patch
index 93bf5aa..93bf5aa 100644
--- a/patches/linux-3.6.10/0037-Update-emergency-config-to-match-latest-debug-one.patch
+++ b/patches/linux-3.6.11/0037-Update-emergency-config-to-match-latest-debug-one.patch
diff --git a/patches/linux-3.6.10/0038-Use-dwc_alloc_atomic.-Thanks-bootc.patch b/patches/linux-3.6.11/0038-Use-dwc_alloc_atomic.-Thanks-bootc.patch
index 6fce20b..6fce20b 100644
--- a/patches/linux-3.6.10/0038-Use-dwc_alloc_atomic.-Thanks-bootc.patch
+++ b/patches/linux-3.6.11/0038-Use-dwc_alloc_atomic.-Thanks-bootc.patch
diff --git a/patches/linux-3.6.10/0039-possible-fix-for-sdcard-missing-status.-Thank-naren.patch b/patches/linux-3.6.11/0039-possible-fix-for-sdcard-missing-status.-Thank-naren.patch
index 80ed865..80ed865 100644
--- a/patches/linux-3.6.10/0039-possible-fix-for-sdcard-missing-status.-Thank-naren.patch
+++ b/patches/linux-3.6.11/0039-possible-fix-for-sdcard-missing-status.-Thank-naren.patch
diff --git a/patches/linux-3.6.10/0040-Fix-BUG-in-bcm2708_fb_set_par-doesn-t-work-if-the-co.patch b/patches/linux-3.6.11/0040-Fix-BUG-in-bcm2708_fb_set_par-doesn-t-work-if-the-co.patch
index 09460a4..09460a4 100644
--- a/patches/linux-3.6.10/0040-Fix-BUG-in-bcm2708_fb_set_par-doesn-t-work-if-the-co.patch
+++ b/patches/linux-3.6.11/0040-Fix-BUG-in-bcm2708_fb_set_par-doesn-t-work-if-the-co.patch
diff --git a/patches/linux-3.6.10/0041-Fix-for-DWC-OTG-HCD-URB-Dequeue-has-NULL-URB-panic.-.patch b/patches/linux-3.6.11/0041-Fix-for-DWC-OTG-HCD-URB-Dequeue-has-NULL-URB-panic.-.patch
index f48afc8..f48afc8 100644
--- a/patches/linux-3.6.10/0041-Fix-for-DWC-OTG-HCD-URB-Dequeue-has-NULL-URB-panic.-.patch
+++ b/patches/linux-3.6.11/0041-Fix-for-DWC-OTG-HCD-URB-Dequeue-has-NULL-URB-panic.-.patch
diff --git a/patches/linux-3.6.10/0042-Fix-for-bug-in-mbox_read.-Thanks-lp0.patch b/patches/linux-3.6.11/0042-Fix-for-bug-in-mbox_read.-Thanks-lp0.patch
index 4a7e3c3..4a7e3c3 100644
--- a/patches/linux-3.6.10/0042-Fix-for-bug-in-mbox_read.-Thanks-lp0.patch
+++ b/patches/linux-3.6.11/0042-Fix-for-bug-in-mbox_read.-Thanks-lp0.patch
diff --git a/patches/linux-3.6.10/0043-Add-__VCCOREVER__-to-makefile.patch b/patches/linux-3.6.11/0043-Add-__VCCOREVER__-to-makefile.patch
index b5aafda..b5aafda 100644
--- a/patches/linux-3.6.10/0043-Add-__VCCOREVER__-to-makefile.patch
+++ b/patches/linux-3.6.11/0043-Add-__VCCOREVER__-to-makefile.patch
diff --git a/patches/linux-3.6.10/0044-Change-PHYS_OFFSET-to-PLAT_PHYS_OFFSET.patch b/patches/linux-3.6.11/0044-Change-PHYS_OFFSET-to-PLAT_PHYS_OFFSET.patch
index e16eac4..e16eac4 100644
--- a/patches/linux-3.6.10/0044-Change-PHYS_OFFSET-to-PLAT_PHYS_OFFSET.patch
+++ b/patches/linux-3.6.11/0044-Change-PHYS_OFFSET-to-PLAT_PHYS_OFFSET.patch
diff --git a/patches/linux-3.6.10/0045-sdcard-patch-improvements-from-naren.patch b/patches/linux-3.6.11/0045-sdcard-patch-improvements-from-naren.patch
index 52ece3b..52ece3b 100644
--- a/patches/linux-3.6.10/0045-sdcard-patch-improvements-from-naren.patch
+++ b/patches/linux-3.6.11/0045-sdcard-patch-improvements-from-naren.patch
diff --git a/patches/linux-3.6.10/0046-Invert-sense-of-sdcard-access-trigger-OK-LED-so-it-i.patch b/patches/linux-3.6.11/0046-Invert-sense-of-sdcard-access-trigger-OK-LED-so-it-i.patch
index 6cc0664..6cc0664 100644
--- a/patches/linux-3.6.10/0046-Invert-sense-of-sdcard-access-trigger-OK-LED-so-it-i.patch
+++ b/patches/linux-3.6.11/0046-Invert-sense-of-sdcard-access-trigger-OK-LED-so-it-i.patch
diff --git a/patches/linux-3.6.10/0047-Added-power-off-message-to-allow-kexec-to-work.-Than.patch b/patches/linux-3.6.11/0047-Added-power-off-message-to-allow-kexec-to-work.-Than.patch
index 4277a9b..4277a9b 100644
--- a/patches/linux-3.6.10/0047-Added-power-off-message-to-allow-kexec-to-work.-Than.patch
+++ b/patches/linux-3.6.11/0047-Added-power-off-message-to-allow-kexec-to-work.-Than.patch
diff --git a/patches/linux-3.6.10/0048-remove-unwanted-file.patch b/patches/linux-3.6.11/0048-remove-unwanted-file.patch
index b2fc796..b2fc796 100644
--- a/patches/linux-3.6.10/0048-remove-unwanted-file.patch
+++ b/patches/linux-3.6.11/0048-remove-unwanted-file.patch
diff --git a/patches/linux-3.6.10/0049-Enable-PREEMPT-and-SCHED_AUTOGROUP.patch b/patches/linux-3.6.11/0049-Enable-PREEMPT-and-SCHED_AUTOGROUP.patch
index 02c5dd7..02c5dd7 100644
--- a/patches/linux-3.6.10/0049-Enable-PREEMPT-and-SCHED_AUTOGROUP.patch
+++ b/patches/linux-3.6.11/0049-Enable-PREEMPT-and-SCHED_AUTOGROUP.patch
diff --git a/patches/linux-3.6.10/0050-Added-support-for-USB-webcams.patch b/patches/linux-3.6.11/0050-Added-support-for-USB-webcams.patch
index 0e39e19..0e39e19 100644
--- a/patches/linux-3.6.10/0050-Added-support-for-USB-webcams.patch
+++ b/patches/linux-3.6.11/0050-Added-support-for-USB-webcams.patch
diff --git a/patches/linux-3.6.10/0051-Enable-ipv6-due-to-popular-demand.patch b/patches/linux-3.6.11/0051-Enable-ipv6-due-to-popular-demand.patch
index 223f3d7..223f3d7 100644
--- a/patches/linux-3.6.10/0051-Enable-ipv6-due-to-popular-demand.patch
+++ b/patches/linux-3.6.11/0051-Enable-ipv6-due-to-popular-demand.patch
diff --git a/patches/linux-3.6.10/0052-Fix-regression-in-debug-kernel-config-options.patch b/patches/linux-3.6.11/0052-Fix-regression-in-debug-kernel-config-options.patch
index 027e98c..027e98c 100644
--- a/patches/linux-3.6.10/0052-Fix-regression-in-debug-kernel-config-options.patch
+++ b/patches/linux-3.6.11/0052-Fix-regression-in-debug-kernel-config-options.patch
diff --git a/patches/linux-3.6.10/0053-bcm2835-ctl-fix-alsamixer-control.patch b/patches/linux-3.6.11/0053-bcm2835-ctl-fix-alsamixer-control.patch
index 726a5da..726a5da 100644
--- a/patches/linux-3.6.10/0053-bcm2835-ctl-fix-alsamixer-control.patch
+++ b/patches/linux-3.6.11/0053-bcm2835-ctl-fix-alsamixer-control.patch
diff --git a/patches/linux-3.6.10/0054-bcm2835-ctl-limit-maximal-volume-to-4db.patch b/patches/linux-3.6.11/0054-bcm2835-ctl-limit-maximal-volume-to-4db.patch
index 87d7d17..87d7d17 100644
--- a/patches/linux-3.6.10/0054-bcm2835-ctl-limit-maximal-volume-to-4db.patch
+++ b/patches/linux-3.6.11/0054-bcm2835-ctl-limit-maximal-volume-to-4db.patch
diff --git a/patches/linux-3.6.10/0055-Add-iptables-and-devtmpfs_mount-to-non-cutdown-confi.patch b/patches/linux-3.6.11/0055-Add-iptables-and-devtmpfs_mount-to-non-cutdown-confi.patch
index 2f3dd68..2f3dd68 100644
--- a/patches/linux-3.6.10/0055-Add-iptables-and-devtmpfs_mount-to-non-cutdown-confi.patch
+++ b/patches/linux-3.6.11/0055-Add-iptables-and-devtmpfs_mount-to-non-cutdown-confi.patch
diff --git a/patches/linux-3.6.10/0056-sdhci-bcm2708-speed-up-DMA-sync.patch b/patches/linux-3.6.11/0056-sdhci-bcm2708-speed-up-DMA-sync.patch
index a529cd4..a529cd4 100644
--- a/patches/linux-3.6.10/0056-sdhci-bcm2708-speed-up-DMA-sync.patch
+++ b/patches/linux-3.6.11/0056-sdhci-bcm2708-speed-up-DMA-sync.patch
diff --git a/patches/linux-3.6.10/0057-sdhci-bcm2708-remove-custom-clock-handling.patch b/patches/linux-3.6.11/0057-sdhci-bcm2708-remove-custom-clock-handling.patch
index efe862f..efe862f 100644
--- a/patches/linux-3.6.10/0057-sdhci-bcm2708-remove-custom-clock-handling.patch
+++ b/patches/linux-3.6.11/0057-sdhci-bcm2708-remove-custom-clock-handling.patch
diff --git a/patches/linux-3.6.10/0058-sdhci-bcm2708-add-additional-quirks.patch b/patches/linux-3.6.11/0058-sdhci-bcm2708-add-additional-quirks.patch
index 54e1ef8..54e1ef8 100644
--- a/patches/linux-3.6.10/0058-sdhci-bcm2708-add-additional-quirks.patch
+++ b/patches/linux-3.6.11/0058-sdhci-bcm2708-add-additional-quirks.patch
diff --git a/patches/linux-3.6.10/0059-sdhci-bcm2708-add-allow_highspeed-parameter.patch b/patches/linux-3.6.11/0059-sdhci-bcm2708-add-allow_highspeed-parameter.patch
index f101260..f101260 100644
--- a/patches/linux-3.6.10/0059-sdhci-bcm2708-add-allow_highspeed-parameter.patch
+++ b/patches/linux-3.6.11/0059-sdhci-bcm2708-add-allow_highspeed-parameter.patch
diff --git a/patches/linux-3.6.10/0060-sdhci-bcm2708-assume-50-MHz-eMMC-clock.patch b/patches/linux-3.6.11/0060-sdhci-bcm2708-assume-50-MHz-eMMC-clock.patch
index f19e29f..f19e29f 100644
--- a/patches/linux-3.6.10/0060-sdhci-bcm2708-assume-50-MHz-eMMC-clock.patch
+++ b/patches/linux-3.6.11/0060-sdhci-bcm2708-assume-50-MHz-eMMC-clock.patch
diff --git a/patches/linux-3.6.10/0061-Allow-emmc-clock-to-be-specified-as-command-line-par.patch b/patches/linux-3.6.11/0061-Allow-emmc-clock-to-be-specified-as-command-line-par.patch
index 16ff96b..16ff96b 100644
--- a/patches/linux-3.6.10/0061-Allow-emmc-clock-to-be-specified-as-command-line-par.patch
+++ b/patches/linux-3.6.11/0061-Allow-emmc-clock-to-be-specified-as-command-line-par.patch
diff --git a/patches/linux-3.6.10/0062-sdhci-bcm2708-raise-DMA-sync-timeout.patch b/patches/linux-3.6.11/0062-sdhci-bcm2708-raise-DMA-sync-timeout.patch
index f5cfca6..f5cfca6 100644
--- a/patches/linux-3.6.10/0062-sdhci-bcm2708-raise-DMA-sync-timeout.patch
+++ b/patches/linux-3.6.11/0062-sdhci-bcm2708-raise-DMA-sync-timeout.patch
diff --git a/patches/linux-3.6.10/0063-Fix-bool-int-error.patch b/patches/linux-3.6.11/0063-Fix-bool-int-error.patch
index 1bbeaba..1bbeaba 100644
--- a/patches/linux-3.6.10/0063-Fix-bool-int-error.patch
+++ b/patches/linux-3.6.11/0063-Fix-bool-int-error.patch
diff --git a/patches/linux-3.6.10/0064-Fix-bool-int-error-part-2.patch b/patches/linux-3.6.11/0064-Fix-bool-int-error-part-2.patch
index d56c1b2..d56c1b2 100644
--- a/patches/linux-3.6.10/0064-Fix-bool-int-error-part-2.patch
+++ b/patches/linux-3.6.11/0064-Fix-bool-int-error-part-2.patch
diff --git a/patches/linux-3.6.10/0065-More-config-options-for-iptables-device-mapper-PPP_M.patch b/patches/linux-3.6.11/0065-More-config-options-for-iptables-device-mapper-PPP_M.patch
index 4b8f871..4b8f871 100644
--- a/patches/linux-3.6.10/0065-More-config-options-for-iptables-device-mapper-PPP_M.patch
+++ b/patches/linux-3.6.11/0065-More-config-options-for-iptables-device-mapper-PPP_M.patch
diff --git a/patches/linux-3.6.10/0066-Explicitly-set-usb-host-channels-to-8-as-in-the-spec.patch b/patches/linux-3.6.11/0066-Explicitly-set-usb-host-channels-to-8-as-in-the-spec.patch
index d9317dc..d9317dc 100644
--- a/patches/linux-3.6.10/0066-Explicitly-set-usb-host-channels-to-8-as-in-the-spec.patch
+++ b/patches/linux-3.6.11/0066-Explicitly-set-usb-host-channels-to-8-as-in-the-spec.patch
diff --git a/patches/linux-3.6.10/0067-Add-hfs-hfsplus-modules.patch b/patches/linux-3.6.11/0067-Add-hfs-hfsplus-modules.patch
index a12d2c6..a12d2c6 100644
--- a/patches/linux-3.6.10/0067-Add-hfs-hfsplus-modules.patch
+++ b/patches/linux-3.6.11/0067-Add-hfs-hfsplus-modules.patch
diff --git a/patches/linux-3.6.10/0068-Remove-silence-method-and-use-atomic-flags-for-kmall.patch b/patches/linux-3.6.11/0068-Remove-silence-method-and-use-atomic-flags-for-kmall.patch
index 4eccfaf..4eccfaf 100644
--- a/patches/linux-3.6.10/0068-Remove-silence-method-and-use-atomic-flags-for-kmall.patch
+++ b/patches/linux-3.6.11/0068-Remove-silence-method-and-use-atomic-flags-for-kmall.patch
diff --git a/patches/linux-3.6.10/0069-Fix-unintended-line-swap-that-cause-cause-memory-lea.patch b/patches/linux-3.6.11/0069-Fix-unintended-line-swap-that-cause-cause-memory-lea.patch
index 36411a7..36411a7 100644
--- a/patches/linux-3.6.10/0069-Fix-unintended-line-swap-that-cause-cause-memory-lea.patch
+++ b/patches/linux-3.6.11/0069-Fix-unintended-line-swap-that-cause-cause-memory-lea.patch
diff --git a/patches/linux-3.6.10/0070-Use-ndelay-rather-than-udelay.-Thanks-lb.patch b/patches/linux-3.6.11/0070-Use-ndelay-rather-than-udelay.-Thanks-lb.patch
index 6d70880..6d70880 100644
--- a/patches/linux-3.6.10/0070-Use-ndelay-rather-than-udelay.-Thanks-lb.patch
+++ b/patches/linux-3.6.11/0070-Use-ndelay-rather-than-udelay.-Thanks-lb.patch
diff --git a/patches/linux-3.6.10/0071-Add-NFSD.-Add-some-dvb-options.-Add-CONFIG_LOCALVERS.patch b/patches/linux-3.6.11/0071-Add-NFSD.-Add-some-dvb-options.-Add-CONFIG_LOCALVERS.patch
index 18123c3..18123c3 100644
--- a/patches/linux-3.6.10/0071-Add-NFSD.-Add-some-dvb-options.-Add-CONFIG_LOCALVERS.patch
+++ b/patches/linux-3.6.11/0071-Add-NFSD.-Add-some-dvb-options.-Add-CONFIG_LOCALVERS.patch
diff --git a/patches/linux-3.6.10/0072-Fixed-issue-with-some-keyboards-giving-too-much-data.patch b/patches/linux-3.6.11/0072-Fixed-issue-with-some-keyboards-giving-too-much-data.patch
index 1fd1eb7..1fd1eb7 100644
--- a/patches/linux-3.6.10/0072-Fixed-issue-with-some-keyboards-giving-too-much-data.patch
+++ b/patches/linux-3.6.11/0072-Fixed-issue-with-some-keyboards-giving-too-much-data.patch
diff --git a/patches/linux-3.6.10/0073-Add-802.1q-vlan-module.patch b/patches/linux-3.6.11/0073-Add-802.1q-vlan-module.patch
index 375a778..375a778 100644
--- a/patches/linux-3.6.10/0073-Add-802.1q-vlan-module.patch
+++ b/patches/linux-3.6.11/0073-Add-802.1q-vlan-module.patch
diff --git a/patches/linux-3.6.10/0074-Add-interrupt-support-to-gpio-driver.-Thanks-Mrkva.patch b/patches/linux-3.6.11/0074-Add-interrupt-support-to-gpio-driver.-Thanks-Mrkva.patch
index 8ea98b3..8ea98b3 100644
--- a/patches/linux-3.6.10/0074-Add-interrupt-support-to-gpio-driver.-Thanks-Mrkva.patch
+++ b/patches/linux-3.6.11/0074-Add-interrupt-support-to-gpio-driver.-Thanks-Mrkva.patch
diff --git a/patches/linux-3.6.10/0075-Add-a-pm_power_off-function-that-resets-us-and-indic.patch b/patches/linux-3.6.11/0075-Add-a-pm_power_off-function-that-resets-us-and-indic.patch
index f305bf7..f305bf7 100644
--- a/patches/linux-3.6.10/0075-Add-a-pm_power_off-function-that-resets-us-and-indic.patch
+++ b/patches/linux-3.6.11/0075-Add-a-pm_power_off-function-that-resets-us-and-indic.patch
diff --git a/patches/linux-3.6.10/0076-Store-palette-info-where-GPU-can-see-it-so-8bpp-mode.patch b/patches/linux-3.6.11/0076-Store-palette-info-where-GPU-can-see-it-so-8bpp-mode.patch
index 53679b9..53679b9 100644
--- a/patches/linux-3.6.10/0076-Store-palette-info-where-GPU-can-see-it-so-8bpp-mode.patch
+++ b/patches/linux-3.6.11/0076-Store-palette-info-where-GPU-can-see-it-so-8bpp-mode.patch
diff --git a/patches/linux-3.6.10/0077-Avoid-blanking-console-when-not-in-palettised-mode.patch b/patches/linux-3.6.11/0077-Avoid-blanking-console-when-not-in-palettised-mode.patch
index dbf2312..dbf2312 100644
--- a/patches/linux-3.6.10/0077-Avoid-blanking-console-when-not-in-palettised-mode.patch
+++ b/patches/linux-3.6.11/0077-Avoid-blanking-console-when-not-in-palettised-mode.patch
diff --git a/patches/linux-3.6.10/0078-Add-mechanism-to-reduce-the-number-of-SOF-interrupts.patch b/patches/linux-3.6.11/0078-Add-mechanism-to-reduce-the-number-of-SOF-interrupts.patch
index 4269c15..4269c15 100644
--- a/patches/linux-3.6.10/0078-Add-mechanism-to-reduce-the-number-of-SOF-interrupts.patch
+++ b/patches/linux-3.6.11/0078-Add-mechanism-to-reduce-the-number-of-SOF-interrupts.patch
diff --git a/patches/linux-3.6.10/0079-Updating-dwc_otg-driver-to-fix-issue-releasing-pcm-s.patch b/patches/linux-3.6.11/0079-Updating-dwc_otg-driver-to-fix-issue-releasing-pcm-s.patch
index f1cc6d7..f1cc6d7 100644
--- a/patches/linux-3.6.10/0079-Updating-dwc_otg-driver-to-fix-issue-releasing-pcm-s.patch
+++ b/patches/linux-3.6.11/0079-Updating-dwc_otg-driver-to-fix-issue-releasing-pcm-s.patch
diff --git a/patches/linux-3.6.10/0080-Backport-of-Chris-Boot-s-i2c-and-spi-drivers.patch b/patches/linux-3.6.11/0080-Backport-of-Chris-Boot-s-i2c-and-spi-drivers.patch
index 88419ce..88419ce 100644
--- a/patches/linux-3.6.10/0080-Backport-of-Chris-Boot-s-i2c-and-spi-drivers.patch
+++ b/patches/linux-3.6.11/0080-Backport-of-Chris-Boot-s-i2c-and-spi-drivers.patch
diff --git a/patches/linux-3.6.10/0081-forgotten-files.patch b/patches/linux-3.6.11/0081-forgotten-files.patch
index 80a8699..80a8699 100644
--- a/patches/linux-3.6.10/0081-forgotten-files.patch
+++ b/patches/linux-3.6.11/0081-forgotten-files.patch
diff --git a/patches/linux-3.6.10/0082-Enable-I2C-and-SPI-modules-in-full-config.patch b/patches/linux-3.6.11/0082-Enable-I2C-and-SPI-modules-in-full-config.patch
index ce4c3ff..ce4c3ff 100644
--- a/patches/linux-3.6.10/0082-Enable-I2C-and-SPI-modules-in-full-config.patch
+++ b/patches/linux-3.6.11/0082-Enable-I2C-and-SPI-modules-in-full-config.patch
diff --git a/patches/linux-3.6.10/0083-Possible-fix-for-failure-to-boot-with-compressed-ker.patch b/patches/linux-3.6.11/0083-Possible-fix-for-failure-to-boot-with-compressed-ker.patch
index 9a10c35..9a10c35 100644
--- a/patches/linux-3.6.10/0083-Possible-fix-for-failure-to-boot-with-compressed-ker.patch
+++ b/patches/linux-3.6.11/0083-Possible-fix-for-failure-to-boot-with-compressed-ker.patch
diff --git a/patches/linux-3.6.10/0084-Another-try-at-fixing-compressed-kernel-booting.patch b/patches/linux-3.6.11/0084-Another-try-at-fixing-compressed-kernel-booting.patch
index 1ab0414..1ab0414 100644
--- a/patches/linux-3.6.10/0084-Another-try-at-fixing-compressed-kernel-booting.patch
+++ b/patches/linux-3.6.11/0084-Another-try-at-fixing-compressed-kernel-booting.patch
diff --git a/patches/linux-3.6.10/0085-Add-missing-UART0_CLOCK-from-last-commit.patch b/patches/linux-3.6.11/0085-Add-missing-UART0_CLOCK-from-last-commit.patch
index 6f824fa..6f824fa 100644
--- a/patches/linux-3.6.10/0085-Add-missing-UART0_CLOCK-from-last-commit.patch
+++ b/patches/linux-3.6.11/0085-Add-missing-UART0_CLOCK-from-last-commit.patch
diff --git a/patches/linux-3.6.10/0086-Change-to-add-SCSI-tape-support-as-loadable-modules-.patch b/patches/linux-3.6.11/0086-Change-to-add-SCSI-tape-support-as-loadable-modules-.patch
index d483def..d483def 100644
--- a/patches/linux-3.6.10/0086-Change-to-add-SCSI-tape-support-as-loadable-modules-.patch
+++ b/patches/linux-3.6.11/0086-Change-to-add-SCSI-tape-support-as-loadable-modules-.patch
diff --git a/patches/linux-3.6.10/0087-Add-temporary-fix-for-hang-when-quitting-X.patch b/patches/linux-3.6.11/0087-Add-temporary-fix-for-hang-when-quitting-X.patch
index 773e91d..773e91d 100644
--- a/patches/linux-3.6.10/0087-Add-temporary-fix-for-hang-when-quitting-X.patch
+++ b/patches/linux-3.6.11/0087-Add-temporary-fix-for-hang-when-quitting-X.patch
diff --git a/patches/linux-3.6.10/0088-Better-fix-for-quitting-X-hang.-Interrupted-mailbox-.patch b/patches/linux-3.6.11/0088-Better-fix-for-quitting-X-hang.-Interrupted-mailbox-.patch
index 8eb76a3..8eb76a3 100644
--- a/patches/linux-3.6.10/0088-Better-fix-for-quitting-X-hang.-Interrupted-mailbox-.patch
+++ b/patches/linux-3.6.11/0088-Better-fix-for-quitting-X-hang.-Interrupted-mailbox-.patch
diff --git a/patches/linux-3.6.10/0089-Add-sync_after_dma-module-parameter.patch b/patches/linux-3.6.11/0089-Add-sync_after_dma-module-parameter.patch
index 28e3730..28e3730 100644
--- a/patches/linux-3.6.10/0089-Add-sync_after_dma-module-parameter.patch
+++ b/patches/linux-3.6.11/0089-Add-sync_after_dma-module-parameter.patch
diff --git a/patches/linux-3.6.10/0090-Add-SPI_SPI_DEV-module.patch b/patches/linux-3.6.11/0090-Add-SPI_SPI_DEV-module.patch
index c60f63a..c60f63a 100644
--- a/patches/linux-3.6.10/0090-Add-SPI_SPI_DEV-module.patch
+++ b/patches/linux-3.6.11/0090-Add-SPI_SPI_DEV-module.patch
diff --git a/patches/linux-3.6.10/0091-Fix-var.width-var.height.-They-actually-mean-display.patch b/patches/linux-3.6.11/0091-Fix-var.width-var.height.-They-actually-mean-display.patch
index 66d10ae..66d10ae 100644
--- a/patches/linux-3.6.10/0091-Fix-var.width-var.height.-They-actually-mean-display.patch
+++ b/patches/linux-3.6.11/0091-Fix-var.width-var.height.-They-actually-mean-display.patch
diff --git a/patches/linux-3.6.10/0092-The-TIMER_PERIOD-should-be-calculated-using-the-time.patch b/patches/linux-3.6.11/0092-The-TIMER_PERIOD-should-be-calculated-using-the-time.patch
index 835ecec..835ecec 100644
--- a/patches/linux-3.6.10/0092-The-TIMER_PERIOD-should-be-calculated-using-the-time.patch
+++ b/patches/linux-3.6.11/0092-The-TIMER_PERIOD-should-be-calculated-using-the-time.patch
diff --git a/patches/linux-3.6.10/0093-update-bcmrpi_defconfig-with-various-user-requests.patch b/patches/linux-3.6.11/0093-update-bcmrpi_defconfig-with-various-user-requests.patch
index 0fec7de..0fec7de 100644
--- a/patches/linux-3.6.10/0093-update-bcmrpi_defconfig-with-various-user-requests.patch
+++ b/patches/linux-3.6.11/0093-update-bcmrpi_defconfig-with-various-user-requests.patch
diff --git a/patches/linux-3.6.10/0094-Possible-fix-for-USB-packets-going-missing.-Thank-gs.patch b/patches/linux-3.6.11/0094-Possible-fix-for-USB-packets-going-missing.-Thank-gs.patch
index b474871..b474871 100644
--- a/patches/linux-3.6.10/0094-Possible-fix-for-USB-packets-going-missing.-Thank-gs.patch
+++ b/patches/linux-3.6.11/0094-Possible-fix-for-USB-packets-going-missing.-Thank-gs.patch
diff --git a/patches/linux-3.6.10/0095-Revert-Possible-fix-for-USB-packets-going-missing.-T.patch b/patches/linux-3.6.11/0095-Revert-Possible-fix-for-USB-packets-going-missing.-T.patch
index 39fea4d..39fea4d 100644
--- a/patches/linux-3.6.10/0095-Revert-Possible-fix-for-USB-packets-going-missing.-T.patch
+++ b/patches/linux-3.6.11/0095-Revert-Possible-fix-for-USB-packets-going-missing.-T.patch
diff --git a/patches/linux-3.6.10/0096-dwc_common_port-remove-unused-cruft-with-onerous-dep.patch b/patches/linux-3.6.11/0096-dwc_common_port-remove-unused-cruft-with-onerous-dep.patch
index 9d167fe..9d167fe 100644
--- a/patches/linux-3.6.10/0096-dwc_common_port-remove-unused-cruft-with-onerous-dep.patch
+++ b/patches/linux-3.6.11/0096-dwc_common_port-remove-unused-cruft-with-onerous-dep.patch
diff --git a/patches/linux-3.6.10/0097-arm-remove-divdi3-it-s-not-necessary-at-all.patch b/patches/linux-3.6.11/0097-arm-remove-divdi3-it-s-not-necessary-at-all.patch
index c8c6830..c8c6830 100644
--- a/patches/linux-3.6.10/0097-arm-remove-divdi3-it-s-not-necessary-at-all.patch
+++ b/patches/linux-3.6.11/0097-arm-remove-divdi3-it-s-not-necessary-at-all.patch
diff --git a/patches/linux-3.6.10/0098-Remove-some-patch-backup-files.patch b/patches/linux-3.6.11/0098-Remove-some-patch-backup-files.patch
index 85f5c2d..85f5c2d 100644
--- a/patches/linux-3.6.10/0098-Remove-some-patch-backup-files.patch
+++ b/patches/linux-3.6.11/0098-Remove-some-patch-backup-files.patch
diff --git a/patches/linux-3.6.10/0099-mach-bcm2708-fix-mach-debug-macro.S-so-that-early-pr.patch b/patches/linux-3.6.11/0099-mach-bcm2708-fix-mach-debug-macro.S-so-that-early-pr.patch
index 54a14bd..54a14bd 100644
--- a/patches/linux-3.6.10/0099-mach-bcm2708-fix-mach-debug-macro.S-so-that-early-pr.patch
+++ b/patches/linux-3.6.11/0099-mach-bcm2708-fix-mach-debug-macro.S-so-that-early-pr.patch
diff --git a/patches/linux-3.6.10/0100-sound-arm-bcm2835.c-add-linux-module.h-include.patch b/patches/linux-3.6.11/0100-sound-arm-bcm2835.c-add-linux-module.h-include.patch
index 648cd96..648cd96 100644
--- a/patches/linux-3.6.10/0100-sound-arm-bcm2835.c-add-linux-module.h-include.patch
+++ b/patches/linux-3.6.11/0100-sound-arm-bcm2835.c-add-linux-module.h-include.patch
diff --git a/patches/linux-3.6.10/0101-vcos-add-linux-kernel.h-include.patch b/patches/linux-3.6.11/0101-vcos-add-linux-kernel.h-include.patch
index 722adb3..722adb3 100644
--- a/patches/linux-3.6.10/0101-vcos-add-linux-kernel.h-include.patch
+++ b/patches/linux-3.6.11/0101-vcos-add-linux-kernel.h-include.patch
diff --git a/patches/linux-3.6.10/0102-bcm2708-update-for-3.2-kernel.patch b/patches/linux-3.6.11/0102-bcm2708-update-for-3.2-kernel.patch
index e5ca868..e5ca868 100644
--- a/patches/linux-3.6.10/0102-bcm2708-update-for-3.2-kernel.patch
+++ b/patches/linux-3.6.11/0102-bcm2708-update-for-3.2-kernel.patch
diff --git a/patches/linux-3.6.10/0103-bcm2708-use-a-constant-SC_MULT-SC_SHIFT.patch b/patches/linux-3.6.11/0103-bcm2708-use-a-constant-SC_MULT-SC_SHIFT.patch
index e6fb65f..e6fb65f 100644
--- a/patches/linux-3.6.10/0103-bcm2708-use-a-constant-SC_MULT-SC_SHIFT.patch
+++ b/patches/linux-3.6.11/0103-bcm2708-use-a-constant-SC_MULT-SC_SHIFT.patch
diff --git a/patches/linux-3.6.10/0104-Sync-with-bootc-s-file.patch b/patches/linux-3.6.11/0104-Sync-with-bootc-s-file.patch
index 8d6b243..8d6b243 100644
--- a/patches/linux-3.6.10/0104-Sync-with-bootc-s-file.patch
+++ b/patches/linux-3.6.11/0104-Sync-with-bootc-s-file.patch
diff --git a/patches/linux-3.6.10/0105-sdhci-bcm2708-use-extension-FIFO-to-buffer-DMA-trans.patch b/patches/linux-3.6.11/0105-sdhci-bcm2708-use-extension-FIFO-to-buffer-DMA-trans.patch
index 4ae61d8..4ae61d8 100644
--- a/patches/linux-3.6.10/0105-sdhci-bcm2708-use-extension-FIFO-to-buffer-DMA-trans.patch
+++ b/patches/linux-3.6.11/0105-sdhci-bcm2708-use-extension-FIFO-to-buffer-DMA-trans.patch
diff --git a/patches/linux-3.6.10/0106-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch b/patches/linux-3.6.11/0106-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch
index ea16c1e..ea16c1e 100644
--- a/patches/linux-3.6.10/0106-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch
+++ b/patches/linux-3.6.11/0106-sdhci-bcm2708-use-multiblock-type-transfers-for-sing.patch
diff --git a/patches/linux-3.6.10/0107-Add-module-parameter-for-missing_status-quirk.-sdhci.patch b/patches/linux-3.6.11/0107-Add-module-parameter-for-missing_status-quirk.-sdhci.patch
index 74c83e5..74c83e5 100644
--- a/patches/linux-3.6.10/0107-Add-module-parameter-for-missing_status-quirk.-sdhci.patch
+++ b/patches/linux-3.6.11/0107-Add-module-parameter-for-missing_status-quirk.-sdhci.patch
diff --git a/patches/linux-3.6.10/0108-Some-fixed-for-ALSA.-Mute-and-volume-changing-should.patch b/patches/linux-3.6.11/0108-Some-fixed-for-ALSA.-Mute-and-volume-changing-should.patch
index a8a6419..a8a6419 100644
--- a/patches/linux-3.6.10/0108-Some-fixed-for-ALSA.-Mute-and-volume-changing-should.patch
+++ b/patches/linux-3.6.11/0108-Some-fixed-for-ALSA.-Mute-and-volume-changing-should.patch
diff --git a/patches/linux-3.6.10/0109-Fix-spinlock-recursion-in-sdhci-bcm2708.c.patch b/patches/linux-3.6.11/0109-Fix-spinlock-recursion-in-sdhci-bcm2708.c.patch
index 5bf0927..5bf0927 100644
--- a/patches/linux-3.6.10/0109-Fix-spinlock-recursion-in-sdhci-bcm2708.c.patch
+++ b/patches/linux-3.6.11/0109-Fix-spinlock-recursion-in-sdhci-bcm2708.c.patch
diff --git a/patches/linux-3.6.10/0110-Revert-Add-mechanism-to-reduce-the-number-of-SOF-int.patch b/patches/linux-3.6.11/0110-Revert-Add-mechanism-to-reduce-the-number-of-SOF-int.patch
index 9c9b9a9..9c9b9a9 100644
--- a/patches/linux-3.6.10/0110-Revert-Add-mechanism-to-reduce-the-number-of-SOF-int.patch
+++ b/patches/linux-3.6.11/0110-Revert-Add-mechanism-to-reduce-the-number-of-SOF-int.patch
diff --git a/patches/linux-3.6.10/0111-Enable-CONFIG_CRYPTO_XTS.patch b/patches/linux-3.6.11/0111-Enable-CONFIG_CRYPTO_XTS.patch
index 2566d3b..2566d3b 100644
--- a/patches/linux-3.6.10/0111-Enable-CONFIG_CRYPTO_XTS.patch
+++ b/patches/linux-3.6.11/0111-Enable-CONFIG_CRYPTO_XTS.patch
diff --git a/patches/linux-3.6.10/0112-Update-Synopsys-USB-OTG-driver-to-v2.94a-and-disable.patch b/patches/linux-3.6.11/0112-Update-Synopsys-USB-OTG-driver-to-v2.94a-and-disable.patch
index 505902b..c5020e2 100644
--- a/patches/linux-3.6.10/0112-Update-Synopsys-USB-OTG-driver-to-v2.94a-and-disable.patch
+++ b/patches/linux-3.6.11/0112-Update-Synopsys-USB-OTG-driver-to-v2.94a-and-disable.patch
@@ -9929,7 +9929,7 @@ index 3a7dd71..613c901
diff --git a/drivers/usb/host/dwc_common_port/dwc_cc.h b/drivers/usb/host/dwc_common_port/dwc_cc.h
old mode 100644
new mode 100755
-index 6b46419..6b2bbaf
+index 6b464191..6b2bbaf
--- a/drivers/usb/host/dwc_common_port/dwc_cc.h
+++ b/drivers/usb/host/dwc_common_port/dwc_cc.h
@@ -1,8 +1,8 @@
diff --git a/patches/linux-3.6.10/0113-Merged-in-microframe-scheduler-currently-disabled.-E.patch b/patches/linux-3.6.11/0113-Merged-in-microframe-scheduler-currently-disabled.-E.patch
index 921b30a..921b30a 100644
--- a/patches/linux-3.6.10/0113-Merged-in-microframe-scheduler-currently-disabled.-E.patch
+++ b/patches/linux-3.6.11/0113-Merged-in-microframe-scheduler-currently-disabled.-E.patch
diff --git a/patches/linux-3.6.10/0114-Make-microframe-schedule-patch-a-little-closer-to-de.patch b/patches/linux-3.6.11/0114-Make-microframe-schedule-patch-a-little-closer-to-de.patch
index c206501..c206501 100644
--- a/patches/linux-3.6.10/0114-Make-microframe-schedule-patch-a-little-closer-to-de.patch
+++ b/patches/linux-3.6.11/0114-Make-microframe-schedule-patch-a-little-closer-to-de.patch
diff --git a/patches/linux-3.6.10/0115-Remove-remove-documentation-from-the-source-tree.patch b/patches/linux-3.6.11/0115-Remove-remove-documentation-from-the-source-tree.patch
index 3f214b0..3f214b0 100644
--- a/patches/linux-3.6.10/0115-Remove-remove-documentation-from-the-source-tree.patch
+++ b/patches/linux-3.6.11/0115-Remove-remove-documentation-from-the-source-tree.patch
diff --git a/patches/linux-3.6.10/0116-Fix-for-broken-GPIO-with-3.2-kernel.patch b/patches/linux-3.6.11/0116-Fix-for-broken-GPIO-with-3.2-kernel.patch
index c6271db..c6271db 100644
--- a/patches/linux-3.6.10/0116-Fix-for-broken-GPIO-with-3.2-kernel.patch
+++ b/patches/linux-3.6.11/0116-Fix-for-broken-GPIO-with-3.2-kernel.patch
diff --git a/patches/linux-3.6.10/0117-Revert-Disable-IRQs-in-dwc_otg_hcd_qh_free-because-D.patch b/patches/linux-3.6.11/0117-Revert-Disable-IRQs-in-dwc_otg_hcd_qh_free-because-D.patch
index ce9c7db..ce9c7db 100644
--- a/patches/linux-3.6.10/0117-Revert-Disable-IRQs-in-dwc_otg_hcd_qh_free-because-D.patch
+++ b/patches/linux-3.6.11/0117-Revert-Disable-IRQs-in-dwc_otg_hcd_qh_free-because-D.patch
diff --git a/patches/linux-3.6.10/0118-Regenerate-defconfigs-for-udpated-kernel-verision.patch b/patches/linux-3.6.11/0118-Regenerate-defconfigs-for-udpated-kernel-verision.patch
index ce3957d..ce3957d 100644
--- a/patches/linux-3.6.10/0118-Regenerate-defconfigs-for-udpated-kernel-verision.patch
+++ b/patches/linux-3.6.11/0118-Regenerate-defconfigs-for-udpated-kernel-verision.patch
diff --git a/patches/linux-3.6.10/0119-Another-fix-for-10-second-hang-on-closing-sound-driv.patch b/patches/linux-3.6.11/0119-Another-fix-for-10-second-hang-on-closing-sound-driv.patch
index d7790e6..d7790e6 100644
--- a/patches/linux-3.6.10/0119-Another-fix-for-10-second-hang-on-closing-sound-driv.patch
+++ b/patches/linux-3.6.11/0119-Another-fix-for-10-second-hang-on-closing-sound-driv.patch
diff --git a/patches/linux-3.6.10/0120-amba-pl011-Don-t-send-a-character-during-startup.patch b/patches/linux-3.6.11/0120-amba-pl011-Don-t-send-a-character-during-startup.patch
index d8e922a..d8e922a 100644
--- a/patches/linux-3.6.10/0120-amba-pl011-Don-t-send-a-character-during-startup.patch
+++ b/patches/linux-3.6.11/0120-amba-pl011-Don-t-send-a-character-during-startup.patch
diff --git a/patches/linux-3.6.10/0121-Revert-Regenerate-defconfigs-for-udpated-kernel-veri.patch b/patches/linux-3.6.11/0121-Revert-Regenerate-defconfigs-for-udpated-kernel-veri.patch
index 1b54d67..1b54d67 100644
--- a/patches/linux-3.6.10/0121-Revert-Regenerate-defconfigs-for-udpated-kernel-veri.patch
+++ b/patches/linux-3.6.11/0121-Revert-Regenerate-defconfigs-for-udpated-kernel-veri.patch
diff --git a/patches/linux-3.6.10/0122-Regenerate-defconfigs-for-updated-kernel-verision-tr.patch b/patches/linux-3.6.11/0122-Regenerate-defconfigs-for-updated-kernel-verision-tr.patch
index 9b34995..9b34995 100644
--- a/patches/linux-3.6.10/0122-Regenerate-defconfigs-for-updated-kernel-verision-tr.patch
+++ b/patches/linux-3.6.11/0122-Regenerate-defconfigs-for-updated-kernel-verision-tr.patch
diff --git a/patches/linux-3.6.10/0123-Read-memory-size-for-vc_mem-through-mailbox-property.patch b/patches/linux-3.6.11/0123-Read-memory-size-for-vc_mem-through-mailbox-property.patch
index a012c3b..a012c3b 100644
--- a/patches/linux-3.6.10/0123-Read-memory-size-for-vc_mem-through-mailbox-property.patch
+++ b/patches/linux-3.6.11/0123-Read-memory-size-for-vc_mem-through-mailbox-property.patch
diff --git a/patches/linux-3.6.10/0124-Revert-amba-pl011-Don-t-send-a-character-during-star.patch b/patches/linux-3.6.11/0124-Revert-amba-pl011-Don-t-send-a-character-during-star.patch
index b53d461..b53d461 100644
--- a/patches/linux-3.6.10/0124-Revert-amba-pl011-Don-t-send-a-character-during-star.patch
+++ b/patches/linux-3.6.11/0124-Revert-amba-pl011-Don-t-send-a-character-during-star.patch
diff --git a/patches/linux-3.6.10/0125-Update-to-dwc_otg-3.00.-Seems-to-be-a-very-minor-upd.patch b/patches/linux-3.6.11/0125-Update-to-dwc_otg-3.00.-Seems-to-be-a-very-minor-upd.patch
index 40c1aca..40c1aca 100644
--- a/patches/linux-3.6.10/0125-Update-to-dwc_otg-3.00.-Seems-to-be-a-very-minor-upd.patch
+++ b/patches/linux-3.6.11/0125-Update-to-dwc_otg-3.00.-Seems-to-be-a-very-minor-upd.patch
diff --git a/patches/linux-3.6.10/0126-enabling-the-realtime-clock-1-wire-chip-DS1307-and-1.patch b/patches/linux-3.6.11/0126-enabling-the-realtime-clock-1-wire-chip-DS1307-and-1.patch
index 6fbd0d0..6fbd0d0 100644
--- a/patches/linux-3.6.10/0126-enabling-the-realtime-clock-1-wire-chip-DS1307-and-1.patch
+++ b/patches/linux-3.6.11/0126-enabling-the-realtime-clock-1-wire-chip-DS1307-and-1.patch
diff --git a/patches/linux-3.6.10/0127-Switch-of-tracing-options-in-kernel.-Costs-20-in-ipe.patch b/patches/linux-3.6.11/0127-Switch-of-tracing-options-in-kernel.-Costs-20-in-ipe.patch
index 59546e0..59546e0 100644
--- a/patches/linux-3.6.10/0127-Switch-of-tracing-options-in-kernel.-Costs-20-in-ipe.patch
+++ b/patches/linux-3.6.11/0127-Switch-of-tracing-options-in-kernel.-Costs-20-in-ipe.patch
diff --git a/patches/linux-3.6.10/0128-Turn-on-microframe_schedule-by-default.-Can-still-be.patch b/patches/linux-3.6.11/0128-Turn-on-microframe_schedule-by-default.-Can-still-be.patch
index 8743b26..8743b26 100644
--- a/patches/linux-3.6.10/0128-Turn-on-microframe_schedule-by-default.-Can-still-be.patch
+++ b/patches/linux-3.6.11/0128-Turn-on-microframe_schedule-by-default.-Can-still-be.patch
diff --git a/patches/linux-3.6.10/0129-Add-low-latency-mode-to-sdcard-driver.-Enable-with-s.patch b/patches/linux-3.6.11/0129-Add-low-latency-mode-to-sdcard-driver.-Enable-with-s.patch
index 0d348b0..0d348b0 100644
--- a/patches/linux-3.6.10/0129-Add-low-latency-mode-to-sdcard-driver.-Enable-with-s.patch
+++ b/patches/linux-3.6.11/0129-Add-low-latency-mode-to-sdcard-driver.-Enable-with-s.patch
diff --git a/patches/linux-3.6.10/0130-Fix-build-for-non-preempt-case.-Fix-warning.patch b/patches/linux-3.6.11/0130-Fix-build-for-non-preempt-case.-Fix-warning.patch
index 55e5dd7..55e5dd7 100644
--- a/patches/linux-3.6.10/0130-Fix-build-for-non-preempt-case.-Fix-warning.patch
+++ b/patches/linux-3.6.11/0130-Fix-build-for-non-preempt-case.-Fix-warning.patch
diff --git a/patches/linux-3.6.10/0131-Add-config-options-to-allow-iotop-to-run.patch b/patches/linux-3.6.11/0131-Add-config-options-to-allow-iotop-to-run.patch
index 7d814fc..7d814fc 100644
--- a/patches/linux-3.6.10/0131-Add-config-options-to-allow-iotop-to-run.patch
+++ b/patches/linux-3.6.11/0131-Add-config-options-to-allow-iotop-to-run.patch
diff --git a/patches/linux-3.6.10/0132-Fix-for-vmalloc-failure-with-modprobe-and-cutdown-ke.patch b/patches/linux-3.6.11/0132-Fix-for-vmalloc-failure-with-modprobe-and-cutdown-ke.patch
index 121ca5e..121ca5e 100644
--- a/patches/linux-3.6.10/0132-Fix-for-vmalloc-failure-with-modprobe-and-cutdown-ke.patch
+++ b/patches/linux-3.6.11/0132-Fix-for-vmalloc-failure-with-modprobe-and-cutdown-ke.patch
diff --git a/patches/linux-3.6.10/0133-Enable-low-latency-mode-by-default-in-sdcard-driver..patch b/patches/linux-3.6.11/0133-Enable-low-latency-mode-by-default-in-sdcard-driver..patch
index d69ecec..d69ecec 100644
--- a/patches/linux-3.6.10/0133-Enable-low-latency-mode-by-default-in-sdcard-driver..patch
+++ b/patches/linux-3.6.11/0133-Enable-low-latency-mode-by-default-in-sdcard-driver..patch
diff --git a/patches/linux-3.6.10/0134-Add-FIQ-patch-to-dwc_otg-driver.-Enable-with-dwc_otg.patch b/patches/linux-3.6.11/0134-Add-FIQ-patch-to-dwc_otg-driver.-Enable-with-dwc_otg.patch
index b0a85c2..b0a85c2 100644
--- a/patches/linux-3.6.10/0134-Add-FIQ-patch-to-dwc_otg-driver.-Enable-with-dwc_otg.patch
+++ b/patches/linux-3.6.11/0134-Add-FIQ-patch-to-dwc_otg-driver.-Enable-with-dwc_otg.patch
diff --git a/patches/linux-3.6.10/0135-Fix-typo.patch b/patches/linux-3.6.11/0135-Fix-typo.patch
index c33a89b..c33a89b 100644
--- a/patches/linux-3.6.10/0135-Fix-typo.patch
+++ b/patches/linux-3.6.11/0135-Fix-typo.patch
diff --git a/patches/linux-3.6.10/0136-Add-non-mainline-source-for-rtl8188cu-wireless-drive.patch b/patches/linux-3.6.11/0136-Add-non-mainline-source-for-rtl8188cu-wireless-drive.patch
index 4ca82f2..4ca82f2 100644
--- a/patches/linux-3.6.10/0136-Add-non-mainline-source-for-rtl8188cu-wireless-drive.patch
+++ b/patches/linux-3.6.11/0136-Add-non-mainline-source-for-rtl8188cu-wireless-drive.patch
diff --git a/patches/linux-3.6.10/0137-Add-verious-user-config-requests.patch b/patches/linux-3.6.11/0137-Add-verious-user-config-requests.patch
index daa698c..daa698c 100644
--- a/patches/linux-3.6.10/0137-Add-verious-user-config-requests.patch
+++ b/patches/linux-3.6.11/0137-Add-verious-user-config-requests.patch
diff --git a/patches/linux-3.6.10/0138-Don-t-believe-KDIR-is-required-when-building-as-part.patch b/patches/linux-3.6.11/0138-Don-t-believe-KDIR-is-required-when-building-as-part.patch
index a20e558..a20e558 100644
--- a/patches/linux-3.6.10/0138-Don-t-believe-KDIR-is-required-when-building-as-part.patch
+++ b/patches/linux-3.6.11/0138-Don-t-believe-KDIR-is-required-when-building-as-part.patch
diff --git a/patches/linux-3.6.10/0139-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch b/patches/linux-3.6.11/0139-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch
index 8dbf226..8dbf226 100644
--- a/patches/linux-3.6.10/0139-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch
+++ b/patches/linux-3.6.11/0139-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch
diff --git a/patches/linux-3.6.10/0140-Add-cpufreq-driver.patch b/patches/linux-3.6.11/0140-Add-cpufreq-driver.patch
index 9d65631..9d65631 100644
--- a/patches/linux-3.6.10/0140-Add-cpufreq-driver.patch
+++ b/patches/linux-3.6.11/0140-Add-cpufreq-driver.patch
diff --git a/patches/linux-3.6.10/0141-Tidy-up-debug-messages.patch b/patches/linux-3.6.11/0141-Tidy-up-debug-messages.patch
index aab7536..aab7536 100644
--- a/patches/linux-3.6.10/0141-Tidy-up-debug-messages.patch
+++ b/patches/linux-3.6.11/0141-Tidy-up-debug-messages.patch
diff --git a/patches/linux-3.6.10/0142-Enable-fiq-fix-by-default.-Add-NAK-holdoff-scheme.-E.patch b/patches/linux-3.6.11/0142-Enable-fiq-fix-by-default.-Add-NAK-holdoff-scheme.-E.patch
index 6b88b23..6b88b23 100644
--- a/patches/linux-3.6.10/0142-Enable-fiq-fix-by-default.-Add-NAK-holdoff-scheme.-E.patch
+++ b/patches/linux-3.6.11/0142-Enable-fiq-fix-by-default.-Add-NAK-holdoff-scheme.-E.patch
diff --git a/patches/linux-3.6.10/0143-Added-hwmon-thermal-driver-for-reporting-core-temper.patch b/patches/linux-3.6.11/0143-Added-hwmon-thermal-driver-for-reporting-core-temper.patch
index b4de9e9..b4de9e9 100644
--- a/patches/linux-3.6.10/0143-Added-hwmon-thermal-driver-for-reporting-core-temper.patch
+++ b/patches/linux-3.6.11/0143-Added-hwmon-thermal-driver-for-reporting-core-temper.patch
diff --git a/patches/linux-3.6.10/0144-Add-config-options-for-thermal-sensor-L2TP-RT2800USB.patch b/patches/linux-3.6.11/0144-Add-config-options-for-thermal-sensor-L2TP-RT2800USB.patch
index 575264d..575264d 100644
--- a/patches/linux-3.6.10/0144-Add-config-options-for-thermal-sensor-L2TP-RT2800USB.patch
+++ b/patches/linux-3.6.11/0144-Add-config-options-for-thermal-sensor-L2TP-RT2800USB.patch
diff --git a/patches/linux-3.6.10/0145-Remove-some-unnecessary-dmesg-output.patch b/patches/linux-3.6.11/0145-Remove-some-unnecessary-dmesg-output.patch
index abac942..abac942 100644
--- a/patches/linux-3.6.10/0145-Remove-some-unnecessary-dmesg-output.patch
+++ b/patches/linux-3.6.11/0145-Remove-some-unnecessary-dmesg-output.patch
diff --git a/patches/linux-3.6.10/0146-Switch-to-powersave-governor.-We-ll-enable-ondemand-.patch b/patches/linux-3.6.11/0146-Switch-to-powersave-governor.-We-ll-enable-ondemand-.patch
index 19aebba..19aebba 100644
--- a/patches/linux-3.6.10/0146-Switch-to-powersave-governor.-We-ll-enable-ondemand-.patch
+++ b/patches/linux-3.6.11/0146-Switch-to-powersave-governor.-We-ll-enable-ondemand-.patch
diff --git a/patches/linux-3.6.10/0147-Enable-multiple-ALSA-channels.patch b/patches/linux-3.6.11/0147-Enable-multiple-ALSA-channels.patch
index 145c1ea..145c1ea 100644
--- a/patches/linux-3.6.10/0147-Enable-multiple-ALSA-channels.patch
+++ b/patches/linux-3.6.11/0147-Enable-multiple-ALSA-channels.patch
diff --git a/patches/linux-3.6.10/0148-Remove-vcos-abstraction-layer-from-ALSA-driver.-Than.patch b/patches/linux-3.6.11/0148-Remove-vcos-abstraction-layer-from-ALSA-driver.-Than.patch
index 48a0dee..48a0dee 100644
--- a/patches/linux-3.6.10/0148-Remove-vcos-abstraction-layer-from-ALSA-driver.-Than.patch
+++ b/patches/linux-3.6.11/0148-Remove-vcos-abstraction-layer-from-ALSA-driver.-Than.patch
diff --git a/patches/linux-3.6.10/0149-Fix-Kernel-OOPS-in-SDHCI-on-boot-with-the-llm-patch..patch b/patches/linux-3.6.11/0149-Fix-Kernel-OOPS-in-SDHCI-on-boot-with-the-llm-patch..patch
index d7e8f07..d7e8f07 100644
--- a/patches/linux-3.6.10/0149-Fix-Kernel-OOPS-in-SDHCI-on-boot-with-the-llm-patch..patch
+++ b/patches/linux-3.6.11/0149-Fix-Kernel-OOPS-in-SDHCI-on-boot-with-the-llm-patch..patch
diff --git a/patches/linux-3.6.10/0150-Use-system-timer-for-udelay-so-unaffected-by-cpufreq.patch b/patches/linux-3.6.11/0150-Use-system-timer-for-udelay-so-unaffected-by-cpufreq.patch
index 0afef5d..0afef5d 100644
--- a/patches/linux-3.6.10/0150-Use-system-timer-for-udelay-so-unaffected-by-cpufreq.patch
+++ b/patches/linux-3.6.11/0150-Use-system-timer-for-udelay-so-unaffected-by-cpufreq.patch
diff --git a/patches/linux-3.6.10/0151-Move-__delay-function-into-assembly-to-get-accurate-.patch b/patches/linux-3.6.11/0151-Move-__delay-function-into-assembly-to-get-accurate-.patch
index 1b8a9b1..1b8a9b1 100644
--- a/patches/linux-3.6.10/0151-Move-__delay-function-into-assembly-to-get-accurate-.patch
+++ b/patches/linux-3.6.11/0151-Move-__delay-function-into-assembly-to-get-accurate-.patch
diff --git a/patches/linux-3.6.10/0152-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch b/patches/linux-3.6.11/0152-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch
index 61ede15..61ede15 100644
--- a/patches/linux-3.6.10/0152-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch
+++ b/patches/linux-3.6.11/0152-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch
diff --git a/patches/linux-3.6.10/0153-Allow-the-number-of-cycles-delay-between-sdcard-peri.patch b/patches/linux-3.6.11/0153-Allow-the-number-of-cycles-delay-between-sdcard-peri.patch
index e0df1d8..e0df1d8 100644
--- a/patches/linux-3.6.10/0153-Allow-the-number-of-cycles-delay-between-sdcard-peri.patch
+++ b/patches/linux-3.6.11/0153-Allow-the-number-of-cycles-delay-between-sdcard-peri.patch
diff --git a/patches/linux-3.6.10/0154-Fix-vc-mem-by-using-module-parameters.patch b/patches/linux-3.6.11/0154-Fix-vc-mem-by-using-module-parameters.patch
index f7038d8..f7038d8 100644
--- a/patches/linux-3.6.10/0154-Fix-vc-mem-by-using-module-parameters.patch
+++ b/patches/linux-3.6.11/0154-Fix-vc-mem-by-using-module-parameters.patch
diff --git a/patches/linux-3.6.10/0155-Move-to-version-5-of-VCHIQ.-Note-this-requires-a-cor.patch b/patches/linux-3.6.11/0155-Move-to-version-5-of-VCHIQ.-Note-this-requires-a-cor.patch
index 59bcdd3..59bcdd3 100644
--- a/patches/linux-3.6.10/0155-Move-to-version-5-of-VCHIQ.-Note-this-requires-a-cor.patch
+++ b/patches/linux-3.6.11/0155-Move-to-version-5-of-VCHIQ.-Note-this-requires-a-cor.patch
diff --git a/patches/linux-3.6.10/0156-Add-in-missed-vchiq-files.patch b/patches/linux-3.6.11/0156-Add-in-missed-vchiq-files.patch
index 2f9e1a4..2f9e1a4 100644
--- a/patches/linux-3.6.10/0156-Add-in-missed-vchiq-files.patch
+++ b/patches/linux-3.6.11/0156-Add-in-missed-vchiq-files.patch
diff --git a/patches/linux-3.6.10/0157-Make-vchiq-enabled-by-default.-Tidy-Kconfig-file.patch b/patches/linux-3.6.11/0157-Make-vchiq-enabled-by-default.-Tidy-Kconfig-file.patch
index 2993506..2993506 100644
--- a/patches/linux-3.6.10/0157-Make-vchiq-enabled-by-default.-Tidy-Kconfig-file.patch
+++ b/patches/linux-3.6.11/0157-Make-vchiq-enabled-by-default.-Tidy-Kconfig-file.patch
diff --git a/patches/linux-3.6.10/0158-Support-dummy-vc-mem-ioctl-used-by-vcdbg.patch b/patches/linux-3.6.11/0158-Support-dummy-vc-mem-ioctl-used-by-vcdbg.patch
index 7549236..7549236 100644
--- a/patches/linux-3.6.10/0158-Support-dummy-vc-mem-ioctl-used-by-vcdbg.patch
+++ b/patches/linux-3.6.11/0158-Support-dummy-vc-mem-ioctl-used-by-vcdbg.patch
diff --git a/patches/linux-3.6.10/0159-Remove-BUG-call-from-vchiq-that-is-trigger-when-alsa.patch b/patches/linux-3.6.11/0159-Remove-BUG-call-from-vchiq-that-is-trigger-when-alsa.patch
index d6794cd..d6794cd 100644
--- a/patches/linux-3.6.10/0159-Remove-BUG-call-from-vchiq-that-is-trigger-when-alsa.patch
+++ b/patches/linux-3.6.11/0159-Remove-BUG-call-from-vchiq-that-is-trigger-when-alsa.patch
diff --git a/patches/linux-3.6.10/0160-Fix-up-issues-with-rebase.patch b/patches/linux-3.6.11/0160-Fix-up-issues-with-rebase.patch
index a689c59..a689c59 100644
--- a/patches/linux-3.6.10/0160-Fix-up-issues-with-rebase.patch
+++ b/patches/linux-3.6.11/0160-Fix-up-issues-with-rebase.patch
diff --git a/patches/linux-3.6.10/0161-Add-vc_cma-driver-to-enable-use-of-CMA.patch b/patches/linux-3.6.11/0161-Add-vc_cma-driver-to-enable-use-of-CMA.patch
index afc7d79..afc7d79 100644
--- a/patches/linux-3.6.10/0161-Add-vc_cma-driver-to-enable-use-of-CMA.patch
+++ b/patches/linux-3.6.11/0161-Add-vc_cma-driver-to-enable-use-of-CMA.patch
diff --git a/patches/linux-3.6.10/0162-Add-missing-CMA-files.patch b/patches/linux-3.6.11/0162-Add-missing-CMA-files.patch
index 72fc13c..72fc13c 100644
--- a/patches/linux-3.6.10/0162-Add-missing-CMA-files.patch
+++ b/patches/linux-3.6.11/0162-Add-missing-CMA-files.patch
diff --git a/patches/linux-3.6.10/0163-Fix-reboot-with-new-restart-method-of-machine-driver.patch b/patches/linux-3.6.11/0163-Fix-reboot-with-new-restart-method-of-machine-driver.patch
index f864d60..f864d60 100644
--- a/patches/linux-3.6.10/0163-Fix-reboot-with-new-restart-method-of-machine-driver.patch
+++ b/patches/linux-3.6.11/0163-Fix-reboot-with-new-restart-method-of-machine-driver.patch
diff --git a/patches/linux-3.6.10/0164-smsc95xx-sleep-before-read-for-lengthy-operations.patch b/patches/linux-3.6.11/0164-smsc95xx-sleep-before-read-for-lengthy-operations.patch
index eb7b4d8..eb7b4d8 100644
--- a/patches/linux-3.6.10/0164-smsc95xx-sleep-before-read-for-lengthy-operations.patch
+++ b/patches/linux-3.6.11/0164-smsc95xx-sleep-before-read-for-lengthy-operations.patch
diff --git a/patches/linux-3.6.10/0165-smsc95xx-remove-unnecessary-variables.patch b/patches/linux-3.6.11/0165-smsc95xx-remove-unnecessary-variables.patch
index d45ee58..d45ee58 100644
--- a/patches/linux-3.6.10/0165-smsc95xx-remove-unnecessary-variables.patch
+++ b/patches/linux-3.6.11/0165-smsc95xx-remove-unnecessary-variables.patch
diff --git a/patches/linux-3.6.10/0166-smsc95xx-check-return-code-from-control-messages.patch b/patches/linux-3.6.11/0166-smsc95xx-check-return-code-from-control-messages.patch
index d194d98..d194d98 100644
--- a/patches/linux-3.6.10/0166-smsc95xx-check-return-code-from-control-messages.patch
+++ b/patches/linux-3.6.11/0166-smsc95xx-check-return-code-from-control-messages.patch
diff --git a/patches/linux-3.6.10/0167-smsc95xx-fix-resume-when-usb-device-is-reset.patch b/patches/linux-3.6.11/0167-smsc95xx-fix-resume-when-usb-device-is-reset.patch
index 9284a08..9284a08 100644
--- a/patches/linux-3.6.10/0167-smsc95xx-fix-resume-when-usb-device-is-reset.patch
+++ b/patches/linux-3.6.11/0167-smsc95xx-fix-resume-when-usb-device-is-reset.patch
diff --git a/patches/linux-3.6.10/0168-smsc95xx-enable-power-saving-mode-during-system-susp.patch b/patches/linux-3.6.11/0168-smsc95xx-enable-power-saving-mode-during-system-susp.patch
index c4c17df..c4c17df 100644
--- a/patches/linux-3.6.10/0168-smsc95xx-enable-power-saving-mode-during-system-susp.patch
+++ b/patches/linux-3.6.11/0168-smsc95xx-enable-power-saving-mode-during-system-susp.patch
diff --git a/patches/linux-3.6.10/0169-smsc95xx-add-wol-magic-packet-support.patch b/patches/linux-3.6.11/0169-smsc95xx-add-wol-magic-packet-support.patch
index 6fc371a..6fc371a 100644
--- a/patches/linux-3.6.10/0169-smsc95xx-add-wol-magic-packet-support.patch
+++ b/patches/linux-3.6.11/0169-smsc95xx-add-wol-magic-packet-support.patch
diff --git a/patches/linux-3.6.10/0170-smsc95xx-fix-tx-checksum-offload-for-big-endian.patch b/patches/linux-3.6.11/0170-smsc95xx-fix-tx-checksum-offload-for-big-endian.patch
index bf2ffa9..bf2ffa9 100644
--- a/patches/linux-3.6.10/0170-smsc95xx-fix-tx-checksum-offload-for-big-endian.patch
+++ b/patches/linux-3.6.11/0170-smsc95xx-fix-tx-checksum-offload-for-big-endian.patch
diff --git a/patches/linux-3.6.10/0171-Update-to-latest-vchiq.patch b/patches/linux-3.6.11/0171-Update-to-latest-vchiq.patch
index d1365b9..d1365b9 100644
--- a/patches/linux-3.6.10/0171-Update-to-latest-vchiq.patch
+++ b/patches/linux-3.6.11/0171-Update-to-latest-vchiq.patch
diff --git a/patches/linux-3.6.10/0172-Make-sure-we-wait-for-the-reset-to-finish.patch b/patches/linux-3.6.11/0172-Make-sure-we-wait-for-the-reset-to-finish.patch
index 0fce113..0fce113 100644
--- a/patches/linux-3.6.10/0172-Make-sure-we-wait-for-the-reset-to-finish.patch
+++ b/patches/linux-3.6.11/0172-Make-sure-we-wait-for-the-reset-to-finish.patch
diff --git a/patches/linux-3.6.10/0173-Add-missing-pctv452e-DVB-module.patch b/patches/linux-3.6.11/0173-Add-missing-pctv452e-DVB-module.patch
index 01f2cbb..01f2cbb 100644
--- a/patches/linux-3.6.10/0173-Add-missing-pctv452e-DVB-module.patch
+++ b/patches/linux-3.6.11/0173-Add-missing-pctv452e-DVB-module.patch
diff --git a/patches/linux-3.6.10/0174-Add-Simon-Hall-s-dma-helper-module-useful-in-future-.patch b/patches/linux-3.6.11/0174-Add-Simon-Hall-s-dma-helper-module-useful-in-future-.patch
index 5bdb234..5bdb234 100644
--- a/patches/linux-3.6.10/0174-Add-Simon-Hall-s-dma-helper-module-useful-in-future-.patch
+++ b/patches/linux-3.6.11/0174-Add-Simon-Hall-s-dma-helper-module-useful-in-future-.patch
diff --git a/patches/linux-3.6.10/0175-Add-missing-options-from-more-recent-3.2.27-kernel-c.patch b/patches/linux-3.6.11/0175-Add-missing-options-from-more-recent-3.2.27-kernel-c.patch
index 05aa8f1..05aa8f1 100644
--- a/patches/linux-3.6.10/0175-Add-missing-options-from-more-recent-3.2.27-kernel-c.patch
+++ b/patches/linux-3.6.11/0175-Add-missing-options-from-more-recent-3.2.27-kernel-c.patch
diff --git a/patches/linux-3.6.10/0176-lirc-added-support-for-RaspberryPi-GPIO.patch b/patches/linux-3.6.11/0176-lirc-added-support-for-RaspberryPi-GPIO.patch
index decd167..decd167 100644
--- a/patches/linux-3.6.10/0176-lirc-added-support-for-RaspberryPi-GPIO.patch
+++ b/patches/linux-3.6.11/0176-lirc-added-support-for-RaspberryPi-GPIO.patch
diff --git a/patches/linux-3.6.10/0177-Enable-building-of-lirc-rpi.patch b/patches/linux-3.6.11/0177-Enable-building-of-lirc-rpi.patch
index 9c0f6f5..9c0f6f5 100644
--- a/patches/linux-3.6.10/0177-Enable-building-of-lirc-rpi.patch
+++ b/patches/linux-3.6.11/0177-Enable-building-of-lirc-rpi.patch
diff --git a/patches/linux-3.6.10/0178-Update-list-of-modules-build-with-next-kernel.-Fixes.patch b/patches/linux-3.6.11/0178-Update-list-of-modules-build-with-next-kernel.-Fixes.patch
index e898f3f..e898f3f 100644
--- a/patches/linux-3.6.10/0178-Update-list-of-modules-build-with-next-kernel.-Fixes.patch
+++ b/patches/linux-3.6.11/0178-Update-list-of-modules-build-with-next-kernel.-Fixes.patch
diff --git a/patches/linux-3.6.10/0179-Avoid-the-high-load-and-block-task-messages-by-start.patch b/patches/linux-3.6.11/0179-Avoid-the-high-load-and-block-task-messages-by-start.patch
index 7957eaf..7957eaf 100644
--- a/patches/linux-3.6.10/0179-Avoid-the-high-load-and-block-task-messages-by-start.patch
+++ b/patches/linux-3.6.11/0179-Avoid-the-high-load-and-block-task-messages-by-start.patch
diff --git a/patches/linux-3.6.10/0180-Enable-CMA-in-defconfig.patch b/patches/linux-3.6.11/0180-Enable-CMA-in-defconfig.patch
index 38ad511..38ad511 100644
--- a/patches/linux-3.6.10/0180-Enable-CMA-in-defconfig.patch
+++ b/patches/linux-3.6.11/0180-Enable-CMA-in-defconfig.patch
diff --git a/patches/linux-3.6.10/0181-Avoid-undefined-symbol-in-radio-shark.ko.patch b/patches/linux-3.6.11/0181-Avoid-undefined-symbol-in-radio-shark.ko.patch
index fbd3aa5..fbd3aa5 100644
--- a/patches/linux-3.6.10/0181-Avoid-undefined-symbol-in-radio-shark.ko.patch
+++ b/patches/linux-3.6.11/0181-Avoid-undefined-symbol-in-radio-shark.ko.patch
diff --git a/patches/linux-3.6.10/0182-Allow-mailbox-driver-to-be-called-from-user-code-tho.patch b/patches/linux-3.6.11/0182-Allow-mailbox-driver-to-be-called-from-user-code-tho.patch
index 701203e..701203e 100644
--- a/patches/linux-3.6.10/0182-Allow-mailbox-driver-to-be-called-from-user-code-tho.patch
+++ b/patches/linux-3.6.11/0182-Allow-mailbox-driver-to-be-called-from-user-code-tho.patch
diff --git a/patches/linux-3.6.10/0183-usbnet-ratelimit-kevent-may-have-been-dropped-warnin.patch b/patches/linux-3.6.11/0183-usbnet-ratelimit-kevent-may-have-been-dropped-warnin.patch
index 0d4e622..0d4e622 100644
--- a/patches/linux-3.6.10/0183-usbnet-ratelimit-kevent-may-have-been-dropped-warnin.patch
+++ b/patches/linux-3.6.11/0183-usbnet-ratelimit-kevent-may-have-been-dropped-warnin.patch
diff --git a/patches/linux-3.6.10/0184-Lazy-CRC-quirk-Implemented-retrying-mechanisms-for-S.patch b/patches/linux-3.6.11/0184-Lazy-CRC-quirk-Implemented-retrying-mechanisms-for-S.patch
index ff3b024..ff3b024 100644
--- a/patches/linux-3.6.10/0184-Lazy-CRC-quirk-Implemented-retrying-mechanisms-for-S.patch
+++ b/patches/linux-3.6.11/0184-Lazy-CRC-quirk-Implemented-retrying-mechanisms-for-S.patch
diff --git a/patches/linux-3.6.10/0185-Leave-missing_status-enabled-for-now.patch b/patches/linux-3.6.11/0185-Leave-missing_status-enabled-for-now.patch
index edd28da..edd28da 100644
--- a/patches/linux-3.6.10/0185-Leave-missing_status-enabled-for-now.patch
+++ b/patches/linux-3.6.11/0185-Leave-missing_status-enabled-for-now.patch
diff --git a/patches/linux-3.6.10/0186-Update-to-latest-cma-and-vchiq.patch b/patches/linux-3.6.11/0186-Update-to-latest-cma-and-vchiq.patch
index d44ef04..d44ef04 100644
--- a/patches/linux-3.6.10/0186-Update-to-latest-cma-and-vchiq.patch
+++ b/patches/linux-3.6.11/0186-Update-to-latest-cma-and-vchiq.patch
diff --git a/patches/linux-3.6.10/0187-Allow-CMA-pool-to-be-shared-with-other-drivers.patch b/patches/linux-3.6.11/0187-Allow-CMA-pool-to-be-shared-with-other-drivers.patch
index 6cf8839..6cf8839 100644
--- a/patches/linux-3.6.10/0187-Allow-CMA-pool-to-be-shared-with-other-drivers.patch
+++ b/patches/linux-3.6.11/0187-Allow-CMA-pool-to-be-shared-with-other-drivers.patch
diff --git a/patches/linux-3.6.10/0188-Add-CoDel-network-scheduling.-Add-HIDRAW.-Remove-CMA.patch b/patches/linux-3.6.11/0188-Add-CoDel-network-scheduling.-Add-HIDRAW.-Remove-CMA.patch
index 2c9ecde..2c9ecde 100644
--- a/patches/linux-3.6.10/0188-Add-CoDel-network-scheduling.-Add-HIDRAW.-Remove-CMA.patch
+++ b/patches/linux-3.6.11/0188-Add-CoDel-network-scheduling.-Add-HIDRAW.-Remove-CMA.patch
diff --git a/patches/linux-3.6.10/0189-Default-to-dwc_otp.lpm_enable-0.patch b/patches/linux-3.6.11/0189-Default-to-dwc_otp.lpm_enable-0.patch
index 01cd3b3..01cd3b3 100644
--- a/patches/linux-3.6.10/0189-Default-to-dwc_otp.lpm_enable-0.patch
+++ b/patches/linux-3.6.11/0189-Default-to-dwc_otp.lpm_enable-0.patch
diff --git a/patches/linux-3.6.10/0190-Add-CONFIG_CFG80211_WEXT-and-CONFIG_MMC_SPI.patch b/patches/linux-3.6.11/0190-Add-CONFIG_CFG80211_WEXT-and-CONFIG_MMC_SPI.patch
index d0aa8a5..d0aa8a5 100644
--- a/patches/linux-3.6.10/0190-Add-CONFIG_CFG80211_WEXT-and-CONFIG_MMC_SPI.patch
+++ b/patches/linux-3.6.11/0190-Add-CONFIG_CFG80211_WEXT-and-CONFIG_MMC_SPI.patch
diff --git a/patches/linux-3.6.10/0191-Increase-default-coherent-pool-so-vchiq-starts-up.patch b/patches/linux-3.6.11/0191-Increase-default-coherent-pool-so-vchiq-starts-up.patch
index 0adaa73..0adaa73 100644
--- a/patches/linux-3.6.10/0191-Increase-default-coherent-pool-so-vchiq-starts-up.patch
+++ b/patches/linux-3.6.11/0191-Increase-default-coherent-pool-so-vchiq-starts-up.patch
diff --git a/patches/linux-3.6.10/0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch b/patches/linux-3.6.11/0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch
index 29a4f9a..29a4f9a 100644
--- a/patches/linux-3.6.10/0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch
+++ b/patches/linux-3.6.11/0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch
diff --git a/patches/linux-3.6.10/0193-Bluetooth-Increase-HCI-command-tx-timeout.patch b/patches/linux-3.6.11/0193-Bluetooth-Increase-HCI-command-tx-timeout.patch
index 2feed76..2feed76 100644
--- a/patches/linux-3.6.10/0193-Bluetooth-Increase-HCI-command-tx-timeout.patch
+++ b/patches/linux-3.6.11/0193-Bluetooth-Increase-HCI-command-tx-timeout.patch
diff --git a/patches/linux-3.6.10/0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch b/patches/linux-3.6.11/0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch
index 67bee16..67bee16 100644
--- a/patches/linux-3.6.10/0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch
+++ b/patches/linux-3.6.11/0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch
diff --git a/patches/linux-3.6.11/0195-Update-to-Simon-s-latest-dmaer-module.patch b/patches/linux-3.6.11/0195-Update-to-Simon-s-latest-dmaer-module.patch
new file mode 100644
index 0000000..e0d9dca
--- /dev/null
+++ b/patches/linux-3.6.11/0195-Update-to-Simon-s-latest-dmaer-module.patch
@@ -0,0 +1,1201 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Wed, 19 Dec 2012 22:38:45 +0000
+Subject: [PATCH] Update to Simon's latest dmaer module
+
+---
+ arch/arm/mach-bcm2708/Makefile | 4 +-
+ arch/arm/mach-bcm2708/dmaer.c | 376 ++++++++++++++++--------
+ arch/arm/mach-bcm2708/include/mach/vc_support.h | 69 +++++
+ arch/arm/mach-bcm2708/vc_support.c | 319 ++++++++++++++++++++
+ 4 files changed, 645 insertions(+), 123 deletions(-)
+ create mode 100755 arch/arm/mach-bcm2708/include/mach/vc_support.h
+ create mode 100755 arch/arm/mach-bcm2708/vc_support.c
+
+diff --git a/arch/arm/mach-bcm2708/Makefile b/arch/arm/mach-bcm2708/Makefile
+index af4a6ee..b180e06 100644
+--- a/arch/arm/mach-bcm2708/Makefile
++++ b/arch/arm/mach-bcm2708/Makefile
+@@ -5,5 +5,7 @@
+ obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o delay.o
+ obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o
+ obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
+-obj-$(CONFIG_BCM2708_DMAER) += dmaer.o
++
++obj-$(CONFIG_BCM2708_DMAER) += dmaer_master.o
++dmaer_master-objs := dmaer.o vc_support.o
+
+diff --git a/arch/arm/mach-bcm2708/dmaer.c b/arch/arm/mach-bcm2708/dmaer.c
+index 1b53ff2..9063874 100755
+--- a/arch/arm/mach-bcm2708/dmaer.c
++++ b/arch/arm/mach-bcm2708/dmaer.c
+@@ -11,6 +11,7 @@
+ #include <linux/device.h>
+ #include <linux/jiffies.h>
+ #include <linux/timex.h>
++#include <linux/dma-mapping.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/atomic.h>
+@@ -18,10 +19,30 @@
+ #include <asm/io.h>
+
+ #include <mach/dma.h>
++#include <mach/vc_support.h>
+
+-MODULE_LICENSE("Dual BSD/GPL");
++#ifdef ECLIPSE_IGNORE
++
++#define __user
++#define __init
++#define __exit
++#define __iomem
++#define KERN_DEBUG
++#define KERN_ERR
++#define KERN_WARNING
++#define KERN_INFO
++#define _IOWR(a, b, c) b
++#define _IOW(a, b, c) b
++#define _IO(a, b) b
++
++#endif
+
+-//#define inline
++//#define inline
++
++#define PRINTK(args...) printk(args)
++//#define PRINTK_VERBOSE(args...) printk(args)
++//#define PRINTK(args...)
++#define PRINTK_VERBOSE(args...)
+
+ /***** TYPES ****/
+ #define PAGES_PER_LIST 500
+@@ -39,6 +60,7 @@ struct VmaPageList
+ struct PageList *m_pPageTail;
+ unsigned int m_refCount;
+ };
++
+ struct DmaControlBlock
+ {
+ unsigned int m_transferInfo;
+@@ -78,6 +100,15 @@ struct DmaControlBlock
+ //set the address range through which the user address is assumed to already by a physical address
+ #define DMA_SET_MIN_PHYS _IOW(DMA_MAGIC, 7, unsigned long)
+ #define DMA_SET_MAX_PHYS _IOW(DMA_MAGIC, 8, unsigned long)
++#define DMA_SET_PHYS_OFFSET _IOW(DMA_MAGIC, 9, unsigned long)
++
++//used to define the size for the CMA-based allocation *in pages*, can only be done once once the file is opened
++#define DMA_CMA_SET_SIZE _IOW(DMA_MAGIC, 10, unsigned long)
++
++//used to get the version of the module, to test for a capability
++#define DMA_GET_VERSION _IO(DMA_MAGIC, 99)
++
++#define VERSION_NUMBER 1
+
+ #define VIRT_TO_BUS_CACHE_SIZE 8
+
+@@ -89,19 +120,24 @@ static ssize_t Read(struct file *pFile, char __user *pUser, size_t count, loff_t
+ static int Mmap(struct file *pFile, struct vm_area_struct *pVma);
+
+ /***** VMA OPS ****/
+-static void VmaOpen(struct vm_area_struct *pVma);
+-static void VmaClose(struct vm_area_struct *pVma);
+-static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf);
++static void VmaOpen4k(struct vm_area_struct *pVma);
++static void VmaClose4k(struct vm_area_struct *pVma);
++static int VmaFault4k(struct vm_area_struct *pVma, struct vm_fault *pVmf);
++
++/**** DMA PROTOTYPES */
++static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *pUserCB, int *pError);
++static int DmaKick(struct DmaControlBlock __user *pUserCB);
++static void DmaWaitAll(void);
+
+ /**** GENERIC ****/
+ static int __init dmaer_init(void);
+ static void __exit dmaer_exit(void);
+
+ /*** OPS ***/
+-static struct vm_operations_struct g_vmOps = {
+- .open = VmaOpen,
+- .close = VmaClose,
+- .fault = VmaFault,
++static struct vm_operations_struct g_vmOps4k = {
++ .open = VmaOpen4k,
++ .close = VmaClose4k,
++ .fault = VmaFault4k,
+ };
+
+ static struct file_operations g_fOps = {
+@@ -117,13 +153,23 @@ static struct file_operations g_fOps = {
+
+ /***** GLOBALS ******/
+ static dev_t g_majorMinor;
+-static atomic_t g_oneLock = ATOMIC_INIT(1);
++
++//tracking usage of the two files
++static atomic_t g_oneLock4k = ATOMIC_INIT(1);
++
++//device operations
+ static struct cdev g_cDev;
+ static int g_trackedPages = 0;
++
++//dma control
+ static unsigned int *g_pDmaChanBase;
+ static int g_dmaIrq;
+ static int g_dmaChan;
+
++//cma allocation
++static int g_cmaHandle;
++
++//user virtual to bus address translation acceleration
+ static unsigned long g_virtAddr[VIRT_TO_BUS_CACHE_SIZE];
+ static unsigned long g_busAddr[VIRT_TO_BUS_CACHE_SIZE];
+ static unsigned long g_cbVirtAddr;
+@@ -132,8 +178,9 @@ static int g_cacheInsertAt;
+ static int g_cacheHit, g_cacheMiss;
+
+ //off by default
+-static void __user *g_pMinPhys = (void __user *)-1;
+-static void __user *g_pMaxPhys = (void __user *)0;
++static void __user *g_pMinPhys;
++static void __user *g_pMaxPhys;
++static unsigned long g_physOffset;
+
+ /****** CACHE OPERATIONS ********/
+ static inline void FlushAddrCache(void)
+@@ -165,6 +212,9 @@ static inline void __iomem *UserVirtualToBus(void __user *pUser)
+ if (mapped <= 0) //error
+ return 0;
+
++ PRINTK_VERBOSE(KERN_DEBUG "user virtual %p arm phys %p bus %p\n",
++ pUser, page_address(pPage), (void __iomem *)__virt_to_bus(page_address(pPage)));
++
+ //get the arm physical address
+ phys = page_address(pPage) + offset_in_page(pUser);
+ page_cache_release(pPage);
+@@ -211,8 +261,8 @@ static inline void __iomem *UserVirtualToBusViaCache(void __user *pUser)
+
+ if (pUser >= g_pMinPhys && pUser < g_pMaxPhys)
+ {
+-// printk(KERN_DEBUG "user->phys passthrough on %p\n", pUser);
+- return (void __iomem *)__virt_to_bus(pUser);
++ PRINTK_VERBOSE(KERN_DEBUG "user->phys passthrough on %p\n", pUser);
++ return (void __iomem *)((unsigned long)pUser + g_physOffset);
+ }
+
+ //check the cache for our entry
+@@ -246,25 +296,57 @@ static inline void __iomem *UserVirtualToBusViaCache(void __user *pUser)
+ /***** FILE OPERATIONS ****/
+ static int Open(struct inode *pInode, struct file *pFile)
+ {
+- printk(KERN_DEBUG "file opening\n");
++ PRINTK(KERN_DEBUG "file opening: %d/%d\n", imajor(pInode), iminor(pInode));
+
+- //only one at a time
+- if (!atomic_dec_and_test(&g_oneLock))
++ //check which device we are
++ if (iminor(pInode) == 0) //4k
+ {
+- atomic_inc(&g_oneLock);
+- return -EBUSY;
++ //only one at a time
++ if (!atomic_dec_and_test(&g_oneLock4k))
++ {
++ atomic_inc(&g_oneLock4k);
++ return -EBUSY;
++ }
+ }
++ else
++ return -EINVAL;
+
++ //todo there will be trouble if two different processes open the files
++
++ //reset after any file is opened
++ g_pMinPhys = (void __user *)-1;
++ g_pMaxPhys = (void __user *)0;
++ g_physOffset = 0;
++ g_cmaHandle = 0;
++
+ return 0;
+ }
+
+ static int Release(struct inode *pInode, struct file *pFile)
+ {
+- printk(KERN_DEBUG "file closing, %d pages tracked\n", g_trackedPages);
++ PRINTK(KERN_DEBUG "file closing, %d pages tracked\n", g_trackedPages);
+ if (g_trackedPages)
+- printk(KERN_ERR "we\'re leaking memory!\n");
++ PRINTK(KERN_ERR "we\'re leaking memory!\n");
+
+- atomic_inc(&g_oneLock);
++ //wait for any dmas to finish
++ DmaWaitAll();
++
++ //free this memory on the application closing the file or it crashing (implicitly closing the file)
++ if (g_cmaHandle)
++ {
++ PRINTK(KERN_DEBUG "unlocking vc memory\n");
++ if (UnlockVcMemory(g_cmaHandle))
++ PRINTK(KERN_ERR "uh-oh, unable to unlock vc memory!\n");
++ PRINTK(KERN_DEBUG "releasing vc memory\n");
++ if (ReleaseVcMemory(g_cmaHandle))
++ PRINTK(KERN_ERR "uh-oh, unable to release vc memory!\n");
++ }
++
++ if (iminor(pInode) == 0)
++ atomic_inc(&g_oneLock4k);
++ else
++ return -EINVAL;
++
+ return 0;
+ }
+
+@@ -274,18 +356,17 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *
+ struct DmaControlBlock __user *pUNext;
+ void __iomem *pSourceBus, __iomem *pDestBus;
+
+-
+ //get the control block into kernel memory so we can work on it
+ if (copy_from_user(&kernCB, pUserCB, sizeof(struct DmaControlBlock)) != 0)
+ {
+- printk(KERN_ERR "copy_from_user failed for user cb %p\n", pUserCB);
++ PRINTK(KERN_ERR "copy_from_user failed for user cb %p\n", pUserCB);
+ *pError = 1;
+ return 0;
+ }
+
+ if (kernCB.m_pSourceAddr == 0 || kernCB.m_pDestAddr == 0)
+ {
+- printk(KERN_ERR "faulty source (%p) dest (%p) addresses for user cb %p\n",
++ PRINTK(KERN_ERR "faulty source (%p) dest (%p) addresses for user cb %p\n",
+ kernCB.m_pSourceAddr, kernCB.m_pDestAddr, pUserCB);
+ *pError = 1;
+ return 0;
+@@ -296,7 +377,9 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *
+
+ if (!pSourceBus || !pDestBus)
+ {
+- printk(KERN_ERR "virtual to bus translation failure for source/dest\n");
++ PRINTK(KERN_ERR "virtual to bus translation failure for source/dest %p/%p->%p/%p\n",
++ kernCB.m_pSourceAddr, kernCB.m_pDestAddr,
++ pSourceBus, pDestBus);
+ *pError = 1;
+ return 0;
+ }
+@@ -304,6 +387,8 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *
+ //update the user structure with the new bus addresses
+ kernCB.m_pSourceAddr = pSourceBus;
+ kernCB.m_pDestAddr = pDestBus;
++
++ PRINTK_VERBOSE(KERN_DEBUG "final source %p dest %p\n", kernCB.m_pSourceAddr, kernCB.m_pDestAddr);
+
+ //sort out the bus address for the next block
+ pUNext = kernCB.m_pNext;
+@@ -315,7 +400,7 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *
+
+ if (!pNextBus)
+ {
+- printk(KERN_ERR "virtual to bus translation failure for m_pNext\n");
++ PRINTK(KERN_ERR "virtual to bus translation failure for m_pNext\n");
+ *pError = 1;
+ return 0;
+ }
+@@ -327,7 +412,7 @@ static struct DmaControlBlock __user *DmaPrepare(struct DmaControlBlock __user *
+ //write it back to user space
+ if (copy_to_user(pUserCB, &kernCB, sizeof(struct DmaControlBlock)) != 0)
+ {
+- printk(KERN_ERR "copy_to_user failed for cb %p\n", pUserCB);
++ PRINTK(KERN_ERR "copy_to_user failed for cb %p\n", pUserCB);
+ *pError = 1;
+ return 0;
+ }
+@@ -345,7 +430,7 @@ static int DmaKick(struct DmaControlBlock __user *pUserCB)
+ pBusCB = UserVirtualToBusViaCbCache(pUserCB);
+ if (!pBusCB)
+ {
+- printk(KERN_ERR "virtual to bus translation failure for cb\n");
++ PRINTK(KERN_ERR "virtual to bus translation failure for cb\n");
+ return 1;
+ }
+
+@@ -361,9 +446,9 @@ static void DmaWaitAll(void)
+ int counter = 0;
+ volatile int inner_count;
+ volatile unsigned int cs;
+- //unsigned long time_before, time_after;
++ unsigned long time_before, time_after;
+
+- //time_before = jiffies;
++ time_before = jiffies;
+ //bcm_dma_wait_idle(g_pDmaChanBase);
+ dsb();
+
+@@ -380,19 +465,19 @@ static void DmaWaitAll(void)
+ //cpu_do_idle();
+ if (counter >= 1000000)
+ {
+- printk(KERN_WARNING "DMA failed to finish in a timely fashion\n");
++ PRINTK(KERN_WARNING "DMA failed to finish in a timely fashion\n");
+ break;
+ }
+ }
+- //time_after = jiffies;
+- //printk(KERN_DEBUG "done, counter %d, cs %08x", counter, cs);
+- //printk(KERN_DEBUG "took %ld jiffies, %d HZ\n", time_after - time_before, HZ);
++ time_after = jiffies;
++ PRINTK_VERBOSE(KERN_DEBUG "done, counter %d, cs %08x", counter, cs);
++ PRINTK_VERBOSE(KERN_DEBUG "took %ld jiffies, %d HZ\n", time_after - time_before, HZ);
+ }
+
+ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg)
+ {
+ int error = 0;
+- //printk(KERN_DEBUG "ioctl cmd %x arg %lx\n", cmd, arg);
++ PRINTK_VERBOSE(KERN_DEBUG "ioctl cmd %x arg %lx\n", cmd, arg);
+
+ switch (cmd)
+ {
+@@ -402,29 +487,30 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg)
+ {
+ struct DmaControlBlock __user *pUCB = (struct DmaControlBlock *)arg;
+ int steps = 0;
+- //unsigned long start_time = jiffies;
++ unsigned long start_time = jiffies;
++ (void)start_time;
+
+ //flush our address cache
+ FlushAddrCache();
+
+-// printk(KERN_DEBUG "dma prepare\n");
+-
++ PRINTK_VERBOSE(KERN_DEBUG "dma prepare\n");
++
+ //do virtual to bus translation for each entry
+ do
+ {
+ pUCB = DmaPrepare(pUCB, &error);
+ } while (error == 0 && ++steps && pUCB);
+- //printk(KERN_DEBUG "prepare done in %d steps, %ld\n", steps, jiffies - start_time);
++ PRINTK_VERBOSE(KERN_DEBUG "prepare done in %d steps, %ld\n", steps, jiffies - start_time);
+
+ //carry straight on if we want to kick too
+ if (cmd == DMA_PREPARE || error)
+ {
+-// printk(KERN_DEBUG "falling out\n");
+- break;
++ PRINTK_VERBOSE(KERN_DEBUG "falling out\n");
++ return error ? -EINVAL : 0;
+ }
+- };
++ }
+ case DMA_KICK:
+-// printk(KERN_DEBUG "dma begin\n");
++ PRINTK_VERBOSE(KERN_DEBUG "dma begin\n");
+
+ if (cmd == DMA_KICK)
+ FlushAddrCache();
+@@ -434,10 +520,10 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg)
+ if (cmd != DMA_PREPARE_KICK_WAIT)
+ break;
+ /* case DMA_WAIT_ONE:
+- //printk(KERN_DEBUG "dma wait one\n");
++ //PRINTK(KERN_DEBUG "dma wait one\n");
+ break;*/
+ case DMA_WAIT_ALL:
+- //printk(KERN_DEBUG "dma wait all\n");
++ //PRINTK(KERN_DEBUG "dma wait all\n");
+ DmaWaitAll();
+ break;
+ case DMA_MAX_BURST:
+@@ -447,14 +533,54 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg)
+ return 5;
+ case DMA_SET_MIN_PHYS:
+ g_pMinPhys = (void __user *)arg;
+- printk("min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys);
++ PRINTK(KERN_DEBUG "min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys);
+ break;
+ case DMA_SET_MAX_PHYS:
+ g_pMaxPhys = (void __user *)arg;
+- printk("min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys);
++ PRINTK(KERN_DEBUG "min/max user/phys bypass set to %p %p\n", g_pMinPhys, g_pMaxPhys);
+ break;
++ case DMA_SET_PHYS_OFFSET:
++ g_physOffset = arg;
++ PRINTK(KERN_DEBUG "user/phys bypass offset set to %ld\n", g_physOffset);
++ break;
++ case DMA_CMA_SET_SIZE:
++ {
++ unsigned int pBusAddr;
++
++ if (g_cmaHandle)
++ {
++ PRINTK(KERN_ERR "memory has already been allocated (handle %d)\n", g_cmaHandle);
++ return -EINVAL;
++ }
++
++ PRINTK(KERN_INFO "allocating %ld bytes of VC memory\n", arg * 4096);
++
++ //get the memory
++ if (AllocateVcMemory(&g_cmaHandle, arg * 4096, 4096, MEM_FLAG_L1_NONALLOCATING | MEM_FLAG_NO_INIT | MEM_FLAG_HINT_PERMALOCK))
++ {
++ PRINTK(KERN_ERR "failed to allocate %ld bytes of VC memory\n", arg * 4096);
++ g_cmaHandle = 0;
++ return -EINVAL;
++ }
++
++ //get an address for it
++ PRINTK(KERN_INFO "trying to map VC memory\n");
++
++ if (LockVcMemory(&pBusAddr, g_cmaHandle))
++ {
++ PRINTK(KERN_ERR "failed to map CMA handle %d, releasing memory\n", g_cmaHandle);
++ ReleaseVcMemory(g_cmaHandle);
++ g_cmaHandle = 0;
++ }
++
++ PRINTK(KERN_INFO "bus address for CMA memory is %x\n", pBusAddr);
++ return pBusAddr;
++ }
++ case DMA_GET_VERSION:
++ PRINTK(KERN_DEBUG "returning version number, %d\n", VERSION_NUMBER);
++ return VERSION_NUMBER;
+ default:
+- printk(KERN_DEBUG "unknown ioctl: %d\n", cmd);
++ PRINTK(KERN_DEBUG "unknown ioctl: %d\n", cmd);
+ return -EINVAL;
+ }
+
+@@ -463,12 +589,6 @@ static long Ioctl(struct file *pFile, unsigned int cmd, unsigned long arg)
+
+ static ssize_t Read(struct file *pFile, char __user *pUser, size_t count, loff_t *offp)
+ {
+- /*printk(KERN_DEBUG "file read pFile %p pUser %p count %ld offp %p\n",
+- pFile, pUser, count, offp);
+- printk(KERN_DEBUG "phys pFile %lx pUser %lx offp %lx\n",
+- __pa(pFile), __pa(pUser), __pa(offp));
+- printk(KERN_DEBUG "bus pFile %lx pUser %lx offp %lx\n",
+- virt_to_bus(pFile), virt_to_bus(pUser), virt_to_bus(offp));*/
+ return -EIO;
+ }
+
+@@ -477,20 +597,20 @@ static int Mmap(struct file *pFile, struct vm_area_struct *pVma)
+ struct PageList *pPages;
+ struct VmaPageList *pVmaList;
+
+-// printk(KERN_DEBUG "MMAP vma %p, length %ld (%s %d)\n",
+-// pVma, pVma->vm_end - pVma->vm_start,
+-// current->comm, current->pid);
+-// printk(KERN_DEBUG "MMAP %p %d (tracked %d)\n", pVma, current->pid, g_trackedPages);
+-
++ PRINTK_VERBOSE(KERN_DEBUG "MMAP vma %p, length %ld (%s %d)\n",
++ pVma, pVma->vm_end - pVma->vm_start,
++ current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "MMAP %p %d (tracked %d)\n", pVma, current->pid, g_trackedPages);
++
+ //make a new page list
+ pPages = (struct PageList *)kmalloc(sizeof(struct PageList), GFP_KERNEL);
+ if (!pPages)
+ {
+- printk(KERN_ERR "couldn\'t allocate a new page list (%s %d)\n",
++ PRINTK(KERN_ERR "couldn\'t allocate a new page list (%s %d)\n",
+ current->comm, current->pid);
+ return -ENOMEM;
+ }
+-
++
+ //clear the page list
+ pPages->m_used = 0;
+ pPages->m_pNext = 0;
+@@ -500,67 +620,72 @@ static int Mmap(struct file *pFile, struct vm_area_struct *pVma)
+ {
+ struct VmaPageList *pList;
+
+-// printk(KERN_DEBUG "new vma list, making new one (%s %d)\n",
+-// current->comm, current->pid);
+-
++ PRINTK_VERBOSE(KERN_DEBUG "new vma list, making new one (%s %d)\n",
++ current->comm, current->pid);
++
+ //make a new vma list
+ pList = (struct VmaPageList *)kmalloc(sizeof(struct VmaPageList), GFP_KERNEL);
+ if (!pList)
+ {
+- printk(KERN_ERR "couldn\'t allocate vma page list (%s %d)\n",
++ PRINTK(KERN_ERR "couldn\'t allocate vma page list (%s %d)\n",
+ current->comm, current->pid);
+ kfree(pPages);
+ return -ENOMEM;
+ }
+-
++
+ //clear this list
+ pVma->vm_private_data = (void *)pList;
+ pList->m_refCount = 0;
+ }
+-
++
+ pVmaList = (struct VmaPageList *)pVma->vm_private_data;
+-
++
+ //add it to the vma list
+ pVmaList->m_pPageHead = pPages;
+ pVmaList->m_pPageTail = pPages;
+-
+- pVma->vm_ops = &g_vmOps;
++
++ pVma->vm_ops = &g_vmOps4k;
+ pVma->vm_flags |= VM_RESERVED;
+-
+- VmaOpen(pVma);
+-
++
++ VmaOpen4k(pVma);
++
+ return 0;
+ }
+
+ /****** VMA OPERATIONS ******/
+
+-static void VmaOpen(struct vm_area_struct *pVma)
++static void VmaOpen4k(struct vm_area_struct *pVma)
+ {
+ struct VmaPageList *pVmaList;
+
+-// printk(KERN_DEBUG "vma open %p private %p (%s %d), %d live pages\n", pVma, pVma->vm_private_data, current->comm, current->pid, g_trackedPages);
+-// printk(KERN_DEBUG "OPEN %p %d %ld pages (tracked pages %d)\n",
+-// pVma, current->pid, (pVma->vm_end - pVma->vm_start) >> 12,
+-// g_trackedPages);
++ PRINTK_VERBOSE(KERN_DEBUG "vma open %p private %p (%s %d), %d live pages\n", pVma, pVma->vm_private_data, current->comm, current->pid, g_trackedPages);
++ PRINTK_VERBOSE(KERN_DEBUG "OPEN %p %d %ld pages (tracked pages %d)\n",
++ pVma, current->pid, (pVma->vm_end - pVma->vm_start) >> 12,
++ g_trackedPages);
+
+ pVmaList = (struct VmaPageList *)pVma->vm_private_data;
+
+ if (pVmaList)
+ {
+ pVmaList->m_refCount++;
+-// printk(KERN_DEBUG "ref count is now %d\n", pVmaList->m_refCount);
++ PRINTK_VERBOSE(KERN_DEBUG "ref count is now %d\n", pVmaList->m_refCount);
++ }
++ else
++ {
++ PRINTK_VERBOSE(KERN_DEBUG "err, open but no vma page list\n");
+ }
+-// else
+-// printk(KERN_DEBUG "err, open but no vma page list\n");
+ }
+
+-static void VmaClose(struct vm_area_struct *pVma)
++static void VmaClose4k(struct vm_area_struct *pVma)
+ {
+ struct VmaPageList *pVmaList;
+ int freed = 0;
+
+-// printk(KERN_DEBUG "vma close %p private %p (%s %d)\n", pVma, pVma->vm_private_data, current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "vma close %p private %p (%s %d)\n", pVma, pVma->vm_private_data, current->comm, current->pid);
+
++ //wait for any dmas to finish
++ DmaWaitAll();
++
+ //find our vma in the list
+ pVmaList = (struct VmaPageList *)pVma->vm_private_data;
+
+@@ -573,14 +698,14 @@ static void VmaClose(struct vm_area_struct *pVma)
+
+ if (pVmaList->m_refCount == 0)
+ {
+-// printk(KERN_DEBUG "found vma, freeing pages (%s %d)\n",
+-// current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "found vma, freeing pages (%s %d)\n",
++ current->comm, current->pid);
+
+ pPages = pVmaList->m_pPageHead;
+
+ if (!pPages)
+ {
+- printk(KERN_ERR "no page list (%s %d)!\n",
++ PRINTK(KERN_ERR "no page list (%s %d)!\n",
+ current->comm, current->pid);
+ return;
+ }
+@@ -590,22 +715,22 @@ static void VmaClose(struct vm_area_struct *pVma)
+ struct PageList *next;
+ int count;
+
+-// printk(KERN_DEBUG "page list (%s %d)\n",
+-// current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "page list (%s %d)\n",
++ current->comm, current->pid);
+
+ next = pPages->m_pNext;
+ for (count = 0; count < pPages->m_used; count++)
+ {
+-// printk(KERN_DEBUG "freeing page %p (%s %d)\n",
+-// pPages->m_pPages[count],
+-// current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "freeing page %p (%s %d)\n",
++ pPages->m_pPages[count],
++ current->comm, current->pid);
+ __free_pages(pPages->m_pPages[count], 0);
+ g_trackedPages--;
+ freed++;
+ }
+
+-// printk(KERN_DEBUG "freeing page list (%s %d)\n",
+-// current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "freeing page list (%s %d)\n",
++ current->comm, current->pid);
+ kfree(pPages);
+ pPages = next;
+ }
+@@ -614,33 +739,38 @@ static void VmaClose(struct vm_area_struct *pVma)
+ kfree(pVmaList);
+ pVma->vm_private_data = 0;
+ }
+-// else
+-// printk(KERN_DEBUG "ref count is %d, not closing\n", pVmaList->m_refCount);
++ else
++ {
++ PRINTK_VERBOSE(KERN_DEBUG "ref count is %d, not closing\n", pVmaList->m_refCount);
++ }
+ }
+ else
+ {
+-// printk(KERN_ERR "uh-oh, vma %p not found (%s %d)!\n", pVma, current->comm, current->pid);
+-// printk(KERN_ERR "CLOSE ERR\n");
++ PRINTK_VERBOSE(KERN_ERR "uh-oh, vma %p not found (%s %d)!\n", pVma, current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_ERR "CLOSE ERR\n");
+ }
+
+-// printk(KERN_DEBUG "CLOSE %p %d %d pages (tracked pages %d)",
+-// pVma, current->pid, freed, g_trackedPages);
++ PRINTK_VERBOSE(KERN_DEBUG "CLOSE %p %d %d pages (tracked pages %d)",
++ pVma, current->pid, freed, g_trackedPages);
+
+-// printk(KERN_DEBUG "%d pages open\n", g_trackedPages);
++ PRINTK_VERBOSE(KERN_DEBUG "%d pages open\n", g_trackedPages);
+ }
+
+-static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf)
++static int VmaFault4k(struct vm_area_struct *pVma, struct vm_fault *pVmf)
+ {
+-// printk(KERN_DEBUG "vma fault for vma %p private %p at offset %ld (%s %d)\n", pVma, pVma->vm_private_data, pVmf->pgoff,
+-// current->comm, current->pid);
+- //printk(KERN_DEBUG "FAULT\n");
++ PRINTK_VERBOSE(KERN_DEBUG "vma fault for vma %p private %p at offset %ld (%s %d)\n", pVma, pVma->vm_private_data, pVmf->pgoff,
++ current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "FAULT\n");
+ pVmf->page = alloc_page(GFP_KERNEL);
+- /*if (pVmf->page)
+- printk(KERN_DEBUG "alloc page virtual %p\n", page_address(pVmf->page));*/
+
++ if (pVmf->page)
++ {
++ PRINTK_VERBOSE(KERN_DEBUG "alloc page virtual %p\n", page_address(pVmf->page));
++ }
++
+ if (!pVmf->page)
+ {
+- printk(KERN_ERR "vma fault oom (%s %d)\n", current->comm, current->pid);
++ PRINTK(KERN_ERR "vma fault oom (%s %d)\n", current->comm, current->pid);
+ return VM_FAULT_OOM;
+ }
+ else
+@@ -655,11 +785,11 @@ static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf)
+
+ if (pVmaList)
+ {
+-// printk(KERN_DEBUG "vma found (%s %d)\n", current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "vma found (%s %d)\n", current->comm, current->pid);
+
+ if (pVmaList->m_pPageTail->m_used == PAGES_PER_LIST)
+ {
+-// printk(KERN_DEBUG "making new page list (%s %d)\n", current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "making new page list (%s %d)\n", current->comm, current->pid);
+ //making a new page list
+ pVmaList->m_pPageTail->m_pNext = (struct PageList *)kmalloc(sizeof(struct PageList), GFP_KERNEL);
+ if (!pVmaList->m_pPageTail->m_pNext)
+@@ -671,13 +801,13 @@ static int VmaFault(struct vm_area_struct *pVma, struct vm_fault *pVmf)
+ pVmaList->m_pPageTail->m_pNext = 0;
+ }
+
+-// printk(KERN_DEBUG "adding page to list (%s %d)\n", current->comm, current->pid);
++ PRINTK_VERBOSE(KERN_DEBUG "adding page to list (%s %d)\n", current->comm, current->pid);
+
+ pVmaList->m_pPageTail->m_pPages[pVmaList->m_pPageTail->m_used] = pVmf->page;
+ pVmaList->m_pPageTail->m_used++;
+ }
+ else
+- printk(KERN_ERR "returned page for vma we don\'t know %p (%s %d)\n", pVma, current->comm, current->pid);
++ PRINTK(KERN_ERR "returned page for vma we don\'t know %p (%s %d)\n", pVma, current->comm, current->pid);
+
+ return 0;
+ }
+@@ -689,32 +819,33 @@ static int __init dmaer_init(void)
+ int result = alloc_chrdev_region(&g_majorMinor, 0, 1, "dmaer");
+ if (result < 0)
+ {
+- printk(KERN_ERR "unable to get major device number\n");
++ PRINTK(KERN_ERR "unable to get major device number\n");
+ return result;
+ }
+ else
+- printk(KERN_DEBUG "major device number %d\n", MAJOR(g_majorMinor));
++ PRINTK(KERN_DEBUG "major device number %d\n", MAJOR(g_majorMinor));
+
+- printk(KERN_DEBUG "vma list size %d, page list size %d, page size %ld\n",
++ PRINTK(KERN_DEBUG "vma list size %d, page list size %d, page size %ld\n",
+ sizeof(struct VmaPageList), sizeof(struct PageList), PAGE_SIZE);
+-
+-
++
+ //get a dma channel to work with
+ result = bcm_dma_chan_alloc(BCM_DMA_FEATURE_FAST, (void **)&g_pDmaChanBase, &g_dmaIrq);
++
++ //uncomment to force to channel 0
+ //result = 0;
+ //g_pDmaChanBase = 0xce808000;
+
+ if (result < 0)
+ {
+- printk(KERN_ERR "failed to allocate dma channel\n");
++ PRINTK(KERN_ERR "failed to allocate dma channel\n");
+ cdev_del(&g_cDev);
+ unregister_chrdev_region(g_majorMinor, 1);
+ }
+
+ //reset the channel
+- printk(KERN_DEBUG "allocated dma channel %d (%p), initial state %08x\n", result, g_pDmaChanBase, *g_pDmaChanBase);
++ PRINTK(KERN_DEBUG "allocated dma channel %d (%p), initial state %08x\n", result, g_pDmaChanBase, *g_pDmaChanBase);
+ *g_pDmaChanBase = 1 << 31;
+- printk(KERN_DEBUG "post-reset %08x\n", *g_pDmaChanBase);
++ PRINTK(KERN_DEBUG "post-reset %08x\n", *g_pDmaChanBase);
+
+ g_dmaChan = result;
+
+@@ -730,7 +861,7 @@ static int __init dmaer_init(void)
+ result = cdev_add(&g_cDev, g_majorMinor, 1);
+ if (result < 0)
+ {
+- printk(KERN_ERR "failed to add character device\n");
++ PRINTK(KERN_ERR "failed to add character device\n");
+ unregister_chrdev_region(g_majorMinor, 1);
+ bcm_dma_chan_free(g_dmaChan);
+ return result;
+@@ -741,7 +872,7 @@ static int __init dmaer_init(void)
+
+ static void __exit dmaer_exit(void)
+ {
+- printk(KERN_INFO "closing dmaer device, cache stats: %d hits %d misses\n", g_cacheHit, g_cacheMiss);
++ PRINTK(KERN_INFO "closing dmaer device, cache stats: %d hits %d misses\n", g_cacheHit, g_cacheMiss);
+ //unregister the device
+ cdev_del(&g_cDev);
+ unregister_chrdev_region(g_majorMinor, 1);
+@@ -749,6 +880,7 @@ static void __exit dmaer_exit(void)
+ bcm_dma_chan_free(g_dmaChan);
+ }
+
++MODULE_LICENSE("Dual BSD/GPL");
+ MODULE_AUTHOR("Simon Hall");
+ module_init(dmaer_init);
+ module_exit(dmaer_exit);
+diff --git a/arch/arm/mach-bcm2708/include/mach/vc_support.h b/arch/arm/mach-bcm2708/include/mach/vc_support.h
+new file mode 100755
+index 0000000..70e809f
+--- /dev/null
++++ b/arch/arm/mach-bcm2708/include/mach/vc_support.h
+@@ -0,0 +1,69 @@
++#ifndef _VC_SUPPORT_H_
++#define _VC_SUPPORT_H_
++
++/*
++ * vc_support.h
++ *
++ * Created on: 25 Nov 2012
++ * Author: Simon
++ */
++
++enum {
++/*
++ If a MEM_HANDLE_T is discardable, the memory manager may resize it to size
++ 0 at any time when it is not locked or retained.
++ */
++ MEM_FLAG_DISCARDABLE = 1 << 0,
++
++ /*
++ If a MEM_HANDLE_T is allocating (or normal), its block of memory will be
++ accessed in an allocating fashion through the cache.
++ */
++ MEM_FLAG_NORMAL = 0 << 2,
++ MEM_FLAG_ALLOCATING = MEM_FLAG_NORMAL,
++
++ /*
++ If a MEM_HANDLE_T is direct, its block of memory will be accessed
++ directly, bypassing the cache.
++ */
++ MEM_FLAG_DIRECT = 1 << 2,
++
++ /*
++ If a MEM_HANDLE_T is coherent, its block of memory will be accessed in a
++ non-allocating fashion through the cache.
++ */
++ MEM_FLAG_COHERENT = 2 << 2,
++
++ /*
++ If a MEM_HANDLE_T is L1-nonallocating, its block of memory will be accessed by
++ the VPU in a fashion which is allocating in L2, but only coherent in L1.
++ */
++ MEM_FLAG_L1_NONALLOCATING = (MEM_FLAG_DIRECT | MEM_FLAG_COHERENT),
++
++ /*
++ If a MEM_HANDLE_T is zero'd, its contents are set to 0 rather than
++ MEM_HANDLE_INVALID on allocation and resize up.
++ */
++ MEM_FLAG_ZERO = 1 << 4,
++
++ /*
++ If a MEM_HANDLE_T is uninitialised, it will not be reset to a defined value
++ (either zero, or all 1's) on allocation.
++ */
++ MEM_FLAG_NO_INIT = 1 << 5,
++
++ /*
++ Hints.
++ */
++ MEM_FLAG_HINT_PERMALOCK = 1 << 6, /* Likely to be locked for long periods of time. */
++};
++
++unsigned int AllocateVcMemory(unsigned int *pHandle, unsigned int size, unsigned int alignment, unsigned int flags);
++unsigned int ReleaseVcMemory(unsigned int handle);
++unsigned int LockVcMemory(unsigned int *pBusAddress, unsigned int handle);
++unsigned int UnlockVcMemory(unsigned int handle);
++
++unsigned int ExecuteVcCode(unsigned int code,
++ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5);
++
++#endif
+diff --git a/arch/arm/mach-bcm2708/vc_support.c b/arch/arm/mach-bcm2708/vc_support.c
+new file mode 100755
+index 0000000..5cb1335
+--- /dev/null
++++ b/arch/arm/mach-bcm2708/vc_support.c
+@@ -0,0 +1,319 @@
++/*
++ * vc_support.c
++ *
++ * Created on: 25 Nov 2012
++ * Author: Simon
++ */
++
++#include <linux/module.h>
++#include <mach/vcio.h>
++
++#ifdef ECLIPSE_IGNORE
++
++#define __user
++#define __init
++#define __exit
++#define __iomem
++#define KERN_DEBUG
++#define KERN_ERR
++#define KERN_WARNING
++#define KERN_INFO
++#define _IOWR(a, b, c) b
++#define _IOW(a, b, c) b
++#define _IO(a, b) b
++
++#endif
++
++/****** VC MAILBOX FUNCTIONALITY ******/
++unsigned int AllocateVcMemory(unsigned int *pHandle, unsigned int size, unsigned int alignment, unsigned int flags)
++{
++ struct vc_msg
++ {
++ unsigned int m_msgSize;
++ unsigned int m_response;
++
++ struct vc_tag
++ {
++ unsigned int m_tagId;
++ unsigned int m_sendBufferSize;
++ union {
++ unsigned int m_sendDataSize;
++ unsigned int m_recvDataSize;
++ };
++
++ struct args
++ {
++ union {
++ unsigned int m_size;
++ unsigned int m_handle;
++ };
++ unsigned int m_alignment;
++ unsigned int m_flags;
++ } m_args;
++ } m_tag;
++
++ unsigned int m_endTag;
++ } msg;
++ int s;
++
++ msg.m_msgSize = sizeof(msg);
++ msg.m_response = 0;
++ msg.m_endTag = 0;
++
++ //fill in the tag for the allocation command
++ msg.m_tag.m_tagId = 0x3000c;
++ msg.m_tag.m_sendBufferSize = 12;
++ msg.m_tag.m_sendDataSize = 12;
++
++ //fill in our args
++ msg.m_tag.m_args.m_size = size;
++ msg.m_tag.m_args.m_alignment = alignment;
++ msg.m_tag.m_args.m_flags = flags;
++
++ //run the command
++ s = bcm_mailbox_property(&msg, sizeof(msg));
++
++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004)
++ {
++ *pHandle = msg.m_tag.m_args.m_handle;
++ return 0;
++ }
++ else
++ {
++ printk(KERN_ERR "failed to allocate vc memory: s=%d response=%08x recv data size=%08x\n",
++ s, msg.m_response, msg.m_tag.m_recvDataSize);
++ return 1;
++ }
++}
++
++unsigned int ReleaseVcMemory(unsigned int handle)
++{
++ struct vc_msg
++ {
++ unsigned int m_msgSize;
++ unsigned int m_response;
++
++ struct vc_tag
++ {
++ unsigned int m_tagId;
++ unsigned int m_sendBufferSize;
++ union {
++ unsigned int m_sendDataSize;
++ unsigned int m_recvDataSize;
++ };
++
++ struct args
++ {
++ union {
++ unsigned int m_handle;
++ unsigned int m_error;
++ };
++ } m_args;
++ } m_tag;
++
++ unsigned int m_endTag;
++ } msg;
++ int s;
++
++ msg.m_msgSize = sizeof(msg);
++ msg.m_response = 0;
++ msg.m_endTag = 0;
++
++ //fill in the tag for the release command
++ msg.m_tag.m_tagId = 0x3000f;
++ msg.m_tag.m_sendBufferSize = 4;
++ msg.m_tag.m_sendDataSize = 4;
++
++ //pass across the handle
++ msg.m_tag.m_args.m_handle = handle;
++
++ s = bcm_mailbox_property(&msg, sizeof(msg));
++
++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004 && msg.m_tag.m_args.m_error == 0)
++ return 0;
++ else
++ {
++ printk(KERN_ERR "failed to release vc memory: s=%d response=%08x recv data size=%08x error=%08x\n",
++ s, msg.m_response, msg.m_tag.m_recvDataSize, msg.m_tag.m_args.m_error);
++ return 1;
++ }
++}
++
++unsigned int LockVcMemory(unsigned int *pBusAddress, unsigned int handle)
++{
++ struct vc_msg
++ {
++ unsigned int m_msgSize;
++ unsigned int m_response;
++
++ struct vc_tag
++ {
++ unsigned int m_tagId;
++ unsigned int m_sendBufferSize;
++ union {
++ unsigned int m_sendDataSize;
++ unsigned int m_recvDataSize;
++ };
++
++ struct args
++ {
++ union {
++ unsigned int m_handle;
++ unsigned int m_busAddress;
++ };
++ } m_args;
++ } m_tag;
++
++ unsigned int m_endTag;
++ } msg;
++ int s;
++
++ msg.m_msgSize = sizeof(msg);
++ msg.m_response = 0;
++ msg.m_endTag = 0;
++
++ //fill in the tag for the lock command
++ msg.m_tag.m_tagId = 0x3000d;
++ msg.m_tag.m_sendBufferSize = 4;
++ msg.m_tag.m_sendDataSize = 4;
++
++ //pass across the handle
++ msg.m_tag.m_args.m_handle = handle;
++
++ s = bcm_mailbox_property(&msg, sizeof(msg));
++
++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004)
++ {
++ //pick out the bus address
++ *pBusAddress = msg.m_tag.m_args.m_busAddress;
++ return 0;
++ }
++ else
++ {
++ printk(KERN_ERR "failed to lock vc memory: s=%d response=%08x recv data size=%08x\n",
++ s, msg.m_response, msg.m_tag.m_recvDataSize);
++ return 1;
++ }
++}
++
++unsigned int UnlockVcMemory(unsigned int handle)
++{
++ struct vc_msg
++ {
++ unsigned int m_msgSize;
++ unsigned int m_response;
++
++ struct vc_tag
++ {
++ unsigned int m_tagId;
++ unsigned int m_sendBufferSize;
++ union {
++ unsigned int m_sendDataSize;
++ unsigned int m_recvDataSize;
++ };
++
++ struct args
++ {
++ union {
++ unsigned int m_handle;
++ unsigned int m_error;
++ };
++ } m_args;
++ } m_tag;
++
++ unsigned int m_endTag;
++ } msg;
++ int s;
++
++ msg.m_msgSize = sizeof(msg);
++ msg.m_response = 0;
++ msg.m_endTag = 0;
++
++ //fill in the tag for the unlock command
++ msg.m_tag.m_tagId = 0x3000e;
++ msg.m_tag.m_sendBufferSize = 4;
++ msg.m_tag.m_sendDataSize = 4;
++
++ //pass across the handle
++ msg.m_tag.m_args.m_handle = handle;
++
++ s = bcm_mailbox_property(&msg, sizeof(msg));
++
++ //check the error code too
++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004 && msg.m_tag.m_args.m_error == 0)
++ return 0;
++ else
++ {
++ printk(KERN_ERR "failed to unlock vc memory: s=%d response=%08x recv data size=%08x error%08x\n",
++ s, msg.m_response, msg.m_tag.m_recvDataSize, msg.m_tag.m_args.m_error);
++ return 1;
++ }
++}
++
++unsigned int ExecuteVcCode(unsigned int code,
++ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5)
++{
++ struct vc_msg
++ {
++ unsigned int m_msgSize;
++ unsigned int m_response;
++
++ struct vc_tag
++ {
++ unsigned int m_tagId;
++ unsigned int m_sendBufferSize;
++ union {
++ unsigned int m_sendDataSize;
++ unsigned int m_recvDataSize;
++ };
++
++ struct args
++ {
++ union {
++ unsigned int m_pCode;
++ unsigned int m_return;
++ };
++ unsigned int m_r0;
++ unsigned int m_r1;
++ unsigned int m_r2;
++ unsigned int m_r3;
++ unsigned int m_r4;
++ unsigned int m_r5;
++ } m_args;
++ } m_tag;
++
++ unsigned int m_endTag;
++ } msg;
++ int s;
++
++ msg.m_msgSize = sizeof(msg);
++ msg.m_response = 0;
++ msg.m_endTag = 0;
++
++ //fill in the tag for the unlock command
++ msg.m_tag.m_tagId = 0x30010;
++ msg.m_tag.m_sendBufferSize = 28;
++ msg.m_tag.m_sendDataSize = 28;
++
++ //pass across the handle
++ msg.m_tag.m_args.m_pCode = code;
++ msg.m_tag.m_args.m_r0 = r0;
++ msg.m_tag.m_args.m_r1 = r1;
++ msg.m_tag.m_args.m_r2 = r2;
++ msg.m_tag.m_args.m_r3 = r3;
++ msg.m_tag.m_args.m_r4 = r4;
++ msg.m_tag.m_args.m_r5 = r5;
++
++ s = bcm_mailbox_property(&msg, sizeof(msg));
++
++ //check the error code too
++ if (s == 0 && msg.m_response == 0x80000000 && msg.m_tag.m_recvDataSize == 0x80000004)
++ return msg.m_tag.m_args.m_return;
++ else
++ {
++ printk(KERN_ERR "failed to execute: s=%d response=%08x recv data size=%08x\n",
++ s, msg.m_response, msg.m_tag.m_recvDataSize);
++ return 1;
++ }
++}
++
diff --git a/patches/linux-3.6.11/0196-Add-retry-for-vchiq-init.-Needed-in-some-cases-when-.patch b/patches/linux-3.6.11/0196-Add-retry-for-vchiq-init.-Needed-in-some-cases-when-.patch
new file mode 100644
index 0000000..6e21200
--- /dev/null
+++ b/patches/linux-3.6.11/0196-Add-retry-for-vchiq-init.-Needed-in-some-cases-when-.patch
@@ -0,0 +1,47 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 27 Dec 2012 14:13:02 +0000
+Subject: [PATCH] Add retry for vchiq init. Needed in some cases when using CMA
+
+---
+ .../vc04_services/interface/vchiq_arm/vchiq_kern_lib.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
+index 87474a2..36b3d34 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
+@@ -68,20 +68,31 @@ vchiq_blocking_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle, void *data,
+ * vchiq_initialise
+ *
+ ***************************************************************************/
+-
++#define VCHIQ_INIT_RETRIES 10
+ VCHIQ_STATUS_T vchiq_initialise(VCHIQ_INSTANCE_T *instanceOut)
+ {
+ VCHIQ_STATUS_T status = VCHIQ_ERROR;
+ VCHIQ_STATE_T *state;
+ VCHIQ_INSTANCE_T instance = NULL;
++ int i;
+
+ vchiq_log_trace(vchiq_core_log_level, "%s called", __func__);
+
+- state = vchiq_get_state();
+- if (!state) {
++ /* VideoCore may not be ready due to boot up timing.
++ It may never be ready if kernel and firmware are mismatched, so don't block forever. */
++ for (i=0; i<VCHIQ_INIT_RETRIES; i++) {
++ state = vchiq_get_state();
++ if (state)
++ break;
++ udelay(500);
++ }
++ if (i==VCHIQ_INIT_RETRIES) {
+ vchiq_log_error(vchiq_core_log_level,
+ "%s: videocore not initialized\n", __func__);
+ goto failed;
++ } else if (i>0) {
++ vchiq_log_warning(vchiq_core_log_level,
++ "%s: videocore initialized after %d retries\n", __func__, i);
+ }
+
+ instance = kzalloc(sizeof(*instance), GFP_KERNEL);
diff --git a/patches/linux-3.6.11/0197-Silence-bootup-errors-from-timer-and-gpio.patch b/patches/linux-3.6.11/0197-Silence-bootup-errors-from-timer-and-gpio.patch
new file mode 100644
index 0000000..87de481
--- /dev/null
+++ b/patches/linux-3.6.11/0197-Silence-bootup-errors-from-timer-and-gpio.patch
@@ -0,0 +1,46 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 27 Dec 2012 16:08:50 +0000
+Subject: [PATCH] Silence bootup errors from timer and gpio
+
+---
+ arch/arm/mach-bcm2708/bcm2708.c | 11 ++++++-----
+ arch/arm/mach-bcm2708/bcm2708_gpio.c | 2 +-
+ 2 files changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c
+index f41cbc0..7fe7283 100644
+--- a/arch/arm/mach-bcm2708/bcm2708.c
++++ b/arch/arm/mach-bcm2708/bcm2708.c
+@@ -762,13 +762,14 @@ static void timer_set_mode(enum clock_event_mode mode,
+ unsigned long stc;
+
+ switch (mode) {
+- case CLOCK_EVT_MODE_PERIODIC:
+- stc = readl(__io_address(ST_BASE + 0x04));
+- writel(stc + TIMER_PERIOD, __io_address(ST_BASE + 0x18)); /* stc3 */
++ case CLOCK_EVT_MODE_ONESHOT: /* Leave the timer disabled, .set_next_event will enable it */
++ case CLOCK_EVT_MODE_SHUTDOWN:
+ break;
+- case CLOCK_EVT_MODE_ONESHOT:
++ case CLOCK_EVT_MODE_PERIODIC:
++
+ case CLOCK_EVT_MODE_UNUSED:
+- case CLOCK_EVT_MODE_SHUTDOWN:
++ case CLOCK_EVT_MODE_RESUME:
++
+ default:
+ printk(KERN_ERR "timer_set_mode: unhandled mode:%d\n",
+ (int)mode);
+diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c
+index 6c81d9d..c8161e1 100644
+--- a/arch/arm/mach-bcm2708/bcm2708_gpio.c
++++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c
+@@ -263,7 +263,7 @@ static int bcm2708_gpio_probe(struct platform_device *dev)
+ struct resource *res;
+ int err = 0;
+
+- printk(KERN_ERR DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev);
++ printk(KERN_INFO DRIVER_NAME ": bcm2708_gpio_probe %p\n", dev);
+
+ ucb = kzalloc(sizeof(*ucb), GFP_KERNEL);
+ if (NULL == ucb) {
diff --git a/patches/linux-3.6.11/0198-Remove-RTC_HCTOSYS-as-it-produces-a-kernel-boot-erro.patch b/patches/linux-3.6.11/0198-Remove-RTC_HCTOSYS-as-it-produces-a-kernel-boot-erro.patch
new file mode 100644
index 0000000..9a223af
--- /dev/null
+++ b/patches/linux-3.6.11/0198-Remove-RTC_HCTOSYS-as-it-produces-a-kernel-boot-erro.patch
@@ -0,0 +1,29 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 27 Dec 2012 17:09:39 +0000
+Subject: [PATCH] Remove RTC_HCTOSYS as it produces a kernel boot error, and
+ doesn't do anything with RTC kernel modules
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 14d6ebf..92e98e6 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -793,7 +793,6 @@ CONFIG_USB_STORAGE_ONETOUCH=m
+ CONFIG_USB_STORAGE_KARMA=m
+ CONFIG_USB_STORAGE_CYPRESS_ATACB=m
+ CONFIG_USB_STORAGE_ENE_UB6250=m
+-CONFIG_USB_UAS=y
+ CONFIG_USB_LIBUSUAL=y
+ CONFIG_USB_MDC800=m
+ CONFIG_USB_MICROTEK=m
+@@ -880,6 +879,7 @@ CONFIG_LEDS_TRIGGER_TIMER=m
+ CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+ CONFIG_RTC_CLASS=y
++# CONFIG_RTC_HCTOSYS is not set
+ CONFIG_RTC_DRV_DS1307=m
+ CONFIG_RTC_DRV_DS1374=m
+ CONFIG_RTC_DRV_DS1672=m
diff --git a/patches/linux-3.6.11/0199-Make-CMA-kernel-messages-quieter-when-not-fatal.patch b/patches/linux-3.6.11/0199-Make-CMA-kernel-messages-quieter-when-not-fatal.patch
new file mode 100644
index 0000000..ce1c2f3
--- /dev/null
+++ b/patches/linux-3.6.11/0199-Make-CMA-kernel-messages-quieter-when-not-fatal.patch
@@ -0,0 +1,44 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 27 Dec 2012 23:38:27 +0000
+Subject: [PATCH] Make CMA kernel messages quieter when not fatal
+
+---
+ drivers/char/broadcom/vc_cma/vc_cma.c | 4 ++--
+ drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/char/broadcom/vc_cma/vc_cma.c b/drivers/char/broadcom/vc_cma/vc_cma.c
+index 32dc832..926b609 100644
+--- a/drivers/char/broadcom/vc_cma/vc_cma.c
++++ b/drivers/char/broadcom/vc_cma/vc_cma.c
+@@ -156,7 +156,7 @@ static bool send_worker_msg(VCHIQ_HEADER_T * msg);
+ static int __init early_vc_cma_mem(char *p)
+ {
+ unsigned int new_size;
+- printk(KERN_ERR "early_vc_cma_mem(%s)", p);
++ printk(KERN_NOTICE "early_vc_cma_mem(%s)", p);
+ vc_cma_size = memparse(p, &p);
+ vc_cma_initial = vc_cma_size;
+ if (*p == '/')
+@@ -175,7 +175,7 @@ static int __init early_vc_cma_mem(char *p)
+ vc_cma_base = (vc_cma_base + VC_CMA_CHUNK_SIZE - 1)
+ & ~(VC_CMA_CHUNK_SIZE - 1);
+
+- printk(KERN_ERR " -> initial %x, size %x, base %x", vc_cma_initial,
++ printk(KERN_NOTICE " -> initial %x, size %x, base %x", vc_cma_initial,
+ vc_cma_size, (unsigned int)vc_cma_base);
+
+ return 0;
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
+index 2a46d29..7298d85 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
+@@ -1445,7 +1445,7 @@ vchiq_get_state(void)
+ if (g_state.remote == NULL)
+ printk(KERN_ERR "%s: g_state.remote == NULL\n", __func__);
+ else if (g_state.remote->initialised != 1)
+- printk(KERN_ERR "%s: g_state.remote->initialised != 1 (%d)\n",
++ printk(KERN_NOTICE "%s: g_state.remote->initialised != 1 (%d)\n",
+ __func__, g_state.remote->initialised);
+
+ return ((g_state.remote != NULL) &&
diff --git a/patches/linux-3.6.11/0200-Add-missing-USB_NET-modules.patch b/patches/linux-3.6.11/0200-Add-missing-USB_NET-modules.patch
new file mode 100644
index 0000000..0edf299
--- /dev/null
+++ b/patches/linux-3.6.11/0200-Add-missing-USB_NET-modules.patch
@@ -0,0 +1,32 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Tue, 1 Jan 2013 16:17:43 +0000
+Subject: [PATCH] Add missing USB_NET modules
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 92e98e6..4eb9edb 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -386,6 +386,7 @@ CONFIG_USB_USBNET=y
+ CONFIG_USB_NET_AX8817X=m
+ CONFIG_USB_NET_CDCETHER=m
+ CONFIG_USB_NET_CDC_EEM=m
++CONFIG_USB_NET_CDC_NCM=m
+ CONFIG_USB_NET_DM9601=m
+ CONFIG_USB_NET_SMSC75XX=m
+ CONFIG_USB_NET_SMSC95XX=y
+@@ -397,9 +398,10 @@ CONFIG_USB_NET_CDC_SUBSET=m
+ CONFIG_USB_ALI_M5632=y
+ CONFIG_USB_AN2720=y
+ CONFIG_USB_KC2190=y
+-# CONFIG_USB_NET_ZAURUS is not set
++CONFIG_USB_NET_ZAURUS=m
+ CONFIG_USB_NET_CX82310_ETH=m
+ CONFIG_USB_NET_KALMIA=m
++CONFIG_USB_NET_QMI_WWAN=m
+ CONFIG_USB_NET_INT51X1=m
+ CONFIG_USB_IPHETH=m
+ CONFIG_USB_SIERRA_NET=m
diff --git a/patches/linux-3.6.11/0201-Add-mutex-around-bcm_mailbox_property-function.patch b/patches/linux-3.6.11/0201-Add-mutex-around-bcm_mailbox_property-function.patch
new file mode 100644
index 0000000..5f5e687
--- /dev/null
+++ b/patches/linux-3.6.11/0201-Add-mutex-around-bcm_mailbox_property-function.patch
@@ -0,0 +1,38 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Mon, 7 Jan 2013 21:34:59 +0000
+Subject: [PATCH] Add mutex around bcm_mailbox_property function
+
+---
+ arch/arm/mach-bcm2708/vcio.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-bcm2708/vcio.c b/arch/arm/mach-bcm2708/vcio.c
+index 09b78b5..599eb63 100644
+--- a/arch/arm/mach-bcm2708/vcio.c
++++ b/arch/arm/mach-bcm2708/vcio.c
+@@ -245,7 +245,7 @@ static int mbox_copy_to_user(void *dst, const void *src, int size)
+ }
+ }
+
+-
++static DEFINE_MUTEX(mailbox_lock);
+ extern int bcm_mailbox_property(void *data, int size)
+ {
+ uint32_t success;
+@@ -253,6 +253,7 @@ extern int bcm_mailbox_property(void *data, int size)
+ void *mem_kern; /* the memory address accessed from driver */
+ int s = 0;
+
++ mutex_lock(&mailbox_lock);
+ /* allocate some memory for the messages communicating with GPU */
+ mem_kern = dma_alloc_coherent(NULL, PAGE_ALIGN(size), &mem_bus, GFP_ATOMIC);
+ if (mem_kern) {
+@@ -276,6 +277,8 @@ extern int bcm_mailbox_property(void *data, int size)
+ }
+ if (s != 0)
+ printk(KERN_ERR DRIVER_NAME ": %s failed (%d)\n", __func__, s);
++
++ mutex_unlock(&mailbox_lock);
+ return s;
+ }
+ EXPORT_SYMBOL_GPL(bcm_mailbox_property);
diff --git a/patches/linux-3.6.11/0202-Enable-ZRAM-and-RFKILL-config-options.patch b/patches/linux-3.6.11/0202-Enable-ZRAM-and-RFKILL-config-options.patch
new file mode 100644
index 0000000..ddd2d5c
--- /dev/null
+++ b/patches/linux-3.6.11/0202-Enable-ZRAM-and-RFKILL-config-options.patch
@@ -0,0 +1,39 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Mon, 7 Jan 2013 21:36:19 +0000
+Subject: [PATCH] Enable ZRAM and RFKILL config options
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 4eb9edb..477b78b 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -42,6 +42,8 @@ CONFIG_ARCH_BCM2708=y
+ CONFIG_BCM2708_DMAER=m
+ CONFIG_PREEMPT=y
+ CONFIG_AEABI=y
++CONFIG_CLEANCACHE=y
++CONFIG_FRONTSWAP=y
+ CONFIG_UACCESS_WITH_MEMCPY=y
+ CONFIG_SECCOMP=y
+ CONFIG_CC_STACKPROTECTOR=y
+@@ -330,6 +332,8 @@ CONFIG_MAC80211=m
+ CONFIG_MAC80211_RC_PID=y
+ CONFIG_MAC80211_MESH=y
+ CONFIG_WIMAX=m
++CONFIG_RFKILL=m
++CONFIG_RFKILL_INPUT=y
+ CONFIG_NET_9P=m
+ CONFIG_NFC=m
+ CONFIG_NFC_PN533=m
+@@ -917,6 +921,8 @@ CONFIG_STAGING=y
+ CONFIG_W35UND=m
+ CONFIG_PRISM2_USB=m
+ CONFIG_R8712U=m
++CONFIG_ZRAM=m
++CONFIG_ZSMALLOC=m
+ CONFIG_STAGING_MEDIA=y
+ CONFIG_LIRC_STAGING=y
+ CONFIG_LIRC_IGORPLUGUSB=m
diff --git a/patches/linux-3.6.11/0203-dwc_otg-fix-bug-in-dwc_otg_hcd.c-resulting-in-silent.patch b/patches/linux-3.6.11/0203-dwc_otg-fix-bug-in-dwc_otg_hcd.c-resulting-in-silent.patch
new file mode 100644
index 0000000..53a7fc0
--- /dev/null
+++ b/patches/linux-3.6.11/0203-dwc_otg-fix-bug-in-dwc_otg_hcd.c-resulting-in-silent.patch
@@ -0,0 +1,35 @@
+From: P33M <P33M@github.com>
+Date: Wed, 9 Jan 2013 16:12:04 +0000
+Subject: [PATCH] dwc_otg: fix bug in dwc_otg_hcd.c resulting in silent kernel
+ memory corruption, escalating to OOPS under high USB load.
+
+---
+ drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 2 --
+ drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c | 1 +
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+index 2b7945a..d5c94f4 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+@@ -500,8 +500,6 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd,
+ DWC_ERROR("DWC OTG HCD URB Enqueue failed adding QTD. "
+ "Error status %d\n", retval);
+ dwc_otg_hcd_qtd_free(qtd);
+- } else {
+- qtd->qh = *ep_handle;
+ }
+ intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk);
+ if (!intr_mask.b.sofintr && retval == 0) {
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
+index e6b2a7b..b337e1b 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
+@@ -946,6 +946,7 @@ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd,
+ if (retval == 0) {
+ DWC_CIRCLEQ_INSERT_TAIL(&((*qh)->qtd_list), qtd,
+ qtd_list_entry);
++ qtd->qh = *qh;
+ }
+ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags);
+
diff --git a/patches/linux-3.6.11/0204-Add-config-options-for-netfilter-log-and-more-dvb-mo.patch b/patches/linux-3.6.11/0204-Add-config-options-for-netfilter-log-and-more-dvb-mo.patch
new file mode 100644
index 0000000..cc6af18
--- /dev/null
+++ b/patches/linux-3.6.11/0204-Add-config-options-for-netfilter-log-and-more-dvb-mo.patch
@@ -0,0 +1,43 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Sun, 13 Jan 2013 15:58:09 +0000
+Subject: [PATCH] Add config options for netfilter log and more dvb modules
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 477b78b..c66ba6b 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -117,8 +117,10 @@ CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+ CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+ CONFIG_NETFILTER_XT_TARGET_CT=m
+ CONFIG_NETFILTER_XT_TARGET_DSCP=m
++CONFIG_NETFILTER_XT_TARGET_HMARK=m
+ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
+ CONFIG_NETFILTER_XT_TARGET_LED=m
++CONFIG_NETFILTER_XT_TARGET_LOG=m
+ CONFIG_NETFILTER_XT_TARGET_MARK=m
+ CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+ CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+@@ -627,6 +629,8 @@ CONFIG_DVB_USB_IT913X=m
+ CONFIG_DVB_USB_MXL111SF=m
+ CONFIG_DVB_USB_RTL28XXU=m
+ CONFIG_DVB_USB_AF9035=m
++CONFIG_SMS_SIANO_MDTV=m
++CONFIG_SMS_USB_DRV=m
+ # CONFIG_DVB_STB0899 is not set
+ # CONFIG_DVB_STB6100 is not set
+ # CONFIG_DVB_STV090x is not set
+@@ -667,10 +671,6 @@ CONFIG_DVB_USB_AF9035=m
+ # CONFIG_DVB_TDA1004X is not set
+ # CONFIG_DVB_NXT6000 is not set
+ # CONFIG_DVB_MT352 is not set
+-# CONFIG_DVB_DIB7000M is not set
+-# CONFIG_DVB_DIB7000P is not set
+-# CONFIG_DVB_DIB9000 is not set
+-# CONFIG_DVB_TDA10048 is not set
+ # CONFIG_DVB_HD29L2 is not set
+ # CONFIG_DVB_STV0367 is not set
+ # CONFIG_DVB_CXD2820R is not set
diff --git a/patches/linux-3.6.11/0205-Add-more-dvb-modules.patch b/patches/linux-3.6.11/0205-Add-more-dvb-modules.patch
new file mode 100644
index 0000000..80082aa
--- /dev/null
+++ b/patches/linux-3.6.11/0205-Add-more-dvb-modules.patch
@@ -0,0 +1,152 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Tue, 15 Jan 2013 00:05:59 +0000
+Subject: [PATCH] Add more dvb modules
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 91 ++++++---------------------------------
+ 1 file changed, 12 insertions(+), 79 deletions(-)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index c66ba6b..7e9eed2 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -423,9 +423,6 @@ CONFIG_ATH_COMMON=m
+ CONFIG_ATH9K=m
+ CONFIG_ATH9K_HTC=m
+ CONFIG_CARL9170=m
+-CONFIG_B43=m
+-CONFIG_B43_PHY_N=y
+-CONFIG_B43LEGACY=m
+ CONFIG_HOSTAP=m
+ CONFIG_LIBERTAS=m
+ CONFIG_LIBERTAS_USB=m
+@@ -519,6 +516,7 @@ CONFIG_IR_IGUANA=m
+ CONFIG_RC_LOOPBACK=m
+ CONFIG_IR_GPIO_CIR=m
+ CONFIG_MEDIA_ATTACH=y
++CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+ CONFIG_VIDEO_VIVI=m
+ CONFIG_USB_VIDEO_CLASS=m
+ CONFIG_USB_M5602=m
+@@ -591,10 +589,15 @@ CONFIG_USB_MR800=m
+ CONFIG_USB_DSBR=m
+ CONFIG_RADIO_SHARK=m
+ CONFIG_RADIO_SHARK2=m
++CONFIG_RADIO_SI4713=m
+ CONFIG_USB_KEENE=m
++CONFIG_RADIO_TEA5764=m
++CONFIG_RADIO_SAA7706H=m
++CONFIG_RADIO_TEF6862=m
+ CONFIG_DVB_USB=m
+ CONFIG_DVB_USB_A800=m
+ CONFIG_DVB_USB_DIBUSB_MB=m
++CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+ CONFIG_DVB_USB_DIBUSB_MC=m
+ CONFIG_DVB_USB_DIB0700=m
+ CONFIG_DVB_USB_UMT_010=m
+@@ -631,82 +634,8 @@ CONFIG_DVB_USB_RTL28XXU=m
+ CONFIG_DVB_USB_AF9035=m
+ CONFIG_SMS_SIANO_MDTV=m
+ CONFIG_SMS_USB_DRV=m
+-# CONFIG_DVB_STB0899 is not set
+-# CONFIG_DVB_STB6100 is not set
+-# CONFIG_DVB_STV090x is not set
+-# CONFIG_DVB_STV6110x is not set
+-# CONFIG_DVB_DRXK is not set
+-# CONFIG_DVB_TDA18271C2DD is not set
+-# CONFIG_DVB_CX24110 is not set
+-# CONFIG_DVB_CX24123 is not set
+-# CONFIG_DVB_MT312 is not set
+-# CONFIG_DVB_ZL10036 is not set
+-# CONFIG_DVB_ZL10039 is not set
+-# CONFIG_DVB_S5H1420 is not set
+-# CONFIG_DVB_STV0288 is not set
+-# CONFIG_DVB_STB6000 is not set
+-# CONFIG_DVB_STV0299 is not set
+-# CONFIG_DVB_STV6110 is not set
+-# CONFIG_DVB_STV0900 is not set
+-# CONFIG_DVB_TDA8083 is not set
+-# CONFIG_DVB_TDA10086 is not set
+-# CONFIG_DVB_TDA8261 is not set
+-# CONFIG_DVB_VES1X93 is not set
+-# CONFIG_DVB_TUNER_ITD1000 is not set
+-# CONFIG_DVB_TUNER_CX24113 is not set
+-# CONFIG_DVB_TDA826X is not set
+-# CONFIG_DVB_TUA6100 is not set
+-# CONFIG_DVB_CX24116 is not set
+-# CONFIG_DVB_SI21XX is not set
+-# CONFIG_DVB_DS3000 is not set
+-# CONFIG_DVB_MB86A16 is not set
+-# CONFIG_DVB_TDA10071 is not set
+-# CONFIG_DVB_SP8870 is not set
+-# CONFIG_DVB_SP887X is not set
+-# CONFIG_DVB_CX22700 is not set
+-# CONFIG_DVB_CX22702 is not set
+-# CONFIG_DVB_S5H1432 is not set
+-# CONFIG_DVB_DRXD is not set
+-# CONFIG_DVB_L64781 is not set
+-# CONFIG_DVB_TDA1004X is not set
+-# CONFIG_DVB_NXT6000 is not set
+-# CONFIG_DVB_MT352 is not set
+-# CONFIG_DVB_HD29L2 is not set
+-# CONFIG_DVB_STV0367 is not set
+-# CONFIG_DVB_CXD2820R is not set
+-# CONFIG_DVB_VES1820 is not set
+-# CONFIG_DVB_TDA10021 is not set
+-# CONFIG_DVB_TDA10023 is not set
+-# CONFIG_DVB_STV0297 is not set
+-# CONFIG_DVB_NXT200X is not set
+-# CONFIG_DVB_OR51211 is not set
+-# CONFIG_DVB_OR51132 is not set
+-# CONFIG_DVB_BCM3510 is not set
+-# CONFIG_DVB_LGDT330X is not set
+-# CONFIG_DVB_LGDT3305 is not set
+-# CONFIG_DVB_LG2160 is not set
+-# CONFIG_DVB_S5H1409 is not set
+-# CONFIG_DVB_AU8522_DTV is not set
+-# CONFIG_DVB_AU8522_V4L is not set
+-# CONFIG_DVB_S5H1411 is not set
+-# CONFIG_DVB_S921 is not set
+-# CONFIG_DVB_DIB8000 is not set
+-# CONFIG_DVB_MB86A20S is not set
+-# CONFIG_DVB_PLL is not set
+-# CONFIG_DVB_TUNER_DIB0070 is not set
+-# CONFIG_DVB_TUNER_DIB0090 is not set
+-# CONFIG_DVB_LNBP21 is not set
+-# CONFIG_DVB_LNBP22 is not set
+-# CONFIG_DVB_ISL6405 is not set
+-# CONFIG_DVB_ISL6421 is not set
+-# CONFIG_DVB_ISL6423 is not set
+-# CONFIG_DVB_A8293 is not set
+-# CONFIG_DVB_LGS8GL5 is not set
+-# CONFIG_DVB_LGS8GXX is not set
+-# CONFIG_DVB_ATBM8830 is not set
+-# CONFIG_DVB_TDA665x is not set
+-# CONFIG_DVB_IX2505V is not set
+-# CONFIG_DVB_M88RS2000 is not set
++CONFIG_DVB_B2C2_FLEXCOP=m
++CONFIG_DVB_B2C2_FLEXCOP_USB=m
+ CONFIG_FB=y
+ CONFIG_FB_BCM2708=y
+ # CONFIG_BACKLIGHT_GENERIC is not set
+@@ -921,9 +850,12 @@ CONFIG_STAGING=y
+ CONFIG_W35UND=m
+ CONFIG_PRISM2_USB=m
+ CONFIG_R8712U=m
++CONFIG_VT6656=m
+ CONFIG_ZRAM=m
+ CONFIG_ZSMALLOC=m
+ CONFIG_STAGING_MEDIA=y
++CONFIG_DVB_AS102=m
++CONFIG_EASYCAP=m
+ CONFIG_LIRC_STAGING=y
+ CONFIG_LIRC_IGORPLUGUSB=m
+ CONFIG_LIRC_IMON=m
+@@ -968,6 +900,7 @@ CONFIG_MSDOS_FS=y
+ CONFIG_VFAT_FS=y
+ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+ CONFIG_NTFS_FS=m
++CONFIG_NTFS_RW=y
+ CONFIG_TMPFS=y
+ CONFIG_TMPFS_POSIX_ACL=y
+ CONFIG_CONFIGFS_FS=y
diff --git a/patches/linux-3.6.11/0206-Return-error-value-from-bcm2708_setup_state.-Thanks-.patch b/patches/linux-3.6.11/0206-Return-error-value-from-bcm2708_setup_state.-Thanks-.patch
new file mode 100644
index 0000000..5a24c7f
--- /dev/null
+++ b/patches/linux-3.6.11/0206-Return-error-value-from-bcm2708_setup_state.-Thanks-.patch
@@ -0,0 +1,20 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Mon, 21 Jan 2013 23:03:53 +0000
+Subject: [PATCH] Return error value from bcm2708_setup_state. Thanks notro
+
+---
+ drivers/spi/spi-bcm2708.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c
+index ef8fef0..fb5f17b 100644
+--- a/drivers/spi/spi-bcm2708.c
++++ b/drivers/spi/spi-bcm2708.c
+@@ -378,6 +378,7 @@ static int bcm2708_spi_setup(struct spi_device *spi)
+ if (ret < 0) {
+ kfree(state);
+ spi->controller_state = NULL;
++ return ret;
+ }
+
+ dev_dbg(&spi->dev,
diff --git a/patches/linux-3.6.11/0207-spi-spi-bcm2708-respect-per-transfer-SPI-clock-speed.patch b/patches/linux-3.6.11/0207-spi-spi-bcm2708-respect-per-transfer-SPI-clock-speed.patch
new file mode 100644
index 0000000..716468a
--- /dev/null
+++ b/patches/linux-3.6.11/0207-spi-spi-bcm2708-respect-per-transfer-SPI-clock-speed.patch
@@ -0,0 +1,43 @@
+From: Kamal Mostafa <kamal@whence.com>
+Date: Mon, 22 Oct 2012 15:52:44 -0700
+Subject: [PATCH] spi/spi-bcm2708: respect per-transfer SPI clock speed_hz
+ value
+
+The bcm2708 SPI driver's bcm2708_process_transfer() was ignoring the
+per-transfer speed_hz value even when it was provided (it always just
+used the spi device's max_speed_hz value). Now, per-transfer speed_hz
+values are respected.
+
+Also added debug print to bcm2708_setup_state() to help keep an eye on
+the configured SPI parameters.
+
+Signed-off-by: Kamal Mostafa <kamal@whence.com>
+---
+ drivers/spi/spi-bcm2708.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c
+index fb5f17b..088cbaa 100644
+--- a/drivers/spi/spi-bcm2708.c
++++ b/drivers/spi/spi-bcm2708.c
+@@ -259,6 +259,10 @@ static int bcm2708_setup_state(struct spi_master *master,
+ if (state) {
+ state->cs = cs;
+ state->cdiv = cdiv;
++ dev_dbg(dev, "setup: want %d Hz; "
++ "bus_hz=%lu / cdiv=%u == %lu Hz; "
++ "mode %u: cs 0x%08X\n",
++ hz, bus_hz, cdiv, bus_hz/cdiv, mode, cs);
+ }
+
+ return 0;
+@@ -277,7 +281,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs,
+
+ if (xfer->bits_per_word || xfer->speed_hz) {
+ ret = bcm2708_setup_state(spi->master, &spi->dev, &state,
+- spi->max_speed_hz, spi->chip_select, spi->mode,
++ xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz,
++ spi->chip_select, spi->mode,
+ spi->bits_per_word);
+ if (ret)
+ return ret;
diff --git a/patches/linux-3.6.11/0208-spi-bcm2708-add-9-bit-support-using-LoSSI-mode.patch b/patches/linux-3.6.11/0208-spi-bcm2708-add-9-bit-support-using-LoSSI-mode.patch
new file mode 100644
index 0000000..3c58133
--- /dev/null
+++ b/patches/linux-3.6.11/0208-spi-bcm2708-add-9-bit-support-using-LoSSI-mode.patch
@@ -0,0 +1,68 @@
+From: notro <notro@tronnes.org>
+Date: Sat, 26 Jan 2013 20:38:03 +0100
+Subject: [PATCH] spi-bcm2708: add 9-bit support using LoSSI mode
+
+---
+ drivers/spi/spi-bcm2708.c | 30 ++++++++++++++++++++++++++++--
+ 1 file changed, 28 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c
+index 088cbaa..1744c1e 100644
+--- a/drivers/spi/spi-bcm2708.c
++++ b/drivers/spi/spi-bcm2708.c
+@@ -146,10 +146,31 @@ static inline void bcm2708_rd_fifo(struct bcm2708_spi *bs, int len)
+ static inline void bcm2708_wr_fifo(struct bcm2708_spi *bs, int len)
+ {
+ u8 byte;
++ u16 val;
+
+ if (len > bs->len)
+ len = bs->len;
+
++ if (unlikely(bcm2708_rd(bs, SPI_CS) & SPI_CS_LEN)) {
++ /* LoSSI mode */
++ if (unlikely(len % 2)) {
++ printk(KERN_ERR"bcm2708_wr_fifo: length must be even, skipping.\n");
++ bs->len = 0;
++ return;
++ }
++ while (len) {
++ if (bs->tx_buf) {
++ val = *(const u16 *)bs->tx_buf;
++ bs->tx_buf += 2;
++ } else
++ val = 0;
++ bcm2708_wr(bs, SPI_FIFO, val);
++ bs->len -= 2;
++ len -= 2;
++ }
++ return;
++ }
++
+ while (len--) {
+ byte = bs->tx_buf ? *bs->tx_buf++ : 0;
+ bcm2708_wr(bs, SPI_FIFO, byte);
+@@ -234,8 +255,12 @@ static int bcm2708_setup_state(struct spi_master *master,
+ switch (bpw) {
+ case 8:
+ break;
++ case 9:
++ /* Reading in LoSSI mode is a special case. See 'BCM2835 ARM Peripherals' datasheet */
++ cs |= SPI_CS_LEN;
++ break;
+ default:
+- dev_dbg(dev, "setup: invalid bits_per_word %u (must be 8)\n",
++ dev_dbg(dev, "setup: invalid bits_per_word %u (must be 8 or 9)\n",
+ bpw);
+ return -EINVAL;
+ }
+@@ -283,7 +308,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs,
+ ret = bcm2708_setup_state(spi->master, &spi->dev, &state,
+ xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz,
+ spi->chip_select, spi->mode,
+- spi->bits_per_word);
++ xfer->bits_per_word ? xfer->bits_per_word :
++ spi->bits_per_word);
+ if (ret)
+ return ret;
+
diff --git a/patches/linux-3.6.11/0209-Add-hwrng-hardware-random-number-generator-driver.patch b/patches/linux-3.6.11/0209-Add-hwrng-hardware-random-number-generator-driver.patch
new file mode 100644
index 0000000..7a32e1a
--- /dev/null
+++ b/patches/linux-3.6.11/0209-Add-hwrng-hardware-random-number-generator-driver.patch
@@ -0,0 +1,176 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Wed, 30 Jan 2013 11:44:26 +0000
+Subject: [PATCH] Add hwrng (hardware random number generator) driver
+
+---
+ arch/arm/mach-bcm2708/include/mach/platform.h | 1 +
+ drivers/char/hw_random/Kconfig | 11 +++
+ drivers/char/hw_random/Makefile | 1 +
+ drivers/char/hw_random/bcm2708-rng.c | 117 ++++++++++++++++++++++++++
+ 4 files changed, 130 insertions(+)
+ create mode 100755 drivers/char/hw_random/bcm2708-rng.c
+
+diff --git a/arch/arm/mach-bcm2708/include/mach/platform.h b/arch/arm/mach-bcm2708/include/mach/platform.h
+index 9c5d334..e063a1e 100644
+--- a/arch/arm/mach-bcm2708/include/mach/platform.h
++++ b/arch/arm/mach-bcm2708/include/mach/platform.h
+@@ -62,6 +62,7 @@
+ #define DMA_BASE (BCM2708_PERI_BASE + 0x7000) /* DMA controller */
+ #define ARM_BASE (BCM2708_PERI_BASE + 0xB000) /* BCM2708 ARM control block */
+ #define PM_BASE (BCM2708_PERI_BASE + 0x100000) /* Power Management, Reset controller and Watchdog registers */
++#define RNG_BASE (BCM2708_PERI_BASE + 0x104000) /* Hardware RNG */
+ #define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) /* GPIO */
+ #define UART0_BASE (BCM2708_PERI_BASE + 0x201000) /* Uart 0 */
+ #define MMCI0_BASE (BCM2708_PERI_BASE + 0x202000) /* MMC interface */
+diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
+index 7c0d391..ced6f01 100644
+--- a/drivers/char/hw_random/Kconfig
++++ b/drivers/char/hw_random/Kconfig
+@@ -289,3 +289,14 @@ config HW_RANDOM_EXYNOS
+ module will be called exynos-rng.
+
+ If unsure, say Y.
++
++config HW_RANDOM_BCM2708
++ tristate "BCM2708 generic true random number generator support"
++ depends on HW_RANDOM && ARCH_BCM2708
++ ---help---
++ This driver provides the kernel-side support for the BCM2708 hardware.
++
++ To compile this driver as a module, choose M here: the
++ module will be called bcm2708-rng.
++
++ If unsure, say N.
+\ No newline at end of file
+diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile
+index 39a757c..c6eb594 100644
+--- a/drivers/char/hw_random/Makefile
++++ b/drivers/char/hw_random/Makefile
+@@ -25,3 +25,4 @@ obj-$(CONFIG_HW_RANDOM_PICOXCELL) += picoxcell-rng.o
+ obj-$(CONFIG_HW_RANDOM_PPC4XX) += ppc4xx-rng.o
+ obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o
+ obj-$(CONFIG_HW_RANDOM_EXYNOS) += exynos-rng.o
++obj-$(CONFIG_HW_RANDOM_BCM2708) += bcm2708-rng.o
+diff --git a/drivers/char/hw_random/bcm2708-rng.c b/drivers/char/hw_random/bcm2708-rng.c
+new file mode 100755
+index 0000000..1ffa7d7
+--- /dev/null
++++ b/drivers/char/hw_random/bcm2708-rng.c
+@@ -0,0 +1,117 @@
++/**
++ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/hw_random.h>
++#include <linux/printk.h>
++
++#include <asm/io.h>
++#include <mach/hardware.h>
++#include <mach/platform.h>
++
++#define RNG_CTRL (0x0)
++#define RNG_STATUS (0x4)
++#define RNG_DATA (0x8)
++#define RNG_FF_THRESHOLD (0xc)
++
++/* enable rng */
++#define RNG_RBGEN 0x1
++/* double speed, less random mode */
++#define RNG_RBG2X 0x2
++
++/* the initial numbers generated are "less random" so will be discarded */
++#define RNG_WARMUP_COUNT 0x40000
++
++static int bcm2708_rng_data_read(struct hwrng *rng, u32 *buffer)
++{
++ void __iomem *rng_base = (void __iomem *)rng->priv;
++ unsigned words;
++ /* wait for a random number to be in fifo */
++ do {
++ words = __raw_readl(rng_base + RNG_STATUS)>>24;
++ }
++ while (words == 0);
++ /* read the random number */
++ *buffer = __raw_readl(rng_base + RNG_DATA);
++ return 4;
++}
++
++static struct hwrng bcm2708_rng_ops = {
++ .name = "bcm2708",
++ .data_read = bcm2708_rng_data_read,
++};
++
++static int __init bcm2708_rng_init(void)
++{
++ void __iomem *rng_base;
++ int err;
++
++ /* map peripheral */
++ rng_base = ioremap(RNG_BASE, 0x10);
++ pr_info("bcm2708_rng_init=%p\n", rng_base);
++ if (!rng_base) {
++ pr_err("bcm2708_rng_init failed to ioremap\n");
++ return -ENOMEM;
++ }
++ bcm2708_rng_ops.priv = (unsigned long)rng_base;
++ /* register driver */
++ err = hwrng_register(&bcm2708_rng_ops);
++ if (err) {
++ pr_err("bcm2708_rng_init hwrng_register()=%d\n", err);
++ iounmap(rng_base);
++ } else {
++ /* set warm-up count & enable */
++ __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS);
++ __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL);
++ }
++ return err;
++}
++
++static void __exit bcm2708_rng_exit(void)
++{
++ void __iomem *rng_base = (void __iomem *)bcm2708_rng_ops.priv;
++ pr_info("bcm2708_rng_exit\n");
++ /* disable rng hardware */
++ __raw_writel(0, rng_base + RNG_CTRL);
++ /* unregister driver */
++ hwrng_unregister(&bcm2708_rng_ops);
++ iounmap(rng_base);
++}
++
++module_init(bcm2708_rng_init);
++module_exit(bcm2708_rng_exit);
++
++MODULE_DESCRIPTION("BCM2708 H/W Random Number Generator (RNG) driver");
++MODULE_LICENSE("GPL and additional rights");
diff --git a/patches/linux-3.6.11/0210-Add-HW_RANDOM-BATMAN_ADV-and-CONFIG_NET_IPGRE.patch b/patches/linux-3.6.11/0210-Add-HW_RANDOM-BATMAN_ADV-and-CONFIG_NET_IPGRE.patch
new file mode 100644
index 0000000..6233845
--- /dev/null
+++ b/patches/linux-3.6.11/0210-Add-HW_RANDOM-BATMAN_ADV-and-CONFIG_NET_IPGRE.patch
@@ -0,0 +1,38 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Wed, 30 Jan 2013 12:45:18 +0000
+Subject: [PATCH] Add HW_RANDOM, BATMAN_ADV and CONFIG_NET_IPGRE
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 7e9eed2..62985f4 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -76,6 +76,8 @@ CONFIG_IP_PNP=y
+ CONFIG_IP_PNP_DHCP=y
+ CONFIG_IP_PNP_RARP=y
+ CONFIG_NET_IPIP=m
++CONFIG_NET_IPGRE_DEMUX=m
++CONFIG_NET_IPGRE=m
+ CONFIG_SYN_COOKIES=y
+ CONFIG_INET_AH=m
+ CONFIG_INET_ESP=m
+@@ -288,6 +290,7 @@ CONFIG_NET_ACT_PEDIT=m
+ CONFIG_NET_ACT_SIMP=m
+ CONFIG_NET_ACT_SKBEDIT=m
+ CONFIG_NET_ACT_CSUM=m
++CONFIG_BATMAN_ADV=m
+ CONFIG_NET_PKTGEN=m
+ CONFIG_HAMRADIO=y
+ CONFIG_AX25=m
+@@ -468,7 +471,7 @@ CONFIG_VT_HW_CONSOLE_BINDING=y
+ CONFIG_SERIAL_AMBA_PL011=y
+ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+ CONFIG_TTY_PRINTK=y
+-# CONFIG_HW_RANDOM is not set
++CONFIG_HW_RANDOM_BCM2708=m
+ CONFIG_RAW_DRIVER=y
+ CONFIG_BRCM_CHAR_DRIVERS=y
+ CONFIG_BCM_VC_CMA=y
diff --git a/patches/linux-3.6.11/0211-Add-raid0-module.patch b/patches/linux-3.6.11/0211-Add-raid0-module.patch
new file mode 100644
index 0000000..2d22ad8
--- /dev/null
+++ b/patches/linux-3.6.11/0211-Add-raid0-module.patch
@@ -0,0 +1,20 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Fri, 1 Feb 2013 19:54:05 +0000
+Subject: [PATCH] Add raid0 module
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 62985f4..570a312 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -361,6 +361,7 @@ CONFIG_SCSI_MULTI_LUN=y
+ CONFIG_SCSI_ISCSI_ATTRS=y
+ CONFIG_ISCSI_TCP=m
+ CONFIG_MD=y
++CONFIG_MD_RAID0=m
+ CONFIG_BLK_DEV_DM=m
+ CONFIG_DM_CRYPT=m
+ CONFIG_DM_SNAPSHOT=m
diff --git a/patches/linux-3.6.11/0212-Update-vchiq-to-version-supporting-querying-peer-ver.patch b/patches/linux-3.6.11/0212-Update-vchiq-to-version-supporting-querying-peer-ver.patch
new file mode 100644
index 0000000..03232cb
--- /dev/null
+++ b/patches/linux-3.6.11/0212-Update-vchiq-to-version-supporting-querying-peer-ver.patch
@@ -0,0 +1,295 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 7 Feb 2013 15:39:30 +0000
+Subject: [PATCH] Update vchiq to version supporting querying peer version of
+ services. Should be backwards compatible
+
+---
+ drivers/misc/vc04_services/interface/vchi/vchi.h | 3 +
+ .../vc04_services/interface/vchiq_arm/vchiq_cfg.h | 2 +-
+ .../vc04_services/interface/vchiq_arm/vchiq_core.c | 111 +++++++++++++++++++--
+ .../vc04_services/interface/vchiq_arm/vchiq_core.h | 5 +
+ .../vc04_services/interface/vchiq_arm/vchiq_if.h | 3 +
+ .../vc04_services/interface/vchiq_arm/vchiq_shim.c | 13 +++
+ 6 files changed, 126 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/misc/vc04_services/interface/vchi/vchi.h b/drivers/misc/vc04_services/interface/vchi/vchi.h
+index ee908e2..cee5291 100644
+--- a/drivers/misc/vc04_services/interface/vchi/vchi.h
++++ b/drivers/misc/vc04_services/interface/vchi/vchi.h
+@@ -208,6 +208,9 @@ extern int32_t vchi_service_open( VCHI_INSTANCE_T instance_handle,
+ SERVICE_CREATION_T *setup,
+ VCHI_SERVICE_HANDLE_T *handle);
+
++extern int32_t vchi_get_peer_version( const VCHI_SERVICE_HANDLE_T handle,
++ short *peer_version );
++
+ // Routine to close a named service
+ extern int32_t vchi_service_close( const VCHI_SERVICE_HANDLE_T handle );
+
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h
+index 2489d9d..493c86c 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h
+@@ -36,7 +36,7 @@
+
+ #define VCHIQ_MAGIC VCHIQ_MAKE_FOURCC('V', 'C', 'H', 'I')
+ /* The version of VCHIQ - change with any non-trivial change */
+-#define VCHIQ_VERSION 5
++#define VCHIQ_VERSION 6
+ /* The minimum compatible version - update to match VCHIQ_VERSION with any
+ ** incompatible change */
+ #define VCHIQ_VERSION_MIN 3
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c
+index 4b8d7cf..5470470 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c
+@@ -58,6 +58,10 @@ struct vchiq_open_payload {
+ short version_min;
+ };
+
++struct vchiq_openack_payload {
++ short version;
++};
++
+ /* we require this for consistency between endpoints */
+ vchiq_static_assert(sizeof(VCHIQ_HEADER_T) == 8);
+ vchiq_static_assert(IS_POW2(sizeof(VCHIQ_HEADER_T)));
+@@ -1402,6 +1406,7 @@ pause_bulks(VCHIQ_STATE_T *state)
+ static void
+ resume_bulks(VCHIQ_STATE_T *state)
+ {
++ int i;
+ if (unlikely(atomic_dec_return(&pause_bulks_count) != 0)) {
+ WARN_ON_ONCE(1);
+ atomic_set(&pause_bulks_count, 0);
+@@ -1410,6 +1415,34 @@ resume_bulks(VCHIQ_STATE_T *state)
+
+ /* Allow bulk transfers from all services */
+ mutex_unlock(&state->bulk_transfer_mutex);
++
++ if (state->deferred_bulks == 0)
++ return;
++
++ /* Deal with any bulks which had to be deferred due to being in
++ * paused state. Don't try to match up to number of deferred bulks
++ * in case we've had something come and close the service in the
++ * interim - just process all bulk queues for all services */
++ vchiq_log_info(vchiq_core_log_level, "%s: processing %d deferred bulks",
++ __func__, state->deferred_bulks);
++
++ for (i = 0; i < state->unused_service; i++) {
++ VCHIQ_SERVICE_T *service = state->services[i];
++ int resolved_rx = 0;
++ int resolved_tx = 0;
++ if (!service || (service->srvstate != VCHIQ_SRVSTATE_OPEN))
++ continue;
++
++ mutex_lock(&service->bulk_mutex);
++ resolved_rx = resolve_bulks(service, &service->bulk_rx);
++ resolved_tx = resolve_bulks(service, &service->bulk_tx);
++ mutex_unlock(&service->bulk_mutex);
++ if (resolved_rx)
++ notify_bulks(service, &service->bulk_rx, 1);
++ if (resolved_tx)
++ notify_bulks(service, &service->bulk_tx, 1);
++ }
++ state->deferred_bulks = 0;
+ }
+
+ static int
+@@ -1425,7 +1458,7 @@ parse_open(VCHIQ_STATE_T *state, VCHIQ_HEADER_T *header)
+ type = VCHIQ_MSG_TYPE(msgid);
+ localport = VCHIQ_MSG_DSTPORT(msgid);
+ remoteport = VCHIQ_MSG_SRCPORT(msgid);
+- if (size == sizeof(struct vchiq_open_payload)) {
++ if (size >= sizeof(struct vchiq_open_payload)) {
+ const struct vchiq_open_payload *payload =
+ (struct vchiq_open_payload *)header->data;
+ unsigned int fourcc;
+@@ -1458,7 +1491,17 @@ parse_open(VCHIQ_STATE_T *state, VCHIQ_HEADER_T *header)
+ unlock_service(service);
+ goto fail_open;
+ }
++ service->peer_version = version;
++
+ if (service->srvstate == VCHIQ_SRVSTATE_LISTENING) {
++ struct vchiq_openack_payload ack_payload = {
++ service->version
++ };
++ VCHIQ_ELEMENT_T body = {
++ &ack_payload,
++ sizeof(ack_payload)
++ };
++
+ /* Acknowledge the OPEN */
+ if (service->sync) {
+ if (queue_message_sync(state, NULL,
+@@ -1466,7 +1509,8 @@ parse_open(VCHIQ_STATE_T *state, VCHIQ_HEADER_T *header)
+ VCHIQ_MSG_OPENACK,
+ service->localport,
+ remoteport),
+- NULL, 0, 0, 0) == VCHIQ_RETRY)
++ &body, 1, sizeof(ack_payload),
++ 0) == VCHIQ_RETRY)
+ goto bail_not_ready;
+ } else {
+ if (queue_message(state, NULL,
+@@ -1474,7 +1518,8 @@ parse_open(VCHIQ_STATE_T *state, VCHIQ_HEADER_T *header)
+ VCHIQ_MSG_OPENACK,
+ service->localport,
+ remoteport),
+- NULL, 0, 0, 0) == VCHIQ_RETRY)
++ &body, 1, sizeof(ack_payload),
++ 0) == VCHIQ_RETRY)
+ goto bail_not_ready;
+ }
+
+@@ -1639,10 +1684,16 @@ parse_rx_slots(VCHIQ_STATE_T *state)
+ goto bail_not_ready;
+ break;
+ case VCHIQ_MSG_OPENACK:
++ if (size >= sizeof(struct vchiq_openack_payload)) {
++ const struct vchiq_openack_payload *payload =
++ (struct vchiq_openack_payload *)
++ header->data;
++ service->peer_version = payload->version;
++ }
+ vchiq_log_info(vchiq_core_log_level,
+- "%d: prs OPENACK@%x (%d->%d)",
+- state->id, (unsigned int)header,
+- remoteport, localport);
++ "%d: prs OPENACK@%x,%x (%d->%d) v:%d",
++ state->id, (unsigned int)header, size,
++ remoteport, localport, service->peer_version);
+ if (service->srvstate ==
+ VCHIQ_SRVSTATE_OPENING) {
+ service->remoteport = remoteport;
+@@ -1743,7 +1794,22 @@ parse_rx_slots(VCHIQ_STATE_T *state)
+
+ queue->remote_insert++;
+
+- if (state->conn_state ==
++ if (atomic_read(&pause_bulks_count)) {
++ state->deferred_bulks++;
++ vchiq_log_info(vchiq_core_log_level,
++ "%s: deferring bulk (%d)",
++ __func__,
++ state->deferred_bulks);
++ if (state->conn_state !=
++ VCHIQ_CONNSTATE_PAUSE_SENT)
++ vchiq_log_error(
++ vchiq_core_log_level,
++ "%s: bulks paused in "
++ "unexpected state %s",
++ __func__,
++ conn_state_names[
++ state->conn_state]);
++ } else if (state->conn_state ==
+ VCHIQ_CONNSTATE_CONNECTED) {
+ DEBUG_TRACE(PARSE_LINE);
+ resolved = resolve_bulks(service,
+@@ -2064,10 +2130,16 @@ sync_func(void *v)
+
+ switch (type) {
+ case VCHIQ_MSG_OPENACK:
++ if (size >= sizeof(struct vchiq_openack_payload)) {
++ const struct vchiq_openack_payload *payload =
++ (struct vchiq_openack_payload *)
++ header->data;
++ service->peer_version = payload->version;
++ }
+ vchiq_log_info(vchiq_sync_log_level,
+- "%d: sf OPENACK@%x (%d->%d)",
+- state->id, (unsigned int)header,
+- remoteport, localport);
++ "%d: sf OPENACK@%x,%x (%d->%d) v:%d",
++ state->id, (unsigned int)header, size,
++ remoteport, localport, service->peer_version);
+ if (service->srvstate == VCHIQ_SRVSTATE_OPENING) {
+ service->remoteport = remoteport;
+ vchiq_set_service_state(service,
+@@ -3329,6 +3401,25 @@ release_message_sync(VCHIQ_STATE_T *state, VCHIQ_HEADER_T *header)
+ }
+
+ VCHIQ_STATUS_T
++vchiq_get_peer_version(VCHIQ_SERVICE_HANDLE_T handle, short *peer_version)
++{
++ VCHIQ_STATUS_T status = VCHIQ_ERROR;
++ VCHIQ_SERVICE_T *service = find_service_by_handle(handle);
++
++ if (!service ||
++ (vchiq_check_service(service) != VCHIQ_SUCCESS) ||
++ !peer_version)
++ goto exit;
++ *peer_version = service->peer_version;
++ status = VCHIQ_SUCCESS;
++
++exit:
++ if (service)
++ unlock_service(service);
++ return status;
++}
++
++VCHIQ_STATUS_T
+ vchiq_get_config(VCHIQ_INSTANCE_T instance,
+ int config_size, VCHIQ_CONFIG_T *pconfig)
+ {
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h
+index 6952819..bddfc6a 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h
+@@ -294,6 +294,7 @@ typedef struct vchiq_service_struct {
+ atomic_t poll_flags;
+ short version;
+ short version_min;
++ short peer_version;
+
+ VCHIQ_STATE_T *state;
+ VCHIQ_INSTANCE_T instance;
+@@ -484,6 +485,10 @@ struct vchiq_state_struct {
+ /* Signalled when a free data slot becomes available. */
+ struct semaphore data_quota_event;
+
++ /* Incremented when there are bulk transfers which cannot be processed
++ * whilst paused and must be processed on resume */
++ int deferred_bulks;
++
+ struct state_stats_struct {
+ int slot_stalls;
+ int data_stalls;
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h
+index 3ef118f..c2c2d53 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h
+@@ -179,4 +179,7 @@ extern VCHIQ_STATUS_T vchiq_remote_release(VCHIQ_INSTANCE_T instance);
+ extern VCHIQ_STATUS_T vchiq_dump_phys_mem(VCHIQ_SERVICE_HANDLE_T service,
+ void *ptr, size_t num_bytes);
+
++extern VCHIQ_STATUS_T vchiq_get_peer_version(VCHIQ_SERVICE_HANDLE_T handle,
++ short *peer_version);
++
+ #endif /* VCHIQ_IF_H */
+diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
+index e682013..f752f8d 100644
+--- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
++++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
+@@ -712,6 +712,19 @@ int32_t vchi_service_destroy(const VCHI_SERVICE_HANDLE_T handle)
+ }
+ EXPORT_SYMBOL(vchi_service_destroy);
+
++int32_t vchi_get_peer_version( const VCHI_SERVICE_HANDLE_T handle, short *peer_version )
++{
++ int32_t ret = -1;
++ SHIM_SERVICE_T *service = (SHIM_SERVICE_T *)handle;
++ if(service)
++ {
++ VCHIQ_STATUS_T status = vchiq_get_peer_version(service->handle, peer_version);
++ ret = vchiq_status_to_vchi( status );
++ }
++ return ret;
++}
++EXPORT_SYMBOL(vchi_get_peer_version);
++
+ /* ----------------------------------------------------------------------
+ * read a uint32_t from buffer.
+ * network format is defined to be little endian
diff --git a/patches/linux-3.6.11/0213-Use-control-messages-for-audio-data-to-fix-scratch-h.patch b/patches/linux-3.6.11/0213-Use-control-messages-for-audio-data-to-fix-scratch-h.patch
new file mode 100644
index 0000000..8c1c00c
--- /dev/null
+++ b/patches/linux-3.6.11/0213-Use-control-messages-for-audio-data-to-fix-scratch-h.patch
@@ -0,0 +1,487 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 7 Feb 2013 15:50:17 +0000
+Subject: [PATCH] Use control messages for audio data to fix scratch hang. Use
+ vchiq versioning to try to handle mismatches kernel.img/start.elf
+
+---
+ sound/arm/bcm2835-ctl.c | 12 ++--
+ sound/arm/bcm2835-pcm.c | 7 +-
+ sound/arm/bcm2835-vchiq.c | 134 +++++++++++++++++++++----------------
+ sound/arm/vc_vchi_audioserv_defs.h | 6 +-
+ 4 files changed, 90 insertions(+), 69 deletions(-)
+
+diff --git a/sound/arm/bcm2835-ctl.c b/sound/arm/bcm2835-ctl.c
+index 0c1b80a..5e77752 100755
+--- a/sound/arm/bcm2835-ctl.c
++++ b/sound/arm/bcm2835-ctl.c
+@@ -41,7 +41,7 @@
+ static int snd_bcm2835_ctl_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+ {
+- audio_info(" ... IN ");
++ audio_info(" ... IN\n");
+ if (kcontrol->private_value == PCM_PLAYBACK_VOLUME) {
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 1;
+@@ -58,7 +58,7 @@ static int snd_bcm2835_ctl_info(struct snd_kcontrol *kcontrol,
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = AUDIO_DEST_MAX-1;
+ }
+- audio_info(" ... OUT ");
++ audio_info(" ... OUT\n");
+ return 0;
+ }
+
+@@ -75,13 +75,13 @@ static int toggle_mute(struct bcm2835_chip *chip, int nmute)
+ if(chip->mute == CTRL_VOL_MUTE)
+ {
+ chip->volume = chip->old_volume; /* copy the old volume back */
+- audio_info("Unmuting, old_volume = %d, volume = %d ...", chip->old_volume, chip->volume);
++ audio_info("Unmuting, old_volume = %d, volume = %d ...\n", chip->old_volume, chip->volume);
+ }
+ else /* otherwise we mute */
+ {
+ chip->old_volume = chip->volume;
+ chip->volume = 26214; /* set volume to minimum level AKA mute */
+- audio_info("Muting, old_volume = %d, volume = %d ...", chip->old_volume, chip->volume);
++ audio_info("Muting, old_volume = %d, volume = %d ...\n", chip->old_volume, chip->volume);
+ }
+
+ chip->mute = nmute;
+@@ -112,7 +112,7 @@ static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol,
+ int changed = 0;
+
+ if (kcontrol->private_value == PCM_PLAYBACK_VOLUME) {
+- audio_info("Volume change attempted.. volume = %d new_volume = %d", chip->volume, (int)ucontrol->value.integer.value[0]);
++ audio_info("Volume change attempted.. volume = %d new_volume = %d\n", chip->volume, (int)ucontrol->value.integer.value[0]);
+ if (chip->mute == CTRL_VOL_MUTE) {
+ /* changed = toggle_mute(chip, CTRL_VOL_UNMUTE); */
+ return 1; /* should return 0 to signify no change but the mixer takes this as the opposite sign (no idea why) */
+@@ -126,7 +126,7 @@ static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol,
+
+ } else if (kcontrol->private_value == PCM_PLAYBACK_MUTE) {
+ /* Now implemented */
+- audio_info(" Mute attempted");
++ audio_info(" Mute attempted\n");
+ changed = toggle_mute(chip, ucontrol->value.integer.value[0]);
+
+ } else if (kcontrol->private_value == PCM_PLAYBACK_DEVICE) {
+diff --git a/sound/arm/bcm2835-pcm.c b/sound/arm/bcm2835-pcm.c
+index 2f63ac6..fd8890c 100755
+--- a/sound/arm/bcm2835-pcm.c
++++ b/sound/arm/bcm2835-pcm.c
+@@ -281,14 +281,15 @@ static int snd_bcm2835_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
+ if (err == 0) {
+ alsa_stream->running = 1;
+ alsa_stream->draining = 1;
++ } else {
++ audio_error(" Failed to START alsa device (%d)\n", err);
+ }
+ }
+ break;
+ case SNDRV_PCM_TRIGGER_STOP:
+ audio_debug
+ ("bcm2835_AUDIO_TRIGGER_STOP running=%d draining=%d\n",
+- runtime->status->state == SNDRV_PCM_STATE_DRAINING,
+- alsa_stream->running);
++ alsa_stream->running, runtime->status->state == SNDRV_PCM_STATE_DRAINING);
+ if (runtime->status->state == SNDRV_PCM_STATE_DRAINING) {
+ audio_info("DRAINING\n");
+ alsa_stream->draining = 1;
+@@ -299,7 +300,7 @@ static int snd_bcm2835_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
+ if (alsa_stream->running) {
+ err = bcm2835_audio_stop(alsa_stream);
+ if (err != 0)
+- audio_error(" Failed to STOP alsa device\n");
++ audio_error(" Failed to STOP alsa device (%d)\n", err);
+ alsa_stream->running = 0;
+ }
+ break;
+diff --git a/sound/arm/bcm2835-vchiq.c b/sound/arm/bcm2835-vchiq.c
+index 14ca707..33b7481 100755
+--- a/sound/arm/bcm2835-vchiq.c
++++ b/sound/arm/bcm2835-vchiq.c
+@@ -26,6 +26,7 @@
+ #include <linux/slab.h>
+ #include <linux/delay.h>
+ #include <linux/atomic.h>
++#include <linux/module.h>
+
+ #include "bcm2835.h"
+
+@@ -43,7 +44,7 @@
+ #define LOG_INFO( fmt, arg... ) pr_info( "%s:%d " fmt, __func__, __LINE__, ##arg)
+ #define LOG_DBG( fmt, arg... ) pr_info( "%s:%d " fmt, __func__, __LINE__, ##arg)
+ #else
+- #define LOG_ERR( fmt, arg... )
++ #define LOG_ERR( fmt, arg... ) pr_err( "%s:%d " fmt, __func__, __LINE__, ##arg)
+ #define LOG_WARN( fmt, arg... )
+ #define LOG_INFO( fmt, arg... )
+ #define LOG_DBG( fmt, arg... )
+@@ -55,9 +56,12 @@ typedef struct opaque_AUDIO_INSTANCE_T {
+ struct semaphore msg_avail_event;
+ struct mutex vchi_mutex;
+ bcm2835_alsa_stream_t *alsa_stream;
+- int32_t result, got_result;
++ int32_t result;
++ short peer_version;
+ } AUDIO_INSTANCE_T;
+
++bool force_bulk = 1;
++
+ /* ---- Private Variables ---------------------------------------------------- */
+
+ /* ---- Private Function Prototypes ------------------------------------------ */
+@@ -173,9 +177,7 @@ static void audio_vchi_callback(void *param,
+ LOG_DBG
+ (" .. instance=%p, m.type=VC_AUDIO_MSG_TYPE_RESULT, success=%d\n",
+ instance, m.u.result.success);
+- BUG_ON(instance->got_result);
+ instance->result = m.u.result.success;
+- instance->got_result = 1;
+ up(&instance->msg_avail_event);
+ } else if (m.type == VC_AUDIO_MSG_TYPE_COMPLETE) {
+ irq_handler_t callback = (irq_handler_t) m.u.complete.callback;
+@@ -189,10 +191,10 @@ static void audio_vchi_callback(void *param,
+ LOG_DBG(" .. unexpected alsa_stream=%p, callback=%p\n",
+ alsa_stream, callback);
+ }
+- up(&instance->msg_avail_event);
+ } else {
+ LOG_DBG(" .. unexpected m.type=%d\n", m.type);
+ }
++ LOG_DBG(" .. OUT\n");
+ }
+
+ static AUDIO_INSTANCE_T *vc_vchi_audio_init(VCHI_INSTANCE_T vchi_instance,
+@@ -207,7 +209,7 @@ static AUDIO_INSTANCE_T *vc_vchi_audio_init(VCHI_INSTANCE_T vchi_instance,
+ LOG_DBG("%s: start", __func__);
+
+ if (num_connections > VCHI_MAX_NUM_CONNECTIONS) {
+- LOG_ERR("%s: unsupported number of connections %u (max=%u)",
++ LOG_ERR("%s: unsupported number of connections %u (max=%u)\n",
+ __func__, num_connections, VCHI_MAX_NUM_CONNECTIONS);
+
+ return NULL;
+@@ -216,17 +218,14 @@ static AUDIO_INSTANCE_T *vc_vchi_audio_init(VCHI_INSTANCE_T vchi_instance,
+ instance = kmalloc(sizeof(*instance), GFP_KERNEL);
+
+ memset(instance, 0, sizeof(*instance));
+-
+ instance->num_connections = num_connections;
+- /* Create the message available event */
+- sema_init(&instance->msg_avail_event,1);
+
+ /* Create a lock for exclusive, serialized VCHI connection access */
+ mutex_init(&instance->vchi_mutex);
+ /* Open the VCHI service connections */
+ for (i = 0; i < num_connections; i++) {
+ SERVICE_CREATION_T params = {
+- VCHI_VERSION(VC_AUDIOSERV_VER), // version
++ VCHI_VERSION_EX(VC_AUDIOSERV_VER, VC_AUDIOSERV_MIN_VER),
+ VC_AUDIO_SERVER_NAME, // 4cc service code
+ vchi_connections[i], // passed in fn pointers
+ 0, // rx fifo size (unused)
+@@ -242,7 +241,7 @@ static AUDIO_INSTANCE_T *vc_vchi_audio_init(VCHI_INSTANCE_T vchi_instance,
+ &instance->vchi_handle[i]);
+ if (status) {
+ LOG_ERR
+- ("%s: failed to open VCHI service connection (status=%d)",
++ ("%s: failed to open VCHI service connection (status=%d)\n",
+ __func__, status);
+
+ goto err_close_services;
+@@ -270,7 +269,7 @@ static int32_t vc_vchi_audio_deinit(AUDIO_INSTANCE_T * instance)
+ LOG_DBG(" .. IN\n");
+
+ if (instance == NULL) {
+- LOG_ERR("%s: invalid handle %p", __func__, instance);
++ LOG_ERR("%s: invalid handle %p\n", __func__, instance);
+
+ return -1;
+ }
+@@ -291,7 +290,7 @@ static int32_t vc_vchi_audio_deinit(AUDIO_INSTANCE_T * instance)
+ success = vchi_service_close(instance->vchi_handle[i]);
+ if (success != 0) {
+ LOG_ERR
+- ("%s: failed to close VCHI service connection (status=%d)",
++ ("%s: failed to close VCHI service connection (status=%d)\n",
+ __func__, success);
+ }
+ }
+@@ -316,7 +315,7 @@ static int bcm2835_audio_open_connection(bcm2835_alsa_stream_t * alsa_stream)
+ LOG_INFO("%s: start", __func__);
+ //BUG_ON(instance);
+ if (instance) {
+- LOG_ERR("%s: VCHI instance already open (%p)",
++ LOG_ERR("%s: VCHI instance already open (%p)\n",
+ __func__, instance);
+ instance->alsa_stream = alsa_stream;
+ alsa_stream->instance = instance;
+@@ -327,7 +326,7 @@ static int bcm2835_audio_open_connection(bcm2835_alsa_stream_t * alsa_stream)
+ /* Initialize and create a VCHI connection */
+ ret = vchi_initialise(&vchi_instance);
+ if (ret != 0) {
+- LOG_ERR("%s: failed to initialise VCHI instance (ret=%d)",
++ LOG_ERR("%s: failed to initialise VCHI instance (ret=%d)\n",
+ __func__, ret);
+
+ ret = -EIO;
+@@ -335,7 +334,7 @@ static int bcm2835_audio_open_connection(bcm2835_alsa_stream_t * alsa_stream)
+ }
+ ret = vchi_connect(NULL, 0, vchi_instance);
+ if (ret != 0) {
+- LOG_ERR("%s: failed to connect VCHI instance (ret=%d)",
++ LOG_ERR("%s: failed to connect VCHI instance (ret=%d)\n",
+ __func__, ret);
+
+ ret = -EIO;
+@@ -346,7 +345,7 @@ static int bcm2835_audio_open_connection(bcm2835_alsa_stream_t * alsa_stream)
+ instance = vc_vchi_audio_init(vchi_instance, &vchi_connection, 1);
+
+ if (instance == NULL /*|| audio_handle != instance */ ) {
+- LOG_ERR("%s: failed to initialize audio service", __func__);
++ LOG_ERR("%s: failed to initialize audio service\n", __func__);
+
+ ret = -EPERM;
+ goto err_free_mem;
+@@ -394,7 +393,7 @@ int bcm2835_audio_open(bcm2835_alsa_stream_t * alsa_stream)
+ VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);
+
+ if (success != 0) {
+- LOG_ERR("%s: failed on vchi_msg_queue (status=%d)",
++ LOG_ERR("%s: failed on vchi_msg_queue (status=%d)\n",
+ __func__, success);
+
+ ret = -1;
+@@ -430,20 +429,22 @@ static int bcm2835_audio_set_ctls_chan(bcm2835_alsa_stream_t * alsa_stream,
+ }
+ vchi_service_use(instance->vchi_handle[0]);
+
+- instance->got_result = 0;
+ instance->result = -1;
+
+ m.type = VC_AUDIO_MSG_TYPE_CONTROL;
+ m.u.control.dest = chip->dest;
+ m.u.control.volume = chip->volume;
+
++ /* Create the message available event */
++ sema_init(&instance->msg_avail_event, 0);
++
+ /* Send the message to the videocore */
+ success = vchi_msg_queue(instance->vchi_handle[0],
+ &m, sizeof m,
+ VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);
+
+ if (success != 0) {
+- LOG_ERR("%s: failed on vchi_msg_queue (status=%d)",
++ LOG_ERR("%s: failed on vchi_msg_queue (status=%d)\n",
+ __func__, success);
+
+ ret = -1;
+@@ -451,18 +452,16 @@ static int bcm2835_audio_set_ctls_chan(bcm2835_alsa_stream_t * alsa_stream,
+ }
+
+ /* We are expecting a reply from the videocore */
+- while (!instance->got_result) {
+- if (down_interruptible(&instance->msg_avail_event)) {
+- LOG_ERR("%s: failed on waiting for event (status=%d)",
+- __func__, success);
++ if (down_interruptible(&instance->msg_avail_event)) {
++ LOG_ERR("%s: failed on waiting for event (status=%d)\n",
++ __func__, success);
+
+- ret = -1;
+- goto unlock;
+- }
++ ret = -1;
++ goto unlock;
+ }
+
+ if (instance->result != 0) {
+- LOG_ERR("%s: result=%d", __func__, instance->result);
++ LOG_ERR("%s: result=%d\n", __func__, instance->result);
+
+ ret = -1;
+ goto unlock;
+@@ -489,16 +488,16 @@ int bcm2835_audio_set_ctls(bcm2835_chip_t * chip)
+ if (chip->avail_substreams & (1 << i)) {
+ if (!chip->alsa_stream[i])
+ {
+- LOG_DBG(" No ALSA stream available?! ");
++ LOG_DBG(" No ALSA stream available?! %i:%p (%x)\n", i, chip->alsa_stream[i], chip->avail_substreams);
+ ret = 0;
+ }
+ else if (bcm2835_audio_set_ctls_chan /* returns 0 on success */
+ (chip->alsa_stream[i], chip) != 0)
+ {
+- LOG_DBG("Couldn't set the controls for stream %d", i);
++ LOG_DBG("Couldn't set the controls for stream %d\n", i);
+ ret = -1;
+ }
+- LOG_DBG(" Controls set for stream %d", i);
++ else LOG_DBG(" Controls set for stream %d\n", i);
+ }
+ }
+ LOG_DBG(" .. OUT ret=%d\n", ret);
+@@ -533,7 +532,6 @@ int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream,
+ }
+ vchi_service_use(instance->vchi_handle[0]);
+
+- instance->got_result = 0;
+ instance->result = -1;
+
+ m.type = VC_AUDIO_MSG_TYPE_CONFIG;
+@@ -541,13 +539,16 @@ int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream,
+ m.u.config.samplerate = samplerate;
+ m.u.config.bps = bps;
+
++ /* Create the message available event */
++ sema_init(&instance->msg_avail_event, 0);
++
+ /* Send the message to the videocore */
+ success = vchi_msg_queue(instance->vchi_handle[0],
+ &m, sizeof m,
+ VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);
+
+ if (success != 0) {
+- LOG_ERR("%s: failed on vchi_msg_queue (status=%d)",
++ LOG_ERR("%s: failed on vchi_msg_queue (status=%d)\n",
+ __func__, success);
+
+ ret = -1;
+@@ -555,14 +556,12 @@ int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream,
+ }
+
+ /* We are expecting a reply from the videocore */
+- while (!instance->got_result) {
+- if (down_interruptible(&instance->msg_avail_event)) {
+- LOG_ERR("%s: failed on waiting for event (status=%d)",
+- __func__, success);
++ if (down_interruptible(&instance->msg_avail_event)) {
++ LOG_ERR("%s: failed on waiting for event (status=%d)\n",
++ __func__, success);
+
+- ret = -1;
+- goto unlock;
+- }
++ ret = -1;
++ goto unlock;
+ }
+
+ if (instance->result != 0) {
+@@ -688,7 +687,10 @@ int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream)
+ vchi_service_use(instance->vchi_handle[0]);
+
+ m.type = VC_AUDIO_MSG_TYPE_CLOSE;
+- instance->got_result = 0;
++
++ /* Create the message available event */
++ sema_init(&instance->msg_avail_event, 0);
++
+ /* Send the message to the videocore */
+ success = vchi_msg_queue(instance->vchi_handle[0],
+ &m, sizeof m,
+@@ -700,14 +702,12 @@ int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream)
+ ret = -1;
+ goto unlock;
+ }
+- while (!instance->got_result) {
+- if (down_interruptible(&instance->msg_avail_event)) {
+- LOG_ERR("%s: failed on waiting for event (status=%d)",
+- __func__, success);
++ if (down_interruptible(&instance->msg_avail_event)) {
++ LOG_ERR("%s: failed on waiting for event (status=%d)",
++ __func__, success);
+
+- ret = -1;
+- goto unlock;
+- }
++ ret = -1;
++ goto unlock;
+ }
+ if (instance->result != 0) {
+ LOG_ERR("%s: failed result (status=%d)",
+@@ -751,8 +751,13 @@ int bcm2835_audio_write(bcm2835_alsa_stream_t * alsa_stream, uint32_t count,
+ }
+ vchi_service_use(instance->vchi_handle[0]);
+
++ if ( instance->peer_version==0 && vchi_get_peer_version(instance->vchi_handle[0], &instance->peer_version) == 0 ) {
++ LOG_DBG("%s: client version %d connected\n", __func__, instance->peer_version);
++ }
+ m.type = VC_AUDIO_MSG_TYPE_WRITE;
+ m.u.write.count = count;
++ // old version uses bulk, new version uses control
++ m.u.write.max_packet = instance->peer_version < 2 || force_bulk ? 0:4000;
+ m.u.write.callback = alsa_stream->fifo_irq_handler;
+ m.u.write.cookie = alsa_stream;
+ m.u.write.silence = src == NULL;
+@@ -769,17 +774,27 @@ int bcm2835_audio_write(bcm2835_alsa_stream_t * alsa_stream, uint32_t count,
+ ret = -1;
+ goto unlock;
+ }
+- LOG_DBG(" ... sent header\n");
+ if (!m.u.write.silence) {
+- /* Send the message to the videocore */
+- success = vchi_bulk_queue_transmit(instance->vchi_handle[0],
+- src, count,
+- 0 *
+- VCHI_FLAGS_BLOCK_UNTIL_QUEUED
+- +
+- 1 *
+- VCHI_FLAGS_BLOCK_UNTIL_DATA_READ,
+- NULL);
++ if (m.u.write.max_packet == 0) {
++ /* Send the message to the videocore */
++ success = vchi_bulk_queue_transmit(instance->vchi_handle[0],
++ src, count,
++ 0 *
++ VCHI_FLAGS_BLOCK_UNTIL_QUEUED
++ +
++ 1 *
++ VCHI_FLAGS_BLOCK_UNTIL_DATA_READ,
++ NULL);
++ } else {
++ while (count > 0) {
++ int bytes = min((int)m.u.write.max_packet, (int)count);
++ success = vchi_msg_queue(instance->vchi_handle[0],
++ src, bytes,
++ VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);
++ src = (char *)src + bytes;
++ count -= bytes;
++ }
++ }
+ if (success != 0) {
+ LOG_ERR
+ ("%s: failed on vchi_bulk_queue_transmit (status=%d)",
+@@ -824,3 +839,6 @@ uint32_t bcm2835_audio_retrieve_buffers(bcm2835_alsa_stream_t * alsa_stream)
+ atomic_sub(count, &alsa_stream->retrieved);
+ return count;
+ }
++
++module_param(force_bulk, bool, 0444);
++MODULE_PARM_DESC(force_bulk, "Force use of vchiq bulk for audio");
+diff --git a/sound/arm/vc_vchi_audioserv_defs.h b/sound/arm/vc_vchi_audioserv_defs.h
+index 2020ce4..af3e6eb 100644
+--- a/sound/arm/vc_vchi_audioserv_defs.h
++++ b/sound/arm/vc_vchi_audioserv_defs.h
+@@ -15,7 +15,8 @@
+ #ifndef _VC_AUDIO_DEFS_H_
+ #define _VC_AUDIO_DEFS_H_
+
+-#define VC_AUDIOSERV_VER 1
++#define VC_AUDIOSERV_MIN_VER 1
++#define VC_AUDIOSERV_VER 2
+
+ // FourCC code used for VCHI connection
+ #define VC_AUDIO_SERVER_NAME MAKE_FOURCC("AUDS")
+@@ -79,7 +80,8 @@ typedef struct {
+ uint32_t count; // in bytes
+ void *callback;
+ void *cookie;
+- uint32_t silence;
++ uint16_t silence;
++ uint16_t max_packet;
+ } VC_AUDIO_WRITE_T;
+
+ // Generic result for a request (VC->HOST)
diff --git a/patches/linux-3.6.11/0214-Default-force_bulk-to-false.patch b/patches/linux-3.6.11/0214-Default-force_bulk-to-false.patch
new file mode 100644
index 0000000..6242e45
--- /dev/null
+++ b/patches/linux-3.6.11/0214-Default-force_bulk-to-false.patch
@@ -0,0 +1,21 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 7 Feb 2013 16:17:03 +0000
+Subject: [PATCH] Default force_bulk to false
+
+---
+ sound/arm/bcm2835-vchiq.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/arm/bcm2835-vchiq.c b/sound/arm/bcm2835-vchiq.c
+index 33b7481..9ecb2d6 100755
+--- a/sound/arm/bcm2835-vchiq.c
++++ b/sound/arm/bcm2835-vchiq.c
+@@ -60,7 +60,7 @@ typedef struct opaque_AUDIO_INSTANCE_T {
+ short peer_version;
+ } AUDIO_INSTANCE_T;
+
+-bool force_bulk = 1;
++bool force_bulk = false;
+
+ /* ---- Private Variables ---------------------------------------------------- */
+
diff --git a/patches/linux-3.6.11/0215-Add-missing-newlines-to-log-messages.patch b/patches/linux-3.6.11/0215-Add-missing-newlines-to-log-messages.patch
new file mode 100644
index 0000000..a0bcce1
--- /dev/null
+++ b/patches/linux-3.6.11/0215-Add-missing-newlines-to-log-messages.patch
@@ -0,0 +1,97 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Thu, 7 Feb 2013 17:04:13 +0000
+Subject: [PATCH] Add missing newlines to log messages
+
+---
+ drivers/cpufreq/bcm2835-cpufreq.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/cpufreq/bcm2835-cpufreq.c b/drivers/cpufreq/bcm2835-cpufreq.c
+index 6ff1edb..5a19212 100755
+--- a/drivers/cpufreq/bcm2835-cpufreq.c
++++ b/drivers/cpufreq/bcm2835-cpufreq.c
+@@ -91,7 +91,7 @@ static uint32_t bcm2835_cpufreq_set_clock(int cur_rate, int arm_rate)
+ if (s == 0 && (msg.request_code & 0x80000000))
+ actual_rate = msg.tag.val/1000;
+
+- print_debug("Setting new frequency = %d -> %d (actual %d)", cur_rate, arm_rate, actual_rate);
++ print_debug("Setting new frequency = %d -> %d (actual %d)\n", cur_rate, arm_rate, actual_rate);
+ return actual_rate;
+ }
+
+@@ -117,7 +117,7 @@ static uint32_t bcm2835_cpufreq_get_clock(int tag)
+ if (s == 0 && (msg.request_code & 0x80000000))
+ arm_rate = msg.tag.val/1000;
+
+- print_debug("%s frequency = %d",
++ print_debug("%s frequency = %d\n",
+ tag == VCMSG_GET_CLOCK_RATE ? "Current":
+ tag == VCMSG_GET_MIN_CLOCK ? "Min":
+ tag == VCMSG_GET_MAX_CLOCK ? "Max":
+@@ -133,7 +133,7 @@ static uint32_t bcm2835_cpufreq_get_clock(int tag)
+ */
+ static int __init bcm2835_cpufreq_module_init(void)
+ {
+- print_debug("IN");
++ print_debug("IN\n");
+ return cpufreq_register_driver(&bcm2835_cpufreq_driver);
+ }
+
+@@ -144,7 +144,7 @@ static int __init bcm2835_cpufreq_module_init(void)
+ */
+ static void __exit bcm2835_cpufreq_module_exit(void)
+ {
+- print_debug("IN");
++ print_debug("IN\n");
+ cpufreq_unregister_driver(&bcm2835_cpufreq_driver);
+ return;
+ }
+@@ -164,7 +164,7 @@ static int bcm2835_cpufreq_driver_init(struct cpufreq_policy *policy)
+ policy->max = policy->cpuinfo.max_freq = bcm2835_cpufreq_get_clock(VCMSG_GET_MAX_CLOCK);
+ policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE);
+
+- print_info("min=%d max=%d cur=%d", policy->min, policy->max, policy->cur);
++ print_info("min=%d max=%d cur=%d\n", policy->min, policy->max, policy->cur);
+ return 0;
+ }
+
+@@ -178,7 +178,7 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned
+ {
+ unsigned int target = target_freq;
+ unsigned int cur = policy->cur;
+- print_debug("%s: min=%d max=%d cur=%d target=%d",policy->governor->name,policy->min,policy->max,policy->cur,target_freq);
++ print_debug("%s: min=%d max=%d cur=%d target=%d\n",policy->governor->name,policy->min,policy->max,policy->cur,target_freq);
+
+ /* if we are above min and using ondemand, then just use max */
+ if (strcmp("ondemand", policy->governor->name)==0 && target > policy->min)
+@@ -192,18 +192,18 @@ static int bcm2835_cpufreq_driver_target(struct cpufreq_policy *policy, unsigned
+
+ if (!policy->cur)
+ {
+- print_err("Error occurred setting a new frequency (%d)!", target);
++ print_err("Error occurred setting a new frequency (%d)!\n", target);
+ policy->cur = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE);
+ return -EINVAL;
+ }
+- print_debug("Freq %d->%d (min=%d max=%d target=%d request=%d)", cur, policy->cur, policy->min, policy->max, target_freq, target);
++ print_debug("Freq %d->%d (min=%d max=%d target=%d request=%d)\n", cur, policy->cur, policy->min, policy->max, target_freq, target);
+ return 0;
+ }
+
+ static unsigned int bcm2835_cpufreq_driver_get(unsigned int cpu)
+ {
+ unsigned int actual_rate = bcm2835_cpufreq_get_clock(VCMSG_GET_CLOCK_RATE);
+- print_debug("%d", actual_rate);
++ print_debug("cpu=%d\n", actual_rate);
+ return actual_rate;
+ }
+
+@@ -215,7 +215,7 @@ static unsigned int bcm2835_cpufreq_driver_get(unsigned int cpu)
+
+ static int bcm2835_cpufreq_driver_verify(struct cpufreq_policy *policy)
+ {
+- print_info("switching to governor %s", policy->governor->name);
++ print_info("switching to governor %s\n", policy->governor->name);
+ return 0;
+ }
+
diff --git a/patches/linux-3.6.11/0216-Changed-wording-on-logging.-Previously-we-received-e.patch b/patches/linux-3.6.11/0216-Changed-wording-on-logging.-Previously-we-received-e.patch
new file mode 100644
index 0000000..a626255
--- /dev/null
+++ b/patches/linux-3.6.11/0216-Changed-wording-on-logging.-Previously-we-received-e.patch
@@ -0,0 +1,32 @@
+From: Technion <Technion>
+Date: Mon, 11 Feb 2013 22:08:53 +1100
+Subject: [PATCH] Changed wording on logging. Previously, we received errors
+ like this: mmc0: could read SD Status register (SSR) at the 3th attempt A
+ more sensible response is now returned. A typo also fixed in comments.
+
+---
+ drivers/mmc/core/sd.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
+index 3302478..5366b31 100644
+--- a/drivers/mmc/core/sd.c
++++ b/drivers/mmc/core/sd.c
+@@ -238,7 +238,7 @@ static int mmc_read_scr(struct mmc_card *card)
+
+ err = mmc_app_send_scr(card, card->raw_scr);
+ if( !err )
+- break; // sucess!!!
++ break; // success!!!
+
+ touch_nmi_watchdog(); // we are still alive!
+
+@@ -320,7 +320,7 @@ static int mmc_read_ssr(struct mmc_card *card)
+
+ if( tries > 1 )
+ {
+- pr_info("%s: could read SD Status register (SSR) at the %dth attempt\n", mmc_hostname(card->host), tries );
++ pr_info("%s: read SD Status register (SSR) after %d attempts\n", mmc_hostname(card->host), tries );
+ }
+
+ for (i = 0; i < 16; i++)
diff --git a/patches/linux-3.6.11/0217-Fix-for-low-bogomips-value-reported.patch b/patches/linux-3.6.11/0217-Fix-for-low-bogomips-value-reported.patch
new file mode 100644
index 0000000..994e10b
--- /dev/null
+++ b/patches/linux-3.6.11/0217-Fix-for-low-bogomips-value-reported.patch
@@ -0,0 +1,68 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Tue, 12 Feb 2013 01:04:21 +0000
+Subject: [PATCH] Fix for low bogomips value reported. The delay loop was badly
+ aligned and generated extra stalls
+
+---
+ arch/arm/mach-bcm2708/bcm2708.c | 9 +++------
+ arch/arm/mach-bcm2708/delay.S | 1 +
+ 2 files changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c
+index 7fe7283..7294aa0 100644
+--- a/arch/arm/mach-bcm2708/bcm2708.c
++++ b/arch/arm/mach-bcm2708/bcm2708.c
+@@ -160,13 +160,12 @@ static inline uint32_t timer_read(void)
+ return readl(__io_address(ST_BASE + 0x04));
+ }
+
++#ifdef ARCH_HAS_READ_CURRENT_TIMER
+ int read_current_timer(unsigned long *timer_val)
+ {
+ *timer_val = timer_read();
+ return 0;
+ }
+-
+-#ifdef CONFIG_ARM_ARCH_TIMER
+ EXPORT_SYMBOL(read_current_timer);
+ #endif
+
+@@ -759,8 +758,6 @@ void __init bcm2708_init(void)
+ static void timer_set_mode(enum clock_event_mode mode,
+ struct clock_event_device *clk)
+ {
+- unsigned long stc;
+-
+ switch (mode) {
+ case CLOCK_EVT_MODE_ONESHOT: /* Leave the timer disabled, .set_next_event will enable it */
+ case CLOCK_EVT_MODE_SHUTDOWN:
+@@ -887,7 +884,7 @@ static inline void bcm2708_init_led(void)
+
+ /* The assembly versions in delay.S don't account for core freq changing in cpufreq driver */
+ /* Use 1MHz system timer for busy waiting */
+-void bcm2708_udelay(unsigned long usecs)
++static void bcm2708_udelay(unsigned long usecs)
+ {
+ unsigned long start = timer_read();
+ unsigned long now;
+@@ -897,7 +894,7 @@ void bcm2708_udelay(unsigned long usecs)
+ }
+
+
+-void bcm2708_const_udelay(unsigned long scaled_usecs)
++static void bcm2708_const_udelay(unsigned long scaled_usecs)
+ {
+ /* want /107374, this is about 3% bigger. We know usecs is less than 2000, so shouldn't overflow */
+ const unsigned long usecs = scaled_usecs * 10 >> 20;
+diff --git a/arch/arm/mach-bcm2708/delay.S b/arch/arm/mach-bcm2708/delay.S
+index 91754d6..06f4780 100644
+--- a/arch/arm/mach-bcm2708/delay.S
++++ b/arch/arm/mach-bcm2708/delay.S
+@@ -12,6 +12,7 @@
+ #include <asm/param.h>
+
+ .text
++.align 3 @ 8 byte alignment seems to be needed to avoid fetching stalls
+ @ Delay routine
+ ENTRY(bcm2708_delay)
+ subs r0, r0, #1
diff --git a/patches/linux-3.6.11/0218-dwc_otg-Fix-unsafe-access-of-QTD-during-URB-enqueue.patch b/patches/linux-3.6.11/0218-dwc_otg-Fix-unsafe-access-of-QTD-during-URB-enqueue.patch
new file mode 100644
index 0000000..420d480
--- /dev/null
+++ b/patches/linux-3.6.11/0218-dwc_otg-Fix-unsafe-access-of-QTD-during-URB-enqueue.patch
@@ -0,0 +1,85 @@
+From: P33M <P33M@github.com>
+Date: Fri, 15 Feb 2013 22:36:47 +0000
+Subject: [PATCH] dwc_otg: Fix unsafe access of QTD during URB enqueue
+
+In dwc_otg_hcd_urb_enqueue during qtd creation, it was possible that the
+transaction could complete almost immediately after the qtd was assigned
+to a host channel during URB enqueue, which meant the qtd pointer was no
+longer valid having been completed and removed. Usually, this resulted in
+an OOPS during URB submission. By predetermining whether transactions
+need to be queued or not, this unsafe pointer access is avoided.
+
+This bug was only evident on the Pi model A where a device was attached
+that had no periodic endpoints (e.g. USB pendrive or some wlan devices).
+---
+ drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 23 ++++++++++++-----------
+ drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c | 2 +-
+ 2 files changed, 13 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+index d5c94f4..e653d84 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+@@ -462,6 +462,8 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd,
+ {
+ dwc_irqflags_t flags;
+ int retval = 0;
++ uint8_t needs_scheduling = 0;
++ dwc_otg_transaction_type_e tr_type;
+ dwc_otg_qtd_t *qtd;
+ gintmsk_data_t intr_mask = {.d32 = 0 };
+
+@@ -493,22 +495,22 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd,
+ return -DWC_E_NO_MEMORY;
+ }
+ #endif
+- retval =
+- dwc_otg_hcd_qtd_add(qtd, hcd, (dwc_otg_qh_t **) ep_handle, atomic_alloc);
++ intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk);
++ if(!intr_mask.b.sofintr) needs_scheduling = 1;
++ if((((dwc_otg_qh_t *)ep_handle)->ep_type == UE_BULK) && !(qtd->urb->flags & URB_GIVEBACK_ASAP))
++ /* Do not schedule SG transactions until qtd has URB_GIVEBACK_ASAP set */
++ needs_scheduling = 0;
++
++ retval = dwc_otg_hcd_qtd_add(qtd, hcd, (dwc_otg_qh_t **) ep_handle, atomic_alloc);
+ // creates a new queue in ep_handle if it doesn't exist already
+ if (retval < 0) {
+ DWC_ERROR("DWC OTG HCD URB Enqueue failed adding QTD. "
+ "Error status %d\n", retval);
+ dwc_otg_hcd_qtd_free(qtd);
++ return retval;
+ }
+- intr_mask.d32 = DWC_READ_REG32(&hcd->core_if->core_global_regs->gintmsk);
+- if (!intr_mask.b.sofintr && retval == 0) {
+- dwc_otg_transaction_type_e tr_type;
+- if ((qtd->qh->ep_type == UE_BULK)
+- && !(qtd->urb->flags & URB_GIVEBACK_ASAP)) {
+- /* Do not schedule SG transactions until qtd has URB_GIVEBACK_ASAP set */
+- return 0;
+- }
++
++ if(needs_scheduling) {
+ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags);
+ tr_type = dwc_otg_hcd_select_transactions(hcd);
+ if (tr_type != DWC_OTG_TRANSACTION_NONE) {
+@@ -516,7 +518,6 @@ int dwc_otg_hcd_urb_enqueue(dwc_otg_hcd_t * hcd,
+ }
+ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags);
+ }
+-
+ return retval;
+ }
+
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
+index b337e1b..b3e6e52 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
+@@ -937,7 +937,7 @@ int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd,
+ if (*qh == NULL) {
+ *qh = dwc_otg_hcd_qh_create(hcd, urb, atomic_alloc);
+ if (*qh == NULL) {
+- retval = -1;
++ retval = -DWC_E_NO_MEMORY;
+ goto done;
+ }
+ }
diff --git a/patches/linux-3.6.11/0219-dwc_otg-Fix-incorrect-URB-allocation-error-handling.patch b/patches/linux-3.6.11/0219-dwc_otg-Fix-incorrect-URB-allocation-error-handling.patch
new file mode 100644
index 0000000..4ab3895
--- /dev/null
+++ b/patches/linux-3.6.11/0219-dwc_otg-Fix-incorrect-URB-allocation-error-handling.patch
@@ -0,0 +1,39 @@
+From: P33M <P33M@github.com>
+Date: Fri, 15 Feb 2013 22:38:40 +0000
+Subject: [PATCH] dwc_otg: Fix incorrect URB allocation error handling
+
+If the memory allocation for a dwc_otg_urb failed, the kernel would OOPS
+because for some reason a member of the *unallocated* struct was set to
+zero. Error handling changed to fail correctly.
+---
+ drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+index e653d84..fcec97f 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+@@ -3136,17 +3136,13 @@ dwc_otg_hcd_urb_t *dwc_otg_hcd_urb_alloc(dwc_otg_hcd_t * hcd,
+ else
+ dwc_otg_urb = DWC_ALLOC(size);
+
+- if (NULL != dwc_otg_urb)
+- dwc_otg_urb->packet_count = iso_desc_count;
++ if (dwc_otg_urb)
++ dwc_otg_urb->packet_count = iso_desc_count;
+ else {
+- dwc_otg_urb->packet_count = 0;
+- if (size != 0) {
+- DWC_ERROR("**** DWC OTG HCD URB alloc - "
+- "%salloc of %db failed\n",
+- atomic_alloc?"atomic ":"", size);
+- }
+- }
+-
++ DWC_ERROR("**** DWC OTG HCD URB alloc - "
++ "%salloc of %db failed\n",
++ atomic_alloc?"atomic ":"", size);
++ }
+ return dwc_otg_urb;
+ }
+
diff --git a/patches/linux-3.6.11/0220-Added-inverted-transmitter-support.patch b/patches/linux-3.6.11/0220-Added-inverted-transmitter-support.patch
new file mode 100644
index 0000000..d31ad79
--- /dev/null
+++ b/patches/linux-3.6.11/0220-Added-inverted-transmitter-support.patch
@@ -0,0 +1,79 @@
+From: pjennings <pjennings-git@pjennings.net>
+Date: Wed, 20 Feb 2013 17:51:43 -0600
+Subject: [PATCH] Added inverted transmitter support
+
+---
+ drivers/staging/media/lirc/lirc_rpi.c | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/staging/media/lirc/lirc_rpi.c b/drivers/staging/media/lirc/lirc_rpi.c
+index 96acab0..5bb0dfe 100644
+--- a/drivers/staging/media/lirc/lirc_rpi.c
++++ b/drivers/staging/media/lirc/lirc_rpi.c
+@@ -68,6 +68,8 @@ static int debug;
+ static int sense = -1;
+ /* use softcarrier by default */
+ static int softcarrier = 1;
++/* 0 = do not invert output, 1 = invert output */
++static int invert = 0;
+
+ struct gpio_chip *gpiochip;
+ struct irq_chip *irqchip;
+@@ -135,10 +137,10 @@ static long send_pulse_softcarrier(unsigned long length)
+ actual = 0; target = 0; flag = 0;
+ while (actual < length) {
+ if (flag) {
+- gpiochip->set(gpiochip, gpio_out_pin, 0);
++ gpiochip->set(gpiochip, gpio_out_pin, invert);
+ target += space_width;
+ } else {
+- gpiochip->set(gpiochip, gpio_out_pin, 1);
++ gpiochip->set(gpiochip, gpio_out_pin, !invert);
+ target += pulse_width;
+ }
+ d = (target - actual -
+@@ -162,7 +164,7 @@ static long send_pulse(unsigned long length)
+ if (softcarrier) {
+ return send_pulse_softcarrier(length);
+ } else {
+- gpiochip->set(gpiochip, gpio_out_pin, 1);
++ gpiochip->set(gpiochip, gpio_out_pin, !invert);
+ safe_udelay(length);
+ return 0;
+ }
+@@ -170,7 +172,7 @@ static long send_pulse(unsigned long length)
+
+ static void send_space(long length)
+ {
+- gpiochip->set(gpiochip, gpio_out_pin, 0);
++ gpiochip->set(gpiochip, gpio_out_pin, invert);
+ if (length <= 0)
+ return;
+ safe_udelay(length);
+@@ -318,7 +320,7 @@ static int init_port(void)
+
+ gpiochip->direction_input(gpiochip, gpio_in_pin);
+ gpiochip->direction_output(gpiochip, gpio_out_pin, 1);
+- gpiochip->set(gpiochip, gpio_out_pin, 0);
++ gpiochip->set(gpiochip, gpio_out_pin, invert);
+
+ irq = gpiochip->to_irq(gpiochip, gpio_in_pin);
+ dprintk("to_irq %d\n", irq);
+@@ -457,7 +459,7 @@ static ssize_t lirc_write(struct file *file, const char *buf,
+ else
+ delta = send_pulse(wbuf[i]);
+ }
+- gpiochip->set(gpiochip, gpio_out_pin, 0);
++ gpiochip->set(gpiochip, gpio_out_pin, invert);
+
+ spin_unlock_irqrestore(&lock, flags);
+ kfree(wbuf);
+@@ -683,5 +685,8 @@ MODULE_PARM_DESC(sense, "Override autodetection of IR receiver circuit"
+ module_param(softcarrier, bool, S_IRUGO);
+ MODULE_PARM_DESC(softcarrier, "Software carrier (0 = off, 1 = on, default on)");
+
++module_param(invert, bool, S_IRUGO);
++MODULE_PARM_DESC(invert, "Invert output (0 = off, 1 = on, default off");
++
+ module_param(debug, bool, S_IRUGO | S_IWUSR);
+ MODULE_PARM_DESC(debug, "Enable debugging messages");
diff --git a/patches/linux-3.6.11/0221-fbcon-clear-the-logo-bitmap-from-the-margin-area.patch b/patches/linux-3.6.11/0221-fbcon-clear-the-logo-bitmap-from-the-margin-area.patch
new file mode 100644
index 0000000..61b45d5
--- /dev/null
+++ b/patches/linux-3.6.11/0221-fbcon-clear-the-logo-bitmap-from-the-margin-area.patch
@@ -0,0 +1,38 @@
+From: Kamal Mostafa <kamal@whence.com>
+Date: Thu, 21 Feb 2013 16:42:07 -0800
+Subject: [PATCH] fbcon: clear the logo bitmap from the margin area
+
+Explicitly clear_margins when clearing the logo, in case the font dimensions
+are non-integral to the framebuffer dimensions.
+
+Signed-off-by: Kamal Mostafa <kamal@whence.com>
+Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
+Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+---
+ drivers/video/console/fbcon.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
+index fdefa8f..f8a61e2 100644
+--- a/drivers/video/console/fbcon.c
++++ b/drivers/video/console/fbcon.c
+@@ -1242,8 +1242,16 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height,
+ if (!height || !width)
+ return;
+
+- if (sy < vc->vc_top && vc->vc_top == logo_lines)
++ if (sy < vc->vc_top && vc->vc_top == logo_lines) {
+ vc->vc_top = 0;
++ /*
++ * If the font dimensions are not an integral of the display
++ * dimensions then the ops->clear below won't end up clearing
++ * the margins. Call clear_margins here in case the logo
++ * bitmap stretched into the margin area.
++ */
++ fbcon_clear_margins(vc, 0);
++ }
+
+ /* Split blits that cross physical y_wrap boundary */
+
diff --git a/patches/linux-3.6.11/0222-Add-config-request-CONFIG_IP_SCTP.patch b/patches/linux-3.6.11/0222-Add-config-request-CONFIG_IP_SCTP.patch
new file mode 100644
index 0000000..2f51b0e
--- /dev/null
+++ b/patches/linux-3.6.11/0222-Add-config-request-CONFIG_IP_SCTP.patch
@@ -0,0 +1,37 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Sun, 24 Feb 2013 15:51:31 +0000
+Subject: [PATCH] Add config request CONFIG_IP_SCTP
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 570a312..5e853f82 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -98,7 +98,6 @@ CONFIG_NF_CONNTRACK_ZONES=y
+ CONFIG_NF_CONNTRACK_EVENTS=y
+ CONFIG_NF_CONNTRACK_TIMESTAMP=y
+ CONFIG_NF_CT_PROTO_DCCP=m
+-CONFIG_NF_CT_PROTO_SCTP=m
+ CONFIG_NF_CT_PROTO_UDPLITE=m
+ CONFIG_NF_CONNTRACK_AMANDA=m
+ CONFIG_NF_CONNTRACK_FTP=m
+@@ -161,7 +160,6 @@ CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+ CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+ CONFIG_NETFILTER_XT_MATCH_REALM=m
+ CONFIG_NETFILTER_XT_MATCH_RECENT=m
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+ CONFIG_NETFILTER_XT_MATCH_SOCKET=m
+ CONFIG_NETFILTER_XT_MATCH_STATE=m
+ CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+@@ -237,6 +235,8 @@ CONFIG_BRIDGE_EBT_SNAT=m
+ CONFIG_BRIDGE_EBT_LOG=m
+ CONFIG_BRIDGE_EBT_ULOG=m
+ CONFIG_BRIDGE_EBT_NFLOG=m
++CONFIG_IP_SCTP=m
++CONFIG_SCTP_HMAC_SHA1=y
+ CONFIG_L2TP=m
+ CONFIG_BRIDGE=m
+ CONFIG_VLAN_8021Q=m
diff --git a/patches/linux-3.6.11/0223-Add-retry-on-error-and-tidy-of-temperature-driver.patch b/patches/linux-3.6.11/0223-Add-retry-on-error-and-tidy-of-temperature-driver.patch
new file mode 100644
index 0000000..7fe5e58
--- /dev/null
+++ b/patches/linux-3.6.11/0223-Add-retry-on-error-and-tidy-of-temperature-driver.patch
@@ -0,0 +1,125 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Sun, 24 Feb 2013 16:30:57 +0000
+Subject: [PATCH] Add retry on error and tidy of temperature driver
+
+---
+ drivers/thermal/bcm2835-thermal.c | 78 ++++++++++++++-------------------------
+ 1 file changed, 27 insertions(+), 51 deletions(-)
+
+diff --git a/drivers/thermal/bcm2835-thermal.c b/drivers/thermal/bcm2835-thermal.c
+index 091510b..a669544 100644
+--- a/drivers/thermal/bcm2835-thermal.c
++++ b/drivers/thermal/bcm2835-thermal.c
+@@ -33,7 +33,6 @@
+ #define print_debug(fmt,...)
+ #endif
+ #define print_err(fmt,...) printk(KERN_ERR "%s:%s:%d: "fmt"\n", MODULE_NAME, __func__,__LINE__, ##__VA_ARGS__)
+-#define print_info(fmt,...) printk(KERN_INFO "%s: "fmt"\n", MODULE_NAME, ##__VA_ARGS__)
+
+ #define VC_TAG_GET_TEMP 0x00030006
+ #define VC_TAG_GET_MAX_TEMP 0x0003000A
+@@ -66,12 +65,6 @@ struct bcm2835_thermal_data {
+ struct vc_msg msg;
+ };
+
+-/* --- PROTOTYPES --- */
+-static int bcm2835_get_temp(struct thermal_zone_device *thermal_dev, unsigned long *);
+-static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int, unsigned long *);
+-static int bcm2835_get_trip_type(struct thermal_zone_device *thermal_dev, int trip_num, enum thermal_trip_type *trip_type);
+-static int bcm2835_get_mode(struct thermal_zone_device *thermal_dev, enum thermal_device_mode *dev_mode);
+-
+ /* --- GLOBALS --- */
+ static struct bcm2835_thermal_data bcm2835_data;
+
+@@ -79,64 +72,47 @@ static struct bcm2835_thermal_data bcm2835_data;
+ static struct thermal_zone_device_ops ops;
+
+ /* --- FUNCTIONS --- */
+-static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int trip_num, unsigned long *temp)
+-{
+- int result;
+
++static int bcm2835_get_temp_or_max(struct thermal_zone_device *thermal_dev, unsigned long *temp, unsigned tag_id)
++{
++ int result = -1, retry = 3;
+ print_debug("IN");
+
+- /* wipe all previous message data */
+- memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg);
+-
+- /* prepare message */
+- bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg;
+- bcm2835_data.msg.tag.buffer_size = 8;
+- bcm2835_data.msg.tag.tag_id = VC_TAG_GET_MAX_TEMP;
+-
+- /* send the message */
+- result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg);
++ *temp = 0;
++ while (result != 0 && retry-- > 0) {
++ /* wipe all previous message data */
++ memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg);
++
++ /* prepare message */
++ bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg;
++ bcm2835_data.msg.tag.buffer_size = 8;
++ bcm2835_data.msg.tag.tag_id = tag_id;
++
++ /* send the message */
++ result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg);
++ print_debug("Got %stemperature as %u (%d,%x)\n", tag_id==VC_TAG_GET_MAX_TEMP ? "max ":"", (uint)bcm2835_data.msg.tag.val, result, bcm2835_data.msg.request_code);
++ if (!(bcm2835_data.msg.request_code & 0x80000000))
++ result = -1;
++ }
+
+ /* check if it was all ok and return the rate in milli degrees C */
+- if (result == 0 && (bcm2835_data.msg.request_code & 0x80000000))
++ if (result == 0)
+ *temp = (uint)bcm2835_data.msg.tag.val;
+- #ifdef THERMAL_DEBUG_ENABLE
+ else
+- print_debug("Failed to get temperature!");
+- #endif
+- print_debug("Got temperature as %u",(uint)*temp);
++ print_err("Failed to get temperature! (%x:%d)\n", tag_id, result);
+ print_debug("OUT");
+- return 0;
++ return result;
+ }
+
+ static int bcm2835_get_temp(struct thermal_zone_device *thermal_dev, unsigned long *temp)
+ {
+- int result;
+-
+- print_debug("IN");
+-
+- /* wipe all previous message data */
+- memset(&bcm2835_data.msg, 0, sizeof bcm2835_data.msg);
+-
+- /* prepare message */
+- bcm2835_data.msg.msg_size = sizeof bcm2835_data.msg;
+- bcm2835_data.msg.tag.buffer_size = 8;
+- bcm2835_data.msg.tag.tag_id = VC_TAG_GET_TEMP;
+-
+- /* send the message */
+- result = bcm_mailbox_property(&bcm2835_data.msg, sizeof bcm2835_data.msg);
+-
+- /* check if it was all ok and return the rate in milli degrees C */
+- if (result == 0 && (bcm2835_data.msg.request_code & 0x80000000))
+- *temp = (uint)bcm2835_data.msg.tag.val;
+- #ifdef THERMAL_DEBUG_ENABLE
+- else
+- print_debug("Failed to get temperature!");
+- #endif
+- print_debug("Got temperature as %u",(uint)*temp);
+- print_debug("OUT");
+- return 0;
++ return bcm2835_get_temp_or_max(thermal_dev, temp, VC_TAG_GET_TEMP);
+ }
+
++static int bcm2835_get_max_temp(struct thermal_zone_device *thermal_dev, int trip_num, unsigned long *temp)
++{
++ return bcm2835_get_temp_or_max(thermal_dev, temp, VC_TAG_GET_MAX_TEMP);
++}
+
+ static int bcm2835_get_trip_type(struct thermal_zone_device * thermal_dev, int trip_num, enum thermal_trip_type *trip_type)
+ {
diff --git a/patches/linux-3.6.11/0224-Add-SPEAKUP-and-SPEAKUP_SYNTH_SOFT-kernel-modules.patch b/patches/linux-3.6.11/0224-Add-SPEAKUP-and-SPEAKUP_SYNTH_SOFT-kernel-modules.patch
new file mode 100644
index 0000000..387f9a2
--- /dev/null
+++ b/patches/linux-3.6.11/0224-Add-SPEAKUP-and-SPEAKUP_SYNTH_SOFT-kernel-modules.patch
@@ -0,0 +1,21 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Mon, 25 Feb 2013 11:37:20 +0000
+Subject: [PATCH] Add SPEAKUP and SPEAKUP_SYNTH_SOFT kernel modules
+
+---
+ arch/arm/configs/bcmrpi_defconfig | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
+index 5e853f82..4e52bbb 100644
+--- a/arch/arm/configs/bcmrpi_defconfig
++++ b/arch/arm/configs/bcmrpi_defconfig
+@@ -857,6 +857,8 @@ CONFIG_R8712U=m
+ CONFIG_VT6656=m
+ CONFIG_ZRAM=m
+ CONFIG_ZSMALLOC=m
++CONFIG_SPEAKUP=m
++CONFIG_SPEAKUP_SYNTH_SOFT=m
+ CONFIG_STAGING_MEDIA=y
+ CONFIG_DVB_AS102=m
+ CONFIG_EASYCAP=m
diff --git a/patches/linux-3.6.11/0225-ARM-VFP-fix-emulation-of-second-VFP-instruction.patch b/patches/linux-3.6.11/0225-ARM-VFP-fix-emulation-of-second-VFP-instruction.patch
new file mode 100644
index 0000000..be28212
--- /dev/null
+++ b/patches/linux-3.6.11/0225-ARM-VFP-fix-emulation-of-second-VFP-instruction.patch
@@ -0,0 +1,49 @@
+From: Russell King - ARM Linux <linux@arm.linux.org.uk>
+Date: Mon, 25 Feb 2013 13:04:49 +0000
+Subject: [PATCH] ARM: VFP: fix emulation of second VFP instruction
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Martin Storsjö reports that the sequence:
+
+ ee312ac1 vsub.f32 s4, s3, s2
+ ee702ac0 vsub.f32 s5, s1, s0
+ e59f0028 ldr r0, [pc, #40]
+ ee111a90 vmov r1, s3
+
+on Raspberry Pi (implementor 41 architecture 1 part 20 variant b rev 5)
+where s3 is a denormal and s2 is zero results in incorrect behaviour -
+the instruction "vsub.f32 s5, s1, s0" is not executed:
+
+ VFP: bounce: trigger ee111a90 fpexc d0000780
+ VFP: emulate: INST=0xee312ac1 SCR=0x00000000
+ ...
+
+As we can see, the instruction triggering the exception is the "vmov"
+instruction, and we emulate the "vsub.f32 s4, s3, s2" but fail to
+properly take account of the FPEXC_FP2V flag in FPEXC. This is because
+the test for the second instruction register being valid is bogus, and
+will always skip emulation of the second instruction.
+
+Cc: <stable@vger.kernel.org>
+Reported-by: Martin Storsjö <martin@martin.st>
+Tested-by: Martin Storsjö <martin@martin.st>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+---
+ arch/arm/vfp/vfpmodule.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
+index 3b44e0d..5dfbb0b 100644
+--- a/arch/arm/vfp/vfpmodule.c
++++ b/arch/arm/vfp/vfpmodule.c
+@@ -413,7 +413,7 @@ void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs)
+ * If there isn't a second FP instruction, exit now. Note that
+ * the FPEXC.FP2V bit is valid only if FPEXC.EX is 1.
+ */
+- if (fpexc ^ (FPEXC_EX | FPEXC_FP2V))
++ if ((fpexc & (FPEXC_EX | FPEXC_FP2V)) != (FPEXC_EX | FPEXC_FP2V))
+ goto exit;
+
+ /*
diff --git a/patches/linux-3.6.11/0226-ARM-7492-1-add-strstr-declaration-for-decompressors.patch b/patches/linux-3.6.11/0226-ARM-7492-1-add-strstr-declaration-for-decompressors.patch
new file mode 100644
index 0000000..5e09bbd
--- /dev/null
+++ b/patches/linux-3.6.11/0226-ARM-7492-1-add-strstr-declaration-for-decompressors.patch
@@ -0,0 +1,30 @@
+From: Rob Herring <rob.herring@calxeda.com>
+Date: Wed, 15 Aug 2012 16:28:36 +0100
+Subject: [PATCH] ARM: 7492/1: add strstr declaration for decompressors
+
+With the generic unaligned.h, more kernel headers get pulled in including
+dynamic_debug.h which needs strstr. As it is not really used, we only need
+a declaration here.
+
+Signed-off-by: Rob Herring <rob.herring@calxeda.com>
+Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Reviewed-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+---
+ arch/arm/boot/compressed/decompress.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
+index f41b38c..9deb56a 100644
+--- a/arch/arm/boot/compressed/decompress.c
++++ b/arch/arm/boot/compressed/decompress.c
+@@ -32,6 +32,9 @@ extern void error(char *);
+ # define Tracecv(c,x)
+ #endif
+
++/* Not needed, but used in some headers pulled in by decompressors */
++extern char * strstr(const char * s1, const char *s2);
++
+ #ifdef CONFIG_KERNEL_GZIP
+ #include "../../../../lib/decompress_inflate.c"
+ #endif
diff --git a/patches/linux-3.6.11/0227-dwc_otg-fix-potential-use-after-free-case-in-interru.patch b/patches/linux-3.6.11/0227-dwc_otg-fix-potential-use-after-free-case-in-interru.patch
new file mode 100644
index 0000000..6bff7c5
--- /dev/null
+++ b/patches/linux-3.6.11/0227-dwc_otg-fix-potential-use-after-free-case-in-interru.patch
@@ -0,0 +1,30 @@
+From: P33M <P33M@github.com>
+Date: Thu, 28 Feb 2013 16:52:51 +0000
+Subject: [PATCH] dwc_otg: fix potential use-after-free case in interrupt
+ handler
+
+If a transaction had previously aborted, certain interrupts are
+enabled to track error counts and reset where necessary. On IN
+endpoints the host generates an ACK interrupt near-simultaneously
+with completion of transfer. In the case where this transfer had
+previously had an error, this results in a use-after-free on
+the QTD memory space with a 1-byte length being overwritten to
+0x00.
+---
+ drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
+index e8c91e7..0c81a64 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
+@@ -2223,7 +2223,8 @@ int32_t dwc_otg_hcd_handle_hc_n_intr(dwc_otg_hcd_t * dwc_otg_hcd, uint32_t num)
+ retval |= handle_hc_nak_intr(dwc_otg_hcd, hc, hc_regs, qtd);
+ }
+ if (hcint.b.ack) {
+- retval |= handle_hc_ack_intr(dwc_otg_hcd, hc, hc_regs, qtd);
++ if(!hcint.b.chhltd)
++ retval |= handle_hc_ack_intr(dwc_otg_hcd, hc, hc_regs, qtd);
+ }
+ if (hcint.b.nyet) {
+ retval |= handle_hc_nyet_intr(dwc_otg_hcd, hc, hc_regs, qtd);
diff --git a/patches/linux-3.6.11/0228-fix-missing-modulo-for-bit-in-bank-computation-in-bc.patch b/patches/linux-3.6.11/0228-fix-missing-modulo-for-bit-in-bank-computation-in-bc.patch
new file mode 100644
index 0000000..1945824
--- /dev/null
+++ b/patches/linux-3.6.11/0228-fix-missing-modulo-for-bit-in-bank-computation-in-bc.patch
@@ -0,0 +1,22 @@
+From: Zeta <zeta@sagittarii.fr>
+Date: Sat, 2 Mar 2013 15:15:39 +0100
+Subject: [PATCH] fix missing modulo for bit in bank computation, in bcm2708
+ gpio irq mask
+
+---
+ arch/arm/mach-bcm2708/bcm2708_gpio.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/mach-bcm2708/bcm2708_gpio.c b/arch/arm/mach-bcm2708/bcm2708_gpio.c
+index c8161e1..2d87250 100644
+--- a/arch/arm/mach-bcm2708/bcm2708_gpio.c
++++ b/arch/arm/mach-bcm2708/bcm2708_gpio.c
+@@ -173,6 +173,8 @@ static void bcm2708_gpio_irq_mask(struct irq_data *d)
+ unsigned long rising = readl(gpio->base + GPIOREN(gb));
+ unsigned long falling = readl(gpio->base + GPIOFEN(gb));
+
++ gn = gn % 32;
++
+ writel(rising & ~(1 << gn), gpio->base + GPIOREN(gb));
+ writel(falling & ~(1 << gn), gpio->base + GPIOFEN(gb));
+ }
diff --git a/patches/linux-3.6.11/0229-dwc_otg-add-handling-of-SPLIT-transaction-data-toggl.patch b/patches/linux-3.6.11/0229-dwc_otg-add-handling-of-SPLIT-transaction-data-toggl.patch
new file mode 100644
index 0000000..3ccc92a
--- /dev/null
+++ b/patches/linux-3.6.11/0229-dwc_otg-add-handling-of-SPLIT-transaction-data-toggl.patch
@@ -0,0 +1,52 @@
+From: P33M <P33M@github.com>
+Date: Sun, 3 Mar 2013 14:45:53 +0000
+Subject: [PATCH] dwc_otg: add handling of SPLIT transaction data toggle errors
+
+Previously a data toggle error on packets from a USB1.1 device behind
+a TT would result in the Pi locking up as the driver never handled
+the associated interrupt. Patch adds basic retry mechanism and
+interrupt acknowledgement to cater for either a chance toggle error or
+for devices that have a broken initial toggle state (FT8U232/FT232BM).
+---
+ drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
+index 0c81a64..16e8c6c 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
+@@ -1921,13 +1921,20 @@ static int32_t handle_hc_datatglerr_intr(dwc_otg_hcd_t * hcd,
+ dwc_otg_qtd_t * qtd)
+ {
+ DWC_DEBUGPL(DBG_HCDI, "--Host Channel %d Interrupt: "
+- "Data Toggle Error--\n", hc->hc_num);
++ "Data Toggle Error on %s transfer--\n",
++ hc->hc_num, (hc->ep_is_in ? "IN" : "OUT"));
+
+- if (hc->ep_is_in) {
++ /* Data toggles on split transactions cause the hc to halt.
++ * restart transfer */
++ if(hc->qh->do_split)
++ {
++ qtd->error_count++;
++ dwc_otg_hcd_save_data_toggle(hc, hc_regs, qtd);
++ update_urb_state_xfer_intr(hc, hc_regs,
++ qtd->urb, qtd, DWC_OTG_HC_XFER_XACT_ERR);
++ halt_channel(hcd, hc, qtd, DWC_OTG_HC_XFER_XACT_ERR);
++ } else if (hc->ep_is_in) {
+ qtd->error_count = 0;
+- } else {
+- DWC_ERROR("Data Toggle Error on OUT transfer,"
+- "channel %d\n", hc->hc_num);
+ }
+
+ disable_hc_int(hc_regs, datatglerr);
+@@ -2080,6 +2087,8 @@ static void handle_hc_chhltd_intr_dma(dwc_otg_hcd_t * hcd,
+ handle_hc_babble_intr(hcd, hc, hc_regs, qtd);
+ } else if (hcint.b.frmovrun) {
+ handle_hc_frmovrun_intr(hcd, hc, hc_regs, qtd);
++ } else if (hcint.b.datatglerr) {
++ handle_hc_datatglerr_intr(hcd, hc, hc_regs, qtd);
+ } else if (!out_nak_enh) {
+ if (hcint.b.nyet) {
+ /*
diff --git a/patches/linux-3.6.11/0230-USB-option-add-Telekom-Speedstick-LTE-II.patch b/patches/linux-3.6.11/0230-USB-option-add-Telekom-Speedstick-LTE-II.patch
new file mode 100644
index 0000000..396e35a
--- /dev/null
+++ b/patches/linux-3.6.11/0230-USB-option-add-Telekom-Speedstick-LTE-II.patch
@@ -0,0 +1,46 @@
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Fri, 28 Dec 2012 17:29:52 +0100
+Subject: [PATCH] USB: option: add Telekom Speedstick LTE II
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+also known as Alcatel One Touch L100V LTE
+
+The driver description files gives these names to the vendor specific
+functions on this modem:
+
+ Application1: VID_1BBB&PID_011E&MI_00
+ Application2: VID_1BBB&PID_011E&MI_01
+ Modem: VID_1BBB&PID_011E&MI_03
+ Ethernet: VID_1BBB&PID_011E&MI_04
+
+Reported-by: Thomas Schäfer <tschaefer@t-online.de>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/serial/option.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 56fed62..a1eb1c9 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -289,6 +289,7 @@ static void option_instat_callback(struct urb *urb);
+ #define ALCATEL_VENDOR_ID 0x1bbb
+ #define ALCATEL_PRODUCT_X060S_X200 0x0000
+ #define ALCATEL_PRODUCT_X220_X500D 0x0017
++#define ALCATEL_PRODUCT_L100V 0x011e
+
+ #define PIRELLI_VENDOR_ID 0x1266
+ #define PIRELLI_PRODUCT_C100_1 0x1002
+@@ -1191,6 +1192,8 @@ static const struct usb_device_id option_ids[] = {
+ .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist
+ },
+ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D) },
++ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V),
++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+ { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
+ { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
+ { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),
diff --git a/patches/linux-3.6.11/0231-Increase-the-minimum-alsa-buffer-size-as-we-get-unde.patch b/patches/linux-3.6.11/0231-Increase-the-minimum-alsa-buffer-size-as-we-get-unde.patch
new file mode 100644
index 0000000..c7da265
--- /dev/null
+++ b/patches/linux-3.6.11/0231-Increase-the-minimum-alsa-buffer-size-as-we-get-unde.patch
@@ -0,0 +1,22 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Sun, 3 Mar 2013 21:35:30 +0000
+Subject: [PATCH] Increase the minimum alsa buffer size as we get underrun with
+ some apps (e.g. espeak)
+
+---
+ sound/arm/bcm2835-pcm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/arm/bcm2835-pcm.c b/sound/arm/bcm2835-pcm.c
+index fd8890c..c5684ba 100755
+--- a/sound/arm/bcm2835-pcm.c
++++ b/sound/arm/bcm2835-pcm.c
+@@ -27,7 +27,7 @@ static struct snd_pcm_hardware snd_bcm2835_playback_hw = {
+ .channels_min = 1,
+ .channels_max = 2,
+ .buffer_bytes_max = 32 * 1024, /* Needs to be less than audioplay buffer size */
+- .period_bytes_min = 1 * 1024,
++ .period_bytes_min = 4 * 1024,
+ .period_bytes_max = 32 * 1024,
+ .periods_min = 1,
+ .periods_max = 32,
diff --git a/patches/linux-3.6.11/0232-USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch b/patches/linux-3.6.11/0232-USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch
new file mode 100644
index 0000000..090a9aa
--- /dev/null
+++ b/patches/linux-3.6.11/0232-USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch
@@ -0,0 +1,38 @@
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Thu, 14 Feb 2013 09:39:09 -0500
+Subject: [PATCH] USB: usb-storage: unusual_devs update for Super TOP SATA
+ bridge
+
+The current entry in unusual_cypress.h for the Super TOP SATA bridge devices
+seems to be causing corruption on newer revisions of this device. This has
+been reported in Arch Linux and Fedora. The original patch was tested on
+devices with bcdDevice of 1.60, whereas the newer devices report bcdDevice
+as 2.20. Limit the UNUSUAL_DEV entry to devices less than 2.20.
+
+This fixes https://bugzilla.redhat.com/show_bug.cgi?id=909591
+
+The Arch Forum post on this is here:
+ https://bbs.archlinux.org/viewtopic.php?id=152011
+
+Reported-by: Carsten S. <carsteniq@yahoo.com>
+Tested-by: Carsten S. <carsteniq@yahoo.com>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/storage/unusual_cypress.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/usb/storage/unusual_cypress.h b/drivers/usb/storage/unusual_cypress.h
+index 2c85530..65a6a75 100644
+--- a/drivers/usb/storage/unusual_cypress.h
++++ b/drivers/usb/storage/unusual_cypress.h
+@@ -31,7 +31,7 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999,
+ "Cypress ISD-300LP",
+ USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
+
+-UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x9999,
++UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x0219,
+ "Super Top",
+ "USB 2.0 SATA BRIDGE",
+ USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
diff --git a/patches/linux-3.6.11/0233-Add-bitbanging-pullups-use-them-for-w1-gpio.patch b/patches/linux-3.6.11/0233-Add-bitbanging-pullups-use-them-for-w1-gpio.patch
new file mode 100644
index 0000000..c398d59
--- /dev/null
+++ b/patches/linux-3.6.11/0233-Add-bitbanging-pullups-use-them-for-w1-gpio.patch
@@ -0,0 +1,145 @@
+From: Matt Johnston <matt@ucc.asn.au>
+Date: Fri, 7 Dec 2012 23:21:31 +0800
+Subject: [PATCH] Add bitbanging pullups, use them for w1-gpio
+
+Allows parasite power to work, uses module option pullup=1
+---
+ drivers/w1/masters/w1-gpio.c | 20 ++++++++++++++++++++
+ drivers/w1/w1.h | 6 ++++++
+ drivers/w1/w1_int.c | 25 ++++++++++++++-----------
+ drivers/w1/w1_io.c | 14 +++++++++++---
+ 4 files changed, 51 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
+index df600d1..cc761f2 100644
+--- a/drivers/w1/masters/w1-gpio.c
++++ b/drivers/w1/masters/w1-gpio.c
+@@ -18,6 +18,9 @@
+ #include "../w1.h"
+ #include "../w1_int.h"
+
++static int w1_gpio_pullup = 0;
++module_param_named(pullup, w1_gpio_pullup, int, 0);
++
+ static void w1_gpio_write_bit_dir(void *data, u8 bit)
+ {
+ struct w1_gpio_platform_data *pdata = data;
+@@ -42,6 +45,16 @@ static u8 w1_gpio_read_bit(void *data)
+ return gpio_get_value(pdata->pin) ? 1 : 0;
+ }
+
++static void w1_gpio_bitbang_pullup(void *data, u8 on)
++{
++ struct w1_gpio_platform_data *pdata = data;
++
++ if (on)
++ gpio_direction_output(pdata->pin, 1);
++ else
++ gpio_direction_input(pdata->pin);
++}
++
+ static int __init w1_gpio_probe(struct platform_device *pdev)
+ {
+ struct w1_bus_master *master;
+@@ -70,6 +83,13 @@ static int __init w1_gpio_probe(struct platform_device *pdev)
+ master->write_bit = w1_gpio_write_bit_dir;
+ }
+
++ if (w1_gpio_pullup)
++ if (pdata->is_open_drain)
++ printk(KERN_ERR "w1-gpio 'pullup' option "
++ "doesn't work with open drain GPIO\n");
++ else
++ master->bitbang_pullup = w1_gpio_bitbang_pullup;
++
+ err = w1_add_master_device(master);
+ if (err)
+ goto free_gpio;
+diff --git a/drivers/w1/w1.h b/drivers/w1/w1.h
+index 45908e5..463d019 100644
+--- a/drivers/w1/w1.h
++++ b/drivers/w1/w1.h
+@@ -148,6 +148,12 @@ struct w1_bus_master
+ */
+ u8 (*set_pullup)(void *, int);
+
++ /**
++ * Turns the pullup on/off in bitbanging mode, takes an on/off argument.
++ * @return -1=Error, 0=completed
++ */
++ void (*bitbang_pullup)(void *, u8);
++
+ /** Really nice hardware can handles the different types of ROM search
+ * w1_master* is passed to the slave found callback.
+ */
+diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c
+index 5a98649..eb906e8 100644
+--- a/drivers/w1/w1_int.c
++++ b/drivers/w1/w1_int.c
+@@ -110,26 +110,29 @@ int w1_add_master_device(struct w1_bus_master *master)
+ struct w1_netlink_msg msg;
+ int id, found;
+
+- /* validate minimum functionality */
+- if (!(master->touch_bit && master->reset_bus) &&
+- !(master->write_bit && master->read_bit) &&
++ /* validate minimum functionality */
++ if (!(master->touch_bit && master->reset_bus) &&
++ !(master->write_bit && master->read_bit) &&
+ !(master->write_byte && master->read_byte && master->reset_bus)) {
+ printk(KERN_ERR "w1_add_master_device: invalid function set\n");
+ return(-EINVAL);
+- }
+- /* While it would be electrically possible to make a device that
+- * generated a strong pullup in bit bang mode, only hardware that
+- * controls 1-wire time frames are even expected to support a strong
+- * pullup. w1_io.c would need to support calling set_pullup before
+- * the last write_bit operation of a w1_write_8 which it currently
+- * doesn't.
+- */
++ }
++
++ /* bitbanging hardware uses bitbang_pullup, other hardware uses set_pullup
++ * and takes care of timing itself */
+ if (!master->write_byte && !master->touch_bit && master->set_pullup) {
+ printk(KERN_ERR "w1_add_master_device: set_pullup requires "
+ "write_byte or touch_bit, disabling\n");
+ master->set_pullup = NULL;
+ }
+
++ if (master->set_pullup && master->bitbang_pullup)
++ {
++ printk(KERN_ERR "w1_add_master_device: set_pullup should not "
++ "be set when bitbang_pullup is used, disabling\n");
++ master->set_pullup = NULL;
++ }
++
+ /* Lock until the device is added (or not) to w1_masters. */
+ mutex_lock(&w1_mlock);
+ /* Search for the first available id (starting at 1). */
+diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c
+index e10acc2..e546fdc 100644
+--- a/drivers/w1/w1_io.c
++++ b/drivers/w1/w1_io.c
+@@ -127,10 +127,18 @@ static void w1_pre_write(struct w1_master *dev)
+ static void w1_post_write(struct w1_master *dev)
+ {
+ if (dev->pullup_duration) {
+- if (dev->enable_pullup && dev->bus_master->set_pullup)
+- dev->bus_master->set_pullup(dev->bus_master->data, 0);
+- else
++ if (dev->enable_pullup) {
++ if (dev->bus_master->set_pullup) {
++ dev->bus_master->set_pullup(dev->bus_master->data, 0);
++ } else if (dev->bus_master->bitbang_pullup) {
++ dev->bus_master->bitbang_pullup(dev->bus_master->data, 1);
++ msleep(dev->pullup_duration);
++ dev->bus_master->bitbang_pullup(dev->bus_master->data, 0);
++ }
++ } else {
+ msleep(dev->pullup_duration);
++ }
++
+ dev->pullup_duration = 0;
+ }
+ }
diff --git a/patches/linux-3.6.11/0234-Run-Lindent-to-fix-whitespace-fix-braces.patch b/patches/linux-3.6.11/0234-Run-Lindent-to-fix-whitespace-fix-braces.patch
new file mode 100644
index 0000000..3efa620
--- /dev/null
+++ b/patches/linux-3.6.11/0234-Run-Lindent-to-fix-whitespace-fix-braces.patch
@@ -0,0 +1,757 @@
+From: Matt Johnston <matt@ucc.asn.au>
+Date: Thu, 7 Mar 2013 18:56:49 +0800
+Subject: [PATCH] Run Lindent to fix whitespace, fix braces
+
+---
+ drivers/w1/masters/w1-gpio.c | 14 ++---
+ drivers/w1/w1.h | 141 ++++++++++++++++++++-----------------------
+ drivers/w1/w1_int.c | 63 +++++++++----------
+ drivers/w1/w1_io.c | 98 ++++++++++++++++++------------
+ 4 files changed, 165 insertions(+), 151 deletions(-)
+
+diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
+index cc761f2..2a5f8b3 100644
+--- a/drivers/w1/masters/w1-gpio.c
++++ b/drivers/w1/masters/w1-gpio.c
+@@ -86,7 +86,7 @@ static int __init w1_gpio_probe(struct platform_device *pdev)
+ if (w1_gpio_pullup)
+ if (pdata->is_open_drain)
+ printk(KERN_ERR "w1-gpio 'pullup' option "
+- "doesn't work with open drain GPIO\n");
++ "doesn't work with open drain GPIO\n");
+ else
+ master->bitbang_pullup = w1_gpio_bitbang_pullup;
+
+@@ -101,9 +101,9 @@ static int __init w1_gpio_probe(struct platform_device *pdev)
+
+ return 0;
+
+- free_gpio:
++free_gpio:
+ gpio_free(pdata->pin);
+- free_master:
++free_master:
+ kfree(master);
+
+ return err;
+@@ -153,10 +153,10 @@ static int w1_gpio_resume(struct platform_device *pdev)
+
+ static struct platform_driver w1_gpio_driver = {
+ .driver = {
+- .name = "w1-gpio",
+- .owner = THIS_MODULE,
+- },
+- .remove = __exit_p(w1_gpio_remove),
++ .name = "w1-gpio",
++ .owner = THIS_MODULE,
++ },
++ .remove = __exit_p(w1_gpio_remove),
+ .suspend = w1_gpio_suspend,
+ .resume = w1_gpio_resume,
+ };
+diff --git a/drivers/w1/w1.h b/drivers/w1/w1.h
+index 463d019..40123e3 100644
+--- a/drivers/w1/w1.h
++++ b/drivers/w1/w1.h
+@@ -22,16 +22,11 @@
+ #ifndef __W1_H
+ #define __W1_H
+
+-struct w1_reg_num
+-{
++struct w1_reg_num {
+ #if defined(__LITTLE_ENDIAN_BITFIELD)
+- __u64 family:8,
+- id:48,
+- crc:8;
++ __u64 family:8, id:48, crc:8;
+ #elif defined(__BIG_ENDIAN_BITFIELD)
+- __u64 crc:8,
+- id:48,
+- family:8;
++ __u64 crc:8, id:48, family:8;
+ #else
+ #error "Please fix <asm/byteorder.h>"
+ #endif
+@@ -59,26 +54,24 @@ struct w1_reg_num
+
+ #define W1_SLAVE_ACTIVE 0
+
+-struct w1_slave
+-{
+- struct module *owner;
+- unsigned char name[W1_MAXNAMELEN];
+- struct list_head w1_slave_entry;
+- struct w1_reg_num reg_num;
+- atomic_t refcnt;
+- u8 rom[9];
+- u32 flags;
+- int ttl;
+-
+- struct w1_master *master;
+- struct w1_family *family;
+- void *family_data;
+- struct device dev;
+- struct completion released;
++struct w1_slave {
++ struct module *owner;
++ unsigned char name[W1_MAXNAMELEN];
++ struct list_head w1_slave_entry;
++ struct w1_reg_num reg_num;
++ atomic_t refcnt;
++ u8 rom[9];
++ u32 flags;
++ int ttl;
++
++ struct w1_master *master;
++ struct w1_family *family;
++ void *family_data;
++ struct device dev;
++ struct completion released;
+ };
+
+-typedef void (*w1_slave_found_callback)(struct w1_master *, u64);
+-
++typedef void (*w1_slave_found_callback) (struct w1_master *, u64);
+
+ /**
+ * Note: read_bit and write_bit are very low level functions and should only
+@@ -87,19 +80,18 @@ typedef void (*w1_slave_found_callback)(struct w1_master *, u64);
+ * Either define read_bit and write_bit OR define, at minimum, touch_bit and
+ * reset_bus.
+ */
+-struct w1_bus_master
+-{
++struct w1_bus_master {
+ /** the first parameter in all the functions below */
+- void *data;
++ void *data;
+
+ /**
+ * Sample the line level
+ * @return the level read (0 or 1)
+ */
+- u8 (*read_bit)(void *);
++ u8(*read_bit) (void *);
+
+ /** Sets the line level */
+- void (*write_bit)(void *, u8);
++ void (*write_bit) (void *, u8);
+
+ /**
+ * touch_bit is the lowest-level function for devices that really
+@@ -108,102 +100,103 @@ struct w1_bus_master
+ * touch_bit(1) = write-1 / read cycle
+ * @return the bit read (0 or 1)
+ */
+- u8 (*touch_bit)(void *, u8);
++ u8(*touch_bit) (void *, u8);
+
+ /**
+ * Reads a bytes. Same as 8 touch_bit(1) calls.
+ * @return the byte read
+ */
+- u8 (*read_byte)(void *);
++ u8(*read_byte) (void *);
+
+ /**
+ * Writes a byte. Same as 8 touch_bit(x) calls.
+ */
+- void (*write_byte)(void *, u8);
++ void (*write_byte) (void *, u8);
+
+ /**
+ * Same as a series of read_byte() calls
+ * @return the number of bytes read
+ */
+- u8 (*read_block)(void *, u8 *, int);
++ u8(*read_block) (void *, u8 *, int);
+
+ /** Same as a series of write_byte() calls */
+- void (*write_block)(void *, const u8 *, int);
++ void (*write_block) (void *, const u8 *, int);
+
+ /**
+ * Combines two reads and a smart write for ROM searches
+ * @return bit0=Id bit1=comp_id bit2=dir_taken
+ */
+- u8 (*triplet)(void *, u8);
++ u8(*triplet) (void *, u8);
+
+ /**
+ * long write-0 with a read for the presence pulse detection
+ * @return -1=Error, 0=Device present, 1=No device present
+ */
+- u8 (*reset_bus)(void *);
++ u8(*reset_bus) (void *);
+
+ /**
+ * Put out a strong pull-up pulse of the specified duration.
+ * @return -1=Error, 0=completed
+ */
+- u8 (*set_pullup)(void *, int);
++ u8(*set_pullup) (void *, int);
+
+ /**
+ * Turns the pullup on/off in bitbanging mode, takes an on/off argument.
+ * @return -1=Error, 0=completed
+ */
+- void (*bitbang_pullup)(void *, u8);
++ void (*bitbang_pullup) (void *, u8);
+
+ /** Really nice hardware can handles the different types of ROM search
+ * w1_master* is passed to the slave found callback.
+ */
+- void (*search)(void *, struct w1_master *,
+- u8, w1_slave_found_callback);
++ void (*search) (void *, struct w1_master *,
++ u8, w1_slave_found_callback);
+ };
+
+-struct w1_master
+-{
+- struct list_head w1_master_entry;
+- struct module *owner;
+- unsigned char name[W1_MAXNAMELEN];
+- struct list_head slist;
+- int max_slave_count, slave_count;
+- unsigned long attempts;
+- int slave_ttl;
+- int initialized;
+- u32 id;
+- int search_count;
+-
+- atomic_t refcnt;
+-
+- void *priv;
+- int priv_size;
++struct w1_master {
++ struct list_head w1_master_entry;
++ struct module *owner;
++ unsigned char name[W1_MAXNAMELEN];
++ struct list_head slist;
++ int max_slave_count, slave_count;
++ unsigned long attempts;
++ int slave_ttl;
++ int initialized;
++ u32 id;
++ int search_count;
++
++ atomic_t refcnt;
++
++ void *priv;
++ int priv_size;
+
+ /** 5V strong pullup enabled flag, 1 enabled, zero disabled. */
+- int enable_pullup;
++ int enable_pullup;
+ /** 5V strong pullup duration in milliseconds, zero disabled. */
+- int pullup_duration;
++ int pullup_duration;
+
+- struct task_struct *thread;
+- struct mutex mutex;
+- struct mutex bus_mutex;
++ struct task_struct *thread;
++ struct mutex mutex;
++ struct mutex bus_mutex;
+
+- struct device_driver *driver;
+- struct device dev;
++ struct device_driver *driver;
++ struct device dev;
+
+- struct w1_bus_master *bus_master;
++ struct w1_bus_master *bus_master;
+
+- u32 seq;
++ u32 seq;
+ };
+
+ int w1_create_master_attributes(struct w1_master *);
+ void w1_destroy_master_attributes(struct w1_master *master);
+-void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb);
+-void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb);
++void w1_search(struct w1_master *dev, u8 search_type,
++ w1_slave_found_callback cb);
++void w1_search_devices(struct w1_master *dev, u8 search_type,
++ w1_slave_found_callback cb);
+ struct w1_slave *w1_search_slave(struct w1_reg_num *id);
+ void w1_slave_found(struct w1_master *dev, u64 rn);
+ void w1_search_process_cb(struct w1_master *dev, u8 search_type,
+- w1_slave_found_callback cb);
++ w1_slave_found_callback cb);
+ struct w1_master *w1_search_master_id(u32 id);
+
+ /* Disconnect and reconnect devices in the given family. Used for finding
+@@ -226,17 +219,17 @@ int w1_reset_select_slave(struct w1_slave *sl);
+ int w1_reset_resume_command(struct w1_master *);
+ void w1_next_pullup(struct w1_master *, int);
+
+-static inline struct w1_slave* dev_to_w1_slave(struct device *dev)
++static inline struct w1_slave *dev_to_w1_slave(struct device *dev)
+ {
+ return container_of(dev, struct w1_slave, dev);
+ }
+
+-static inline struct w1_slave* kobj_to_w1_slave(struct kobject *kobj)
++static inline struct w1_slave *kobj_to_w1_slave(struct kobject *kobj)
+ {
+ return dev_to_w1_slave(container_of(kobj, struct device, kobj));
+ }
+
+-static inline struct w1_master* dev_to_w1_master(struct device *dev)
++static inline struct w1_master *dev_to_w1_master(struct device *dev)
+ {
+ return container_of(dev, struct w1_master, dev);
+ }
+diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c
+index eb906e8..e7e3d11 100644
+--- a/drivers/w1/w1_int.c
++++ b/drivers/w1/w1_int.c
+@@ -32,15 +32,15 @@
+ #include "w1_netlink.h"
+ #include "w1_int.h"
+
+-static int w1_search_count = -1; /* Default is continual scan */
++static int w1_search_count = -1; /* Default is continual scan */
+ module_param_named(search_count, w1_search_count, int, 0);
+
+ static int w1_enable_pullup = 1;
+ module_param_named(enable_pullup, w1_enable_pullup, int, 0);
+
+-static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
+- struct device_driver *driver,
+- struct device *device)
++static struct w1_master *w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
++ struct device_driver *driver,
++ struct device *device)
+ {
+ struct w1_master *dev;
+ int err;
+@@ -48,26 +48,27 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
+ /*
+ * We are in process context(kernel thread), so can sleep.
+ */
+- dev = kzalloc(sizeof(struct w1_master) + sizeof(struct w1_bus_master), GFP_KERNEL);
++ dev =
++ kzalloc(sizeof(struct w1_master) + sizeof(struct w1_bus_master),
++ GFP_KERNEL);
+ if (!dev) {
+ printk(KERN_ERR
+- "Failed to allocate %zd bytes for new w1 device.\n",
+- sizeof(struct w1_master));
++ "Failed to allocate %zd bytes for new w1 device.\n",
++ sizeof(struct w1_master));
+ return NULL;
+ }
+
+-
+ dev->bus_master = (struct w1_bus_master *)(dev + 1);
+
+- dev->owner = THIS_MODULE;
+- dev->max_slave_count = slave_count;
+- dev->slave_count = 0;
+- dev->attempts = 0;
+- dev->initialized = 0;
+- dev->id = id;
+- dev->slave_ttl = slave_ttl;
+- dev->search_count = w1_search_count;
+- dev->enable_pullup = w1_enable_pullup;
++ dev->owner = THIS_MODULE;
++ dev->max_slave_count = slave_count;
++ dev->slave_count = 0;
++ dev->attempts = 0;
++ dev->initialized = 0;
++ dev->id = id;
++ dev->slave_ttl = slave_ttl;
++ dev->search_count = w1_search_count;
++ dev->enable_pullup = w1_enable_pullup;
+
+ /* 1 for w1_process to decrement
+ * 1 for __w1_remove_master_device to decrement
+@@ -89,7 +90,8 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
+
+ err = device_register(&dev->dev);
+ if (err) {
+- printk(KERN_ERR "Failed to register master device. err=%d\n", err);
++ printk(KERN_ERR "Failed to register master device. err=%d\n",
++ err);
+ memset(dev, 0, sizeof(struct w1_master));
+ kfree(dev);
+ dev = NULL;
+@@ -115,21 +117,20 @@ int w1_add_master_device(struct w1_bus_master *master)
+ !(master->write_bit && master->read_bit) &&
+ !(master->write_byte && master->read_byte && master->reset_bus)) {
+ printk(KERN_ERR "w1_add_master_device: invalid function set\n");
+- return(-EINVAL);
++ return (-EINVAL);
+ }
+
+ /* bitbanging hardware uses bitbang_pullup, other hardware uses set_pullup
+ * and takes care of timing itself */
+ if (!master->write_byte && !master->touch_bit && master->set_pullup) {
+ printk(KERN_ERR "w1_add_master_device: set_pullup requires "
+- "write_byte or touch_bit, disabling\n");
++ "write_byte or touch_bit, disabling\n");
+ master->set_pullup = NULL;
+ }
+
+- if (master->set_pullup && master->bitbang_pullup)
+- {
++ if (master->set_pullup && master->bitbang_pullup) {
+ printk(KERN_ERR "w1_add_master_device: set_pullup should not "
+- "be set when bitbang_pullup is used, disabling\n");
++ "be set when bitbang_pullup is used, disabling\n");
+ master->set_pullup = NULL;
+ }
+
+@@ -149,13 +150,13 @@ int w1_add_master_device(struct w1_bus_master *master)
+ } while (found);
+
+ dev = w1_alloc_dev(id, w1_max_slave_count, w1_max_slave_ttl,
+- &w1_master_driver, &w1_master_device);
++ &w1_master_driver, &w1_master_device);
+ if (!dev) {
+ mutex_unlock(&w1_mlock);
+ return -ENOMEM;
+ }
+
+- retval = w1_create_master_attributes(dev);
++ retval = w1_create_master_attributes(dev);
+ if (retval) {
+ mutex_unlock(&w1_mlock);
+ goto err_out_free_dev;
+@@ -169,8 +170,7 @@ int w1_add_master_device(struct w1_bus_master *master)
+ if (IS_ERR(dev->thread)) {
+ retval = PTR_ERR(dev->thread);
+ dev_err(&dev->dev,
+- "Failed to create new kernel thread. err=%d\n",
+- retval);
++ "Failed to create new kernel thread. err=%d\n", retval);
+ mutex_unlock(&w1_mlock);
+ goto err_out_rm_attr;
+ }
+@@ -185,7 +185,7 @@ int w1_add_master_device(struct w1_bus_master *master)
+
+ return 0;
+
+-#if 0 /* Thread cleanup code, not required currently. */
++#if 0 /* Thread cleanup code, not required currently. */
+ err_out_kill_thread:
+ kthread_stop(dev->thread);
+ #endif
+@@ -210,14 +210,15 @@ void __w1_remove_master_device(struct w1_master *dev)
+
+ mutex_lock(&dev->mutex);
+ list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry)
+- w1_slave_detach(sl);
++ w1_slave_detach(sl);
+ w1_destroy_master_attributes(dev);
+ mutex_unlock(&dev->mutex);
+ atomic_dec(&dev->refcnt);
+
+ while (atomic_read(&dev->refcnt)) {
+- dev_info(&dev->dev, "Waiting for %s to become free: refcnt=%d.\n",
+- dev->name, atomic_read(&dev->refcnt));
++ dev_info(&dev->dev,
++ "Waiting for %s to become free: refcnt=%d.\n",
++ dev->name, atomic_read(&dev->refcnt));
+
+ if (msleep_interruptible(1000))
+ flush_signals(current);
+diff --git a/drivers/w1/w1_io.c b/drivers/w1/w1_io.c
+index e546fdc..0566abe 100644
+--- a/drivers/w1/w1_io.c
++++ b/drivers/w1/w1_io.c
+@@ -43,14 +43,15 @@ static u8 w1_crc8_table[] = {
+ 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
+ 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
+ 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
+- 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
+- 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
+- 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
+- 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
+- 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
+- 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
+- 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
+- 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
++ 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147,
++ 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178,
++ 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143,
++ 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76,
++ 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86,
++ 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212,
++ 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52,
++ 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75,
++ 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
+ };
+
+ static void w1_delay(unsigned long tm)
+@@ -84,7 +85,8 @@ static void w1_write_bit(struct w1_master *dev, int bit)
+ {
+ unsigned long flags = 0;
+
+- if(w1_disable_irqs) local_irq_save(flags);
++ if (w1_disable_irqs)
++ local_irq_save(flags);
+
+ if (bit) {
+ dev->bus_master->write_bit(dev->bus_master->data, 0);
+@@ -98,7 +100,8 @@ static void w1_write_bit(struct w1_master *dev, int bit)
+ w1_delay(10);
+ }
+
+- if(w1_disable_irqs) local_irq_restore(flags);
++ if (w1_disable_irqs)
++ local_irq_restore(flags);
+ }
+
+ /**
+@@ -111,9 +114,9 @@ static void w1_write_bit(struct w1_master *dev, int bit)
+ static void w1_pre_write(struct w1_master *dev)
+ {
+ if (dev->pullup_duration &&
+- dev->enable_pullup && dev->bus_master->set_pullup) {
++ dev->enable_pullup && dev->bus_master->set_pullup) {
+ dev->bus_master->set_pullup(dev->bus_master->data,
+- dev->pullup_duration);
++ dev->pullup_duration);
+ }
+ }
+
+@@ -129,15 +132,19 @@ static void w1_post_write(struct w1_master *dev)
+ if (dev->pullup_duration) {
+ if (dev->enable_pullup) {
+ if (dev->bus_master->set_pullup) {
+- dev->bus_master->set_pullup(dev->bus_master->data, 0);
++ dev->bus_master->set_pullup(dev->
++ bus_master->data,
++ 0);
+ } else if (dev->bus_master->bitbang_pullup) {
+- dev->bus_master->bitbang_pullup(dev->bus_master->data, 1);
++ dev->bus_master->
++ bitbang_pullup(dev->bus_master->data, 1);
+ msleep(dev->pullup_duration);
+- dev->bus_master->bitbang_pullup(dev->bus_master->data, 0);
++ dev->bus_master->
++ bitbang_pullup(dev->bus_master->data, 0);
+ }
+- } else {
++ } else {
+ msleep(dev->pullup_duration);
+- }
++ }
+
+ dev->pullup_duration = 0;
+ }
+@@ -156,8 +163,7 @@ void w1_write_8(struct w1_master *dev, u8 byte)
+ if (dev->bus_master->write_byte) {
+ w1_pre_write(dev);
+ dev->bus_master->write_byte(dev->bus_master->data, byte);
+- }
+- else
++ } else
+ for (i = 0; i < 8; ++i) {
+ if (i == 7)
+ w1_pre_write(dev);
+@@ -165,8 +171,8 @@ void w1_write_8(struct w1_master *dev, u8 byte)
+ }
+ w1_post_write(dev);
+ }
+-EXPORT_SYMBOL_GPL(w1_write_8);
+
++EXPORT_SYMBOL_GPL(w1_write_8);
+
+ /**
+ * Generates a write-1 cycle and samples the level.
+@@ -204,17 +210,17 @@ static u8 w1_read_bit(struct w1_master *dev)
+ * @param bdir the bit to write if both id_bit and comp_bit are 0
+ * @return bit fields - see above
+ */
+-u8 w1_triplet(struct w1_master *dev, int bdir)
++u8 w1_triplet(struct w1_master * dev, int bdir)
+ {
+ if (dev->bus_master->triplet)
+ return dev->bus_master->triplet(dev->bus_master->data, bdir);
+ else {
+- u8 id_bit = w1_touch_bit(dev, 1);
++ u8 id_bit = w1_touch_bit(dev, 1);
+ u8 comp_bit = w1_touch_bit(dev, 1);
+ u8 retval;
+
+ if (id_bit && comp_bit)
+- return 0x03; /* error */
++ return 0x03; /* error */
+
+ if (!id_bit && !comp_bit) {
+ /* Both bits are valid, take the direction given */
+@@ -239,7 +245,7 @@ u8 w1_triplet(struct w1_master *dev, int bdir)
+ * @param dev the master device
+ * @return the byte read
+ */
+-u8 w1_read_8(struct w1_master *dev)
++u8 w1_read_8(struct w1_master * dev)
+ {
+ int i;
+ u8 res = 0;
+@@ -248,10 +254,11 @@ u8 w1_read_8(struct w1_master *dev)
+ res = dev->bus_master->read_byte(dev->bus_master->data);
+ else
+ for (i = 0; i < 8; ++i)
+- res |= (w1_touch_bit(dev,1) << i);
++ res |= (w1_touch_bit(dev, 1) << i);
+
+ return res;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_read_8);
+
+ /**
+@@ -261,19 +268,19 @@ EXPORT_SYMBOL_GPL(w1_read_8);
+ * @param buf pointer to the data to write
+ * @param len the number of bytes to write
+ */
+-void w1_write_block(struct w1_master *dev, const u8 *buf, int len)
++void w1_write_block(struct w1_master *dev, const u8 * buf, int len)
+ {
+ int i;
+
+ if (dev->bus_master->write_block) {
+ w1_pre_write(dev);
+ dev->bus_master->write_block(dev->bus_master->data, buf, len);
+- }
+- else
++ } else
+ for (i = 0; i < len; ++i)
+- w1_write_8(dev, buf[i]); /* calls w1_pre_write */
++ w1_write_8(dev, buf[i]); /* calls w1_pre_write */
+ w1_post_write(dev);
+ }
++
+ EXPORT_SYMBOL_GPL(w1_write_block);
+
+ /**
+@@ -283,7 +290,7 @@ EXPORT_SYMBOL_GPL(w1_write_block);
+ * @param buf pointer to the data to write
+ * @param len the number of bytes to write
+ */
+-void w1_touch_block(struct w1_master *dev, u8 *buf, int len)
++void w1_touch_block(struct w1_master *dev, u8 * buf, int len)
+ {
+ int i, j;
+ u8 tmp;
+@@ -299,6 +306,7 @@ void w1_touch_block(struct w1_master *dev, u8 *buf, int len)
+ buf[i] = tmp;
+ }
+ }
++
+ EXPORT_SYMBOL_GPL(w1_touch_block);
+
+ /**
+@@ -309,13 +317,15 @@ EXPORT_SYMBOL_GPL(w1_touch_block);
+ * @param len the number of bytes to read
+ * @return the number of bytes read
+ */
+-u8 w1_read_block(struct w1_master *dev, u8 *buf, int len)
++u8 w1_read_block(struct w1_master *dev, u8 * buf, int len)
+ {
+ int i;
+ u8 ret;
+
+ if (dev->bus_master->read_block)
+- ret = dev->bus_master->read_block(dev->bus_master->data, buf, len);
++ ret =
++ dev->bus_master->read_block(dev->bus_master->data, buf,
++ len);
+ else {
+ for (i = 0; i < len; ++i)
+ buf[i] = w1_read_8(dev);
+@@ -324,6 +334,7 @@ u8 w1_read_block(struct w1_master *dev, u8 *buf, int len)
+
+ return ret;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_read_block);
+
+ /**
+@@ -337,10 +348,12 @@ int w1_reset_bus(struct w1_master *dev)
+ int result;
+ unsigned long flags = 0;
+
+- if(w1_disable_irqs) local_irq_save(flags);
++ if (w1_disable_irqs)
++ local_irq_save(flags);
+
+ if (dev->bus_master->reset_bus)
+- result = dev->bus_master->reset_bus(dev->bus_master->data) & 0x1;
++ result =
++ dev->bus_master->reset_bus(dev->bus_master->data) & 0x1;
+ else {
+ dev->bus_master->write_bit(dev->bus_master->data, 0);
+ /* minimum 480, max ? us
+@@ -363,10 +376,12 @@ int w1_reset_bus(struct w1_master *dev)
+ msleep(1);
+ }
+
+- if(w1_disable_irqs) local_irq_restore(flags);
++ if (w1_disable_irqs)
++ local_irq_restore(flags);
+
+ return result;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_reset_bus);
+
+ u8 w1_calc_crc8(u8 * data, int len)
+@@ -378,14 +393,16 @@ u8 w1_calc_crc8(u8 * data, int len)
+
+ return crc;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_calc_crc8);
+
+-void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb)
++void w1_search_devices(struct w1_master *dev, u8 search_type,
++ w1_slave_found_callback cb)
+ {
+ dev->attempts++;
+ if (dev->bus_master->search)
+ dev->bus_master->search(dev->bus_master->data, dev,
+- search_type, cb);
++ search_type, cb);
+ else
+ w1_search(dev, search_type, cb);
+ }
+@@ -406,14 +423,15 @@ int w1_reset_select_slave(struct w1_slave *sl)
+ if (sl->master->slave_count == 1)
+ w1_write_8(sl->master, W1_SKIP_ROM);
+ else {
+- u8 match[9] = {W1_MATCH_ROM, };
+- u64 rn = le64_to_cpu(*((u64*)&sl->reg_num));
++ u8 match[9] = { W1_MATCH_ROM, };
++ u64 rn = le64_to_cpu(*((u64 *) & sl->reg_num));
+
+ memcpy(&match[1], &rn, 8);
+ w1_write_block(sl->master, match, 9);
+ }
+ return 0;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_reset_select_slave);
+
+ /**
+@@ -440,6 +458,7 @@ int w1_reset_resume_command(struct w1_master *dev)
+ w1_write_8(dev, W1_RESUME_CMD);
+ return 0;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_reset_resume_command);
+
+ /**
+@@ -457,4 +476,5 @@ void w1_next_pullup(struct w1_master *dev, int delay)
+ {
+ dev->pullup_duration = delay;
+ }
++
+ EXPORT_SYMBOL_GPL(w1_next_pullup);
diff --git a/patches/linux-3.6.11/0235-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch b/patches/linux-3.6.11/0235-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
new file mode 100644
index 0000000..942fa53
--- /dev/null
+++ b/patches/linux-3.6.11/0235-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
@@ -0,0 +1,251 @@
+From: Ivan Djelic <ivan.djelic@parrot.com>
+Date: Wed, 6 Mar 2013 20:09:27 +0100
+Subject: [PATCH] ARM: 7668/1: fix memset-related crashes caused by recent GCC
+ (4.7.2) optimizations
+
+Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on
+assumptions about the implementation of memset and similar functions.
+The current ARM optimized memset code does not return the value of
+its first argument, as is usually expected from standard implementations.
+
+For instance in the following function:
+
+void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter)
+{
+ memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter));
+ waiter->magic = waiter;
+ INIT_LIST_HEAD(&waiter->list);
+}
+
+compiled as:
+
+800554d0 <debug_mutex_lock_common>:
+800554d0: e92d4008 push {r3, lr}
+800554d4: e1a00001 mov r0, r1
+800554d8: e3a02010 mov r2, #16 ; 0x10
+800554dc: e3a01011 mov r1, #17 ; 0x11
+800554e0: eb04426e bl 80165ea0 <memset>
+800554e4: e1a03000 mov r3, r0
+800554e8: e583000c str r0, [r3, #12]
+800554ec: e5830000 str r0, [r3]
+800554f0: e5830004 str r0, [r3, #4]
+800554f4: e8bd8008 pop {r3, pc}
+
+GCC assumes memset returns the value of pointer 'waiter' in register r0; causing
+register/memory corruptions.
+
+This patch fixes the return value of the assembly version of memset.
+It adds a 'mov' instruction and merges an additional load+store into
+existing load/store instructions.
+For ease of review, here is a breakdown of the patch into 4 simple steps:
+
+Step 1
+======
+Perform the following substitutions:
+ip -> r8, then
+r0 -> ip,
+and insert 'mov ip, r0' as the first statement of the function.
+At this point, we have a memset() implementation returning the proper result,
+but corrupting r8 on some paths (the ones that were using ip).
+
+Step 2
+======
+Make sure r8 is saved and restored when (! CALGN(1)+0) == 1:
+
+save r8:
+- str lr, [sp, #-4]!
++ stmfd sp!, {r8, lr}
+
+and restore r8 on both exit paths:
+- ldmeqfd sp!, {pc} @ Now <64 bytes to go.
++ ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
+(...)
+ tst r2, #16
+ stmneia ip!, {r1, r3, r8, lr}
+- ldr lr, [sp], #4
++ ldmfd sp!, {r8, lr}
+
+Step 3
+======
+Make sure r8 is saved and restored when (! CALGN(1)+0) == 0:
+
+save r8:
+- stmfd sp!, {r4-r7, lr}
++ stmfd sp!, {r4-r8, lr}
+
+and restore r8 on both exit paths:
+ bgt 3b
+- ldmeqfd sp!, {r4-r7, pc}
++ ldmeqfd sp!, {r4-r8, pc}
+(...)
+ tst r2, #16
+ stmneia ip!, {r4-r7}
+- ldmfd sp!, {r4-r7, lr}
++ ldmfd sp!, {r4-r8, lr}
+
+Step 4
+======
+Rewrite register list "r4-r7, r8" as "r4-r8".
+
+Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
+Reviewed-by: Nicolas Pitre <nico@linaro.org>
+Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+---
+ arch/arm/lib/memset.S | 85 ++++++++++++++++++++++++++-------------------------
+ 1 file changed, 44 insertions(+), 41 deletions(-)
+
+diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
+index 650d592..d912e73 100644
+--- a/arch/arm/lib/memset.S
++++ b/arch/arm/lib/memset.S
+@@ -19,9 +19,9 @@
+ 1: subs r2, r2, #4 @ 1 do we have enough
+ blt 5f @ 1 bytes to align with?
+ cmp r3, #2 @ 1
+- strltb r1, [r0], #1 @ 1
+- strleb r1, [r0], #1 @ 1
+- strb r1, [r0], #1 @ 1
++ strltb r1, [ip], #1 @ 1
++ strleb r1, [ip], #1 @ 1
++ strb r1, [ip], #1 @ 1
+ add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
+ /*
+ * The pointer is now aligned and the length is adjusted. Try doing the
+@@ -29,10 +29,14 @@
+ */
+
+ ENTRY(memset)
+- ands r3, r0, #3 @ 1 unaligned?
++/*
++ * Preserve the contents of r0 for the return value.
++ */
++ mov ip, r0
++ ands r3, ip, #3 @ 1 unaligned?
+ bne 1b @ 1
+ /*
+- * we know that the pointer in r0 is aligned to a word boundary.
++ * we know that the pointer in ip is aligned to a word boundary.
+ */
+ orr r1, r1, r1, lsl #8
+ orr r1, r1, r1, lsl #16
+@@ -43,29 +47,28 @@ ENTRY(memset)
+ #if ! CALGN(1)+0
+
+ /*
+- * We need an extra register for this loop - save the return address and
+- * use the LR
++ * We need 2 extra registers for this loop - use r8 and the LR
+ */
+- str lr, [sp, #-4]!
+- mov ip, r1
++ stmfd sp!, {r8, lr}
++ mov r8, r1
+ mov lr, r1
+
+ 2: subs r2, r2, #64
+- stmgeia r0!, {r1, r3, ip, lr} @ 64 bytes at a time.
+- stmgeia r0!, {r1, r3, ip, lr}
+- stmgeia r0!, {r1, r3, ip, lr}
+- stmgeia r0!, {r1, r3, ip, lr}
++ stmgeia ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
++ stmgeia ip!, {r1, r3, r8, lr}
++ stmgeia ip!, {r1, r3, r8, lr}
++ stmgeia ip!, {r1, r3, r8, lr}
+ bgt 2b
+- ldmeqfd sp!, {pc} @ Now <64 bytes to go.
++ ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
+ /*
+ * No need to correct the count; we're only testing bits from now on
+ */
+ tst r2, #32
+- stmneia r0!, {r1, r3, ip, lr}
+- stmneia r0!, {r1, r3, ip, lr}
++ stmneia ip!, {r1, r3, r8, lr}
++ stmneia ip!, {r1, r3, r8, lr}
+ tst r2, #16
+- stmneia r0!, {r1, r3, ip, lr}
+- ldr lr, [sp], #4
++ stmneia ip!, {r1, r3, r8, lr}
++ ldmfd sp!, {r8, lr}
+
+ #else
+
+@@ -74,54 +77,54 @@ ENTRY(memset)
+ * whole cache lines at once.
+ */
+
+- stmfd sp!, {r4-r7, lr}
++ stmfd sp!, {r4-r8, lr}
+ mov r4, r1
+ mov r5, r1
+ mov r6, r1
+ mov r7, r1
+- mov ip, r1
++ mov r8, r1
+ mov lr, r1
+
+ cmp r2, #96
+- tstgt r0, #31
++ tstgt ip, #31
+ ble 3f
+
+- and ip, r0, #31
+- rsb ip, ip, #32
+- sub r2, r2, ip
+- movs ip, ip, lsl #(32 - 4)
+- stmcsia r0!, {r4, r5, r6, r7}
+- stmmiia r0!, {r4, r5}
+- tst ip, #(1 << 30)
+- mov ip, r1
+- strne r1, [r0], #4
++ and r8, ip, #31
++ rsb r8, r8, #32
++ sub r2, r2, r8
++ movs r8, r8, lsl #(32 - 4)
++ stmcsia ip!, {r4, r5, r6, r7}
++ stmmiia ip!, {r4, r5}
++ tst r8, #(1 << 30)
++ mov r8, r1
++ strne r1, [ip], #4
+
+ 3: subs r2, r2, #64
+- stmgeia r0!, {r1, r3-r7, ip, lr}
+- stmgeia r0!, {r1, r3-r7, ip, lr}
++ stmgeia ip!, {r1, r3-r8, lr}
++ stmgeia ip!, {r1, r3-r8, lr}
+ bgt 3b
+- ldmeqfd sp!, {r4-r7, pc}
++ ldmeqfd sp!, {r4-r8, pc}
+
+ tst r2, #32
+- stmneia r0!, {r1, r3-r7, ip, lr}
++ stmneia ip!, {r1, r3-r8, lr}
+ tst r2, #16
+- stmneia r0!, {r4-r7}
+- ldmfd sp!, {r4-r7, lr}
++ stmneia ip!, {r4-r7}
++ ldmfd sp!, {r4-r8, lr}
+
+ #endif
+
+ 4: tst r2, #8
+- stmneia r0!, {r1, r3}
++ stmneia ip!, {r1, r3}
+ tst r2, #4
+- strne r1, [r0], #4
++ strne r1, [ip], #4
+ /*
+ * When we get here, we've got less than 4 bytes to zero. We
+ * may have an unaligned pointer as well.
+ */
+ 5: tst r2, #2
+- strneb r1, [r0], #1
+- strneb r1, [r0], #1
++ strneb r1, [ip], #1
++ strneb r1, [ip], #1
+ tst r2, #1
+- strneb r1, [r0], #1
++ strneb r1, [ip], #1
+ mov pc, lr
+ ENDPROC(memset)
diff --git a/patches/linux-3.6.11/0236-USB-add-OWL-CM-160-support-to-cp210x-driver.patch b/patches/linux-3.6.11/0236-USB-add-OWL-CM-160-support-to-cp210x-driver.patch
new file mode 100644
index 0000000..f8a4fce
--- /dev/null
+++ b/patches/linux-3.6.11/0236-USB-add-OWL-CM-160-support-to-cp210x-driver.patch
@@ -0,0 +1,25 @@
+From: Luis Llorente Campo <luisllorente@luisllorente.com>
+Date: Thu, 31 Jan 2013 13:37:05 +0100
+Subject: [PATCH] USB: add OWL CM-160 support to cp210x driver
+
+This adds support for the OWL CM-160 electricity monitor to the cp210x
+driver.
+
+Signed-off-by: Luis Llorente <luisllorente@luisllorente.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/serial/cp210x.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
+index 5ad932d..5599a45 100644
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -67,6 +67,7 @@ static const struct usb_device_id id_table[] = {
+ { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */
+ { USB_DEVICE(0x0FCF, 0x1004) }, /* Dynastream ANT2USB */
+ { USB_DEVICE(0x0FCF, 0x1006) }, /* Dynastream ANT development board */
++ { USB_DEVICE(0x0FDE, 0xCA05) }, /* OWL Wireless Electricity Monitor CM-160 */
+ { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */
+ { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
+ { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
diff --git a/patches/linux-3.6.11/0237-Add-device-ID-330d.patch b/patches/linux-3.6.11/0237-Add-device-ID-330d.patch
new file mode 100644
index 0000000..cb879f8
--- /dev/null
+++ b/patches/linux-3.6.11/0237-Add-device-ID-330d.patch
@@ -0,0 +1,34 @@
+From: Jo Are By <grimjoey@gmail.com>
+Date: Sun, 17 Mar 2013 17:45:41 +0100
+Subject: [PATCH] Add device ID (330d)
+
+---
+ drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c | 2 ++
+ drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
+index 47be445..e0db1ee 100755
+--- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
++++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
+@@ -3783,6 +3783,8 @@ _ReadIDs(
+ pHalData->CustomerID = RT_CID_DLINK;
+ else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330a))
+ pHalData->CustomerID = RT_CID_DLINK;
++ else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330d))
++ pHalData->CustomerID = RT_CID_DLINK;
+ break;
+ case EEPROM_CID_WHQL:
+ /*
+diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
+index 942ea08..2e54e74 100755
+--- a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
++++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
+@@ -138,6 +138,7 @@ static struct usb_device_id rtw_usb_id_tbl[] ={
+ {USB_DEVICE(0x2001, 0x3307)},//D-Link - Cameo
+ {USB_DEVICE(0x2001, 0x330A)},//D-Link - Alpha
+ {USB_DEVICE(0x2001, 0x3309)},//D-Link - Alpha
++ {USB_DEVICE(0x2001, 0x330D)},//D-Link - Alpha(?)
+ {USB_DEVICE(0x0586, 0x341F)},//Zyxel - Abocom
+ {USB_DEVICE(0x7392, 0x7822)},//Edimax - Edimax
+ {USB_DEVICE(0x2019, 0xAB2B)},//Planex - Abocom
diff --git a/patches/linux-3.6.11/0238-dwc_otg-implement-tasklet-for-returning-URBs-to-usbc.patch b/patches/linux-3.6.11/0238-dwc_otg-implement-tasklet-for-returning-URBs-to-usbc.patch
new file mode 100644
index 0000000..f31402c
--- /dev/null
+++ b/patches/linux-3.6.11/0238-dwc_otg-implement-tasklet-for-returning-URBs-to-usbc.patch
@@ -0,0 +1,240 @@
+From: P33M <P33M@github.com>
+Date: Thu, 21 Mar 2013 19:36:17 +0000
+Subject: [PATCH] dwc_otg: implement tasklet for returning URBs to usbcore hcd
+ layer
+
+The dwc_otg driver interrupt handler for transfer completion will spend
+a very long time with interrupts disabled when a URB is completed -
+this is because usb_hcd_giveback_urb is called from within the handler
+which for a USB device driver with complicated processing (e.g. webcam)
+will take an exorbitant amount of time to complete. This results in
+missed completion interrupts for other USB packets which lead to them
+being dropped due to microframe overruns.
+
+This patch splits returning the URB to the usb hcd layer into a
+high-priority tasklet. This will have most benefit for isochronous IN
+transfers but will also have incidental benefit where multiple periodic
+devices are active at once.
+---
+ .../usb/host/dwc_common_port/dwc_common_linux.c | 5 ++++
+ drivers/usb/host/dwc_common_port/dwc_list.h | 14 ++++-----
+ drivers/usb/host/dwc_common_port/dwc_os.h | 2 ++
+ drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 34 +++++++++++++++++++++-
+ drivers/usb/host/dwc_otg/dwc_otg_hcd.h | 10 +++++++
+ drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 25 ++++++++++------
+ 6 files changed, 73 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/usb/host/dwc_common_port/dwc_common_linux.c b/drivers/usb/host/dwc_common_port/dwc_common_linux.c
+index f00a9ff..6814e51 100644
+--- a/drivers/usb/host/dwc_common_port/dwc_common_linux.c
++++ b/drivers/usb/host/dwc_common_port/dwc_common_linux.c
+@@ -991,6 +991,11 @@ void DWC_TASK_SCHEDULE(dwc_tasklet_t *task)
+ tasklet_schedule(&task->t);
+ }
+
++void DWC_TASK_HI_SCHEDULE(dwc_tasklet_t *task)
++{
++ tasklet_hi_schedule(&task->t);
++}
++
+
+ /* workqueues
+ - run in process context (can sleep)
+diff --git a/drivers/usb/host/dwc_common_port/dwc_list.h b/drivers/usb/host/dwc_common_port/dwc_list.h
+index 89cc325..4ce560d 100644
+--- a/drivers/usb/host/dwc_common_port/dwc_list.h
++++ b/drivers/usb/host/dwc_common_port/dwc_list.h
+@@ -384,17 +384,17 @@ struct { \
+ #define DWC_TAILQ_PREV(elm, headname, field) \
+ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+ #define DWC_TAILQ_EMPTY(head) \
+- (TAILQ_FIRST(head) == TAILQ_END(head))
++ (DWC_TAILQ_FIRST(head) == DWC_TAILQ_END(head))
+
+ #define DWC_TAILQ_FOREACH(var, head, field) \
+- for((var) = TAILQ_FIRST(head); \
+- (var) != TAILQ_END(head); \
+- (var) = TAILQ_NEXT(var, field))
++ for ((var) = DWC_TAILQ_FIRST(head); \
++ (var) != DWC_TAILQ_END(head); \
++ (var) = DWC_TAILQ_NEXT(var, field))
+
+ #define DWC_TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+- for((var) = TAILQ_LAST(head, headname); \
+- (var) != TAILQ_END(head); \
+- (var) = TAILQ_PREV(var, headname, field))
++ for ((var) = DWC_TAILQ_LAST(head, headname); \
++ (var) != DWC_TAILQ_END(head); \
++ (var) = DWC_TAILQ_PREV(var, headname, field))
+
+ /*
+ * Tail queue functions.
+diff --git a/drivers/usb/host/dwc_common_port/dwc_os.h b/drivers/usb/host/dwc_common_port/dwc_os.h
+index 308ddd5..8eb24ea 100644
+--- a/drivers/usb/host/dwc_common_port/dwc_os.h
++++ b/drivers/usb/host/dwc_common_port/dwc_os.h
+@@ -981,6 +981,8 @@ extern void DWC_TASK_FREE(dwc_tasklet_t *task);
+ extern void DWC_TASK_SCHEDULE(dwc_tasklet_t *task);
+ #define dwc_task_schedule DWC_TASK_SCHEDULE
+
++extern void DWC_TASK_HI_SCHEDULE(dwc_tasklet_t *task);
++#define dwc_task_hi_schedule DWC_TASK_HI_SCHEDULE
+
+ /** @name Timer
+ *
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+index fcec97f..91eefec 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+@@ -40,6 +40,9 @@
+ * header file.
+ */
+
++#include <linux/usb.h>
++#include <linux/usb/hcd.h>
++
+ #include "dwc_otg_hcd.h"
+ #include "dwc_otg_regs.h"
+
+@@ -694,6 +697,31 @@ static void reset_tasklet_func(void *data)
+ dwc_otg_hcd->flags.b.port_reset_change = 1;
+ }
+
++static void completion_tasklet_func(void *ptr)
++{
++ dwc_otg_hcd_t *hcd = (dwc_otg_hcd_t *) ptr;
++ struct urb *urb;
++ urb_tq_entry_t *item;
++ dwc_irqflags_t flags;
++
++ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags);
++ while (!DWC_TAILQ_EMPTY(&hcd->completed_urb_list)) {
++ item = DWC_TAILQ_FIRST(&hcd->completed_urb_list);
++ urb = item->urb;
++ DWC_TAILQ_REMOVE(&hcd->completed_urb_list, item,
++ urb_tq_entries);
++ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags);
++ DWC_FREE(item);
++
++ usb_hcd_unlink_urb_from_ep(hcd->priv, urb);
++ usb_hcd_giveback_urb(hcd->priv, urb, urb->status);
++
++ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags);
++ }
++ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags);
++ return;
++}
++
+ static void qh_list_free(dwc_otg_hcd_t * hcd, dwc_list_link_t * qh_list)
+ {
+ dwc_list_link_t *item;
+@@ -833,6 +861,7 @@ static void dwc_otg_hcd_free(dwc_otg_hcd_t * dwc_otg_hcd)
+
+ DWC_TIMER_FREE(dwc_otg_hcd->conn_timer);
+ DWC_TASK_FREE(dwc_otg_hcd->reset_tasklet);
++ DWC_TASK_FREE(dwc_otg_hcd->completion_tasklet);
+
+ #ifdef DWC_DEV_SRPCAP
+ if (dwc_otg_hcd->core_if->power_down == 2 &&
+@@ -877,7 +906,7 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if)
+ DWC_LIST_INIT(&hcd->periodic_sched_ready);
+ DWC_LIST_INIT(&hcd->periodic_sched_assigned);
+ DWC_LIST_INIT(&hcd->periodic_sched_queued);
+-
++ DWC_TAILQ_INIT(&hcd->completed_urb_list);
+ /*
+ * Create a host channel descriptor for each host channel implemented
+ * in the controller. Initialize the channel descriptor array.
+@@ -915,6 +944,9 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd, dwc_otg_core_if_t * core_if)
+
+ /* Initialize reset tasklet. */
+ hcd->reset_tasklet = DWC_TASK_ALLOC("reset_tasklet", reset_tasklet_func, hcd);
++
++ hcd->completion_tasklet = DWC_TASK_ALLOC("completion_tasklet",
++ completion_tasklet_func, hcd);
+ #ifdef DWC_DEV_SRPCAP
+ if (hcd->core_if->power_down == 2) {
+ /* Initialize Power on timer for Host power up in case hibernation */
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
+index 45e44ea..0493dbf 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
+@@ -374,6 +374,13 @@ typedef struct dwc_otg_qh {
+
+ DWC_CIRCLEQ_HEAD(hc_list, dwc_hc);
+
++typedef struct urb_tq_entry {
++ struct urb *urb;
++ DWC_TAILQ_ENTRY(urb_tq_entry) urb_tq_entries;
++} urb_tq_entry_t;
++
++DWC_TAILQ_HEAD(urb_list, urb_tq_entry);
++
+ /**
+ * This structure holds the state of the HCD, including the non-periodic and
+ * periodic schedules.
+@@ -551,6 +558,9 @@ struct dwc_otg_hcd {
+ /* Tasket to do a reset */
+ dwc_tasklet_t *reset_tasklet;
+
++ dwc_tasklet_t *completion_tasklet;
++ struct urb_list completed_urb_list;
++
+ /* */
+ dwc_spinlock_t *lock;
+ dwc_spinlock_t *channel_lock;
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
+index f91c4b1..0137ce3 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
+@@ -271,7 +271,7 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle,
+ dwc_otg_hcd_urb_t * dwc_otg_urb, int32_t status)
+ {
+ struct urb *urb = (struct urb *)urb_handle;
+-
++ urb_tq_entry_t *new_entry;
+ if (CHK_DEBUG_LEVEL(DBG_HCDV | DBG_HCD_URB)) {
+ DWC_PRINTF("%s: urb %p, device %d, ep %d %s, status=%d\n",
+ __func__, urb, usb_pipedevice(urb->pipe),
+@@ -285,7 +285,7 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle,
+ }
+ }
+ }
+-
++ new_entry = DWC_ALLOC_ATOMIC(sizeof(urb_tq_entry_t));
+ urb->actual_length = dwc_otg_hcd_urb_get_actual_length(dwc_otg_urb);
+ /* Convert status value. */
+ switch (status) {
+@@ -348,18 +348,25 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle,
+ }
+
+ DWC_FREE(dwc_otg_urb);
+-
++ if (!new_entry) {
++ DWC_ERROR("dwc_otg_hcd: complete: cannot allocate URB TQ entry\n");
++ urb->status = -EPROTO;
++ /* don't schedule the tasklet -
++ * directly return the packet here with error. */
+ #if USB_URB_EP_LINKING
+- usb_hcd_unlink_urb_from_ep(dwc_otg_hcd_to_hcd(hcd), urb);
++ usb_hcd_unlink_urb_from_ep(dwc_otg_hcd_to_hcd(hcd), urb);
+ #endif
+- DWC_SPINUNLOCK(hcd->lock);
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
+- usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb);
++ usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb);
+ #else
+- usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb, status);
++ usb_hcd_giveback_urb(dwc_otg_hcd_to_hcd(hcd), urb, urb->status);
+ #endif
+- DWC_SPINLOCK(hcd->lock);
+-
++ } else {
++ new_entry->urb = urb;
++ DWC_TAILQ_INSERT_TAIL(&hcd->completed_urb_list, new_entry,
++ urb_tq_entries);
++ DWC_TASK_HI_SCHEDULE(hcd->completion_tasklet);
++ }
+ return 0;
+ }
+
diff --git a/patches/linux-3.6.11/0239-Added-Device-IDs-for-August-DVB-T-205.patch b/patches/linux-3.6.11/0239-Added-Device-IDs-for-August-DVB-T-205.patch
new file mode 100644
index 0000000..b8a2bfa
--- /dev/null
+++ b/patches/linux-3.6.11/0239-Added-Device-IDs-for-August-DVB-T-205.patch
@@ -0,0 +1,64 @@
+From: Franz Abzieher <franz@abzieher.net>
+Date: Sun, 24 Mar 2013 11:44:37 +0100
+Subject: [PATCH] Added Device IDs for August DVB-T 205
+
+---
+ drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 1 +
+ drivers/media/dvb/dvb-usb/rtl28xxu.c | 13 ++++++++++++-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+index 26c4481..5c7262d 100644
+--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
++++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+@@ -358,4 +358,5 @@
+ #define USB_PID_TECHNISAT_USB2_HDCI_V2 0x0002
+ #define USB_PID_TECHNISAT_AIRSTAR_TELESTICK_2 0x0004
+ #define USB_PID_TECHNISAT_USB2_DVB_S2 0x0500
++#define USB_PID_AUGUST_DVBT205 0xa803
+ #endif
+diff --git a/drivers/media/dvb/dvb-usb/rtl28xxu.c b/drivers/media/dvb/dvb-usb/rtl28xxu.c
+index 6bd0bd7..4f79522 100644
+--- a/drivers/media/dvb/dvb-usb/rtl28xxu.c
++++ b/drivers/media/dvb/dvb-usb/rtl28xxu.c
+@@ -1157,6 +1157,7 @@ enum rtl28xxu_usb_table_entry {
+ RTL2832U_0CCD_00A9,
+ RTL2832U_1F4D_B803,
+ RTL2832U_0CCD_00B3,
++ RTL2838U_1F4D_A803,
+ };
+
+ static struct usb_device_id rtl28xxu_table[] = {
+@@ -1175,6 +1176,10 @@ static struct usb_device_id rtl28xxu_table[] = {
+ USB_DEVICE(USB_VID_GTEK, USB_PID_DELOCK_USB2_DVBT)},
+ [RTL2832U_0CCD_00B3] = {
+ USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK)},
++
++ /* RTL2838U */
++ [RTL2838U_1F4D_A803] {
++ USB_DEVICE(USB_VID_GTEK, USB_PID_AUGUST_DVBT205)},
+ {} /* terminating entry */
+ };
+
+@@ -1288,7 +1293,7 @@ static struct dvb_usb_device_properties rtl28xxu_properties[] = {
+
+ .i2c_algo = &rtl28xxu_i2c_algo,
+
+- .num_device_descs = 3,
++ .num_device_descs = 4,
+ .devices = {
+ {
+ .name = "Terratec Cinergy T Stick Black",
+@@ -1308,6 +1313,12 @@ static struct dvb_usb_device_properties rtl28xxu_properties[] = {
+ &rtl28xxu_table[RTL2832U_0CCD_00B3],
+ },
+ },
++ {
++ .name = "AUGUST DVB-T205",
++ .warm_ids = {
++ &rtl28xxu_table[RTL2838U_1F4D_A803],
++ },
++ },
+ }
+ },
+
diff --git a/patches/linux-3.6.11/0240-Revert-ARM-7668-1-fix-memset-related-crashes-caused-.patch b/patches/linux-3.6.11/0240-Revert-ARM-7668-1-fix-memset-related-crashes-caused-.patch
new file mode 100644
index 0000000..6f31dfa
--- /dev/null
+++ b/patches/linux-3.6.11/0240-Revert-ARM-7668-1-fix-memset-related-crashes-caused-.patch
@@ -0,0 +1,166 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Fri, 29 Mar 2013 19:22:41 +0000
+Subject: [PATCH] Revert "ARM: 7668/1: fix memset-related crashes caused by
+ recent GCC (4.7.2) optimizations"
+
+This reverts commit 690c641b4aeefa1df72ae783613afcb6b8ae7347.
+
+There have been various reports of FAT partition corruption following this commit. Reverting for now to see if things improve.
+---
+ arch/arm/lib/memset.S | 85 +++++++++++++++++++++++++--------------------------
+ 1 file changed, 41 insertions(+), 44 deletions(-)
+
+diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
+index d912e73..650d592 100644
+--- a/arch/arm/lib/memset.S
++++ b/arch/arm/lib/memset.S
+@@ -19,9 +19,9 @@
+ 1: subs r2, r2, #4 @ 1 do we have enough
+ blt 5f @ 1 bytes to align with?
+ cmp r3, #2 @ 1
+- strltb r1, [ip], #1 @ 1
+- strleb r1, [ip], #1 @ 1
+- strb r1, [ip], #1 @ 1
++ strltb r1, [r0], #1 @ 1
++ strleb r1, [r0], #1 @ 1
++ strb r1, [r0], #1 @ 1
+ add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
+ /*
+ * The pointer is now aligned and the length is adjusted. Try doing the
+@@ -29,14 +29,10 @@
+ */
+
+ ENTRY(memset)
+-/*
+- * Preserve the contents of r0 for the return value.
+- */
+- mov ip, r0
+- ands r3, ip, #3 @ 1 unaligned?
++ ands r3, r0, #3 @ 1 unaligned?
+ bne 1b @ 1
+ /*
+- * we know that the pointer in ip is aligned to a word boundary.
++ * we know that the pointer in r0 is aligned to a word boundary.
+ */
+ orr r1, r1, r1, lsl #8
+ orr r1, r1, r1, lsl #16
+@@ -47,28 +43,29 @@ ENTRY(memset)
+ #if ! CALGN(1)+0
+
+ /*
+- * We need 2 extra registers for this loop - use r8 and the LR
++ * We need an extra register for this loop - save the return address and
++ * use the LR
+ */
+- stmfd sp!, {r8, lr}
+- mov r8, r1
++ str lr, [sp, #-4]!
++ mov ip, r1
+ mov lr, r1
+
+ 2: subs r2, r2, #64
+- stmgeia ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
+- stmgeia ip!, {r1, r3, r8, lr}
+- stmgeia ip!, {r1, r3, r8, lr}
+- stmgeia ip!, {r1, r3, r8, lr}
++ stmgeia r0!, {r1, r3, ip, lr} @ 64 bytes at a time.
++ stmgeia r0!, {r1, r3, ip, lr}
++ stmgeia r0!, {r1, r3, ip, lr}
++ stmgeia r0!, {r1, r3, ip, lr}
+ bgt 2b
+- ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
++ ldmeqfd sp!, {pc} @ Now <64 bytes to go.
+ /*
+ * No need to correct the count; we're only testing bits from now on
+ */
+ tst r2, #32
+- stmneia ip!, {r1, r3, r8, lr}
+- stmneia ip!, {r1, r3, r8, lr}
++ stmneia r0!, {r1, r3, ip, lr}
++ stmneia r0!, {r1, r3, ip, lr}
+ tst r2, #16
+- stmneia ip!, {r1, r3, r8, lr}
+- ldmfd sp!, {r8, lr}
++ stmneia r0!, {r1, r3, ip, lr}
++ ldr lr, [sp], #4
+
+ #else
+
+@@ -77,54 +74,54 @@ ENTRY(memset)
+ * whole cache lines at once.
+ */
+
+- stmfd sp!, {r4-r8, lr}
++ stmfd sp!, {r4-r7, lr}
+ mov r4, r1
+ mov r5, r1
+ mov r6, r1
+ mov r7, r1
+- mov r8, r1
++ mov ip, r1
+ mov lr, r1
+
+ cmp r2, #96
+- tstgt ip, #31
++ tstgt r0, #31
+ ble 3f
+
+- and r8, ip, #31
+- rsb r8, r8, #32
+- sub r2, r2, r8
+- movs r8, r8, lsl #(32 - 4)
+- stmcsia ip!, {r4, r5, r6, r7}
+- stmmiia ip!, {r4, r5}
+- tst r8, #(1 << 30)
+- mov r8, r1
+- strne r1, [ip], #4
++ and ip, r0, #31
++ rsb ip, ip, #32
++ sub r2, r2, ip
++ movs ip, ip, lsl #(32 - 4)
++ stmcsia r0!, {r4, r5, r6, r7}
++ stmmiia r0!, {r4, r5}
++ tst ip, #(1 << 30)
++ mov ip, r1
++ strne r1, [r0], #4
+
+ 3: subs r2, r2, #64
+- stmgeia ip!, {r1, r3-r8, lr}
+- stmgeia ip!, {r1, r3-r8, lr}
++ stmgeia r0!, {r1, r3-r7, ip, lr}
++ stmgeia r0!, {r1, r3-r7, ip, lr}
+ bgt 3b
+- ldmeqfd sp!, {r4-r8, pc}
++ ldmeqfd sp!, {r4-r7, pc}
+
+ tst r2, #32
+- stmneia ip!, {r1, r3-r8, lr}
++ stmneia r0!, {r1, r3-r7, ip, lr}
+ tst r2, #16
+- stmneia ip!, {r4-r7}
+- ldmfd sp!, {r4-r8, lr}
++ stmneia r0!, {r4-r7}
++ ldmfd sp!, {r4-r7, lr}
+
+ #endif
+
+ 4: tst r2, #8
+- stmneia ip!, {r1, r3}
++ stmneia r0!, {r1, r3}
+ tst r2, #4
+- strne r1, [ip], #4
++ strne r1, [r0], #4
+ /*
+ * When we get here, we've got less than 4 bytes to zero. We
+ * may have an unaligned pointer as well.
+ */
+ 5: tst r2, #2
+- strneb r1, [ip], #1
+- strneb r1, [ip], #1
++ strneb r1, [r0], #1
++ strneb r1, [r0], #1
+ tst r2, #1
+- strneb r1, [ip], #1
++ strneb r1, [r0], #1
+ mov pc, lr
+ ENDPROC(memset)
diff --git a/patches/linux-3.6.11/0241-Move-definition-of-fiq_fix_enable-to-bcm2708.c-to-al.patch b/patches/linux-3.6.11/0241-Move-definition-of-fiq_fix_enable-to-bcm2708.c-to-al.patch
new file mode 100644
index 0000000..64c553c
--- /dev/null
+++ b/patches/linux-3.6.11/0241-Move-definition-of-fiq_fix_enable-to-bcm2708.c-to-al.patch
@@ -0,0 +1,38 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Tue, 2 Apr 2013 13:53:40 +0100
+Subject: [PATCH] Move definition of fiq_fix_enable to bcm2708.c to allow
+ building without dwc_otg
+
+---
+ arch/arm/mach-bcm2708/bcm2708.c | 2 +-
+ drivers/usb/host/dwc_otg/dwc_otg_driver.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c
+index 7294aa0..3f9d32d 100644
+--- a/arch/arm/mach-bcm2708/bcm2708.c
++++ b/arch/arm/mach-bcm2708/bcm2708.c
+@@ -366,7 +366,7 @@ static struct resource bcm2708_usb_resources[] = {
+ },
+ };
+
+-extern bool fiq_fix_enable;
++bool fiq_fix_enable = true;
+
+ static struct resource bcm2708_usb_resources_no_fiq_fix[] = {
+ [0] = {
+diff --git a/drivers/usb/host/dwc_otg/dwc_otg_driver.c b/drivers/usb/host/dwc_otg/dwc_otg_driver.c
+index 25110ca..cea8fcb 100644
+--- a/drivers/usb/host/dwc_otg/dwc_otg_driver.c
++++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.c
+@@ -240,8 +240,8 @@ static struct dwc_otg_driver_module_params dwc_otg_module_params = {
+ .adp_enable = -1,
+ };
+
+-//Global variable to switch the fiq fix on or off
+-bool fiq_fix_enable = true;
++//Global variable to switch the fiq fix on or off (declared in bcm2708.c)
++extern bool fiq_fix_enable;
+
+ //Global variable to switch the nak holdoff on or off
+ bool nak_holdoff_enable = true;
diff --git a/patches/linux-3.6.11/0242-Revert-back-to-smaller-alsa-buffer.patch b/patches/linux-3.6.11/0242-Revert-back-to-smaller-alsa-buffer.patch
new file mode 100644
index 0000000..fcfcc8c
--- /dev/null
+++ b/patches/linux-3.6.11/0242-Revert-back-to-smaller-alsa-buffer.patch
@@ -0,0 +1,28 @@
+From: popcornmix <popcornmix@gmail.com>
+Date: Tue, 2 Apr 2013 22:32:30 +0100
+Subject: [PATCH] Revert back to smaller alsa buffer
+
+---
+ sound/arm/bcm2835-pcm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/sound/arm/bcm2835-pcm.c b/sound/arm/bcm2835-pcm.c
+index c5684ba..8d182f0 100755
+--- a/sound/arm/bcm2835-pcm.c
++++ b/sound/arm/bcm2835-pcm.c
+@@ -26,11 +26,11 @@ static struct snd_pcm_hardware snd_bcm2835_playback_hw = {
+ .rate_max = 48000,
+ .channels_min = 1,
+ .channels_max = 2,
+- .buffer_bytes_max = 32 * 1024, /* Needs to be less than audioplay buffer size */
+- .period_bytes_min = 4 * 1024,
+- .period_bytes_max = 32 * 1024,
++ .buffer_bytes_max = 128 * 1024,
++ .period_bytes_min = 1 * 1024,
++ .period_bytes_max = 128 * 1024,
+ .periods_min = 1,
+- .periods_max = 32,
++ .periods_max = 128,
+ };
+
+ static void snd_bcm2835_playback_free(struct snd_pcm_runtime *runtime)
diff --git a/patches/linux-3.6.10/0201-Release-raspberrypi-20121217.patch b/patches/linux-3.6.11/0301-Release-raspberrypi-20130406.patch
index 9050264..854680c 100644
--- a/patches/linux-3.6.10/0201-Release-raspberrypi-20121217.patch
+++ b/patches/linux-3.6.11/0301-Release-raspberrypi-20130406.patch
@@ -1,6 +1,6 @@
From: Michael Olbrich <m.olbrich@pengutronix.de>
-Date: Mon, 17 Dec 2012 22:54:15 +0100
-Subject: [PATCH] Release raspberrypi/20121217
+Date: Sat, 6 Apr 2013 15:00:46 +0200
+Subject: [PATCH] Release raspberrypi/20130406
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
---
@@ -8,15 +8,15 @@ Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
-index 686b83c..0240f39 100644
+index 50dc4d1..e90f629 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
VERSION = 3
PATCHLEVEL = 6
- SUBLEVEL = 10
+ SUBLEVEL = 11
-EXTRAVERSION =
-+EXTRAVERSION =-20121217
++EXTRAVERSION =-20130406
NAME = Terrified Chipmunk
# *DOCUMENTATION*
diff --git a/patches/linux-3.6.10/series b/patches/linux-3.6.11/series
index bc00e72..b280ae9 100644
--- a/patches/linux-3.6.10/series
+++ b/patches/linux-3.6.11/series
@@ -1,9 +1,9 @@
-# umpf-base: v3.6.10
+# umpf-base: v3.6.11
# umpf-name: raspberrypi
-# umpf-version: raspberrypi/20121217
+# umpf-version: raspberrypi/20130406
# umpf-topic: rpi-3.6.y
-# umpf-hashinfo: d21d26ebd773ab87888351220739b43a9733233a
-# umpf-topic-range: a63a7cf3fc2ac1aff657f58ea446c34f3252209a..580ab44564aa8b60d86527d9615ebd32e84e366d
+# umpf-hashinfo: 4642dffd091481f055d52aba9e0f785a80b6e1cb
+# umpf-topic-range: b2824f4e0990716407b0c0e7acee75bb6353febf..3116edf19a8e9a170231d81d5c2813857e6aa280
0001-Add-dwc_otg-driver.patch
0002-Main-bcm2708-linux-port.patch
0003-bcm2708-watchdog-driver.patch
@@ -198,7 +198,55 @@
0192-net-use-bigger-pages-in-__netdev_alloc_frag.patch
0193-Bluetooth-Increase-HCI-command-tx-timeout.patch
0194-Dual-licence-Broadcom-code-under-BSD-and-GPL.patch
-# umpf-release: raspberrypi/20121217
-# umpf-topic-range: 580ab44564aa8b60d86527d9615ebd32e84e366d..317ff0e27dc59890f4609c08321b1361bee5eb49
-0201-Release-raspberrypi-20121217.patch
+0195-Update-to-Simon-s-latest-dmaer-module.patch
+0196-Add-retry-for-vchiq-init.-Needed-in-some-cases-when-.patch
+0197-Silence-bootup-errors-from-timer-and-gpio.patch
+0198-Remove-RTC_HCTOSYS-as-it-produces-a-kernel-boot-erro.patch
+0199-Make-CMA-kernel-messages-quieter-when-not-fatal.patch
+0200-Add-missing-USB_NET-modules.patch
+0201-Add-mutex-around-bcm_mailbox_property-function.patch
+0202-Enable-ZRAM-and-RFKILL-config-options.patch
+0203-dwc_otg-fix-bug-in-dwc_otg_hcd.c-resulting-in-silent.patch
+0204-Add-config-options-for-netfilter-log-and-more-dvb-mo.patch
+0205-Add-more-dvb-modules.patch
+0206-Return-error-value-from-bcm2708_setup_state.-Thanks-.patch
+0207-spi-spi-bcm2708-respect-per-transfer-SPI-clock-speed.patch
+0208-spi-bcm2708-add-9-bit-support-using-LoSSI-mode.patch
+0209-Add-hwrng-hardware-random-number-generator-driver.patch
+0210-Add-HW_RANDOM-BATMAN_ADV-and-CONFIG_NET_IPGRE.patch
+0211-Add-raid0-module.patch
+0212-Update-vchiq-to-version-supporting-querying-peer-ver.patch
+0213-Use-control-messages-for-audio-data-to-fix-scratch-h.patch
+0214-Default-force_bulk-to-false.patch
+0215-Add-missing-newlines-to-log-messages.patch
+0216-Changed-wording-on-logging.-Previously-we-received-e.patch
+0217-Fix-for-low-bogomips-value-reported.patch
+0218-dwc_otg-Fix-unsafe-access-of-QTD-during-URB-enqueue.patch
+0219-dwc_otg-Fix-incorrect-URB-allocation-error-handling.patch
+0220-Added-inverted-transmitter-support.patch
+0221-fbcon-clear-the-logo-bitmap-from-the-margin-area.patch
+0222-Add-config-request-CONFIG_IP_SCTP.patch
+0223-Add-retry-on-error-and-tidy-of-temperature-driver.patch
+0224-Add-SPEAKUP-and-SPEAKUP_SYNTH_SOFT-kernel-modules.patch
+0225-ARM-VFP-fix-emulation-of-second-VFP-instruction.patch
+0226-ARM-7492-1-add-strstr-declaration-for-decompressors.patch
+0227-dwc_otg-fix-potential-use-after-free-case-in-interru.patch
+0228-fix-missing-modulo-for-bit-in-bank-computation-in-bc.patch
+0229-dwc_otg-add-handling-of-SPLIT-transaction-data-toggl.patch
+0230-USB-option-add-Telekom-Speedstick-LTE-II.patch
+0231-Increase-the-minimum-alsa-buffer-size-as-we-get-unde.patch
+0232-USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch
+0233-Add-bitbanging-pullups-use-them-for-w1-gpio.patch
+0234-Run-Lindent-to-fix-whitespace-fix-braces.patch
+0235-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
+0236-USB-add-OWL-CM-160-support-to-cp210x-driver.patch
+0237-Add-device-ID-330d.patch
+0238-dwc_otg-implement-tasklet-for-returning-URBs-to-usbc.patch
+0239-Added-Device-IDs-for-August-DVB-T-205.patch
+0240-Revert-ARM-7668-1-fix-memset-related-crashes-caused-.patch
+0241-Move-definition-of-fiq_fix_enable-to-bcm2708.c-to-al.patch
+0242-Revert-back-to-smaller-alsa-buffer.patch
+# umpf-release: raspberrypi/20130406
+# umpf-topic-range: 3116edf19a8e9a170231d81d5c2813857e6aa280..8022b5c8eeb7b854f0fb0001e4021d72cd7234e7
+0301-Release-raspberrypi-20130406.patch
# umpf-end
diff --git a/platformconfig b/platformconfig
index e675951..254e61d 100644
--- a/platformconfig
+++ b/platformconfig
@@ -97,8 +97,8 @@ PTXCONF_KERNEL=y
PTXCONF_KERNEL_MODULES=y
PTXCONF_KERNEL_MODULES_INSTALL=y
PTXCONF_KERNEL_MODULES_BUILD="modules"
-PTXCONF_KERNEL_VERSION="3.6.10"
-PTXCONF_KERNEL_MD5="a8c2dcd268d3ca2b81908990abd5d382"
+PTXCONF_KERNEL_VERSION="3.6.11"
+PTXCONF_KERNEL_MD5="3d602ad7f7984509c3e923a5ae90bc54"
PTXCONF_KERNEL_ARCH_STRING="arm"
# PTXCONF_KERNEL_IMAGE_BZ is not set
PTXCONF_KERNEL_IMAGE_Z=y