1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <linux/kernel.h>
19#include <linux/device.h>
20#include <linux/init.h>
21#include <linux/cache.h>
22#include <linux/dma-mapping.h>
23#include <linux/dmaengine.h>
24#include <linux/mutex.h>
25#include <linux/of_device.h>
26#include <linux/of_irq.h>
27#include <linux/clk/clk-conf.h>
28#include <linux/slab.h>
29#include <linux/mod_devicetable.h>
30#include <linux/spi/spi.h>
31#include <linux/of_gpio.h>
32#include <linux/pm_runtime.h>
33#include <linux/pm_domain.h>
34#include <linux/property.h>
35#include <linux/export.h>
36#include <linux/sched/rt.h>
37#include <uapi/linux/sched/types.h>
38#include <linux/delay.h>
39#include <linux/kthread.h>
40#include <linux/ioport.h>
41#include <linux/acpi.h>
42#include <linux/highmem.h>
43#include <linux/idr.h>
44#include <linux/platform_data/x86/apple.h>
45
46#define CREATE_TRACE_POINTS
47#include <trace/events/spi.h>
48
49static DEFINE_IDR(spi_master_idr);
50
51static void spidev_release(struct device *dev)
52{
53 struct spi_device *spi = to_spi_device(dev);
54
55
56 if (spi->controller->cleanup)
57 spi->controller->cleanup(spi);
58
59 spi_controller_put(spi->controller);
60 kfree(spi);
61}
62
63static ssize_t
64modalias_show(struct device *dev, struct device_attribute *a, char *buf)
65{
66 const struct spi_device *spi = to_spi_device(dev);
67 int len;
68
69 len = acpi_device_modalias(dev, buf, PAGE_SIZE - 1);
70 if (len != -ENODEV)
71 return len;
72
73 return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);
74}
75static DEVICE_ATTR_RO(modalias);
76
77#define SPI_STATISTICS_ATTRS(field, file) \
78static ssize_t spi_controller_##field##_show(struct device *dev, \
79 struct device_attribute *attr, \
80 char *buf) \
81{ \
82 struct spi_controller *ctlr = container_of(dev, \
83 struct spi_controller, dev); \
84 return spi_statistics_##field##_show(&ctlr->statistics, buf); \
85} \
86static struct device_attribute dev_attr_spi_controller_##field = { \
87 .attr = { .name = file, .mode = 0444 }, \
88 .show = spi_controller_##field##_show, \
89}; \
90static ssize_t spi_device_##field##_show(struct device *dev, \
91 struct device_attribute *attr, \
92 char *buf) \
93{ \
94 struct spi_device *spi = to_spi_device(dev); \
95 return spi_statistics_##field##_show(&spi->statistics, buf); \
96} \
97static struct device_attribute dev_attr_spi_device_##field = { \
98 .attr = { .name = file, .mode = 0444 }, \
99 .show = spi_device_##field##_show, \
100}
101
102#define SPI_STATISTICS_SHOW_NAME(name, file, field, format_string) \
103static ssize_t spi_statistics_##name##_show(struct spi_statistics *stat, \
104 char *buf) \
105{ \
106 unsigned long flags; \
107 ssize_t len; \
108 spin_lock_irqsave(&stat->lock, flags); \
109 len = sprintf(buf, format_string, stat->field); \
110 spin_unlock_irqrestore(&stat->lock, flags); \
111 return len; \
112} \
113SPI_STATISTICS_ATTRS(name, file)
114
115#define SPI_STATISTICS_SHOW(field, format_string) \
116 SPI_STATISTICS_SHOW_NAME(field, __stringify(field), \
117 field, format_string)
118
119SPI_STATISTICS_SHOW(messages, "%lu");
120SPI_STATISTICS_SHOW(transfers, "%lu");
121SPI_STATISTICS_SHOW(errors, "%lu");
122SPI_STATISTICS_SHOW(timedout, "%lu");
123
124SPI_STATISTICS_SHOW(spi_sync, "%lu");
125SPI_STATISTICS_SHOW(spi_sync_immediate, "%lu");
126SPI_STATISTICS_SHOW(spi_async, "%lu");
127
128SPI_STATISTICS_SHOW(bytes, "%llu");
129SPI_STATISTICS_SHOW(bytes_rx, "%llu");
130SPI_STATISTICS_SHOW(bytes_tx, "%llu");
131
132#define SPI_STATISTICS_TRANSFER_BYTES_HISTO(index, number) \
133 SPI_STATISTICS_SHOW_NAME(transfer_bytes_histo##index, \
134 "transfer_bytes_histo_" number, \
135 transfer_bytes_histo[index], "%lu")
136SPI_STATISTICS_TRANSFER_BYTES_HISTO(0, "0-1");
137SPI_STATISTICS_TRANSFER_BYTES_HISTO(1, "2-3");
138SPI_STATISTICS_TRANSFER_BYTES_HISTO(2, "4-7");
139SPI_STATISTICS_TRANSFER_BYTES_HISTO(3, "8-15");
140SPI_STATISTICS_TRANSFER_BYTES_HISTO(4, "16-31");
141SPI_STATISTICS_TRANSFER_BYTES_HISTO(5, "32-63");
142SPI_STATISTICS_TRANSFER_BYTES_HISTO(6, "64-127");
143SPI_STATISTICS_TRANSFER_BYTES_HISTO(7, "128-255");
144SPI_STATISTICS_TRANSFER_BYTES_HISTO(8, "256-511");
145SPI_STATISTICS_TRANSFER_BYTES_HISTO(9, "512-1023");
146SPI_STATISTICS_TRANSFER_BYTES_HISTO(10, "1024-2047");
147SPI_STATISTICS_TRANSFER_BYTES_HISTO(11, "2048-4095");
148SPI_STATISTICS_TRANSFER_BYTES_HISTO(12, "4096-8191");
149SPI_STATISTICS_TRANSFER_BYTES_HISTO(13, "8192-16383");
150SPI_STATISTICS_TRANSFER_BYTES_HISTO(14, "16384-32767");
151SPI_STATISTICS_TRANSFER_BYTES_HISTO(15, "32768-65535");
152SPI_STATISTICS_TRANSFER_BYTES_HISTO(16, "65536+");
153
154SPI_STATISTICS_SHOW(transfers_split_maxsize, "%lu");
155
156static struct attribute *spi_dev_attrs[] = {
157 &dev_attr_modalias.attr,
158 NULL,
159};
160
161static const struct attribute_group spi_dev_group = {
162 .attrs = spi_dev_attrs,
163};
164
165static struct attribute *spi_device_statistics_attrs[] = {
166 &dev_attr_spi_device_messages.attr,
167 &dev_attr_spi_device_transfers.attr,
168 &dev_attr_spi_device_errors.attr,
169 &dev_attr_spi_device_timedout.attr,
170 &dev_attr_spi_device_spi_sync.attr,
171 &dev_attr_spi_device_spi_sync_immediate.attr,
172 &dev_attr_spi_device_spi_async.attr,
173 &dev_attr_spi_device_bytes.attr,
174 &dev_attr_spi_device_bytes_rx.attr,
175 &dev_attr_spi_device_bytes_tx.attr,
176 &dev_attr_spi_device_transfer_bytes_histo0.attr,
177 &dev_attr_spi_device_transfer_bytes_histo1.attr,
178 &dev_attr_spi_device_transfer_bytes_histo2.attr,
179 &dev_attr_spi_device_transfer_bytes_histo3.attr,
180 &dev_attr_spi_device_transfer_bytes_histo4.attr,
181 &dev_attr_spi_device_transfer_bytes_histo5.attr,
182 &dev_attr_spi_device_transfer_bytes_histo6.attr,
183 &dev_attr_spi_device_transfer_bytes_histo7.attr,
184 &dev_attr_spi_device_transfer_bytes_histo8.attr,
185 &dev_attr_spi_device_transfer_bytes_histo9.attr,
186 &dev_attr_spi_device_transfer_bytes_histo10.attr,
187 &dev_attr_spi_device_transfer_bytes_histo11.attr,
188 &dev_attr_spi_device_transfer_bytes_histo12.attr,
189 &dev_attr_spi_device_transfer_bytes_histo13.attr,
190 &dev_attr_spi_device_transfer_bytes_histo14.attr,
191 &dev_attr_spi_device_transfer_bytes_histo15.attr,
192 &dev_attr_spi_device_transfer_bytes_histo16.attr,
193 &dev_attr_spi_device_transfers_split_maxsize.attr,
194 NULL,
195};
196
197static const struct attribute_group spi_device_statistics_group = {
198 .name = "statistics",
199 .attrs = spi_device_statistics_attrs,
200};
201
202static const struct attribute_group *spi_dev_groups[] = {
203 &spi_dev_group,
204 &spi_device_statistics_group,
205 NULL,
206};
207
208static struct attribute *spi_controller_statistics_attrs[] = {
209 &dev_attr_spi_controller_messages.attr,
210 &dev_attr_spi_controller_transfers.attr,
211 &dev_attr_spi_controller_errors.attr,
212 &dev_attr_spi_controller_timedout.attr,
213 &dev_attr_spi_controller_spi_sync.attr,
214 &dev_attr_spi_controller_spi_sync_immediate.attr,
215 &dev_attr_spi_controller_spi_async.attr,
216 &dev_attr_spi_controller_bytes.attr,
217 &dev_attr_spi_controller_bytes_rx.attr,
218 &dev_attr_spi_controller_bytes_tx.attr,
219 &dev_attr_spi_controller_transfer_bytes_histo0.attr,
220 &dev_attr_spi_controller_transfer_bytes_histo1.attr,
221 &dev_attr_spi_controller_transfer_bytes_histo2.attr,
222 &dev_attr_spi_controller_transfer_bytes_histo3.attr,
223 &dev_attr_spi_controller_transfer_bytes_histo4.attr,
224 &dev_attr_spi_controller_transfer_bytes_histo5.attr,
225 &dev_attr_spi_controller_transfer_bytes_histo6.attr,
226 &dev_attr_spi_controller_transfer_bytes_histo7.attr,
227 &dev_attr_spi_controller_transfer_bytes_histo8.attr,
228 &dev_attr_spi_controller_transfer_bytes_histo9.attr,
229 &dev_attr_spi_controller_transfer_bytes_histo10.attr,
230 &dev_attr_spi_controller_transfer_bytes_histo11.attr,
231 &dev_attr_spi_controller_transfer_bytes_histo12.attr,
232 &dev_attr_spi_controller_transfer_bytes_histo13.attr,
233 &dev_attr_spi_controller_transfer_bytes_histo14.attr,
234 &dev_attr_spi_controller_transfer_bytes_histo15.attr,
235 &dev_attr_spi_controller_transfer_bytes_histo16.attr,
236 &dev_attr_spi_controller_transfers_split_maxsize.attr,
237 NULL,
238};
239
240static const struct attribute_group spi_controller_statistics_group = {
241 .name = "statistics",
242 .attrs = spi_controller_statistics_attrs,
243};
244
245static const struct attribute_group *spi_master_groups[] = {
246 &spi_controller_statistics_group,
247 NULL,
248};
249
250void spi_statistics_add_transfer_stats(struct spi_statistics *stats,
251 struct spi_transfer *xfer,
252 struct spi_controller *ctlr)
253{
254 unsigned long flags;
255 int l2len = min(fls(xfer->len), SPI_STATISTICS_HISTO_SIZE) - 1;
256
257 if (l2len < 0)
258 l2len = 0;
259
260 spin_lock_irqsave(&stats->lock, flags);
261
262 stats->transfers++;
263 stats->transfer_bytes_histo[l2len]++;
264
265 stats->bytes += xfer->len;
266 if ((xfer->tx_buf) &&
267 (xfer->tx_buf != ctlr->dummy_tx))
268 stats->bytes_tx += xfer->len;
269 if ((xfer->rx_buf) &&
270 (xfer->rx_buf != ctlr->dummy_rx))
271 stats->bytes_rx += xfer->len;
272
273 spin_unlock_irqrestore(&stats->lock, flags);
274}
275EXPORT_SYMBOL_GPL(spi_statistics_add_transfer_stats);
276
277
278
279
280
281static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,
282 const struct spi_device *sdev)
283{
284 while (id->name[0]) {
285 if (!strcmp(sdev->modalias, id->name))
286 return id;
287 id++;
288 }
289 return NULL;
290}
291
292const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
293{
294 const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
295
296 return spi_match_id(sdrv->id_table, sdev);
297}
298EXPORT_SYMBOL_GPL(spi_get_device_id);
299
300static int spi_match_device(struct device *dev, struct device_driver *drv)
301{
302 const struct spi_device *spi = to_spi_device(dev);
303 const struct spi_driver *sdrv = to_spi_driver(drv);
304
305
306 if (of_driver_match_device(dev, drv))
307 return 1;
308
309
310 if (acpi_driver_match_device(dev, drv))
311 return 1;
312
313 if (sdrv->id_table)
314 return !!spi_match_id(sdrv->id_table, spi);
315
316 return strcmp(spi->modalias, drv->name) == 0;
317}
318
319static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
320{
321 const struct spi_device *spi = to_spi_device(dev);
322 int rc;
323
324 rc = acpi_device_uevent_modalias(dev, env);
325 if (rc != -ENODEV)
326 return rc;
327
328 return add_uevent_var(env, "MODALIAS=%s%s", SPI_MODULE_PREFIX, spi->modalias);
329}
330
331struct bus_type spi_bus_type = {
332 .name = "spi",
333 .dev_groups = spi_dev_groups,
334 .match = spi_match_device,
335 .uevent = spi_uevent,
336};
337EXPORT_SYMBOL_GPL(spi_bus_type);
338
339
340static int spi_drv_probe(struct device *dev)
341{
342 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
343 struct spi_device *spi = to_spi_device(dev);
344 int ret;
345
346 ret = of_clk_set_defaults(dev->of_node, false);
347 if (ret)
348 return ret;
349
350 if (dev->of_node) {
351 spi->irq = of_irq_get(dev->of_node, 0);
352 if (spi->irq == -EPROBE_DEFER)
353 return -EPROBE_DEFER;
354 if (spi->irq < 0)
355 spi->irq = 0;
356 }
357
358 ret = dev_pm_domain_attach(dev, true);
359 if (ret != -EPROBE_DEFER) {
360 ret = sdrv->probe(spi);
361 if (ret)
362 dev_pm_domain_detach(dev, true);
363 }
364
365 return ret;
366}
367
368static int spi_drv_remove(struct device *dev)
369{
370 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
371 int ret;
372
373 ret = sdrv->remove(to_spi_device(dev));
374 dev_pm_domain_detach(dev, true);
375
376 return ret;
377}
378
379static void spi_drv_shutdown(struct device *dev)
380{
381 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
382
383 sdrv->shutdown(to_spi_device(dev));
384}
385
386
387
388
389
390
391
392
393
394int __spi_register_driver(struct module *owner, struct spi_driver *sdrv)
395{
396 sdrv->driver.owner = owner;
397 sdrv->driver.bus = &spi_bus_type;
398 if (sdrv->probe)
399 sdrv->driver.probe = spi_drv_probe;
400 if (sdrv->remove)
401 sdrv->driver.remove = spi_drv_remove;
402 if (sdrv->shutdown)
403 sdrv->driver.shutdown = spi_drv_shutdown;
404 return driver_register(&sdrv->driver);
405}
406EXPORT_SYMBOL_GPL(__spi_register_driver);
407
408
409
410
411
412
413
414
415
416struct boardinfo {
417 struct list_head list;
418 struct spi_board_info board_info;
419};
420
421static LIST_HEAD(board_list);
422static LIST_HEAD(spi_controller_list);
423
424
425
426
427
428
429static DEFINE_MUTEX(board_lock);
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448struct spi_device *spi_alloc_device(struct spi_controller *ctlr)
449{
450 struct spi_device *spi;
451
452 if (!spi_controller_get(ctlr))
453 return NULL;
454
455 spi = kzalloc(sizeof(*spi), GFP_KERNEL);
456 if (!spi) {
457 spi_controller_put(ctlr);
458 return NULL;
459 }
460
461 spi->master = spi->controller = ctlr;
462 spi->dev.parent = &ctlr->dev;
463 spi->dev.bus = &spi_bus_type;
464 spi->dev.release = spidev_release;
465 spi->cs_gpio = -ENOENT;
466
467 spin_lock_init(&spi->statistics.lock);
468
469 device_initialize(&spi->dev);
470 return spi;
471}
472EXPORT_SYMBOL_GPL(spi_alloc_device);
473
474static void spi_dev_set_name(struct spi_device *spi)
475{
476 struct acpi_device *adev = ACPI_COMPANION(&spi->dev);
477
478 if (adev) {
479 dev_set_name(&spi->dev, "spi-%s", acpi_dev_name(adev));
480 return;
481 }
482
483 dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->controller->dev),
484 spi->chip_select);
485}
486
487static int spi_dev_check(struct device *dev, void *data)
488{
489 struct spi_device *spi = to_spi_device(dev);
490 struct spi_device *new_spi = data;
491
492 if (spi->controller == new_spi->controller &&
493 spi->chip_select == new_spi->chip_select)
494 return -EBUSY;
495 return 0;
496}
497
498
499
500
501
502
503
504
505
506
507int spi_add_device(struct spi_device *spi)
508{
509 static DEFINE_MUTEX(spi_add_lock);
510 struct spi_controller *ctlr = spi->controller;
511 struct device *dev = ctlr->dev.parent;
512 int status;
513
514
515 if (spi->chip_select >= ctlr->num_chipselect) {
516 dev_err(dev, "cs%d >= max %d\n", spi->chip_select,
517 ctlr->num_chipselect);
518 return -EINVAL;
519 }
520
521
522 spi_dev_set_name(spi);
523
524
525
526
527
528 mutex_lock(&spi_add_lock);
529
530 status = bus_for_each_dev(&spi_bus_type, NULL, spi, spi_dev_check);
531 if (status) {
532 dev_err(dev, "chipselect %d already in use\n",
533 spi->chip_select);
534 goto done;
535 }
536
537 if (ctlr->cs_gpios)
538 spi->cs_gpio = ctlr->cs_gpios[spi->chip_select];
539
540
541
542
543
544 status = spi_setup(spi);
545 if (status < 0) {
546 dev_err(dev, "can't setup %s, status %d\n",
547 dev_name(&spi->dev), status);
548 goto done;
549 }
550
551
552 status = device_add(&spi->dev);
553 if (status < 0)
554 dev_err(dev, "can't add %s, status %d\n",
555 dev_name(&spi->dev), status);
556 else
557 dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
558
559done:
560 mutex_unlock(&spi_add_lock);
561 return status;
562}
563EXPORT_SYMBOL_GPL(spi_add_device);
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579struct spi_device *spi_new_device(struct spi_controller *ctlr,
580 struct spi_board_info *chip)
581{
582 struct spi_device *proxy;
583 int status;
584
585
586
587
588
589
590
591
592 proxy = spi_alloc_device(ctlr);
593 if (!proxy)
594 return NULL;
595
596 WARN_ON(strlen(chip->modalias) >= sizeof(proxy->modalias));
597
598 proxy->chip_select = chip->chip_select;
599 proxy->max_speed_hz = chip->max_speed_hz;
600 proxy->mode = chip->mode;
601 proxy->irq = chip->irq;
602 strlcpy(proxy->modalias, chip->modalias, sizeof(proxy->modalias));
603 proxy->dev.platform_data = (void *) chip->platform_data;
604 proxy->controller_data = chip->controller_data;
605 proxy->controller_state = NULL;
606
607 if (chip->properties) {
608 status = device_add_properties(&proxy->dev, chip->properties);
609 if (status) {
610 dev_err(&ctlr->dev,
611 "failed to add properties to '%s': %d\n",
612 chip->modalias, status);
613 goto err_dev_put;
614 }
615 }
616
617 status = spi_add_device(proxy);
618 if (status < 0)
619 goto err_remove_props;
620
621 return proxy;
622
623err_remove_props:
624 if (chip->properties)
625 device_remove_properties(&proxy->dev);
626err_dev_put:
627 spi_dev_put(proxy);
628 return NULL;
629}
630EXPORT_SYMBOL_GPL(spi_new_device);
631
632
633
634
635
636
637
638
639void spi_unregister_device(struct spi_device *spi)
640{
641 if (!spi)
642 return;
643
644 if (spi->dev.of_node) {
645 of_node_clear_flag(spi->dev.of_node, OF_POPULATED);
646 of_node_put(spi->dev.of_node);
647 }
648 if (ACPI_COMPANION(&spi->dev))
649 acpi_device_clear_enumerated(ACPI_COMPANION(&spi->dev));
650 device_unregister(&spi->dev);
651}
652EXPORT_SYMBOL_GPL(spi_unregister_device);
653
654static void spi_match_controller_to_boardinfo(struct spi_controller *ctlr,
655 struct spi_board_info *bi)
656{
657 struct spi_device *dev;
658
659 if (ctlr->bus_num != bi->bus_num)
660 return;
661
662 dev = spi_new_device(ctlr, bi);
663 if (!dev)
664 dev_err(ctlr->dev.parent, "can't create new device for %s\n",
665 bi->modalias);
666}
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690int spi_register_board_info(struct spi_board_info const *info, unsigned n)
691{
692 struct boardinfo *bi;
693 int i;
694
695 if (!n)
696 return 0;
697
698 bi = kcalloc(n, sizeof(*bi), GFP_KERNEL);
699 if (!bi)
700 return -ENOMEM;
701
702 for (i = 0; i < n; i++, bi++, info++) {
703 struct spi_controller *ctlr;
704
705 memcpy(&bi->board_info, info, sizeof(*info));
706 if (info->properties) {
707 bi->board_info.properties =
708 property_entries_dup(info->properties);
709 if (IS_ERR(bi->board_info.properties))
710 return PTR_ERR(bi->board_info.properties);
711 }
712
713 mutex_lock(&board_lock);
714 list_add_tail(&bi->list, &board_list);
715 list_for_each_entry(ctlr, &spi_controller_list, list)
716 spi_match_controller_to_boardinfo(ctlr,
717 &bi->board_info);
718 mutex_unlock(&board_lock);
719 }
720
721 return 0;
722}
723
724
725
726static void spi_set_cs(struct spi_device *spi, bool enable)
727{
728 if (spi->mode & SPI_CS_HIGH)
729 enable = !enable;
730
731 if (gpio_is_valid(spi->cs_gpio)) {
732 gpio_set_value(spi->cs_gpio, !enable);
733
734 if ((spi->controller->flags & SPI_MASTER_GPIO_SS) &&
735 spi->controller->set_cs)
736 spi->controller->set_cs(spi, !enable);
737 } else if (spi->controller->set_cs) {
738 spi->controller->set_cs(spi, !enable);
739 }
740}
741
742#ifdef CONFIG_HAS_DMA
743static int spi_map_buf(struct spi_controller *ctlr, struct device *dev,
744 struct sg_table *sgt, void *buf, size_t len,
745 enum dma_data_direction dir)
746{
747 const bool vmalloced_buf = is_vmalloc_addr(buf);
748 unsigned int max_seg_size = dma_get_max_seg_size(dev);
749#ifdef CONFIG_HIGHMEM
750 const bool kmap_buf = ((unsigned long)buf >= PKMAP_BASE &&
751 (unsigned long)buf < (PKMAP_BASE +
752 (LAST_PKMAP * PAGE_SIZE)));
753#else
754 const bool kmap_buf = false;
755#endif
756 int desc_len;
757 int sgs;
758 struct page *vm_page;
759 struct scatterlist *sg;
760 void *sg_buf;
761 size_t min;
762 int i, ret;
763
764 if (vmalloced_buf || kmap_buf) {
765 desc_len = min_t(int, max_seg_size, PAGE_SIZE);
766 sgs = DIV_ROUND_UP(len + offset_in_page(buf), desc_len);
767 } else if (virt_addr_valid(buf)) {
768 desc_len = min_t(int, max_seg_size, ctlr->max_dma_len);
769 sgs = DIV_ROUND_UP(len, desc_len);
770 } else {
771 return -EINVAL;
772 }
773
774 ret = sg_alloc_table(sgt, sgs, GFP_KERNEL);
775 if (ret != 0)
776 return ret;
777
778 sg = &sgt->sgl[0];
779 for (i = 0; i < sgs; i++) {
780
781 if (vmalloced_buf || kmap_buf) {
782
783
784
785
786
787 min = min_t(size_t, desc_len,
788 min_t(size_t, len,
789 PAGE_SIZE - offset_in_page(buf)));
790 if (vmalloced_buf)
791 vm_page = vmalloc_to_page(buf);
792 else
793 vm_page = kmap_to_page(buf);
794 if (!vm_page) {
795 sg_free_table(sgt);
796 return -ENOMEM;
797 }
798 sg_set_page(sg, vm_page,
799 min, offset_in_page(buf));
800 } else {
801 min = min_t(size_t, len, desc_len);
802 sg_buf = buf;
803 sg_set_buf(sg, sg_buf, min);
804 }
805
806 buf += min;
807 len -= min;
808 sg = sg_next(sg);
809 }
810
811 ret = dma_map_sg(dev, sgt->sgl, sgt->nents, dir);
812 if (!ret)
813 ret = -ENOMEM;
814 if (ret < 0) {
815 sg_free_table(sgt);
816 return ret;
817 }
818
819 sgt->nents = ret;
820
821 return 0;
822}
823
824static void spi_unmap_buf(struct spi_controller *ctlr, struct device *dev,
825 struct sg_table *sgt, enum dma_data_direction dir)
826{
827 if (sgt->orig_nents) {
828 dma_unmap_sg(dev, sgt->sgl, sgt->orig_nents, dir);
829 sg_free_table(sgt);
830 }
831}
832
833static int __spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg)
834{
835 struct device *tx_dev, *rx_dev;
836 struct spi_transfer *xfer;
837 int ret;
838
839 if (!ctlr->can_dma)
840 return 0;
841
842 if (ctlr->dma_tx)
843 tx_dev = ctlr->dma_tx->device->dev;
844 else
845 tx_dev = ctlr->dev.parent;
846
847 if (ctlr->dma_rx)
848 rx_dev = ctlr->dma_rx->device->dev;
849 else
850 rx_dev = ctlr->dev.parent;
851
852 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
853 if (!ctlr->can_dma(ctlr, msg->spi, xfer))
854 continue;
855
856 if (xfer->tx_buf != NULL) {
857 ret = spi_map_buf(ctlr, tx_dev, &xfer->tx_sg,
858 (void *)xfer->tx_buf, xfer->len,
859 DMA_TO_DEVICE);
860 if (ret != 0)
861 return ret;
862 }
863
864 if (xfer->rx_buf != NULL) {
865 ret = spi_map_buf(ctlr, rx_dev, &xfer->rx_sg,
866 xfer->rx_buf, xfer->len,
867 DMA_FROM_DEVICE);
868 if (ret != 0) {
869 spi_unmap_buf(ctlr, tx_dev, &xfer->tx_sg,
870 DMA_TO_DEVICE);
871 return ret;
872 }
873 }
874 }
875
876 ctlr->cur_msg_mapped = true;
877
878 return 0;
879}
880
881static int __spi_unmap_msg(struct spi_controller *ctlr, struct spi_message *msg)
882{
883 struct spi_transfer *xfer;
884 struct device *tx_dev, *rx_dev;
885
886 if (!ctlr->cur_msg_mapped || !ctlr->can_dma)
887 return 0;
888
889 if (ctlr->dma_tx)
890 tx_dev = ctlr->dma_tx->device->dev;
891 else
892 tx_dev = ctlr->dev.parent;
893
894 if (ctlr->dma_rx)
895 rx_dev = ctlr->dma_rx->device->dev;
896 else
897 rx_dev = ctlr->dev.parent;
898
899 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
900 if (!ctlr->can_dma(ctlr, msg->spi, xfer))
901 continue;
902
903 spi_unmap_buf(ctlr, rx_dev, &xfer->rx_sg, DMA_FROM_DEVICE);
904 spi_unmap_buf(ctlr, tx_dev, &xfer->tx_sg, DMA_TO_DEVICE);
905 }
906
907 return 0;
908}
909#else
910static inline int spi_map_buf(struct spi_controller *ctlr, struct device *dev,
911 struct sg_table *sgt, void *buf, size_t len,
912 enum dma_data_direction dir)
913{
914 return -EINVAL;
915}
916
917static inline void spi_unmap_buf(struct spi_controller *ctlr,
918 struct device *dev, struct sg_table *sgt,
919 enum dma_data_direction dir)
920{
921}
922
923static inline int __spi_map_msg(struct spi_controller *ctlr,
924 struct spi_message *msg)
925{
926 return 0;
927}
928
929static inline int __spi_unmap_msg(struct spi_controller *ctlr,
930 struct spi_message *msg)
931{
932 return 0;
933}
934#endif
935
936static inline int spi_unmap_msg(struct spi_controller *ctlr,
937 struct spi_message *msg)
938{
939 struct spi_transfer *xfer;
940
941 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
942
943
944
945
946 if (xfer->tx_buf == ctlr->dummy_tx)
947 xfer->tx_buf = NULL;
948 if (xfer->rx_buf == ctlr->dummy_rx)
949 xfer->rx_buf = NULL;
950 }
951
952 return __spi_unmap_msg(ctlr, msg);
953}
954
955static int spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg)
956{
957 struct spi_transfer *xfer;
958 void *tmp;
959 unsigned int max_tx, max_rx;
960
961 if (ctlr->flags & (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX)) {
962 max_tx = 0;
963 max_rx = 0;
964
965 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
966 if ((ctlr->flags & SPI_CONTROLLER_MUST_TX) &&
967 !xfer->tx_buf)
968 max_tx = max(xfer->len, max_tx);
969 if ((ctlr->flags & SPI_CONTROLLER_MUST_RX) &&
970 !xfer->rx_buf)
971 max_rx = max(xfer->len, max_rx);
972 }
973
974 if (max_tx) {
975 tmp = krealloc(ctlr->dummy_tx, max_tx,
976 GFP_KERNEL | GFP_DMA);
977 if (!tmp)
978 return -ENOMEM;
979 ctlr->dummy_tx = tmp;
980 memset(tmp, 0, max_tx);
981 }
982
983 if (max_rx) {
984 tmp = krealloc(ctlr->dummy_rx, max_rx,
985 GFP_KERNEL | GFP_DMA);
986 if (!tmp)
987 return -ENOMEM;
988 ctlr->dummy_rx = tmp;
989 }
990
991 if (max_tx || max_rx) {
992 list_for_each_entry(xfer, &msg->transfers,
993 transfer_list) {
994 if (!xfer->tx_buf)
995 xfer->tx_buf = ctlr->dummy_tx;
996 if (!xfer->rx_buf)
997 xfer->rx_buf = ctlr->dummy_rx;
998 }
999 }
1000 }
1001
1002 return __spi_map_msg(ctlr, msg);
1003}
1004
1005
1006
1007
1008
1009
1010
1011
1012static int spi_transfer_one_message(struct spi_controller *ctlr,
1013 struct spi_message *msg)
1014{
1015 struct spi_transfer *xfer;
1016 bool keep_cs = false;
1017 int ret = 0;
1018 unsigned long long ms = 1;
1019 struct spi_statistics *statm = &ctlr->statistics;
1020 struct spi_statistics *stats = &msg->spi->statistics;
1021
1022 spi_set_cs(msg->spi, true);
1023
1024 SPI_STATISTICS_INCREMENT_FIELD(statm, messages);
1025 SPI_STATISTICS_INCREMENT_FIELD(stats, messages);
1026
1027 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
1028 trace_spi_transfer_start(msg, xfer);
1029
1030 spi_statistics_add_transfer_stats(statm, xfer, ctlr);
1031 spi_statistics_add_transfer_stats(stats, xfer, ctlr);
1032
1033 if (xfer->tx_buf || xfer->rx_buf) {
1034 reinit_completion(&ctlr->xfer_completion);
1035
1036 ret = ctlr->transfer_one(ctlr, msg->spi, xfer);
1037 if (ret < 0) {
1038 SPI_STATISTICS_INCREMENT_FIELD(statm,
1039 errors);
1040 SPI_STATISTICS_INCREMENT_FIELD(stats,
1041 errors);
1042 dev_err(&msg->spi->dev,
1043 "SPI transfer failed: %d\n", ret);
1044 goto out;
1045 }
1046
1047 if (ret > 0) {
1048 ret = 0;
1049 ms = 8LL * 1000LL * xfer->len;
1050 do_div(ms, xfer->speed_hz);
1051 ms += ms + 200;
1052
1053 if (ms > UINT_MAX)
1054 ms = UINT_MAX;
1055
1056 ms = wait_for_completion_timeout(&ctlr->xfer_completion,
1057 msecs_to_jiffies(ms));
1058 }
1059
1060 if (ms == 0) {
1061 SPI_STATISTICS_INCREMENT_FIELD(statm,
1062 timedout);
1063 SPI_STATISTICS_INCREMENT_FIELD(stats,
1064 timedout);
1065 dev_err(&msg->spi->dev,
1066 "SPI transfer timed out\n");
1067 msg->status = -ETIMEDOUT;
1068 }
1069 } else {
1070 if (xfer->len)
1071 dev_err(&msg->spi->dev,
1072 "Bufferless transfer has length %u\n",
1073 xfer->len);
1074 }
1075
1076 trace_spi_transfer_stop(msg, xfer);
1077
1078 if (msg->status != -EINPROGRESS)
1079 goto out;
1080
1081 if (xfer->delay_usecs) {
1082 u16 us = xfer->delay_usecs;
1083
1084 if (us <= 10)
1085 udelay(us);
1086 else
1087 usleep_range(us, us + DIV_ROUND_UP(us, 10));
1088 }
1089
1090 if (xfer->cs_change) {
1091 if (list_is_last(&xfer->transfer_list,
1092 &msg->transfers)) {
1093 keep_cs = true;
1094 } else {
1095 spi_set_cs(msg->spi, false);
1096 udelay(10);
1097 spi_set_cs(msg->spi, true);
1098 }
1099 }
1100
1101 msg->actual_length += xfer->len;
1102 }
1103
1104out:
1105 if (ret != 0 || !keep_cs)
1106 spi_set_cs(msg->spi, false);
1107
1108 if (msg->status == -EINPROGRESS)
1109 msg->status = ret;
1110
1111 if (msg->status && ctlr->handle_err)
1112 ctlr->handle_err(ctlr, msg);
1113
1114 spi_res_release(ctlr, msg);
1115
1116 spi_finalize_current_message(ctlr);
1117
1118 return ret;
1119}
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129void spi_finalize_current_transfer(struct spi_controller *ctlr)
1130{
1131 complete(&ctlr->xfer_completion);
1132}
1133EXPORT_SYMBOL_GPL(spi_finalize_current_transfer);
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
1149{
1150 unsigned long flags;
1151 bool was_busy = false;
1152 int ret;
1153
1154
1155 spin_lock_irqsave(&ctlr->queue_lock, flags);
1156
1157
1158 if (ctlr->cur_msg) {
1159 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1160 return;
1161 }
1162
1163
1164 if (ctlr->idling) {
1165 kthread_queue_work(&ctlr->kworker, &ctlr->pump_messages);
1166 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1167 return;
1168 }
1169
1170
1171 if (list_empty(&ctlr->queue) || !ctlr->running) {
1172 if (!ctlr->busy) {
1173 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1174 return;
1175 }
1176
1177
1178 if (!in_kthread) {
1179 kthread_queue_work(&ctlr->kworker,
1180 &ctlr->pump_messages);
1181 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1182 return;
1183 }
1184
1185 ctlr->busy = false;
1186 ctlr->idling = true;
1187 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1188
1189 kfree(ctlr->dummy_rx);
1190 ctlr->dummy_rx = NULL;
1191 kfree(ctlr->dummy_tx);
1192 ctlr->dummy_tx = NULL;
1193 if (ctlr->unprepare_transfer_hardware &&
1194 ctlr->unprepare_transfer_hardware(ctlr))
1195 dev_err(&ctlr->dev,
1196 "failed to unprepare transfer hardware\n");
1197 if (ctlr->auto_runtime_pm) {
1198 pm_runtime_mark_last_busy(ctlr->dev.parent);
1199 pm_runtime_put_autosuspend(ctlr->dev.parent);
1200 }
1201 trace_spi_controller_idle(ctlr);
1202
1203 spin_lock_irqsave(&ctlr->queue_lock, flags);
1204 ctlr->idling = false;
1205 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1206 return;
1207 }
1208
1209
1210 ctlr->cur_msg =
1211 list_first_entry(&ctlr->queue, struct spi_message, queue);
1212
1213 list_del_init(&ctlr->cur_msg->queue);
1214 if (ctlr->busy)
1215 was_busy = true;
1216 else
1217 ctlr->busy = true;
1218 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1219
1220 mutex_lock(&ctlr->io_mutex);
1221
1222 if (!was_busy && ctlr->auto_runtime_pm) {
1223 ret = pm_runtime_get_sync(ctlr->dev.parent);
1224 if (ret < 0) {
1225 dev_err(&ctlr->dev, "Failed to power device: %d\n",
1226 ret);
1227 mutex_unlock(&ctlr->io_mutex);
1228 return;
1229 }
1230 }
1231
1232 if (!was_busy)
1233 trace_spi_controller_busy(ctlr);
1234
1235 if (!was_busy && ctlr->prepare_transfer_hardware) {
1236 ret = ctlr->prepare_transfer_hardware(ctlr);
1237 if (ret) {
1238 dev_err(&ctlr->dev,
1239 "failed to prepare transfer hardware\n");
1240
1241 if (ctlr->auto_runtime_pm)
1242 pm_runtime_put(ctlr->dev.parent);
1243 mutex_unlock(&ctlr->io_mutex);
1244 return;
1245 }
1246 }
1247
1248 trace_spi_message_start(ctlr->cur_msg);
1249
1250 if (ctlr->prepare_message) {
1251 ret = ctlr->prepare_message(ctlr, ctlr->cur_msg);
1252 if (ret) {
1253 dev_err(&ctlr->dev, "failed to prepare message: %d\n",
1254 ret);
1255 ctlr->cur_msg->status = ret;
1256 spi_finalize_current_message(ctlr);
1257 goto out;
1258 }
1259 ctlr->cur_msg_prepared = true;
1260 }
1261
1262 ret = spi_map_msg(ctlr, ctlr->cur_msg);
1263 if (ret) {
1264 ctlr->cur_msg->status = ret;
1265 spi_finalize_current_message(ctlr);
1266 goto out;
1267 }
1268
1269 ret = ctlr->transfer_one_message(ctlr, ctlr->cur_msg);
1270 if (ret) {
1271 dev_err(&ctlr->dev,
1272 "failed to transfer one message from queue\n");
1273 goto out;
1274 }
1275
1276out:
1277 mutex_unlock(&ctlr->io_mutex);
1278
1279
1280 if (!ret)
1281 cond_resched();
1282}
1283
1284
1285
1286
1287
1288static void spi_pump_messages(struct kthread_work *work)
1289{
1290 struct spi_controller *ctlr =
1291 container_of(work, struct spi_controller, pump_messages);
1292
1293 __spi_pump_messages(ctlr, true);
1294}
1295
1296static int spi_init_queue(struct spi_controller *ctlr)
1297{
1298 struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 };
1299
1300 ctlr->running = false;
1301 ctlr->busy = false;
1302
1303 kthread_init_worker(&ctlr->kworker);
1304 ctlr->kworker_task = kthread_run(kthread_worker_fn, &ctlr->kworker,
1305 "%s", dev_name(&ctlr->dev));
1306 if (IS_ERR(ctlr->kworker_task)) {
1307 dev_err(&ctlr->dev, "failed to create message pump task\n");
1308 return PTR_ERR(ctlr->kworker_task);
1309 }
1310 kthread_init_work(&ctlr->pump_messages, spi_pump_messages);
1311
1312
1313
1314
1315
1316
1317
1318
1319 if (ctlr->rt) {
1320 dev_info(&ctlr->dev,
1321 "will run message pump with realtime priority\n");
1322 sched_setscheduler(ctlr->kworker_task, SCHED_FIFO, ¶m);
1323 }
1324
1325 return 0;
1326}
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338struct spi_message *spi_get_next_queued_message(struct spi_controller *ctlr)
1339{
1340 struct spi_message *next;
1341 unsigned long flags;
1342
1343
1344 spin_lock_irqsave(&ctlr->queue_lock, flags);
1345 next = list_first_entry_or_null(&ctlr->queue, struct spi_message,
1346 queue);
1347 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1348
1349 return next;
1350}
1351EXPORT_SYMBOL_GPL(spi_get_next_queued_message);
1352
1353
1354
1355
1356
1357
1358
1359
1360void spi_finalize_current_message(struct spi_controller *ctlr)
1361{
1362 struct spi_message *mesg;
1363 unsigned long flags;
1364 int ret;
1365
1366 spin_lock_irqsave(&ctlr->queue_lock, flags);
1367 mesg = ctlr->cur_msg;
1368 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1369
1370 spi_unmap_msg(ctlr, mesg);
1371
1372 if (ctlr->cur_msg_prepared && ctlr->unprepare_message) {
1373 ret = ctlr->unprepare_message(ctlr, mesg);
1374 if (ret) {
1375 dev_err(&ctlr->dev, "failed to unprepare message: %d\n",
1376 ret);
1377 }
1378 }
1379
1380 spin_lock_irqsave(&ctlr->queue_lock, flags);
1381 ctlr->cur_msg = NULL;
1382 ctlr->cur_msg_prepared = false;
1383 kthread_queue_work(&ctlr->kworker, &ctlr->pump_messages);
1384 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1385
1386 trace_spi_message_done(mesg);
1387
1388 mesg->state = NULL;
1389 if (mesg->complete)
1390 mesg->complete(mesg->context);
1391}
1392EXPORT_SYMBOL_GPL(spi_finalize_current_message);
1393
1394static int spi_start_queue(struct spi_controller *ctlr)
1395{
1396 unsigned long flags;
1397
1398 spin_lock_irqsave(&ctlr->queue_lock, flags);
1399
1400 if (ctlr->running || ctlr->busy) {
1401 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1402 return -EBUSY;
1403 }
1404
1405 ctlr->running = true;
1406 ctlr->cur_msg = NULL;
1407 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1408
1409 kthread_queue_work(&ctlr->kworker, &ctlr->pump_messages);
1410
1411 return 0;
1412}
1413
1414static int spi_stop_queue(struct spi_controller *ctlr)
1415{
1416 unsigned long flags;
1417 unsigned limit = 500;
1418 int ret = 0;
1419
1420 spin_lock_irqsave(&ctlr->queue_lock, flags);
1421
1422
1423
1424
1425
1426
1427
1428 while ((!list_empty(&ctlr->queue) || ctlr->busy) && limit--) {
1429 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1430 usleep_range(10000, 11000);
1431 spin_lock_irqsave(&ctlr->queue_lock, flags);
1432 }
1433
1434 if (!list_empty(&ctlr->queue) || ctlr->busy)
1435 ret = -EBUSY;
1436 else
1437 ctlr->running = false;
1438
1439 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1440
1441 if (ret) {
1442 dev_warn(&ctlr->dev, "could not stop message queue\n");
1443 return ret;
1444 }
1445 return ret;
1446}
1447
1448static int spi_destroy_queue(struct spi_controller *ctlr)
1449{
1450 int ret;
1451
1452 ret = spi_stop_queue(ctlr);
1453
1454
1455
1456
1457
1458
1459
1460 if (ret) {
1461 dev_err(&ctlr->dev, "problem destroying queue\n");
1462 return ret;
1463 }
1464
1465 kthread_flush_worker(&ctlr->kworker);
1466 kthread_stop(ctlr->kworker_task);
1467
1468 return 0;
1469}
1470
1471static int __spi_queued_transfer(struct spi_device *spi,
1472 struct spi_message *msg,
1473 bool need_pump)
1474{
1475 struct spi_controller *ctlr = spi->controller;
1476 unsigned long flags;
1477
1478 spin_lock_irqsave(&ctlr->queue_lock, flags);
1479
1480 if (!ctlr->running) {
1481 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1482 return -ESHUTDOWN;
1483 }
1484 msg->actual_length = 0;
1485 msg->status = -EINPROGRESS;
1486
1487 list_add_tail(&msg->queue, &ctlr->queue);
1488 if (!ctlr->busy && need_pump)
1489 kthread_queue_work(&ctlr->kworker, &ctlr->pump_messages);
1490
1491 spin_unlock_irqrestore(&ctlr->queue_lock, flags);
1492 return 0;
1493}
1494
1495
1496
1497
1498
1499
1500
1501
1502static int spi_queued_transfer(struct spi_device *spi, struct spi_message *msg)
1503{
1504 return __spi_queued_transfer(spi, msg, true);
1505}
1506
1507static int spi_controller_initialize_queue(struct spi_controller *ctlr)
1508{
1509 int ret;
1510
1511 ctlr->transfer = spi_queued_transfer;
1512 if (!ctlr->transfer_one_message)
1513 ctlr->transfer_one_message = spi_transfer_one_message;
1514
1515
1516 ret = spi_init_queue(ctlr);
1517 if (ret) {
1518 dev_err(&ctlr->dev, "problem initializing queue\n");
1519 goto err_init_queue;
1520 }
1521 ctlr->queued = true;
1522 ret = spi_start_queue(ctlr);
1523 if (ret) {
1524 dev_err(&ctlr->dev, "problem starting queue\n");
1525 goto err_start_queue;
1526 }
1527
1528 return 0;
1529
1530err_start_queue:
1531 spi_destroy_queue(ctlr);
1532err_init_queue:
1533 return ret;
1534}
1535
1536
1537
1538#if defined(CONFIG_OF)
1539static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device *spi,
1540 struct device_node *nc)
1541{
1542 u32 value;
1543 int rc;
1544
1545
1546 if (of_property_read_bool(nc, "spi-cpha"))
1547 spi->mode |= SPI_CPHA;
1548 if (of_property_read_bool(nc, "spi-cpol"))
1549 spi->mode |= SPI_CPOL;
1550 if (of_property_read_bool(nc, "spi-cs-high"))
1551 spi->mode |= SPI_CS_HIGH;
1552 if (of_property_read_bool(nc, "spi-3wire"))
1553 spi->mode |= SPI_3WIRE;
1554 if (of_property_read_bool(nc, "spi-lsb-first"))
1555 spi->mode |= SPI_LSB_FIRST;
1556
1557
1558 if (!of_property_read_u32(nc, "spi-tx-bus-width", &value)) {
1559 switch (value) {
1560 case 1:
1561 break;
1562 case 2:
1563 spi->mode |= SPI_TX_DUAL;
1564 break;
1565 case 4:
1566 spi->mode |= SPI_TX_QUAD;
1567 break;
1568 default:
1569 dev_warn(&ctlr->dev,
1570 "spi-tx-bus-width %d not supported\n",
1571 value);
1572 break;
1573 }
1574 }
1575
1576 if (!of_property_read_u32(nc, "spi-rx-bus-width", &value)) {
1577 switch (value) {
1578 case 1:
1579 break;
1580 case 2:
1581 spi->mode |= SPI_RX_DUAL;
1582 break;
1583 case 4:
1584 spi->mode |= SPI_RX_QUAD;
1585 break;
1586 default:
1587 dev_warn(&ctlr->dev,
1588 "spi-rx-bus-width %d not supported\n",
1589 value);
1590 break;
1591 }
1592 }
1593
1594 if (spi_controller_is_slave(ctlr)) {
1595 if (strcmp(nc->name, "slave")) {
1596 dev_err(&ctlr->dev, "%pOF is not called 'slave'\n",
1597 nc);
1598 return -EINVAL;
1599 }
1600 return 0;
1601 }
1602
1603
1604 rc = of_property_read_u32(nc, "reg", &value);
1605 if (rc) {
1606 dev_err(&ctlr->dev, "%pOF has no valid 'reg' property (%d)\n",
1607 nc, rc);
1608 return rc;
1609 }
1610 spi->chip_select = value;
1611
1612
1613 rc = of_property_read_u32(nc, "spi-max-frequency", &value);
1614 if (rc) {
1615 dev_err(&ctlr->dev,
1616 "%pOF has no valid 'spi-max-frequency' property (%d)\n", nc, rc);
1617 return rc;
1618 }
1619 spi->max_speed_hz = value;
1620
1621 return 0;
1622}
1623
1624static struct spi_device *
1625of_register_spi_device(struct spi_controller *ctlr, struct device_node *nc)
1626{
1627 struct spi_device *spi;
1628 int rc;
1629
1630
1631 spi = spi_alloc_device(ctlr);
1632 if (!spi) {
1633 dev_err(&ctlr->dev, "spi_device alloc error for %pOF\n", nc);
1634 rc = -ENOMEM;
1635 goto err_out;
1636 }
1637
1638
1639 rc = of_modalias_node(nc, spi->modalias,
1640 sizeof(spi->modalias));
1641 if (rc < 0) {
1642 dev_err(&ctlr->dev, "cannot find modalias for %pOF\n", nc);
1643 goto err_out;
1644 }
1645
1646 rc = of_spi_parse_dt(ctlr, spi, nc);
1647 if (rc)
1648 goto err_out;
1649
1650
1651 of_node_get(nc);
1652 spi->dev.of_node = nc;
1653
1654
1655 rc = spi_add_device(spi);
1656 if (rc) {
1657 dev_err(&ctlr->dev, "spi_device register error %pOF\n", nc);
1658 goto err_of_node_put;
1659 }
1660
1661 return spi;
1662
1663err_of_node_put:
1664 of_node_put(nc);
1665err_out:
1666 spi_dev_put(spi);
1667 return ERR_PTR(rc);
1668}
1669
1670
1671
1672
1673
1674
1675
1676
1677static void of_register_spi_devices(struct spi_controller *ctlr)
1678{
1679 struct spi_device *spi;
1680 struct device_node *nc;
1681
1682 if (!ctlr->dev.of_node)
1683 return;
1684
1685 for_each_available_child_of_node(ctlr->dev.of_node, nc) {
1686 if (of_node_test_and_set_flag(nc, OF_POPULATED))
1687 continue;
1688 spi = of_register_spi_device(ctlr, nc);
1689 if (IS_ERR(spi)) {
1690 dev_warn(&ctlr->dev,
1691 "Failed to create SPI device for %pOF\n", nc);
1692 of_node_clear_flag(nc, OF_POPULATED);
1693 }
1694 }
1695}
1696#else
1697static void of_register_spi_devices(struct spi_controller *ctlr) { }
1698#endif
1699
1700#ifdef CONFIG_ACPI
1701static void acpi_spi_parse_apple_properties(struct spi_device *spi)
1702{
1703 struct acpi_device *dev = ACPI_COMPANION(&spi->dev);
1704 const union acpi_object *obj;
1705
1706 if (!x86_apple_machine)
1707 return;
1708
1709 if (!acpi_dev_get_property(dev, "spiSclkPeriod", ACPI_TYPE_BUFFER, &obj)
1710 && obj->buffer.length >= 4)
1711 spi->max_speed_hz = NSEC_PER_SEC / *(u32 *)obj->buffer.pointer;
1712
1713 if (!acpi_dev_get_property(dev, "spiWordSize", ACPI_TYPE_BUFFER, &obj)
1714 && obj->buffer.length == 8)
1715 spi->bits_per_word = *(u64 *)obj->buffer.pointer;
1716
1717 if (!acpi_dev_get_property(dev, "spiBitOrder", ACPI_TYPE_BUFFER, &obj)
1718 && obj->buffer.length == 8 && !*(u64 *)obj->buffer.pointer)
1719 spi->mode |= SPI_LSB_FIRST;
1720
1721 if (!acpi_dev_get_property(dev, "spiSPO", ACPI_TYPE_BUFFER, &obj)
1722 && obj->buffer.length == 8 && *(u64 *)obj->buffer.pointer)
1723 spi->mode |= SPI_CPOL;
1724
1725 if (!acpi_dev_get_property(dev, "spiSPH", ACPI_TYPE_BUFFER, &obj)
1726 && obj->buffer.length == 8 && *(u64 *)obj->buffer.pointer)
1727 spi->mode |= SPI_CPHA;
1728}
1729
1730static int acpi_spi_add_resource(struct acpi_resource *ares, void *data)
1731{
1732 struct spi_device *spi = data;
1733 struct spi_controller *ctlr = spi->controller;
1734
1735 if (ares->type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
1736 struct acpi_resource_spi_serialbus *sb;
1737
1738 sb = &ares->data.spi_serial_bus;
1739 if (sb->type == ACPI_RESOURCE_SERIAL_TYPE_SPI) {
1740
1741
1742
1743
1744
1745
1746
1747 if (ctlr->fw_translate_cs) {
1748 int cs = ctlr->fw_translate_cs(ctlr,
1749 sb->device_selection);
1750 if (cs < 0)
1751 return cs;
1752 spi->chip_select = cs;
1753 } else {
1754 spi->chip_select = sb->device_selection;
1755 }
1756
1757 spi->max_speed_hz = sb->connection_speed;
1758
1759 if (sb->clock_phase == ACPI_SPI_SECOND_PHASE)
1760 spi->mode |= SPI_CPHA;
1761 if (sb->clock_polarity == ACPI_SPI_START_HIGH)
1762 spi->mode |= SPI_CPOL;
1763 if (sb->device_polarity == ACPI_SPI_ACTIVE_HIGH)
1764 spi->mode |= SPI_CS_HIGH;
1765 }
1766 } else if (spi->irq < 0) {
1767 struct resource r;
1768
1769 if (acpi_dev_resource_interrupt(ares, 0, &r))
1770 spi->irq = r.start;
1771 }
1772
1773
1774 return 1;
1775}
1776
1777static acpi_status acpi_register_spi_device(struct spi_controller *ctlr,
1778 struct acpi_device *adev)
1779{
1780 struct list_head resource_list;
1781 struct spi_device *spi;
1782 int ret;
1783
1784 if (acpi_bus_get_status(adev) || !adev->status.present ||
1785 acpi_device_enumerated(adev))
1786 return AE_OK;
1787
1788 spi = spi_alloc_device(ctlr);
1789 if (!spi) {
1790 dev_err(&ctlr->dev, "failed to allocate SPI device for %s\n",
1791 dev_name(&adev->dev));
1792 return AE_NO_MEMORY;
1793 }
1794
1795 ACPI_COMPANION_SET(&spi->dev, adev);
1796 spi->irq = -1;
1797
1798 INIT_LIST_HEAD(&resource_list);
1799 ret = acpi_dev_get_resources(adev, &resource_list,
1800 acpi_spi_add_resource, spi);
1801 acpi_dev_free_resource_list(&resource_list);
1802
1803 acpi_spi_parse_apple_properties(spi);
1804
1805 if (ret < 0 || !spi->max_speed_hz) {
1806 spi_dev_put(spi);
1807 return AE_OK;
1808 }
1809
1810 acpi_set_modalias(adev, acpi_device_hid(adev), spi->modalias,
1811 sizeof(spi->modalias));
1812
1813 if (spi->irq < 0)
1814 spi->irq = acpi_dev_gpio_irq_get(adev, 0);
1815
1816 acpi_device_set_enumerated(adev);
1817
1818 adev->power.flags.ignore_parent = true;
1819 if (spi_add_device(spi)) {
1820 adev->power.flags.ignore_parent = false;
1821 dev_err(&ctlr->dev, "failed to add SPI device %s from ACPI\n",
1822 dev_name(&adev->dev));
1823 spi_dev_put(spi);
1824 }
1825
1826 return AE_OK;
1827}
1828
1829static acpi_status acpi_spi_add_device(acpi_handle handle, u32 level,
1830 void *data, void **return_value)
1831{
1832 struct spi_controller *ctlr = data;
1833 struct acpi_device *adev;
1834
1835 if (acpi_bus_get_device(handle, &adev))
1836 return AE_OK;
1837
1838 return acpi_register_spi_device(ctlr, adev);
1839}
1840
1841static void acpi_register_spi_devices(struct spi_controller *ctlr)
1842{
1843 acpi_status status;
1844 acpi_handle handle;
1845
1846 handle = ACPI_HANDLE(ctlr->dev.parent);
1847 if (!handle)
1848 return;
1849
1850 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
1851 acpi_spi_add_device, NULL, ctlr, NULL);
1852 if (ACPI_FAILURE(status))
1853 dev_warn(&ctlr->dev, "failed to enumerate SPI slaves\n");
1854}
1855#else
1856static inline void acpi_register_spi_devices(struct spi_controller *ctlr) {}
1857#endif
1858
1859static void spi_controller_release(struct device *dev)
1860{
1861 struct spi_controller *ctlr;
1862
1863 ctlr = container_of(dev, struct spi_controller, dev);
1864 kfree(ctlr);
1865}
1866
1867static struct class spi_master_class = {
1868 .name = "spi_master",
1869 .owner = THIS_MODULE,
1870 .dev_release = spi_controller_release,
1871 .dev_groups = spi_master_groups,
1872};
1873
1874#ifdef CONFIG_SPI_SLAVE
1875
1876
1877
1878
1879
1880int spi_slave_abort(struct spi_device *spi)
1881{
1882 struct spi_controller *ctlr = spi->controller;
1883
1884 if (spi_controller_is_slave(ctlr) && ctlr->slave_abort)
1885 return ctlr->slave_abort(ctlr);
1886
1887 return -ENOTSUPP;
1888}
1889EXPORT_SYMBOL_GPL(spi_slave_abort);
1890
1891static int match_true(struct device *dev, void *data)
1892{
1893 return 1;
1894}
1895
1896static ssize_t spi_slave_show(struct device *dev,
1897 struct device_attribute *attr, char *buf)
1898{
1899 struct spi_controller *ctlr = container_of(dev, struct spi_controller,
1900 dev);
1901 struct device *child;
1902
1903 child = device_find_child(&ctlr->dev, NULL, match_true);
1904 return sprintf(buf, "%s\n",
1905 child ? to_spi_device(child)->modalias : NULL);
1906}
1907
1908static ssize_t spi_slave_store(struct device *dev,
1909 struct device_attribute *attr, const char *buf,
1910 size_t count)
1911{
1912 struct spi_controller *ctlr = container_of(dev, struct spi_controller,
1913 dev);
1914 struct spi_device *spi;
1915 struct device *child;
1916 char name[32];
1917 int rc;
1918
1919 rc = sscanf(buf, "%31s", name);
1920 if (rc != 1 || !name[0])
1921 return -EINVAL;
1922
1923 child = device_find_child(&ctlr->dev, NULL, match_true);
1924 if (child) {
1925
1926 device_unregister(child);
1927 put_device(child);
1928 }
1929
1930 if (strcmp(name, "(null)")) {
1931
1932 spi = spi_alloc_device(ctlr);
1933 if (!spi)
1934 return -ENOMEM;
1935
1936 strlcpy(spi->modalias, name, sizeof(spi->modalias));
1937
1938 rc = spi_add_device(spi);
1939 if (rc) {
1940 spi_dev_put(spi);
1941 return rc;
1942 }
1943 }
1944
1945 return count;
1946}
1947
1948static DEVICE_ATTR(slave, 0644, spi_slave_show, spi_slave_store);
1949
1950static struct attribute *spi_slave_attrs[] = {
1951 &dev_attr_slave.attr,
1952 NULL,
1953};
1954
1955static const struct attribute_group spi_slave_group = {
1956 .attrs = spi_slave_attrs,
1957};
1958
1959static const struct attribute_group *spi_slave_groups[] = {
1960 &spi_controller_statistics_group,
1961 &spi_slave_group,
1962 NULL,
1963};
1964
1965static struct class spi_slave_class = {
1966 .name = "spi_slave",
1967 .owner = THIS_MODULE,
1968 .dev_release = spi_controller_release,
1969 .dev_groups = spi_slave_groups,
1970};
1971#else
1972extern struct class spi_slave_class;
1973#endif
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998struct spi_controller *__spi_alloc_controller(struct device *dev,
1999 unsigned int size, bool slave)
2000{
2001 struct spi_controller *ctlr;
2002
2003 if (!dev)
2004 return NULL;
2005
2006 ctlr = kzalloc(size + sizeof(*ctlr), GFP_KERNEL);
2007 if (!ctlr)
2008 return NULL;
2009
2010 device_initialize(&ctlr->dev);
2011 ctlr->bus_num = -1;
2012 ctlr->num_chipselect = 1;
2013 ctlr->slave = slave;
2014 if (IS_ENABLED(CONFIG_SPI_SLAVE) && slave)
2015 ctlr->dev.class = &spi_slave_class;
2016 else
2017 ctlr->dev.class = &spi_master_class;
2018 ctlr->dev.parent = dev;
2019 pm_suspend_ignore_children(&ctlr->dev, true);
2020 spi_controller_set_devdata(ctlr, &ctlr[1]);
2021
2022 return ctlr;
2023}
2024EXPORT_SYMBOL_GPL(__spi_alloc_controller);
2025
2026#ifdef CONFIG_OF
2027static int of_spi_register_master(struct spi_controller *ctlr)
2028{
2029 int nb, i, *cs;
2030 struct device_node *np = ctlr->dev.of_node;
2031
2032 if (!np)
2033 return 0;
2034
2035 nb = of_gpio_named_count(np, "cs-gpios");
2036 ctlr->num_chipselect = max_t(int, nb, ctlr->num_chipselect);
2037
2038
2039 if (nb == 0 || nb == -ENOENT)
2040 return 0;
2041 else if (nb < 0)
2042 return nb;
2043
2044 cs = devm_kzalloc(&ctlr->dev, sizeof(int) * ctlr->num_chipselect,
2045 GFP_KERNEL);
2046 ctlr->cs_gpios = cs;
2047
2048 if (!ctlr->cs_gpios)
2049 return -ENOMEM;
2050
2051 for (i = 0; i < ctlr->num_chipselect; i++)
2052 cs[i] = -ENOENT;
2053
2054 for (i = 0; i < nb; i++)
2055 cs[i] = of_get_named_gpio(np, "cs-gpios", i);
2056
2057 return 0;
2058}
2059#else
2060static int of_spi_register_master(struct spi_controller *ctlr)
2061{
2062 return 0;
2063}
2064#endif
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089int spi_register_controller(struct spi_controller *ctlr)
2090{
2091 struct device *dev = ctlr->dev.parent;
2092 struct boardinfo *bi;
2093 int status = -ENODEV;
2094 int id, first_dynamic;
2095
2096 if (!dev)
2097 return -ENODEV;
2098
2099 if (!spi_controller_is_slave(ctlr)) {
2100 status = of_spi_register_master(ctlr);
2101 if (status)
2102 return status;
2103 }
2104
2105
2106
2107
2108 if (ctlr->num_chipselect == 0)
2109 return -EINVAL;
2110
2111 if ((ctlr->bus_num < 0) && ctlr->dev.of_node) {
2112 id = of_alias_get_id(ctlr->dev.of_node, "spi");
2113 if (id >= 0) {
2114 ctlr->bus_num = id;
2115 mutex_lock(&board_lock);
2116 id = idr_alloc(&spi_master_idr, ctlr, ctlr->bus_num,
2117 ctlr->bus_num + 1, GFP_KERNEL);
2118 mutex_unlock(&board_lock);
2119 if (WARN(id < 0, "couldn't get idr"))
2120 return id == -ENOSPC ? -EBUSY : id;
2121 }
2122 }
2123 if (ctlr->bus_num < 0) {
2124 first_dynamic = of_alias_get_highest_id("spi");
2125 if (first_dynamic < 0)
2126 first_dynamic = 0;
2127 else
2128 first_dynamic++;
2129
2130 mutex_lock(&board_lock);
2131 id = idr_alloc(&spi_master_idr, ctlr, first_dynamic,
2132 0, GFP_KERNEL);
2133 mutex_unlock(&board_lock);
2134 if (WARN(id < 0, "couldn't get idr"))
2135 return id;
2136 ctlr->bus_num = id;
2137 }
2138 INIT_LIST_HEAD(&ctlr->queue);
2139 spin_lock_init(&ctlr->queue_lock);
2140 spin_lock_init(&ctlr->bus_lock_spinlock);
2141 mutex_init(&ctlr->bus_lock_mutex);
2142 mutex_init(&ctlr->io_mutex);
2143 ctlr->bus_lock_flag = 0;
2144 init_completion(&ctlr->xfer_completion);
2145 if (!ctlr->max_dma_len)
2146 ctlr->max_dma_len = INT_MAX;
2147
2148
2149
2150
2151 dev_set_name(&ctlr->dev, "spi%u", ctlr->bus_num);
2152 status = device_add(&ctlr->dev);
2153 if (status < 0) {
2154
2155 mutex_lock(&board_lock);
2156 idr_remove(&spi_master_idr, ctlr->bus_num);
2157 mutex_unlock(&board_lock);
2158 goto done;
2159 }
2160 dev_dbg(dev, "registered %s %s\n",
2161 spi_controller_is_slave(ctlr) ? "slave" : "master",
2162 dev_name(&ctlr->dev));
2163
2164
2165 if (ctlr->transfer)
2166 dev_info(dev, "controller is unqueued, this is deprecated\n");
2167 else {
2168 status = spi_controller_initialize_queue(ctlr);
2169 if (status) {
2170 device_del(&ctlr->dev);
2171
2172 mutex_lock(&board_lock);
2173 idr_remove(&spi_master_idr, ctlr->bus_num);
2174 mutex_unlock(&board_lock);
2175 goto done;
2176 }
2177 }
2178
2179 spin_lock_init(&ctlr->statistics.lock);
2180
2181 mutex_lock(&board_lock);
2182 list_add_tail(&ctlr->list, &spi_controller_list);
2183 list_for_each_entry(bi, &board_list, list)
2184 spi_match_controller_to_boardinfo(ctlr, &bi->board_info);
2185 mutex_unlock(&board_lock);
2186
2187
2188 of_register_spi_devices(ctlr);
2189 acpi_register_spi_devices(ctlr);
2190done:
2191 return status;
2192}
2193EXPORT_SYMBOL_GPL(spi_register_controller);
2194
2195static void devm_spi_unregister(struct device *dev, void *res)
2196{
2197 spi_unregister_controller(*(struct spi_controller **)res);
2198}
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213int devm_spi_register_controller(struct device *dev,
2214 struct spi_controller *ctlr)
2215{
2216 struct spi_controller **ptr;
2217 int ret;
2218
2219 ptr = devres_alloc(devm_spi_unregister, sizeof(*ptr), GFP_KERNEL);
2220 if (!ptr)
2221 return -ENOMEM;
2222
2223 ret = spi_register_controller(ctlr);
2224 if (!ret) {
2225 *ptr = ctlr;
2226 devres_add(dev, ptr);
2227 } else {
2228 devres_free(ptr);
2229 }
2230
2231 return ret;
2232}
2233EXPORT_SYMBOL_GPL(devm_spi_register_controller);
2234
2235static int __unregister(struct device *dev, void *null)
2236{
2237 spi_unregister_device(to_spi_device(dev));
2238 return 0;
2239}
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253void spi_unregister_controller(struct spi_controller *ctlr)
2254{
2255 struct spi_controller *found;
2256 int id = ctlr->bus_num;
2257 int dummy;
2258
2259
2260 mutex_lock(&board_lock);
2261 found = idr_find(&spi_master_idr, id);
2262 mutex_unlock(&board_lock);
2263 if (ctlr->queued) {
2264 if (spi_destroy_queue(ctlr))
2265 dev_err(&ctlr->dev, "queue remove failed\n");
2266 }
2267 mutex_lock(&board_lock);
2268 list_del(&ctlr->list);
2269 mutex_unlock(&board_lock);
2270
2271 dummy = device_for_each_child(&ctlr->dev, NULL, __unregister);
2272 device_unregister(&ctlr->dev);
2273
2274 mutex_lock(&board_lock);
2275 if (found == ctlr)
2276 idr_remove(&spi_master_idr, id);
2277 mutex_unlock(&board_lock);
2278}
2279EXPORT_SYMBOL_GPL(spi_unregister_controller);
2280
2281int spi_controller_suspend(struct spi_controller *ctlr)
2282{
2283 int ret;
2284
2285
2286 if (!ctlr->queued)
2287 return 0;
2288
2289 ret = spi_stop_queue(ctlr);
2290 if (ret)
2291 dev_err(&ctlr->dev, "queue stop failed\n");
2292
2293 return ret;
2294}
2295EXPORT_SYMBOL_GPL(spi_controller_suspend);
2296
2297int spi_controller_resume(struct spi_controller *ctlr)
2298{
2299 int ret;
2300
2301 if (!ctlr->queued)
2302 return 0;
2303
2304 ret = spi_start_queue(ctlr);
2305 if (ret)
2306 dev_err(&ctlr->dev, "queue restart failed\n");
2307
2308 return ret;
2309}
2310EXPORT_SYMBOL_GPL(spi_controller_resume);
2311
2312static int __spi_controller_match(struct device *dev, const void *data)
2313{
2314 struct spi_controller *ctlr;
2315 const u16 *bus_num = data;
2316
2317 ctlr = container_of(dev, struct spi_controller, dev);
2318 return ctlr->bus_num == *bus_num;
2319}
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333struct spi_controller *spi_busnum_to_master(u16 bus_num)
2334{
2335 struct device *dev;
2336 struct spi_controller *ctlr = NULL;
2337
2338 dev = class_find_device(&spi_master_class, NULL, &bus_num,
2339 __spi_controller_match);
2340 if (dev)
2341 ctlr = container_of(dev, struct spi_controller, dev);
2342
2343 return ctlr;
2344}
2345EXPORT_SYMBOL_GPL(spi_busnum_to_master);
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365void *spi_res_alloc(struct spi_device *spi,
2366 spi_res_release_t release,
2367 size_t size, gfp_t gfp)
2368{
2369 struct spi_res *sres;
2370
2371 sres = kzalloc(sizeof(*sres) + size, gfp);
2372 if (!sres)
2373 return NULL;
2374
2375 INIT_LIST_HEAD(&sres->entry);
2376 sres->release = release;
2377
2378 return sres->data;
2379}
2380EXPORT_SYMBOL_GPL(spi_res_alloc);
2381
2382
2383
2384
2385
2386
2387void spi_res_free(void *res)
2388{
2389 struct spi_res *sres = container_of(res, struct spi_res, data);
2390
2391 if (!res)
2392 return;
2393
2394 WARN_ON(!list_empty(&sres->entry));
2395 kfree(sres);
2396}
2397EXPORT_SYMBOL_GPL(spi_res_free);
2398
2399
2400
2401
2402
2403
2404void spi_res_add(struct spi_message *message, void *res)
2405{
2406 struct spi_res *sres = container_of(res, struct spi_res, data);
2407
2408 WARN_ON(!list_empty(&sres->entry));
2409 list_add_tail(&sres->entry, &message->resources);
2410}
2411EXPORT_SYMBOL_GPL(spi_res_add);
2412
2413
2414
2415
2416
2417
2418void spi_res_release(struct spi_controller *ctlr, struct spi_message *message)
2419{
2420 struct spi_res *res;
2421
2422 while (!list_empty(&message->resources)) {
2423 res = list_last_entry(&message->resources,
2424 struct spi_res, entry);
2425
2426 if (res->release)
2427 res->release(ctlr, message, res->data);
2428
2429 list_del(&res->entry);
2430
2431 kfree(res);
2432 }
2433}
2434EXPORT_SYMBOL_GPL(spi_res_release);
2435
2436
2437
2438
2439
2440static void __spi_replace_transfers_release(struct spi_controller *ctlr,
2441 struct spi_message *msg,
2442 void *res)
2443{
2444 struct spi_replaced_transfers *rxfer = res;
2445 size_t i;
2446
2447
2448 if (rxfer->release)
2449 rxfer->release(ctlr, msg, res);
2450
2451
2452 list_splice(&rxfer->replaced_transfers, rxfer->replaced_after);
2453
2454
2455 for (i = 0; i < rxfer->inserted; i++)
2456 list_del(&rxfer->inserted_transfers[i].transfer_list);
2457}
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474struct spi_replaced_transfers *spi_replace_transfers(
2475 struct spi_message *msg,
2476 struct spi_transfer *xfer_first,
2477 size_t remove,
2478 size_t insert,
2479 spi_replaced_release_t release,
2480 size_t extradatasize,
2481 gfp_t gfp)
2482{
2483 struct spi_replaced_transfers *rxfer;
2484 struct spi_transfer *xfer;
2485 size_t i;
2486
2487
2488 rxfer = spi_res_alloc(msg->spi, __spi_replace_transfers_release,
2489 insert * sizeof(struct spi_transfer)
2490 + sizeof(struct spi_replaced_transfers)
2491 + extradatasize,
2492 gfp);
2493 if (!rxfer)
2494 return ERR_PTR(-ENOMEM);
2495
2496
2497 rxfer->release = release;
2498
2499
2500 if (extradatasize)
2501 rxfer->extradata =
2502 &rxfer->inserted_transfers[insert];
2503
2504
2505 INIT_LIST_HEAD(&rxfer->replaced_transfers);
2506
2507
2508
2509
2510 rxfer->replaced_after = xfer_first->transfer_list.prev;
2511
2512
2513 for (i = 0; i < remove; i++) {
2514
2515
2516
2517
2518 if (rxfer->replaced_after->next == &msg->transfers) {
2519 dev_err(&msg->spi->dev,
2520 "requested to remove more spi_transfers than are available\n");
2521
2522 list_splice(&rxfer->replaced_transfers,
2523 rxfer->replaced_after);
2524
2525
2526 spi_res_free(rxfer);
2527
2528
2529 return ERR_PTR(-EINVAL);
2530 }
2531
2532
2533
2534
2535 list_move_tail(rxfer->replaced_after->next,
2536 &rxfer->replaced_transfers);
2537 }
2538
2539
2540
2541
2542 for (i = 0; i < insert; i++) {
2543
2544 xfer = &rxfer->inserted_transfers[insert - 1 - i];
2545
2546
2547 memcpy(xfer, xfer_first, sizeof(*xfer));
2548
2549
2550 list_add(&xfer->transfer_list, rxfer->replaced_after);
2551
2552
2553 if (i) {
2554 xfer->cs_change = false;
2555 xfer->delay_usecs = 0;
2556 }
2557 }
2558
2559
2560 rxfer->inserted = insert;
2561
2562
2563 spi_res_add(msg, rxfer);
2564
2565 return rxfer;
2566}
2567EXPORT_SYMBOL_GPL(spi_replace_transfers);
2568
2569static int __spi_split_transfer_maxsize(struct spi_controller *ctlr,
2570 struct spi_message *msg,
2571 struct spi_transfer **xferp,
2572 size_t maxsize,
2573 gfp_t gfp)
2574{
2575 struct spi_transfer *xfer = *xferp, *xfers;
2576 struct spi_replaced_transfers *srt;
2577 size_t offset;
2578 size_t count, i;
2579
2580
2581 dev_warn_once(&msg->spi->dev,
2582 "spi_transfer of length %i exceed max length of %zu - needed to split transfers\n",
2583 xfer->len, maxsize);
2584
2585
2586 count = DIV_ROUND_UP(xfer->len, maxsize);
2587
2588
2589 srt = spi_replace_transfers(msg, xfer, 1, count, NULL, 0, gfp);
2590 if (IS_ERR(srt))
2591 return PTR_ERR(srt);
2592 xfers = srt->inserted_transfers;
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607 xfers[0].len = min_t(size_t, maxsize, xfer[0].len);
2608
2609
2610 for (i = 1, offset = maxsize; i < count; offset += maxsize, i++) {
2611
2612 if (xfers[i].rx_buf)
2613 xfers[i].rx_buf += offset;
2614 if (xfers[i].rx_dma)
2615 xfers[i].rx_dma += offset;
2616 if (xfers[i].tx_buf)
2617 xfers[i].tx_buf += offset;
2618 if (xfers[i].tx_dma)
2619 xfers[i].tx_dma += offset;
2620
2621
2622 xfers[i].len = min(maxsize, xfers[i].len - offset);
2623 }
2624
2625
2626
2627
2628 *xferp = &xfers[count - 1];
2629
2630
2631 SPI_STATISTICS_INCREMENT_FIELD(&ctlr->statistics,
2632 transfers_split_maxsize);
2633 SPI_STATISTICS_INCREMENT_FIELD(&msg->spi->statistics,
2634 transfers_split_maxsize);
2635
2636 return 0;
2637}
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650int spi_split_transfers_maxsize(struct spi_controller *ctlr,
2651 struct spi_message *msg,
2652 size_t maxsize,
2653 gfp_t gfp)
2654{
2655 struct spi_transfer *xfer;
2656 int ret;
2657
2658
2659
2660
2661
2662
2663
2664 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
2665 if (xfer->len > maxsize) {
2666 ret = __spi_split_transfer_maxsize(ctlr, msg, &xfer,
2667 maxsize, gfp);
2668 if (ret)
2669 return ret;
2670 }
2671 }
2672
2673 return 0;
2674}
2675EXPORT_SYMBOL_GPL(spi_split_transfers_maxsize);
2676
2677
2678
2679
2680
2681
2682
2683static int __spi_validate_bits_per_word(struct spi_controller *ctlr,
2684 u8 bits_per_word)
2685{
2686 if (ctlr->bits_per_word_mask) {
2687
2688 if (bits_per_word > 32)
2689 return -EINVAL;
2690 if (!(ctlr->bits_per_word_mask & SPI_BPW_MASK(bits_per_word)))
2691 return -EINVAL;
2692 }
2693
2694 return 0;
2695}
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717int spi_setup(struct spi_device *spi)
2718{
2719 unsigned bad_bits, ugly_bits;
2720 int status;
2721
2722
2723
2724 if (((spi->mode & SPI_TX_DUAL) && (spi->mode & SPI_TX_QUAD)) ||
2725 ((spi->mode & SPI_RX_DUAL) && (spi->mode & SPI_RX_QUAD))) {
2726 dev_err(&spi->dev,
2727 "setup: can not select dual and quad at the same time\n");
2728 return -EINVAL;
2729 }
2730
2731
2732 if ((spi->mode & SPI_3WIRE) && (spi->mode &
2733 (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)))
2734 return -EINVAL;
2735
2736
2737
2738 bad_bits = spi->mode & ~spi->controller->mode_bits;
2739 ugly_bits = bad_bits &
2740 (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD);
2741 if (ugly_bits) {
2742 dev_warn(&spi->dev,
2743 "setup: ignoring unsupported mode bits %x\n",
2744 ugly_bits);
2745 spi->mode &= ~ugly_bits;
2746 bad_bits &= ~ugly_bits;
2747 }
2748 if (bad_bits) {
2749 dev_err(&spi->dev, "setup: unsupported mode bits %x\n",
2750 bad_bits);
2751 return -EINVAL;
2752 }
2753
2754 if (!spi->bits_per_word)
2755 spi->bits_per_word = 8;
2756
2757 status = __spi_validate_bits_per_word(spi->controller,
2758 spi->bits_per_word);
2759 if (status)
2760 return status;
2761
2762 if (!spi->max_speed_hz)
2763 spi->max_speed_hz = spi->controller->max_speed_hz;
2764
2765 if (spi->controller->setup)
2766 status = spi->controller->setup(spi);
2767
2768 spi_set_cs(spi, false);
2769
2770 dev_dbg(&spi->dev, "setup mode %d, %s%s%s%s%u bits/w, %u Hz max --> %d\n",
2771 (int) (spi->mode & (SPI_CPOL | SPI_CPHA)),
2772 (spi->mode & SPI_CS_HIGH) ? "cs_high, " : "",
2773 (spi->mode & SPI_LSB_FIRST) ? "lsb, " : "",
2774 (spi->mode & SPI_3WIRE) ? "3wire, " : "",
2775 (spi->mode & SPI_LOOP) ? "loopback, " : "",
2776 spi->bits_per_word, spi->max_speed_hz,
2777 status);
2778
2779 return status;
2780}
2781EXPORT_SYMBOL_GPL(spi_setup);
2782
2783static int __spi_validate(struct spi_device *spi, struct spi_message *message)
2784{
2785 struct spi_controller *ctlr = spi->controller;
2786 struct spi_transfer *xfer;
2787 int w_size;
2788
2789 if (list_empty(&message->transfers))
2790 return -EINVAL;
2791
2792
2793
2794
2795
2796
2797 if ((ctlr->flags & SPI_CONTROLLER_HALF_DUPLEX) ||
2798 (spi->mode & SPI_3WIRE)) {
2799 unsigned flags = ctlr->flags;
2800
2801 list_for_each_entry(xfer, &message->transfers, transfer_list) {
2802 if (xfer->rx_buf && xfer->tx_buf)
2803 return -EINVAL;
2804 if ((flags & SPI_CONTROLLER_NO_TX) && xfer->tx_buf)
2805 return -EINVAL;
2806 if ((flags & SPI_CONTROLLER_NO_RX) && xfer->rx_buf)
2807 return -EINVAL;
2808 }
2809 }
2810
2811
2812
2813
2814
2815
2816
2817 message->frame_length = 0;
2818 list_for_each_entry(xfer, &message->transfers, transfer_list) {
2819 message->frame_length += xfer->len;
2820 if (!xfer->bits_per_word)
2821 xfer->bits_per_word = spi->bits_per_word;
2822
2823 if (!xfer->speed_hz)
2824 xfer->speed_hz = spi->max_speed_hz;
2825 if (!xfer->speed_hz)
2826 xfer->speed_hz = ctlr->max_speed_hz;
2827
2828 if (ctlr->max_speed_hz && xfer->speed_hz > ctlr->max_speed_hz)
2829 xfer->speed_hz = ctlr->max_speed_hz;
2830
2831 if (__spi_validate_bits_per_word(ctlr, xfer->bits_per_word))
2832 return -EINVAL;
2833
2834
2835
2836
2837
2838 if (xfer->bits_per_word <= 8)
2839 w_size = 1;
2840 else if (xfer->bits_per_word <= 16)
2841 w_size = 2;
2842 else
2843 w_size = 4;
2844
2845
2846 if (xfer->len % w_size)
2847 return -EINVAL;
2848
2849 if (xfer->speed_hz && ctlr->min_speed_hz &&
2850 xfer->speed_hz < ctlr->min_speed_hz)
2851 return -EINVAL;
2852
2853 if (xfer->tx_buf && !xfer->tx_nbits)
2854 xfer->tx_nbits = SPI_NBITS_SINGLE;
2855 if (xfer->rx_buf && !xfer->rx_nbits)
2856 xfer->rx_nbits = SPI_NBITS_SINGLE;
2857
2858
2859
2860
2861 if (xfer->tx_buf) {
2862 if (xfer->tx_nbits != SPI_NBITS_SINGLE &&
2863 xfer->tx_nbits != SPI_NBITS_DUAL &&
2864 xfer->tx_nbits != SPI_NBITS_QUAD)
2865 return -EINVAL;
2866 if ((xfer->tx_nbits == SPI_NBITS_DUAL) &&
2867 !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD)))
2868 return -EINVAL;
2869 if ((xfer->tx_nbits == SPI_NBITS_QUAD) &&
2870 !(spi->mode & SPI_TX_QUAD))
2871 return -EINVAL;
2872 }
2873
2874 if (xfer->rx_buf) {
2875 if (xfer->rx_nbits != SPI_NBITS_SINGLE &&
2876 xfer->rx_nbits != SPI_NBITS_DUAL &&
2877 xfer->rx_nbits != SPI_NBITS_QUAD)
2878 return -EINVAL;
2879 if ((xfer->rx_nbits == SPI_NBITS_DUAL) &&
2880 !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD)))
2881 return -EINVAL;
2882 if ((xfer->rx_nbits == SPI_NBITS_QUAD) &&
2883 !(spi->mode & SPI_RX_QUAD))
2884 return -EINVAL;
2885 }
2886 }
2887
2888 message->status = -EINPROGRESS;
2889
2890 return 0;
2891}
2892
2893static int __spi_async(struct spi_device *spi, struct spi_message *message)
2894{
2895 struct spi_controller *ctlr = spi->controller;
2896
2897 message->spi = spi;
2898
2899 SPI_STATISTICS_INCREMENT_FIELD(&ctlr->statistics, spi_async);
2900 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_async);
2901
2902 trace_spi_message_submit(message);
2903
2904 return ctlr->transfer(spi, message);
2905}
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938int spi_async(struct spi_device *spi, struct spi_message *message)
2939{
2940 struct spi_controller *ctlr = spi->controller;
2941 int ret;
2942 unsigned long flags;
2943
2944 ret = __spi_validate(spi, message);
2945 if (ret != 0)
2946 return ret;
2947
2948 spin_lock_irqsave(&ctlr->bus_lock_spinlock, flags);
2949
2950 if (ctlr->bus_lock_flag)
2951 ret = -EBUSY;
2952 else
2953 ret = __spi_async(spi, message);
2954
2955 spin_unlock_irqrestore(&ctlr->bus_lock_spinlock, flags);
2956
2957 return ret;
2958}
2959EXPORT_SYMBOL_GPL(spi_async);
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992int spi_async_locked(struct spi_device *spi, struct spi_message *message)
2993{
2994 struct spi_controller *ctlr = spi->controller;
2995 int ret;
2996 unsigned long flags;
2997
2998 ret = __spi_validate(spi, message);
2999 if (ret != 0)
3000 return ret;
3001
3002 spin_lock_irqsave(&ctlr->bus_lock_spinlock, flags);
3003
3004 ret = __spi_async(spi, message);
3005
3006 spin_unlock_irqrestore(&ctlr->bus_lock_spinlock, flags);
3007
3008 return ret;
3009
3010}
3011EXPORT_SYMBOL_GPL(spi_async_locked);
3012
3013
3014int spi_flash_read(struct spi_device *spi,
3015 struct spi_flash_read_message *msg)
3016
3017{
3018 struct spi_controller *master = spi->controller;
3019 struct device *rx_dev = NULL;
3020 int ret;
3021
3022 if ((msg->opcode_nbits == SPI_NBITS_DUAL ||
3023 msg->addr_nbits == SPI_NBITS_DUAL) &&
3024 !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD)))
3025 return -EINVAL;
3026 if ((msg->opcode_nbits == SPI_NBITS_QUAD ||
3027 msg->addr_nbits == SPI_NBITS_QUAD) &&
3028 !(spi->mode & SPI_TX_QUAD))
3029 return -EINVAL;
3030 if (msg->data_nbits == SPI_NBITS_DUAL &&
3031 !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD)))
3032 return -EINVAL;
3033 if (msg->data_nbits == SPI_NBITS_QUAD &&
3034 !(spi->mode & SPI_RX_QUAD))
3035 return -EINVAL;
3036
3037 if (master->auto_runtime_pm) {
3038 ret = pm_runtime_get_sync(master->dev.parent);
3039 if (ret < 0) {
3040 dev_err(&master->dev, "Failed to power device: %d\n",
3041 ret);
3042 return ret;
3043 }
3044 }
3045
3046 mutex_lock(&master->bus_lock_mutex);
3047 mutex_lock(&master->io_mutex);
3048 if (master->dma_rx && master->spi_flash_can_dma(spi, msg)) {
3049 rx_dev = master->dma_rx->device->dev;
3050 ret = spi_map_buf(master, rx_dev, &msg->rx_sg,
3051 msg->buf, msg->len,
3052 DMA_FROM_DEVICE);
3053 if (!ret)
3054 msg->cur_msg_mapped = true;
3055 }
3056 ret = master->spi_flash_read(spi, msg);
3057 if (msg->cur_msg_mapped)
3058 spi_unmap_buf(master, rx_dev, &msg->rx_sg,
3059 DMA_FROM_DEVICE);
3060 mutex_unlock(&master->io_mutex);
3061 mutex_unlock(&master->bus_lock_mutex);
3062
3063 if (master->auto_runtime_pm)
3064 pm_runtime_put(master->dev.parent);
3065
3066 return ret;
3067}
3068EXPORT_SYMBOL_GPL(spi_flash_read);
3069
3070
3071
3072
3073
3074
3075
3076
3077static void spi_complete(void *arg)
3078{
3079 complete(arg);
3080}
3081
3082static int __spi_sync(struct spi_device *spi, struct spi_message *message)
3083{
3084 DECLARE_COMPLETION_ONSTACK(done);
3085 int status;
3086 struct spi_controller *ctlr = spi->controller;
3087 unsigned long flags;
3088
3089 status = __spi_validate(spi, message);
3090 if (status != 0)
3091 return status;
3092
3093 message->complete = spi_complete;
3094 message->context = &done;
3095 message->spi = spi;
3096
3097 SPI_STATISTICS_INCREMENT_FIELD(&ctlr->statistics, spi_sync);
3098 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_sync);
3099
3100
3101
3102
3103
3104
3105 if (ctlr->transfer == spi_queued_transfer) {
3106 spin_lock_irqsave(&ctlr->bus_lock_spinlock, flags);
3107
3108 trace_spi_message_submit(message);
3109
3110 status = __spi_queued_transfer(spi, message, false);
3111
3112 spin_unlock_irqrestore(&ctlr->bus_lock_spinlock, flags);
3113 } else {
3114 status = spi_async_locked(spi, message);
3115 }
3116
3117 if (status == 0) {
3118
3119
3120
3121 if (ctlr->transfer == spi_queued_transfer) {
3122 SPI_STATISTICS_INCREMENT_FIELD(&ctlr->statistics,
3123 spi_sync_immediate);
3124 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics,
3125 spi_sync_immediate);
3126 __spi_pump_messages(ctlr, false);
3127 }
3128
3129 wait_for_completion(&done);
3130 status = message->status;
3131 }
3132 message->context = NULL;
3133 return status;
3134}
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157int spi_sync(struct spi_device *spi, struct spi_message *message)
3158{
3159 int ret;
3160
3161 mutex_lock(&spi->controller->bus_lock_mutex);
3162 ret = __spi_sync(spi, message);
3163 mutex_unlock(&spi->controller->bus_lock_mutex);
3164
3165 return ret;
3166}
3167EXPORT_SYMBOL_GPL(spi_sync);
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185int spi_sync_locked(struct spi_device *spi, struct spi_message *message)
3186{
3187 return __spi_sync(spi, message);
3188}
3189EXPORT_SYMBOL_GPL(spi_sync_locked);
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206int spi_bus_lock(struct spi_controller *ctlr)
3207{
3208 unsigned long flags;
3209
3210 mutex_lock(&ctlr->bus_lock_mutex);
3211
3212 spin_lock_irqsave(&ctlr->bus_lock_spinlock, flags);
3213 ctlr->bus_lock_flag = 1;
3214 spin_unlock_irqrestore(&ctlr->bus_lock_spinlock, flags);
3215
3216
3217
3218 return 0;
3219}
3220EXPORT_SYMBOL_GPL(spi_bus_lock);
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235int spi_bus_unlock(struct spi_controller *ctlr)
3236{
3237 ctlr->bus_lock_flag = 0;
3238
3239 mutex_unlock(&ctlr->bus_lock_mutex);
3240
3241 return 0;
3242}
3243EXPORT_SYMBOL_GPL(spi_bus_unlock);
3244
3245
3246#define SPI_BUFSIZ max(32, SMP_CACHE_BYTES)
3247
3248static u8 *buf;
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271int spi_write_then_read(struct spi_device *spi,
3272 const void *txbuf, unsigned n_tx,
3273 void *rxbuf, unsigned n_rx)
3274{
3275 static DEFINE_MUTEX(lock);
3276
3277 int status;
3278 struct spi_message message;
3279 struct spi_transfer x[2];
3280 u8 *local_buf;
3281
3282
3283
3284
3285
3286
3287 if ((n_tx + n_rx) > SPI_BUFSIZ || !mutex_trylock(&lock)) {
3288 local_buf = kmalloc(max((unsigned)SPI_BUFSIZ, n_tx + n_rx),
3289 GFP_KERNEL | GFP_DMA);
3290 if (!local_buf)
3291 return -ENOMEM;
3292 } else {
3293 local_buf = buf;
3294 }
3295
3296 spi_message_init(&message);
3297 memset(x, 0, sizeof(x));
3298 if (n_tx) {
3299 x[0].len = n_tx;
3300 spi_message_add_tail(&x[0], &message);
3301 }
3302 if (n_rx) {
3303 x[1].len = n_rx;
3304 spi_message_add_tail(&x[1], &message);
3305 }
3306
3307 memcpy(local_buf, txbuf, n_tx);
3308 x[0].tx_buf = local_buf;
3309 x[1].rx_buf = local_buf + n_tx;
3310
3311
3312 status = spi_sync(spi, &message);
3313 if (status == 0)
3314 memcpy(rxbuf, x[1].rx_buf, n_rx);
3315
3316 if (x[0].tx_buf == buf)
3317 mutex_unlock(&lock);
3318 else
3319 kfree(local_buf);
3320
3321 return status;
3322}
3323EXPORT_SYMBOL_GPL(spi_write_then_read);
3324
3325
3326
3327#if IS_ENABLED(CONFIG_OF_DYNAMIC)
3328static int __spi_of_device_match(struct device *dev, void *data)
3329{
3330 return dev->of_node == data;
3331}
3332
3333
3334static struct spi_device *of_find_spi_device_by_node(struct device_node *node)
3335{
3336 struct device *dev = bus_find_device(&spi_bus_type, NULL, node,
3337 __spi_of_device_match);
3338 return dev ? to_spi_device(dev) : NULL;
3339}
3340
3341static int __spi_of_controller_match(struct device *dev, const void *data)
3342{
3343 return dev->of_node == data;
3344}
3345
3346
3347static struct spi_controller *of_find_spi_controller_by_node(struct device_node *node)
3348{
3349 struct device *dev;
3350
3351 dev = class_find_device(&spi_master_class, NULL, node,
3352 __spi_of_controller_match);
3353 if (!dev && IS_ENABLED(CONFIG_SPI_SLAVE))
3354 dev = class_find_device(&spi_slave_class, NULL, node,
3355 __spi_of_controller_match);
3356 if (!dev)
3357 return NULL;
3358
3359
3360 return container_of(dev, struct spi_controller, dev);
3361}
3362
3363static int of_spi_notify(struct notifier_block *nb, unsigned long action,
3364 void *arg)
3365{
3366 struct of_reconfig_data *rd = arg;
3367 struct spi_controller *ctlr;
3368 struct spi_device *spi;
3369
3370 switch (of_reconfig_get_state_change(action, arg)) {
3371 case OF_RECONFIG_CHANGE_ADD:
3372 ctlr = of_find_spi_controller_by_node(rd->dn->parent);
3373 if (ctlr == NULL)
3374 return NOTIFY_OK;
3375
3376 if (of_node_test_and_set_flag(rd->dn, OF_POPULATED)) {
3377 put_device(&ctlr->dev);
3378 return NOTIFY_OK;
3379 }
3380
3381 spi = of_register_spi_device(ctlr, rd->dn);
3382 put_device(&ctlr->dev);
3383
3384 if (IS_ERR(spi)) {
3385 pr_err("%s: failed to create for '%pOF'\n",
3386 __func__, rd->dn);
3387 of_node_clear_flag(rd->dn, OF_POPULATED);
3388 return notifier_from_errno(PTR_ERR(spi));
3389 }
3390 break;
3391
3392 case OF_RECONFIG_CHANGE_REMOVE:
3393
3394 if (!of_node_check_flag(rd->dn, OF_POPULATED))
3395 return NOTIFY_OK;
3396
3397
3398 spi = of_find_spi_device_by_node(rd->dn);
3399 if (spi == NULL)
3400 return NOTIFY_OK;
3401
3402
3403 spi_unregister_device(spi);
3404
3405
3406 put_device(&spi->dev);
3407 break;
3408 }
3409
3410 return NOTIFY_OK;
3411}
3412
3413static struct notifier_block spi_of_notifier = {
3414 .notifier_call = of_spi_notify,
3415};
3416#else
3417extern struct notifier_block spi_of_notifier;
3418#endif
3419
3420#if IS_ENABLED(CONFIG_ACPI)
3421static int spi_acpi_controller_match(struct device *dev, const void *data)
3422{
3423 return ACPI_COMPANION(dev->parent) == data;
3424}
3425
3426static int spi_acpi_device_match(struct device *dev, void *data)
3427{
3428 return ACPI_COMPANION(dev) == data;
3429}
3430
3431static struct spi_controller *acpi_spi_find_controller_by_adev(struct acpi_device *adev)
3432{
3433 struct device *dev;
3434
3435 dev = class_find_device(&spi_master_class, NULL, adev,
3436 spi_acpi_controller_match);
3437 if (!dev && IS_ENABLED(CONFIG_SPI_SLAVE))
3438 dev = class_find_device(&spi_slave_class, NULL, adev,
3439 spi_acpi_controller_match);
3440 if (!dev)
3441 return NULL;
3442
3443 return container_of(dev, struct spi_controller, dev);
3444}
3445
3446static struct spi_device *acpi_spi_find_device_by_adev(struct acpi_device *adev)
3447{
3448 struct device *dev;
3449
3450 dev = bus_find_device(&spi_bus_type, NULL, adev, spi_acpi_device_match);
3451
3452 return dev ? to_spi_device(dev) : NULL;
3453}
3454
3455static int acpi_spi_notify(struct notifier_block *nb, unsigned long value,
3456 void *arg)
3457{
3458 struct acpi_device *adev = arg;
3459 struct spi_controller *ctlr;
3460 struct spi_device *spi;
3461
3462 switch (value) {
3463 case ACPI_RECONFIG_DEVICE_ADD:
3464 ctlr = acpi_spi_find_controller_by_adev(adev->parent);
3465 if (!ctlr)
3466 break;
3467
3468 acpi_register_spi_device(ctlr, adev);
3469 put_device(&ctlr->dev);
3470 break;
3471 case ACPI_RECONFIG_DEVICE_REMOVE:
3472 if (!acpi_device_enumerated(adev))
3473 break;
3474
3475 spi = acpi_spi_find_device_by_adev(adev);
3476 if (!spi)
3477 break;
3478
3479 spi_unregister_device(spi);
3480 put_device(&spi->dev);
3481 break;
3482 }
3483
3484 return NOTIFY_OK;
3485}
3486
3487static struct notifier_block spi_acpi_notifier = {
3488 .notifier_call = acpi_spi_notify,
3489};
3490#else
3491extern struct notifier_block spi_acpi_notifier;
3492#endif
3493
3494static int __init spi_init(void)
3495{
3496 int status;
3497
3498 buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);
3499 if (!buf) {
3500 status = -ENOMEM;
3501 goto err0;
3502 }
3503
3504 status = bus_register(&spi_bus_type);
3505 if (status < 0)
3506 goto err1;
3507
3508 status = class_register(&spi_master_class);
3509 if (status < 0)
3510 goto err2;
3511
3512 if (IS_ENABLED(CONFIG_SPI_SLAVE)) {
3513 status = class_register(&spi_slave_class);
3514 if (status < 0)
3515 goto err3;
3516 }
3517
3518 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
3519 WARN_ON(of_reconfig_notifier_register(&spi_of_notifier));
3520 if (IS_ENABLED(CONFIG_ACPI))
3521 WARN_ON(acpi_reconfig_notifier_register(&spi_acpi_notifier));
3522
3523 return 0;
3524
3525err3:
3526 class_unregister(&spi_master_class);
3527err2:
3528 bus_unregister(&spi_bus_type);
3529err1:
3530 kfree(buf);
3531 buf = NULL;
3532err0:
3533 return status;
3534}
3535
3536
3537
3538
3539
3540
3541
3542
3543postcore_initcall(spi_init);
3544
3545