xref: /OK3568_Linux_fs/kernel/drivers/spi/spi-gpio.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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