Lines Matching refs:master
47 if (spi->master->cleanup) in spidev_release()
48 spi->master->cleanup(spi); in spidev_release()
50 spi_master_put(spi->master); in spidev_release()
318 struct spi_device *spi_alloc_device(struct spi_master *master) in spi_alloc_device() argument
321 struct device *dev = master->dev.parent; in spi_alloc_device()
323 if (!spi_master_get(master)) in spi_alloc_device()
329 spi_master_put(master); in spi_alloc_device()
333 spi->master = master; in spi_alloc_device()
334 spi->dev.parent = &master->dev; in spi_alloc_device()
355 struct spi_master *master = spi->master; in spi_add_device() local
356 struct device *dev = master->dev.parent; in spi_add_device()
361 if (spi->chip_select >= master->num_chipselect) { in spi_add_device()
364 master->num_chipselect); in spi_add_device()
369 dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->master->dev), in spi_add_device()
388 if (master->cs_gpios) in spi_add_device()
389 spi->cs_gpio = master->cs_gpios[spi->chip_select]; in spi_add_device()
430 struct spi_device *spi_new_device(struct spi_master *master, in spi_new_device() argument
443 proxy = spi_alloc_device(master); in spi_new_device()
468 static void spi_match_master_to_boardinfo(struct spi_master *master, in spi_match_master_to_boardinfo() argument
473 if (master->bus_num != bi->bus_num) in spi_match_master_to_boardinfo()
476 dev = spi_new_device(master, bi); in spi_match_master_to_boardinfo()
478 dev_err(master->dev.parent, "can't create new device for %s\n", in spi_match_master_to_boardinfo()
511 struct spi_master *master; in spi_register_board_info() local
516 list_for_each_entry(master, &spi_master_list, list) in spi_register_board_info()
517 spi_match_master_to_boardinfo(master, &bi->board_info); in spi_register_board_info()
537 struct spi_master *master = in spi_pump_messages() local
544 spin_lock_irqsave(&master->queue_lock, flags); in spi_pump_messages()
545 if (list_empty(&master->queue) || !master->running) { in spi_pump_messages()
546 if (!master->busy) { in spi_pump_messages()
547 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_pump_messages()
550 master->busy = false; in spi_pump_messages()
551 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_pump_messages()
552 if (master->unprepare_transfer_hardware && in spi_pump_messages()
553 master->unprepare_transfer_hardware(master)) in spi_pump_messages()
554 dev_err(&master->dev, in spi_pump_messages()
560 if (master->cur_msg) { in spi_pump_messages()
561 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_pump_messages()
565 master->cur_msg = in spi_pump_messages()
566 list_entry(master->queue.next, struct spi_message, queue); in spi_pump_messages()
568 list_del_init(&master->cur_msg->queue); in spi_pump_messages()
569 if (master->busy) in spi_pump_messages()
572 master->busy = true; in spi_pump_messages()
573 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_pump_messages()
575 if (!was_busy && master->prepare_transfer_hardware) { in spi_pump_messages()
576 ret = master->prepare_transfer_hardware(master); in spi_pump_messages()
578 dev_err(&master->dev, in spi_pump_messages()
584 ret = master->transfer_one_message(master, master->cur_msg); in spi_pump_messages()
586 dev_err(&master->dev, in spi_pump_messages()
592 static int spi_init_queue(struct spi_master *master) in spi_init_queue() argument
596 INIT_LIST_HEAD(&master->queue); in spi_init_queue()
597 spin_lock_init(&master->queue_lock); in spi_init_queue()
599 master->running = false; in spi_init_queue()
600 master->busy = false; in spi_init_queue()
602 init_kthread_worker(&master->kworker); in spi_init_queue()
603 master->kworker_task = kthread_run(kthread_worker_fn, in spi_init_queue()
604 &master->kworker, in spi_init_queue()
605 dev_name(&master->dev)); in spi_init_queue()
606 if (IS_ERR(master->kworker_task)) { in spi_init_queue()
607 dev_err(&master->dev, "failed to create message pump task\n"); in spi_init_queue()
610 init_kthread_work(&master->pump_messages, spi_pump_messages); in spi_init_queue()
619 if (master->rt) { in spi_init_queue()
620 dev_info(&master->dev, in spi_init_queue()
622 sched_setscheduler(master->kworker_task, SCHED_FIFO, ¶m); in spi_init_queue()
636 struct spi_message *spi_get_next_queued_message(struct spi_master *master) in spi_get_next_queued_message() argument
642 spin_lock_irqsave(&master->queue_lock, flags); in spi_get_next_queued_message()
643 if (list_empty(&master->queue)) in spi_get_next_queued_message()
646 next = list_entry(master->queue.next, in spi_get_next_queued_message()
648 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_get_next_queued_message()
661 void spi_finalize_current_message(struct spi_master *master) in spi_finalize_current_message() argument
666 spin_lock_irqsave(&master->queue_lock, flags); in spi_finalize_current_message()
667 mesg = master->cur_msg; in spi_finalize_current_message()
668 master->cur_msg = NULL; in spi_finalize_current_message()
670 queue_kthread_work(&master->kworker, &master->pump_messages); in spi_finalize_current_message()
671 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_finalize_current_message()
679 static int spi_start_queue(struct spi_master *master) in spi_start_queue() argument
683 spin_lock_irqsave(&master->queue_lock, flags); in spi_start_queue()
685 if (master->running || master->busy) { in spi_start_queue()
686 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_start_queue()
690 master->running = true; in spi_start_queue()
691 master->cur_msg = NULL; in spi_start_queue()
692 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_start_queue()
694 queue_kthread_work(&master->kworker, &master->pump_messages); in spi_start_queue()
699 static int spi_stop_queue(struct spi_master *master) in spi_stop_queue() argument
705 spin_lock_irqsave(&master->queue_lock, flags); in spi_stop_queue()
713 while ((!list_empty(&master->queue) || master->busy) && limit--) { in spi_stop_queue()
714 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_stop_queue()
716 spin_lock_irqsave(&master->queue_lock, flags); in spi_stop_queue()
719 if (!list_empty(&master->queue) || master->busy) in spi_stop_queue()
722 master->running = false; in spi_stop_queue()
724 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_stop_queue()
727 dev_warn(&master->dev, in spi_stop_queue()
734 static int spi_destroy_queue(struct spi_master *master) in spi_destroy_queue() argument
738 ret = spi_stop_queue(master); in spi_destroy_queue()
747 dev_err(&master->dev, "problem destroying queue\n"); in spi_destroy_queue()
751 flush_kthread_worker(&master->kworker); in spi_destroy_queue()
752 kthread_stop(master->kworker_task); in spi_destroy_queue()
764 struct spi_master *master = spi->master; in spi_queued_transfer() local
767 spin_lock_irqsave(&master->queue_lock, flags); in spi_queued_transfer()
769 if (!master->running) { in spi_queued_transfer()
770 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_queued_transfer()
776 list_add_tail(&msg->queue, &master->queue); in spi_queued_transfer()
777 if (master->running && !master->busy) in spi_queued_transfer()
778 queue_kthread_work(&master->kworker, &master->pump_messages); in spi_queued_transfer()
780 spin_unlock_irqrestore(&master->queue_lock, flags); in spi_queued_transfer()
784 static int spi_master_initialize_queue(struct spi_master *master) in spi_master_initialize_queue() argument
788 master->queued = true; in spi_master_initialize_queue()
789 master->transfer = spi_queued_transfer; in spi_master_initialize_queue()
792 ret = spi_init_queue(master); in spi_master_initialize_queue()
794 dev_err(&master->dev, "problem initializing queue\n"); in spi_master_initialize_queue()
797 ret = spi_start_queue(master); in spi_master_initialize_queue()
799 dev_err(&master->dev, "problem starting queue\n"); in spi_master_initialize_queue()
807 spi_destroy_queue(master); in spi_master_initialize_queue()
821 static void of_register_spi_devices(struct spi_master *master) in of_register_spi_devices() argument
830 if (!master->dev.of_node) in of_register_spi_devices()
833 for_each_available_child_of_node(master->dev.of_node, nc) { in of_register_spi_devices()
835 spi = spi_alloc_device(master); in of_register_spi_devices()
837 dev_err(&master->dev, "spi_device alloc error for %s\n", in of_register_spi_devices()
846 dev_err(&master->dev, "cannot find modalias for %s\n", in of_register_spi_devices()
855 dev_err(&master->dev, "%s has no 'reg' property\n", in of_register_spi_devices()
875 dev_err(&master->dev, "%s has no 'spi-max-frequency' property\n", in of_register_spi_devices()
895 dev_err(&master->dev, "spi_device register error %s\n", in of_register_spi_devices()
903 static void of_register_spi_devices(struct spi_master *master) { } in of_register_spi_devices() argument
940 struct spi_master *master = data; in acpi_spi_add_device() local
951 spi = spi_alloc_device(master); in acpi_spi_add_device()
953 dev_err(&master->dev, "failed to allocate SPI device for %s\n", in acpi_spi_add_device()
973 dev_err(&master->dev, "failed to add SPI device %s from ACPI\n", in acpi_spi_add_device()
981 static void acpi_register_spi_devices(struct spi_master *master) in acpi_register_spi_devices() argument
986 handle = ACPI_HANDLE(master->dev.parent); in acpi_register_spi_devices()
992 master, NULL); in acpi_register_spi_devices()
994 dev_warn(&master->dev, "failed to enumerate SPI slaves\n"); in acpi_register_spi_devices()
997 static inline void acpi_register_spi_devices(struct spi_master *master) {} in acpi_register_spi_devices() argument
1002 struct spi_master *master; in spi_master_release() local
1004 master = container_of(dev, struct spi_master, dev); in spi_master_release()
1005 kfree(master); in spi_master_release()
1038 struct spi_master *master; in spi_alloc_master() local
1043 master = kzalloc(size + sizeof *master, GFP_KERNEL); in spi_alloc_master()
1044 if (!master) in spi_alloc_master()
1047 device_initialize(&master->dev); in spi_alloc_master()
1048 master->bus_num = -1; in spi_alloc_master()
1049 master->num_chipselect = 1; in spi_alloc_master()
1050 master->dev.class = &spi_master_class; in spi_alloc_master()
1051 master->dev.parent = get_device(dev); in spi_alloc_master()
1052 spi_master_set_devdata(master, &master[1]); in spi_alloc_master()
1054 return master; in spi_alloc_master()
1059 static int of_spi_register_master(struct spi_master *master) in of_spi_register_master() argument
1062 struct device_node *np = master->dev.of_node; in of_spi_register_master()
1068 master->num_chipselect = max(nb, (int)master->num_chipselect); in of_spi_register_master()
1076 cs = devm_kzalloc(&master->dev, in of_spi_register_master()
1077 sizeof(int) * master->num_chipselect, in of_spi_register_master()
1079 master->cs_gpios = cs; in of_spi_register_master()
1081 if (!master->cs_gpios) in of_spi_register_master()
1084 for (i = 0; i < master->num_chipselect; i++) in of_spi_register_master()
1093 static int of_spi_register_master(struct spi_master *master) in of_spi_register_master() argument
1119 int spi_register_master(struct spi_master *master) in spi_register_master() argument
1122 struct device *dev = master->dev.parent; in spi_register_master()
1130 status = of_spi_register_master(master); in spi_register_master()
1137 if (master->num_chipselect == 0) in spi_register_master()
1140 if ((master->bus_num < 0) && master->dev.of_node) in spi_register_master()
1141 master->bus_num = of_alias_get_id(master->dev.of_node, "spi"); in spi_register_master()
1144 if (master->bus_num < 0) { in spi_register_master()
1148 master->bus_num = atomic_dec_return(&dyn_bus_id); in spi_register_master()
1152 spin_lock_init(&master->bus_lock_spinlock); in spi_register_master()
1153 mutex_init(&master->bus_lock_mutex); in spi_register_master()
1154 master->bus_lock_flag = 0; in spi_register_master()
1159 dev_set_name(&master->dev, "spi%u", master->bus_num); in spi_register_master()
1160 status = device_add(&master->dev); in spi_register_master()
1163 dev_dbg(dev, "registered master %s%s\n", dev_name(&master->dev), in spi_register_master()
1167 if (master->transfer) in spi_register_master()
1170 status = spi_master_initialize_queue(master); in spi_register_master()
1172 device_unregister(&master->dev); in spi_register_master()
1178 list_add_tail(&master->list, &spi_master_list); in spi_register_master()
1180 spi_match_master_to_boardinfo(master, &bi->board_info); in spi_register_master()
1184 of_register_spi_devices(master); in spi_register_master()
1185 acpi_register_spi_devices(master); in spi_register_master()
1207 void spi_unregister_master(struct spi_master *master) in spi_unregister_master() argument
1211 if (master->queued) { in spi_unregister_master()
1212 if (spi_destroy_queue(master)) in spi_unregister_master()
1213 dev_err(&master->dev, "queue remove failed\n"); in spi_unregister_master()
1217 list_del(&master->list); in spi_unregister_master()
1220 dummy = device_for_each_child(&master->dev, NULL, __unregister); in spi_unregister_master()
1221 device_unregister(&master->dev); in spi_unregister_master()
1225 int spi_master_suspend(struct spi_master *master) in spi_master_suspend() argument
1230 if (!master->queued) in spi_master_suspend()
1233 ret = spi_stop_queue(master); in spi_master_suspend()
1235 dev_err(&master->dev, "queue stop failed\n"); in spi_master_suspend()
1241 int spi_master_resume(struct spi_master *master) in spi_master_resume() argument
1245 if (!master->queued) in spi_master_resume()
1248 ret = spi_start_queue(master); in spi_master_resume()
1250 dev_err(&master->dev, "queue restart failed\n"); in spi_master_resume()
1278 struct spi_master *master = NULL; in spi_busnum_to_master() local
1283 master = container_of(dev, struct spi_master, dev); in spi_busnum_to_master()
1285 return master; in spi_busnum_to_master()
1322 bad_bits = spi->mode & ~spi->master->mode_bits; in spi_setup()
1332 if (spi->master->setup) in spi_setup()
1333 status = spi->master->setup(spi); in spi_setup()
1351 struct spi_master *master = spi->master; in __spi_async() local
1359 if ((master->flags & SPI_MASTER_HALF_DUPLEX) in __spi_async()
1361 unsigned flags = master->flags; in __spi_async()
1382 if (master->bits_per_word_mask) { in __spi_async()
1386 if (!(master->bits_per_word_mask & in __spi_async()
1394 return master->transfer(spi, message); in __spi_async()
1428 struct spi_master *master = spi->master; in spi_async() local
1432 spin_lock_irqsave(&master->bus_lock_spinlock, flags); in spi_async()
1434 if (master->bus_lock_flag) in spi_async()
1439 spin_unlock_irqrestore(&master->bus_lock_spinlock, flags); in spi_async()
1476 struct spi_master *master = spi->master; in spi_async_locked() local
1480 spin_lock_irqsave(&master->bus_lock_spinlock, flags); in spi_async_locked()
1484 spin_unlock_irqrestore(&master->bus_lock_spinlock, flags); in spi_async_locked()
1509 struct spi_master *master = spi->master; in __spi_sync() local
1515 mutex_lock(&master->bus_lock_mutex); in __spi_sync()
1520 mutex_unlock(&master->bus_lock_mutex); in __spi_sync()
1594 int spi_bus_lock(struct spi_master *master) in spi_bus_lock() argument
1598 mutex_lock(&master->bus_lock_mutex); in spi_bus_lock()
1600 spin_lock_irqsave(&master->bus_lock_spinlock, flags); in spi_bus_lock()
1601 master->bus_lock_flag = 1; in spi_bus_lock()
1602 spin_unlock_irqrestore(&master->bus_lock_spinlock, flags); in spi_bus_lock()
1623 int spi_bus_unlock(struct spi_master *master) in spi_bus_unlock() argument
1625 master->bus_lock_flag = 0; in spi_bus_unlock()
1627 mutex_unlock(&master->bus_lock_mutex); in spi_bus_unlock()