Changeset 47792


Ignore:
Timestamp:
2015-12-05T16:45:43+01:00 (2 years ago)
Author:
nbd
Message:

lantiq: sync spi-xway driver with trunk r47770

Signed-off-by: Felix Fietkau <nbd@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/chaos_calmer/target/linux/lantiq/patches-3.18/0033-SPI-MIPS-lantiq-adds-spi-xway.patch

    r44348 r47792  
    4343--- /dev/null 
    4444+++ b/drivers/spi/spi-xway.c 
    45 @@ -0,0 +1,975 @@ 
     45@@ -0,0 +1,1003 @@ 
    4646+/* 
    4747+ * Lantiq SoC SPI controller 
     
    185185+#define LTQ_SPI_IRNEN_F                BIT(3)  /* Frame end interrupt request */ 
    186186+#define LTQ_SPI_IRNEN_E                BIT(2)  /* Error end interrupt request */ 
    187 +#define LTQ_SPI_IRNEN_T                BIT(1)  /* Transmit end interrupt request */ 
    188 +#define LTQ_SPI_IRNEN_R                BIT(0)  /* Receive end interrupt request */ 
     187+#define LTQ_SPI_IRNEN_T                BIT(0)  /* Transmit end interrupt request */ 
     188+#define LTQ_SPI_IRNEN_R                BIT(1)  /* Receive end interrupt request */ 
     189+#define LTQ_SPI_IRNEN_T_XWAY   BIT(1)  /* Transmit end interrupt request */ 
     190+#define LTQ_SPI_IRNEN_R_XWAY   BIT(0)  /* Receive end interrupt request */ 
    189191+#define LTQ_SPI_IRNEN_ALL      0xF 
    190192+ 
     
    215217+       unsigned                dma_support:1; 
    216218+       unsigned                cfg_mode:1; 
     219+ 
     220+       u32                     irnen_t; 
     221+       u32                     irnen_r; 
    217222+}; 
    218223+ 
     
    518523+       struct ltq_spi *hw = ltq_spi_to_hw(spi); 
    519524+ 
     525+       if (ltq_spi_wait_ready(hw)) 
     526+               dev_err(&spi->dev, "wait failed\n"); 
     527+ 
    520528+       switch (cs) { 
    521529+       case BITBANG_CS_ACTIVE: 
     
    548556+               return -EINVAL; 
    549557+ 
    550 +       ltq_spi_config_mode_set(hw); 
    551 + 
    552558+       return 0; 
    553559+} 
     
    662668+{ 
    663669+       u32 rxreq, rxreq_max, rxtodo; 
     670+       u32 fstat, fifo_fill; 
    664671+ 
    665672+       rxtodo = ltq_spi_reg_read(hw, LTQ_SPI_RXCNT) & LTQ_SPI_RXCNT_TODO_MASK; 
     673+ 
     674+       /* 
     675+        * Check if there is remaining data in the FIFO before starting a new 
     676+        * receive request. The controller might have processed some more data 
     677+        * since the last FIFO poll. 
     678+        */ 
     679+       fstat = ltq_spi_reg_read(hw, LTQ_SPI_FSTAT); 
     680+       fifo_fill = ((fstat >> LTQ_SPI_FSTAT_RXFFL_SHIFT) 
     681+                       & LTQ_SPI_FSTAT_RXFFL_MASK); 
     682+       if (fifo_fill) 
     683+               return; 
    666684+ 
    667685+       /* 
     
    744762+       /* Disable all interrupts */ 
    745763+       ltq_spi_reg_clearbit(hw, LTQ_SPI_IRNEN_ALL, LTQ_SPI_IRNEN); 
     764+ 
     765+       dev_err(hw->dev, "error %x\n", ltq_spi_reg_read(hw, LTQ_SPI_STAT)); 
    746766+ 
    747767+       /* Clear all error flags */ 
     
    781801+               /* Initially fill TX FIFO with as much data as possible */ 
    782802+               ltq_spi_txfifo_write(hw); 
    783 +               irq_flags |= LTQ_SPI_IRNEN_T; 
     803+               irq_flags |= hw->irnen_t; 
    784804+ 
    785805+               /* Always enable RX interrupt in Full Duplex mode */ 
    786806+               if (hw->rx) 
    787 +                       irq_flags |= LTQ_SPI_IRNEN_R; 
     807+                       irq_flags |= hw->irnen_r; 
    788808+       } else if (hw->rx) { 
    789809+               /* Start RX clock */ 
     
    791811+ 
    792812+               /* Enable RX interrupt to receive data from RX FIFOs */ 
    793 +               irq_flags |= LTQ_SPI_IRNEN_R; 
     813+               irq_flags |= hw->irnen_r; 
    794814+       } 
    795815+ 
    796816+       /* Enable TX or RX interrupts */ 
    797817+       ltq_spi_reg_setbit(hw, irq_flags, LTQ_SPI_IRNEN); 
    798 +       wait_for_completion_interruptible(&hw->done); 
     818+       wait_for_completion(&hw->done); 
    799819+ 
    800820+       /* Disable all interrupts */ 
     
    896916+       hw->bitbang.txrx_bufs = ltq_spi_txrx_bufs; 
    897917+ 
    898 +       if (of_machine_is_compatible("lantiq,ase")) 
     918+       if (of_machine_is_compatible("lantiq,ase")) { 
    899919+               master->num_chipselect = 3; 
    900 +       else 
     920+ 
     921+               hw->irnen_t = LTQ_SPI_IRNEN_T_XWAY; 
     922+               hw->irnen_r = LTQ_SPI_IRNEN_R_XWAY; 
     923+       } else { 
    901924+               master->num_chipselect = 6; 
     925+ 
     926+               hw->irnen_t = LTQ_SPI_IRNEN_T; 
     927+               hw->irnen_r = LTQ_SPI_IRNEN_R; 
     928+       } 
     929+ 
    902930+       master->bus_num = pdev->id; 
    903931+       master->setup = ltq_spi_setup; 
     
    914942+       id = ltq_spi_reg_read(hw, LTQ_SPI_ID); 
    915943+       hw->txfs = (id >> LTQ_SPI_ID_TXFS_SHIFT) & LTQ_SPI_ID_TXFS_MASK; 
    916 +       hw->rxfs = (id >> LTQ_SPI_ID_TXFS_SHIFT) & LTQ_SPI_ID_TXFS_MASK; 
     944+       hw->rxfs = (id >> LTQ_SPI_ID_RXFS_SHIFT) & LTQ_SPI_ID_RXFS_MASK; 
    917945+       hw->dma_support = (id & LTQ_SPI_ID_CFG) ? 1 : 0; 
    918946+ 
Note: See TracChangeset for help on using the changeset viewer.