1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * SPI master driver using generic bitbanged GPIO
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2006,2008 David Brownell
6*4882a593Smuzhiyun * Copyright (C) 2017 Linus Walleij
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun #include <linux/kernel.h>
9*4882a593Smuzhiyun #include <linux/module.h>
10*4882a593Smuzhiyun #include <linux/platform_device.h>
11*4882a593Smuzhiyun #include <linux/gpio/consumer.h>
12*4882a593Smuzhiyun #include <linux/of.h>
13*4882a593Smuzhiyun #include <linux/of_device.h>
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun #include <linux/spi/spi.h>
16*4882a593Smuzhiyun #include <linux/spi/spi_bitbang.h>
17*4882a593Smuzhiyun #include <linux/spi/spi_gpio.h>
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun /*
21*4882a593Smuzhiyun * This bitbanging SPI master driver should help make systems usable
22*4882a593Smuzhiyun * when a native hardware SPI engine is not available, perhaps because
23*4882a593Smuzhiyun * its driver isn't yet working or because the I/O pins it requires
24*4882a593Smuzhiyun * are used for other purposes.
25*4882a593Smuzhiyun *
26*4882a593Smuzhiyun * platform_device->driver_data ... points to spi_gpio
27*4882a593Smuzhiyun *
28*4882a593Smuzhiyun * spi->controller_state ... reserved for bitbang framework code
29*4882a593Smuzhiyun *
30*4882a593Smuzhiyun * spi->master->dev.driver_data ... points to spi_gpio->bitbang
31*4882a593Smuzhiyun */
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun struct spi_gpio {
34*4882a593Smuzhiyun struct spi_bitbang bitbang;
35*4882a593Smuzhiyun struct gpio_desc *sck;
36*4882a593Smuzhiyun struct gpio_desc *miso;
37*4882a593Smuzhiyun struct gpio_desc *mosi;
38*4882a593Smuzhiyun struct gpio_desc **cs_gpios;
39*4882a593Smuzhiyun };
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun /*----------------------------------------------------------------------*/
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun /*
44*4882a593Smuzhiyun * Because the overhead of going through four GPIO procedure calls
45*4882a593Smuzhiyun * per transferred bit can make performance a problem, this code
46*4882a593Smuzhiyun * is set up so that you can use it in either of two ways:
47*4882a593Smuzhiyun *
48*4882a593Smuzhiyun * - The slow generic way: set up platform_data to hold the GPIO
49*4882a593Smuzhiyun * numbers used for MISO/MOSI/SCK, and issue procedure calls for
50*4882a593Smuzhiyun * each of them. This driver can handle several such busses.
51*4882a593Smuzhiyun *
52*4882a593Smuzhiyun * - The quicker inlined way: only helps with platform GPIO code
53*4882a593Smuzhiyun * that inlines operations for constant GPIOs. This can give
54*4882a593Smuzhiyun * you tight (fast!) inner loops, but each such bus needs a
55*4882a593Smuzhiyun * new driver. You'll define a new C file, with Makefile and
56*4882a593Smuzhiyun * Kconfig support; the C code can be a total of six lines:
57*4882a593Smuzhiyun *
58*4882a593Smuzhiyun * #define DRIVER_NAME "myboard_spi2"
59*4882a593Smuzhiyun * #define SPI_MISO_GPIO 119
60*4882a593Smuzhiyun * #define SPI_MOSI_GPIO 120
61*4882a593Smuzhiyun * #define SPI_SCK_GPIO 121
62*4882a593Smuzhiyun * #define SPI_N_CHIPSEL 4
63*4882a593Smuzhiyun * #include "spi-gpio.c"
64*4882a593Smuzhiyun */
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun #ifndef DRIVER_NAME
67*4882a593Smuzhiyun #define DRIVER_NAME "spi_gpio"
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun #define GENERIC_BITBANG /* vs tight inlines */
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun #endif
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun /*----------------------------------------------------------------------*/
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun static inline struct spi_gpio *__pure
spi_to_spi_gpio(const struct spi_device * spi)76*4882a593Smuzhiyun spi_to_spi_gpio(const struct spi_device *spi)
77*4882a593Smuzhiyun {
78*4882a593Smuzhiyun const struct spi_bitbang *bang;
79*4882a593Smuzhiyun struct spi_gpio *spi_gpio;
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun bang = spi_master_get_devdata(spi->master);
82*4882a593Smuzhiyun spi_gpio = container_of(bang, struct spi_gpio, bitbang);
83*4882a593Smuzhiyun return spi_gpio;
84*4882a593Smuzhiyun }
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun /* These helpers are in turn called by the bitbang inlines */
setsck(const struct spi_device * spi,int is_on)87*4882a593Smuzhiyun static inline void setsck(const struct spi_device *spi, int is_on)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi);
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun gpiod_set_value_cansleep(spi_gpio->sck, is_on);
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun
setmosi(const struct spi_device * spi,int is_on)94*4882a593Smuzhiyun static inline void setmosi(const struct spi_device *spi, int is_on)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi);
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun gpiod_set_value_cansleep(spi_gpio->mosi, is_on);
99*4882a593Smuzhiyun }
100*4882a593Smuzhiyun
getmiso(const struct spi_device * spi)101*4882a593Smuzhiyun static inline int getmiso(const struct spi_device *spi)
102*4882a593Smuzhiyun {
103*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi);
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun if (spi->mode & SPI_3WIRE)
106*4882a593Smuzhiyun return !!gpiod_get_value_cansleep(spi_gpio->mosi);
107*4882a593Smuzhiyun else
108*4882a593Smuzhiyun return !!gpiod_get_value_cansleep(spi_gpio->miso);
109*4882a593Smuzhiyun }
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun /*
112*4882a593Smuzhiyun * NOTE: this clocks "as fast as we can". It "should" be a function of the
113*4882a593Smuzhiyun * requested device clock. Software overhead means we usually have trouble
114*4882a593Smuzhiyun * reaching even one Mbit/sec (except when we can inline bitops), so for now
115*4882a593Smuzhiyun * we'll just assume we never need additional per-bit slowdowns.
116*4882a593Smuzhiyun */
117*4882a593Smuzhiyun #define spidelay(nsecs) do {} while (0)
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun #include "spi-bitbang-txrx.h"
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun /*
122*4882a593Smuzhiyun * These functions can leverage inline expansion of GPIO calls to shrink
123*4882a593Smuzhiyun * costs for a txrx bit, often by factors of around ten (by instruction
124*4882a593Smuzhiyun * count). That is particularly visible for larger word sizes, but helps
125*4882a593Smuzhiyun * even with default 8-bit words.
126*4882a593Smuzhiyun *
127*4882a593Smuzhiyun * REVISIT overheads calling these functions for each word also have
128*4882a593Smuzhiyun * significant performance costs. Having txrx_bufs() calls that inline
129*4882a593Smuzhiyun * the txrx_word() logic would help performance, e.g. on larger blocks
130*4882a593Smuzhiyun * used with flash storage or MMC/SD. There should also be ways to make
131*4882a593Smuzhiyun * GCC be less stupid about reloading registers inside the I/O loops,
132*4882a593Smuzhiyun * even without inlined GPIO calls; __attribute__((hot)) on GCC 4.3?
133*4882a593Smuzhiyun */
134*4882a593Smuzhiyun
spi_gpio_txrx_word_mode0(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)135*4882a593Smuzhiyun static u32 spi_gpio_txrx_word_mode0(struct spi_device *spi,
136*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
137*4882a593Smuzhiyun {
138*4882a593Smuzhiyun return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits);
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun
spi_gpio_txrx_word_mode1(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)141*4882a593Smuzhiyun static u32 spi_gpio_txrx_word_mode1(struct spi_device *spi,
142*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
143*4882a593Smuzhiyun {
144*4882a593Smuzhiyun return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits);
145*4882a593Smuzhiyun }
146*4882a593Smuzhiyun
spi_gpio_txrx_word_mode2(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)147*4882a593Smuzhiyun static u32 spi_gpio_txrx_word_mode2(struct spi_device *spi,
148*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
149*4882a593Smuzhiyun {
150*4882a593Smuzhiyun return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits);
151*4882a593Smuzhiyun }
152*4882a593Smuzhiyun
spi_gpio_txrx_word_mode3(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)153*4882a593Smuzhiyun static u32 spi_gpio_txrx_word_mode3(struct spi_device *spi,
154*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
155*4882a593Smuzhiyun {
156*4882a593Smuzhiyun return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits);
157*4882a593Smuzhiyun }
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun /*
160*4882a593Smuzhiyun * These functions do not call setmosi or getmiso if respective flag
161*4882a593Smuzhiyun * (SPI_MASTER_NO_RX or SPI_MASTER_NO_TX) is set, so they are safe to
162*4882a593Smuzhiyun * call when such pin is not present or defined in the controller.
163*4882a593Smuzhiyun * A separate set of callbacks is defined to get highest possible
164*4882a593Smuzhiyun * speed in the generic case (when both MISO and MOSI lines are
165*4882a593Smuzhiyun * available), as optimiser will remove the checks when argument is
166*4882a593Smuzhiyun * constant.
167*4882a593Smuzhiyun */
168*4882a593Smuzhiyun
spi_gpio_spec_txrx_word_mode0(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)169*4882a593Smuzhiyun static u32 spi_gpio_spec_txrx_word_mode0(struct spi_device *spi,
170*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
171*4882a593Smuzhiyun {
172*4882a593Smuzhiyun flags = spi->master->flags;
173*4882a593Smuzhiyun return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits);
174*4882a593Smuzhiyun }
175*4882a593Smuzhiyun
spi_gpio_spec_txrx_word_mode1(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)176*4882a593Smuzhiyun static u32 spi_gpio_spec_txrx_word_mode1(struct spi_device *spi,
177*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
178*4882a593Smuzhiyun {
179*4882a593Smuzhiyun flags = spi->master->flags;
180*4882a593Smuzhiyun return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits);
181*4882a593Smuzhiyun }
182*4882a593Smuzhiyun
spi_gpio_spec_txrx_word_mode2(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)183*4882a593Smuzhiyun static u32 spi_gpio_spec_txrx_word_mode2(struct spi_device *spi,
184*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
185*4882a593Smuzhiyun {
186*4882a593Smuzhiyun flags = spi->master->flags;
187*4882a593Smuzhiyun return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits);
188*4882a593Smuzhiyun }
189*4882a593Smuzhiyun
spi_gpio_spec_txrx_word_mode3(struct spi_device * spi,unsigned nsecs,u32 word,u8 bits,unsigned flags)190*4882a593Smuzhiyun static u32 spi_gpio_spec_txrx_word_mode3(struct spi_device *spi,
191*4882a593Smuzhiyun unsigned nsecs, u32 word, u8 bits, unsigned flags)
192*4882a593Smuzhiyun {
193*4882a593Smuzhiyun flags = spi->master->flags;
194*4882a593Smuzhiyun return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits);
195*4882a593Smuzhiyun }
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun /*----------------------------------------------------------------------*/
198*4882a593Smuzhiyun
spi_gpio_chipselect(struct spi_device * spi,int is_active)199*4882a593Smuzhiyun static void spi_gpio_chipselect(struct spi_device *spi, int is_active)
200*4882a593Smuzhiyun {
201*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi);
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun /* set initial clock line level */
204*4882a593Smuzhiyun if (is_active)
205*4882a593Smuzhiyun gpiod_set_value_cansleep(spi_gpio->sck, spi->mode & SPI_CPOL);
206*4882a593Smuzhiyun
207*4882a593Smuzhiyun /* Drive chip select line, if we have one */
208*4882a593Smuzhiyun if (spi_gpio->cs_gpios) {
209*4882a593Smuzhiyun struct gpio_desc *cs = spi_gpio->cs_gpios[spi->chip_select];
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun /* SPI chip selects are normally active-low */
212*4882a593Smuzhiyun gpiod_set_value_cansleep(cs, (spi->mode & SPI_CS_HIGH) ? is_active : !is_active);
213*4882a593Smuzhiyun }
214*4882a593Smuzhiyun }
215*4882a593Smuzhiyun
spi_gpio_setup(struct spi_device * spi)216*4882a593Smuzhiyun static int spi_gpio_setup(struct spi_device *spi)
217*4882a593Smuzhiyun {
218*4882a593Smuzhiyun struct gpio_desc *cs;
219*4882a593Smuzhiyun int status = 0;
220*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi);
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun /*
223*4882a593Smuzhiyun * The CS GPIOs have already been
224*4882a593Smuzhiyun * initialized from the descriptor lookup.
225*4882a593Smuzhiyun */
226*4882a593Smuzhiyun if (spi_gpio->cs_gpios) {
227*4882a593Smuzhiyun cs = spi_gpio->cs_gpios[spi->chip_select];
228*4882a593Smuzhiyun if (!spi->controller_state && cs)
229*4882a593Smuzhiyun status = gpiod_direction_output(cs,
230*4882a593Smuzhiyun !(spi->mode & SPI_CS_HIGH));
231*4882a593Smuzhiyun }
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun if (!status)
234*4882a593Smuzhiyun status = spi_bitbang_setup(spi);
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun return status;
237*4882a593Smuzhiyun }
238*4882a593Smuzhiyun
spi_gpio_set_direction(struct spi_device * spi,bool output)239*4882a593Smuzhiyun static int spi_gpio_set_direction(struct spi_device *spi, bool output)
240*4882a593Smuzhiyun {
241*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_to_spi_gpio(spi);
242*4882a593Smuzhiyun int ret;
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun if (output)
245*4882a593Smuzhiyun return gpiod_direction_output(spi_gpio->mosi, 1);
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun ret = gpiod_direction_input(spi_gpio->mosi);
248*4882a593Smuzhiyun if (ret)
249*4882a593Smuzhiyun return ret;
250*4882a593Smuzhiyun /*
251*4882a593Smuzhiyun * Send a turnaround high impedance cycle when switching
252*4882a593Smuzhiyun * from output to input. Theoretically there should be
253*4882a593Smuzhiyun * a clock delay here, but as has been noted above, the
254*4882a593Smuzhiyun * nsec delay function for bit-banged GPIO is simply
255*4882a593Smuzhiyun * {} because bit-banging just doesn't get fast enough
256*4882a593Smuzhiyun * anyway.
257*4882a593Smuzhiyun */
258*4882a593Smuzhiyun if (spi->mode & SPI_3WIRE_HIZ) {
259*4882a593Smuzhiyun gpiod_set_value_cansleep(spi_gpio->sck,
260*4882a593Smuzhiyun !(spi->mode & SPI_CPOL));
261*4882a593Smuzhiyun gpiod_set_value_cansleep(spi_gpio->sck,
262*4882a593Smuzhiyun !!(spi->mode & SPI_CPOL));
263*4882a593Smuzhiyun }
264*4882a593Smuzhiyun return 0;
265*4882a593Smuzhiyun }
266*4882a593Smuzhiyun
spi_gpio_cleanup(struct spi_device * spi)267*4882a593Smuzhiyun static void spi_gpio_cleanup(struct spi_device *spi)
268*4882a593Smuzhiyun {
269*4882a593Smuzhiyun spi_bitbang_cleanup(spi);
270*4882a593Smuzhiyun }
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun /*
273*4882a593Smuzhiyun * It can be convenient to use this driver with pins that have alternate
274*4882a593Smuzhiyun * functions associated with a "native" SPI controller if a driver for that
275*4882a593Smuzhiyun * controller is not available, or is missing important functionality.
276*4882a593Smuzhiyun *
277*4882a593Smuzhiyun * On platforms which can do so, configure MISO with a weak pullup unless
278*4882a593Smuzhiyun * there's an external pullup on that signal. That saves power by avoiding
279*4882a593Smuzhiyun * floating signals. (A weak pulldown would save power too, but many
280*4882a593Smuzhiyun * drivers expect to see all-ones data as the no slave "response".)
281*4882a593Smuzhiyun */
spi_gpio_request(struct device * dev,struct spi_gpio * spi_gpio)282*4882a593Smuzhiyun static int spi_gpio_request(struct device *dev, struct spi_gpio *spi_gpio)
283*4882a593Smuzhiyun {
284*4882a593Smuzhiyun spi_gpio->mosi = devm_gpiod_get_optional(dev, "mosi", GPIOD_OUT_LOW);
285*4882a593Smuzhiyun if (IS_ERR(spi_gpio->mosi))
286*4882a593Smuzhiyun return PTR_ERR(spi_gpio->mosi);
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun spi_gpio->miso = devm_gpiod_get_optional(dev, "miso", GPIOD_IN);
289*4882a593Smuzhiyun if (IS_ERR(spi_gpio->miso))
290*4882a593Smuzhiyun return PTR_ERR(spi_gpio->miso);
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun spi_gpio->sck = devm_gpiod_get(dev, "sck", GPIOD_OUT_LOW);
293*4882a593Smuzhiyun return PTR_ERR_OR_ZERO(spi_gpio->sck);
294*4882a593Smuzhiyun }
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun #ifdef CONFIG_OF
297*4882a593Smuzhiyun static const struct of_device_id spi_gpio_dt_ids[] = {
298*4882a593Smuzhiyun { .compatible = "spi-gpio" },
299*4882a593Smuzhiyun {}
300*4882a593Smuzhiyun };
301*4882a593Smuzhiyun MODULE_DEVICE_TABLE(of, spi_gpio_dt_ids);
302*4882a593Smuzhiyun
spi_gpio_probe_dt(struct platform_device * pdev,struct spi_master * master)303*4882a593Smuzhiyun static int spi_gpio_probe_dt(struct platform_device *pdev,
304*4882a593Smuzhiyun struct spi_master *master)
305*4882a593Smuzhiyun {
306*4882a593Smuzhiyun master->dev.of_node = pdev->dev.of_node;
307*4882a593Smuzhiyun master->use_gpio_descriptors = true;
308*4882a593Smuzhiyun
309*4882a593Smuzhiyun return 0;
310*4882a593Smuzhiyun }
311*4882a593Smuzhiyun #else
spi_gpio_probe_dt(struct platform_device * pdev,struct spi_master * master)312*4882a593Smuzhiyun static inline int spi_gpio_probe_dt(struct platform_device *pdev,
313*4882a593Smuzhiyun struct spi_master *master)
314*4882a593Smuzhiyun {
315*4882a593Smuzhiyun return 0;
316*4882a593Smuzhiyun }
317*4882a593Smuzhiyun #endif
318*4882a593Smuzhiyun
spi_gpio_probe_pdata(struct platform_device * pdev,struct spi_master * master)319*4882a593Smuzhiyun static int spi_gpio_probe_pdata(struct platform_device *pdev,
320*4882a593Smuzhiyun struct spi_master *master)
321*4882a593Smuzhiyun {
322*4882a593Smuzhiyun struct device *dev = &pdev->dev;
323*4882a593Smuzhiyun struct spi_gpio_platform_data *pdata = dev_get_platdata(dev);
324*4882a593Smuzhiyun struct spi_gpio *spi_gpio = spi_master_get_devdata(master);
325*4882a593Smuzhiyun int i;
326*4882a593Smuzhiyun
327*4882a593Smuzhiyun #ifdef GENERIC_BITBANG
328*4882a593Smuzhiyun if (!pdata || !pdata->num_chipselect)
329*4882a593Smuzhiyun return -ENODEV;
330*4882a593Smuzhiyun #endif
331*4882a593Smuzhiyun /*
332*4882a593Smuzhiyun * The master needs to think there is a chipselect even if not
333*4882a593Smuzhiyun * connected
334*4882a593Smuzhiyun */
335*4882a593Smuzhiyun master->num_chipselect = pdata->num_chipselect ?: 1;
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun spi_gpio->cs_gpios = devm_kcalloc(dev, master->num_chipselect,
338*4882a593Smuzhiyun sizeof(*spi_gpio->cs_gpios),
339*4882a593Smuzhiyun GFP_KERNEL);
340*4882a593Smuzhiyun if (!spi_gpio->cs_gpios)
341*4882a593Smuzhiyun return -ENOMEM;
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun for (i = 0; i < master->num_chipselect; i++) {
344*4882a593Smuzhiyun spi_gpio->cs_gpios[i] = devm_gpiod_get_index(dev, "cs", i,
345*4882a593Smuzhiyun GPIOD_OUT_HIGH);
346*4882a593Smuzhiyun if (IS_ERR(spi_gpio->cs_gpios[i]))
347*4882a593Smuzhiyun return PTR_ERR(spi_gpio->cs_gpios[i]);
348*4882a593Smuzhiyun }
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun return 0;
351*4882a593Smuzhiyun }
352*4882a593Smuzhiyun
spi_gpio_probe(struct platform_device * pdev)353*4882a593Smuzhiyun static int spi_gpio_probe(struct platform_device *pdev)
354*4882a593Smuzhiyun {
355*4882a593Smuzhiyun int status;
356*4882a593Smuzhiyun struct spi_master *master;
357*4882a593Smuzhiyun struct spi_gpio *spi_gpio;
358*4882a593Smuzhiyun struct device *dev = &pdev->dev;
359*4882a593Smuzhiyun struct spi_bitbang *bb;
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun master = devm_spi_alloc_master(dev, sizeof(*spi_gpio));
362*4882a593Smuzhiyun if (!master)
363*4882a593Smuzhiyun return -ENOMEM;
364*4882a593Smuzhiyun
365*4882a593Smuzhiyun if (pdev->dev.of_node)
366*4882a593Smuzhiyun status = spi_gpio_probe_dt(pdev, master);
367*4882a593Smuzhiyun else
368*4882a593Smuzhiyun status = spi_gpio_probe_pdata(pdev, master);
369*4882a593Smuzhiyun
370*4882a593Smuzhiyun if (status)
371*4882a593Smuzhiyun return status;
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun spi_gpio = spi_master_get_devdata(master);
374*4882a593Smuzhiyun
375*4882a593Smuzhiyun status = spi_gpio_request(dev, spi_gpio);
376*4882a593Smuzhiyun if (status)
377*4882a593Smuzhiyun return status;
378*4882a593Smuzhiyun
379*4882a593Smuzhiyun master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
380*4882a593Smuzhiyun master->mode_bits = SPI_3WIRE | SPI_3WIRE_HIZ | SPI_CPHA | SPI_CPOL |
381*4882a593Smuzhiyun SPI_CS_HIGH;
382*4882a593Smuzhiyun if (!spi_gpio->mosi) {
383*4882a593Smuzhiyun /* HW configuration without MOSI pin
384*4882a593Smuzhiyun *
385*4882a593Smuzhiyun * No setting SPI_MASTER_NO_RX here - if there is only
386*4882a593Smuzhiyun * a MOSI pin connected the host can still do RX by
387*4882a593Smuzhiyun * changing the direction of the line.
388*4882a593Smuzhiyun */
389*4882a593Smuzhiyun master->flags = SPI_MASTER_NO_TX;
390*4882a593Smuzhiyun }
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun master->bus_num = pdev->id;
393*4882a593Smuzhiyun master->setup = spi_gpio_setup;
394*4882a593Smuzhiyun master->cleanup = spi_gpio_cleanup;
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun bb = &spi_gpio->bitbang;
397*4882a593Smuzhiyun bb->master = master;
398*4882a593Smuzhiyun /*
399*4882a593Smuzhiyun * There is some additional business, apart from driving the CS GPIO
400*4882a593Smuzhiyun * line, that we need to do on selection. This makes the local
401*4882a593Smuzhiyun * callback for chipselect always get called.
402*4882a593Smuzhiyun */
403*4882a593Smuzhiyun master->flags |= SPI_MASTER_GPIO_SS;
404*4882a593Smuzhiyun bb->chipselect = spi_gpio_chipselect;
405*4882a593Smuzhiyun bb->set_line_direction = spi_gpio_set_direction;
406*4882a593Smuzhiyun
407*4882a593Smuzhiyun if (master->flags & SPI_MASTER_NO_TX) {
408*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0;
409*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1;
410*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2;
411*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_3] = spi_gpio_spec_txrx_word_mode3;
412*4882a593Smuzhiyun } else {
413*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_0] = spi_gpio_txrx_word_mode0;
414*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_1] = spi_gpio_txrx_word_mode1;
415*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_2] = spi_gpio_txrx_word_mode2;
416*4882a593Smuzhiyun bb->txrx_word[SPI_MODE_3] = spi_gpio_txrx_word_mode3;
417*4882a593Smuzhiyun }
418*4882a593Smuzhiyun bb->setup_transfer = spi_bitbang_setup_transfer;
419*4882a593Smuzhiyun
420*4882a593Smuzhiyun status = spi_bitbang_init(&spi_gpio->bitbang);
421*4882a593Smuzhiyun if (status)
422*4882a593Smuzhiyun return status;
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun return devm_spi_register_master(&pdev->dev, master);
425*4882a593Smuzhiyun }
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun MODULE_ALIAS("platform:" DRIVER_NAME);
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun static struct platform_driver spi_gpio_driver = {
430*4882a593Smuzhiyun .driver = {
431*4882a593Smuzhiyun .name = DRIVER_NAME,
432*4882a593Smuzhiyun .of_match_table = of_match_ptr(spi_gpio_dt_ids),
433*4882a593Smuzhiyun },
434*4882a593Smuzhiyun .probe = spi_gpio_probe,
435*4882a593Smuzhiyun };
436*4882a593Smuzhiyun module_platform_driver(spi_gpio_driver);
437*4882a593Smuzhiyun
438*4882a593Smuzhiyun MODULE_DESCRIPTION("SPI master driver using generic bitbanged GPIO ");
439*4882a593Smuzhiyun MODULE_AUTHOR("David Brownell");
440*4882a593Smuzhiyun MODULE_LICENSE("GPL");
441