summaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-05-18 12:58:20 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-05-21 09:35:19 +0200
commit56dd3c6c2ad2037a7877eafb6f1d4dab76def67b (patch)
tree9f5f9319e8ecdb01ee1cad6b6334d553d56008d7 /drivers/spi/spi.c
parent4b77e455a5aa67920b2d4e0f1dbb53541a6e0338 (diff)
downloadbarebox-56dd3c6c2ad2037a7877eafb6f1d4dab76def67b.tar.gz
barebox-56dd3c6c2ad2037a7877eafb6f1d4dab76def67b.tar.xz
spi: improve devicetree support
- zero spi_board_info structure to not accidently pass unitilialized fields - parse spi-max-frequency property from devicetree - parse mode flags from devicetree Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r--drivers/spi/spi.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index d58b6646b5..f460a7a690 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -108,9 +108,20 @@ void spi_of_register_slaves(struct spi_master *master, struct device_node *node)
struct property *reg;
device_node_for_nach_child(node, n) {
- chip.name = n->name;
+ memset(&chip, 0, sizeof(chip));
+ chip.name = xstrdup(n->name);
chip.bus_num = master->bus_num;
- chip.max_speed_hz = 300000; /* FIXME */
+ /* Mode (clock phase/polarity/etc.) */
+ if (of_find_property(n, "spi-cpha"))
+ chip.mode |= SPI_CPHA;
+ if (of_find_property(n, "spi-cpol"))
+ chip.mode |= SPI_CPOL;
+ if (of_find_property(n, "spi-cs-high"))
+ chip.mode |= SPI_CS_HIGH;
+ if (of_find_property(n, "spi-3wire"))
+ chip.mode |= SPI_3WIRE;
+ of_property_read_u32(n, "spi-max-frequency",
+ &chip.max_speed_hz);
reg = of_find_property(n, "reg");
if (!reg)
continue;