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