Changeset 29440


Ignore:
Timestamp:
2011-12-05T15:20:44+01:00 (4 years ago)
Author:
nbd
Message:

ar71xx: move multi-m25p80 concat code from wzr-hp-ag300h mach code to dev-m25p80.c, other buffalo routers use it as well

Location:
trunk/target/linux/ar71xx/files/arch/mips/ar71xx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/dev-m25p80.c

    r18817 r29440  
    1010#include <linux/spi/spi.h> 
    1111#include <linux/spi/flash.h> 
     12#include <linux/mtd/mtd.h> 
     13#include <linux/mtd/partitions.h> 
     14#include <linux/mtd/concat.h> 
    1215 
    1316#include "devices.h" 
     
    2023                .max_speed_hz   = 25000000, 
    2124                .modalias       = "m25p80", 
     25        }, 
     26        { 
     27                .bus_num        = 0, 
     28                .chip_select    = 1, 
     29                .max_speed_hz   = 25000000, 
     30                .modalias   = "m25p80", 
    2231        } 
    2332}; 
     
    2635{ 
    2736        ar71xx_spi_info[0].platform_data = pdata; 
    28         ar71xx_add_device_spi(NULL, ar71xx_spi_info, 
    29                               ARRAY_SIZE(ar71xx_spi_info)); 
     37        ar71xx_add_device_spi(NULL, ar71xx_spi_info, 1); 
    3038} 
     39 
     40static struct flash_platform_data *multi_pdata; 
     41 
     42static struct mtd_info *concat_devs[2] = { NULL, NULL }; 
     43static struct work_struct mtd_concat_work; 
     44 
     45static void mtd_concat_add_work(struct work_struct *work) 
     46{ 
     47        struct mtd_info *mtd; 
     48 
     49        mtd = mtd_concat_create(concat_devs, ARRAY_SIZE(concat_devs), "flash"); 
     50 
     51#ifdef CONFIG_MTD_PARTITIONS 
     52        add_mtd_partitions(mtd, multi_pdata->parts, multi_pdata->nr_parts); 
     53#else 
     54        add_mtd_device(mtd); 
     55#endif 
     56} 
     57 
     58static void mtd_concat_add(struct mtd_info *mtd) 
     59{ 
     60        static bool registered = false; 
     61 
     62        if (registered) 
     63                return; 
     64 
     65        if (!strcmp(mtd->name, "spi0.0")) 
     66                concat_devs[0] = mtd; 
     67        else if (!strcmp(mtd->name, "spi0.1")) 
     68                concat_devs[1] = mtd; 
     69        else 
     70                return; 
     71 
     72        if (!concat_devs[0] || !concat_devs[1]) 
     73                return; 
     74 
     75        registered = true; 
     76        INIT_WORK(&mtd_concat_work, mtd_concat_add_work); 
     77        schedule_work(&mtd_concat_work); 
     78} 
     79 
     80static void mtd_concat_remove(struct mtd_info *mtd) 
     81{ 
     82} 
     83 
     84static void add_mtd_concat_notifier(void) 
     85{ 
     86        static struct mtd_notifier not = { 
     87                .add = mtd_concat_add, 
     88                .remove = mtd_concat_remove, 
     89        }; 
     90 
     91        register_mtd_user(&not); 
     92} 
     93 
     94 
     95void __init ar71xx_add_device_m25p80_multi(struct flash_platform_data *pdata) 
     96{ 
     97        multi_pdata = pdata; 
     98        add_mtd_concat_notifier(); 
     99        ar71xx_add_device_spi(NULL, ar71xx_spi_info, ARRAY_SIZE(ar71xx_spi_info)); 
     100} 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/dev-m25p80.h

    r18817 r29440  
    1313 
    1414void ar71xx_add_device_m25p80(struct flash_platform_data *pdata) __init; 
     15void ar71xx_add_device_m25p80_multi(struct flash_platform_data *pdata) __init; 
    1516 
    1617#endif /* _AR71XX_DEV_M25P80_H */ 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wzr-hp-ag300h.c

    r28982 r29440  
    1212#include <linux/mtd/mtd.h> 
    1313#include <linux/mtd/partitions.h> 
    14 #include <linux/mtd/concat.h> 
    1514 
    1615#include <asm/mips_machine.h> 
     
    6968#endif /* CONFIG_MTD_PARTITIONS */ 
    7069 
    71 static struct mtd_info *concat_devs[2] = { NULL, NULL }; 
    72 static struct work_struct mtd_concat_work; 
    73  
    74 static void mtd_concat_add_work(struct work_struct *work) 
    75 { 
    76         struct mtd_info *mtd; 
    77  
    78         mtd = mtd_concat_create(concat_devs, ARRAY_SIZE(concat_devs), "flash"); 
    79  
     70static struct flash_platform_data wzrhpag300h_flash_data = { 
    8071#ifdef CONFIG_MTD_PARTITIONS 
    81         add_mtd_partitions(mtd, wzrhpag300h_flash_partitions, 
    82                            ARRAY_SIZE(wzrhpag300h_flash_partitions)); 
    83 #else 
    84         add_mtd_device(mtd); 
     72        .parts      = wzrhpag300h_flash_partitions, 
     73        .nr_parts   = ARRAY_SIZE(wzrhpag300h_flash_partitions), 
    8574#endif 
    86 } 
    87  
    88 static void mtd_concat_add(struct mtd_info *mtd) 
    89 { 
    90         static bool registered = false; 
    91  
    92         if (registered) 
    93                 return; 
    94  
    95         if (!strcmp(mtd->name, "spi0.0")) 
    96                 concat_devs[0] = mtd; 
    97         else if (!strcmp(mtd->name, "spi0.1")) 
    98                 concat_devs[1] = mtd; 
    99         else 
    100                 return; 
    101  
    102         if (!concat_devs[0] || !concat_devs[1]) 
    103                 return; 
    104  
    105         registered = true; 
    106         INIT_WORK(&mtd_concat_work, mtd_concat_add_work); 
    107         schedule_work(&mtd_concat_work); 
    108 } 
    109  
    110 static void mtd_concat_remove(struct mtd_info *mtd) 
    111 { 
    112 } 
    113  
    114 static void add_mtd_concat_notifier(void) 
    115 { 
    116         static struct mtd_notifier not = { 
    117                 .add = mtd_concat_add, 
    118                 .remove = mtd_concat_remove, 
    119         }; 
    120  
    121         register_mtd_user(&not); 
    122 } 
     75}; 
    12376 
    12477static struct gpio_led wzrhpag300h_leds_gpio[] __initdata = { 
     
    170123}; 
    171124 
    172 static struct spi_board_info ar71xx_spi_info[] = { 
    173         { 
    174                 .bus_num        = 0, 
    175                 .chip_select    = 0, 
    176                 .max_speed_hz   = 25000000, 
    177                 .modalias   = "m25p80", 
    178         }, 
    179         { 
    180                 .bus_num        = 0, 
    181                 .chip_select    = 1, 
    182                 .max_speed_hz   = 25000000, 
    183                 .modalias   = "m25p80", 
    184         } 
    185 }; 
    186  
    187125static void __init wzrhpag300h_setup(void) 
    188126{ 
     
    219157                                         wzrhpag300h_gpio_keys); 
    220158 
    221         ar71xx_add_device_spi(NULL, ar71xx_spi_info, 
    222                               ARRAY_SIZE(ar71xx_spi_info)); 
    223  
    224         add_mtd_concat_notifier(); 
     159        ar71xx_add_device_m25p80_multi(&wzrhpag300h_flash_data); 
    225160 
    226161        ap94_pci_init(eeprom1, mac1, eeprom2, mac2); 
Note: See TracChangeset for help on using the changeset viewer.