diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-05-18 12:58:20 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-05-21 09:35:19 +0200 |
commit | 56dd3c6c2ad2037a7877eafb6f1d4dab76def67b (patch) | |
tree | 9f5f9319e8ecdb01ee1cad6b6334d553d56008d7 /drivers/spi/spi.c | |
parent | 4b77e455a5aa67920b2d4e0f1dbb53541a6e0338 (diff) | |
download | barebox-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.c | 15 |
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; |