1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Mac80211 SPI driver for ST-Ericsson CW1200 device
4  *
5  * Copyright (c) 2011, Sagrad Inc.
6  * Author:  Solomon Peachy <speachy@sagrad.com>
7  *
8  * Based on cw1200_sdio.c
9  * Copyright (c) 2010, ST-Ericsson
10  * Author: Dmitry Tarnyagin <dmitry.tarnyagin@lockless.no>
11  */
12 
13 #include <linux/module.h>
14 #include <linux/gpio.h>
15 #include <linux/delay.h>
16 #include <linux/spinlock.h>
17 #include <linux/interrupt.h>
18 #include <net/mac80211.h>
19 
20 #include <linux/spi/spi.h>
21 #include <linux/device.h>
22 
23 #include "cw1200.h"
24 #include "hwbus.h"
25 #include <linux/platform_data/net-cw1200.h>
26 #include "hwio.h"
27 
28 MODULE_AUTHOR("Solomon Peachy <speachy@sagrad.com>");
29 MODULE_DESCRIPTION("mac80211 ST-Ericsson CW1200 SPI driver");
30 MODULE_LICENSE("GPL");
31 MODULE_ALIAS("spi:cw1200_wlan_spi");
32 
33 /* #define SPI_DEBUG */
34 
35 struct hwbus_priv {
36 	struct spi_device	*func;
37 	struct cw1200_common	*core;
38 	const struct cw1200_platform_data_spi *pdata;
39 	spinlock_t		lock; /* Serialize all bus operations */
40 	wait_queue_head_t       wq;
41 	int claimed;
42 };
43 
44 #define SDIO_TO_SPI_ADDR(addr) ((addr & 0x1f)>>2)
45 #define SET_WRITE 0x7FFF /* usage: and operation */
46 #define SET_READ 0x8000  /* usage: or operation */
47 
48 /* Notes on byte ordering:
49    LE:  B0 B1 B2 B3
50    BE:  B3 B2 B1 B0
51 
52    Hardware expects 32-bit data to be written as 16-bit BE words:
53 
54    B1 B0 B3 B2
55 */
56 
57 static int cw1200_spi_memcpy_fromio(struct hwbus_priv *self,
58 				     unsigned int addr,
59 				     void *dst, int count)
60 {
61 	int ret, i;
62 	u16 regaddr;
63 	struct spi_message      m;
64 
65 	struct spi_transfer     t_addr = {
66 		.tx_buf         = &regaddr,
67 		.len            = sizeof(regaddr),
68 	};
69 	struct spi_transfer     t_msg = {
70 		.rx_buf         = dst,
71 		.len            = count,
72 	};
73 
74 	regaddr = (SDIO_TO_SPI_ADDR(addr))<<12;
75 	regaddr |= SET_READ;
76 	regaddr |= (count>>1);
77 
78 #ifdef SPI_DEBUG
79 	pr_info("READ : %04d from 0x%02x (%04x)\n", count, addr, regaddr);
80 #endif
81 
82 	/* Header is LE16 */
83 	regaddr = cpu_to_le16(regaddr);
84 
85 	/* We have to byteswap if the SPI bus is limited to 8b operation
86 	   or we are running on a Big Endian system
87 	*/
88 #if defined(__LITTLE_ENDIAN)
89 	if (self->func->bits_per_word == 8)
90 #endif
91 		regaddr = swab16(regaddr);
92 
93 	spi_message_init(&m);
94 	spi_message_add_tail(&t_addr, &m);
95 	spi_message_add_tail(&t_msg, &m);
96 	ret = spi_sync(self->func, &m);
97 
98 #ifdef SPI_DEBUG
99 	pr_info("READ : ");
100 	for (i = 0; i < t_addr.len; i++)
101 		printk("%02x ", ((u8 *)t_addr.tx_buf)[i]);
102 	printk(" : ");
103 	for (i = 0; i < t_msg.len; i++)
104 		printk("%02x ", ((u8 *)t_msg.rx_buf)[i]);
105 	printk("\n");
106 #endif
107 
108 	/* We have to byteswap if the SPI bus is limited to 8b operation
109 	   or we are running on a Big Endian system
110 	*/
111 #if defined(__LITTLE_ENDIAN)
112 	if (self->func->bits_per_word == 8)
113 #endif
114 	{
115 		uint16_t *buf = (uint16_t *)dst;
116 		for (i = 0; i < ((count + 1) >> 1); i++)
117 			buf[i] = swab16(buf[i]);
118 	}
119 
120 	return ret;
121 }
122 
123 static int cw1200_spi_memcpy_toio(struct hwbus_priv *self,
124 				   unsigned int addr,
125 				   const void *src, int count)
126 {
127 	int rval, i;
128 	u16 regaddr;
129 	struct spi_transfer     t_addr = {
130 		.tx_buf         = &regaddr,
131 		.len            = sizeof(regaddr),
132 	};
133 	struct spi_transfer     t_msg = {
134 		.tx_buf         = src,
135 		.len            = count,
136 	};
137 	struct spi_message      m;
138 
139 	regaddr = (SDIO_TO_SPI_ADDR(addr))<<12;
140 	regaddr &= SET_WRITE;
141 	regaddr |= (count>>1);
142 
143 #ifdef SPI_DEBUG
144 	pr_info("WRITE: %04d  to  0x%02x (%04x)\n", count, addr, regaddr);
145 #endif
146 
147 	/* Header is LE16 */
148 	regaddr = cpu_to_le16(regaddr);
149 
150 	/* We have to byteswap if the SPI bus is limited to 8b operation
151 	   or we are running on a Big Endian system
152 	*/
153 #if defined(__LITTLE_ENDIAN)
154 	if (self->func->bits_per_word == 8)
155 #endif
156 	{
157 		uint16_t *buf = (uint16_t *)src;
158 	        regaddr = swab16(regaddr);
159 		for (i = 0; i < ((count + 1) >> 1); i++)
160 			buf[i] = swab16(buf[i]);
161 	}
162 
163 #ifdef SPI_DEBUG
164 	pr_info("WRITE: ");
165 	for (i = 0; i < t_addr.len; i++)
166 		printk("%02x ", ((u8 *)t_addr.tx_buf)[i]);
167 	printk(" : ");
168 	for (i = 0; i < t_msg.len; i++)
169 		printk("%02x ", ((u8 *)t_msg.tx_buf)[i]);
170 	printk("\n");
171 #endif
172 
173 	spi_message_init(&m);
174 	spi_message_add_tail(&t_addr, &m);
175 	spi_message_add_tail(&t_msg, &m);
176 	rval = spi_sync(self->func, &m);
177 
178 #ifdef SPI_DEBUG
179 	pr_info("WROTE: %d\n", m.actual_length);
180 #endif
181 
182 #if defined(__LITTLE_ENDIAN)
183 	/* We have to byteswap if the SPI bus is limited to 8b operation */
184 	if (self->func->bits_per_word == 8)
185 #endif
186 	{
187 		uint16_t *buf = (uint16_t *)src;
188 		for (i = 0; i < ((count + 1) >> 1); i++)
189 			buf[i] = swab16(buf[i]);
190 	}
191 	return rval;
192 }
193 
194 static void cw1200_spi_lock(struct hwbus_priv *self)
195 {
196 	unsigned long flags;
197 
198 	DECLARE_WAITQUEUE(wait, current);
199 
200 	might_sleep();
201 
202 	add_wait_queue(&self->wq, &wait);
203 	spin_lock_irqsave(&self->lock, flags);
204 	while (1) {
205 		set_current_state(TASK_UNINTERRUPTIBLE);
206 		if (!self->claimed)
207 			break;
208 		spin_unlock_irqrestore(&self->lock, flags);
209 		schedule();
210 		spin_lock_irqsave(&self->lock, flags);
211 	}
212 	set_current_state(TASK_RUNNING);
213 	self->claimed = 1;
214 	spin_unlock_irqrestore(&self->lock, flags);
215 	remove_wait_queue(&self->wq, &wait);
216 
217 	return;
218 }
219 
220 static void cw1200_spi_unlock(struct hwbus_priv *self)
221 {
222 	unsigned long flags;
223 
224 	spin_lock_irqsave(&self->lock, flags);
225 	self->claimed = 0;
226 	spin_unlock_irqrestore(&self->lock, flags);
227 	wake_up(&self->wq);
228 
229 	return;
230 }
231 
232 static irqreturn_t cw1200_spi_irq_handler(int irq, void *dev_id)
233 {
234 	struct hwbus_priv *self = dev_id;
235 
236 	if (self->core) {
237 		cw1200_spi_lock(self);
238 		cw1200_irq_handler(self->core);
239 		cw1200_spi_unlock(self);
240 		return IRQ_HANDLED;
241 	} else {
242 		return IRQ_NONE;
243 	}
244 }
245 
246 static int cw1200_spi_irq_subscribe(struct hwbus_priv *self)
247 {
248 	int ret;
249 
250 	pr_debug("SW IRQ subscribe\n");
251 
252 	ret = request_threaded_irq(self->func->irq, NULL,
253 				   cw1200_spi_irq_handler,
254 				   IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
255 				   "cw1200_wlan_irq", self);
256 	if (WARN_ON(ret < 0))
257 		goto exit;
258 
259 	ret = enable_irq_wake(self->func->irq);
260 	if (WARN_ON(ret))
261 		goto free_irq;
262 
263 	return 0;
264 
265 free_irq:
266 	free_irq(self->func->irq, self);
267 exit:
268 	return ret;
269 }
270 
271 static int cw1200_spi_irq_unsubscribe(struct hwbus_priv *self)
272 {
273 	int ret = 0;
274 
275 	pr_debug("SW IRQ unsubscribe\n");
276 	disable_irq_wake(self->func->irq);
277 	free_irq(self->func->irq, self);
278 
279 	return ret;
280 }
281 
282 static int cw1200_spi_off(const struct cw1200_platform_data_spi *pdata)
283 {
284 	if (pdata->reset) {
285 		gpio_set_value(pdata->reset, 0);
286 		msleep(30); /* Min is 2 * CLK32K cycles */
287 		gpio_free(pdata->reset);
288 	}
289 
290 	if (pdata->power_ctrl)
291 		pdata->power_ctrl(pdata, false);
292 	if (pdata->clk_ctrl)
293 		pdata->clk_ctrl(pdata, false);
294 
295 	return 0;
296 }
297 
298 static int cw1200_spi_on(const struct cw1200_platform_data_spi *pdata)
299 {
300 	/* Ensure I/Os are pulled low */
301 	if (pdata->reset) {
302 		gpio_request(pdata->reset, "cw1200_wlan_reset");
303 		gpio_direction_output(pdata->reset, 0);
304 	}
305 	if (pdata->powerup) {
306 		gpio_request(pdata->powerup, "cw1200_wlan_powerup");
307 		gpio_direction_output(pdata->powerup, 0);
308 	}
309 	if (pdata->reset || pdata->powerup)
310 		msleep(10); /* Settle time? */
311 
312 	/* Enable 3v3 and 1v8 to hardware */
313 	if (pdata->power_ctrl) {
314 		if (pdata->power_ctrl(pdata, true)) {
315 			pr_err("power_ctrl() failed!\n");
316 			return -1;
317 		}
318 	}
319 
320 	/* Enable CLK32K */
321 	if (pdata->clk_ctrl) {
322 		if (pdata->clk_ctrl(pdata, true)) {
323 			pr_err("clk_ctrl() failed!\n");
324 			return -1;
325 		}
326 		msleep(10); /* Delay until clock is stable for 2 cycles */
327 	}
328 
329 	/* Enable POWERUP signal */
330 	if (pdata->powerup) {
331 		gpio_set_value(pdata->powerup, 1);
332 		msleep(250); /* or more..? */
333 	}
334 	/* Enable RSTn signal */
335 	if (pdata->reset) {
336 		gpio_set_value(pdata->reset, 1);
337 		msleep(50); /* Or more..? */
338 	}
339 	return 0;
340 }
341 
342 static size_t cw1200_spi_align_size(struct hwbus_priv *self, size_t size)
343 {
344 	return size & 1 ? size + 1 : size;
345 }
346 
347 static int cw1200_spi_pm(struct hwbus_priv *self, bool suspend)
348 {
349 	return irq_set_irq_wake(self->func->irq, suspend);
350 }
351 
352 static const struct hwbus_ops cw1200_spi_hwbus_ops = {
353 	.hwbus_memcpy_fromio	= cw1200_spi_memcpy_fromio,
354 	.hwbus_memcpy_toio	= cw1200_spi_memcpy_toio,
355 	.lock			= cw1200_spi_lock,
356 	.unlock			= cw1200_spi_unlock,
357 	.align_size		= cw1200_spi_align_size,
358 	.power_mgmt		= cw1200_spi_pm,
359 };
360 
361 /* Probe Function to be called by SPI stack when device is discovered */
362 static int cw1200_spi_probe(struct spi_device *func)
363 {
364 	const struct cw1200_platform_data_spi *plat_data =
365 		dev_get_platdata(&func->dev);
366 	struct hwbus_priv *self;
367 	int status;
368 
369 	/* Sanity check speed */
370 	if (func->max_speed_hz > 52000000)
371 		func->max_speed_hz = 52000000;
372 	if (func->max_speed_hz < 1000000)
373 		func->max_speed_hz = 1000000;
374 
375 	/* Fix up transfer size */
376 	if (plat_data->spi_bits_per_word)
377 		func->bits_per_word = plat_data->spi_bits_per_word;
378 	if (!func->bits_per_word)
379 		func->bits_per_word = 16;
380 
381 	/* And finally.. */
382 	func->mode = SPI_MODE_0;
383 
384 	pr_info("cw1200_wlan_spi: Probe called (CS %d M %d BPW %d CLK %d)\n",
385 		func->chip_select, func->mode, func->bits_per_word,
386 		func->max_speed_hz);
387 
388 	if (cw1200_spi_on(plat_data)) {
389 		pr_err("spi_on() failed!\n");
390 		return -1;
391 	}
392 
393 	if (spi_setup(func)) {
394 		pr_err("spi_setup() failed!\n");
395 		return -1;
396 	}
397 
398 	self = devm_kzalloc(&func->dev, sizeof(*self), GFP_KERNEL);
399 	if (!self) {
400 		pr_err("Can't allocate SPI hwbus_priv.");
401 		return -ENOMEM;
402 	}
403 
404 	self->pdata = plat_data;
405 	self->func = func;
406 	spin_lock_init(&self->lock);
407 
408 	spi_set_drvdata(func, self);
409 
410 	init_waitqueue_head(&self->wq);
411 
412 	status = cw1200_spi_irq_subscribe(self);
413 
414 	status = cw1200_core_probe(&cw1200_spi_hwbus_ops,
415 				   self, &func->dev, &self->core,
416 				   self->pdata->ref_clk,
417 				   self->pdata->macaddr,
418 				   self->pdata->sdd_file,
419 				   self->pdata->have_5ghz);
420 
421 	if (status) {
422 		cw1200_spi_irq_unsubscribe(self);
423 		cw1200_spi_off(plat_data);
424 	}
425 
426 	return status;
427 }
428 
429 /* Disconnect Function to be called by SPI stack when device is disconnected */
430 static int cw1200_spi_disconnect(struct spi_device *func)
431 {
432 	struct hwbus_priv *self = spi_get_drvdata(func);
433 
434 	if (self) {
435 		cw1200_spi_irq_unsubscribe(self);
436 		if (self->core) {
437 			cw1200_core_release(self->core);
438 			self->core = NULL;
439 		}
440 	}
441 	cw1200_spi_off(dev_get_platdata(&func->dev));
442 
443 	return 0;
444 }
445 
446 static int __maybe_unused cw1200_spi_suspend(struct device *dev)
447 {
448 	struct hwbus_priv *self = spi_get_drvdata(to_spi_device(dev));
449 
450 	if (!cw1200_can_suspend(self->core))
451 		return -EAGAIN;
452 
453 	/* XXX notify host that we have to keep CW1200 powered on? */
454 	return 0;
455 }
456 
457 static SIMPLE_DEV_PM_OPS(cw1200_pm_ops, cw1200_spi_suspend, NULL);
458 
459 static struct spi_driver spi_driver = {
460 	.probe		= cw1200_spi_probe,
461 	.remove		= cw1200_spi_disconnect,
462 	.driver = {
463 		.name		= "cw1200_wlan_spi",
464 		.pm		= IS_ENABLED(CONFIG_PM) ? &cw1200_pm_ops : NULL,
465 	},
466 };
467 
468 module_spi_driver(spi_driver);
469