]>
Commit | Line | Data |
---|---|---|
ba6c3ce9 SG |
1 | /* |
2 | * Copyright (c) 2011 The Chromium OS Authors. | |
3 | * | |
1a459660 | 4 | * SPDX-License-Identifier: GPL-2.0+ |
ba6c3ce9 SG |
5 | */ |
6 | ||
7 | #include <common.h> | |
0efc0249 | 8 | #include <fdtdec.h> |
ba6c3ce9 SG |
9 | #include <malloc.h> |
10 | #include <spi.h> | |
11 | ||
5753d09b NK |
12 | int spi_set_wordlen(struct spi_slave *slave, unsigned int wordlen) |
13 | { | |
14 | if (wordlen == 0 || wordlen > 32) { | |
15 | printf("spi: invalid wordlen %d\n", wordlen); | |
16 | return -1; | |
17 | } | |
18 | ||
19 | slave->wordlen = wordlen; | |
20 | ||
21 | return 0; | |
22 | } | |
23 | ||
ba6c3ce9 SG |
24 | void *spi_do_alloc_slave(int offset, int size, unsigned int bus, |
25 | unsigned int cs) | |
26 | { | |
27 | struct spi_slave *slave; | |
28 | void *ptr; | |
29 | ||
30 | ptr = malloc(size); | |
31 | if (ptr) { | |
32 | memset(ptr, '\0', size); | |
33 | slave = (struct spi_slave *)(ptr + offset); | |
34 | slave->bus = bus; | |
35 | slave->cs = cs; | |
5753d09b | 36 | slave->wordlen = SPI_DEFAULT_WORDLEN; |
ba6c3ce9 SG |
37 | } |
38 | ||
39 | return ptr; | |
40 | } | |
0efc0249 SG |
41 | |
42 | #ifdef CONFIG_OF_SPI | |
43 | struct spi_slave *spi_base_setup_slave_fdt(const void *blob, int busnum, | |
44 | int node) | |
45 | { | |
46 | int cs, max_hz, mode = 0; | |
47 | ||
48 | cs = fdtdec_get_int(blob, node, "reg", -1); | |
49 | max_hz = fdtdec_get_int(blob, node, "spi-max-frequency", 100000); | |
50 | if (fdtdec_get_bool(blob, node, "spi-cpol")) | |
51 | mode |= SPI_CPOL; | |
52 | if (fdtdec_get_bool(blob, node, "spi-cpha")) | |
53 | mode |= SPI_CPHA; | |
54 | if (fdtdec_get_bool(blob, node, "spi-cs-high")) | |
55 | mode |= SPI_CS_HIGH; | |
22052c62 SG |
56 | if (fdtdec_get_bool(blob, node, "spi-half-duplex")) |
57 | mode |= SPI_PREAMBLE; | |
0efc0249 SG |
58 | return spi_setup_slave(busnum, cs, max_hz, mode); |
59 | } | |
60 | #endif |