1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/kernel.h>
23#include <linux/kmod.h>
24#include <linux/device.h>
25#include <linux/init.h>
26#include <linux/cache.h>
27#include <linux/mutex.h>
28#include <linux/of_device.h>
29#include <linux/of_irq.h>
30#include <linux/slab.h>
31#include <linux/mod_devicetable.h>
32#include <linux/spi/spi.h>
33#include <linux/of_gpio.h>
34#include <linux/pm_runtime.h>
35#include <linux/export.h>
36#include <linux/sched.h>
37#include <linux/delay.h>
38#include <linux/kthread.h>
39#include <linux/ioport.h>
40#include <linux/acpi.h>
41
42static void spidev_release(struct device *dev)
43{
44 struct spi_device *spi = to_spi_device(dev);
45
46
47 if (spi->master->cleanup)
48 spi->master->cleanup(spi);
49
50 spi_master_put(spi->master);
51 kfree(spi);
52}
53
54static ssize_t
55modalias_show(struct device *dev, struct device_attribute *a, char *buf)
56{
57 const struct spi_device *spi = to_spi_device(dev);
58
59 return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);
60}
61
62static struct device_attribute spi_dev_attrs[] = {
63 __ATTR_RO(modalias),
64 __ATTR_NULL,
65};
66
67
68
69
70
71static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,
72 const struct spi_device *sdev)
73{
74 while (id->name[0]) {
75 if (!strcmp(sdev->modalias, id->name))
76 return id;
77 id++;
78 }
79 return NULL;
80}
81
82const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
83{
84 const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
85
86 return spi_match_id(sdrv->id_table, sdev);
87}
88EXPORT_SYMBOL_GPL(spi_get_device_id);
89
90static int spi_match_device(struct device *dev, struct device_driver *drv)
91{
92 const struct spi_device *spi = to_spi_device(dev);
93 const struct spi_driver *sdrv = to_spi_driver(drv);
94
95
96 if (of_driver_match_device(dev, drv))
97 return 1;
98
99
100 if (acpi_driver_match_device(dev, drv))
101 return 1;
102
103 if (sdrv->id_table)
104 return !!spi_match_id(sdrv->id_table, spi);
105
106 return strcmp(spi->modalias, drv->name) == 0;
107}
108
109static int spi_uevent(struct device *dev, struct kobj_uevent_env *env)
110{
111 const struct spi_device *spi = to_spi_device(dev);
112
113 add_uevent_var(env, "MODALIAS=%s%s", SPI_MODULE_PREFIX, spi->modalias);
114 return 0;
115}
116
117#ifdef CONFIG_PM_SLEEP
118static int spi_legacy_suspend(struct device *dev, pm_message_t message)
119{
120 int value = 0;
121 struct spi_driver *drv = to_spi_driver(dev->driver);
122
123
124 if (drv) {
125 if (drv->suspend)
126 value = drv->suspend(to_spi_device(dev), message);
127 else
128 dev_dbg(dev, "... can't suspend\n");
129 }
130 return value;
131}
132
133static int spi_legacy_resume(struct device *dev)
134{
135 int value = 0;
136 struct spi_driver *drv = to_spi_driver(dev->driver);
137
138
139 if (drv) {
140 if (drv->resume)
141 value = drv->resume(to_spi_device(dev));
142 else
143 dev_dbg(dev, "... can't resume\n");
144 }
145 return value;
146}
147
148static int spi_pm_suspend(struct device *dev)
149{
150 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
151
152 if (pm)
153 return pm_generic_suspend(dev);
154 else
155 return spi_legacy_suspend(dev, PMSG_SUSPEND);
156}
157
158static int spi_pm_resume(struct device *dev)
159{
160 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
161
162 if (pm)
163 return pm_generic_resume(dev);
164 else
165 return spi_legacy_resume(dev);
166}
167
168static int spi_pm_freeze(struct device *dev)
169{
170 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
171
172 if (pm)
173 return pm_generic_freeze(dev);
174 else
175 return spi_legacy_suspend(dev, PMSG_FREEZE);
176}
177
178static int spi_pm_thaw(struct device *dev)
179{
180 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
181
182 if (pm)
183 return pm_generic_thaw(dev);
184 else
185 return spi_legacy_resume(dev);
186}
187
188static int spi_pm_poweroff(struct device *dev)
189{
190 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
191
192 if (pm)
193 return pm_generic_poweroff(dev);
194 else
195 return spi_legacy_suspend(dev, PMSG_HIBERNATE);
196}
197
198static int spi_pm_restore(struct device *dev)
199{
200 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
201
202 if (pm)
203 return pm_generic_restore(dev);
204 else
205 return spi_legacy_resume(dev);
206}
207#else
208#define spi_pm_suspend NULL
209#define spi_pm_resume NULL
210#define spi_pm_freeze NULL
211#define spi_pm_thaw NULL
212#define spi_pm_poweroff NULL
213#define spi_pm_restore NULL
214#endif
215
216static const struct dev_pm_ops spi_pm = {
217 .suspend = spi_pm_suspend,
218 .resume = spi_pm_resume,
219 .freeze = spi_pm_freeze,
220 .thaw = spi_pm_thaw,
221 .poweroff = spi_pm_poweroff,
222 .restore = spi_pm_restore,
223 SET_RUNTIME_PM_OPS(
224 pm_generic_runtime_suspend,
225 pm_generic_runtime_resume,
226 pm_generic_runtime_idle
227 )
228};
229
230struct bus_type spi_bus_type = {
231 .name = "spi",
232 .dev_attrs = spi_dev_attrs,
233 .match = spi_match_device,
234 .uevent = spi_uevent,
235 .pm = &spi_pm,
236};
237EXPORT_SYMBOL_GPL(spi_bus_type);
238
239
240static int spi_drv_probe(struct device *dev)
241{
242 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
243
244 return sdrv->probe(to_spi_device(dev));
245}
246
247static int spi_drv_remove(struct device *dev)
248{
249 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
250
251 return sdrv->remove(to_spi_device(dev));
252}
253
254static void spi_drv_shutdown(struct device *dev)
255{
256 const struct spi_driver *sdrv = to_spi_driver(dev->driver);
257
258 sdrv->shutdown(to_spi_device(dev));
259}
260
261
262
263
264
265
266int spi_register_driver(struct spi_driver *sdrv)
267{
268 sdrv->driver.bus = &spi_bus_type;
269 if (sdrv->probe)
270 sdrv->driver.probe = spi_drv_probe;
271 if (sdrv->remove)
272 sdrv->driver.remove = spi_drv_remove;
273 if (sdrv->shutdown)
274 sdrv->driver.shutdown = spi_drv_shutdown;
275 return driver_register(&sdrv->driver);
276}
277EXPORT_SYMBOL_GPL(spi_register_driver);
278
279
280
281
282
283
284
285
286
287struct boardinfo {
288 struct list_head list;
289 struct spi_board_info board_info;
290};
291
292static LIST_HEAD(board_list);
293static LIST_HEAD(spi_master_list);
294
295
296
297
298
299static DEFINE_MUTEX(board_lock);
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318struct spi_device *spi_alloc_device(struct spi_master *master)
319{
320 struct spi_device *spi;
321 struct device *dev = master->dev.parent;
322
323 if (!spi_master_get(master))
324 return NULL;
325
326 spi = kzalloc(sizeof *spi, GFP_KERNEL);
327 if (!spi) {
328 dev_err(dev, "cannot alloc spi_device\n");
329 spi_master_put(master);
330 return NULL;
331 }
332
333 spi->master = master;
334 spi->dev.parent = &master->dev;
335 spi->dev.bus = &spi_bus_type;
336 spi->dev.release = spidev_release;
337 spi->cs_gpio = -EINVAL;
338 device_initialize(&spi->dev);
339 return spi;
340}
341EXPORT_SYMBOL_GPL(spi_alloc_device);
342
343
344
345
346
347
348
349
350
351
352int spi_add_device(struct spi_device *spi)
353{
354 static DEFINE_MUTEX(spi_add_lock);
355 struct spi_master *master = spi->master;
356 struct device *dev = master->dev.parent;
357 struct device *d;
358 int status;
359
360
361 if (spi->chip_select >= master->num_chipselect) {
362 dev_err(dev, "cs%d >= max %d\n",
363 spi->chip_select,
364 master->num_chipselect);
365 return -EINVAL;
366 }
367
368
369 dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->master->dev),
370 spi->chip_select);
371
372
373
374
375
376
377 mutex_lock(&spi_add_lock);
378
379 d = bus_find_device_by_name(&spi_bus_type, NULL, dev_name(&spi->dev));
380 if (d != NULL) {
381 dev_err(dev, "chipselect %d already in use\n",
382 spi->chip_select);
383 put_device(d);
384 status = -EBUSY;
385 goto done;
386 }
387
388 if (master->cs_gpios)
389 spi->cs_gpio = master->cs_gpios[spi->chip_select];
390
391
392
393
394
395 status = spi_setup(spi);
396 if (status < 0) {
397 dev_err(dev, "can't setup %s, status %d\n",
398 dev_name(&spi->dev), status);
399 goto done;
400 }
401
402
403 status = device_add(&spi->dev);
404 if (status < 0)
405 dev_err(dev, "can't add %s, status %d\n",
406 dev_name(&spi->dev), status);
407 else
408 dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
409
410done:
411 mutex_unlock(&spi_add_lock);
412 return status;
413}
414EXPORT_SYMBOL_GPL(spi_add_device);
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430struct spi_device *spi_new_device(struct spi_master *master,
431 struct spi_board_info *chip)
432{
433 struct spi_device *proxy;
434 int status;
435
436
437
438
439
440
441
442
443 proxy = spi_alloc_device(master);
444 if (!proxy)
445 return NULL;
446
447 WARN_ON(strlen(chip->modalias) >= sizeof(proxy->modalias));
448
449 proxy->chip_select = chip->chip_select;
450 proxy->max_speed_hz = chip->max_speed_hz;
451 proxy->mode = chip->mode;
452 proxy->irq = chip->irq;
453 strlcpy(proxy->modalias, chip->modalias, sizeof(proxy->modalias));
454 proxy->dev.platform_data = (void *) chip->platform_data;
455 proxy->controller_data = chip->controller_data;
456 proxy->controller_state = NULL;
457
458 status = spi_add_device(proxy);
459 if (status < 0) {
460 spi_dev_put(proxy);
461 return NULL;
462 }
463
464 return proxy;
465}
466EXPORT_SYMBOL_GPL(spi_new_device);
467
468static void spi_match_master_to_boardinfo(struct spi_master *master,
469 struct spi_board_info *bi)
470{
471 struct spi_device *dev;
472
473 if (master->bus_num != bi->bus_num)
474 return;
475
476 dev = spi_new_device(master, bi);
477 if (!dev)
478 dev_err(master->dev.parent, "can't create new device for %s\n",
479 bi->modalias);
480}
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501int spi_register_board_info(struct spi_board_info const *info, unsigned n)
502{
503 struct boardinfo *bi;
504 int i;
505
506 bi = kzalloc(n * sizeof(*bi), GFP_KERNEL);
507 if (!bi)
508 return -ENOMEM;
509
510 for (i = 0; i < n; i++, bi++, info++) {
511 struct spi_master *master;
512
513 memcpy(&bi->board_info, info, sizeof(*info));
514 mutex_lock(&board_lock);
515 list_add_tail(&bi->list, &board_list);
516 list_for_each_entry(master, &spi_master_list, list)
517 spi_match_master_to_boardinfo(master, &bi->board_info);
518 mutex_unlock(&board_lock);
519 }
520
521 return 0;
522}
523
524
525
526
527
528
529
530
531
532
533
534
535static void spi_pump_messages(struct kthread_work *work)
536{
537 struct spi_master *master =
538 container_of(work, struct spi_master, pump_messages);
539 unsigned long flags;
540 bool was_busy = false;
541 int ret;
542
543
544 spin_lock_irqsave(&master->queue_lock, flags);
545 if (list_empty(&master->queue) || !master->running) {
546 if (master->busy && master->unprepare_transfer_hardware) {
547 ret = master->unprepare_transfer_hardware(master);
548 if (ret) {
549 spin_unlock_irqrestore(&master->queue_lock, flags);
550 dev_err(&master->dev,
551 "failed to unprepare transfer hardware\n");
552 return;
553 }
554 }
555 master->busy = false;
556 spin_unlock_irqrestore(&master->queue_lock, flags);
557 return;
558 }
559
560
561 if (master->cur_msg) {
562 spin_unlock_irqrestore(&master->queue_lock, flags);
563 return;
564 }
565
566 master->cur_msg =
567 list_entry(master->queue.next, struct spi_message, queue);
568
569 list_del_init(&master->cur_msg->queue);
570 if (master->busy)
571 was_busy = true;
572 else
573 master->busy = true;
574 spin_unlock_irqrestore(&master->queue_lock, flags);
575
576 if (!was_busy && master->prepare_transfer_hardware) {
577 ret = master->prepare_transfer_hardware(master);
578 if (ret) {
579 dev_err(&master->dev,
580 "failed to prepare transfer hardware\n");
581 return;
582 }
583 }
584
585 ret = master->transfer_one_message(master, master->cur_msg);
586 if (ret) {
587 dev_err(&master->dev,
588 "failed to transfer one message from queue\n");
589 return;
590 }
591}
592
593static int spi_init_queue(struct spi_master *master)
594{
595 struct sched_param param = { .sched_priority = MAX_RT_PRIO - 1 };
596
597 INIT_LIST_HEAD(&master->queue);
598 spin_lock_init(&master->queue_lock);
599
600 master->running = false;
601 master->busy = false;
602
603 init_kthread_worker(&master->kworker);
604 master->kworker_task = kthread_run(kthread_worker_fn,
605 &master->kworker,
606 dev_name(&master->dev));
607 if (IS_ERR(master->kworker_task)) {
608 dev_err(&master->dev, "failed to create message pump task\n");
609 return -ENOMEM;
610 }
611 init_kthread_work(&master->pump_messages, spi_pump_messages);
612
613
614
615
616
617
618
619
620 if (master->rt) {
621 dev_info(&master->dev,
622 "will run message pump with realtime priority\n");
623 sched_setscheduler(master->kworker_task, SCHED_FIFO, ¶m);
624 }
625
626 return 0;
627}
628
629
630
631
632
633
634
635
636
637struct spi_message *spi_get_next_queued_message(struct spi_master *master)
638{
639 struct spi_message *next;
640 unsigned long flags;
641
642
643 spin_lock_irqsave(&master->queue_lock, flags);
644 if (list_empty(&master->queue))
645 next = NULL;
646 else
647 next = list_entry(master->queue.next,
648 struct spi_message, queue);
649 spin_unlock_irqrestore(&master->queue_lock, flags);
650
651 return next;
652}
653EXPORT_SYMBOL_GPL(spi_get_next_queued_message);
654
655
656
657
658
659
660
661
662void spi_finalize_current_message(struct spi_master *master)
663{
664 struct spi_message *mesg;
665 unsigned long flags;
666
667 spin_lock_irqsave(&master->queue_lock, flags);
668 mesg = master->cur_msg;
669 master->cur_msg = NULL;
670
671 queue_kthread_work(&master->kworker, &master->pump_messages);
672 spin_unlock_irqrestore(&master->queue_lock, flags);
673
674 mesg->state = NULL;
675 if (mesg->complete)
676 mesg->complete(mesg->context);
677}
678EXPORT_SYMBOL_GPL(spi_finalize_current_message);
679
680static int spi_start_queue(struct spi_master *master)
681{
682 unsigned long flags;
683
684 spin_lock_irqsave(&master->queue_lock, flags);
685
686 if (master->running || master->busy) {
687 spin_unlock_irqrestore(&master->queue_lock, flags);
688 return -EBUSY;
689 }
690
691 master->running = true;
692 master->cur_msg = NULL;
693 spin_unlock_irqrestore(&master->queue_lock, flags);
694
695 queue_kthread_work(&master->kworker, &master->pump_messages);
696
697 return 0;
698}
699
700static int spi_stop_queue(struct spi_master *master)
701{
702 unsigned long flags;
703 unsigned limit = 500;
704 int ret = 0;
705
706 spin_lock_irqsave(&master->queue_lock, flags);
707
708
709
710
711
712
713
714 while ((!list_empty(&master->queue) || master->busy) && limit--) {
715 spin_unlock_irqrestore(&master->queue_lock, flags);
716 msleep(10);
717 spin_lock_irqsave(&master->queue_lock, flags);
718 }
719
720 if (!list_empty(&master->queue) || master->busy)
721 ret = -EBUSY;
722 else
723 master->running = false;
724
725 spin_unlock_irqrestore(&master->queue_lock, flags);
726
727 if (ret) {
728 dev_warn(&master->dev,
729 "could not stop message queue\n");
730 return ret;
731 }
732 return ret;
733}
734
735static int spi_destroy_queue(struct spi_master *master)
736{
737 int ret;
738
739 ret = spi_stop_queue(master);
740
741
742
743
744
745
746
747 if (ret) {
748 dev_err(&master->dev, "problem destroying queue\n");
749 return ret;
750 }
751
752 flush_kthread_worker(&master->kworker);
753 kthread_stop(master->kworker_task);
754
755 return 0;
756}
757
758
759
760
761
762
763static int spi_queued_transfer(struct spi_device *spi, struct spi_message *msg)
764{
765 struct spi_master *master = spi->master;
766 unsigned long flags;
767
768 spin_lock_irqsave(&master->queue_lock, flags);
769
770 if (!master->running) {
771 spin_unlock_irqrestore(&master->queue_lock, flags);
772 return -ESHUTDOWN;
773 }
774 msg->actual_length = 0;
775 msg->status = -EINPROGRESS;
776
777 list_add_tail(&msg->queue, &master->queue);
778 if (master->running && !master->busy)
779 queue_kthread_work(&master->kworker, &master->pump_messages);
780
781 spin_unlock_irqrestore(&master->queue_lock, flags);
782 return 0;
783}
784
785static int spi_master_initialize_queue(struct spi_master *master)
786{
787 int ret;
788
789 master->queued = true;
790 master->transfer = spi_queued_transfer;
791
792
793 ret = spi_init_queue(master);
794 if (ret) {
795 dev_err(&master->dev, "problem initializing queue\n");
796 goto err_init_queue;
797 }
798 ret = spi_start_queue(master);
799 if (ret) {
800 dev_err(&master->dev, "problem starting queue\n");
801 goto err_start_queue;
802 }
803
804 return 0;
805
806err_start_queue:
807err_init_queue:
808 spi_destroy_queue(master);
809 return ret;
810}
811
812
813
814#if defined(CONFIG_OF)
815
816
817
818
819
820
821
822static void of_register_spi_devices(struct spi_master *master)
823{
824 struct spi_device *spi;
825 struct device_node *nc;
826 const __be32 *prop;
827 char modalias[SPI_NAME_SIZE + 4];
828 int rc;
829 int len;
830
831 if (!master->dev.of_node)
832 return;
833
834 for_each_available_child_of_node(master->dev.of_node, nc) {
835
836 spi = spi_alloc_device(master);
837 if (!spi) {
838 dev_err(&master->dev, "spi_device alloc error for %s\n",
839 nc->full_name);
840 spi_dev_put(spi);
841 continue;
842 }
843
844
845 if (of_modalias_node(nc, spi->modalias,
846 sizeof(spi->modalias)) < 0) {
847 dev_err(&master->dev, "cannot find modalias for %s\n",
848 nc->full_name);
849 spi_dev_put(spi);
850 continue;
851 }
852
853
854 prop = of_get_property(nc, "reg", &len);
855 if (!prop || len < sizeof(*prop)) {
856 dev_err(&master->dev, "%s has no 'reg' property\n",
857 nc->full_name);
858 spi_dev_put(spi);
859 continue;
860 }
861 spi->chip_select = be32_to_cpup(prop);
862
863
864 if (of_find_property(nc, "spi-cpha", NULL))
865 spi->mode |= SPI_CPHA;
866 if (of_find_property(nc, "spi-cpol", NULL))
867 spi->mode |= SPI_CPOL;
868 if (of_find_property(nc, "spi-cs-high", NULL))
869 spi->mode |= SPI_CS_HIGH;
870 if (of_find_property(nc, "spi-3wire", NULL))
871 spi->mode |= SPI_3WIRE;
872
873
874 prop = of_get_property(nc, "spi-max-frequency", &len);
875 if (!prop || len < sizeof(*prop)) {
876 dev_err(&master->dev, "%s has no 'spi-max-frequency' property\n",
877 nc->full_name);
878 spi_dev_put(spi);
879 continue;
880 }
881 spi->max_speed_hz = be32_to_cpup(prop);
882
883
884 spi->irq = irq_of_parse_and_map(nc, 0);
885
886
887 of_node_get(nc);
888 spi->dev.of_node = nc;
889
890
891 snprintf(modalias, sizeof(modalias), "%s%s", SPI_MODULE_PREFIX,
892 spi->modalias);
893 request_module(modalias);
894 rc = spi_add_device(spi);
895 if (rc) {
896 dev_err(&master->dev, "spi_device register error %s\n",
897 nc->full_name);
898 spi_dev_put(spi);
899 }
900
901 }
902}
903#else
904static void of_register_spi_devices(struct spi_master *master) { }
905#endif
906
907#ifdef CONFIG_ACPI
908static int acpi_spi_add_resource(struct acpi_resource *ares, void *data)
909{
910 struct spi_device *spi = data;
911
912 if (ares->type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
913 struct acpi_resource_spi_serialbus *sb;
914
915 sb = &ares->data.spi_serial_bus;
916 if (sb->type == ACPI_RESOURCE_SERIAL_TYPE_SPI) {
917 spi->chip_select = sb->device_selection;
918 spi->max_speed_hz = sb->connection_speed;
919
920 if (sb->clock_phase == ACPI_SPI_SECOND_PHASE)
921 spi->mode |= SPI_CPHA;
922 if (sb->clock_polarity == ACPI_SPI_START_HIGH)
923 spi->mode |= SPI_CPOL;
924 if (sb->device_polarity == ACPI_SPI_ACTIVE_HIGH)
925 spi->mode |= SPI_CS_HIGH;
926 }
927 } else if (spi->irq < 0) {
928 struct resource r;
929
930 if (acpi_dev_resource_interrupt(ares, 0, &r))
931 spi->irq = r.start;
932 }
933
934
935 return 1;
936}
937
938static acpi_status acpi_spi_add_device(acpi_handle handle, u32 level,
939 void *data, void **return_value)
940{
941 struct spi_master *master = data;
942 struct list_head resource_list;
943 struct acpi_device *adev;
944 struct spi_device *spi;
945 int ret;
946
947 if (acpi_bus_get_device(handle, &adev))
948 return AE_OK;
949 if (acpi_bus_get_status(adev) || !adev->status.present)
950 return AE_OK;
951
952 spi = spi_alloc_device(master);
953 if (!spi) {
954 dev_err(&master->dev, "failed to allocate SPI device for %s\n",
955 dev_name(&adev->dev));
956 return AE_NO_MEMORY;
957 }
958
959 ACPI_HANDLE_SET(&spi->dev, handle);
960 spi->irq = -1;
961
962 INIT_LIST_HEAD(&resource_list);
963 ret = acpi_dev_get_resources(adev, &resource_list,
964 acpi_spi_add_resource, spi);
965 acpi_dev_free_resource_list(&resource_list);
966
967 if (ret < 0 || !spi->max_speed_hz) {
968 spi_dev_put(spi);
969 return AE_OK;
970 }
971
972 strlcpy(spi->modalias, dev_name(&adev->dev), sizeof(spi->modalias));
973 if (spi_add_device(spi)) {
974 dev_err(&master->dev, "failed to add SPI device %s from ACPI\n",
975 dev_name(&adev->dev));
976 spi_dev_put(spi);
977 }
978
979 return AE_OK;
980}
981
982static void acpi_register_spi_devices(struct spi_master *master)
983{
984 acpi_status status;
985 acpi_handle handle;
986
987 handle = ACPI_HANDLE(&master->dev);
988 if (!handle)
989 return;
990
991 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
992 acpi_spi_add_device, NULL,
993 master, NULL);
994 if (ACPI_FAILURE(status))
995 dev_warn(&master->dev, "failed to enumerate SPI slaves\n");
996}
997#else
998static inline void acpi_register_spi_devices(struct spi_master *master) {}
999#endif
1000
1001static void spi_master_release(struct device *dev)
1002{
1003 struct spi_master *master;
1004
1005 master = container_of(dev, struct spi_master, dev);
1006 kfree(master);
1007}
1008
1009static struct class spi_master_class = {
1010 .name = "spi_master",
1011 .owner = THIS_MODULE,
1012 .dev_release = spi_master_release,
1013};
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037struct spi_master *spi_alloc_master(struct device *dev, unsigned size)
1038{
1039 struct spi_master *master;
1040
1041 if (!dev)
1042 return NULL;
1043
1044 master = kzalloc(size + sizeof *master, GFP_KERNEL);
1045 if (!master)
1046 return NULL;
1047
1048 device_initialize(&master->dev);
1049 master->bus_num = -1;
1050 master->num_chipselect = 1;
1051 master->dev.class = &spi_master_class;
1052 master->dev.parent = get_device(dev);
1053 spi_master_set_devdata(master, &master[1]);
1054
1055 return master;
1056}
1057EXPORT_SYMBOL_GPL(spi_alloc_master);
1058
1059#ifdef CONFIG_OF
1060static int of_spi_register_master(struct spi_master *master)
1061{
1062 u16 nb;
1063 int i, *cs;
1064 struct device_node *np = master->dev.of_node;
1065
1066 if (!np)
1067 return 0;
1068
1069 nb = of_gpio_named_count(np, "cs-gpios");
1070 master->num_chipselect = max(nb, master->num_chipselect);
1071
1072 if (nb < 1)
1073 return 0;
1074
1075 cs = devm_kzalloc(&master->dev,
1076 sizeof(int) * master->num_chipselect,
1077 GFP_KERNEL);
1078 master->cs_gpios = cs;
1079
1080 if (!master->cs_gpios)
1081 return -ENOMEM;
1082
1083 memset(cs, -EINVAL, master->num_chipselect);
1084
1085 for (i = 0; i < nb; i++)
1086 cs[i] = of_get_named_gpio(np, "cs-gpios", i);
1087
1088 return 0;
1089}
1090#else
1091static int of_spi_register_master(struct spi_master *master)
1092{
1093 return 0;
1094}
1095#endif
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117int spi_register_master(struct spi_master *master)
1118{
1119 static atomic_t dyn_bus_id = ATOMIC_INIT((1<<15) - 1);
1120 struct device *dev = master->dev.parent;
1121 struct boardinfo *bi;
1122 int status = -ENODEV;
1123 int dynamic = 0;
1124
1125 if (!dev)
1126 return -ENODEV;
1127
1128 status = of_spi_register_master(master);
1129 if (status)
1130 return status;
1131
1132
1133
1134
1135 if (master->num_chipselect == 0)
1136 return -EINVAL;
1137
1138
1139 if (master->bus_num < 0) {
1140
1141
1142
1143 master->bus_num = atomic_dec_return(&dyn_bus_id);
1144 dynamic = 1;
1145 }
1146
1147 spin_lock_init(&master->bus_lock_spinlock);
1148 mutex_init(&master->bus_lock_mutex);
1149 master->bus_lock_flag = 0;
1150
1151
1152
1153
1154 dev_set_name(&master->dev, "spi%u", master->bus_num);
1155 status = device_add(&master->dev);
1156 if (status < 0)
1157 goto done;
1158 dev_dbg(dev, "registered master %s%s\n", dev_name(&master->dev),
1159 dynamic ? " (dynamic)" : "");
1160
1161
1162 if (master->transfer)
1163 dev_info(dev, "master is unqueued, this is deprecated\n");
1164 else {
1165 status = spi_master_initialize_queue(master);
1166 if (status) {
1167 device_unregister(&master->dev);
1168 goto done;
1169 }
1170 }
1171
1172 mutex_lock(&board_lock);
1173 list_add_tail(&master->list, &spi_master_list);
1174 list_for_each_entry(bi, &board_list, list)
1175 spi_match_master_to_boardinfo(master, &bi->board_info);
1176 mutex_unlock(&board_lock);
1177
1178
1179 of_register_spi_devices(master);
1180 acpi_register_spi_devices(master);
1181done:
1182 return status;
1183}
1184EXPORT_SYMBOL_GPL(spi_register_master);
1185
1186static int __unregister(struct device *dev, void *null)
1187{
1188 spi_unregister_device(to_spi_device(dev));
1189 return 0;
1190}
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202void spi_unregister_master(struct spi_master *master)
1203{
1204 int dummy;
1205
1206 if (master->queued) {
1207 if (spi_destroy_queue(master))
1208 dev_err(&master->dev, "queue remove failed\n");
1209 }
1210
1211 mutex_lock(&board_lock);
1212 list_del(&master->list);
1213 mutex_unlock(&board_lock);
1214
1215 dummy = device_for_each_child(&master->dev, NULL, __unregister);
1216 device_unregister(&master->dev);
1217}
1218EXPORT_SYMBOL_GPL(spi_unregister_master);
1219
1220int spi_master_suspend(struct spi_master *master)
1221{
1222 int ret;
1223
1224
1225 if (!master->queued)
1226 return 0;
1227
1228 ret = spi_stop_queue(master);
1229 if (ret)
1230 dev_err(&master->dev, "queue stop failed\n");
1231
1232 return ret;
1233}
1234EXPORT_SYMBOL_GPL(spi_master_suspend);
1235
1236int spi_master_resume(struct spi_master *master)
1237{
1238 int ret;
1239
1240 if (!master->queued)
1241 return 0;
1242
1243 ret = spi_start_queue(master);
1244 if (ret)
1245 dev_err(&master->dev, "queue restart failed\n");
1246
1247 return ret;
1248}
1249EXPORT_SYMBOL_GPL(spi_master_resume);
1250
1251static int __spi_master_match(struct device *dev, void *data)
1252{
1253 struct spi_master *m;
1254 u16 *bus_num = data;
1255
1256 m = container_of(dev, struct spi_master, dev);
1257 return m->bus_num == *bus_num;
1258}
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270struct spi_master *spi_busnum_to_master(u16 bus_num)
1271{
1272 struct device *dev;
1273 struct spi_master *master = NULL;
1274
1275 dev = class_find_device(&spi_master_class, NULL, &bus_num,
1276 __spi_master_match);
1277 if (dev)
1278 master = container_of(dev, struct spi_master, dev);
1279
1280 return master;
1281}
1282EXPORT_SYMBOL_GPL(spi_busnum_to_master);
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309int spi_setup(struct spi_device *spi)
1310{
1311 unsigned bad_bits;
1312 int status = 0;
1313
1314
1315
1316
1317 bad_bits = spi->mode & ~spi->master->mode_bits;
1318 if (bad_bits) {
1319 dev_err(&spi->dev, "setup: unsupported mode bits %x\n",
1320 bad_bits);
1321 return -EINVAL;
1322 }
1323
1324 if (!spi->bits_per_word)
1325 spi->bits_per_word = 8;
1326
1327 if (spi->master->setup)
1328 status = spi->master->setup(spi);
1329
1330 dev_dbg(&spi->dev, "setup mode %d, %s%s%s%s"
1331 "%u bits/w, %u Hz max --> %d\n",
1332 (int) (spi->mode & (SPI_CPOL | SPI_CPHA)),
1333 (spi->mode & SPI_CS_HIGH) ? "cs_high, " : "",
1334 (spi->mode & SPI_LSB_FIRST) ? "lsb, " : "",
1335 (spi->mode & SPI_3WIRE) ? "3wire, " : "",
1336 (spi->mode & SPI_LOOP) ? "loopback, " : "",
1337 spi->bits_per_word, spi->max_speed_hz,
1338 status);
1339
1340 return status;
1341}
1342EXPORT_SYMBOL_GPL(spi_setup);
1343
1344static int __spi_async(struct spi_device *spi, struct spi_message *message)
1345{
1346 struct spi_master *master = spi->master;
1347 struct spi_transfer *xfer;
1348
1349
1350
1351
1352
1353
1354 if ((master->flags & SPI_MASTER_HALF_DUPLEX)
1355 || (spi->mode & SPI_3WIRE)) {
1356 unsigned flags = master->flags;
1357
1358 list_for_each_entry(xfer, &message->transfers, transfer_list) {
1359 if (xfer->rx_buf && xfer->tx_buf)
1360 return -EINVAL;
1361 if ((flags & SPI_MASTER_NO_TX) && xfer->tx_buf)
1362 return -EINVAL;
1363 if ((flags & SPI_MASTER_NO_RX) && xfer->rx_buf)
1364 return -EINVAL;
1365 }
1366 }
1367
1368
1369
1370
1371
1372 list_for_each_entry(xfer, &message->transfers, transfer_list) {
1373 if (!xfer->bits_per_word)
1374 xfer->bits_per_word = spi->bits_per_word;
1375 }
1376
1377 message->spi = spi;
1378 message->status = -EINPROGRESS;
1379 return master->transfer(spi, message);
1380}
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411int spi_async(struct spi_device *spi, struct spi_message *message)
1412{
1413 struct spi_master *master = spi->master;
1414 int ret;
1415 unsigned long flags;
1416
1417 spin_lock_irqsave(&master->bus_lock_spinlock, flags);
1418
1419 if (master->bus_lock_flag)
1420 ret = -EBUSY;
1421 else
1422 ret = __spi_async(spi, message);
1423
1424 spin_unlock_irqrestore(&master->bus_lock_spinlock, flags);
1425
1426 return ret;
1427}
1428EXPORT_SYMBOL_GPL(spi_async);
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459int spi_async_locked(struct spi_device *spi, struct spi_message *message)
1460{
1461 struct spi_master *master = spi->master;
1462 int ret;
1463 unsigned long flags;
1464
1465 spin_lock_irqsave(&master->bus_lock_spinlock, flags);
1466
1467 ret = __spi_async(spi, message);
1468
1469 spin_unlock_irqrestore(&master->bus_lock_spinlock, flags);
1470
1471 return ret;
1472
1473}
1474EXPORT_SYMBOL_GPL(spi_async_locked);
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484static void spi_complete(void *arg)
1485{
1486 complete(arg);
1487}
1488
1489static int __spi_sync(struct spi_device *spi, struct spi_message *message,
1490 int bus_locked)
1491{
1492 DECLARE_COMPLETION_ONSTACK(done);
1493 int status;
1494 struct spi_master *master = spi->master;
1495
1496 message->complete = spi_complete;
1497 message->context = &done;
1498
1499 if (!bus_locked)
1500 mutex_lock(&master->bus_lock_mutex);
1501
1502 status = spi_async_locked(spi, message);
1503
1504 if (!bus_locked)
1505 mutex_unlock(&master->bus_lock_mutex);
1506
1507 if (status == 0) {
1508 wait_for_completion(&done);
1509 status = message->status;
1510 }
1511 message->context = NULL;
1512 return status;
1513}
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536int spi_sync(struct spi_device *spi, struct spi_message *message)
1537{
1538 return __spi_sync(spi, message, 0);
1539}
1540EXPORT_SYMBOL_GPL(spi_sync);
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558int spi_sync_locked(struct spi_device *spi, struct spi_message *message)
1559{
1560 return __spi_sync(spi, message, 1);
1561}
1562EXPORT_SYMBOL_GPL(spi_sync_locked);
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579int spi_bus_lock(struct spi_master *master)
1580{
1581 unsigned long flags;
1582
1583 mutex_lock(&master->bus_lock_mutex);
1584
1585 spin_lock_irqsave(&master->bus_lock_spinlock, flags);
1586 master->bus_lock_flag = 1;
1587 spin_unlock_irqrestore(&master->bus_lock_spinlock, flags);
1588
1589
1590
1591 return 0;
1592}
1593EXPORT_SYMBOL_GPL(spi_bus_lock);
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608int spi_bus_unlock(struct spi_master *master)
1609{
1610 master->bus_lock_flag = 0;
1611
1612 mutex_unlock(&master->bus_lock_mutex);
1613
1614 return 0;
1615}
1616EXPORT_SYMBOL_GPL(spi_bus_unlock);
1617
1618
1619#define SPI_BUFSIZ max(32,SMP_CACHE_BYTES)
1620
1621static u8 *buf;
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642int spi_write_then_read(struct spi_device *spi,
1643 const void *txbuf, unsigned n_tx,
1644 void *rxbuf, unsigned n_rx)
1645{
1646 static DEFINE_MUTEX(lock);
1647
1648 int status;
1649 struct spi_message message;
1650 struct spi_transfer x[2];
1651 u8 *local_buf;
1652
1653
1654
1655
1656
1657
1658 if ((n_tx + n_rx) > SPI_BUFSIZ || !mutex_trylock(&lock)) {
1659 local_buf = kmalloc(max((unsigned)SPI_BUFSIZ, n_tx + n_rx), GFP_KERNEL);
1660 if (!local_buf)
1661 return -ENOMEM;
1662 } else {
1663 local_buf = buf;
1664 }
1665
1666 spi_message_init(&message);
1667 memset(x, 0, sizeof x);
1668 if (n_tx) {
1669 x[0].len = n_tx;
1670 spi_message_add_tail(&x[0], &message);
1671 }
1672 if (n_rx) {
1673 x[1].len = n_rx;
1674 spi_message_add_tail(&x[1], &message);
1675 }
1676
1677 memcpy(local_buf, txbuf, n_tx);
1678 x[0].tx_buf = local_buf;
1679 x[1].rx_buf = local_buf + n_tx;
1680
1681
1682 status = spi_sync(spi, &message);
1683 if (status == 0)
1684 memcpy(rxbuf, x[1].rx_buf, n_rx);
1685
1686 if (x[0].tx_buf == buf)
1687 mutex_unlock(&lock);
1688 else
1689 kfree(local_buf);
1690
1691 return status;
1692}
1693EXPORT_SYMBOL_GPL(spi_write_then_read);
1694
1695
1696
1697static int __init spi_init(void)
1698{
1699 int status;
1700
1701 buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);
1702 if (!buf) {
1703 status = -ENOMEM;
1704 goto err0;
1705 }
1706
1707 status = bus_register(&spi_bus_type);
1708 if (status < 0)
1709 goto err1;
1710
1711 status = class_register(&spi_master_class);
1712 if (status < 0)
1713 goto err2;
1714 return 0;
1715
1716err2:
1717 bus_unregister(&spi_bus_type);
1718err1:
1719 kfree(buf);
1720 buf = NULL;
1721err0:
1722 return status;
1723}
1724
1725
1726
1727
1728
1729
1730
1731
1732postcore_initcall(spi_init);
1733
1734