source: trunk/target/linux/ar71xx/patches-3.3/204-spi-ath79-use-gpio_request_one.patch @ 31117

Last change on this file since 31117 was 31117, checked in by juhosg, 4 years ago

ar71xx: improve SPI flash read/write performance

mtd_speedtest results:

page write speed

old new delta

DB120 209 KiB/s 226 KiB/s +8.13%
TL-WR1043ND v1 122 KiB/s 148 KiB/s +21.31%
TL-WR703N v1 153 KiB/s 194 KiB/s +26.80%
TL-MR3220 v1 130 KiB/s 156 KiB/s +20.00%
TL-WR2543ND v1 158 KiB/s 202 KiB/s +27.85%
TL-WR741ND v2 122 KiB/s 152 KiB/s +24.59%
ALFA AP96 229 KiB/s 260 KiB/s +13.54%
WNDR3700 202 KiB/s 223 KiB/s +10.40%

page read speed

old new delta

DB120 691 KiB/s 929 KiB/s +34.44%
TL-WR1043ND v1 372 KiB/s 754 KiB/s +102.69%
TL-WR703N v1 375 KiB/s 745 KiB/s +98.67%
TL-MR3220 v1 372 KiB/s 752 KiB/s +102.15%
TL-WR2543ND v1 307 KiB/s 564 KiB/s +83.71%
TL-WR741ND v2 315 KiB/s 525 KiB/s +66.67%
ALFA AP96 515 KiB/s 702 KiB/s +36.31%
WNDR3700 515 KiB/s 697 KiB/s +35.34%

File size: 1.5 KB
  • drivers/spi/spi-ath79.c

    From dd5b424b0b3f0370f9b63594ad53c16989b6ad78 Mon Sep 17 00:00:00 2001
    From: Gabor Juhos <juhosg@openwrt.org>
    Date: Mon, 9 Jan 2012 15:04:21 +0100
    Subject: [PATCH 4/7] spi/ath79: use gpio_request_one
    
    Use gpio_request_one() instead of multiple gpiolib calls.
    
    Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
    ---
     drivers/spi/spi-ath79.c |   26 +++++++++++++-------------
     1 files changed, 13 insertions(+), 13 deletions(-)
    
    a b static int ath79_spi_setup_cs(struct spi 
    100100{ 
    101101        struct ath79_spi *sp = ath79_spidev_to_sp(spi); 
    102102        struct ath79_spi_controller_data *cdata; 
     103        int status; 
    103104 
    104105        cdata = spi->controller_data; 
    105106        if (spi->chip_select && !cdata) 
    static int ath79_spi_setup_cs(struct spi 
    115116        /* TODO: setup speed? */ 
    116117        ath79_spi_wr(sp, AR71XX_SPI_REG_CTRL, 0x43); 
    117118 
     119        status = 0; 
    118120        if (spi->chip_select) { 
    119                 int status = 0; 
     121                unsigned long flags; 
    120122 
    121                 status = gpio_request(cdata->gpio, dev_name(&spi->dev)); 
    122                 if (status) 
    123                         return status; 
    124  
    125                 status = gpio_direction_output(cdata->gpio, 
    126                                                spi->mode & SPI_CS_HIGH); 
    127                 if (status) { 
    128                         gpio_free(cdata->gpio); 
    129                         return status; 
    130                 } 
     123                flags = GPIOF_DIR_OUT; 
     124                if (spi->mode & SPI_CS_HIGH) 
     125                        flags |= GPIOF_INIT_HIGH; 
     126                else 
     127                        flags |= GPIOF_INIT_LOW; 
     128 
     129                status = gpio_request_one(cdata->gpio, flags, 
     130                                          dev_name(&spi->dev)); 
    131131        } 
    132132 
    133         return 0; 
     133        return status; 
    134134} 
    135135 
    136136static void ath79_spi_cleanup_cs(struct spi_device *spi) 
Note: See TracBrowser for help on using the repository browser.