diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-24 12:30:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-24 12:30:20 -0400 |
commit | e264ac8cad5a3f2e717ac68eb300766eef61f568 (patch) | |
tree | f6230e79ef751783d9a723c826dd64efde7d53c0 /drivers/spi | |
parent | 200460067d19db4aab7f1d9f5c95dd644d260337 (diff) | |
parent | 06fb01fd1dc624d891cbe039a88a44bc8a8a9ec1 (diff) |
Merge branch 'devicetree/merge' of git://git.secretlab.ca/git/linux-2.6
* 'devicetree/merge' of git://git.secretlab.ca/git/linux-2.6:
spi/pl022: Add loopback support for the SPI on 5500
spi/omap_mcspi: Fix broken last word xfer
of/flattree: minor cleanups
dt: eliminate OF_NO_DEEP_PROBE and test for NULL match table
dt: protect against NULL matches passed to of_match_node()
dt: Refactor of_platform_bus_probe()
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/amba-pl022.c | 20 | ||||
-rw-r--r-- | drivers/spi/omap2_mcspi.c | 6 |
2 files changed, 22 insertions, 4 deletions
diff --git a/drivers/spi/amba-pl022.c b/drivers/spi/amba-pl022.c index 5c2b092a915..5a4e0afb9ad 100644 --- a/drivers/spi/amba-pl022.c +++ b/drivers/spi/amba-pl022.c | |||
@@ -324,6 +324,7 @@ struct vendor_data { | |||
324 | bool unidir; | 324 | bool unidir; |
325 | bool extended_cr; | 325 | bool extended_cr; |
326 | bool pl023; | 326 | bool pl023; |
327 | bool loopback; | ||
327 | }; | 328 | }; |
328 | 329 | ||
329 | /** | 330 | /** |
@@ -1983,7 +1984,7 @@ static int pl022_setup(struct spi_device *spi) | |||
1983 | 1984 | ||
1984 | SSP_WRITE_BITS(chip->cr0, clk_freq.scr, SSP_CR0_MASK_SCR, 8); | 1985 | SSP_WRITE_BITS(chip->cr0, clk_freq.scr, SSP_CR0_MASK_SCR, 8); |
1985 | /* Loopback is available on all versions except PL023 */ | 1986 | /* Loopback is available on all versions except PL023 */ |
1986 | if (!pl022->vendor->pl023) { | 1987 | if (pl022->vendor->loopback) { |
1987 | if (spi->mode & SPI_LOOP) | 1988 | if (spi->mode & SPI_LOOP) |
1988 | tmp = LOOPBACK_ENABLED; | 1989 | tmp = LOOPBACK_ENABLED; |
1989 | else | 1990 | else |
@@ -2233,6 +2234,7 @@ static struct vendor_data vendor_arm = { | |||
2233 | .unidir = false, | 2234 | .unidir = false, |
2234 | .extended_cr = false, | 2235 | .extended_cr = false, |
2235 | .pl023 = false, | 2236 | .pl023 = false, |
2237 | .loopback = true, | ||
2236 | }; | 2238 | }; |
2237 | 2239 | ||
2238 | 2240 | ||
@@ -2242,6 +2244,7 @@ static struct vendor_data vendor_st = { | |||
2242 | .unidir = false, | 2244 | .unidir = false, |
2243 | .extended_cr = true, | 2245 | .extended_cr = true, |
2244 | .pl023 = false, | 2246 | .pl023 = false, |
2247 | .loopback = true, | ||
2245 | }; | 2248 | }; |
2246 | 2249 | ||
2247 | static struct vendor_data vendor_st_pl023 = { | 2250 | static struct vendor_data vendor_st_pl023 = { |
@@ -2250,6 +2253,16 @@ static struct vendor_data vendor_st_pl023 = { | |||
2250 | .unidir = false, | 2253 | .unidir = false, |
2251 | .extended_cr = true, | 2254 | .extended_cr = true, |
2252 | .pl023 = true, | 2255 | .pl023 = true, |
2256 | .loopback = false, | ||
2257 | }; | ||
2258 | |||
2259 | static struct vendor_data vendor_db5500_pl023 = { | ||
2260 | .fifodepth = 32, | ||
2261 | .max_bpw = 32, | ||
2262 | .unidir = false, | ||
2263 | .extended_cr = true, | ||
2264 | .pl023 = true, | ||
2265 | .loopback = true, | ||
2253 | }; | 2266 | }; |
2254 | 2267 | ||
2255 | static struct amba_id pl022_ids[] = { | 2268 | static struct amba_id pl022_ids[] = { |
@@ -2283,6 +2296,11 @@ static struct amba_id pl022_ids[] = { | |||
2283 | .mask = 0xffffffff, | 2296 | .mask = 0xffffffff, |
2284 | .data = &vendor_st_pl023, | 2297 | .data = &vendor_st_pl023, |
2285 | }, | 2298 | }, |
2299 | { | ||
2300 | .id = 0x10080023, | ||
2301 | .mask = 0xffffffff, | ||
2302 | .data = &vendor_db5500_pl023, | ||
2303 | }, | ||
2286 | { 0, 0 }, | 2304 | { 0, 0 }, |
2287 | }; | 2305 | }; |
2288 | 2306 | ||
diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index 3a5ed06d3d2..6f86ba0175a 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c | |||
@@ -517,7 +517,7 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) | |||
517 | dev_vdbg(&spi->dev, "read-%d %02x\n", | 517 | dev_vdbg(&spi->dev, "read-%d %02x\n", |
518 | word_len, *(rx - 1)); | 518 | word_len, *(rx - 1)); |
519 | } | 519 | } |
520 | } while (c > (word_len>>3)); | 520 | } while (c); |
521 | } else if (word_len <= 16) { | 521 | } else if (word_len <= 16) { |
522 | u16 *rx; | 522 | u16 *rx; |
523 | const u16 *tx; | 523 | const u16 *tx; |
@@ -564,7 +564,7 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) | |||
564 | dev_vdbg(&spi->dev, "read-%d %04x\n", | 564 | dev_vdbg(&spi->dev, "read-%d %04x\n", |
565 | word_len, *(rx - 1)); | 565 | word_len, *(rx - 1)); |
566 | } | 566 | } |
567 | } while (c > (word_len>>3)); | 567 | } while (c >= 2); |
568 | } else if (word_len <= 32) { | 568 | } else if (word_len <= 32) { |
569 | u32 *rx; | 569 | u32 *rx; |
570 | const u32 *tx; | 570 | const u32 *tx; |
@@ -611,7 +611,7 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) | |||
611 | dev_vdbg(&spi->dev, "read-%d %08x\n", | 611 | dev_vdbg(&spi->dev, "read-%d %08x\n", |
612 | word_len, *(rx - 1)); | 612 | word_len, *(rx - 1)); |
613 | } | 613 | } |
614 | } while (c > (word_len>>3)); | 614 | } while (c >= 4); |
615 | } | 615 | } |
616 | 616 | ||
617 | /* for TX_ONLY mode, be sure all words have shifted out */ | 617 | /* for TX_ONLY mode, be sure all words have shifted out */ |