diff options
author | Feng Tang <feng.tang@intel.com> | 2010-12-24 00:59:11 -0500 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-12-24 03:23:25 -0500 |
commit | 7063c0d942a1af2993531fbe52b4c74c1db818c4 (patch) | |
tree | fe91b01bd61449849736c47e0a05840fc47a5eb3 /drivers/spi/dw_spi_pci.c | |
parent | 79290a2aa2fd1c179a285218472092475630dc0e (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.c | 20 |
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 | ||
28 | struct dw_spi_pci { | 28 | struct 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 | ||
33 | static int __devinit spi_pci_probe(struct pci_dev *pdev, | 33 | static 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 | ||
142 | static const struct pci_device_id pci_ids[] __devinitdata = { | 150 | static 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 | }; |