• Home
  • Raw
  • Download

Lines Matching refs:spi

48 	struct spi_device	*spi = to_spi_device(dev);  in spidev_release()  local
50 spi_controller_put(spi->controller); in spidev_release()
51 kfree(spi->driver_override); in spidev_release()
52 kfree(spi); in spidev_release()
58 const struct spi_device *spi = to_spi_device(dev); in modalias_show() local
65 return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias); in modalias_show()
73 struct spi_device *spi = to_spi_device(dev); in driver_override_store() local
87 old = spi->driver_override; in driver_override_store()
89 spi->driver_override = driver_override; in driver_override_store()
92 spi->driver_override = NULL; in driver_override_store()
104 const struct spi_device *spi = to_spi_device(dev); in driver_override_show() local
108 len = snprintf(buf, PAGE_SIZE, "%s\n", spi->driver_override ? : ""); in driver_override_show()
131 struct spi_device *spi = to_spi_device(dev); \
132 return spi_statistics_##field##_show(&spi->statistics, buf); \
340 const struct spi_device *spi = to_spi_device(dev); in spi_match_device() local
344 if (spi->driver_override) in spi_match_device()
345 return strcmp(spi->driver_override, drv->name) == 0; in spi_match_device()
356 return !!spi_match_id(sdrv->id_table, spi); in spi_match_device()
358 return strcmp(spi->modalias, drv->name) == 0; in spi_match_device()
363 const struct spi_device *spi = to_spi_device(dev); in spi_uevent() local
370 return add_uevent_var(env, "MODALIAS=%s%s", SPI_MODULE_PREFIX, spi->modalias); in spi_uevent()
376 struct spi_device *spi = to_spi_device(dev); in spi_probe() local
384 spi->irq = of_irq_get(dev->of_node, 0); in spi_probe()
385 if (spi->irq == -EPROBE_DEFER) in spi_probe()
387 if (spi->irq < 0) in spi_probe()
388 spi->irq = 0; in spi_probe()
396 ret = sdrv->probe(spi); in spi_probe()
541 struct spi_device *spi; in spi_alloc_device() local
546 spi = kzalloc(sizeof(*spi), GFP_KERNEL); in spi_alloc_device()
547 if (!spi) { in spi_alloc_device()
552 spi->master = spi->controller = ctlr; in spi_alloc_device()
553 spi->dev.parent = &ctlr->dev; in spi_alloc_device()
554 spi->dev.bus = &spi_bus_type; in spi_alloc_device()
555 spi->dev.release = spidev_release; in spi_alloc_device()
556 spi->cs_gpio = -ENOENT; in spi_alloc_device()
557 spi->mode = ctlr->buswidth_override_bits; in spi_alloc_device()
559 spin_lock_init(&spi->statistics.lock); in spi_alloc_device()
561 device_initialize(&spi->dev); in spi_alloc_device()
562 return spi; in spi_alloc_device()
566 static void spi_dev_set_name(struct spi_device *spi) in spi_dev_set_name() argument
568 struct acpi_device *adev = ACPI_COMPANION(&spi->dev); in spi_dev_set_name()
571 dev_set_name(&spi->dev, "spi-%s", acpi_dev_name(adev)); in spi_dev_set_name()
575 dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->controller->dev), in spi_dev_set_name()
576 spi->chip_select); in spi_dev_set_name()
581 struct spi_device *spi = to_spi_device(dev); in spi_dev_check() local
584 if (spi->controller == new_spi->controller && in spi_dev_check()
585 spi->chip_select == new_spi->chip_select) in spi_dev_check()
590 static void spi_cleanup(struct spi_device *spi) in spi_cleanup() argument
592 if (spi->controller->cleanup) in spi_cleanup()
593 spi->controller->cleanup(spi); in spi_cleanup()
596 static int __spi_add_device(struct spi_device *spi) in __spi_add_device() argument
598 struct spi_controller *ctlr = spi->controller; in __spi_add_device()
602 status = bus_for_each_dev(&spi_bus_type, NULL, spi, spi_dev_check); in __spi_add_device()
605 spi->chip_select); in __spi_add_device()
617 spi->cs_gpiod = ctlr->cs_gpiods[spi->chip_select]; in __spi_add_device()
619 spi->cs_gpio = ctlr->cs_gpios[spi->chip_select]; in __spi_add_device()
625 status = spi_setup(spi); in __spi_add_device()
628 dev_name(&spi->dev), status); in __spi_add_device()
633 status = device_add(&spi->dev); in __spi_add_device()
636 dev_name(&spi->dev), status); in __spi_add_device()
637 spi_cleanup(spi); in __spi_add_device()
639 dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev)); in __spi_add_device()
654 int spi_add_device(struct spi_device *spi) in spi_add_device() argument
656 struct spi_controller *ctlr = spi->controller; in spi_add_device()
661 if (spi->chip_select >= ctlr->num_chipselect) { in spi_add_device()
662 dev_err(dev, "cs%d >= max %d\n", spi->chip_select, in spi_add_device()
668 spi_dev_set_name(spi); in spi_add_device()
675 status = __spi_add_device(spi); in spi_add_device()
681 static int spi_add_device_locked(struct spi_device *spi) in spi_add_device_locked() argument
683 struct spi_controller *ctlr = spi->controller; in spi_add_device_locked()
687 if (spi->chip_select >= ctlr->num_chipselect) { in spi_add_device_locked()
688 dev_err(dev, "cs%d >= max %d\n", spi->chip_select, in spi_add_device_locked()
694 spi_dev_set_name(spi); in spi_add_device_locked()
697 return __spi_add_device(spi); in spi_add_device_locked()
771 void spi_unregister_device(struct spi_device *spi) in spi_unregister_device() argument
773 if (!spi) in spi_unregister_device()
776 if (spi->dev.of_node) { in spi_unregister_device()
777 of_node_clear_flag(spi->dev.of_node, OF_POPULATED); in spi_unregister_device()
778 of_node_put(spi->dev.of_node); in spi_unregister_device()
780 if (ACPI_COMPANION(&spi->dev)) in spi_unregister_device()
781 acpi_device_clear_enumerated(ACPI_COMPANION(&spi->dev)); in spi_unregister_device()
782 device_remove_software_node(&spi->dev); in spi_unregister_device()
783 device_del(&spi->dev); in spi_unregister_device()
784 spi_cleanup(spi); in spi_unregister_device()
785 put_device(&spi->dev); in spi_unregister_device()
854 static void spi_set_cs(struct spi_device *spi, bool enable, bool force) in spi_set_cs() argument
862 if (!force && (spi->controller->last_cs_enable == enable) && in spi_set_cs()
863 (spi->controller->last_cs_mode_high == (spi->mode & SPI_CS_HIGH))) in spi_set_cs()
866 trace_spi_set_cs(spi, activate); in spi_set_cs()
868 spi->controller->last_cs_enable = enable; in spi_set_cs()
869 spi->controller->last_cs_mode_high = spi->mode & SPI_CS_HIGH; in spi_set_cs()
871 if ((spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) || in spi_set_cs()
872 !spi->controller->set_cs_timing) && !activate) { in spi_set_cs()
873 spi_delay_exec(&spi->cs_hold, NULL); in spi_set_cs()
876 if (spi->mode & SPI_CS_HIGH) in spi_set_cs()
879 if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio)) { in spi_set_cs()
880 if (!(spi->mode & SPI_NO_CS)) { in spi_set_cs()
881 if (spi->cs_gpiod) { in spi_set_cs()
892 if (has_acpi_companion(&spi->dev)) in spi_set_cs()
893 gpiod_set_value_cansleep(spi->cs_gpiod, !enable); in spi_set_cs()
896 gpiod_set_value_cansleep(spi->cs_gpiod, activate); in spi_set_cs()
902 gpio_set_value_cansleep(spi->cs_gpio, !enable); in spi_set_cs()
906 if ((spi->controller->flags & SPI_MASTER_GPIO_SS) && in spi_set_cs()
907 spi->controller->set_cs) in spi_set_cs()
908 spi->controller->set_cs(spi, !enable); in spi_set_cs()
909 } else if (spi->controller->set_cs) { in spi_set_cs()
910 spi->controller->set_cs(spi, !enable); in spi_set_cs()
913 if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) || in spi_set_cs()
914 !spi->controller->set_cs_timing) { in spi_set_cs()
916 spi_delay_exec(&spi->cs_setup, NULL); in spi_set_cs()
918 spi_delay_exec(&spi->cs_inactive, NULL); in spi_set_cs()
1039 if (!ctlr->can_dma(ctlr, msg->spi, xfer)) in __spi_map_msg()
1090 if (!ctlr->can_dma(ctlr, msg->spi, xfer)) in __spi_unmap_msg()
1141 && !(msg->spi->mode & SPI_3WIRE)) { in spi_map_msg()
1192 struct spi_statistics *stats = &msg->spi->statistics; in spi_transfer_wait()
1198 dev_dbg(&msg->spi->dev, "SPI transfer interrupted\n"); in spi_transfer_wait()
1228 dev_err(&msg->spi->dev, in spi_transfer_wait()
1328 dev_err_once(&msg->spi->dev, in _spi_transfer_cs_change_delay()
1349 struct spi_statistics *stats = &msg->spi->statistics; in spi_transfer_one_message()
1351 spi_set_cs(msg->spi, true, false); in spi_transfer_one_message()
1371 ret = ctlr->transfer_one(ctlr, msg->spi, xfer); in spi_transfer_one_message()
1385 dev_err(&msg->spi->dev, in spi_transfer_one_message()
1397 dev_err(&msg->spi->dev, in spi_transfer_one_message()
1419 spi_set_cs(msg->spi, false, false); in spi_transfer_one_message()
1421 spi_set_cs(msg->spi, true, false); in spi_transfer_one_message()
1430 spi_set_cs(msg->spi, false, false); in spi_transfer_one_message()
1940 static int __spi_queued_transfer(struct spi_device *spi, in __spi_queued_transfer() argument
1944 struct spi_controller *ctlr = spi->controller; in __spi_queued_transfer()
1971 static int spi_queued_transfer(struct spi_device *spi, struct spi_message *msg) in spi_queued_transfer() argument
1973 return __spi_queued_transfer(spi, msg, true); in spi_queued_transfer()
2024 static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device *spi, in of_spi_parse_dt() argument
2032 spi->mode |= SPI_CPHA; in of_spi_parse_dt()
2034 spi->mode |= SPI_CPOL; in of_spi_parse_dt()
2036 spi->mode |= SPI_3WIRE; in of_spi_parse_dt()
2038 spi->mode |= SPI_LSB_FIRST; in of_spi_parse_dt()
2040 spi->mode |= SPI_CS_HIGH; in of_spi_parse_dt()
2046 spi->mode |= SPI_NO_TX; in of_spi_parse_dt()
2051 spi->mode |= SPI_TX_DUAL; in of_spi_parse_dt()
2054 spi->mode |= SPI_TX_QUAD; in of_spi_parse_dt()
2057 spi->mode |= SPI_TX_OCTAL; in of_spi_parse_dt()
2070 spi->mode |= SPI_NO_RX; in of_spi_parse_dt()
2075 spi->mode |= SPI_RX_DUAL; in of_spi_parse_dt()
2078 spi->mode |= SPI_RX_QUAD; in of_spi_parse_dt()
2081 spi->mode |= SPI_RX_OCTAL; in of_spi_parse_dt()
2107 spi->chip_select = value; in of_spi_parse_dt()
2111 spi->max_speed_hz = value; in of_spi_parse_dt()
2119 struct spi_device *spi; in of_register_spi_device() local
2123 spi = spi_alloc_device(ctlr); in of_register_spi_device()
2124 if (!spi) { in of_register_spi_device()
2131 rc = of_modalias_node(nc, spi->modalias, in of_register_spi_device()
2132 sizeof(spi->modalias)); in of_register_spi_device()
2138 rc = of_spi_parse_dt(ctlr, spi, nc); in of_register_spi_device()
2144 spi->dev.of_node = nc; in of_register_spi_device()
2145 spi->dev.fwnode = of_fwnode_handle(nc); in of_register_spi_device()
2148 rc = spi_add_device(spi); in of_register_spi_device()
2154 return spi; in of_register_spi_device()
2159 spi_dev_put(spi); in of_register_spi_device()
2172 struct spi_device *spi; in of_register_spi_devices() local
2181 spi = of_register_spi_device(ctlr, nc); in of_register_spi_devices()
2182 if (IS_ERR(spi)) { in of_register_spi_devices()
2205 struct spi_device *spi_new_ancillary_device(struct spi_device *spi, in spi_new_ancillary_device() argument
2212 ancillary = spi_alloc_device(spi->controller); in spi_new_ancillary_device()
2224 ancillary->max_speed_hz = spi->max_speed_hz; in spi_new_ancillary_device()
2225 ancillary->mode = spi->mode; in spi_new_ancillary_device()
2230 dev_err(&spi->dev, "failed to register ancillary device\n"); in spi_new_ancillary_device()
2346 struct spi_device *spi; in acpi_register_spi_device() local
2375 spi = spi_alloc_device(ctlr); in acpi_register_spi_device()
2376 if (!spi) { in acpi_register_spi_device()
2383 ACPI_COMPANION_SET(&spi->dev, adev); in acpi_register_spi_device()
2384 spi->max_speed_hz = lookup.max_speed_hz; in acpi_register_spi_device()
2385 spi->mode |= lookup.mode; in acpi_register_spi_device()
2386 spi->irq = lookup.irq; in acpi_register_spi_device()
2387 spi->bits_per_word = lookup.bits_per_word; in acpi_register_spi_device()
2388 spi->chip_select = lookup.chip_select; in acpi_register_spi_device()
2390 acpi_set_modalias(adev, acpi_device_hid(adev), spi->modalias, in acpi_register_spi_device()
2391 sizeof(spi->modalias)); in acpi_register_spi_device()
2393 if (spi->irq < 0) in acpi_register_spi_device()
2394 spi->irq = acpi_dev_gpio_irq_get(adev, 0); in acpi_register_spi_device()
2399 if (spi_add_device(spi)) { in acpi_register_spi_device()
2403 spi_dev_put(spi); in acpi_register_spi_device()
2463 int spi_slave_abort(struct spi_device *spi) in spi_slave_abort() argument
2465 struct spi_controller *ctlr = spi->controller; in spi_slave_abort()
2496 struct spi_device *spi; in slave_store() local
2514 spi = spi_alloc_device(ctlr); in slave_store()
2515 if (!spi) in slave_store()
2518 strlcpy(spi->modalias, name, sizeof(spi->modalias)); in slave_store()
2520 rc = spi_add_device(spi); in slave_store()
2522 spi_dev_put(spi); in slave_store()
3138 void *spi_res_alloc(struct spi_device *spi, in spi_res_alloc() argument
3258 rxfer = spi_res_alloc(msg->spi, __spi_replace_transfers_release, in spi_replace_transfers()
3288 dev_err(&msg->spi->dev, in spi_replace_transfers()
3397 SPI_STATISTICS_INCREMENT_FIELD(&msg->spi->statistics, in __spi_split_transfer_maxsize()
3481 int spi_setup(struct spi_device *spi) in spi_setup() argument
3490 if ((hweight_long(spi->mode & in spi_setup()
3492 (hweight_long(spi->mode & in spi_setup()
3494 dev_err(&spi->dev, in spi_setup()
3500 if ((spi->mode & SPI_3WIRE) && (spi->mode & in spi_setup()
3509 bad_bits = spi->mode & ~(spi->controller->mode_bits | SPI_CS_WORD | in spi_setup()
3514 if (gpio_is_valid(spi->cs_gpio)) in spi_setup()
3520 dev_warn(&spi->dev, in spi_setup()
3523 spi->mode &= ~ugly_bits; in spi_setup()
3527 dev_err(&spi->dev, "setup: unsupported mode bits %x\n", in spi_setup()
3532 if (!spi->bits_per_word) in spi_setup()
3533 spi->bits_per_word = 8; in spi_setup()
3535 status = __spi_validate_bits_per_word(spi->controller, in spi_setup()
3536 spi->bits_per_word); in spi_setup()
3540 if (spi->controller->max_speed_hz && in spi_setup()
3541 (!spi->max_speed_hz || in spi_setup()
3542 spi->max_speed_hz > spi->controller->max_speed_hz)) in spi_setup()
3543 spi->max_speed_hz = spi->controller->max_speed_hz; in spi_setup()
3545 mutex_lock(&spi->controller->io_mutex); in spi_setup()
3547 if (spi->controller->setup) { in spi_setup()
3548 status = spi->controller->setup(spi); in spi_setup()
3550 mutex_unlock(&spi->controller->io_mutex); in spi_setup()
3551 dev_err(&spi->controller->dev, "Failed to setup device: %d\n", in spi_setup()
3557 if (spi->controller->auto_runtime_pm && spi->controller->set_cs) { in spi_setup()
3558 status = pm_runtime_get_sync(spi->controller->dev.parent); in spi_setup()
3560 mutex_unlock(&spi->controller->io_mutex); in spi_setup()
3561 pm_runtime_put_noidle(spi->controller->dev.parent); in spi_setup()
3562 dev_err(&spi->controller->dev, "Failed to power device: %d\n", in spi_setup()
3575 spi_set_cs(spi, false, true); in spi_setup()
3576 pm_runtime_mark_last_busy(spi->controller->dev.parent); in spi_setup()
3577 pm_runtime_put_autosuspend(spi->controller->dev.parent); in spi_setup()
3579 spi_set_cs(spi, false, true); in spi_setup()
3582 mutex_unlock(&spi->controller->io_mutex); in spi_setup()
3584 if (spi->rt && !spi->controller->rt) { in spi_setup()
3585 spi->controller->rt = true; in spi_setup()
3586 spi_set_thread_rt(spi->controller); in spi_setup()
3589 trace_spi_setup(spi, status); in spi_setup()
3591 dev_dbg(&spi->dev, "setup mode %lu, %s%s%s%s%u bits/w, %u Hz max --> %d\n", in spi_setup()
3592 spi->mode & SPI_MODE_X_MASK, in spi_setup()
3593 (spi->mode & SPI_CS_HIGH) ? "cs_high, " : "", in spi_setup()
3594 (spi->mode & SPI_LSB_FIRST) ? "lsb, " : "", in spi_setup()
3595 (spi->mode & SPI_3WIRE) ? "3wire, " : "", in spi_setup()
3596 (spi->mode & SPI_LOOP) ? "loopback, " : "", in spi_setup()
3597 spi->bits_per_word, spi->max_speed_hz, in spi_setup()
3605 struct spi_device *spi) in _spi_xfer_word_delay_update() argument
3613 delay2 = spi_delay_to_ns(&spi->word_delay, xfer); in _spi_xfer_word_delay_update()
3618 memcpy(&xfer->word_delay, &spi->word_delay, in _spi_xfer_word_delay_update()
3624 static int __spi_validate(struct spi_device *spi, struct spi_message *message) in __spi_validate() argument
3626 struct spi_controller *ctlr = spi->controller; in __spi_validate()
3639 if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) || in __spi_validate()
3640 spi->cs_gpiod || in __spi_validate()
3641 gpio_is_valid(spi->cs_gpio))) { in __spi_validate()
3645 maxsize = (spi->bits_per_word + 7) / 8; in __spi_validate()
3648 message->spi = spi; in __spi_validate()
3669 (spi->mode & SPI_3WIRE)) { in __spi_validate()
3695 xfer->bits_per_word = spi->bits_per_word; in __spi_validate()
3698 xfer->speed_hz = spi->max_speed_hz; in __spi_validate()
3734 if (spi->mode & SPI_NO_TX) in __spi_validate()
3741 !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD))) in __spi_validate()
3744 !(spi->mode & SPI_TX_QUAD)) in __spi_validate()
3749 if (spi->mode & SPI_NO_RX) in __spi_validate()
3756 !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD))) in __spi_validate()
3759 !(spi->mode & SPI_RX_QUAD)) in __spi_validate()
3763 if (_spi_xfer_word_delay_update(xfer, spi)) in __spi_validate()
3772 static int __spi_async(struct spi_device *spi, struct spi_message *message) in __spi_async() argument
3774 struct spi_controller *ctlr = spi->controller; in __spi_async()
3784 message->spi = spi; in __spi_async()
3787 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_async); in __spi_async()
3798 return ctlr->transfer(spi, message); in __spi_async()
3832 int spi_async(struct spi_device *spi, struct spi_message *message) in spi_async() argument
3834 struct spi_controller *ctlr = spi->controller; in spi_async()
3838 ret = __spi_validate(spi, message); in spi_async()
3847 ret = __spi_async(spi, message); in spi_async()
3886 int spi_async_locked(struct spi_device *spi, struct spi_message *message) in spi_async_locked() argument
3888 struct spi_controller *ctlr = spi->controller; in spi_async_locked()
3892 ret = __spi_validate(spi, message); in spi_async_locked()
3898 ret = __spi_async(spi, message); in spi_async_locked()
3919 static int __spi_sync(struct spi_device *spi, struct spi_message *message) in __spi_sync() argument
3923 struct spi_controller *ctlr = spi->controller; in __spi_sync()
3926 status = __spi_validate(spi, message); in __spi_sync()
3932 message->spi = spi; in __spi_sync()
3935 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_sync); in __spi_sync()
3947 status = __spi_queued_transfer(spi, message, false); in __spi_sync()
3951 status = spi_async_locked(spi, message); in __spi_sync()
3961 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, in __spi_sync()
3994 int spi_sync(struct spi_device *spi, struct spi_message *message) in spi_sync() argument
3998 mutex_lock(&spi->controller->bus_lock_mutex); in spi_sync()
3999 ret = __spi_sync(spi, message); in spi_sync()
4000 mutex_unlock(&spi->controller->bus_lock_mutex); in spi_sync()
4022 int spi_sync_locked(struct spi_device *spi, struct spi_message *message) in spi_sync_locked() argument
4024 return __spi_sync(spi, message); in spi_sync_locked()
4107 int spi_write_then_read(struct spi_device *spi, in spi_write_then_read() argument
4148 status = spi_sync(spi, &message); in spi_write_then_read()
4195 struct spi_device *spi; in of_spi_notify() local
4208 spi = of_register_spi_device(ctlr, rd->dn); in of_spi_notify()
4211 if (IS_ERR(spi)) { in of_spi_notify()
4215 return notifier_from_errno(PTR_ERR(spi)); in of_spi_notify()
4225 spi = of_find_spi_device_by_node(rd->dn); in of_spi_notify()
4226 if (spi == NULL) in of_spi_notify()
4230 spi_unregister_device(spi); in of_spi_notify()
4233 put_device(&spi->dev); in of_spi_notify()
4281 struct spi_device *spi; in acpi_spi_notify() local
4296 spi = acpi_spi_find_device_by_adev(adev); in acpi_spi_notify()
4297 if (!spi) in acpi_spi_notify()
4300 spi_unregister_device(spi); in acpi_spi_notify()
4301 put_device(&spi->dev); in acpi_spi_notify()