Changeset 22863


Ignore:
Timestamp:
2010-08-31T22:13:47+02:00 (7 years ago)
Author:
juhosg
Message:

ar71xx: rewrite SPI drivers for the RB4xx boards

  • add a new SPI controller driver
  • add SPI driver for the CPLD chip
  • convert the NAND driver
  • enable the mikroSD slot
  • enable more LEDs
Location:
trunk/target/linux/ar71xx
Files:
15 added
12 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/config-2.6.32

    r22353 r22863  
    225225CONFIG_SPI_MASTER=y 
    226226CONFIG_SPI_PB44=y 
     227# CONFIG_SPI_RB4XX is not set 
     228# CONFIG_SPI_RB4XX_CPLD is not set 
    227229# CONFIG_SPI_SPIDEV is not set 
    228230# CONFIG_SPI_VSC7385 is not set 
  • trunk/target/linux/ar71xx/config-2.6.33

    r22353 r22863  
    234234CONFIG_SPI_MASTER=y 
    235235CONFIG_SPI_PB44=y 
     236# CONFIG_SPI_RB4XX is not set 
     237# CONFIG_SPI_RB4XX_CPLD is not set 
    236238# CONFIG_SPI_SPIDEV is not set 
    237239# CONFIG_SPI_VSC7385 is not set 
  • trunk/target/linux/ar71xx/config-2.6.34

    r22701 r22863  
    236236CONFIG_SPI_MASTER=y 
    237237CONFIG_SPI_PB44=y 
     238# CONFIG_SPI_RB4XX is not set 
     239# CONFIG_SPI_RB4XX_CPLD is not set 
    238240# CONFIG_SPI_SPIDEV is not set 
    239241# CONFIG_SPI_VSC7385 is not set 
  • trunk/target/linux/ar71xx/config-2.6.35

    r22701 r22863  
    236236CONFIG_SPI_MASTER=y 
    237237CONFIG_SPI_PB44=y 
     238# CONFIG_SPI_RB4XX is not set 
     239# CONFIG_SPI_RB4XX_CPLD is not set 
    238240# CONFIG_SPI_SPIDEV is not set 
    239241# CONFIG_SPI_VSC7385 is not set 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb4xx.c

    r22700 r22863  
    22 *  MikroTik RouterBOARD 4xx series support 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
     
    1616#include <linux/spi/flash.h> 
    1717#include <linux/spi/mmc_spi.h> 
     18#include <linux/mtd/mtd.h> 
     19#include <linux/mtd/partitions.h> 
    1820 
    1921#include <asm/mach-ar71xx/ar71xx.h> 
    2022#include <asm/mach-ar71xx/pci.h> 
     23#include <asm/mach-ar71xx/rb4xx_cpld.h> 
    2124 
    2225#include "machtype.h" 
     
    2932#define RB4XX_GPIO_RESET_SWITCH 7 
    3033 
     34#define RB4XX_GPIO_CPLD_BASE    32 
     35#define RB4XX_GPIO_CPLD_LED1    (RB4XX_GPIO_CPLD_BASE + CPLD_GPIO_nLED1) 
     36#define RB4XX_GPIO_CPLD_LED2    (RB4XX_GPIO_CPLD_BASE + CPLD_GPIO_nLED2) 
     37#define RB4XX_GPIO_CPLD_LED3    (RB4XX_GPIO_CPLD_BASE + CPLD_GPIO_nLED3) 
     38#define RB4XX_GPIO_CPLD_LED4    (RB4XX_GPIO_CPLD_BASE + CPLD_GPIO_nLED4) 
     39#define RB4XX_GPIO_CPLD_LED5    (RB4XX_GPIO_CPLD_BASE + CPLD_GPIO_nLED5) 
     40 
    3141#define RB4XX_BUTTONS_POLL_INTERVAL     20 
    3242 
     
    3545                .name           = "rb4xx:yellow:user", 
    3646                .gpio           = RB4XX_GPIO_USER_LED, 
     47                .active_low     = 0, 
     48        }, { 
     49                .name           = "rb4xx:green:led1", 
     50                .gpio           = RB4XX_GPIO_CPLD_LED1, 
     51                .active_low     = 1, 
     52        }, { 
     53                .name           = "rb4xx:green:led2", 
     54                .gpio           = RB4XX_GPIO_CPLD_LED2, 
     55                .active_low     = 1, 
     56        }, { 
     57                .name           = "rb4xx:green:led3", 
     58                .gpio           = RB4XX_GPIO_CPLD_LED3, 
     59                .active_low     = 1, 
     60        }, { 
     61                .name           = "rb4xx:green:led4", 
     62                .gpio           = RB4XX_GPIO_CPLD_LED4, 
     63                .active_low     = 1, 
     64        }, { 
     65                .name           = "rb4xx:green:led5", 
     66                .gpio           = RB4XX_GPIO_CPLD_LED5, 
    3767                .active_low     = 0, 
    3868        }, 
     
    79109}; 
    80110 
    81 #if 0 
    82 /* 
    83  * SPI device support is experimental 
    84  */ 
     111#ifdef CONFIG_MTD_PARTITIONS 
     112static struct mtd_partition rb4xx_partitions[] = { 
     113        { 
     114                .name           = "routerboot", 
     115                .offset         = 0, 
     116                .size           = 0x0b000, 
     117                .mask_flags     = MTD_WRITEABLE, 
     118        }, { 
     119                .name           = "hard_config", 
     120                .offset         = 0x0b000, 
     121                .size           = 0x01000, 
     122                .mask_flags     = MTD_WRITEABLE, 
     123        }, { 
     124                .name           = "bios", 
     125                .offset         = 0x0d000, 
     126                .size           = 0x02000, 
     127                .mask_flags     = MTD_WRITEABLE, 
     128        }, { 
     129                .name           = "soft_config", 
     130                .offset         = 0x0f000, 
     131                .size           = 0x01000, 
     132        } 
     133}; 
     134#define rb4xx_num_partitions    ARRAY_SIZE(rb4xx_partitions) 
     135#else /* CONFIG_MTD_PARTITIONS */ 
     136#define rb4xx_partitions        NULL 
     137#define rb4xx_num_partitions    0 
     138#endif /* CONFIG_MTD_PARTITIONS */ 
     139 
    85140static struct flash_platform_data rb4xx_flash_data = { 
    86141        .type   = "pm25lv512", 
     142        .parts  = rb4xx_partitions, 
     143        .nr_parts = rb4xx_num_partitions, 
     144}; 
     145 
     146static struct rb4xx_cpld_platform_data rb4xx_cpld_data = { 
     147        .gpio_base      = RB4XX_GPIO_CPLD_BASE, 
     148}; 
     149 
     150static struct mmc_spi_platform_data rb4xx_mmc_data = { 
     151        .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34, 
    87152}; 
    88153 
     
    94159                .modalias       = "m25p80", 
    95160                .platform_data  = &rb4xx_flash_data, 
    96         } 
    97 }; 
    98  
    99 static struct mmc_spi_platform_data rb433_mmc_data = { 
    100         .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34, 
    101 }; 
    102  
    103 static struct spi_board_info rb433_spi_info[] = { 
    104         { 
     161        }, { 
    105162                .bus_num        = 0, 
    106                 .chip_select    = 0, 
     163                .chip_select    = 1, 
    107164                .max_speed_hz   = 25000000, 
    108                 .modalias       = "m25p80", 
    109                 .platform_data  = &rb433_flash_data, 
    110         }, { 
     165                .modalias       = "spi-rb4xx-cpld", 
     166                .platform_data  = &rb4xx_cpld_data, 
     167        } 
     168}; 
     169 
     170static struct spi_board_info rb4xx_microsd_info[] = { 
     171        { 
    111172                .bus_num        = 0, 
    112173                .chip_select    = 2, 
    113174                .max_speed_hz   = 25000000, 
    114175                .modalias       = "mmc_spi", 
    115                 .platform_data  = &rb433_mmc_data, 
    116         } 
    117 }; 
    118  
    119 static u32 rb433_spi_get_ioc_base(u8 chip_select, int cs_high, int is_on) 
    120 { 
    121         u32 ret; 
    122  
    123         if (is_on == AR71XX_SPI_CS_INACTIVE) { 
    124                 ret = SPI_IOC_CS0 | SPI_IOC_CS1; 
    125         } else { 
    126                 if (cs_high) { 
    127                         ret = SPI_IOC_CS0 | SPI_IOC_CS1; 
    128                 } else { 
    129                         if ((chip_select ^ 2) == 0) 
    130                                 ret = SPI_IOC_CS1 ^ (SPI_IOC_CS0 | SPI_IOC_CS1); 
    131                         else 
    132                                 ret = SPI_IOC_CS0 ^ (SPI_IOC_CS0 | SPI_IOC_CS1); 
    133                 } 
    134         } 
    135  
    136         return ret; 
    137 } 
    138  
    139 struct ar71xx_spi_platform_data rb433_spi_data = { 
    140         .bus_num                = 0, 
    141         .num_chipselect         = 3, 
    142         .get_ioc_base           = rb433_spi_get_ioc_base, 
    143 }; 
    144  
    145 static void rb4xx_add_device_spi(void) 
    146 { 
    147         ar71xx_add_device_spi(NULL, rb4xx_spi_info, ARRAY_SIZE(rb4xx_spi_info)); 
    148 } 
    149  
    150 static void rb433_add_device_spi(void) 
    151 { 
    152         ar71xx_add_device_spi(&rb433_spi_data, rb433_spi_info, 
    153                                 ARRAY_SIZE(rb433_spi_info)); 
    154 } 
    155 #else 
    156 static inline void rb4xx_add_device_spi(void) {} 
    157 static inline void rb433_add_device_spi(void) {} 
    158 #endif 
     176                .platform_data  = &rb4xx_mmc_data, 
     177        } 
     178}; 
     179 
     180 
     181static struct resource rb4xx_spi_resources[] = { 
     182        { 
     183                .start  = AR71XX_SPI_BASE, 
     184                .end    = AR71XX_SPI_BASE + AR71XX_SPI_SIZE - 1, 
     185                .flags  = IORESOURCE_MEM, 
     186        }, 
     187}; 
     188 
     189static struct platform_device rb4xx_spi_device = { 
     190        .name           = "rb4xx-spi", 
     191        .id             = -1, 
     192        .resource       = rb4xx_spi_resources, 
     193        .num_resources  = ARRAY_SIZE(rb4xx_spi_resources), 
     194}; 
    159195 
    160196static void __init rb4xx_generic_setup(void) 
     
    170206                                        rb4xx_gpio_buttons); 
    171207 
     208        spi_register_board_info(rb4xx_spi_info, ARRAY_SIZE(rb4xx_spi_info)); 
     209        platform_device_register(&rb4xx_spi_device); 
    172210        platform_device_register(&rb4xx_nand_device); 
    173211} 
     
    176214{ 
    177215        rb4xx_generic_setup(); 
    178         rb4xx_add_device_spi(); 
     216        spi_register_board_info(rb4xx_microsd_info, 
     217                                ARRAY_SIZE(rb4xx_microsd_info)); 
    179218 
    180219        ar71xx_add_device_mdio(0xfffffffc); 
     
    208247{ 
    209248        rb4xx_generic_setup(); 
    210         rb433_add_device_spi(); 
     249        spi_register_board_info(rb4xx_microsd_info, 
     250                                ARRAY_SIZE(rb4xx_microsd_info)); 
    211251 
    212252        ar71xx_add_device_mdio(~RB433_MDIO_PHYMASK); 
     
    245285{ 
    246286        rb4xx_generic_setup(); 
    247         rb4xx_add_device_spi(); 
    248  
    249287        ar71xx_add_device_mdio(~RB450_MDIO_PHYMASK); 
    250288 
     
    272310{ 
    273311        rb450_generic_setup(1); 
     312        spi_register_board_info(rb4xx_microsd_info, 
     313                                ARRAY_SIZE(rb4xx_microsd_info)); 
    274314} 
    275315 
     
    280320{ 
    281321        rb4xx_generic_setup(); 
    282         rb4xx_add_device_spi(); 
    283322 
    284323        ar71xx_add_device_mdio(0x3fffff00); 
  • trunk/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c

    r21736 r22863  
    22 *  NAND flash driver for the MikroTik RouterBoard 4xx series 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
     
    2424 
    2525#include <asm/mach-ar71xx/ar71xx.h> 
     26#include <asm/mach-ar71xx/rb4xx_cpld.h> 
    2627 
    2728#define DRV_NAME        "rb4xx-nand" 
    28 #define DRV_VERSION     "0.1.10" 
     29#define DRV_VERSION     "0.2.0" 
    2930#define DRV_DESC        "NAND flash driver for RouterBoard 4xx series" 
    3031 
    31 #define USE_FAST_READ   1 
    32 #define USE_FAST_WRITE  1 
    33 #undef RB4XX_NAND_DEBUG 
    34  
    35 #ifdef RB4XX_NAND_DEBUG 
    36 #define DBG(fmt, arg...)        printk(KERN_DEBUG DRV_NAME ": " fmt, ## arg) 
    37 #else 
    38 #define DBG(fmt, arg...)        do {} while (0) 
    39 #endif 
    40  
    41 #define RB4XX_NAND_GPIO_RDY     5 
    42 #define RB4XX_FLASH_HZ          33333334 
    43 #define RB4XX_NAND_HZ           33333334 
    44  
    45 #define SPI_CTRL_FASTEST        0x40 
    46 #define SPI_CTRL_SAFE           0x43    /* 25 MHz for AHB 200 MHz */ 
    47 #define SBIT_IOC_BASE           SPI_IOC_CS1 
    48 #define SBIT_IOC_DO_SHIFT       0 
    49 #define SBIT_IOC_DO             (1u << SBIT_IOC_DO_SHIFT) 
    50 #define SBIT_IOC_DO2_SHIFT      18 
    51 #define SBIT_IOC_DO2            (1u << SBIT_IOC_DO2_SHIFT) 
    52  
    53 #define CPLD_CMD_WRITE_MULT     0x08    /* send cmd, n x send data, read data */ 
    54 #define CPLD_CMD_WRITE_CFG      0x09    /* send cmd, n x send cfg */ 
    55 #define CPLD_CMD_READ_MULT      0x0a    /* send cmd, send idle, n x read data */ 
    56 #define CPLD_CMD_READ_FAST      0x0b    /* send cmd, 4 x idle, n x read data */ 
    57  
    58 #define CFG_BIT_nCE     0x80 
    59 #define CFG_BIT_CLE     0x40 
    60 #define CFG_BIT_ALE     0x20 
    61 #define CFG_BIT_FAN     0x10 
    62 #define CFG_BIT_nLED4   0x08 
    63 #define CFG_BIT_nLED3   0x04 
    64 #define CFG_BIT_nLED2   0x02 
    65 #define CFG_BIT_nLED1   0x01 
    66  
    67 #define CFG_BIT_nLEDS \ 
    68         (CFG_BIT_nLED1 | CFG_BIT_nLED2 | CFG_BIT_nLED3 | CFG_BIT_nLED4) 
     32#define RB4XX_NAND_GPIO_READY   5 
     33#define RB4XX_NAND_GPIO_ALE     37 
     34#define RB4XX_NAND_GPIO_CLE     38 
     35#define RB4XX_NAND_GPIO_NCE     39 
    6936 
    7037struct rb4xx_nand_info { 
     
    10370}; 
    10471 
    105 #if USE_FAST_READ 
    106 #define SPI_NDATA_BASE  0x00800000 
    107 static unsigned spi_ctrl_fread = SPI_CTRL_SAFE; 
    108 static unsigned spi_ctrl_flash = SPI_CTRL_SAFE; 
    109 extern unsigned mips_hpt_frequency; 
    110 #endif 
    111  
    112 static inline unsigned rb4xx_spi_rreg(unsigned r) 
    113 { 
    114         return __raw_readl((void * __iomem)(KSEG1ADDR(AR71XX_SPI_BASE) + r)); 
    115 } 
    116  
    117 static inline void rb4xx_spi_wreg(unsigned r, unsigned v) 
    118 { 
    119         __raw_writel(v, (void * __iomem)(KSEG1ADDR(AR71XX_SPI_BASE) + r)); 
    120 } 
    121  
    122 static inline void do_spi_clk(int bit) 
    123 { 
    124         unsigned bval = SBIT_IOC_BASE | (bit & 1); 
    125  
    126         rb4xx_spi_wreg(SPI_REG_IOC, bval); 
    127         rb4xx_spi_wreg(SPI_REG_IOC, bval | SPI_IOC_CLK); 
    128 } 
    129  
    130 static void do_spi_byte(uint8_t byte) 
    131 { 
    132         do_spi_clk(byte >> 7); 
    133         do_spi_clk(byte >> 6); 
    134         do_spi_clk(byte >> 5); 
    135         do_spi_clk(byte >> 4); 
    136         do_spi_clk(byte >> 3); 
    137         do_spi_clk(byte >> 2); 
    138         do_spi_clk(byte >> 1); 
    139         do_spi_clk(byte); 
    140  
    141         DBG("spi_byte sent 0x%02x got 0x%x\n", 
    142                                         byte, rb4xx_spi_rreg(SPI_REG_RDS)); 
    143 } 
    144  
    145 #if USE_FAST_WRITE 
    146 static inline void do_spi_clk_fast(int bit1, int bit2) 
    147 { 
    148         unsigned bval = (SBIT_IOC_BASE | 
    149                         ((bit1 << SBIT_IOC_DO_SHIFT) & SBIT_IOC_DO) | 
    150                         ((bit2 << SBIT_IOC_DO2_SHIFT) & SBIT_IOC_DO2)); 
    151  
    152         rb4xx_spi_wreg(SPI_REG_IOC, bval); 
    153         rb4xx_spi_wreg(SPI_REG_IOC, bval | SPI_IOC_CLK); 
    154 } 
    155  
    156 static inline void do_spi_byte_fast(uint8_t byte) 
    157 { 
    158         do_spi_clk_fast(byte >> 7, byte >> 6); 
    159         do_spi_clk_fast(byte >> 5, byte >> 4); 
    160         do_spi_clk_fast(byte >> 3, byte >> 2); 
    161         do_spi_clk_fast(byte >> 1, byte >> 0); 
    162  
    163         DBG("spi_byte_fast sent 0x%02x got 0x%x\n", 
    164                                         byte, rb4xx_spi_rreg(SPI_REG_RDS)); 
    165 } 
    166 #else 
    167 static inline void do_spi_byte_fast(uint8_t byte) 
    168 { 
    169         do_spi_byte(byte); 
    170 } 
    171 #endif /* USE_FAST_WRITE */ 
    172  
    173 static int do_spi_cmd(unsigned cmd, unsigned sendCnt, const uint8_t *sendData, 
    174                 unsigned recvCnt, uint8_t *recvData, 
    175                 const uint8_t *verifyData, int fastWrite) 
    176 { 
    177         unsigned i; 
    178  
    179         DBG("SPI cmd 0x%x send %u recv %u\n", cmd, sendCnt, recvCnt); 
    180  
    181         rb4xx_spi_wreg(SPI_REG_FS, SPI_FS_GPIO); 
    182         rb4xx_spi_wreg(SPI_REG_CTRL, SPI_CTRL_FASTEST); 
    183  
    184         do_spi_byte(cmd); 
    185 #if 0 
    186         if (cmd == CPLD_CMD_READ_FAST) { 
    187                 do_spi_byte(0x80); 
    188                 do_spi_byte(0); 
    189                 do_spi_byte(0); 
    190         } 
    191 #endif 
    192         for (i = 0; i < sendCnt; ++i) { 
    193                 if (fastWrite) 
    194                         do_spi_byte_fast(sendData[i]); 
    195                 else 
    196                         do_spi_byte(sendData[i]); 
    197         } 
    198  
    199         for (i = 0; i < recvCnt; ++i) { 
    200                 if (fastWrite) 
    201                         do_spi_byte_fast(0); 
    202                 else 
    203                         do_spi_byte(0); 
    204  
    205                 if (recvData) { 
    206                         recvData[i] = rb4xx_spi_rreg(SPI_REG_RDS) & 0xff; 
    207                 } else if (verifyData) { 
    208                         if (verifyData[i] != (rb4xx_spi_rreg(SPI_REG_RDS) 
    209                                                          & 0xff)) 
    210                                 break; 
    211                 } 
    212         } 
    213  
    214         rb4xx_spi_wreg(SPI_REG_IOC, SBIT_IOC_BASE | SPI_IOC_CS0); 
    215         rb4xx_spi_wreg(SPI_REG_CTRL, spi_ctrl_flash); 
    216         rb4xx_spi_wreg(SPI_REG_FS, 0); 
    217  
    218         return i == recvCnt; 
    219 } 
    220  
    221 static int got_write = 1; 
    222  
    223 static void rb4xx_nand_write_data(const uint8_t *byte, unsigned cnt) 
    224 { 
    225         do_spi_cmd(CPLD_CMD_WRITE_MULT, cnt, byte, 1, NULL, NULL, 1); 
    226         got_write = 1; 
    227 } 
    228  
    229 static void rb4xx_nand_write_byte(uint8_t byte) 
    230 { 
    231         rb4xx_nand_write_data(&byte, 1); 
    232 } 
    233  
    234 #if USE_FAST_READ 
    235 static uint8_t *rb4xx_nand_read_getaddr(unsigned cnt) 
    236 { 
    237         static unsigned nboffset = 0x100000; 
    238         unsigned addr; 
    239  
    240         if (got_write) { 
    241                 nboffset = (nboffset + 31) & ~31; 
    242                 if (nboffset >= 0x100000)       /* 1MB */ 
    243                         nboffset = 0; 
    244  
    245                 got_write = 0; 
    246                 rb4xx_spi_wreg(SPI_REG_FS, SPI_FS_GPIO); 
    247                 rb4xx_spi_wreg(SPI_REG_CTRL, spi_ctrl_fread); 
    248                 rb4xx_spi_wreg(SPI_REG_FS, 0); 
    249         } 
    250  
    251         addr = KSEG1ADDR(AR71XX_SPI_BASE + SPI_NDATA_BASE) + nboffset; 
    252         DBG("rb4xx_nand_read_getaddr 0x%x cnt 0x%x\n", addr, cnt); 
    253  
    254         nboffset += cnt; 
    255         return (uint8_t *)addr; 
    256 } 
    257  
    258 static void rb4xx_nand_read_data(uint8_t *buf, unsigned cnt) 
    259 { 
    260         unsigned size32 = cnt & ~31; 
    261         unsigned remain = cnt & 31; 
    262  
    263         if (size32) { 
    264                 uint8_t *addr = rb4xx_nand_read_getaddr(size32); 
    265                 memcpy(buf, (void *)addr, size32); 
    266         } 
    267  
    268         if (remain) { 
    269                 do_spi_cmd(CPLD_CMD_READ_MULT, 1, buf, remain, 
    270                            buf + size32, NULL, 0); 
    271         } 
    272 } 
    273  
    274 static int rb4xx_nand_verify_data(const uint8_t *buf, unsigned cnt) 
    275 { 
    276         unsigned size32 = cnt & ~31; 
    277         unsigned remain = cnt & 31; 
    278  
    279         if (size32) { 
    280                 uint8_t *addr = rb4xx_nand_read_getaddr(size32); 
    281                 if (memcmp(buf, (void *)addr, size32) != 0) 
    282                         return 0; 
    283         } 
    284  
    285         if (remain) { 
    286                 return do_spi_cmd(CPLD_CMD_READ_MULT, 1, buf, remain, 
    287                                   NULL, buf + size32, 0); 
    288         } 
    289         return 1; 
    290 } 
    291 #else /* USE_FAST_READ */ 
    292 static void rb4xx_nand_read_data(uint8_t *buf, unsigned cnt) 
    293 { 
    294         do_spi_cmd(CPLD_CMD_READ_MULT, 1, buf, cnt, buf, NULL, 0); 
    295 } 
    296  
    297 static int rb4xx_nand_verify_data(const uint8_t *buf, unsigned cnt) 
    298 { 
    299         return do_spi_cmd(CPLD_CMD_READ_MULT, 1, buf, cnt, NULL, buf, 0); 
    300 } 
    301 #endif /* USE_FAST_READ */ 
    302  
    303 static void rb4xx_nand_write_cfg(uint8_t byte) 
    304 { 
    305         do_spi_cmd(CPLD_CMD_WRITE_CFG, 1, &byte, 0, NULL, NULL, 0); 
    306         got_write = 1; 
    307 } 
    308  
    30972static int rb4xx_nand_dev_ready(struct mtd_info *mtd) 
    31073{ 
    311         return gpio_get_value(RB4XX_NAND_GPIO_RDY); 
     74        return gpio_get_value(RB4XX_NAND_GPIO_READY); 
     75} 
     76 
     77static void rb4xx_nand_write_cmd(unsigned char cmd) 
     78{ 
     79        unsigned char data = cmd; 
     80        int err; 
     81 
     82        err = rb4xx_cpld_write(&data, 1); 
     83        if (err) 
     84                pr_err("rb4xx_nand: write cmd failed, err=%d\n", err); 
    31285} 
    31386 
     
    31689{ 
    31790        if (ctrl & NAND_CTRL_CHANGE) { 
    318                 uint8_t cfg = CFG_BIT_nLEDS; 
    319  
    320                 cfg |= (ctrl & NAND_CLE) ? CFG_BIT_CLE : 0; 
    321                 cfg |= (ctrl & NAND_ALE) ? CFG_BIT_ALE : 0; 
    322                 cfg |= (ctrl & NAND_NCE) ? 0 : CFG_BIT_nCE; 
    323  
    324                 rb4xx_nand_write_cfg(cfg); 
     91                gpio_set_value(RB4XX_NAND_GPIO_CLE, (ctrl & NAND_CLE) ? 1 : 0); 
     92                gpio_set_value(RB4XX_NAND_GPIO_ALE, (ctrl & NAND_ALE) ? 1 : 0); 
     93                gpio_set_value(RB4XX_NAND_GPIO_NCE, (ctrl & NAND_NCE) ? 0 : 1); 
    32594        } 
    32695 
    32796        if (cmd != NAND_CMD_NONE) 
    328                 rb4xx_nand_write_byte(cmd); 
    329 } 
    330  
    331 static uint8_t rb4xx_nand_read_byte(struct mtd_info *mtd) 
    332 { 
    333         uint8_t byte = 0; 
    334  
    335         rb4xx_nand_read_data(&byte, 1); 
    336         return byte; 
    337 } 
    338  
    339 static void rb4xx_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, 
     97                rb4xx_nand_write_cmd(cmd); 
     98} 
     99 
     100static unsigned char rb4xx_nand_read_byte(struct mtd_info *mtd) 
     101{ 
     102        unsigned char data = 0; 
     103        int err; 
     104 
     105        err = rb4xx_cpld_read(&data, NULL, 1); 
     106        if (err) { 
     107                pr_err("rb4xx_nand: read data failed, err=%d\n", err); 
     108                data = 0xff; 
     109        } 
     110 
     111        return data; 
     112} 
     113 
     114static void rb4xx_nand_write_buf(struct mtd_info *mtd, const unsigned char *buf, 
     115                                 int len) 
     116{ 
     117        int err; 
     118 
     119        err = rb4xx_cpld_write(buf, len); 
     120        if (err) 
     121                pr_err("rb4xx_nand: write buf failed, err=%d\n", err); 
     122} 
     123 
     124static void rb4xx_nand_read_buf(struct mtd_info *mtd, unsigned char *buf, 
    340125                                int len) 
    341126{ 
    342         rb4xx_nand_write_data(buf, len); 
    343 } 
    344  
    345 static void rb4xx_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, 
    346                                 int len) 
    347 { 
    348         rb4xx_nand_read_data(buf, len); 
    349 } 
    350  
    351 static int rb4xx_nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, 
    352                                 int len) 
    353 { 
    354         if (!rb4xx_nand_verify_data(buf, len)) 
    355                 return -EFAULT; 
    356  
    357         return 0; 
    358 } 
    359  
    360 static unsigned get_spi_ctrl(unsigned hz_max, const char *name) 
    361 { 
    362         unsigned div; 
    363  
    364         div = (ar71xx_ahb_freq - 1) / (2 * hz_max); 
    365         /* 
    366          * CPU has a bug at (div == 0) - first bit read is random 
    367          */ 
    368         if (div == 0) 
    369                 ++div; 
    370  
    371         if (name) { 
    372                 unsigned ahb_khz = (ar71xx_ahb_freq + 500) / 1000; 
    373                 unsigned div_real = 2 * (div + 1); 
    374                 printk(KERN_INFO "%s SPI clock %u kHz (AHB %u kHz / %u)\n", 
    375                        name, 
    376                        ahb_khz / div_real, 
    377                        ahb_khz, div_real); 
    378         } 
    379  
    380         return SPI_CTRL_FASTEST + div; 
     127        int err; 
     128 
     129        err = rb4xx_cpld_read(buf, NULL, len); 
     130        if (err) 
     131                pr_err("rb4xx_nand: read buf failed, err=%d\n", err); 
    381132} 
    382133 
     
    388139        printk(KERN_INFO DRV_DESC " version " DRV_VERSION "\n"); 
    389140 
    390         ret = gpio_request(RB4XX_NAND_GPIO_RDY, "NAND RDY"); 
    391         if (ret) { 
    392                 printk(KERN_ERR "rb4xx-nand: gpio request failed\n"); 
    393                 return ret; 
    394         } 
    395  
    396         ret = gpio_direction_input(RB4XX_NAND_GPIO_RDY); 
    397         if (ret) { 
    398                 printk(KERN_ERR "rb4xx-nand: unable to set input mode " 
    399                                         "on gpio%d\n", RB4XX_NAND_GPIO_RDY); 
    400                 goto err_free_gpio; 
     141        ret = gpio_request(RB4XX_NAND_GPIO_READY, "NAND RDY"); 
     142        if (ret) { 
     143                dev_err(&pdev->dev, "unable to request gpio %d\n", 
     144                        RB4XX_NAND_GPIO_READY); 
     145                goto err; 
     146        } 
     147 
     148        ret = gpio_direction_input(RB4XX_NAND_GPIO_READY); 
     149        if (ret) { 
     150                dev_err(&pdev->dev, "unable to set input mode on gpio %d\n", 
     151                        RB4XX_NAND_GPIO_READY); 
     152                goto err_free_gpio_ready; 
     153        } 
     154 
     155        ret = gpio_request(RB4XX_NAND_GPIO_ALE, "NAND ALE"); 
     156        if (ret) { 
     157                dev_err(&pdev->dev, "unable to request gpio %d\n", 
     158                        RB4XX_NAND_GPIO_ALE); 
     159                goto err_free_gpio_ready; 
     160        } 
     161 
     162        ret = gpio_direction_output(RB4XX_NAND_GPIO_ALE, 0); 
     163        if (ret) { 
     164                dev_err(&pdev->dev, "unable to set output mode on gpio %d\n", 
     165                        RB4XX_NAND_GPIO_ALE); 
     166                goto err_free_gpio_ale; 
     167        } 
     168 
     169        ret = gpio_request(RB4XX_NAND_GPIO_CLE, "NAND CLE"); 
     170        if (ret) { 
     171                dev_err(&pdev->dev, "unable to request gpio %d\n", 
     172                        RB4XX_NAND_GPIO_CLE); 
     173                goto err_free_gpio_ale; 
     174        } 
     175 
     176        ret = gpio_direction_output(RB4XX_NAND_GPIO_CLE, 0); 
     177        if (ret) { 
     178                dev_err(&pdev->dev, "unable to set output mode on gpio %d\n", 
     179                        RB4XX_NAND_GPIO_CLE); 
     180                goto err_free_gpio_cle; 
     181        } 
     182 
     183        ret = gpio_request(RB4XX_NAND_GPIO_NCE, "NAND NCE"); 
     184        if (ret) { 
     185                dev_err(&pdev->dev, "unable to request gpio %d\n", 
     186                        RB4XX_NAND_GPIO_NCE); 
     187                goto err_free_gpio_cle; 
     188        } 
     189 
     190        ret = gpio_direction_output(RB4XX_NAND_GPIO_NCE, 1); 
     191        if (ret) { 
     192                dev_err(&pdev->dev, "unable to set output mode on gpio %d\n", 
     193                        RB4XX_NAND_GPIO_ALE); 
     194                goto err_free_gpio_nce; 
    401195        } 
    402196 
    403197        info = kzalloc(sizeof(*info), GFP_KERNEL); 
    404198        if (!info) { 
    405                 printk(KERN_ERR "rb4xx-nand: no memory for private data\n"); 
     199                dev_err(&pdev->dev, "rb4xx-nand: no memory for private data\n"); 
    406200                ret = -ENOMEM; 
    407                 goto err_free_gpio; 
    408         } 
    409  
    410 #if USE_FAST_READ 
    411         spi_ctrl_fread = get_spi_ctrl(RB4XX_NAND_HZ, "NAND"); 
    412 #endif 
    413         spi_ctrl_flash = get_spi_ctrl(RB4XX_FLASH_HZ, "FLASH"); 
    414  
    415         rb4xx_nand_write_cfg(CFG_BIT_nLEDS | CFG_BIT_nCE); 
     201                goto err_free_gpio_nce; 
     202        } 
    416203 
    417204        info->chip.priv = &info; 
     
    424211        info->chip.write_buf    = rb4xx_nand_write_buf; 
    425212        info->chip.read_buf     = rb4xx_nand_read_buf; 
    426         info->chip.verify_buf   = rb4xx_nand_verify_buf; 
     213//      info->chip.verify_buf   = rb4xx_nand_verify_buf; 
    427214 
    428215        info->chip.chip_delay   = 25; 
     
    458245        return 0; 
    459246 
    460 err_release_nand: 
     247 err_release_nand: 
    461248        nand_release(&info->mtd); 
    462 err_set_drvdata: 
     249 err_set_drvdata: 
    463250        platform_set_drvdata(pdev, NULL); 
    464 err_free_info: 
     251 err_free_info: 
    465252        kfree(info); 
    466 err_free_gpio: 
    467         gpio_free(RB4XX_NAND_GPIO_RDY); 
     253 err_free_gpio_nce: 
     254        gpio_free(RB4XX_NAND_GPIO_NCE); 
     255 err_free_gpio_cle: 
     256        gpio_free(RB4XX_NAND_GPIO_CLE); 
     257 err_free_gpio_ale: 
     258        gpio_free(RB4XX_NAND_GPIO_ALE); 
     259 err_free_gpio_ready: 
     260        gpio_free(RB4XX_NAND_GPIO_READY); 
     261 err: 
    468262        return ret; 
    469263} 
     
    476270        platform_set_drvdata(pdev, NULL); 
    477271        kfree(info); 
     272        gpio_free(RB4XX_NAND_GPIO_NCE); 
     273        gpio_free(RB4XX_NAND_GPIO_CLE); 
     274        gpio_free(RB4XX_NAND_GPIO_ALE); 
     275        gpio_free(RB4XX_NAND_GPIO_READY); 
    478276 
    479277        return 0; 
  • trunk/target/linux/ar71xx/nand/config-default

    r21729 r22863  
    33CONFIG_MTD_NAND_RB4XX=y 
    44CONFIG_MTD_NAND_RB750=y 
     5CONFIG_SPI_RB4XX=y 
     6CONFIG_SPI_RB4XX_CPLD=y 
    57CONFIG_YAFFS_9BYTE_TAGS=y 
    68CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED=y 
  • trunk/target/linux/ar71xx/patches-2.6.32/153-spi-rb4xx-cpld-driver.patch

    r22862 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -296,6 +296,11 @@ config SPI_TLE62X0 
     3@@ -294,6 +294,13 @@ config SPI_TLE62X0 
    44          sysfs interface, with each line presented as a kind of GPIO 
    55          exposing both switch control and diagnostic feedback. 
    66  
    7 +config SPI_VSC7385 
    8 +       tristate "Vitesse VSC7385 ethernet switch driver" 
     7+config SPI_RB4XX_CPLD 
     8+       tristate "MikroTik RB4XX CPLD driver" 
     9+       depends on AR71XX_MACH_RB4XX 
    910+       help 
    10 +         SPI driver for the Vitesse VSC7385 ethernet switch. 
     11+         SPI driver for the Xilinx CPLD chip present on the 
     12+         MikroTik RB4xx boards. 
    1113+ 
    1214 # 
     
    1517--- a/drivers/spi/Makefile 
    1618+++ b/drivers/spi/Makefile 
    17 @@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
     19@@ -39,6 +39,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
     20 #      ... add above this line ... 
    1821  
    1922 # SPI protocol drivers (device/link on bus) 
     23+obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2024 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    21 +obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
    2225 obj-$(CONFIG_SPI_TLE62X0)      += tle62x0.o 
    2326 #      ... add above this line ... 
    24   
  • trunk/target/linux/ar71xx/patches-2.6.32/202-spi_vsc7385_driver.patch

    r18638 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -296,6 +296,11 @@ config SPI_TLE62X0 
    4           sysfs interface, with each line presented as a kind of GPIO 
    5           exposing both switch control and diagnostic feedback. 
     3@@ -309,6 +309,11 @@ config SPI_RB4XX_CPLD 
     4          SPI driver for the Xilinx CPLD chip present on the 
     5          MikroTik RB4xx boards. 
    66  
    77+config SPI_VSC7385 
     
    1515--- a/drivers/spi/Makefile 
    1616+++ b/drivers/spi/Makefile 
    17 @@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
    18   
     17@@ -42,6 +42,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
    1918 # SPI protocol drivers (device/link on bus) 
     19 obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2020 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    2121+obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
  • trunk/target/linux/ar71xx/patches-2.6.33/153-spi-rb4xx-cpld-driver.patch

    r22862 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -296,6 +296,11 @@ config SPI_TLE62X0 
     3@@ -363,6 +363,13 @@ config SPI_TLE62X0 
    44          sysfs interface, with each line presented as a kind of GPIO 
    55          exposing both switch control and diagnostic feedback. 
    66  
    7 +config SPI_VSC7385 
    8 +       tristate "Vitesse VSC7385 ethernet switch driver" 
     7+config SPI_RB4XX_CPLD 
     8+       tristate "MikroTik RB4XX CPLD driver" 
     9+       depends on AR71XX_MACH_RB4XX 
    910+       help 
    10 +         SPI driver for the Vitesse VSC7385 ethernet switch. 
     11+         SPI driver for the Xilinx CPLD chip present on the 
     12+         MikroTik RB4xx boards. 
    1113+ 
    1214 # 
     
    1517--- a/drivers/spi/Makefile 
    1618+++ b/drivers/spi/Makefile 
    17 @@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
     19@@ -53,6 +53,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
     20 #      ... add above this line ... 
    1821  
    1922 # SPI protocol drivers (device/link on bus) 
     23+obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2024 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    21 +obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
    2225 obj-$(CONFIG_SPI_TLE62X0)      += tle62x0.o 
    2326 #      ... add above this line ... 
    24   
  • trunk/target/linux/ar71xx/patches-2.6.33/202-spi_vsc7385_driver.patch

    r19960 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -365,6 +365,11 @@ config SPI_TLE62X0 
    4           sysfs interface, with each line presented as a kind of GPIO 
    5           exposing both switch control and diagnostic feedback. 
     3@@ -378,6 +378,11 @@ config SPI_RB4XX_CPLD 
     4          SPI driver for the Xilinx CPLD chip present on the 
     5          MikroTik RB4xx boards. 
    66  
    77+config SPI_VSC7385 
     
    1515--- a/drivers/spi/Makefile 
    1616+++ b/drivers/spi/Makefile 
    17 @@ -54,6 +54,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
    18   
     17@@ -56,6 +56,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
    1918 # SPI protocol drivers (device/link on bus) 
     19 obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2020 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    2121+obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
  • trunk/target/linux/ar71xx/patches-2.6.34/153-spi-rb4xx-cpld-driver.patch

    r22862 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -296,6 +296,11 @@ config SPI_TLE62X0 
     3@@ -384,6 +384,13 @@ config SPI_TLE62X0 
    44          sysfs interface, with each line presented as a kind of GPIO 
    55          exposing both switch control and diagnostic feedback. 
    66  
    7 +config SPI_VSC7385 
    8 +       tristate "Vitesse VSC7385 ethernet switch driver" 
     7+config SPI_RB4XX_CPLD 
     8+       tristate "MikroTik RB4XX CPLD driver" 
     9+       depends on AR71XX_MACH_RB4XX 
    910+       help 
    10 +         SPI driver for the Vitesse VSC7385 ethernet switch. 
     11+         SPI driver for the Xilinx CPLD chip present on the 
     12+         MikroTik RB4xx boards. 
    1113+ 
    1214 # 
     
    1517--- a/drivers/spi/Makefile 
    1618+++ b/drivers/spi/Makefile 
    17 @@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
     19@@ -56,6 +56,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
     20 #      ... add above this line ... 
    1821  
    1922 # SPI protocol drivers (device/link on bus) 
     23+obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2024 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    21 +obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
    2225 obj-$(CONFIG_SPI_TLE62X0)      += tle62x0.o 
    2326 #      ... add above this line ... 
    24   
  • trunk/target/linux/ar71xx/patches-2.6.34/202-spi_vsc7385_driver.patch

    r21082 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -386,6 +386,11 @@ config SPI_TLE62X0 
    4           sysfs interface, with each line presented as a kind of GPIO 
    5           exposing both switch control and diagnostic feedback. 
     3@@ -399,6 +399,11 @@ config SPI_RB4XX_CPLD 
     4          SPI driver for the Xilinx CPLD chip present on the 
     5          MikroTik RB4xx boards. 
    66  
    77+config SPI_VSC7385 
     
    1515--- a/drivers/spi/Makefile 
    1616+++ b/drivers/spi/Makefile 
    17 @@ -57,6 +57,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
    18   
     17@@ -59,6 +59,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
    1918 # SPI protocol drivers (device/link on bus) 
     19 obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2020 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    2121+obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
  • trunk/target/linux/ar71xx/patches-2.6.35/153-spi-rb4xx-cpld-driver.patch

    r22862 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -296,6 +296,11 @@ config SPI_TLE62X0 
     3@@ -401,6 +401,13 @@ config SPI_TLE62X0 
    44          sysfs interface, with each line presented as a kind of GPIO 
    55          exposing both switch control and diagnostic feedback. 
    66  
    7 +config SPI_VSC7385 
    8 +       tristate "Vitesse VSC7385 ethernet switch driver" 
     7+config SPI_RB4XX_CPLD 
     8+       tristate "MikroTik RB4XX CPLD driver" 
     9+       depends on AR71XX_MACH_RB4XX 
    910+       help 
    10 +         SPI driver for the Vitesse VSC7385 ethernet switch. 
     11+         SPI driver for the Xilinx CPLD chip present on the 
     12+         MikroTik RB4xx boards. 
    1113+ 
    1214 # 
     
    1517--- a/drivers/spi/Makefile 
    1618+++ b/drivers/spi/Makefile 
    17 @@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_STMP3XXX)            += spi_stmp. 
     19@@ -58,6 +58,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
     20 #      ... add above this line ... 
    1821  
    1922 # SPI protocol drivers (device/link on bus) 
     23+obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2024 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    21 +obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
    2225 obj-$(CONFIG_SPI_TLE62X0)      += tle62x0.o 
    2326 #      ... add above this line ... 
    24   
  • trunk/target/linux/ar71xx/patches-2.6.35/202-spi_vsc7385_driver.patch

    r22803 r22863  
    11--- a/drivers/spi/Kconfig 
    22+++ b/drivers/spi/Kconfig 
    3 @@ -403,6 +403,11 @@ config SPI_TLE62X0 
    4           sysfs interface, with each line presented as a kind of GPIO 
    5           exposing both switch control and diagnostic feedback. 
     3@@ -416,6 +416,11 @@ config SPI_RB4XX_CPLD 
     4          SPI driver for the Xilinx CPLD chip present on the 
     5          MikroTik RB4xx boards. 
    66  
    77+config SPI_VSC7385 
     
    1515--- a/drivers/spi/Makefile 
    1616+++ b/drivers/spi/Makefile 
    17 @@ -59,6 +59,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
    18   
     17@@ -61,6 +61,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ) 
    1918 # SPI protocol drivers (device/link on bus) 
     19 obj-$(CONFIG_SPI_RB4XX_CPLD)   += spi_rb4xx_cpld.o 
    2020 obj-$(CONFIG_SPI_SPIDEV)       += spidev.o 
    2121+obj-$(CONFIG_SPI_VSC7385)      += spi_vsc7385.o 
  • trunk/target/linux/ar71xx/patches-2.6.35/400-2.6.35-fix-nand_scan_ident-options.patch

    r21737 r22863  
    11--- a/drivers/mtd/nand/rb4xx_nand.c 
    22+++ b/drivers/mtd/nand/rb4xx_nand.c 
    3 @@ -431,7 +431,7 @@ static int __init rb4xx_nand_probe(struc 
     3@@ -218,7 +218,7 @@ static int __init rb4xx_nand_probe(struc 
    44  
    55        platform_set_drvdata(pdev, info); 
Note: See TracChangeset for help on using the changeset viewer.