26 #include <linux/module.h>
27 #include <linux/device.h>
29 #include <linux/errno.h>
38 #include <linux/slab.h>
52 #define SSP_WRITE_BITS(reg, val, mask, sb) \
53 ((reg) = (((reg) & ~(mask)) | (((val)<<(sb)) & (mask))))
60 #define GEN_MASK_BITS(val, mask, sb) \
61 (((val)<<(sb)) & (mask))
64 #define DO_NOT_DRIVE_TX 1
66 #define DO_NOT_QUEUE_DMA 0
75 #define SSP_CR0(r) (r + 0x000)
76 #define SSP_CR1(r) (r + 0x004)
77 #define SSP_DR(r) (r + 0x008)
78 #define SSP_SR(r) (r + 0x00C)
79 #define SSP_CPSR(r) (r + 0x010)
80 #define SSP_IMSC(r) (r + 0x014)
81 #define SSP_RIS(r) (r + 0x018)
82 #define SSP_MIS(r) (r + 0x01C)
83 #define SSP_ICR(r) (r + 0x020)
84 #define SSP_DMACR(r) (r + 0x024)
85 #define SSP_ITCR(r) (r + 0x080)
86 #define SSP_ITIP(r) (r + 0x084)
87 #define SSP_ITOP(r) (r + 0x088)
88 #define SSP_TDR(r) (r + 0x08C)
90 #define SSP_PID0(r) (r + 0xFE0)
91 #define SSP_PID1(r) (r + 0xFE4)
92 #define SSP_PID2(r) (r + 0xFE8)
93 #define SSP_PID3(r) (r + 0xFEC)
95 #define SSP_CID0(r) (r + 0xFF0)
96 #define SSP_CID1(r) (r + 0xFF4)
97 #define SSP_CID2(r) (r + 0xFF8)
98 #define SSP_CID3(r) (r + 0xFFC)
103 #define SSP_CR0_MASK_DSS (0x0FUL << 0)
104 #define SSP_CR0_MASK_FRF (0x3UL << 4)
105 #define SSP_CR0_MASK_SPO (0x1UL << 6)
106 #define SSP_CR0_MASK_SPH (0x1UL << 7)
107 #define SSP_CR0_MASK_SCR (0xFFUL << 8)
113 #define SSP_CR0_MASK_DSS_ST (0x1FUL << 0)
114 #define SSP_CR0_MASK_HALFDUP_ST (0x1UL << 5)
115 #define SSP_CR0_MASK_CSS_ST (0x1FUL << 16)
116 #define SSP_CR0_MASK_FRF_ST (0x3UL << 21)
121 #define SSP_CR1_MASK_LBM (0x1UL << 0)
122 #define SSP_CR1_MASK_SSE (0x1UL << 1)
123 #define SSP_CR1_MASK_MS (0x1UL << 2)
124 #define SSP_CR1_MASK_SOD (0x1UL << 3)
130 #define SSP_CR1_MASK_RENDN_ST (0x1UL << 4)
131 #define SSP_CR1_MASK_TENDN_ST (0x1UL << 5)
132 #define SSP_CR1_MASK_MWAIT_ST (0x1UL << 6)
133 #define SSP_CR1_MASK_RXIFLSEL_ST (0x7UL << 7)
134 #define SSP_CR1_MASK_TXIFLSEL_ST (0x7UL << 10)
136 #define SSP_CR1_MASK_FBCLKDEL_ST (0x7UL << 13)
141 #define SSP_SR_MASK_TFE (0x1UL << 0)
142 #define SSP_SR_MASK_TNF (0x1UL << 1)
143 #define SSP_SR_MASK_RNE (0x1UL << 2)
144 #define SSP_SR_MASK_RFF (0x1UL << 3)
145 #define SSP_SR_MASK_BSY (0x1UL << 4)
150 #define SSP_CPSR_MASK_CPSDVSR (0xFFUL << 0)
155 #define SSP_IMSC_MASK_RORIM (0x1UL << 0)
156 #define SSP_IMSC_MASK_RTIM (0x1UL << 1)
157 #define SSP_IMSC_MASK_RXIM (0x1UL << 2)
158 #define SSP_IMSC_MASK_TXIM (0x1UL << 3)
164 #define SSP_RIS_MASK_RORRIS (0x1UL << 0)
166 #define SSP_RIS_MASK_RTRIS (0x1UL << 1)
168 #define SSP_RIS_MASK_RXRIS (0x1UL << 2)
170 #define SSP_RIS_MASK_TXRIS (0x1UL << 3)
176 #define SSP_MIS_MASK_RORMIS (0x1UL << 0)
178 #define SSP_MIS_MASK_RTMIS (0x1UL << 1)
180 #define SSP_MIS_MASK_RXMIS (0x1UL << 2)
182 #define SSP_MIS_MASK_TXMIS (0x1UL << 3)
188 #define SSP_ICR_MASK_RORIC (0x1UL << 0)
190 #define SSP_ICR_MASK_RTIC (0x1UL << 1)
196 #define SSP_DMACR_MASK_RXDMAE (0x1UL << 0)
198 #define SSP_DMACR_MASK_TXDMAE (0x1UL << 1)
203 #define SSP_ITCR_MASK_ITEN (0x1UL << 0)
204 #define SSP_ITCR_MASK_TESTFIFO (0x1UL << 1)
209 #define ITIP_MASK_SSPRXD (0x1UL << 0)
210 #define ITIP_MASK_SSPFSSIN (0x1UL << 1)
211 #define ITIP_MASK_SSPCLKIN (0x1UL << 2)
212 #define ITIP_MASK_RXDMAC (0x1UL << 3)
213 #define ITIP_MASK_TXDMAC (0x1UL << 4)
214 #define ITIP_MASK_SSPTXDIN (0x1UL << 5)
219 #define ITOP_MASK_SSPTXD (0x1UL << 0)
220 #define ITOP_MASK_SSPFSSOUT (0x1UL << 1)
221 #define ITOP_MASK_SSPCLKOUT (0x1UL << 2)
222 #define ITOP_MASK_SSPOEn (0x1UL << 3)
223 #define ITOP_MASK_SSPCTLOEn (0x1UL << 4)
224 #define ITOP_MASK_RORINTR (0x1UL << 5)
225 #define ITOP_MASK_RTINTR (0x1UL << 6)
226 #define ITOP_MASK_RXINTR (0x1UL << 7)
227 #define ITOP_MASK_TXINTR (0x1UL << 8)
228 #define ITOP_MASK_INTR (0x1UL << 9)
229 #define ITOP_MASK_RXDMABREQ (0x1UL << 10)
230 #define ITOP_MASK_RXDMASREQ (0x1UL << 11)
231 #define ITOP_MASK_TXDMABREQ (0x1UL << 12)
232 #define ITOP_MASK_TXDMASREQ (0x1UL << 13)
237 #define TDR_MASK_TESTDATA (0xFFFFFFFF)
245 #define STATE_START ((void *) 0)
246 #define STATE_RUNNING ((void *) 1)
247 #define STATE_DONE ((void *) 2)
248 #define STATE_ERROR ((void *) -1)
253 #define SSP_DISABLED (0)
254 #define SSP_ENABLED (1)
259 #define SSP_DMA_DISABLED (0)
260 #define SSP_DMA_ENABLED (1)
265 #define SSP_DEFAULT_CLKRATE 0x2
266 #define SSP_DEFAULT_PRESCALE 0x40
271 #define CPSDVR_MIN 0x02
272 #define CPSDVR_MAX 0xFE
279 #define DEFAULT_SSP_REG_IMSC 0x0UL
280 #define DISABLE_ALL_INTERRUPTS DEFAULT_SSP_REG_IMSC
281 #define ENABLE_ALL_INTERRUPTS (~DEFAULT_SSP_REG_IMSC)
283 #define CLEAR_ALL_INTERRUPTS 0x3
285 #define SPI_POLLING_TIMEOUT 1000
393 #ifdef CONFIG_DMA_ENGINE
444 pr_debug(
"pl022: dummy chip select control, CS=0x%x\n", command);
449 if (gpio_is_valid(pl022->
cur_cs))
452 pl022->
cur_chip->cs_control(command);
461 static void giveback(
struct pl022 *pl022)
498 if (next_msg && next_msg->
spi != pl022->
cur_msg->spi)
522 static int flush(
struct pl022 *pl022)
541 static void restore_state(
struct pl022 *pl022)
545 if (pl022->
vendor->extended_cr)
559 #define DEFAULT_SSP_REG_CR0 ( \
560 GEN_MASK_BITS(SSP_DATA_BITS_12, SSP_CR0_MASK_DSS, 0) | \
561 GEN_MASK_BITS(SSP_INTERFACE_MOTOROLA_SPI, SSP_CR0_MASK_FRF, 4) | \
562 GEN_MASK_BITS(SSP_CLK_POL_IDLE_LOW, SSP_CR0_MASK_SPO, 6) | \
563 GEN_MASK_BITS(SSP_CLK_SECOND_EDGE, SSP_CR0_MASK_SPH, 7) | \
564 GEN_MASK_BITS(SSP_DEFAULT_CLKRATE, SSP_CR0_MASK_SCR, 8) \
568 #define DEFAULT_SSP_REG_CR0_ST ( \
569 GEN_MASK_BITS(SSP_DATA_BITS_12, SSP_CR0_MASK_DSS_ST, 0) | \
570 GEN_MASK_BITS(SSP_MICROWIRE_CHANNEL_FULL_DUPLEX, SSP_CR0_MASK_HALFDUP_ST, 5) | \
571 GEN_MASK_BITS(SSP_CLK_POL_IDLE_LOW, SSP_CR0_MASK_SPO, 6) | \
572 GEN_MASK_BITS(SSP_CLK_SECOND_EDGE, SSP_CR0_MASK_SPH, 7) | \
573 GEN_MASK_BITS(SSP_DEFAULT_CLKRATE, SSP_CR0_MASK_SCR, 8) | \
574 GEN_MASK_BITS(SSP_BITS_8, SSP_CR0_MASK_CSS_ST, 16) | \
575 GEN_MASK_BITS(SSP_INTERFACE_MOTOROLA_SPI, SSP_CR0_MASK_FRF_ST, 21) \
579 #define DEFAULT_SSP_REG_CR0_ST_PL023 ( \
580 GEN_MASK_BITS(SSP_DATA_BITS_12, SSP_CR0_MASK_DSS_ST, 0) | \
581 GEN_MASK_BITS(SSP_CLK_POL_IDLE_LOW, SSP_CR0_MASK_SPO, 6) | \
582 GEN_MASK_BITS(SSP_CLK_SECOND_EDGE, SSP_CR0_MASK_SPH, 7) | \
583 GEN_MASK_BITS(SSP_DEFAULT_CLKRATE, SSP_CR0_MASK_SCR, 8) \
586 #define DEFAULT_SSP_REG_CR1 ( \
587 GEN_MASK_BITS(LOOPBACK_DISABLED, SSP_CR1_MASK_LBM, 0) | \
588 GEN_MASK_BITS(SSP_DISABLED, SSP_CR1_MASK_SSE, 1) | \
589 GEN_MASK_BITS(SSP_MASTER, SSP_CR1_MASK_MS, 2) | \
590 GEN_MASK_BITS(DO_NOT_DRIVE_TX, SSP_CR1_MASK_SOD, 3) \
594 #define DEFAULT_SSP_REG_CR1_ST ( \
595 DEFAULT_SSP_REG_CR1 | \
596 GEN_MASK_BITS(SSP_RX_MSB, SSP_CR1_MASK_RENDN_ST, 4) | \
597 GEN_MASK_BITS(SSP_TX_MSB, SSP_CR1_MASK_TENDN_ST, 5) | \
598 GEN_MASK_BITS(SSP_MWIRE_WAIT_ZERO, SSP_CR1_MASK_MWAIT_ST, 6) |\
599 GEN_MASK_BITS(SSP_RX_1_OR_MORE_ELEM, SSP_CR1_MASK_RXIFLSEL_ST, 7) | \
600 GEN_MASK_BITS(SSP_TX_1_OR_MORE_EMPTY_LOC, SSP_CR1_MASK_TXIFLSEL_ST, 10) \
607 #define DEFAULT_SSP_REG_CR1_ST_PL023 ( \
608 GEN_MASK_BITS(SSP_DISABLED, SSP_CR1_MASK_SSE, 1) | \
609 GEN_MASK_BITS(SSP_MASTER, SSP_CR1_MASK_MS, 2) | \
610 GEN_MASK_BITS(DO_NOT_DRIVE_TX, SSP_CR1_MASK_SOD, 3) | \
611 GEN_MASK_BITS(SSP_RX_MSB, SSP_CR1_MASK_RENDN_ST, 4) | \
612 GEN_MASK_BITS(SSP_TX_MSB, SSP_CR1_MASK_TENDN_ST, 5) | \
613 GEN_MASK_BITS(SSP_RX_1_OR_MORE_ELEM, SSP_CR1_MASK_RXIFLSEL_ST, 7) | \
614 GEN_MASK_BITS(SSP_TX_1_OR_MORE_EMPTY_LOC, SSP_CR1_MASK_TXIFLSEL_ST, 10) | \
615 GEN_MASK_BITS(SSP_FEEDBACK_CLK_DELAY_NONE, SSP_CR1_MASK_FBCLKDEL_ST, 13) \
618 #define DEFAULT_SSP_REG_CPSR ( \
619 GEN_MASK_BITS(SSP_DEFAULT_PRESCALE, SSP_CPSR_MASK_CPSDVSR, 0) \
622 #define DEFAULT_SSP_REG_DMACR (\
623 GEN_MASK_BITS(SSP_DMA_DISABLED, SSP_DMACR_MASK_RXDMAE, 0) | \
624 GEN_MASK_BITS(SSP_DMA_DISABLED, SSP_DMACR_MASK_TXDMAE, 1) \
631 static void load_ssp_default_config(
struct pl022 *pl022)
633 if (pl022->
vendor->pl023) {
636 }
else if (pl022->
vendor->extended_cr) {
653 static void readwriter(
struct pl022 *pl022)
667 "%s, rx: %p, rxend: %p, tx: %p, txend: %p\n",
673 switch (pl022->
read) {
678 *(
u8 *) (pl022->
rx) =
682 *(
u16 *) (pl022->
rx) =
686 *(
u32 *) (pl022->
rx) =
698 switch (pl022->
write) {
722 switch (pl022->
read) {
727 *(
u8 *) (pl022->
rx) =
731 *(
u16 *) (pl022->
rx) =
735 *(
u32 *) (pl022->
rx) =
758 static void *next_transfer(
struct pl022 *pl022)
777 #ifdef CONFIG_DMA_ENGINE
778 static void unmap_free_dma_scatter(
struct pl022 *pl022)
781 dma_unmap_sg(pl022->dma_tx_channel->device->dev, pl022->sgt_tx.sgl,
783 dma_unmap_sg(pl022->dma_rx_channel->device->dev, pl022->sgt_rx.sgl,
789 static void dma_callback(
void *
data)
791 struct pl022 *pl022 =
data;
794 BUG_ON(!pl022->sgt_rx.sgl);
812 for_each_sg(pl022->sgt_rx.sgl, sg, pl022->sgt_rx.nents, i) {
813 dev_dbg(&pl022->
adev->dev,
"SPI RX SG ENTRY: %d", i);
814 print_hex_dump(
KERN_ERR,
"SPI RX: ",
822 for_each_sg(pl022->sgt_tx.sgl, sg, pl022->sgt_tx.nents, i) {
823 dev_dbg(&pl022->
adev->dev,
"SPI TX SG ENTRY: %d", i);
824 print_hex_dump(
KERN_ERR,
"SPI TX: ",
835 unmap_free_dma_scatter(pl022);
843 msg->
state = next_transfer(pl022);
847 static void setup_dma_scatter(
struct pl022 *pl022,
867 mapbytes = bytesleft;
873 bytesleft -= mapbytes;
875 "set RX/TX target page @ %p, %d bytes, %d left\n",
876 bufp, mapbytes, bytesleft);
882 mapbytes = bytesleft;
887 bytesleft -= mapbytes;
889 "set RX/TX to dummy page %d bytes, %d left\n",
890 mapbytes, bytesleft);
901 static int configure_dma(
struct pl022 *pl022)
915 int rx_sglen, tx_sglen;
916 struct dma_chan *rxchan = pl022->dma_rx_channel;
917 struct dma_chan *txchan = pl022->dma_tx_channel;
922 if (!rxchan || !txchan)
973 switch (pl022->
read) {
989 switch (pl022->
write) {
1012 dmaengine_slave_config(rxchan, &rx_conf);
1013 dmaengine_slave_config(txchan, &tx_conf);
1017 dev_dbg(&pl022->
adev->dev,
"using %d pages for transfer\n", pages);
1021 goto err_alloc_rx_sg;
1025 goto err_alloc_tx_sg;
1028 setup_dma_scatter(pl022, pl022->
rx,
1030 setup_dma_scatter(pl022, pl022->
tx,
1045 rxdesc = dmaengine_prep_slave_sg(rxchan,
1053 txdesc = dmaengine_prep_slave_sg(txchan,
1066 dmaengine_submit(rxdesc);
1067 dmaengine_submit(txdesc);
1068 dma_async_issue_pending(rxchan);
1069 dma_async_issue_pending(txchan);
1070 pl022->dma_running =
true;
1075 dmaengine_terminate_all(txchan);
1077 dmaengine_terminate_all(rxchan);
1091 static int __devinit pl022_dma_probe(
struct pl022 *pl022)
1105 if (!pl022->dma_rx_channel) {
1106 dev_dbg(&pl022->
adev->dev,
"no RX DMA channel!\n");
1113 if (!pl022->dma_tx_channel) {
1114 dev_dbg(&pl022->
adev->dev,
"no TX DMA channel!\n");
1119 if (!pl022->dummypage) {
1120 dev_dbg(&pl022->
adev->dev,
"no DMA dummypage!\n");
1121 goto err_no_dummypage;
1124 dev_info(&pl022->
adev->dev,
"setup for DMA on RX %s, TX %s\n",
1125 dma_chan_name(pl022->dma_rx_channel),
1126 dma_chan_name(pl022->dma_tx_channel));
1134 pl022->dma_rx_channel =
NULL;
1137 "Failed to work in dma mode, work without dma!\n");
1141 static void terminate_dma(
struct pl022 *pl022)
1143 struct dma_chan *rxchan = pl022->dma_rx_channel;
1144 struct dma_chan *txchan = pl022->dma_tx_channel;
1146 dmaengine_terminate_all(rxchan);
1147 dmaengine_terminate_all(txchan);
1148 unmap_free_dma_scatter(pl022);
1149 pl022->dma_running =
false;
1152 static void pl022_dma_remove(
struct pl022 *pl022)
1154 if (pl022->dma_running)
1155 terminate_dma(pl022);
1156 if (pl022->dma_tx_channel)
1158 if (pl022->dma_rx_channel)
1160 kfree(pl022->dummypage);
1164 static inline int configure_dma(
struct pl022 *pl022)
1169 static inline int pl022_dma_probe(
struct pl022 *pl022)
1174 static inline void pl022_dma_remove(
struct pl022 *pl022)
1192 struct pl022 *pl022 =
dev_id;
1199 "bad message state in interrupt handler");
1223 "RXFIFO is full\n");
1226 "TXFIFO is full\n");
1247 if ((pl022->
tx == pl022->
tx_end) && (flag == 0)) {
1266 "bytes (did you request an odd "
1267 "number of bytes on a 16bit bus?)\n",
1275 msg->
state = next_transfer(pl022);
1287 static int set_up_next_transfer(
struct pl022 *pl022,
1296 "message of %u bytes to transmit but the current "
1297 "chip bus has a data width of %u bytes!\n",
1300 dev_err(&pl022->
adev->dev,
"skipping this message\n");
1303 pl022->
tx = (
void *)transfer->
tx_buf;
1305 pl022->
rx = (
void *)transfer->
rx_buf;
1319 static void pump_transfers(
unsigned long data)
1321 struct pl022 *pl022 = (
struct pl022 *) data;
1364 if (set_up_next_transfer(pl022, transfer)) {
1374 if (configure_dma(pl022)) {
1376 "configuration of DMA failed, fall back to interrupt mode\n");
1377 goto err_config_dma;
1387 static void do_interrupt_dma_transfer(
struct pl022 *pl022)
1399 if (set_up_next_transfer(pl022, pl022->
cur_transfer)) {
1409 if (configure_dma(pl022)) {
1411 "configuration of DMA failed, fall back to interrupt mode\n");
1412 goto err_config_dma;
1424 static void do_polling_transfer(
struct pl022 *pl022)
1429 struct chip_data *
chip;
1458 if (set_up_next_transfer(pl022, transfer)) {
1468 dev_dbg(&pl022->
adev->dev,
"polling transfer ongoing ...\n");
1476 "%s: timeout!\n", __func__);
1488 message->
state = next_transfer(pl022);
1501 static int pl022_transfer_one_message(
struct spi_master *master,
1504 struct pl022 *pl022 = spi_master_get_devdata(master);
1517 restore_state(pl022);
1521 do_polling_transfer(pl022);
1523 do_interrupt_dma_transfer(pl022);
1528 static int pl022_prepare_transfer_hardware(
struct spi_master *master)
1530 struct pl022 *pl022 = spi_master_get_devdata(master);
1536 pm_runtime_get_sync(&pl022->
adev->dev);
1540 static int pl022_unprepare_transfer_hardware(
struct spi_master *master)
1542 struct pl022 *pl022 = spi_master_get_devdata(master);
1549 pm_runtime_mark_last_busy(&pl022->
adev->dev);
1550 pm_runtime_put_autosuspend(&pl022->
adev->dev);
1552 pm_runtime_put(&pl022->
adev->dev);
1558 static int verify_controller_parameters(
struct pl022 *pl022,
1564 "interface is configured incorrectly\n");
1568 (!pl022->
vendor->unidir)) {
1570 "unidirectional mode not supported in this "
1571 "hardware version\n");
1577 "hierarchy is configured incorrectly\n");
1584 "Communication mode is configured incorrectly\n");
1594 if (pl022->
vendor->fifodepth < 16) {
1596 "RX FIFO Trigger Level is configured incorrectly\n");
1601 if (pl022->
vendor->fifodepth < 32) {
1603 "RX FIFO Trigger Level is configured incorrectly\n");
1609 "RX FIFO Trigger Level is configured incorrectly\n");
1620 if (pl022->
vendor->fifodepth < 16) {
1622 "TX FIFO Trigger Level is configured incorrectly\n");
1627 if (pl022->
vendor->fifodepth < 32) {
1629 "TX FIFO Trigger Level is configured incorrectly\n");
1635 "TX FIFO Trigger Level is configured incorrectly\n");
1643 "CTRL LEN is configured incorrectly\n");
1649 "Wait State is configured incorrectly\n");
1653 if (pl022->
vendor->extended_cr) {
1654 if ((chip_info->
duplex !=
1659 "Microwire duplex mode is configured incorrectly\n");
1665 "Microwire half duplex mode requested,"
1666 " but this is only available in the"
1667 " ST version of PL022\n");
1676 return rate / (cpsdvsr * (1 +
scr));
1679 static int calculate_effective_freq(
struct pl022 *pl022,
int freq,
struct
1684 u32 rate, max_tclk, min_tclk, best_freq = 0, best_cpsdvsr = 0,
1685 best_scr = 0,
tmp, found = 0;
1693 if (freq > max_tclk)
1695 "Max speed that can be programmed is %d Hz, you requested %d\n",
1698 if (freq < min_tclk) {
1700 "Requested frequency: %d Hz is less than minimum possible %d Hz\n",
1711 tmp = spi_rate(rate, cpsdvsr, scr);
1723 if (
tmp > best_freq) {
1725 best_cpsdvsr = cpsdvsr;
1741 WARN(!best_freq,
"pl022: Matching cpsdvsr and scr not found for %d Hz rate \n",
1744 clk_freq->
cpsdvsr = (
u8) (best_cpsdvsr & 0xFF);
1745 clk_freq->
scr = (
u8) (best_scr & 0xFF);
1747 "SSP Target Frequency is: %u, Effective Frequency is %u\n",
1749 dev_dbg(&pl022->
adev->dev,
"SSP cpsdvsr = %d, scr = %d\n",
1769 .cs_control = null_cs_control,
1788 struct chip_data *
chip;
1791 struct pl022 *pl022 = spi_master_get_devdata(spi->
master);
1800 chip = spi_get_ctldata(spi);
1803 chip = kzalloc(
sizeof(
struct chip_data),
GFP_KERNEL);
1806 "cannot allocate controller state\n");
1810 "allocated memory for controller's runtime state\n");
1816 if (chip_info ==
NULL) {
1818 chip_info_dt = pl022_default_chip_info;
1821 of_property_read_u32(np,
"pl022,interface",
1822 &chip_info_dt.iface);
1823 of_property_read_u32(np,
"pl022,com-mode",
1824 &chip_info_dt.com_mode);
1825 of_property_read_u32(np,
"pl022,rx-level-trig",
1826 &chip_info_dt.rx_lev_trig);
1827 of_property_read_u32(np,
"pl022,tx-level-trig",
1828 &chip_info_dt.tx_lev_trig);
1829 of_property_read_u32(np,
"pl022,ctrl-len",
1830 &chip_info_dt.ctrl_len);
1831 of_property_read_u32(np,
"pl022,wait-state",
1832 &chip_info_dt.wait_state);
1833 of_property_read_u32(np,
"pl022,duplex",
1834 &chip_info_dt.duplex);
1836 chip_info = &chip_info_dt;
1838 chip_info = &pl022_default_chip_info;
1841 "using default controller_data settings\n");
1845 "using user supplied controller_data settings\n");
1851 if ((0 == chip_info->
clk_freq.cpsdvsr)
1852 && (0 == chip_info->
clk_freq.scr)) {
1853 status = calculate_effective_freq(pl022,
1857 goto err_config_params;
1860 if ((clk_freq.
cpsdvsr % 2) != 0)
1868 "cpsdvsr is configured incorrectly\n");
1869 goto err_config_params;
1872 status = verify_controller_parameters(pl022, chip_info);
1874 dev_err(&spi->
dev,
"controller data is incorrect");
1875 goto err_config_params;
1882 chip->xfer_type = chip_info->
com_mode;
1884 chip->cs_control = null_cs_control;
1887 "invalid chip select\n");
1892 if ((bits <= 3) || (bits > pl022->
vendor->max_bpw)) {
1894 dev_err(&spi->
dev,
"illegal data size for this controller!\n");
1895 dev_err(&spi->
dev,
"This controller can only handle 4 <= n <= %d bit words\n",
1897 goto err_config_params;
1898 }
else if (bits <= 8) {
1899 dev_dbg(&spi->
dev,
"4 <= n <=8 bits per word\n");
1903 }
else if (bits <= 16) {
1904 dev_dbg(&spi->
dev,
"9 <= n <= 16 bits per word\n");
1909 dev_dbg(&spi->
dev,
"17 <= n <= 32 bits per word\n");
1922 chip->enable_dma =
true;
1923 dev_dbg(&spi->
dev,
"DMA mode set in controller state\n");
1929 chip->enable_dma =
false;
1930 dev_dbg(&spi->
dev,
"DMA mode NOT set in controller state\n");
1937 chip->cpsr = clk_freq.
cpsdvsr;
1940 if (pl022->
vendor->extended_cr) {
1943 if (pl022->
vendor->pl023) {
1996 if (pl022->
vendor->loopback) {
2009 spi_set_ctldata(spi, chip);
2012 spi_set_ctldata(spi,
NULL);
2024 static void pl022_cleanup(
struct spi_device *spi)
2026 struct chip_data *chip = spi_get_ctldata(spi);
2028 spi_set_ctldata(spi,
NULL);
2033 pl022_platform_data_dt_get(
struct device *
dev)
2040 dev_err(dev,
"no dt node defined\n");
2046 dev_err(dev,
"cannot allocate platform data memory\n");
2051 of_property_read_u32(np,
"num-cs", &tmp);
2053 of_property_read_u32(np,
"pl022,autosuspend-delay",
2055 pd->
rt = of_property_read_bool(np,
"pl022,rt");
2066 struct pl022 *pl022 =
NULL;
2068 int status = 0,
i, num_cs;
2071 "ARM PL022 driver, device ID: 0x%08x\n", adev->
periphid);
2073 platform_info = pl022_platform_data_dt_get(dev);
2075 if (!platform_info) {
2076 dev_err(dev,
"probe: no platform data defined\n");
2083 dev_err(dev,
"probe: no chip select defined\n");
2089 if (master ==
NULL) {
2090 dev_err(&adev->
dev,
"probe - cannot alloc SPI master\n");
2094 pl022 = spi_master_get_devdata(master);
2098 pl022->
vendor =
id->data;
2104 status = PTR_ERR(pl022->
pinctrl);
2105 goto err_no_pinctrl;
2115 dev_err(dev,
"could not set default pins\n");
2117 dev_err(dev,
"could not get default pinstate\n");
2122 dev_dbg(dev,
"could not get sleep pinstate\n");
2130 master->
cleanup = pl022_cleanup;
2131 master->
setup = pl022_setup;
2135 master->
rt = platform_info->
rt;
2139 for (i = 0; i < num_cs; i++)
2142 for (i = 0; i < num_cs; i++) {
2143 int cs_gpio = of_get_named_gpio(np,
"cs-gpios", i);
2152 if (gpio_is_valid(cs_gpio)) {
2155 "could not request %d gpio\n",
2159 "could set gpio %d as output\n",
2170 if (pl022->
vendor->extended_cr)
2177 goto err_no_ioregion;
2181 resource_size(&adev->
res));
2184 goto err_no_ioremap;
2190 if (IS_ERR(pl022->
clk)) {
2191 status = PTR_ERR(pl022->
clk);
2192 dev_err(&adev->
dev,
"could not retrieve SSP/SPI bus clock\n");
2198 dev_err(&adev->
dev,
"could not prepare SSP/SPI bus clock\n");
2204 dev_err(&adev->
dev,
"could not enable SSP/SPI bus clock\n");
2210 (
unsigned long)pl022);
2215 load_ssp_default_config(pl022);
2217 status = devm_request_irq(dev, adev->
irq[0], pl022_interrupt_handler,
2220 dev_err(&adev->
dev,
"probe - cannot get IRQ (%d)\n", status);
2226 status = pl022_dma_probe(pl022);
2236 "probe - problem registering spi master\n");
2237 goto err_spi_register;
2239 dev_dbg(dev,
"probe succeeded\n");
2244 "will use autosuspend for runtime pm, delay %dms\n",
2248 pm_runtime_use_autosuspend(dev);
2249 pm_runtime_put_autosuspend(dev);
2251 pm_runtime_put(dev);
2257 pl022_dma_remove(pl022);
2269 spi_master_put(master);
2285 pm_runtime_get_noresume(&adev->
dev);
2287 load_ssp_default_config(pl022);
2289 pl022_dma_remove(pl022);
2300 #if defined(CONFIG_SUSPEND) || defined(CONFIG_PM_RUNTIME)
2306 static void pl022_suspend_resources(
struct pl022 *pl022)
2318 "could not set pins to sleep state\n");
2322 static void pl022_resume_resources(
struct pl022 *pl022)
2332 "could not set default pins\n");
2339 #ifdef CONFIG_SUSPEND
2340 static int pl022_suspend(
struct device *dev)
2347 dev_warn(dev,
"cannot suspend master\n");
2350 pl022_suspend_resources(pl022);
2356 static int pl022_resume(
struct device *dev)
2361 pl022_resume_resources(pl022);
2366 dev_err(dev,
"problem starting queue (%d)\n", ret);
2374 #ifdef CONFIG_PM_RUNTIME
2375 static int pl022_runtime_suspend(
struct device *dev)
2379 pl022_suspend_resources(pl022);
2383 static int pl022_runtime_resume(
struct device *dev)
2387 pl022_resume_resources(pl022);
2392 static const struct dev_pm_ops pl022_dev_pm_ops = {
2401 .extended_cr =
false,
2410 .extended_cr =
true,
2419 .extended_cr =
true,
2424 static struct amba_id pl022_ids[] = {
2432 .data = &vendor_arm,
2453 .data = &vendor_st_pl023,
2462 .name =
"ssp-pl022",
2463 .pm = &pl022_dev_pm_ops,
2465 .id_table = pl022_ids,
2466 .probe = pl022_probe,
2470 static int __init pl022_init(
void)
2476 static void __exit pl022_exit(
void)