aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/dw_spi_pci.c
diff options
context:
space:
mode:
authorFeng Tang <feng.tang@intel.com>2010-12-24 00:59:11 -0500
committerGrant Likely <grant.likely@secretlab.ca>2010-12-24 03:23:25 -0500
commit7063c0d942a1af2993531fbe52b4c74c1db818c4 (patch)
treefe91b01bd61449849736c47e0a05840fc47a5eb3 /drivers/spi/dw_spi_pci.c
parent79290a2aa2fd1c179a285218472092475630dc0e (diff)
spi/dw_spi: add DMA support
dw_spi driver in upstream only supports PIO mode, and this patch will support it to cowork with the Designware dma controller used on Intel Moorestown platform, at the same time it provides a general framework to support dw_spi core to cowork with dma controllers on other platforms It has been tested with a Option GTM501L 3G modem and Infenion 60x60 modem. To use DMA mode, DMA controller 2 of Moorestown has to be enabled Also change the dma interface suggested by Linus Walleij. Acked-by: Linus Walleij <linus.walleij@stericsson.com> Signed-off-by: Feng Tang <feng.tang@intel.com> [Typo fix and renames to match intel_mid_dma renaming] Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'drivers/spi/dw_spi_pci.c')
-rw-r--r--drivers/spi/dw_spi_pci.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/spi/dw_spi_pci.c b/drivers/spi/dw_spi_pci.c
index 1f52755dc878..49ec3aa1219f 100644
--- a/drivers/spi/dw_spi_pci.c
+++ b/drivers/spi/dw_spi_pci.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * mrst_spi_pci.c - PCI interface driver for DW SPI Core 2 * dw_spi_pci.c - PCI interface driver for DW SPI Core
3 * 3 *
4 * Copyright (c) 2009, Intel Corporation. 4 * Copyright (c) 2009, Intel Corporation.
5 * 5 *
@@ -26,8 +26,8 @@
26#define DRIVER_NAME "dw_spi_pci" 26#define DRIVER_NAME "dw_spi_pci"
27 27
28struct dw_spi_pci { 28struct dw_spi_pci {
29 struct pci_dev *pdev; 29 struct pci_dev *pdev;
30 struct dw_spi dws; 30 struct dw_spi dws;
31}; 31};
32 32
33static int __devinit spi_pci_probe(struct pci_dev *pdev, 33static int __devinit spi_pci_probe(struct pci_dev *pdev,
@@ -72,9 +72,17 @@ static int __devinit spi_pci_probe(struct pci_dev *pdev,
72 dws->parent_dev = &pdev->dev; 72 dws->parent_dev = &pdev->dev;
73 dws->bus_num = 0; 73 dws->bus_num = 0;
74 dws->num_cs = 4; 74 dws->num_cs = 4;
75 dws->max_freq = 25000000; /* for Moorestwon */
76 dws->irq = pdev->irq; 75 dws->irq = pdev->irq;
77 dws->fifo_len = 40; /* FIFO has 40 words buffer */ 76
77 /*
78 * Specific handling for Intel MID paltforms, like dma setup,
79 * clock rate, FIFO depth.
80 */
81 if (pdev->device == 0x0800) {
82 ret = dw_spi_mid_init(dws);
83 if (ret)
84 goto err_unmap;
85 }
78 86
79 ret = dw_spi_add_host(dws); 87 ret = dw_spi_add_host(dws);
80 if (ret) 88 if (ret)
@@ -140,7 +148,7 @@ static int spi_resume(struct pci_dev *pdev)
140#endif 148#endif
141 149
142static const struct pci_device_id pci_ids[] __devinitdata = { 150static const struct pci_device_id pci_ids[] __devinitdata = {
143 /* Intel Moorestown platform SPI controller 0 */ 151 /* Intel MID platform SPI controller 0 */
144 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0800) }, 152 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0800) },
145 {}, 153 {},
146}; 154};