Ticket #15331: 999-wrtnode_spi_cs1.patch

File 999-wrtnode_spi_cs1.patch, 2.1 KB (added by WRTnode, 4 years ago)
  • drivers/spi/spi-rt2880.c

    a b  
    2727#include <ralink_regs.h> 
    2828 
    2929#define DRIVER_NAME                     "spi-rt2880" 
    30 /* only one slave is supported*/ 
    31 #define RALINK_NUM_CHIPSELECTS          1 
     30/* two slave are supported*/ 
     31#define RALINK_NUM_CHIPSELECTS          2 
    3232/* in usec */ 
    3333#define RALINK_SPI_WAIT_MAX_LOOP        2000 
    3434 
     
    3737#define RAMIPS_SPI_CTL                  0x14 
    3838#define RAMIPS_SPI_DATA                 0x20 
    3939#define RAMIPS_SPI_FIFO_STAT            0x38 
     40/* SPI_GPIO_MODE */ 
     41#define RAMIPS_SPI_GPIO     0x60 
     42#define RAMIPS_SPI_ARB      0xf0 
    4043 
    4144/* SPISTAT register bit field */ 
    4245#define SPISTAT_BUSY                    BIT(0) 
    struct rt2880_spi { 
    9295        unsigned int            speed; 
    9396        struct clk              *clk; 
    9497        spinlock_t              lock; 
     98        uint16_t                chipselect; 
    9599 
    96100        struct rt2880_spi_ops   *ops; 
    97101}; 
    rt2880_spi_setup_transfer(struct spi_dev 
    209213 
    210214static void rt2880_spi_set_cs(struct rt2880_spi *rs, int enable) 
    211215{ 
     216        int cs = rs->chipselect; 
     217        u32 val; 
     218        val = ioread32(rs->base + RAMIPS_SPI_ARB);  //RAMIPS_SPI_ARB  0x00f0 
     219 
     220        // swtich between CS0 and CS1 
     221        if (cs == 0) { 
     222                val &= ~(1<<16); 
     223        } else if(cs == 1) { 
     224                val |= (1<<16); 
     225        } 
     226        iowrite32(val,rs->base + RAMIPS_SPI_ARB); 
     227 
    212228        if (enable) 
    213229                rt2880_spi_clrbits(rs, RAMIPS_SPI_CTL, SPICTL_SPIENA); 
    214230        else 
    static int rt2880_spi_transfer_one_messa 
    436452                        if (!t->speed_hz && !t->bits_per_word) 
    437453                                par_override = 0; 
    438454                } 
     455                rs->chipselect = spi->chip_select; 
    439456 
    440457                if (!cs_active) { 
    441458                        rs->ops->set_cs(rs, 1); 
    static int rt2880_spi_setup(struct spi_d 
    486503 
    487504static void rt2880_spi_reset(struct rt2880_spi *rs) 
    488505{ 
     506         void __iomem *base_gpio; 
     507         u32 val_gpio; 
     508 
    489509        rt2880_spi_write(rs, RAMIPS_SPI_CFG, 
    490510                         SPICFG_MSBFIRST | SPICFG_TXCLKEDGE_FALLING | 
    491511                         SPICFG_SPICLK_DIV16 | SPICFG_SPICLKPOL); 
    492512        rt2880_spi_write(rs, RAMIPS_SPI_CTL, SPICTL_HIZSDO | SPICTL_SPIENA); 
     513 
     514        // set CS1 pin 
     515        base_gpio = rs->base - 0xb00; 
     516        val_gpio = ioread32(base_gpio + RAMIPS_SPI_GPIO); 
     517        val_gpio &= ~(3 << 11); 
     518        iowrite32(val_gpio,base_gpio + RAMIPS_SPI_GPIO); 
    493519} 
    494520 
    495521static void mt7621_spi_reset(struct rt2880_spi *rs)