aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-3.10/0046-spi-spi-bcm2708-respect-per-transfer-SPI-clock-speed.patch
blob: 3f634dc5030e3e88aac422ebe27bebf03bcc2d73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 78948302252dcffa18716390f784ba03e4320c67 Mon Sep 17 00:00:00 2001
From: Kamal Mostafa <kamal@whence.com>
Date: Mon, 22 Oct 2012 15:52:44 -0700
Subject: [PATCH 046/196] spi/spi-bcm2708: respect per-transfer SPI clock
 speed_hz value

The bcm2708 SPI driver's bcm2708_process_transfer() was ignoring the
per-transfer speed_hz value even when it was provided (it always just
used the spi device's max_speed_hz value).  Now, per-transfer speed_hz
values are respected.

Also added debug print to bcm2708_setup_state() to help keep an eye on
the configured SPI parameters.

Signed-off-by: Kamal Mostafa <kamal@whence.com>
---
 drivers/spi/spi-bcm2708.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c
index 8513704..b74aa32 100644
--- a/drivers/spi/spi-bcm2708.c
+++ b/drivers/spi/spi-bcm2708.c
@@ -259,6 +259,10 @@ static int bcm2708_setup_state(struct spi_master *master,
 	if (state) {
 		state->cs = cs;
 		state->cdiv = cdiv;
+		dev_dbg(dev, "setup: want %d Hz; "
+			"bus_hz=%lu / cdiv=%u == %lu Hz; "
+			"mode %u: cs 0x%08X\n",
+			hz, bus_hz, cdiv, bus_hz/cdiv, mode, cs);
 	}
 
 	return 0;
@@ -277,7 +281,8 @@ static int bcm2708_process_transfer(struct bcm2708_spi *bs,
 
 	if (xfer->bits_per_word || xfer->speed_hz) {
 		ret = bcm2708_setup_state(spi->master, &spi->dev, &state,
-			spi->max_speed_hz, spi->chip_select, spi->mode,
+			xfer->speed_hz ? xfer->speed_hz : spi->max_speed_hz,
+			spi->chip_select, spi->mode,
 			spi->bits_per_word);
 		if (ret)
 			return ret;
-- 
1.9.1