Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / net / wireless / st / cw1200 / cw1200_spi.c
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);