kernel: update 4.1 to 4.1.5
authorJonas Gorski <jogo@openwrt.org>
Fri, 14 Aug 2015 13:06:33 +0000 (13:06 +0000)
committerJonas Gorski <jogo@openwrt.org>
Fri, 14 Aug 2015 13:06:33 +0000 (13:06 +0000)
Changelog:
 * https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.5

Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 46598

74 files changed:
include/kernel-version.mk
target/linux/brcm47xx/patches-4.1/159-cpu_fixes.patch
target/linux/brcm47xx/patches-4.1/160-kmap_coherent.patch
target/linux/brcm63xx/patches-4.1/001-4.2-MIPS-Add-support-for-vmlinux.bin-appended-dtb.patch
target/linux/brcm63xx/patches-4.1/003-Revert-MIPS-BCM63xx-Provide-a-plat_post_dma_flush-ho.patch
target/linux/brcm63xx/patches-4.1/571-board_fast2704n.patch
target/linux/generic/patches-4.1/132-mips_inline_dma_ops.patch
target/linux/generic/patches-4.1/300-mips_expose_boot_raw.patch
target/linux/generic/patches-4.1/304-mips_disable_fpu.patch
target/linux/ixp4xx/patches-4.1/160-delayed_uart_io.patch
target/linux/sunxi/patches-4.1/100-mfd-axp20x-add-axp22x-pmic.patch
target/linux/sunxi/patches-4.1/101-regulator-axp20x-prep-support-for-multiple-axp-families.patch
target/linux/sunxi/patches-4.1/102-regulator-axp20x-add-support-for-axp22.patch
target/linux/sunxi/patches-4.1/103-mfd-axp20x-add-missing-registers.patch
target/linux/sunxi/patches-4.1/104-mfd-axp20x-enable-axp22x.patch
target/linux/sunxi/patches-4.1/105-mfd-axp20x-add-axp152-support.patch
target/linux/sunxi/patches-4.1/110-mtd-move-nand_ecc_ctrl-init.patch
target/linux/sunxi/patches-4.1/111-mtd-add-support-for-nand-partitions.patch
target/linux/sunxi/patches-4.1/112-mtd-add-dt-nand-partition-parser.patch
target/linux/sunxi/patches-4.1/113-mtd-nand-add-pst.patch
target/linux/sunxi/patches-4.1/114-mtd-randomizer-into-nand-framework.patch
target/linux/sunxi/patches-4.1/115-mtd-fetch-randomizer-mode.patch
target/linux/sunxi/patches-4.1/116-mtd-add-vendor-specific-initcode-infra.patch
target/linux/sunxi/patches-4.1/117-mtd-nand-add-hynix-init.patch
target/linux/sunxi/patches-4.1/118-mtd-nand-fix-NAND_options.patch
target/linux/sunxi/patches-4.1/119-mtd-nand-ecc-for-samsung.patch
target/linux/sunxi/patches-4.1/120-mtd-nand-print-ecc-strength.patch
target/linux/sunxi/patches-4.1/121-mtd-print-full-chipid.patch
target/linux/sunxi/patches-4.1/122-mtd-nand-sunxi-add-partition-support.patch
target/linux/sunxi/patches-4.1/123-mtd-nand-sunxi-add-hw-randomizer-support.patch
target/linux/sunxi/patches-4.1/124-mtd-nand-sunxi-fallback-to-chip-config.patch
target/linux/sunxi/patches-4.1/125-mtd-nand-sunxi-extend-bbt_options.patch
target/linux/sunxi/patches-4.1/126-1-dt-sun4i-add-nand-ctrlpin-defs.patch
target/linux/sunxi/patches-4.1/126-2-dt-sun5i-add-nand-ctrlpin-defs.patch
target/linux/sunxi/patches-4.1/126-3-dt-sun7i-add-nand-ctrlpin-defs.patch
target/linux/sunxi/patches-4.1/126-4-dt-sun4i-add-nfc-to-a10.patch
target/linux/sunxi/patches-4.1/126-5-dt-sun4i-add-nfc-to-a10.patch
target/linux/sunxi/patches-4.1/126-6-dt-sun5i-add-nfc-to-a13.patch
target/linux/sunxi/patches-4.1/127-1-dt-sun5i-enable-nand-on-a13-olinuxino.patch
target/linux/sunxi/patches-4.1/127-2-dt-sun7i-enable-nand-on-a20-olinuxino.patch
target/linux/sunxi/patches-4.1/127-3-dt-sun4i-enable-nand-on-cubieboard.patch
target/linux/sunxi/patches-4.1/127-4-dt-sun4i-enable-nand-on-a10-lime.patch
target/linux/sunxi/patches-4.1/127-5-dt-sun4i-enable-nand-on-a10-pcduino.patch
target/linux/sunxi/patches-4.1/127-6-dt-sun7i-enable-nand-on-a20-pcduino3.patch
target/linux/sunxi/patches-4.1/128-1-mtd-nand-store-timing-in-nand_chip.patch
target/linux/sunxi/patches-4.1/128-2-mtd-nand-support-non-ONFI-timings.patch
target/linux/sunxi/patches-4.1/128-3-mtd-nand-add-H27UBG8T2BTR-BC.patch
target/linux/sunxi/patches-4.1/129-nand-sunxi-fix-write-to-USER_DATA-a13.patch
target/linux/sunxi/patches-4.1/140-mmc-sdio-reliability-fix.patch
target/linux/sunxi/patches-4.1/141-dt-sunxi-raise-minimum-cpu-voltage.patch
target/linux/sunxi/patches-4.1/142-arm-add-sunxi-h3.patch
target/linux/sunxi/patches-4.1/143-dmaengine-add-h3.patch
target/linux/sunxi/patches-4.1/160-dmaengine-add-sun4i-driver.patch
target/linux/sunxi/patches-4.1/161-clk-sunxi-add-pll2-for-sun457i.patch
target/linux/sunxi/patches-4.1/162-clk-sunxi-codec-clock.patch
target/linux/sunxi/patches-4.1/163-clk-sunxi-mod1-clock.patch
target/linux/sunxi/patches-4.1/164-1-dt-add-pll2-into-dtsi.patch
target/linux/sunxi/patches-4.1/164-2-dt-add-codec-clock-into-dtsi.patch
target/linux/sunxi/patches-4.1/164-3-dt-sun7i-add-mod1-clocknodes.patch
target/linux/sunxi/patches-4.1/164-4-dt-sun7i-resort-pll-parents-for-audio.patch
target/linux/sunxi/patches-4.1/165-asoc-add-sunxi-codec.patch
target/linux/sunxi/patches-4.1/166-asoc-sunxi-fix-distortion-on-16bit-mono.patch
target/linux/sunxi/patches-4.1/167-1-dt-sun7i-add-codec-node.patch
target/linux/sunxi/patches-4.1/167-2-dt-sun7i-add-codec-to-a20-olinuxino-micro.patch
target/linux/sunxi/patches-4.1/167-3-dt-sun7i-add-codec-to-cubieboard2.patch
target/linux/sunxi/patches-4.1/167-4-dt-sun7i-add-codec-to-cubietruck.patch
target/linux/sunxi/patches-4.1/170-musb-add-driver.patch
target/linux/sunxi/patches-4.1/171-musb-add-support-for-a31.patch
target/linux/sunxi/patches-4.1/190-dt-sun7i-add-ss-to-a20.patch
target/linux/sunxi/patches-4.1/191-dt-sun4i-add-ss-to-a10.patch
target/linux/sunxi/patches-4.1/192-crypto-add-ss.patch
target/linux/sunxi/patches-4.1/201-dt-sun7i-add-oob-irq-to-bcm-sdio-wifi.patch
target/linux/sunxi/patches-4.1/202-dt-sun7i-add-bluetooth-to-cubietruck.patch
target/linux/sunxi/patches-4.1/300-dt-sun7i-add-lamobo-r1.patch

index 8937cd0db89df9a8ff2c19786f72e76dee4f020a..6fd138911cdb40cc4a99a70bfa5c331ea1aeb3bb 100644 (file)
@@ -4,11 +4,11 @@ LINUX_RELEASE?=1
 
 LINUX_VERSION-3.18 = .20
 LINUX_VERSION-4.0 = .9
-LINUX_VERSION-4.1 = .4
+LINUX_VERSION-4.1 = .5
 
 LINUX_KERNEL_MD5SUM-3.18.20 = 952c9159acdf4efbc96e08a27109d994
 LINUX_KERNEL_MD5SUM-4.0.9 = 40fc5f6e2d718e539b45e6601c71985b
-LINUX_KERNEL_MD5SUM-4.1.4 = 32cb4dd9f14d37bf71bafa6ed368f769
+LINUX_KERNEL_MD5SUM-4.1.5 = f23e1d4ce8f63e46db81d56e36281885
 
 ifdef KERNEL_PATCHVER
   LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
index a80c8f4a1fcfdc9e13e7df2905cecaeedd2e8355..db847bde78146e9ddcd51f46b47516d4e5face08 100644 (file)
  #endif
 --- a/arch/mips/mm/c-r4k.c
 +++ b/arch/mips/mm/c-r4k.c
-@@ -38,6 +38,9 @@
- #include <asm/traps.h>
+@@ -39,6 +39,9 @@
  #include <asm/dma-coherence.h>
+ #include <asm/mips-cm.h>
  
 +/* For enabling BCM4710 cache workarounds */
 +int bcm4710 = 0;
  /*
   * Special Variant of smp_call_function for use by cache functions:
   *
-@@ -149,6 +152,9 @@ static void r4k_blast_dcache_user_page_s
+@@ -157,6 +160,9 @@ static void r4k_blast_dcache_user_page_s
  {
        unsigned long  dc_lsize = cpu_dcache_line_size();
  
        if (dc_lsize == 0)
                r4k_blast_dcache_user_page = (void *)cache_noop;
        else if (dc_lsize == 16)
-@@ -167,6 +173,9 @@ static void r4k_blast_dcache_page_indexe
+@@ -175,6 +181,9 @@ static void r4k_blast_dcache_page_indexe
  {
        unsigned long dc_lsize = cpu_dcache_line_size();
  
        if (dc_lsize == 0)
                r4k_blast_dcache_page_indexed = (void *)cache_noop;
        else if (dc_lsize == 16)
-@@ -186,6 +195,9 @@ static void r4k_blast_dcache_setup(void)
+@@ -194,6 +203,9 @@ static void r4k_blast_dcache_setup(void)
  {
        unsigned long dc_lsize = cpu_dcache_line_size();
  
        if (dc_lsize == 0)
                r4k_blast_dcache = (void *)cache_noop;
        else if (dc_lsize == 16)
-@@ -785,6 +797,8 @@ static void local_r4k_flush_cache_sigtra
+@@ -793,6 +805,8 @@ static void local_r4k_flush_cache_sigtra
        unsigned long addr = (unsigned long) arg;
  
        R4600_HIT_CACHEOP_WAR_IMPL;
        if (dc_lsize)
                protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
        if (!cpu_icache_snoops_remote_store && scache_size)
-@@ -1591,6 +1605,17 @@ static void coherency_setup(void)
+@@ -1599,6 +1613,17 @@ static void coherency_setup(void)
         * silly idea of putting something else there ...
         */
        switch (current_cpu_type()) {
        case CPU_R4000PC:
        case CPU_R4000SC:
        case CPU_R4000MC:
-@@ -1637,6 +1662,15 @@ void r4k_cache_init(void)
+@@ -1645,6 +1670,15 @@ void r4k_cache_init(void)
        extern void build_copy_page(void);
        struct cpuinfo_mips *c = &current_cpu_data;
  
        probe_pcache();
        setup_scache();
  
-@@ -1706,7 +1740,15 @@ void r4k_cache_init(void)
+@@ -1714,7 +1748,15 @@ void r4k_cache_init(void)
         */
        local_r4k___flush_cache_all(NULL);
  
index a78bfe85ff259d9b89ace1a07cbf8e44ee62725e..2df8f0481bfbe4de323e21e1cfc9c020a89c269f 100644 (file)
@@ -21,7 +21,7 @@
  #endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
 --- a/arch/mips/mm/c-r4k.c
 +++ b/arch/mips/mm/c-r4k.c
-@@ -592,7 +592,7 @@ static inline void local_r4k_flush_cache
+@@ -600,7 +600,7 @@ static inline void local_r4k_flush_cache
                 */
                map_coherent = (cpu_has_dc_aliases &&
                                page_mapped(page) && !Page_dcache_dirty(page));
@@ -30,7 +30,7 @@
                        vaddr = kmap_coherent(page, addr);
                else
                        vaddr = kmap_atomic(page);
-@@ -617,7 +617,7 @@ static inline void local_r4k_flush_cache
+@@ -625,7 +625,7 @@ static inline void local_r4k_flush_cache
        }
  
        if (vaddr) {
index 4154fd3bb4a8206644cb0bdfbca96bdc75844577..fa7732b1a4fec2edca80cbd756fdbf93f05ff680 100644 (file)
@@ -33,7 +33,7 @@ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
 
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -2702,6 +2702,33 @@ config BOOT_RAW
+@@ -2703,6 +2703,33 @@ config BOOT_RAW
  
  
  
index 9f61050088aa5cdb36776d634f5f90384f83c59a..c974484b9818e48cb819c3741617e9acf57607b2 100644 (file)
@@ -28,9 +28,6 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  1 file changed, 10 deletions(-)
  delete mode 100644 arch/mips/include/asm/mach-bcm63xx/dma-coherence.h
 
-diff --git a/arch/mips/include/asm/mach-bcm63xx/dma-coherence.h b/arch/mips/include/asm/mach-bcm63xx/dma-coherence.h
-deleted file mode 100644
-index 11d3b57..0000000
 --- a/arch/mips/include/asm/mach-bcm63xx/dma-coherence.h
 +++ /dev/null
 @@ -1,10 +0,0 @@
@@ -44,6 +41,3 @@ index 11d3b57..0000000
 -#include <asm/mach-generic/dma-coherence.h>
 -
 -#endif /* __ASM_MACH_BCM63XX_DMA_COHERENCE_H */
--- 
-2.1.4
-
index 7b8b727803fb71ebc066016c95cca4f4c7f7d067..f4e0fbf4c195c1fc3825c6beac275fc8c1e4db7e 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -225,6 +225,46 @@ static struct board_info __initdata board_dsl_2751b_d1 = {
+@@ -225,6 +225,46 @@ static struct board_info __initdata boar
                .num_board_fixups               = ARRAY_SIZE(dsl2751b_e1_fixups),
        },
  };
@@ -47,7 +47,7 @@
  #endif /* CONFIG_BCM63XX_CPU_6318 */
  
  /*
-@@ -2352,6 +2392,7 @@ static const struct board_info __initconst *bcm963xx_boards[] = {
+@@ -2352,6 +2392,7 @@ static const struct board_info __initcon
        &board_96318ref,
        &board_96318ref_p300,
        &board_dsl_2751b_d1,
@@ -55,7 +55,7 @@
  #endif
  #ifdef CONFIG_BCM63XX_CPU_6328
        &board_96328avng,
-@@ -2449,6 +2490,7 @@ static struct of_device_id const bcm963xx_boards_dt[] = {
+@@ -2449,6 +2490,7 @@ static struct of_device_id const bcm963x
        { .compatible = "brcm,bcm96318ref", .data = &board_96318ref, },
        { .compatible = "brcm,bcm96318ref_p300", .data = &board_96318ref_p300, },
        { .compatible = "d-link,dsl-275xb-d", .data = &board_dsl_2751b_d1, },
index 199cd0135ec9d054fb9a9a96ebb9d0b7333576e2..f7543cca73b456c581c50ae7dc89fba30e353298 100644 (file)
@@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -1570,6 +1570,7 @@ config CPU_CAVIUM_OCTEON
+@@ -1571,6 +1571,7 @@ config CPU_CAVIUM_OCTEON
        select CPU_SUPPORTS_HUGEPAGES
        select USB_EHCI_BIG_ENDIAN_MMIO
        select MIPS_L1_CACHE_SHIFT_7
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        help
          The Cavium Octeon processor is a highly integrated chip containing
          many ethernet hardware widgets for networking tasks. The processor
-@@ -1865,6 +1866,9 @@ config MIPS_MALTA_PM
+@@ -1866,6 +1867,9 @@ config MIPS_MALTA_PM
        bool
        default y
  
index 54f7eb8d1b3ae24227589b0407c8f67760a37cec..49f2ded56cc33187884066d36d779e923c20a9ce 100644 (file)
@@ -18,7 +18,7 @@ Acked-by: Rob Landley <rob@landley.net>
  config CEVT_BCM1480
        bool
  
-@@ -2675,6 +2672,18 @@ config USE_OF
+@@ -2676,6 +2673,18 @@ config USE_OF
  config BUILTIN_DTB
        bool
  
index e07135b07593d9fd395cc9e0f1aae1a8e1975439..3288d19d8e66d19453c853c80fd53e18d75c76a1 100644 (file)
@@ -26,7 +26,7 @@ v2: incorporated changes suggested by Jonas Gorski
 
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -2667,6 +2667,20 @@ config MIPS_O32_FP64_SUPPORT
+@@ -2668,6 +2668,20 @@ config MIPS_O32_FP64_SUPPORT
  
          If unsure, say N.
  
index ec226a9c2ad982b2728e07a89b9ea139b737466b..e44740d6f731a6631cc7adcb1ee03cbc05971af5 100644 (file)
@@ -75,7 +75,7 @@
                uart->tx_loadsz         = up->tx_loadsz;
 --- a/drivers/tty/serial/serial_core.c
 +++ b/drivers/tty/serial/serial_core.c
-@@ -2176,6 +2176,7 @@ uart_report_port(struct uart_driver *drv
+@@ -2177,6 +2177,7 @@ uart_report_port(struct uart_driver *drv
                snprintf(address, sizeof(address),
                         "I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
                break;
@@ -83,7 +83,7 @@
        case UPIO_MEM:
        case UPIO_MEM32:
        case UPIO_MEM32BE:
-@@ -2823,6 +2824,7 @@ int uart_match_port(struct uart_port *po
+@@ -2824,6 +2825,7 @@ int uart_match_port(struct uart_port *po
        case UPIO_HUB6:
                return (port1->iobase == port2->iobase) &&
                       (port1->hub6   == port2->hub6);
index 33058fa0c06fa32aa67f191964b370566957f4ce..c93adeb862b63e9c4db411dad90b08e5d73f82c4 100644 (file)
@@ -28,8 +28,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
  include/linux/mfd/axp20x.h | 86 ++++++++++++++++++++++++++++++++++++++++
  2 files changed, 184 insertions(+)
 
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index d18029b..cfbb7d7 100644
 --- a/drivers/mfd/axp20x.c
 +++ b/drivers/mfd/axp20x.c
 @@ -32,6 +32,7 @@
@@ -40,7 +38,7 @@ index d18029b..cfbb7d7 100644
        "AXP288",
  };
  
-@@ -54,6 +55,25 @@ static const struct regmap_access_table axp20x_volatile_table = {
+@@ -54,6 +55,25 @@ static const struct regmap_access_table
        .n_yes_ranges   = ARRAY_SIZE(axp20x_volatile_ranges),
  };
  
@@ -66,7 +64,7 @@ index d18029b..cfbb7d7 100644
  static const struct regmap_range axp288_writeable_ranges[] = {
        regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ6_STATE),
        regmap_reg_range(AXP20X_DCDC_MODE, AXP288_FG_TUNE5),
-@@ -87,6 +107,20 @@ static struct resource axp20x_pek_resources[] = {
+@@ -87,6 +107,20 @@ static struct resource axp20x_pek_resour
        },
  };
  
@@ -87,7 +85,7 @@ index d18029b..cfbb7d7 100644
  static struct resource axp288_fuel_gauge_resources[] = {
        {
                .start = AXP288_IRQ_QWBTU,
-@@ -129,6 +163,15 @@ static const struct regmap_config axp20x_regmap_config = {
+@@ -129,6 +163,15 @@ static const struct regmap_config axp20x
        .cache_type     = REGCACHE_RBTREE,
  };
  
@@ -103,7 +101,7 @@ index d18029b..cfbb7d7 100644
  static const struct regmap_config axp288_regmap_config = {
        .reg_bits       = 8,
        .val_bits       = 8,
-@@ -181,6 +224,34 @@ static const struct regmap_irq axp20x_regmap_irqs[] = {
+@@ -181,6 +224,34 @@ static const struct regmap_irq axp20x_re
        INIT_REGMAP_IRQ(AXP20X, GPIO0_INPUT,            4, 0),
  };
  
@@ -138,7 +136,7 @@ index d18029b..cfbb7d7 100644
  /* some IRQs are compatible with axp20x models */
  static const struct regmap_irq axp288_regmap_irqs[] = {
        INIT_REGMAP_IRQ(AXP288, VBUS_FALL,              0, 2),
-@@ -224,6 +295,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = {
+@@ -224,6 +295,7 @@ static const struct regmap_irq axp288_re
  static const struct of_device_id axp20x_of_match[] = {
        { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID },
        { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID },
@@ -146,7 +144,7 @@ index d18029b..cfbb7d7 100644
        { },
  };
  MODULE_DEVICE_TABLE(of, axp20x_of_match);
-@@ -258,6 +330,18 @@ static const struct regmap_irq_chip axp20x_regmap_irq_chip = {
+@@ -258,6 +330,18 @@ static const struct regmap_irq_chip axp2
  
  };
  
@@ -165,7 +163,7 @@ index d18029b..cfbb7d7 100644
  static const struct regmap_irq_chip axp288_regmap_irq_chip = {
        .name                   = "axp288_irq_chip",
        .status_base            = AXP20X_IRQ1_STATE,
-@@ -281,6 +365,14 @@ static struct mfd_cell axp20x_cells[] = {
+@@ -281,6 +365,14 @@ static struct mfd_cell axp20x_cells[] =
        },
  };
  
@@ -180,7 +178,7 @@ index d18029b..cfbb7d7 100644
  static struct resource axp288_adc_resources[] = {
        {
                .name  = "GPADC",
-@@ -426,6 +518,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev)
+@@ -426,6 +518,12 @@ static int axp20x_match_device(struct ax
                axp20x->regmap_cfg = &axp20x_regmap_config;
                axp20x->regmap_irq_chip = &axp20x_regmap_irq_chip;
                break;
@@ -193,8 +191,6 @@ index d18029b..cfbb7d7 100644
        case AXP288_ID:
                axp20x->cells = axp288_cells;
                axp20x->nr_cells = ARRAY_SIZE(axp288_cells);
-diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
-index dfabd6d..95568eb 100644
 --- a/include/linux/mfd/axp20x.h
 +++ b/include/linux/mfd/axp20x.h
 @@ -14,6 +14,7 @@
index b49c9693628d8f351e98e1db2b8735e1c61075ea..21fe2ec3703c41813bf9009c2c8c10de32d9d8c9 100644 (file)
@@ -16,8 +16,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
  drivers/regulator/axp20x-regulator.c | 143 +++++++++++++++++++++++------------
  1 file changed, 94 insertions(+), 49 deletions(-)
 
-diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
-index e4331f5..50ae0b5 100644
 --- a/drivers/regulator/axp20x-regulator.c
 +++ b/drivers/regulator/axp20x-regulator.c
 @@ -32,15 +32,15 @@
@@ -97,7 +95,7 @@ index e4331f5..50ae0b5 100644
                .n_voltages     = ARRAY_SIZE(_table),                           \
                .owner          = THIS_MODULE,                                  \
                .vsel_reg       = (_vreg),                                      \
-@@ -136,37 +136,57 @@ static struct regulator_ops axp20x_ops = {
+@@ -136,37 +136,57 @@ static struct regulator_ops axp20x_ops =
  };
  
  static const struct regulator_desc axp20x_regulators[] = {
@@ -135,7 +133,10 @@ index e4331f5..50ae0b5 100644
  {
        struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
 +      u32 min, max, def, step;
-+
+-      if (dcdcfreq < 750) {
+-              dcdcfreq = 750;
+-              dev_warn(&pdev->dev, "DCDC frequency too low. Set to 750kHz\n");
 +      switch (axp20x->variant) {
 +      case AXP202_ID:
 +      case AXP209_ID:
@@ -148,35 +149,32 @@ index e4331f5..50ae0b5 100644
 +              dev_err(&pdev->dev,
 +                      "Setting DCDC frequency for unsupported AXP variant\n");
 +              return -EINVAL;
-+      }
-+
+       }
+-      if (dcdcfreq > 1875) {
+-              dcdcfreq = 1875;
+-              dev_warn(&pdev->dev, "DCDC frequency too high. Set to 1875kHz\n");
 +      if (dcdcfreq == 0)
 +              dcdcfreq = def;
--      if (dcdcfreq < 750) {
--              dcdcfreq = 750;
--              dev_warn(&pdev->dev, "DCDC frequency too low. Set to 750kHz\n");
++
 +      if (dcdcfreq < min) {
 +              dcdcfreq = min;
 +              dev_warn(&pdev->dev, "DCDC frequency too low. Set to %ukHz\n",
 +                       min);
        }
  
--      if (dcdcfreq > 1875) {
--              dcdcfreq = 1875;
--              dev_warn(&pdev->dev, "DCDC frequency too high. Set to 1875kHz\n");
+-      dcdcfreq = (dcdcfreq - 750) / 75;
 +      if (dcdcfreq > max) {
 +              dcdcfreq = max;
 +              dev_warn(&pdev->dev, "DCDC frequency too high. Set to %ukHz\n",
 +                       max);
-       }
--      dcdcfreq = (dcdcfreq - 750) / 75;
++      }
++
 +      dcdcfreq = (dcdcfreq - min) / step;
  
        return regmap_update_bits(axp20x->regmap, AXP20X_DCDC_FREQ,
                                  AXP20X_FREQ_DCDC_MASK, dcdcfreq);
-@@ -176,7 +196,7 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
+@@ -176,7 +196,7 @@ static int axp20x_regulator_parse_dt(str
  {
        struct device_node *np, *regulators;
        int ret;
@@ -185,7 +183,7 @@ index e4331f5..50ae0b5 100644
  
        np = of_node_get(pdev->dev.parent->of_node);
        if (!np)
-@@ -186,7 +206,6 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
+@@ -186,7 +206,6 @@ static int axp20x_regulator_parse_dt(str
        if (!regulators) {
                dev_warn(&pdev->dev, "regulators node not found\n");
        } else {
@@ -193,7 +191,7 @@ index e4331f5..50ae0b5 100644
                of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq);
                ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
                if (ret < 0) {
-@@ -202,15 +221,27 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
+@@ -202,15 +221,27 @@ static int axp20x_regulator_parse_dt(str
  
  static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 workmode)
  {
@@ -202,7 +200,6 @@ index e4331f5..50ae0b5 100644
 +      unsigned int mask;
  
 -      if ((id != AXP20X_DCDC2) && (id != AXP20X_DCDC3))
--              return -EINVAL;
 +      switch (axp20x->variant) {
 +      case AXP202_ID:
 +      case AXP209_ID:
@@ -212,22 +209,24 @@ index e4331f5..50ae0b5 100644
 +              mask = AXP20X_WORKMODE_DCDC2_MASK;
 +              if (id == AXP20X_DCDC3)
 +                      mask = AXP20X_WORKMODE_DCDC3_MASK;
--      if (id == AXP20X_DCDC3)
--              mask = AXP20X_WORKMODE_DCDC3_MASK;
++
 +              workmode <<= ffs(mask) - 1;
 +              break;
--      workmode <<= ffs(mask) - 1;
++
 +      default:
 +              /* should not happen */
 +              WARN_ON(1);
-+              return -EINVAL;
+               return -EINVAL;
+-
+-      if (id == AXP20X_DCDC3)
+-              mask = AXP20X_WORKMODE_DCDC3_MASK;
+-
+-      workmode <<= ffs(mask) - 1;
 +      }
  
        return regmap_update_bits(rdev->regmap, AXP20X_DCDC_MODE, mask, workmode);
  }
-@@ -219,22 +250,36 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
+@@ -219,22 +250,36 @@ static int axp20x_regulator_probe(struct
  {
        struct regulator_dev *rdev;
        struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
@@ -268,7 +267,7 @@ index e4331f5..50ae0b5 100644
  
                        return PTR_ERR(rdev);
                }
-@@ -245,7 +290,7 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
+@@ -245,7 +290,7 @@ static int axp20x_regulator_probe(struct
                if (!ret) {
                        if (axp20x_set_dcdc_workmode(rdev, i, workmode))
                                dev_err(&pdev->dev, "Failed to set workmode on %s\n",
index b2fdb65b34c2564d02e8258f108f110d5e0b131d..cc5bc4f0e482af18296cb0f279832d5de71f7f0d 100644 (file)
@@ -19,8 +19,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
  drivers/regulator/axp20x-regulator.c | 96 ++++++++++++++++++++++++++++++++++++
  1 file changed, 96 insertions(+)
 
-diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
-index 50ae0b5..6468291 100644
 --- a/drivers/regulator/axp20x-regulator.c
 +++ b/drivers/regulator/axp20x-regulator.c
 @@ -27,8 +27,12 @@
@@ -63,7 +61,7 @@ index 50ae0b5..6468291 100644
  #define AXP_DESC_FIXED(_family, _id, _match, _supply, _volt)                  \
        [_family##_##_id] = {                                                   \
                .name           = #_id,                                         \
-@@ -135,6 +159,14 @@ static struct regulator_ops axp20x_ops = {
+@@ -135,6 +159,14 @@ static struct regulator_ops axp20x_ops =
        .is_enabled             = regulator_is_enabled_regmap,
  };
  
@@ -78,7 +76,7 @@ index 50ae0b5..6468291 100644
  static const struct regulator_desc axp20x_regulators[] = {
        AXP_DESC(AXP20X, DCDC2, "dcdc2", "vin2", 700, 2275, 25,
                 AXP20X_DCDC2_V_OUT, 0x3f, AXP20X_PWR_OUT_CTRL, 0x10),
-@@ -152,6 +184,52 @@ static const struct regulator_desc axp20x_regulators[] = {
+@@ -152,6 +184,52 @@ static const struct regulator_desc axp20
                    AXP20X_IO_ENABLED, AXP20X_IO_DISABLED),
  };
  
@@ -131,7 +129,7 @@ index 50ae0b5..6468291 100644
  static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
  {
        struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
-@@ -165,6 +243,12 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
+@@ -165,6 +243,12 @@ static int axp20x_set_dcdc_freq(struct p
                def = 1500;
                step = 75;
                break;
@@ -144,7 +142,7 @@ index 50ae0b5..6468291 100644
        default:
                dev_err(&pdev->dev,
                        "Setting DCDC frequency for unsupported AXP variant\n");
-@@ -237,6 +321,14 @@ static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 work
+@@ -237,6 +321,14 @@ static int axp20x_set_dcdc_workmode(stru
                workmode <<= ffs(mask) - 1;
                break;
  
@@ -159,7 +157,7 @@ index 50ae0b5..6468291 100644
        default:
                /* should not happen */
                WARN_ON(1);
-@@ -265,6 +357,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
+@@ -265,6 +357,10 @@ static int axp20x_regulator_probe(struct
                regulators = axp20x_regulators;
                nregulators = AXP20X_REG_ID_MAX;
                break;
index eba960e0e283b35aa39e6fd3824647789c4dd681..a4585799b6e22cb5e2fba4e56b327d1108d29114 100644 (file)
@@ -26,11 +26,9 @@ Changes in v3:
  include/linux/mfd/axp20x.h | 6 ++++++
  2 files changed, 13 insertions(+), 1 deletion(-)
 
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index b369cfc..8bd3283 100644
 --- a/drivers/mfd/axp20x.c
 +++ b/drivers/mfd/axp20x.c
-@@ -61,10 +61,16 @@ static const struct regmap_access_table axp152_volatile_table = {
+@@ -39,10 +39,16 @@ static const char * const axp20x_model_n
  static const struct regmap_range axp20x_writeable_ranges[] = {
        regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE),
        regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES),
@@ -47,7 +45,7 @@ index b369cfc..8bd3283 100644
  };
  
  static const struct regmap_access_table axp20x_writeable_table = {
-@@ -195,7 +201,7 @@ static const struct regmap_config axp20x_regmap_config = {
+@@ -159,7 +165,7 @@ static const struct regmap_config axp20x
        .val_bits       = 8,
        .wr_table       = &axp20x_writeable_table,
        .volatile_table = &axp20x_volatile_table,
@@ -56,11 +54,9 @@ index b369cfc..8bd3283 100644
        .cache_type     = REGCACHE_RBTREE,
  };
  
-diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
-index 52203d5..cc8ad1e 100644
 --- a/include/linux/mfd/axp20x.h
 +++ b/include/linux/mfd/axp20x.h
-@@ -190,6 +190,12 @@ enum {
+@@ -151,6 +151,12 @@ enum {
  #define AXP20X_CC_CTRL                        0xb8
  #define AXP20X_FG_RES                 0xb9
  
index 0aa420c958380b998b95754d49b8ff36a1361911..f0c90552764063f2b0b14ee4ff9ca8b9e2e034c3 100644 (file)
@@ -13,11 +13,9 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
  drivers/mfd/axp20x.c | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index cfbb7d7..6df9155 100644
 --- a/drivers/mfd/axp20x.c
 +++ b/drivers/mfd/axp20x.c
-@@ -370,6 +370,8 @@ static struct mfd_cell axp22x_cells[] = {
+@@ -376,6 +376,8 @@ static struct mfd_cell axp22x_cells[] =
                .name                   = "axp20x-pek",
                .num_resources          = ARRAY_SIZE(axp22x_pek_resources),
                .resources              = axp22x_pek_resources,
index da3867d0a85586ffa98f54173bbd95940f78d5ba..a653f94e4ce5142c70730eb10ccb3f19842cf513 100644 (file)
@@ -14,8 +14,6 @@ Signed-off-by: Lee Jones <lee.jones@linaro.org>
  include/linux/mfd/axp20x.h | 61 +++++++++++++++++++++++++++++++++-
  2 files changed, 143 insertions(+), 1 deletion(-)
 
-diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
-index 8c2c3c4..b369cfc 100644
 --- a/drivers/mfd/axp20x.c
 +++ b/drivers/mfd/axp20x.c
 @@ -30,12 +30,34 @@
@@ -53,7 +51,7 @@ index 8c2c3c4..b369cfc 100644
  static const struct regmap_range axp20x_writeable_ranges[] = {
        regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE),
        regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES),
-@@ -93,6 +115,11 @@ static const struct regmap_access_table axp288_volatile_table = {
+@@ -99,6 +121,11 @@ static const struct regmap_access_table
        .n_yes_ranges   = ARRAY_SIZE(axp288_volatile_ranges),
  };
  
@@ -65,7 +63,7 @@ index 8c2c3c4..b369cfc 100644
  static struct resource axp20x_pek_resources[] = {
        {
                .name   = "PEK_DBR",
-@@ -154,6 +181,15 @@ static struct resource axp288_fuel_gauge_resources[] = {
+@@ -160,6 +187,15 @@ static struct resource axp288_fuel_gauge
        },
  };
  
@@ -81,7 +79,7 @@ index 8c2c3c4..b369cfc 100644
  static const struct regmap_config axp20x_regmap_config = {
        .reg_bits       = 8,
        .val_bits       = 8,
-@@ -184,6 +220,26 @@ static const struct regmap_config axp288_regmap_config = {
+@@ -190,6 +226,26 @@ static const struct regmap_config axp288
  #define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask)                  \
        [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) }
  
@@ -108,7 +106,7 @@ index 8c2c3c4..b369cfc 100644
  static const struct regmap_irq axp20x_regmap_irqs[] = {
        INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V,            0, 7),
        INIT_REGMAP_IRQ(AXP20X, ACIN_PLUGIN,            0, 6),
-@@ -293,6 +349,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = {
+@@ -299,6 +355,7 @@ static const struct regmap_irq axp288_re
  };
  
  static const struct of_device_id axp20x_of_match[] = {
@@ -116,7 +114,7 @@ index 8c2c3c4..b369cfc 100644
        { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID },
        { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID },
        { .compatible = "x-powers,axp221", .data = (void *) AXP221_ID },
-@@ -317,6 +374,18 @@ static const struct acpi_device_id axp20x_acpi_match[] = {
+@@ -323,6 +380,18 @@ static const struct acpi_device_id axp20
  };
  MODULE_DEVICE_TABLE(acpi, axp20x_acpi_match);
  
@@ -135,7 +133,7 @@ index 8c2c3c4..b369cfc 100644
  static const struct regmap_irq_chip axp20x_regmap_irq_chip = {
        .name                   = "axp20x_irq_chip",
        .status_base            = AXP20X_IRQ1_STATE,
-@@ -375,6 +444,14 @@ static struct mfd_cell axp22x_cells[] = {
+@@ -381,6 +450,14 @@ static struct mfd_cell axp22x_cells[] =
        },
  };
  
@@ -150,7 +148,7 @@ index 8c2c3c4..b369cfc 100644
  static struct resource axp288_adc_resources[] = {
        {
                .name  = "GPADC",
-@@ -513,6 +590,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev)
+@@ -519,6 +596,12 @@ static int axp20x_match_device(struct ax
        }
  
        switch (axp20x->variant) {
@@ -163,8 +161,6 @@ index 8c2c3c4..b369cfc 100644
        case AXP202_ID:
        case AXP209_ID:
                axp20x->nr_cells = ARRAY_SIZE(axp20x_cells);
-diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
-index c2aa853..52203d5 100644
 --- a/include/linux/mfd/axp20x.h
 +++ b/include/linux/mfd/axp20x.h
 @@ -12,7 +12,8 @@
@@ -236,7 +232,7 @@ index c2aa853..52203d5 100644
  #define AXP20X_GPIO0_CTRL             0x90
  #define AXP20X_LDO5_V_OUT             0x91
  #define AXP20X_GPIO1_CTRL             0x92
-@@ -218,6 +257,26 @@ enum {
+@@ -224,6 +263,26 @@ enum {
  
  /* IRQs */
  enum {
index 4f22ce139503e775e3fab3324ffc6e12d63004a5..f1af8233e377383e19c78f670e617a53768480a2 100644 (file)
@@ -15,11 +15,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/nand_base.c | 91 +++++++++++++++++++++++++++-----------------
  1 file changed, 56 insertions(+), 35 deletions(-)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index c2e1232..f580ed1 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -3892,42 +3892,15 @@ static bool nand_ecc_strength_good(struct mtd_info *mtd)
+@@ -3892,42 +3892,15 @@ static bool nand_ecc_strength_good(struc
        return corr >= ds_corr && ecc->strength >= chip->ecc_strength_ds;
  }
  
@@ -42,7 +40,7 @@ index c2e1232..f580ed1 100644
 -      struct nand_chip *chip = mtd->priv;
 -      struct nand_ecc_ctrl *ecc = &chip->ecc;
 -      struct nand_buffers *nbuf;
--
 -      /* New bad blocks should be marked in OOB, flash-based BBT, or both */
 -      BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
 -                      !(chip->bbt_options & NAND_BBT_USE_FLASH));
@@ -55,7 +53,7 @@ index c2e1232..f580ed1 100644
 -              nbuf->ecccalc = (uint8_t *)(nbuf + 1);
 -              nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
 -              nbuf->databuf = nbuf->ecccode + mtd->oobsize;
+-
 -              chip->buffers = nbuf;
 -      } else {
 -              if (!chip->buffers)
index 88e313dbb5e1fa73a457c9748ca1f549dd740238..d4eaeec118bc40d2eff19642163d18856c4bef03 100644 (file)
@@ -27,8 +27,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  include/linux/mtd/nand.h     |  38 +++
  6 files changed, 635 insertions(+), 141 deletions(-)
 
-diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
-index 5897d8d..8242470 100644
 --- a/drivers/mtd/nand/Kconfig
 +++ b/drivers/mtd/nand/Kconfig
 @@ -22,6 +22,10 @@ menuconfig MTD_NAND
@@ -42,22 +40,18 @@ index 5897d8d..8242470 100644
  config MTD_NAND_BCH
        tristate
        select BCH
-diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
-index 582bbd05..fcbe032 100644
 --- a/drivers/mtd/nand/Makefile
 +++ b/drivers/mtd/nand/Makefile
-@@ -53,4 +53,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) += bcm47xxnflash/
+@@ -53,4 +53,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) +=
  obj-$(CONFIG_MTD_NAND_SUNXI)          += sunxi_nand.o
  obj-$(CONFIG_MTD_NAND_HISI504)                += hisi504_nand.o
  
 +obj-$(CONFIG_MTD_OF_NAND_PARTS)               += ofnandpart.o
 +
  nand-objs := nand_base.o nand_bbt.o nand_timings.o
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index f580ed1..a30b67f 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -1134,26 +1134,26 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
+@@ -1134,26 +1134,26 @@ static int nand_read_page_raw_syndrome(s
                                       struct nand_chip *chip, uint8_t *buf,
                                       int oob_required, int page)
  {
@@ -93,7 +87,7 @@ index f580ed1..a30b67f 100644
                }
        }
  
-@@ -1175,30 +1175,31 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
+@@ -1175,30 +1175,31 @@ static int nand_read_page_raw_syndrome(s
  static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
                                uint8_t *buf, int oob_required, int page)
  {
@@ -134,7 +128,7 @@ index f580ed1..a30b67f 100644
                if (stat < 0) {
                        mtd->ecc_stats.failed++;
                } else {
-@@ -1223,7 +1224,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1223,7 +1224,7 @@ static int nand_read_subpage(struct mtd_
                        int page)
  {
        int start_step, end_step, num_steps;
@@ -143,7 +137,7 @@ index f580ed1..a30b67f 100644
        uint8_t *p;
        int data_col_addr, i, gaps = 0;
        int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
-@@ -1232,16 +1233,16 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1232,16 +1233,16 @@ static int nand_read_subpage(struct mtd_
        unsigned int max_bitflips = 0;
  
        /* Column address within the page aligned to ECC size (256bytes) */
@@ -166,7 +160,7 @@ index f580ed1..a30b67f 100644
        /* If we read not a page aligned data */
        if (data_col_addr != 0)
                chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
-@@ -1250,8 +1251,9 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1250,8 +1251,9 @@ static int nand_read_subpage(struct mtd_
        chip->read_buf(mtd, p, datafrag_len);
  
        /* Calculate ECC */
@@ -178,7 +172,7 @@ index f580ed1..a30b67f 100644
  
        /*
         * The performance is faster if we position offsets according to
-@@ -1275,7 +1277,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1275,7 +1277,8 @@ static int nand_read_subpage(struct mtd_
                aligned_len = eccfrag_len;
                if (eccpos[index] & (busw - 1))
                        aligned_len++;
@@ -188,7 +182,7 @@ index f580ed1..a30b67f 100644
                        aligned_len++;
  
                chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
-@@ -1287,11 +1290,13 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1287,11 +1290,13 @@ static int nand_read_subpage(struct mtd_
                chip->buffers->ecccode[i] = chip->oob_poi[eccpos[i + index]];
  
        p = bufpoi + data_col_addr;
@@ -205,7 +199,7 @@ index f580ed1..a30b67f 100644
                if (stat < 0) {
                        mtd->ecc_stats.failed++;
                } else {
-@@ -1315,32 +1320,33 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1315,32 +1320,33 @@ static int nand_read_subpage(struct mtd_
  static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
                                uint8_t *buf, int oob_required, int page)
  {
@@ -248,7 +242,7 @@ index f580ed1..a30b67f 100644
                if (stat < 0) {
                        mtd->ecc_stats.failed++;
                } else {
-@@ -1368,12 +1374,12 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1368,12 +1374,12 @@ static int nand_read_page_hwecc(struct m
  static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
        struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
  {
@@ -265,7 +259,7 @@ index f580ed1..a30b67f 100644
        uint8_t *ecc_calc = chip->buffers->ecccalc;
        unsigned int max_bitflips = 0;
  
-@@ -1382,17 +1388,17 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1382,17 +1388,17 @@ static int nand_read_page_hwecc_oob_firs
        chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
        chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
  
@@ -287,7 +281,7 @@ index f580ed1..a30b67f 100644
                if (stat < 0) {
                        mtd->ecc_stats.failed++;
                } else {
-@@ -1417,9 +1423,9 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1417,9 +1423,9 @@ static int nand_read_page_hwecc_oob_firs
  static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
                                   uint8_t *buf, int oob_required, int page)
  {
@@ -300,7 +294,7 @@ index f580ed1..a30b67f 100644
        uint8_t *p = buf;
        uint8_t *oob = chip->oob_poi;
        unsigned int max_bitflips = 0;
-@@ -1427,17 +1433,17 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1427,17 +1433,17 @@ static int nand_read_page_syndrome(struc
        for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
                int stat;
  
@@ -324,7 +318,7 @@ index f580ed1..a30b67f 100644
  
                if (stat < 0) {
                        mtd->ecc_stats.failed++;
-@@ -1448,9 +1454,9 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1448,9 +1454,9 @@ static int nand_read_page_syndrome(struc
  
                oob += eccbytes;
  
@@ -337,7 +331,7 @@ index f580ed1..a30b67f 100644
                }
        }
  
-@@ -1480,7 +1486,7 @@ static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
+@@ -1480,7 +1486,7 @@ static uint8_t *nand_transfer_oob(struct
                return oob + len;
  
        case MTD_OPS_AUTO_OOB: {
@@ -346,7 +340,7 @@ index f580ed1..a30b67f 100644
                uint32_t boffs = 0, roffs = ops->ooboffs;
                size_t bytes = 0;
  
-@@ -1600,17 +1606,21 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1600,17 +1606,21 @@ read_retry:
                         * the read methods return max bitflips per ecc step.
                         */
                        if (unlikely(ops->mode == MTD_OPS_RAW))
@@ -376,7 +370,7 @@ index f580ed1..a30b67f 100644
                        if (ret < 0) {
                                if (use_bufpoi)
                                        /* Invalidate page cache */
-@@ -1746,6 +1756,39 @@ static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
+@@ -1746,6 +1756,39 @@ static int nand_read(struct mtd_info *mt
  }
  
  /**
@@ -416,7 +410,7 @@ index f580ed1..a30b67f 100644
   * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
   * @mtd: mtd info structure
   * @chip: nand chip info structure
-@@ -1770,13 +1813,14 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1770,13 +1813,14 @@ static int nand_read_oob_syndrome(struct
                                  int page)
  {
        int length = mtd->oobsize;
@@ -435,7 +429,7 @@ index f580ed1..a30b67f 100644
                if (sndrnd) {
                        pos = eccsize + i * (eccsize + chunk);
                        if (mtd->writesize > 512)
-@@ -1829,9 +1873,10 @@ static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1829,9 +1873,10 @@ static int nand_write_oob_std(struct mtd
  static int nand_write_oob_syndrome(struct mtd_info *mtd,
                                   struct nand_chip *chip, int page)
  {
@@ -449,7 +443,7 @@ index f580ed1..a30b67f 100644
        const uint8_t *bufpoi = chip->oob_poi;
  
        /*
-@@ -1839,7 +1884,7 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd,
+@@ -1839,7 +1884,7 @@ static int nand_write_oob_syndrome(struc
         * or
         * data-pad-ecc-pad-data-pad .... ecc-pad-oob
         */
@@ -458,7 +452,7 @@ index f580ed1..a30b67f 100644
                pos = steps * (eccsize + chunk);
                steps = 0;
        } else
-@@ -1903,7 +1948,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -1903,7 +1948,7 @@ static int nand_do_read_oob(struct mtd_i
        stats = mtd->ecc_stats;
  
        if (ops->mode == MTD_OPS_AUTO_OOB)
@@ -467,7 +461,7 @@ index f580ed1..a30b67f 100644
        else
                len = mtd->oobsize;
  
-@@ -1931,9 +1976,9 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -1931,9 +1976,9 @@ static int nand_do_read_oob(struct mtd_i
  
        while (1) {
                if (ops->mode == MTD_OPS_RAW)
@@ -479,7 +473,7 @@ index f580ed1..a30b67f 100644
  
                if (ret < 0)
                        break;
-@@ -2021,6 +2066,56 @@ static int nand_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2021,6 +2066,56 @@ out:
        return ret;
  }
  
@@ -536,7 +530,7 @@ index f580ed1..a30b67f 100644
  
  /**
   * nand_write_page_raw - [INTERN] raw page write function
-@@ -2054,26 +2149,26 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
+@@ -2054,26 +2149,26 @@ static int nand_write_page_raw_syndrome(
                                        struct nand_chip *chip,
                                        const uint8_t *buf, int oob_required)
  {
@@ -572,7 +566,7 @@ index f580ed1..a30b67f 100644
                }
        }
  
-@@ -2093,21 +2188,21 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
+@@ -2093,21 +2188,21 @@ static int nand_write_page_raw_syndrome(
  static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
                                  const uint8_t *buf, int oob_required)
  {
@@ -601,7 +595,7 @@ index f580ed1..a30b67f 100644
  }
  
  /**
-@@ -2120,20 +2215,20 @@ static int nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2120,20 +2215,20 @@ static int nand_write_page_swecc(struct
  static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
                                  const uint8_t *buf, int oob_required)
  {
@@ -629,7 +623,7 @@ index f580ed1..a30b67f 100644
                chip->oob_poi[eccpos[i]] = ecc_calc[i];
  
        chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
-@@ -2158,10 +2253,10 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2158,10 +2253,10 @@ static int nand_write_subpage_hwecc(stru
  {
        uint8_t *oob_buf  = chip->oob_poi;
        uint8_t *ecc_calc = chip->buffers->ecccalc;
@@ -644,7 +638,7 @@ index f580ed1..a30b67f 100644
        uint32_t start_step = offset / ecc_size;
        uint32_t end_step   = (offset + data_len - 1) / ecc_size;
        int oob_bytes       = mtd->oobsize / ecc_steps;
-@@ -2169,7 +2264,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2169,7 +2264,7 @@ static int nand_write_subpage_hwecc(stru
  
        for (step = 0; step < ecc_steps; step++) {
                /* configure controller for WRITE access */
@@ -653,7 +647,7 @@ index f580ed1..a30b67f 100644
  
                /* write data (untouched subpages already masked by 0xFF) */
                chip->write_buf(mtd, buf, ecc_size);
-@@ -2178,7 +2273,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2178,7 +2273,7 @@ static int nand_write_subpage_hwecc(stru
                if ((step < start_step) || (step > end_step))
                        memset(ecc_calc, 0xff, ecc_bytes);
                else
@@ -662,7 +656,7 @@ index f580ed1..a30b67f 100644
  
                /* mask OOB of un-touched subpages by padding 0xFF */
                /* if oob_required, preserve OOB metadata of written subpage */
-@@ -2193,7 +2288,7 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2193,7 +2288,7 @@ static int nand_write_subpage_hwecc(stru
        /* copy calculated ECC for whole page to chip->buffer->oob */
        /* this include masked-value(0xFF) for unwritten subpages */
        ecc_calc = chip->buffers->ecccalc;
@@ -671,7 +665,7 @@ index f580ed1..a30b67f 100644
                chip->oob_poi[eccpos[i]] = ecc_calc[i];
  
        /* write OOB buffer to NAND device */
-@@ -2217,29 +2312,29 @@ static int nand_write_page_syndrome(struct mtd_info *mtd,
+@@ -2217,29 +2312,29 @@ static int nand_write_page_syndrome(stru
                                    struct nand_chip *chip,
                                    const uint8_t *buf, int oob_required)
  {
@@ -712,7 +706,7 @@ index f580ed1..a30b67f 100644
                }
        }
  
-@@ -2270,7 +2365,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2270,7 +2365,7 @@ static int nand_write_page(struct mtd_in
        int status, subpage;
  
        if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
@@ -721,7 +715,7 @@ index f580ed1..a30b67f 100644
                subpage = offset || (data_len < mtd->writesize);
        else
                subpage = 0;
-@@ -2278,13 +2373,15 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2278,13 +2373,15 @@ static int nand_write_page(struct mtd_in
        chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
  
        if (unlikely(raw))
@@ -742,7 +736,7 @@ index f580ed1..a30b67f 100644
  
        if (status < 0)
                return status;
-@@ -2343,7 +2440,7 @@ static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len,
+@@ -2343,7 +2440,7 @@ static uint8_t *nand_fill_oob(struct mtd
                return oob + len;
  
        case MTD_OPS_AUTO_OOB: {
@@ -751,7 +745,7 @@ index f580ed1..a30b67f 100644
                uint32_t boffs = 0, woffs = ops->ooboffs;
                size_t bytes = 0;
  
-@@ -2539,6 +2636,46 @@ static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2539,6 +2636,46 @@ static int panic_nand_write(struct mtd_i
  }
  
  /**
@@ -798,7 +792,7 @@ index f580ed1..a30b67f 100644
   * nand_write - [MTD Interface] NAND write with ECC
   * @mtd: MTD device structure
   * @to: offset to write to
-@@ -2566,6 +2703,39 @@ static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2566,6 +2703,39 @@ static int nand_write(struct mtd_info *m
  }
  
  /**
@@ -838,7 +832,7 @@ index f580ed1..a30b67f 100644
   * nand_do_write_oob - [MTD Interface] NAND write out-of-band
   * @mtd: MTD device structure
   * @to: offset to write to
-@@ -2583,7 +2753,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -2583,7 +2753,7 @@ static int nand_do_write_oob(struct mtd_
                         __func__, (unsigned int)to, (int)ops->ooblen);
  
        if (ops->mode == MTD_OPS_AUTO_OOB)
@@ -847,7 +841,7 @@ index f580ed1..a30b67f 100644
        else
                len = mtd->oobsize;
  
-@@ -2637,9 +2807,11 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -2637,9 +2807,11 @@ static int nand_do_write_oob(struct mtd_
        nand_fill_oob(mtd, ops->oobbuf, ops->ooblen, ops);
  
        if (ops->mode == MTD_OPS_RAW)
@@ -861,7 +855,7 @@ index f580ed1..a30b67f 100644
  
        chip->select_chip(mtd, -1);
  
-@@ -2694,6 +2866,54 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -2694,6 +2866,54 @@ out:
  }
  
  /**
@@ -916,7 +910,7 @@ index f580ed1..a30b67f 100644
   * single_erase - [GENERIC] NAND standard block erase command function
   * @mtd: MTD device structure
   * @page: the page address of the block which will be erased
-@@ -2723,6 +2943,29 @@ static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
+@@ -2723,6 +2943,29 @@ static int nand_erase(struct mtd_info *m
  }
  
  /**
@@ -946,7 +940,7 @@ index f580ed1..a30b67f 100644
   * nand_erase_nand - [INTERN] erase block(s)
   * @mtd: MTD device structure
   * @instr: erase instruction
-@@ -2864,6 +3107,18 @@ static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
+@@ -2864,6 +3107,18 @@ static int nand_block_isbad(struct mtd_i
  }
  
  /**
@@ -965,7 +959,7 @@ index f580ed1..a30b67f 100644
   * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
   * @mtd: MTD device structure
   * @ofs: offset relative to mtd start
-@@ -2884,6 +3139,33 @@ static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
+@@ -2884,6 +3139,33 @@ static int nand_block_markbad(struct mtd
  }
  
  /**
@@ -999,7 +993,7 @@ index f580ed1..a30b67f 100644
   * nand_onfi_set_features- [REPLACEABLE] set features for ONFI nand
   * @mtd: MTD device structure
   * @chip: nand chip info structure
-@@ -4099,6 +4381,169 @@ static int nand_ecc_ctrl_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc)
+@@ -4099,6 +4381,169 @@ static int nand_ecc_ctrl_init(struct mtd
  }
  
  /**
@@ -1181,11 +1175,9 @@ index f580ed1..a30b67f 100644
        /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
        if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
                switch (ecc->steps) {
-diff --git a/drivers/mtd/nand/nand_bch.c b/drivers/mtd/nand/nand_bch.c
-index 3803e0b..b82b976 100644
 --- a/drivers/mtd/nand/nand_bch.c
 +++ b/drivers/mtd/nand/nand_bch.c
-@@ -53,14 +53,14 @@ int nand_bch_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf,
+@@ -53,14 +53,14 @@ int nand_bch_calculate_ecc(struct mtd_in
                           unsigned char *code)
  {
        const struct nand_chip *chip = mtd->priv;
@@ -1204,7 +1196,7 @@ index 3803e0b..b82b976 100644
                code[i] ^= nbc->eccmask[i];
  
        return 0;
-@@ -80,15 +80,15 @@ int nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf,
+@@ -80,15 +80,15 @@ int nand_bch_correct_data(struct mtd_inf
                          unsigned char *read_ecc, unsigned char *calc_ecc)
  {
        const struct nand_chip *chip = mtd->priv;
@@ -1224,11 +1216,9 @@ index 3803e0b..b82b976 100644
                                /* error is located in data, correct it */
                                buf[errloc[i] >> 3] ^= (1 << (errloc[i] & 7));
                        /* else error in ecc, no action needed */
-diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c
-index 97c4c02..f35c418 100644
 --- a/drivers/mtd/nand/nand_ecc.c
 +++ b/drivers/mtd/nand/nand_ecc.c
-@@ -424,7 +424,7 @@ int nand_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf,
+@@ -424,7 +424,7 @@ int nand_calculate_ecc(struct mtd_info *
                       unsigned char *code)
  {
        __nand_calculate_ecc(buf,
@@ -1237,7 +1227,7 @@ index 97c4c02..f35c418 100644
  
        return 0;
  }
-@@ -524,7 +524,7 @@ int nand_correct_data(struct mtd_info *mtd, unsigned char *buf,
+@@ -524,7 +524,7 @@ int nand_correct_data(struct mtd_info *m
                      unsigned char *read_ecc, unsigned char *calc_ecc)
  {
        return __nand_correct_data(buf, read_ecc, calc_ecc,
@@ -1246,8 +1236,6 @@ index 97c4c02..f35c418 100644
  }
  EXPORT_SYMBOL(nand_correct_data);
  
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 3d4ea7e..510e09b 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
 @@ -708,6 +708,7 @@ struct nand_chip {
index 135f50a5cbb954eb9d0ed6575215e226b5839d26..76f005126633d0fcdb8f9bca0d44bcbf0b06bd83 100644 (file)
@@ -17,9 +17,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2 files changed, 121 insertions(+)
  create mode 100644 drivers/mtd/nand/ofnandpart.c
 
-diff --git a/drivers/mtd/nand/ofnandpart.c b/drivers/mtd/nand/ofnandpart.c
-new file mode 100644
-index 0000000..293daee
 --- /dev/null
 +++ b/drivers/mtd/nand/ofnandpart.c
 @@ -0,0 +1,104 @@
@@ -127,11 +124,9 @@ index 0000000..293daee
 +MODULE_LICENSE("GPL");
 +MODULE_DESCRIPTION("Parser for NAND flash partitioning information in device tree");
 +MODULE_AUTHOR("Boris BREZILLON");
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 510e09b..5616f51 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
-@@ -1013,6 +1013,23 @@ static inline int jedec_feature(struct nand_chip *chip)
+@@ -1014,6 +1014,23 @@ static inline int jedec_feature(struct n
                : 0;
  }
  
index efab359d841b84a6d6a58bbdcba73e921686c18a..45b9679d662e599ce0ca300a53dedeed3b62cba5 100644 (file)
@@ -24,11 +24,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  include/linux/mtd/nand.h     |  21 ++++++
  2 files changed, 175 insertions(+)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index a30b67f..8a5d12e 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -1102,6 +1102,138 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+@@ -1102,6 +1102,138 @@ out:
  EXPORT_SYMBOL(nand_lock);
  
  /**
@@ -167,7 +165,7 @@ index a30b67f..8a5d12e 100644
   * nand_read_page_raw - [INTERN] read raw page data without ecc
   * @mtd: mtd info structure
   * @chip: nand chip info structure
-@@ -2539,6 +2671,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
+@@ -2539,6 +2671,7 @@ static int nand_do_write_ops(struct mtd_
                uint8_t *wbuf = buf;
                int use_bufpoi;
                int part_pagewr = (column || writelen < (mtd->writesize - 1));
@@ -175,7 +173,7 @@ index a30b67f..8a5d12e 100644
  
                if (part_pagewr)
                        use_bufpoi = 1;
-@@ -2574,6 +2707,14 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
+@@ -2574,6 +2707,14 @@ static int nand_do_write_ops(struct mtd_
                if (ret)
                        break;
  
@@ -190,7 +188,7 @@ index a30b67f..8a5d12e 100644
                writelen -= bytes;
                if (!writelen)
                        break;
-@@ -2979,6 +3120,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
+@@ -2979,6 +3120,7 @@ int nand_erase_nand(struct mtd_info *mtd
        int page, status, pages_per_block, ret, chipnr;
        struct nand_chip *chip = mtd->priv;
        loff_t len;
@@ -198,7 +196,7 @@ index a30b67f..8a5d12e 100644
  
        pr_debug("%s: start = 0x%012llx, len = %llu\n",
                        __func__, (unsigned long long)instr->addr,
-@@ -3051,6 +3193,18 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
+@@ -3051,6 +3193,18 @@ int nand_erase_nand(struct mtd_info *mtd
                        goto erase_exit;
                }
  
@@ -217,8 +215,6 @@ index a30b67f..8a5d12e 100644
                /* Increment page address and decrement length */
                len -= (1ULL << chip->phys_erase_shift);
                page += pages_per_block;
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 5616f51..4f7ca8d 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
 @@ -521,6 +521,24 @@ struct nand_ecc_ctrl {
index 7d1bdbd9aa5bbd27601ae0312d255437e241370a..173bd1eb49e365d49d7c158d68e3d79223769496 100644 (file)
@@ -34,11 +34,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  include/linux/mtd/nand.h     |  98 +++++++++++++++
  2 files changed, 321 insertions(+), 55 deletions(-)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 8a5d12e..577cb9e 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -1102,6 +1102,62 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+@@ -1102,6 +1102,62 @@ out:
  EXPORT_SYMBOL(nand_lock);
  
  /**
@@ -119,7 +117,7 @@ index 8a5d12e..577cb9e 100644
        return 0;
  }
  
-@@ -1270,28 +1331,40 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
+@@ -1270,28 +1331,40 @@ static int nand_read_page_raw_syndrome(s
        int eccbytes = chip->cur_ecc->bytes;
        uint8_t *oob = chip->oob_poi;
        int steps, size;
@@ -166,7 +164,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -1380,7 +1453,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1380,7 +1453,8 @@ static int nand_read_subpage(struct mtd_
                chip->cmdfunc(mtd, NAND_CMD_RNDOUT, data_col_addr, -1);
  
        p = bufpoi + data_col_addr;
@@ -176,7 +174,7 @@ index 8a5d12e..577cb9e 100644
  
        /* Calculate ECC */
        for (i = 0; i < eccfrag_len;
-@@ -1399,7 +1473,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1399,7 +1473,8 @@ static int nand_read_subpage(struct mtd_
        }
        if (gaps) {
                chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1);
@@ -186,7 +184,7 @@ index 8a5d12e..577cb9e 100644
        } else {
                /*
                 * Send the command to read the particular ECC bytes take care
-@@ -1415,7 +1490,8 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1415,7 +1490,8 @@ static int nand_read_subpage(struct mtd_
  
                chip->cmdfunc(mtd, NAND_CMD_RNDOUT,
                                        mtd->writesize + aligned_pos, -1);
@@ -196,7 +194,7 @@ index 8a5d12e..577cb9e 100644
        }
  
        for (i = 0; i < eccfrag_len; i++)
-@@ -1436,6 +1512,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1436,6 +1512,7 @@ static int nand_read_subpage(struct mtd_
                        max_bitflips = max_t(unsigned int, max_bitflips, stat);
                }
        }
@@ -204,7 +202,7 @@ index 8a5d12e..577cb9e 100644
        return max_bitflips;
  }
  
-@@ -1460,13 +1537,17 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1460,13 +1537,17 @@ static int nand_read_page_hwecc(struct m
        uint8_t *ecc_code = chip->buffers->ecccode;
        uint32_t *eccpos = chip->cur_ecc->layout->eccpos;
        unsigned int max_bitflips = 0;
@@ -224,7 +222,7 @@ index 8a5d12e..577cb9e 100644
  
        for (i = 0; i < chip->cur_ecc->total; i++)
                ecc_code[i] = chip->oob_poi[eccpos[i]];
-@@ -1486,6 +1567,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1486,6 +1567,7 @@ static int nand_read_page_hwecc(struct m
                        max_bitflips = max_t(unsigned int, max_bitflips, stat);
                }
        }
@@ -232,7 +230,7 @@ index 8a5d12e..577cb9e 100644
        return max_bitflips;
  }
  
-@@ -1514,11 +1596,14 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1514,11 +1596,14 @@ static int nand_read_page_hwecc_oob_firs
        uint32_t *eccpos = chip->cur_ecc->layout->eccpos;
        uint8_t *ecc_calc = chip->buffers->ecccalc;
        unsigned int max_bitflips = 0;
@@ -248,7 +246,7 @@ index 8a5d12e..577cb9e 100644
  
        for (i = 0; i < chip->cur_ecc->total; i++)
                ecc_code[i] = chip->oob_poi[eccpos[i]];
-@@ -1527,7 +1612,8 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1527,7 +1612,8 @@ static int nand_read_page_hwecc_oob_firs
                int stat;
  
                chip->cur_ecc->hwctl(mtd, NAND_ECC_READ);
@@ -258,7 +256,7 @@ index 8a5d12e..577cb9e 100644
                chip->cur_ecc->calculate(mtd, p, &ecc_calc[i]);
  
                stat = chip->cur_ecc->correct(mtd, p, &ecc_code[i], NULL);
-@@ -1538,6 +1624,7 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
+@@ -1538,6 +1624,7 @@ static int nand_read_page_hwecc_oob_firs
                        max_bitflips = max_t(unsigned int, max_bitflips, stat);
                }
        }
@@ -266,7 +264,7 @@ index 8a5d12e..577cb9e 100644
        return max_bitflips;
  }
  
-@@ -1561,20 +1648,27 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1561,20 +1648,27 @@ static int nand_read_page_syndrome(struc
        uint8_t *p = buf;
        uint8_t *oob = chip->oob_poi;
        unsigned int max_bitflips = 0;
@@ -297,7 +295,7 @@ index 8a5d12e..577cb9e 100644
                stat = chip->cur_ecc->correct(mtd, p, oob, NULL);
  
                if (stat < 0) {
-@@ -1587,29 +1681,36 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1587,29 +1681,36 @@ static int nand_read_page_syndrome(struc
                oob += eccbytes;
  
                if (chip->cur_ecc->postpad) {
@@ -339,7 +337,7 @@ index 8a5d12e..577cb9e 100644
        switch (ops->mode) {
  
        case MTD_OPS_PLACE_OOB:
-@@ -1737,6 +1838,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1737,6 +1838,7 @@ read_retry:
                         * Now read the page into the buffer.  Absent an error,
                         * the read methods return max bitflips per ecc step.
                         */
@@ -347,7 +345,7 @@ index 8a5d12e..577cb9e 100644
                        if (unlikely(ops->mode == MTD_OPS_RAW))
                                ret = chip->cur_ecc->read_page_raw(mtd, chip,
                                                                bufpoi,
-@@ -1753,6 +1855,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1753,6 +1855,8 @@ read_retry:
                                                               bufpoi,
                                                               oob_required,
                                                               page);
@@ -356,7 +354,7 @@ index 8a5d12e..577cb9e 100644
                        if (ret < 0) {
                                if (use_bufpoi)
                                        /* Invalidate page cache */
-@@ -1780,8 +1884,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
+@@ -1780,8 +1884,8 @@ read_retry:
                                int toread = min(oobreadlen, max_oobsize);
  
                                if (toread) {
@@ -367,7 +365,7 @@ index 8a5d12e..577cb9e 100644
                                        oobreadlen -= toread;
                                }
                        }
-@@ -1909,12 +2013,15 @@ static int nand_part_read(struct mtd_info *mtd, loff_t from, size_t len,
+@@ -1909,12 +2013,15 @@ static int nand_part_read(struct mtd_inf
        nand_get_device(part->master, FL_READING);
        if (part->ecc)
                chip->cur_ecc = part->ecc;
@@ -383,7 +381,7 @@ index 8a5d12e..577cb9e 100644
        chip->cur_ecc = &chip->ecc;
        nand_release_device(part->master);
        return ret;
-@@ -1930,7 +2037,9 @@ static int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1930,7 +2037,9 @@ static int nand_read_oob_std(struct mtd_
                             int page)
  {
        chip->cmdfunc(mtd, NAND_CMD_READOOB, 0, page);
@@ -394,7 +392,7 @@ index 8a5d12e..577cb9e 100644
        return 0;
  }
  
-@@ -1949,7 +2058,7 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1949,7 +2058,7 @@ static int nand_read_oob_syndrome(struct
                    chip->cur_ecc->postpad;
        int eccsize = chip->cur_ecc->size;
        uint8_t *bufpoi = chip->oob_poi;
@@ -403,7 +401,7 @@ index 8a5d12e..577cb9e 100644
  
        chip->cmdfunc(mtd, NAND_CMD_READ0, chip->cur_ecc->size, page);
        for (i = 0; i < chip->cur_ecc->steps; i++) {
-@@ -1962,12 +2071,17 @@ static int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1962,12 +2071,17 @@ static int nand_read_oob_syndrome(struct
                } else
                        sndrnd = 1;
                toread = min_t(int, length, chunk);
@@ -424,7 +422,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -1986,7 +2100,9 @@ static int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -1986,7 +2100,9 @@ static int nand_write_oob_std(struct mtd
        int length = mtd->oobsize;
  
        chip->cmdfunc(mtd, NAND_CMD_SEQIN, mtd->writesize, page);
@@ -435,7 +433,7 @@ index 8a5d12e..577cb9e 100644
        /* Send command to program the OOB data */
        chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
  
-@@ -2042,12 +2158,18 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd,
+@@ -2042,12 +2158,18 @@ static int nand_write_oob_syndrome(struc
                } else
                        sndcmd = 1;
                len = min_t(int, length, chunk);
@@ -457,7 +455,7 @@ index 8a5d12e..577cb9e 100644
  
        chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
        status = chip->waitfunc(mtd, chip);
-@@ -2116,7 +2238,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2116,7 +2238,7 @@ static int nand_do_read_oob(struct mtd_i
                        break;
  
                len = min(len, readlen);
@@ -466,7 +464,7 @@ index 8a5d12e..577cb9e 100644
  
                if (chip->options & NAND_NEED_READRDY) {
                        /* Apply delay or wait for ready/busy pin */
-@@ -2226,6 +2348,8 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2226,6 +2348,8 @@ static int nand_part_read_oob(struct mtd
        nand_get_device(part->master, FL_READING);
        if (part->ecc)
                chip->cur_ecc = part->ecc;
@@ -475,7 +473,7 @@ index 8a5d12e..577cb9e 100644
  
        switch (ops->mode) {
        case MTD_OPS_PLACE_OOB:
-@@ -2243,6 +2367,7 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2243,6 +2367,7 @@ static int nand_part_read_oob(struct mtd
                ret = nand_do_read_ops(part->master, from, ops);
  
  out:
@@ -483,7 +481,7 @@ index 8a5d12e..577cb9e 100644
        chip->cur_ecc = &chip->ecc;
        nand_release_device(part->master);
        return ret;
-@@ -2261,9 +2386,11 @@ static int nand_part_read_oob(struct mtd_info *mtd, loff_t from,
+@@ -2261,9 +2386,11 @@ out:
  static int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
                                const uint8_t *buf, int oob_required)
  {
@@ -498,7 +496,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -2285,28 +2412,39 @@ static int nand_write_page_raw_syndrome(struct mtd_info *mtd,
+@@ -2285,28 +2412,39 @@ static int nand_write_page_raw_syndrome(
        int eccbytes = chip->cur_ecc->bytes;
        uint8_t *oob = chip->oob_poi;
        int steps, size;
@@ -544,7 +542,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -2353,17 +2491,21 @@ static int nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2353,17 +2491,21 @@ static int nand_write_page_hwecc(struct
        uint8_t *ecc_calc = chip->buffers->ecccalc;
        const uint8_t *p = buf;
        uint32_t *eccpos = chip->cur_ecc->layout->eccpos;
@@ -568,7 +566,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -2399,7 +2541,9 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2399,7 +2541,9 @@ static int nand_write_subpage_hwecc(stru
                chip->cur_ecc->hwctl(mtd, NAND_ECC_WRITE);
  
                /* write data (untouched subpages already masked by 0xFF) */
@@ -579,7 +577,7 @@ index 8a5d12e..577cb9e 100644
  
                /* mask ECC of un-touched subpages by padding 0xFF */
                if ((step < start_step) || (step > end_step))
-@@ -2424,7 +2568,8 @@ static int nand_write_subpage_hwecc(struct mtd_info *mtd,
+@@ -2424,7 +2568,8 @@ static int nand_write_subpage_hwecc(stru
                chip->oob_poi[eccpos[i]] = ecc_calc[i];
  
        /* write OOB buffer to NAND device */
@@ -589,7 +587,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -2449,31 +2594,42 @@ static int nand_write_page_syndrome(struct mtd_info *mtd,
+@@ -2449,31 +2594,42 @@ static int nand_write_page_syndrome(stru
        int eccsteps = chip->cur_ecc->steps;
        const uint8_t *p = buf;
        uint8_t *oob = chip->oob_poi;
@@ -638,7 +636,7 @@ index 8a5d12e..577cb9e 100644
  
        return 0;
  }
-@@ -2504,6 +2660,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2504,6 +2660,7 @@ static int nand_write_page(struct mtd_in
  
        chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
  
@@ -646,7 +644,7 @@ index 8a5d12e..577cb9e 100644
        if (unlikely(raw))
                status = chip->cur_ecc->write_page_raw(mtd, chip, buf,
                                                       oob_required);
-@@ -2514,6 +2671,7 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -2514,6 +2671,7 @@ static int nand_write_page(struct mtd_in
        else
                status = chip->cur_ecc->write_page(mtd, chip, buf,
                                                   oob_required);
@@ -654,7 +652,7 @@ index 8a5d12e..577cb9e 100644
  
        if (status < 0)
                return status;
-@@ -2803,6 +2961,8 @@ static int panic_nand_part_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2803,6 +2961,8 @@ static int panic_nand_part_write(struct
        panic_nand_get_device(chip, part->master, FL_WRITING);
        if (part->ecc)
                chip->cur_ecc = part->ecc;
@@ -663,7 +661,7 @@ index 8a5d12e..577cb9e 100644
  
        ops.len = len;
        ops.datbuf = (uint8_t *)buf;
-@@ -2811,6 +2971,7 @@ static int panic_nand_part_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2811,6 +2971,7 @@ static int panic_nand_part_write(struct
  
        ret = nand_do_write_ops(part->master, to, &ops);
  
@@ -671,7 +669,7 @@ index 8a5d12e..577cb9e 100644
        chip->cur_ecc = &chip->ecc;
        *retlen = ops.retlen;
        return ret;
-@@ -2865,12 +3026,15 @@ static int nand_part_write(struct mtd_info *mtd, loff_t to, size_t len,
+@@ -2865,12 +3026,15 @@ static int nand_part_write(struct mtd_in
        nand_get_device(part->master, FL_WRITING);
        if (part->ecc)
                chip->cur_ecc = part->ecc;
@@ -687,7 +685,7 @@ index 8a5d12e..577cb9e 100644
        chip->cur_ecc = &chip->ecc;
        nand_release_device(part->master);
        return ret;
-@@ -3032,6 +3196,8 @@ static int nand_part_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -3032,6 +3196,8 @@ static int nand_part_write_oob(struct mt
        nand_get_device(part->master, FL_WRITING);
        if (part->ecc)
                chip->cur_ecc = part->ecc;
@@ -696,7 +694,7 @@ index 8a5d12e..577cb9e 100644
  
        switch (ops->mode) {
        case MTD_OPS_PLACE_OOB:
-@@ -3049,6 +3215,7 @@ static int nand_part_write_oob(struct mtd_info *mtd, loff_t to,
+@@ -3049,6 +3215,7 @@ static int nand_part_write_oob(struct mt
                ret = nand_do_write_ops(part->master, to, ops);
  
  out:
@@ -712,11 +710,9 @@ index 8a5d12e..577cb9e 100644
  
        /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
        if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 4f7ca8d..6cbd06a3 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
-@@ -539,6 +539,64 @@ void nand_page_set_status(struct mtd_info *mtd, int page,
+@@ -539,6 +539,64 @@ void nand_page_set_status(struct mtd_inf
  
  int nand_pst_create(struct mtd_info *mtd);
  
@@ -807,7 +803,7 @@ index 4f7ca8d..6cbd06a3 100644
        void (*release)(struct nand_part *part);
  };
  
-@@ -902,6 +965,41 @@ extern int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
+@@ -902,6 +965,41 @@ extern int nand_erase_nand(struct mtd_in
  extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
                        size_t *retlen, uint8_t *buf);
  
index f4c36ec56c3842ef7178f66d8a7f1348e5d70dc5..f5dfba0c1c22173edb8f8e1397bcc98c78f40d9f 100644 (file)
@@ -12,11 +12,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  include/linux/of_mtd.h |  6 ++++++
  2 files changed, 41 insertions(+)
 
-diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c
-index b7361ed..4e42c26 100644
 --- a/drivers/of/of_mtd.c
 +++ b/drivers/of/of_mtd.c
-@@ -84,6 +84,41 @@ int of_get_nand_ecc_strength(struct device_node *np)
+@@ -84,6 +84,41 @@ int of_get_nand_ecc_strength(struct devi
  EXPORT_SYMBOL_GPL(of_get_nand_ecc_strength);
  
  /**
@@ -58,8 +56,6 @@ index b7361ed..4e42c26 100644
   * of_get_nand_bus_width - Get nand bus witdh for given device_node
   * @np:       Pointer to the given device_node
   *
-diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h
-index e266caa..1059472 100644
 --- a/include/linux/of_mtd.h
 +++ b/include/linux/of_mtd.h
 @@ -15,6 +15,7 @@
@@ -70,15 +66,15 @@ index e266caa..1059472 100644
  int of_get_nand_bus_width(struct device_node *np);
  bool of_get_nand_on_flash_bbt(struct device_node *np);
  
-@@ -35,6 +36,11 @@ static inline int of_get_nand_ecc_strength(struct device_node *np)
+@@ -34,6 +35,11 @@ static inline int of_get_nand_ecc_streng
+ {
        return -ENOSYS;
  }
++
 +static inline int of_get_nand_rnd_mode(struct device_node *np)
 +{
 +      return -ENOSYS;
 +}
-+
  static inline int of_get_nand_bus_width(struct device_node *np)
  {
-       return -ENOSYS;
index ac8015607c6e3710ee85b5b754420058fca546c1..5a4917c15700fc0bbdfa479612c38dd0f57a3267 100644 (file)
@@ -13,11 +13,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  include/linux/mtd/nand.h     | 4 ++++
  2 files changed, 11 insertions(+)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 577cb9e..51642c6 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -4382,6 +4382,13 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4382,6 +4382,13 @@ ident_done:
        if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
                chip->cmdfunc = nand_command_lp;
  
@@ -31,8 +29,6 @@ index 577cb9e..51642c6 100644
        pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
                *maf_id, *dev_id);
  
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 6cbd06a3..5844d6f 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
 @@ -748,6 +748,9 @@ struct nand_chip {
index 4430a50822d21bad8e0cfa2de6d5f5f8a9708c35..c6554da68d8c30b0e49d7ee24432ecf263b1d88f 100644 (file)
@@ -15,8 +15,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  4 files changed, 164 insertions(+), 2 deletions(-)
  create mode 100644 drivers/mtd/nand/nand_hynix.c
 
-diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
-index fcbe032..07b7c8c 100644
 --- a/drivers/mtd/nand/Makefile
 +++ b/drivers/mtd/nand/Makefile
 @@ -5,7 +5,7 @@
@@ -28,9 +26,6 @@ index fcbe032..07b7c8c 100644
  obj-$(CONFIG_MTD_SM_COMMON)           += sm_common.o
  
  obj-$(CONFIG_MTD_NAND_CAFE)           += cafe_nand.o
-diff --git a/drivers/mtd/nand/nand_hynix.c b/drivers/mtd/nand/nand_hynix.c
-new file mode 100644
-index 0000000..0d051bf5
 --- /dev/null
 +++ b/drivers/mtd/nand/nand_hynix.c
 @@ -0,0 +1,159 @@
@@ -193,11 +188,9 @@ index 0000000..0d051bf5
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Boris BREZILLON <b.brezillon.dev@gmail.com>");
 +MODULE_DESCRIPTION("Hynix NAND specific code");
-diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
-index dd620c1..b786718 100644
 --- a/drivers/mtd/nand/nand_ids.c
 +++ b/drivers/mtd/nand/nand_ids.c
-@@ -163,6 +163,7 @@ struct nand_flash_dev nand_flash_ids[] = {
+@@ -163,6 +163,7 @@ struct nand_flash_dev nand_flash_ids[] =
        {NULL}
  };
  
@@ -205,7 +198,7 @@ index dd620c1..b786718 100644
  /* Manufacturer IDs */
  struct nand_manufacturers nand_manuf_ids[] = {
        {NAND_MFR_TOSHIBA, "Toshiba"},
-@@ -171,7 +172,7 @@ struct nand_manufacturers nand_manuf_ids[] = {
+@@ -171,7 +172,7 @@ struct nand_manufacturers nand_manuf_ids
        {NAND_MFR_NATIONAL, "National"},
        {NAND_MFR_RENESAS, "Renesas"},
        {NAND_MFR_STMICRO, "ST Micro"},
@@ -214,8 +207,6 @@ index dd620c1..b786718 100644
        {NAND_MFR_MICRON, "Micron"},
        {NAND_MFR_AMD, "AMD/Spansion"},
        {NAND_MFR_MACRONIX, "Macronix"},
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 5844d6f..328aab2 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
 @@ -959,6 +959,8 @@ struct nand_manufacturers {
index 4ff54d70625c1bdba9dbdfc25dc5d8bb6a5ed58e..278edd4c1977df8197ce563a7c65539b74dd7e64 100644 (file)
@@ -13,8 +13,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  include/linux/mtd/nand.h | 12 ++++++------
  1 file changed, 6 insertions(+), 6 deletions(-)
 
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 328aab2..c20f35b 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
 @@ -176,17 +176,17 @@ typedef enum {
index c92398e4bad70518177b4ec505db906dfacf8d7e..bc428f6ac2cafe221234bd53bff901ae85970012 100644 (file)
@@ -22,11 +22,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/nand_base.c | 35 +++++++++++++++++++++++++++++++++++
  1 file changed, 35 insertions(+)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 51642c6..e3d4d8e 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -4063,6 +4063,41 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4063,6 +4063,41 @@ static void nand_decode_ext_id(struct mt
                mtd->erasesize = (128 * 1024) <<
                        (((extid >> 1) & 0x04) | (extid & 0x03));
                *busw = 0;
index a150cbf2eb6c40d2235036bab8ffc2ff2631d39f..186ce2ea9976b3a77f9d7d95882f5763c5cfa451 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/nand_base.c | 6 ++++--
  1 file changed, 4 insertions(+), 2 deletions(-)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index e3d4d8e..5c6f465 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -4437,9 +4437,11 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4437,9 +4437,11 @@ ident_done:
                pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
                                type->name);
  
index 6894cc5a92540240bddd7394b4bae2633c3e0a0f..3e293a983f655aac5018b0138e4b1f140256af38 100644 (file)
@@ -12,11 +12,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/nand_base.c | 23 ++++++++++++++++++-----
  1 file changed, 18 insertions(+), 5 deletions(-)
 
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index 5c6f465..05ec786 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -4247,7 +4247,7 @@ static inline bool is_full_id_nand(struct nand_flash_dev *type)
+@@ -4247,7 +4247,7 @@ static inline bool is_full_id_nand(struc
  }
  
  static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
@@ -25,7 +23,7 @@ index 5c6f465..05ec786 100644
  {
        if (!strncmp(type->id, id_data, type->id_len)) {
                mtd->writesize = type->pagesize;
-@@ -4273,6 +4273,21 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4273,6 +4273,21 @@ static bool find_full_id_nand(struct mtd
  }
  
  /*
@@ -47,7 +45,7 @@ index 5c6f465..05ec786 100644
   * Get the flash and manufacturer id and lookup if the type is supported.
   */
  static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
-@@ -4385,8 +4400,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4385,8 +4400,7 @@ ident_done:
                 * Check, if buswidth is correct. Hardware drivers should set
                 * chip correct!
                 */
@@ -57,7 +55,7 @@ index 5c6f465..05ec786 100644
                pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
                pr_warn("bus width %d instead %d bit\n",
                           (chip->options & NAND_BUSWIDTH_16) ? 16 : 8,
-@@ -4424,8 +4438,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
+@@ -4424,8 +4438,7 @@ ident_done:
                        return ERR_PTR(err);
        }
  
index d993c9db6ca1d7e730d1a06778e91ea782325b20..f61e4a07873369b115cb737eb21e80ec0e640c38 100644 (file)
@@ -12,8 +12,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/sunxi_nand.c | 73 +++++++++++++++++++++++++++++++++++++------
  2 files changed, 65 insertions(+), 9 deletions(-)
 
-diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
-index 8242470..7df88c6 100644
 --- a/drivers/mtd/nand/Kconfig
 +++ b/drivers/mtd/nand/Kconfig
 @@ -525,6 +525,7 @@ config MTD_NAND_XWAY
@@ -24,8 +22,6 @@ index 8242470..7df88c6 100644
        help
          Enables support for NAND Flash chips on Allwinner SoCs.
  
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 6f93b29..c3e0473 100644
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
 @@ -202,6 +202,23 @@ struct sunxi_nand_hw_ecc {
@@ -52,7 +48,7 @@ index 6f93b29..c3e0473 100644
   * NAND chip structure: stores NAND chip device related information
   *
   * @node:             used to store NAND chips into a list
-@@ -521,7 +538,7 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -521,7 +538,7 @@ static int sunxi_nfc_hw_ecc_read_page(st
                                      int oob_required, int page)
  {
        struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -61,7 +57,7 @@ index 6f93b29..c3e0473 100644
        struct nand_ecclayout *layout = ecc->layout;
        struct sunxi_nand_hw_ecc *data = ecc->priv;
        unsigned int max_bitflips = 0;
-@@ -607,7 +624,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -607,7 +624,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
                                       const uint8_t *buf, int oob_required)
  {
        struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -70,7 +66,7 @@ index 6f93b29..c3e0473 100644
        struct nand_ecclayout *layout = ecc->layout;
        struct sunxi_nand_hw_ecc *data = ecc->priv;
        int offset;
-@@ -681,7 +698,7 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd,
+@@ -681,7 +698,7 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
                                               int page)
  {
        struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -79,7 +75,7 @@ index 6f93b29..c3e0473 100644
        struct sunxi_nand_hw_ecc *data = ecc->priv;
        unsigned int max_bitflips = 0;
        uint8_t *oob = chip->oob_poi;
-@@ -749,7 +766,7 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -749,7 +766,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
                                                int oob_required)
  {
        struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -88,7 +84,7 @@ index 6f93b29..c3e0473 100644
        struct sunxi_nand_hw_ecc *data = ecc->priv;
        uint8_t *oob = chip->oob_poi;
        int offset = 0;
-@@ -1099,8 +1116,13 @@ static int sunxi_nand_ecc_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc,
+@@ -1099,8 +1116,13 @@ static int sunxi_nand_ecc_init(struct mt
                ecc->strength = nand->ecc_strength_ds;
        }
  
@@ -104,7 +100,7 @@ index 6f93b29..c3e0473 100644
  
        ecc->mode = NAND_ECC_HW;
  
-@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc,
+@@ -1135,12 +1157,39 @@ static int sunxi_nand_ecc_init(struct mt
        return 0;
  }
  
@@ -145,7 +141,7 @@ index 6f93b29..c3e0473 100644
        struct mtd_info *mtd;
        struct nand_chip *nand;
        int nsels;
-@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
+@@ -1269,8 +1318,14 @@ static int sunxi_nand_chip_init(struct d
                return ret;
        }
  
index 5d37a38b5230542735ab851538b95ee7a8d1ecaa..e169bfae1fc5abdd82b318364c5cb2ec4df002da 100644 (file)
@@ -11,8 +11,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/sunxi_nand.c | 603 ++++++++++++++++++++++++++++++++++++++++--
  1 file changed, 585 insertions(+), 18 deletions(-)
 
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index c3e0473..2f6ab39 100644
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
 @@ -206,10 +206,12 @@ struct sunxi_nand_hw_ecc {
@@ -28,7 +26,7 @@ index c3e0473..2f6ab39 100644
  };
  
  static inline struct sunxi_nand_part *
-@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *part)
+@@ -219,6 +221,29 @@ to_sunxi_nand_part(struct nand_part *par
  }
  
  /*
@@ -66,7 +64,7 @@ index c3e0473..2f6ab39 100644
        unsigned long clk_rate;
        int selected;
        int nsels;
-@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct mtd_info *mtd, const uint8_t *buf,
+@@ -489,6 +515,185 @@ static void sunxi_nfc_write_buf(struct m
        }
  }
  
@@ -252,7 +250,7 @@ index c3e0473..2f6ab39 100644
  static uint8_t sunxi_nfc_read_byte(struct mtd_info *mtd)
  {
        uint8_t ret;
-@@ -538,16 +743,43 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -538,16 +743,43 @@ static int sunxi_nfc_hw_ecc_read_page(st
                                      int oob_required, int page)
  {
        struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
@@ -296,7 +294,7 @@ index c3e0473..2f6ab39 100644
        tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
        tmp &= ~(NFC_ECC_MODE | NFC_ECC_PIPELINE | NFC_ECC_BLOCK_SIZE);
        tmp |= NFC_ECC_EN | (data->mode << NFC_ECC_MODE_SHIFT) |
-@@ -556,12 +788,15 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -556,12 +788,15 @@ static int sunxi_nfc_hw_ecc_read_page(st
        writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
        for (i = 0; i < ecc->steps; i++) {
@@ -313,7 +311,7 @@ index c3e0473..2f6ab39 100644
  
                chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
  
-@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -569,6 +804,25 @@ static int sunxi_nfc_hw_ecc_read_page(st
                if (ret)
                        return ret;
  
@@ -339,7 +337,7 @@ index c3e0473..2f6ab39 100644
                tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | (1 << 30);
                writel(tmp, nfc->regs + NFC_REG_CMD);
  
-@@ -579,6 +833,9 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -579,6 +833,9 @@ static int sunxi_nfc_hw_ecc_read_page(st
                memcpy_fromio(buf + (i * ecc->size),
                              nfc->regs + NFC_RAM0_BASE, ecc->size);
  
@@ -349,7 +347,7 @@ index c3e0473..2f6ab39 100644
                if (readl(nfc->regs + NFC_REG_ECC_ST) & 0x1) {
                        mtd->ecc_stats.failed++;
                } else {
-@@ -594,9 +851,10 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -594,9 +851,10 @@ static int sunxi_nfc_hw_ecc_read_page(st
                        if (ret)
                                return ret;
  
@@ -362,7 +360,7 @@ index c3e0473..2f6ab39 100644
                }
        }
  
-@@ -606,11 +864,14 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
+@@ -606,11 +864,14 @@ static int sunxi_nfc_hw_ecc_read_page(st
                        offset = mtd->writesize +
                                 ecc->layout->oobfree[ecc->steps].offset;
                        chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -378,7 +376,7 @@ index c3e0473..2f6ab39 100644
        tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
        tmp &= ~NFC_ECC_EN;
  
-@@ -627,6 +888,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -627,6 +888,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
        struct nand_ecc_ctrl *ecc = chip->cur_ecc;
        struct nand_ecclayout *layout = ecc->layout;
        struct sunxi_nand_hw_ecc *data = ecc->priv;
@@ -386,7 +384,7 @@ index c3e0473..2f6ab39 100644
        int offset;
        int ret;
        u32 tmp;
-@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -641,22 +903,56 @@ static int sunxi_nfc_hw_ecc_write_page(s
        writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
        for (i = 0; i < ecc->steps; i++) {
@@ -451,7 +449,7 @@ index c3e0473..2f6ab39 100644
                }
  
                chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
-@@ -671,6 +967,9 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -671,6 +967,9 @@ static int sunxi_nfc_hw_ecc_write_page(s
                ret = sunxi_nfc_wait_int(nfc, NFC_CMD_INT_FLAG, 0);
                if (ret)
                        return ret;
@@ -461,7 +459,7 @@ index c3e0473..2f6ab39 100644
        }
  
        if (oob_required) {
-@@ -679,11 +978,14 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -679,11 +978,14 @@ static int sunxi_nfc_hw_ecc_write_page(s
                        offset = mtd->writesize +
                                 ecc->layout->oobfree[i].offset;
                        chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
@@ -477,7 +475,7 @@ index c3e0473..2f6ab39 100644
        tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
        tmp &= ~NFC_ECC_EN;
  
-@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -692,22 +994,76 @@ static int sunxi_nfc_hw_ecc_write_page(s
        return 0;
  }
  
@@ -554,7 +552,7 @@ index c3e0473..2f6ab39 100644
        tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
        tmp &= ~(NFC_ECC_MODE | NFC_ECC_PIPELINE | NFC_ECC_BLOCK_SIZE);
        tmp |= NFC_ECC_EN | (data->mode << NFC_ECC_MODE_SHIFT) |
-@@ -716,7 +1072,17 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd,
+@@ -716,7 +1072,17 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
        writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
        for (i = 0; i < ecc->steps; i++) {
@@ -573,7 +571,7 @@ index c3e0473..2f6ab39 100644
  
                tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | (1 << 30);
                writel(tmp, nfc->regs + NFC_REG_CMD);
-@@ -729,6 +1095,9 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd,
+@@ -729,6 +1095,9 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
                buf += ecc->size;
                offset += ecc->size;
  
@@ -583,7 +581,7 @@ index c3e0473..2f6ab39 100644
                if (readl(nfc->regs + NFC_REG_ECC_ST) & 0x1) {
                        mtd->ecc_stats.failed++;
                } else {
-@@ -739,7 +1108,8 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd,
+@@ -739,7 +1108,8 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
  
                if (oob_required) {
                        chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -593,7 +591,7 @@ index c3e0473..2f6ab39 100644
                        oob += ecc->bytes + ecc->prepad;
                }
  
-@@ -750,10 +1120,13 @@ static int sunxi_nfc_hw_syndrome_ecc_read_page(struct mtd_info *mtd,
+@@ -750,10 +1120,13 @@ static int sunxi_nfc_hw_syndrome_ecc_rea
                cnt = mtd->oobsize - (oob - chip->oob_poi);
                if (cnt > 0) {
                        chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset, -1);
@@ -608,7 +606,7 @@ index c3e0473..2f6ab39 100644
        writel(readl(nfc->regs + NFC_REG_ECC_CTL) & ~NFC_ECC_EN,
               nfc->regs + NFC_REG_ECC_CTL);
  
-@@ -768,6 +1141,7 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -768,6 +1141,7 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
        struct sunxi_nfc *nfc = to_sunxi_nfc(chip->controller);
        struct nand_ecc_ctrl *ecc = chip->cur_ecc;
        struct sunxi_nand_hw_ecc *data = ecc->priv;
@@ -616,7 +614,7 @@ index c3e0473..2f6ab39 100644
        uint8_t *oob = chip->oob_poi;
        int offset = 0;
        int ret;
-@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -783,7 +1157,8 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
        writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
  
        for (i = 0; i < ecc->steps; i++) {
@@ -626,7 +624,7 @@ index c3e0473..2f6ab39 100644
                offset += ecc->size;
  
                /* Fill OOB data in */
-@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -796,6 +1171,16 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
                                    4);
                }
  
@@ -643,7 +641,7 @@ index c3e0473..2f6ab39 100644
                tmp = NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | NFC_ACCESS_DIR |
                      (1 << 30);
                writel(tmp, nfc->regs + NFC_REG_CMD);
-@@ -804,6 +1189,9 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -804,6 +1189,9 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
                if (ret)
                        return ret;
  
@@ -653,7 +651,7 @@ index c3e0473..2f6ab39 100644
                offset += ecc->bytes + ecc->prepad;
                oob += ecc->bytes + ecc->prepad;
        }
-@@ -812,9 +1200,11 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -812,9 +1200,11 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
                cnt = mtd->oobsize - (oob - chip->oob_poi);
                if (cnt > 0) {
                        chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
@@ -666,7 +664,7 @@ index c3e0473..2f6ab39 100644
  
        tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
        tmp &= ~NFC_ECC_EN;
-@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -824,6 +1214,128 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
        return 0;
  }
  
@@ -795,7 +793,7 @@ index c3e0473..2f6ab39 100644
  static int sunxi_nand_chip_set_timings(struct sunxi_nand_chip *chip,
                                       const struct nand_sdr_timings *timings)
  {
-@@ -1084,6 +1596,40 @@ static int sunxi_nand_hw_syndrome_ecc_ctrl_init(struct mtd_info *mtd,
+@@ -1084,6 +1596,40 @@ static int sunxi_nand_hw_syndrome_ecc_ct
        return 0;
  }
  
@@ -836,7 +834,7 @@ index c3e0473..2f6ab39 100644
  static void sunxi_nand_ecc_cleanup(struct nand_ecc_ctrl *ecc)
  {
        switch (ecc->mode) {
-@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master,
+@@ -1175,7 +1721,14 @@ struct nand_part *sunxi_ofnandpart_parse
        if (ret)
                goto err;
  
@@ -851,7 +849,7 @@ index c3e0473..2f6ab39 100644
  
        return &part->part;
  
-@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
+@@ -1300,18 +1853,30 @@ static int sunxi_nand_chip_init(struct d
        if (ret)
                return ret;
  
@@ -882,7 +880,7 @@ index c3e0473..2f6ab39 100644
        ret = nand_scan_tail(mtd);
        if (ret) {
                dev_err(dev, "nand_scan_tail failed: %d\n", ret);
-@@ -1367,6 +1932,8 @@ static void sunxi_nand_chips_cleanup(struct sunxi_nfc *nfc)
+@@ -1367,6 +1932,8 @@ static void sunxi_nand_chips_cleanup(str
                                        node);
                nand_release(&chip->mtd);
                sunxi_nand_ecc_cleanup(&chip->nand.ecc);
index 51b0fbfd9accbe521e113ffaafe509625ec2b7dc..126998f4b50b06ffde1d17a5c4f34fe1671a3c72 100644 (file)
@@ -13,11 +13,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/sunxi_nand.c | 27 ++++++++++++++++++---------
  1 file changed, 18 insertions(+), 9 deletions(-)
 
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 2f6ab39..74f2caf 100644
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(struct nand_part *part)
+@@ -1711,28 +1711,37 @@ static void sunxi_nand_part_release(stru
  struct nand_part *sunxi_ofnandpart_parse(void *priv, struct mtd_info *master,
                                         struct device_node *pp)
  {
@@ -31,15 +29,16 @@ index 2f6ab39..74f2caf 100644
 -      ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
 -      if (ret)
 -              goto err;
-+      if (of_find_property(pp, "nand-ecc-mode", NULL)) {
-+              ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
-+              if (ret)
-+                      goto err;
+-
 -      ret = sunxi_nand_rnd_init(master, &part->rnd, &part->ecc, pp);
 -      if (ret) {
 -              sunxi_nand_ecc_cleanup(&part->ecc);
 -              goto err;
++      if (of_find_property(pp, "nand-ecc-mode", NULL)) {
++              ret = sunxi_nand_ecc_init(master, &part->ecc, pp);
++              if (ret)
++                      goto err;
++
 +              part->part.ecc = &part->ecc;
        }
  
index 19775eb5a64e56c3cd34e002638b6c727f5673a0..25b9359daa3e6ab5fe3225e3bf680998ed635146 100644 (file)
@@ -14,11 +14,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  drivers/mtd/nand/sunxi_nand.c | 9 +++++++++
  1 file changed, 9 insertions(+)
 
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 74f2caf..72ab770 100644
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1853,6 +1853,15 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
+@@ -1853,6 +1853,15 @@ static int sunxi_nand_chip_init(struct d
        if (of_get_nand_on_flash_bbt(np))
                nand->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
  
index 91c6efbc3f37c90360a8905e69006918c0aadd5d..961172035723aa6fb55c5952cdc4f973143db4eb 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun4i-a10.dtsi | 80 ++++++++++++++++++++++++++++++++++++++++
  1 file changed, 80 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index abea24e..e0a737f 100644
 --- a/arch/arm/boot/dts/sun4i-a10.dtsi
 +++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -924,6 +924,86 @@
+@@ -774,6 +774,86 @@
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
index 290dbb762eef9b35721aa8f37584e784420bede0..3193a6a3de3b5614cedec3b4ef7d371d4f9e80e8 100644 (file)
@@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun5i.dtsi      | 38 ++++++++++++++++++++++++++++++++++++++
  2 files changed, 52 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi
-index f11efb7..1962ec9 100644
 --- a/arch/arm/boot/dts/sun5i-a10s.dtsi
 +++ b/arch/arm/boot/dts/sun5i-a10s.dtsi
-@@ -201,6 +201,20 @@
-               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+@@ -656,4 +656,18 @@
+                       clocks = <&ahb_gates 28>;
+               };
        };
 +
 +      nand_cs2_pins_a: nand_cs@2 {
@@ -34,15 +32,11 @@ index f11efb7..1962ec9 100644
 +              allwinner,pull = <0>;
 +      };
  };
- &sram_a {
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index 772f8d8..0dc7c96 100644
 --- a/arch/arm/boot/dts/sun5i-a13.dtsi
 +++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -544,6 +544,44 @@
+@@ -528,6 +528,44 @@
                                allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
 +
 +                      nand_pins_a: nand_base0@0 {
index 5720a8b4dfeb3522f41fa86efe0d84f09441317f..0f3dc61a2a61a16d1b0437632c9d1c124655abe6 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 80 ++++++++++++++++++++++++++++++++++++++++
  1 file changed, 80 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 0d7e600..6ec86c9 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -1164,6 +1164,86 @@
+@@ -978,6 +978,86 @@
                                allwinner,drive = <SUN4I_PINCTRL_10_MA>;
                                allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
                        };
index b1a9b07402eb61b0befd7735fc7cb81a17945663..ff8e093c4937c093c4689071b5756ddf016075c8 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 11 +++++++++++
  1 file changed, 11 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 6ec86c9..092adc6 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -641,6 +641,17 @@
+@@ -543,6 +543,17 @@
                        #dma-cells = <2>;
                };
  
index d5112609deaee22605b8ce24605d00b234b08936..64473a93bfe84eacd060d66f633f9a6c200fe9f7 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun4i-a10.dtsi | 11 +++++++++++
  1 file changed, 11 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index e0a737f..7cd636d 100644
 --- a/arch/arm/boot/dts/sun4i-a10.dtsi
 +++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -514,6 +514,17 @@
+@@ -428,6 +428,17 @@
                        #dma-cells = <2>;
                };
  
index 163130e4d993333d34d487d91d3ee2a8cf3fc476..5c4e1f1b3b4176ab03201c5ae67aab3c08ca61be 100644 (file)
@@ -10,11 +10,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun5i.dtsi | 11 +++++++++++
  1 file changed, 11 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index 0dc7c96..801ab01 100644
 --- a/arch/arm/boot/dts/sun5i-a13.dtsi
 +++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -353,6 +353,17 @@
+@@ -365,6 +365,17 @@
                        #dma-cells = <2>;
                };
  
index 72763644b6e7a2f889adf7e32789d62d27c3aee4..6097ce30feef94661d0358dffa3db002e5666233 100644 (file)
@@ -10,13 +10,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun5i-a13-olinuxino.dts | 59 +++++++++++++++++++++++++++++++
  1 file changed, 59 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-index b3c234c..fd1e921 100644
 --- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
 +++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
-@@ -155,3 +155,62 @@
-               status = "okay";
-       };
+@@ -201,3 +201,62 @@
+               status = "okay";
+       };
  };
 +&nfc {
 +              pinctrl-names = "default";
index b632db1f1ab7eb1c2de5b8a0ff58a57653486881..a7dee1301d9c3a9eb521260e5c45b813f95184f2 100644 (file)
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-index 39a51d5..f35957d 100644
 --- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
 +++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
-@@ -142,3 +142,60 @@
-               status = "okay";
-       };
+@@ -245,3 +245,60 @@
+               status = "okay";
+       };
  };
 +&nfc {
 +      pinctrl-names = "default";
index 1f742a9de1dabbb8e76468fb8250fd97db2d9a2b..4075a9e262c9e71c6e76ffdeaf51c64d455c7653 100644 (file)
@@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 57 ++++++++++++++++++++++++++++++
  1 file changed, 57 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-index 046a84d..a6faca3 100644
 --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
 +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
-@@ -147,3 +147,60 @@
-       regulator-max-microvolt = <3000000>;
-       regulator-name = "avcc";
+@@ -215,3 +215,60 @@
+       regulator-max-microvolt = <3000000>;
+       regulator-name = "avcc";
  };
 +&nfc {
 +              pinctrl-names = "default";
index b948c203ae5e2024dc0305f3e8fdbe61a28494d9..2464408805156e54575e65b50d745dbd727117e6 100644 (file)
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-index b3c234c..fd1e921 100644
 --- a/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
 +++ b/arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
-@@ -155,3 +155,62 @@
-               status = "okay";
-       };
+@@ -189,3 +189,62 @@
+               status = "okay";
+       };
  };
 +&nfc {
 +              pinctrl-names = "default";
index bb817c1241dde4e4655cb7c0b30bcd91fddeb98d..93eb3ebad77fd99d1adb13e3d715e8ffa214cd7a 100644 (file)
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun4i-a10-pcduino.dts b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-index b3c234c..fd1e921 100644
 --- a/arch/arm/boot/dts/sun4i-a10-pcduino.dts
 +++ b/arch/arm/boot/dts/sun4i-a10-pcduino.dts
-@@ -155,3 +155,62 @@
-               status = "okay";
-       };
+@@ -194,3 +194,62 @@
+               status = "okay";
+       };
  };
 +&nfc {
 +              pinctrl-names = "default";
index 25418b5db50efe5bae0052f0c3d6e22fa963c18b..81de87fd9e0086d8d2b847f50bb5e0a78eeef70a 100644 (file)
@@ -1,10 +1,8 @@
-diff --git a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
-index b3c234c..fd1e921 100644
 --- a/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
 +++ b/arch/arm/boot/dts/sun7i-a20-pcduino3.dts
-@@ -155,3 +155,62 @@
-               status = "okay";
-       };
+@@ -210,3 +210,62 @@
+               status = "okay";
+       };
  };
 +&nfc {
 +              pinctrl-names = "default";
index 9df18a317007f1f82da2736a788ef84be6582253..ff047fca9243b3822691797352b5e4133dcde288 100644 (file)
@@ -1,17 +1,15 @@
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index c2e1232..f561c68 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -3611,6 +3611,8 @@ static inline bool is_full_id_nand(struct nand_flash_dev *type)
+@@ -4249,6 +4249,8 @@ static inline bool is_full_id_nand(struc
  static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
-                  struct nand_flash_dev *type, u8 *id_data, int *busw)
+                  struct nand_flash_dev *type, const u8 *id_data, int *busw)
  {
 +      int mode;
 +
        if (!strncmp(type->id, id_data, type->id_len)) {
                mtd->writesize = type->pagesize;
                mtd->erasesize = type->erasesize;
-@@ -3621,8 +3623,9 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4259,8 +4261,9 @@ static bool find_full_id_nand(struct mtd
                chip->options |= type->options;
                chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
                chip->ecc_step_ds = NAND_ECC_STEP(type);
@@ -23,11 +21,9 @@ index c2e1232..f561c68 100644
  
                *busw = type->options & NAND_BUSWIDTH_16;
  
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 5095a32..72e4135 100644
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -1083,7 +1083,7 @@ static int sunxi_nand_chip_init_timings(struct sunxi_nand_chip *chip,
+@@ -1427,7 +1427,7 @@ static int sunxi_nand_chip_init_timings(
  
        mode = onfi_get_async_timing_mode(&chip->nand);
        if (mode == ONFI_TIMING_MODE_UNKNOWN) {
@@ -36,7 +32,7 @@ index 5095a32..72e4135 100644
        } else {
                uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {};
  
-@@ -1097,9 +1097,10 @@ static int sunxi_nand_chip_init_timings(struct sunxi_nand_chip *chip,
+@@ -1441,9 +1441,10 @@ static int sunxi_nand_chip_init_timings(
                                                feature);
                if (ret)
                        return ret;
@@ -48,11 +44,9 @@ index 5095a32..72e4135 100644
        if (IS_ERR(timings))
                return PTR_ERR(timings);
  
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 3d4ea7e..2eb92a3 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
-@@ -536,6 +536,55 @@ struct nand_buffers {
+@@ -612,6 +612,55 @@ struct nand_buffers {
        uint8_t *databuf;
  };
  
@@ -108,7 +102,7 @@ index 3d4ea7e..2eb92a3 100644
  /**
   * struct nand_chip - NAND Private Flash Chip Data
   * @IO_ADDR_R:                [BOARDSPECIFIC] address to read the 8 I/O lines of the
-@@ -600,11 +649,7 @@ struct nand_buffers {
+@@ -676,11 +725,7 @@ struct nand_buffers {
   * @ecc_step_ds:      [INTERN] ECC step required by the @ecc_strength_ds,
   *                      also from the datasheet. It is the recommended ECC step
   *                    size, if known; if unknown, set to zero.
@@ -121,7 +115,7 @@ index 3d4ea7e..2eb92a3 100644
   * @numchips:         [INTERN] number of physical chips
   * @chipsize:         [INTERN] the size of one chip for multichip arrays
   * @pagemask:         [INTERN] page number mask = number of (pages / chip) - 1
-@@ -689,7 +734,7 @@ struct nand_chip {
+@@ -769,7 +814,7 @@ struct nand_chip {
        uint8_t bits_per_cell;
        uint16_t ecc_strength_ds;
        uint16_t ecc_step_ds;
@@ -130,9 +124,9 @@ index 3d4ea7e..2eb92a3 100644
        int badblockpos;
        int badblockbits;
  
-@@ -975,55 +1020,6 @@ static inline int jedec_feature(struct nand_chip *chip)
-               : 0;
- }
+@@ -1156,55 +1201,6 @@ struct ofnandpart_data {
+ int ofnandpart_parse(struct mtd_info *master,
+                    const struct ofnandpart_data *data);
  
 -/*
 - * struct nand_sdr_timings - SDR NAND chip timings
index d7a396396fef97957a2e19fab4039558e1e660dd..03c7f265d267e03f5b097ab9a0f9e54afd1b957a 100644 (file)
@@ -1,8 +1,6 @@
-diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
-index f561c68..8e636df 100644
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -3624,8 +3624,13 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
+@@ -4262,8 +4262,13 @@ static bool find_full_id_nand(struct mtd
                chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
                chip->ecc_step_ds = NAND_ECC_STEP(type);
  
@@ -18,11 +16,9 @@ index f561c68..8e636df 100644
  
                *busw = type->options & NAND_BUSWIDTH_16;
  
-diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
-index 2eb92a3..7d9e599 100644
 --- a/include/linux/mtd/nand.h
 +++ b/include/linux/mtd/nand.h
-@@ -863,6 +863,7 @@ struct nand_flash_dev {
+@@ -988,6 +988,7 @@ struct nand_flash_dev {
                uint16_t step_ds;
        } ecc;
        int onfi_timing_mode_default;
index e2f591e999ee260a23d8eb333ef2a7a5c427ec07..49ec6b0c1987deabdfaef5118fcf736c675d0c7e 100644 (file)
@@ -1,5 +1,3 @@
-diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
-index dd620c1..15b4a03 100644
 --- a/drivers/mtd/nand/nand_ids.c
 +++ b/drivers/mtd/nand/nand_ids.c
 @@ -19,6 +19,49 @@
@@ -52,7 +50,7 @@ index dd620c1..15b4a03 100644
   * The chip ID list:
   *    name, device ID, page size, chip size in MiB, eraseblock size, options
   *
-@@ -50,6 +93,10 @@ struct nand_flash_dev nand_flash_ids[] = {
+@@ -50,6 +93,10 @@ struct nand_flash_dev nand_flash_ids[] =
                { .id = {0xad, 0xde, 0x94, 0xda, 0x74, 0xc4} },
                  SZ_8K, SZ_8K, SZ_2M, 0, 6, 640, NAND_ECC_INFO(40, SZ_1K),
                  4 },
index 362ed698a5754c7f504e5fbf6c55e163312f5846..8c49dee746739918110f2732f223a7d1d797c454 100644 (file)
@@ -13,11 +13,9 @@ Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
  drivers/mtd/nand/sunxi_nand.c | 38 +++++++++++++++++++++-----------------
  1 file changed, 21 insertions(+), 17 deletions(-)
 
-diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
-index 72ab770..3668197 100644
 --- a/drivers/mtd/nand/sunxi_nand.c
 +++ b/drivers/mtd/nand/sunxi_nand.c
-@@ -904,7 +904,7 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -904,7 +904,7 @@ static int sunxi_nfc_hw_ecc_write_page(s
  
        for (i = 0; i < ecc->steps; i++) {
                bool rndactiv = false;
@@ -26,7 +24,7 @@ index 72ab770..3668197 100644
  
                if (i)
                        chip->cmdfunc(mtd, NAND_CMD_RNDIN, i * ecc->size, -1);
-@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -915,15 +915,13 @@ static int sunxi_nfc_hw_ecc_write_page(s
                offset = layout->eccpos[i * ecc->bytes] - 4 + mtd->writesize;
  
                /* Fill OOB data in */
@@ -49,7 +47,7 @@ index 72ab770..3668197 100644
  
                if (i) {
                        cnt = ecc->bytes + 4;
-@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -942,12 +940,16 @@ static int sunxi_nfc_hw_ecc_write_page(s
                if (rndactiv) {
                        /* pre randomize to generate FF patterns on the NAND */
                        if (!i) {
@@ -69,7 +67,7 @@ index 72ab770..3668197 100644
                        }
                        tmp = readl(nfc->regs + NFC_REG_ECC_CTL);
                        tmp &= ~(NFC_RANDOM_DIRECTION | NFC_ECC_EXCEPTION);
-@@ -955,6 +957,8 @@ static int sunxi_nfc_hw_ecc_write_page(struct mtd_info *mtd,
+@@ -955,6 +957,8 @@ static int sunxi_nfc_hw_ecc_write_page(s
                        writel(tmp, nfc->regs + NFC_REG_ECC_CTL);
                }
  
@@ -78,7 +76,7 @@ index 72ab770..3668197 100644
                chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset, -1);
  
                ret = sunxi_nfc_wait_cmd_fifo_empty(nfc);
-@@ -1164,13 +1168,13 @@ static int sunxi_nfc_hw_syndrome_ecc_write_page(struct mtd_info *mtd,
+@@ -1164,13 +1168,13 @@ static int sunxi_nfc_hw_syndrome_ecc_wri
                /* Fill OOB data in */
                if (oob_required) {
                        tmp = 0xffffffff;
index 295865bbe5c3d27d1214693dc6ae48d7c719758e..76bc222738e339e4152b8383414c5ebb2a51f260 100644 (file)
@@ -22,11 +22,9 @@ Changes in v2:
  drivers/mmc/host/sunxi-mmc.c | 32 ++++++++++++++++++++++++++++++++
  1 file changed, 32 insertions(+)
 
-diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
-index 4d3e1ff..daa90b7 100644
 --- a/drivers/mmc/host/sunxi-mmc.c
 +++ b/drivers/mmc/host/sunxi-mmc.c
-@@ -289,6 +289,24 @@ static int sunxi_mmc_init_host(struct mmc_host *mmc)
+@@ -289,6 +289,24 @@ static int sunxi_mmc_init_host(struct mm
        return 0;
  }
  
@@ -51,7 +49,7 @@ index 4d3e1ff..daa90b7 100644
  static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host,
                                    struct mmc_data *data)
  {
-@@ -383,6 +401,8 @@ static void sunxi_mmc_send_manual_stop(struct sunxi_mmc_host *host,
+@@ -383,6 +401,8 @@ static void sunxi_mmc_send_manual_stop(s
        u32 arg, cmd_val, ri;
        unsigned long expire = jiffies + msecs_to_jiffies(1000);
  
@@ -60,7 +58,7 @@ index 4d3e1ff..daa90b7 100644
        cmd_val = SDXC_START | SDXC_RESP_EXPIRE |
                  SDXC_STOP_ABORT_CMD | SDXC_CHECK_RESPONSE_CRC;
  
-@@ -597,6 +617,11 @@ static int sunxi_mmc_oclk_onoff(struct sunxi_mmc_host *host, u32 oclk_en)
+@@ -597,6 +617,11 @@ static int sunxi_mmc_oclk_onoff(struct s
  {
        unsigned long expire = jiffies + msecs_to_jiffies(250);
        u32 rval;
@@ -72,17 +70,17 @@ index 4d3e1ff..daa90b7 100644
  
        rval = mmc_readl(host, REG_CLKCR);
        rval &= ~(SDXC_CARD_CLOCK_ON | SDXC_LOW_POWER_ON);
-@@ -785,6 +810,13 @@ static void sunxi_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
+@@ -784,6 +809,13 @@ static void sunxi_mmc_request(struct mmc
+               mmc_request_done(mmc, mrq);
                return;
        }
++
 +      ret = sunxi_mmc_wait_card_ready(host);
 +      if (ret) {
 +              mrq->cmd->error = ret;
 +              mmc_request_done(mmc, mrq);
 +              return;
 +      }
-+
        if (data) {
                ret = sunxi_mmc_map_dma(host, data);
-               if (ret < 0) {
index 7ca26b0cdb9e50e01ca8c382464ab61aa12db25b..f2f799e73441449dd6804fd424d12a236567e07c 100644 (file)
@@ -1,8 +1,6 @@
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 6a63f30..f5f384c 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -107,7 +107,7 @@
+@@ -111,7 +111,7 @@
                                720000  1200000
                                528000  1100000
                                312000  1000000
index 3199cd9e821679cb7f1947c3baaef5d80ba8b285..2545f8aacbab791dd6649fd45965c39219255bdd 100644 (file)
@@ -9,18 +9,14 @@ to other sun8i family SoCs like the A23.
 Signed-off-by: Jens Kuske <jenskuske@gmail.com>
 Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
 
-diff --git a/Documentation/devicetree/bindings/arm/sunxi.txt b/Documentation/devicetree/bindings/arm/sunxi.txt
-index 42941fd..3cb4b94 100644
 --- a/Documentation/devicetree/bindings/arm/sunxi.txt
 +++ b/Documentation/devicetree/bindings/arm/sunxi.txt
-@@ -9,4 +9,5 @@ using one of the following compatible strings:
+@@ -9,4 +9,5 @@ using one of the following compatible st
    allwinner,sun6i-a31
    allwinner,sun7i-a20
    allwinner,sun8i-a23
 +  allwinner,sun8i-h3
    allwinner,sun9i-a80
-diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
-index 81502b9..4efe2d4 100644
 --- a/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
 @@ -35,7 +35,7 @@ config MACH_SUN7I
@@ -32,8 +28,6 @@ index 81502b9..4efe2d4 100644
        default ARCH_SUNXI
        select ARM_GIC
        select MFD_SUN6I_PRCM
-diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c
-index 1bc811a..8270902 100644
 --- a/arch/arm/mach-sunxi/sunxi.c
 +++ b/arch/arm/mach-sunxi/sunxi.c
 @@ -67,10 +67,12 @@ MACHINE_END
@@ -50,6 +44,3 @@ index 1bc811a..8270902 100644
        .dt_compat      = sun8i_board_dt_compat,
        .init_late      = sunxi_dt_cpufreq_init,
  MACHINE_END
--- 
-cgit v0.10.2
-
index 661096688539118dcd5cbb8a2874058cf26bf89e..df434a41e801ac6f6e9104daa66e1a00d879217a 100644 (file)
@@ -1,8 +1,6 @@
-diff --git a/Documentation/devicetree/bindings/dma/sun6i-dma.txt b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
-index 9cdcba24d..d13c136 100644
 --- a/Documentation/devicetree/bindings/dma/sun6i-dma.txt
 +++ b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
-@@ -4,7 +4,10 @@ This driver follows the generic DMA bindings defined in dma.txt.
+@@ -4,7 +4,10 @@ This driver follows the generic DMA bind
  
  Required properties:
  
@@ -14,11 +12,9 @@ index 9cdcba24d..d13c136 100644
  - reg:                Should contain the registers base address and length
  - interrupts: Should contain a reference to the interrupt used by this device
  - clocks:     Should contain a reference to the parent AHB clock
-diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
-index 11e5365..842ff97 100644
 --- a/drivers/dma/sun6i-dma.c
 +++ b/drivers/dma/sun6i-dma.c
-@@ -891,9 +891,21 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = {
+@@ -891,9 +891,21 @@ static struct sun6i_dma_config sun8i_a23
        .nr_max_vchans   = 37,
  };
  
index ea1e100a069ad9cc6887179591249630122e6629..471fb2ad6eade87f7aa551681e4383f521abafb0 100644 (file)
@@ -55,9 +55,6 @@ Changes from v1:
  create mode 100644 Documentation/devicetree/bindings/dma/sun4i-dma.txt
  create mode 100644 drivers/dma/sun4i-dma.c
 
-diff --git a/Documentation/devicetree/bindings/dma/sun4i-dma.txt b/Documentation/devicetree/bindings/dma/sun4i-dma.txt
-new file mode 100644
-index 0000000..f1634a2
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/dma/sun4i-dma.txt
 @@ -0,0 +1,46 @@
@@ -107,11 +104,9 @@ index 0000000..f1634a2
 +              #address-cells = <1>;
 +              #size-cells = <0>;
 +      };
-diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
-index fd7ac13..12372c2 100644
 --- a/drivers/dma/Kconfig
 +++ b/drivers/dma/Kconfig
-@@ -443,6 +443,17 @@ config XGENE_DMA
+@@ -444,6 +444,17 @@ config XGENE_DMA
        help
          Enable support for the APM X-Gene SoC DMA engine.
  
@@ -129,8 +124,6 @@ index fd7ac13..12372c2 100644
  config DMA_ENGINE
        bool
  
-diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
-index 69f77d5..3eba5e9 100644
 --- a/drivers/dma/Makefile
 +++ b/drivers/dma/Makefile
 @@ -54,3 +54,4 @@ obj-$(CONFIG_NBPFAXI_DMA) += nbpfaxi.o
@@ -138,9 +131,6 @@ index 69f77d5..3eba5e9 100644
  obj-$(CONFIG_IMG_MDC_DMA) += img-mdc-dma.o
  obj-$(CONFIG_XGENE_DMA) += xgene-dma.o
 +obj-$(CONFIG_SUN4I_DMA) += sun4i-dma.o
-diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c
-new file mode 100644
-index 0000000..a8d55518
 --- /dev/null
 +++ b/drivers/dma/sun4i-dma.c
 @@ -0,0 +1,1235 @@
index 150be4192e584010692612c5a8490af2695b91a7..f4b1b5c37c761b305293e923be9d46c278cb9e12 100644 (file)
@@ -18,8 +18,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2 files changed, 250 insertions(+)
  create mode 100644 drivers/clk/sunxi/clk-a10-pll2.c
 
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index 058f273..eb36c38 100644
 --- a/drivers/clk/sunxi/Makefile
 +++ b/drivers/clk/sunxi/Makefile
 @@ -4,6 +4,7 @@
@@ -30,9 +28,6 @@ index 058f273..eb36c38 100644
  obj-y += clk-a20-gmac.o
  obj-y += clk-mod0.o
  obj-y += clk-sun8i-mbus.o
-diff --git a/drivers/clk/sunxi/clk-a10-pll2.c b/drivers/clk/sunxi/clk-a10-pll2.c
-new file mode 100644
-index 0000000..bdbf1e9
 --- /dev/null
 +++ b/drivers/clk/sunxi/clk-a10-pll2.c
 @@ -0,0 +1,249 @@
index 3663610f2a1647aed0e7b3fd93dd528da7d2eea8..c19d7a6d88d3c4b8400511d2a15427e4f2c4f7c4 100644 (file)
@@ -17,8 +17,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2 files changed, 42 insertions(+)
  create mode 100644 drivers/clk/sunxi/clk-a10-codec.c
 
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index eb36c38..6fa845e 100644
 --- a/drivers/clk/sunxi/Makefile
 +++ b/drivers/clk/sunxi/Makefile
 @@ -3,6 +3,7 @@
@@ -29,9 +27,6 @@ index eb36c38..6fa845e 100644
  obj-y += clk-a10-hosc.o
  obj-y += clk-a10-pll2.o
  obj-y += clk-a20-gmac.o
-diff --git a/drivers/clk/sunxi/clk-a10-codec.c b/drivers/clk/sunxi/clk-a10-codec.c
-new file mode 100644
-index 0000000..c70acbf
 --- /dev/null
 +++ b/drivers/clk/sunxi/clk-a10-codec.c
 @@ -0,0 +1,41 @@
index 87ec3feb2a5dc7b4923b469a54a2c7f4854ddc84..a6387845d93dd12921d95c4b42af324f05eb6ab0 100644 (file)
@@ -18,8 +18,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  2 files changed, 70 insertions(+)
  create mode 100644 drivers/clk/sunxi/clk-a10-mod1.c
 
-diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
-index 6fa845e..960eeab 100644
 --- a/drivers/clk/sunxi/Makefile
 +++ b/drivers/clk/sunxi/Makefile
 @@ -5,6 +5,7 @@
@@ -30,9 +28,6 @@ index 6fa845e..960eeab 100644
  obj-y += clk-a10-pll2.o
  obj-y += clk-a20-gmac.o
  obj-y += clk-mod0.o
-diff --git a/drivers/clk/sunxi/clk-a10-mod1.c b/drivers/clk/sunxi/clk-a10-mod1.c
-new file mode 100644
-index 0000000..1357641
 --- /dev/null
 +++ b/drivers/clk/sunxi/clk-a10-mod1.c
 @@ -0,0 +1,69 @@
index 0d3de3c203e26b498f1a219345c04f85d13171a9..f7ddfa142d80ebc38e78d6c38797142c0b495734 100644 (file)
@@ -17,11 +17,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++
  3 files changed, 24 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index 30f663a..fab13af 100644
 --- a/arch/arm/boot/dts/sun4i-a10.dtsi
 +++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -195,6 +195,14 @@
+@@ -162,6 +162,14 @@
                        clock-output-names = "pll1";
                };
  
@@ -36,11 +34,9 @@ index 30f663a..fab13af 100644
                pll4: clk@01c20018 {
                        #clock-cells = <0>;
                        compatible = "allwinner,sun4i-a10-pll1-clk";
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index 53d3ead..a4b6a66 100644
 --- a/arch/arm/boot/dts/sun5i-a13.dtsi
 +++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -102,6 +102,14 @@
+@@ -136,6 +136,14 @@
                        clock-output-names = "pll1";
                };
  
@@ -55,11 +51,9 @@ index 53d3ead..a4b6a66 100644
                pll4: clk@01c20018 {
                        #clock-cells = <0>;
                        compatible = "allwinner,sun4i-a10-pll1-clk";
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 7549f1b..12d9ffd 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -199,6 +199,14 @@
+@@ -203,6 +203,14 @@
                        clock-output-names = "pll1";
                };
  
index 05ddd4babc1548b6e665826bb2bab0a9a6795b5a..d80eae7e0b8eff3ff74e23d8008803b74ee65ebb 100644 (file)
@@ -17,11 +17,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++
  3 files changed, 24 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index fab13af..abea24e 100644
 --- a/arch/arm/boot/dts/sun4i-a10.dtsi
 +++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -454,6 +454,14 @@
+@@ -420,6 +420,14 @@
                        clocks = <&osc24M>, <&pll6 1>, <&pll5 1>;
                        clock-output-names = "spi3";
                };
@@ -36,11 +34,9 @@ index fab13af..abea24e 100644
        };
  
        soc@01c00000 {
-diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
-index a4b6a66..5c0edd6 100644
 --- a/arch/arm/boot/dts/sun5i-a13.dtsi
 +++ b/arch/arm/boot/dts/sun5i-a13.dtsi
-@@ -292,6 +292,14 @@
+@@ -350,6 +350,14 @@
                        clock-output-names = "usb_ohci0", "usb_phy";
                };
  
@@ -55,11 +51,9 @@ index a4b6a66..5c0edd6 100644
                mbus_clk: clk@01c2015c {
                        #clock-cells = <0>;
                        compatible = "allwinner,sun5i-a13-mbus-clk";
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 12d9ffd..400e696 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -468,6 +468,14 @@
+@@ -464,6 +464,14 @@
                        clock-output-names = "spi3";
                };
  
index 5727c56e24455e2d1d3e8fa6b4035bdcb400dde9..38f785684ae2c935ca4e84443f5b238036994f1b 100644 (file)
@@ -15,11 +15,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 39 +++++++++++++++++++++++++++++++++++++++
  1 file changed, 39 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 400e696..a0d18b2 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -450,6 +450,29 @@
+@@ -447,6 +447,29 @@
                        clock-output-names = "ir1";
                };
  
@@ -48,8 +46,8 @@ index 400e696..a0d18b2 100644
 +              };
                usb_clk: clk@01c200cc {
                        #clock-cells = <1>;
-                       #reset-cells = <1>;
-@@ -468,6 +491,22 @@
+                       #reset-cells = <1>;
+@@ -464,6 +487,22 @@
                        clock-output-names = "spi3";
                };
  
index 223993fb17c0f6c06c6c77d7eecd07c298e32d45..79a93f5f8a6f6e68ac67b2c1a4e7f2a9b076785d 100644 (file)
@@ -8,11 +8,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index a0d18b2..1cced70 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -470,7 +470,7 @@
+@@ -467,7 +467,7 @@
                        #clock-cells = <0>;
                        compatible = "allwinner,sun4i-a10-mod1-clk";
                        reg = <0x01c200c0 0x4>;
index a83cda2f73975e5f95531b59e8f7ece52787fbb9..b73884f7c249c44d59c66dd38ac2d0757754b6b0 100644 (file)
@@ -20,8 +20,6 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  create mode 100644 sound/soc/sunxi/Makefile
  create mode 100644 sound/soc/sunxi/sunxi-codec.c
 
-diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig
-index 3ba52da..87dbf48 100644
 --- a/sound/soc/Kconfig
 +++ b/sound/soc/Kconfig
 @@ -53,6 +53,7 @@ source "sound/soc/samsung/Kconfig"
@@ -32,8 +30,6 @@ index 3ba52da..87dbf48 100644
  source "sound/soc/tegra/Kconfig"
  source "sound/soc/txx9/Kconfig"
  source "sound/soc/ux500/Kconfig"
-diff --git a/sound/soc/Makefile b/sound/soc/Makefile
-index 974ba70..39011b8 100644
 --- a/sound/soc/Makefile
 +++ b/sound/soc/Makefile
 @@ -34,6 +34,7 @@ obj-$(CONFIG_SND_SOC)        += samsung/
@@ -44,9 +40,6 @@ index 974ba70..39011b8 100644
  obj-$(CONFIG_SND_SOC) += tegra/
  obj-$(CONFIG_SND_SOC) += txx9/
  obj-$(CONFIG_SND_SOC) += ux500/
-diff --git a/sound/soc/sunxi/Kconfig b/sound/soc/sunxi/Kconfig
-new file mode 100644
-index 0000000..79511ae
 --- /dev/null
 +++ b/sound/soc/sunxi/Kconfig
 @@ -0,0 +1,10 @@
@@ -60,17 +53,11 @@ index 0000000..79511ae
 +      default y
 +
 +endmenu
-diff --git a/sound/soc/sunxi/Makefile b/sound/soc/sunxi/Makefile
-new file mode 100644
-index 0000000..b8950d3
 --- /dev/null
 +++ b/sound/soc/sunxi/Makefile
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_SND_SUNXI_SOC_CODEC) += sunxi-codec.o
 +
-diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c
-new file mode 100644
-index 0000000..67f978e
 --- /dev/null
 +++ b/sound/soc/sunxi/sunxi-codec.c
 @@ -0,0 +1,802 @@
index 120220ce3db670721224a29b22e6d6e598ca947b..b3668ded3d86832c8805c31aae25b9401aa9506e 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  sound/soc/sunxi/sunxi-codec.c | 4 +---
  1 file changed, 1 insertion(+), 3 deletions(-)
 
-diff --git a/sound/soc/sunxi/sunxi-codec.c b/sound/soc/sunxi/sunxi-codec.c
-index 67f978e..77a191b 100644
 --- a/sound/soc/sunxi/sunxi-codec.c
 +++ b/sound/soc/sunxi/sunxi-codec.c
-@@ -215,9 +215,6 @@ static int sunxi_codec_prepare(struct snd_pcm_substream *substream,
+@@ -215,9 +215,6 @@ static int sunxi_codec_prepare(struct sn
                        regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 0x1 << SUNXI_DAC_FIFOC_FIR_VERSION, 0x1 << SUNXI_DAC_FIFOC_FIR_VERSION);
                }
  
@@ -25,7 +23,7 @@ index 67f978e..77a191b 100644
                /* send last sample when DAC FIFO under run */
                regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 0x1 << SUNXI_DAC_FIFOC_SEND_LASAT, 0x0 << SUNXI_DAC_FIFOC_SEND_LASAT);
        } else {
-@@ -329,6 +326,7 @@ static int sunxi_codec_hw_params(struct snd_pcm_substream *substream,
+@@ -329,6 +326,7 @@ static int sunxi_codec_hw_params(struct
                regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 7 << SUNXI_DAC_FIFOC_DAC_FS, hwrate << SUNXI_DAC_FIFOC_DAC_FS);
                regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 1 << SUNXI_DAC_FIFOC_MONO_EN, is_mono << SUNXI_DAC_FIFOC_MONO_EN);
                regmap_update_bits(priv->regmap, SUNXI_DAC_FIFOC, 1 << SUNXI_DAC_FIFOC_TX_SAMPLE_BITS, is_24bit << SUNXI_DAC_FIFOC_TX_SAMPLE_BITS);
index 8500e9dc6daafdf30a7e102740eb394f023d451e..43997e189a1d0eab3b0386521f2910332c2971df 100644 (file)
@@ -11,11 +11,9 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20.dtsi | 12 ++++++++++++
  1 file changed, 12 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
-index 1cced70..a99bbae 100644
 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -1214,6 +1214,18 @@
+@@ -1182,6 +1182,18 @@
                        status = "disabled";
                };
  
index c59f61b57d782676bfffc64842959fd10447e42f..8b4dbe49efeb82c848ac1e97855a14c839c4485a 100644 (file)
@@ -1,7 +1,6 @@
-diff -ruN old/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts new/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
---- old/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts        2015-07-10 18:50:06.000000000 +0200
-+++ new/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts        2015-08-02 11:45:06.000000000 +0200
-@@ -245,3 +245,10 @@
+--- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
++++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
+@@ -302,3 +302,10 @@
        };
  };
  
index 0f54548dcde0c848a44fc235524619d737cff6ad..e296638bf7ec944eaaf29a3b2f6537258385e5b7 100644 (file)
@@ -8,13 +8,11 @@ Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
  arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 7 +++++++
  1 file changed, 7 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-index 39a51d5..5f9f0b9 100644
 --- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
 +++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
-@@ -84,6 +84,13 @@
-       status = "okay";
- };
+@@ -180,6 +180,13 @@
+ #include "axp209.dtsi"
  
 +&codec {
 +      routing =
index 7dc0b10c0e1475ee6a141ee1fbf9e6be76b19cc7..afa42e1d9c4bbc3019be5ad1d175a4ba4318d309 100644 (file)
@@ -11,13 +11,11 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 7 +++++++
  1 file changed, 7 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-index 4611e2f..d05e06d 100644
 --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
 +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-@@ -105,6 +105,13 @@
-       status = "okay";
- };
+@@ -257,6 +257,13 @@
+ #include "axp209.dtsi"
  
 +&codec {
 +      routing =
index 5fc9e5aa66930889b72dec201989711084c2ca7b..c90156d5ca806c844ef6e65313637123ddca93c0 100644 (file)
@@ -26,9 +26,6 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
  create mode 100644 Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
  create mode 100644 drivers/usb/musb/sunxi.c
 
-diff --git a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
-new file mode 100644
-index 0000000..9254a6c
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
 @@ -0,0 +1,27 @@
@@ -59,8 +56,6 @@ index 0000000..9254a6c
 +              extcon = <&usbphy 0>;
 +              status = "disabled";
 +      };
-diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
-index 39db8b6..37081ed 100644
 --- a/drivers/usb/musb/Kconfig
 +++ b/drivers/usb/musb/Kconfig
 @@ -5,7 +5,7 @@
@@ -97,11 +92,9 @@ index 39db8b6..37081ed 100644
  config USB_MUSB_DAVINCI
        tristate "DaVinci"
        depends on ARCH_DAVINCI_DMx
-diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
-index ba49501..f95befe 100644
 --- a/drivers/usb/musb/Makefile
 +++ b/drivers/usb/musb/Makefile
-@@ -20,6 +20,7 @@ obj-$(CONFIG_USB_MUSB_DA8XX)                 += da8xx.o
+@@ -20,6 +20,7 @@ obj-$(CONFIG_USB_MUSB_DA8XX)                 += da8xx.
  obj-$(CONFIG_USB_MUSB_BLACKFIN)                       += blackfin.o
  obj-$(CONFIG_USB_MUSB_UX500)                  += ux500.o
  obj-$(CONFIG_USB_MUSB_JZ4740)                 += jz4740.o
@@ -109,9 +102,6 @@ index ba49501..f95befe 100644
  
  
  obj-$(CONFIG_USB_MUSB_AM335X_CHILD)           += musb_am335x.o
-diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
-new file mode 100644
-index 0000000..00d7248
 --- /dev/null
 +++ b/drivers/usb/musb/sunxi.c
 @@ -0,0 +1,703 @@
index 374dbc4ddb59d87399fdda4e8f684632a62c8bc3..af958f2b4f3f06fe6f79f470580e2434a99d66a4 100644 (file)
@@ -15,11 +15,9 @@ Signed-off-by: Felipe Balbi <balbi@ti.com>
  drivers/usb/musb/sunxi.c                           | 50 +++++++++++++++++++---
  2 files changed, 46 insertions(+), 7 deletions(-)
 
-diff --git a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
-index 9254a6c..fde180b 100644
 --- a/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
 +++ b/Documentation/devicetree/bindings/usb/allwinner,sun4i-a10-musb.txt
-@@ -2,9 +2,10 @@ Allwinner sun4i A10 musb DRC/OTG controller
+@@ -2,9 +2,10 @@ Allwinner sun4i A10 musb DRC/OTG control
  -------------------------------------------
  
  Required properties:
@@ -31,8 +29,6 @@ index 9254a6c..fde180b 100644
   - interrupts      : interrupt to which the musb controller is connected
   - interrupt-names : must be "mc"
   - phys            : phy specifier for the otg phy
-diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
-index 00d7248..df2f75e 100644
 --- a/drivers/usb/musb/sunxi.c
 +++ b/drivers/usb/musb/sunxi.c
 @@ -26,6 +26,7 @@
@@ -60,7 +56,7 @@ index 00d7248..df2f75e 100644
        struct phy              *phy;
        struct platform_device  *usb_phy;
        struct usb_phy          *xceiv;
-@@ -229,14 +233,22 @@ static int sunxi_musb_init(struct musb *musb)
+@@ -229,14 +233,22 @@ static int sunxi_musb_init(struct musb *
        musb->phy = glue->phy;
        musb->xceiv = glue->xceiv;
  
@@ -86,7 +82,7 @@ index 00d7248..df2f75e 100644
        writeb(SUNXI_MUSB_VEND0_PIO_MODE, musb->mregs + SUNXI_MUSB_VEND0);
  
        /* Register notifier before calling phy_init() */
-@@ -244,7 +256,7 @@ static int sunxi_musb_init(struct musb *musb)
+@@ -244,7 +256,7 @@ static int sunxi_musb_init(struct musb *
                ret = extcon_register_notifier(glue->extcon, EXTCON_USB_HOST,
                                               &glue->host_nb);
                if (ret)
@@ -95,7 +91,7 @@ index 00d7248..df2f75e 100644
        }
  
        ret = phy_init(glue->phy);
-@@ -273,10 +285,14 @@ static int sunxi_musb_init(struct musb *musb)
+@@ -273,10 +285,14 @@ error_unregister_notifier:
        if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE)
                extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST,
                                           &glue->host_nb);
@@ -111,7 +107,7 @@ index 00d7248..df2f75e 100644
        return ret;
  }
  
-@@ -296,8 +312,12 @@ static int sunxi_musb_exit(struct musb *musb)
+@@ -296,8 +312,12 @@ static int sunxi_musb_exit(struct musb *
                extcon_unregister_notifier(glue->extcon, EXTCON_USB_HOST,
                                           &glue->host_nb);
  
@@ -125,7 +121,7 @@ index 00d7248..df2f75e 100644
  
        return 0;
  }
-@@ -617,6 +637,12 @@ static int sunxi_musb_probe(struct platform_device *pdev)
+@@ -617,6 +637,12 @@ static int sunxi_musb_probe(struct platf
        INIT_WORK(&glue->work, sunxi_musb_work);
        glue->host_nb.notifier_call = sunxi_musb_host_notifier;
  
@@ -138,7 +134,7 @@ index 00d7248..df2f75e 100644
        glue->clk = devm_clk_get(&pdev->dev, NULL);
        if (IS_ERR(glue->clk)) {
                dev_err(&pdev->dev, "Error getting clock: %ld\n",
-@@ -624,6 +650,17 @@ static int sunxi_musb_probe(struct platform_device *pdev)
+@@ -624,6 +650,17 @@ static int sunxi_musb_probe(struct platf
                return PTR_ERR(glue->clk);
        }
  
@@ -156,7 +152,7 @@ index 00d7248..df2f75e 100644
        glue->phy = devm_phy_get(&pdev->dev, "usb");
        if (IS_ERR(glue->phy)) {
                if (PTR_ERR(glue->phy) == -EPROBE_DEFER)
-@@ -685,6 +722,7 @@ static int sunxi_musb_remove(struct platform_device *pdev)
+@@ -685,6 +722,7 @@ static int sunxi_musb_remove(struct plat
  
  static const struct of_device_id sunxi_musb_match[] = {
        { .compatible = "allwinner,sun4i-a10-musb", },
index 8a6ac4877c1e23c3ab78e576fca402349231110d..5ce12f3c252b324241bdfb97f590ce9aa8658f23 100644 (file)
@@ -1,8 +1,6 @@
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20.dtsi
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20.dtsi
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20.dtsi
-@@ -679,6 +679,14 @@
+--- a/arch/arm/boot/dts/sun7i-a20.dtsi
++++ b/arch/arm/boot/dts/sun7i-a20.dtsi
+@@ -745,6 +745,14 @@
                        status = "disabled";
                };
  
index 5478e64fc3a95d99a4f4851547058993c8683c2e..ab1879dbc878177eca38f15169b4e28b56370750 100644 (file)
@@ -15,11 +15,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  arch/arm/boot/dts/sun4i-a10.dtsi | 8 ++++++++
  1 file changed, 8 insertions(+)
 
-diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
-index 61c03d1..551e3d1 100644
 --- a/arch/arm/boot/dts/sun4i-a10.dtsi
 +++ b/arch/arm/boot/dts/sun4i-a10.dtsi
-@@ -643,6 +643,14 @@
+@@ -591,6 +591,14 @@
                        status = "disabled";
                };
  
index de5be3ddac44e42053a1f7ebe21316d1224375a0..1b66c9736621f6e1b8f12896b9009c1d1b80c1f4 100644 (file)
@@ -27,11 +27,9 @@ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  create mode 100644 drivers/crypto/sunxi-ss/sun4i-ss-hash.c
  create mode 100644 drivers/crypto/sunxi-ss/sun4i-ss.h
 
-diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
-index 4044125..07bc7aa 100644
 --- a/drivers/crypto/Kconfig
 +++ b/drivers/crypto/Kconfig
-@@ -480,4 +480,21 @@ config CRYPTO_DEV_IMGTEC_HASH
+@@ -460,4 +460,21 @@ config CRYPTO_DEV_IMGTEC_HASH
          hardware hash accelerator. Supporting MD5/SHA1/SHA224/SHA256
          hashing algorithms.
  
@@ -53,26 +51,18 @@ index 4044125..07bc7aa 100644
 +        will be called sun4i-ss.
 +
  endif # CRYPTO_HW
-diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
-index e35c07a..c3ced6f 100644
 --- a/drivers/crypto/Makefile
 +++ b/drivers/crypto/Makefile
-@@ -28,3 +28,4 @@ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/
+@@ -27,3 +27,4 @@ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/
  obj-$(CONFIG_CRYPTO_DEV_QAT) += qat/
  obj-$(CONFIG_CRYPTO_DEV_QCE) += qce/
  obj-$(CONFIG_CRYPTO_DEV_VMX) += vmx/
 +obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sunxi-ss/
-diff --git a/drivers/crypto/sunxi-ss/Makefile b/drivers/crypto/sunxi-ss/Makefile
-new file mode 100644
-index 0000000..8f4c7a2
 --- /dev/null
 +++ b/drivers/crypto/sunxi-ss/Makefile
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sun4i-ss.o
 +sun4i-ss-y += sun4i-ss-core.o sun4i-ss-hash.o sun4i-ss-cipher.o
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
-new file mode 100644
-index 0000000..e070c31
 --- /dev/null
 +++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
 @@ -0,0 +1,542 @@
@@ -618,9 +608,6 @@ index 0000000..e070c31
 +      memcpy(op->key, key, keylen);
 +      return 0;
 +}
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
-new file mode 100644
-index 0000000..0b79b58
 --- /dev/null
 +++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
 @@ -0,0 +1,403 @@
@@ -1027,9 +1014,6 @@ index 0000000..0b79b58
 +MODULE_DESCRIPTION("Allwinner Security System cryptographic accelerator");
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Corentin LABBE <clabbe.montjoie@gmail.com>");
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-hash.c b/drivers/crypto/sunxi-ss/sun4i-ss-hash.c
-new file mode 100644
-index 0000000..ff80314
 --- /dev/null
 +++ b/drivers/crypto/sunxi-ss/sun4i-ss-hash.c
 @@ -0,0 +1,492 @@
@@ -1525,9 +1509,6 @@ index 0000000..ff80314
 +
 +      return sun4i_hash_final(areq);
 +}
-diff --git a/drivers/crypto/sunxi-ss/sun4i-ss.h b/drivers/crypto/sunxi-ss/sun4i-ss.h
-new file mode 100644
-index 0000000..db18b255
 --- /dev/null
 +++ b/drivers/crypto/sunxi-ss/sun4i-ss.h
 @@ -0,0 +1,199 @@
index d47cc0b41632db21cba2da85e558a67afac55429..0322387aa706ccfd863154e1decef3215632a82a 100644 (file)
@@ -10,10 +10,8 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
  arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts  | 11 +++++++++++
  2 files changed, 22 insertions(+)
 
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
++++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
 @@ -71,12 +71,23 @@
                };
  
@@ -38,10 +36,8 @@ Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
                };
  
                usbphy: phy@01c13400 {
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
+--- a/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
++++ b/arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
 @@ -69,12 +69,23 @@
                };
  
index ca09504e3a3f7a96ea7ce5429258ce8f038fbae6..ae5576fa5d6ccb1713be0a46f46b61a2b4584b8a 100644 (file)
@@ -14,10 +14,8 @@ GPIO, but this is not supported in this patch.
  arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 36 ++++++++++++++++++++++++++++++
  1 file changed, 36 insertions(+)
 
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
+--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
++++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
 @@ -88,6 +88,20 @@
                                interrupts = <10 8>; /* PH10 / EINT10 */
                                interrupt-names = "host-wake";
index e60aece1e64627c61b35f0af988c2e1be3c3824d..83de5fd9f34cacc793380cd251c4701aad26cab4 100644 (file)
@@ -1,7 +1,5 @@
-Index: linux-4.1.3/arch/arm/boot/dts/Makefile
-===================================================================
---- linux-4.1.3.orig/arch/arm/boot/dts/Makefile
-+++ linux-4.1.3/arch/arm/boot/dts/Makefile
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
 @@ -554,6 +554,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \
        sun7i-a20-cubietruck.dtb \
        sun7i-a20-hummingbird.dtb \
@@ -10,10 +8,8 @@ Index: linux-4.1.3/arch/arm/boot/dts/Makefile
        sun7i-a20-m3.dtb \
        sun7i-a20-olinuxino-lime.dtb \
        sun7i-a20-olinuxino-lime2.dtb \
-Index: linux-4.1.3/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
-===================================================================
 --- /dev/null
-+++ linux-4.1.3/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
++++ b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
 @@ -0,0 +1,235 @@
 +/*
 + * Copyright 2015 Daniel Golle <daniel@makrotopia.org>