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); \
339 const struct spi_device *spi = to_spi_device(dev); in spi_match_device() local
343 if (spi->driver_override) in spi_match_device()
344 return strcmp(spi->driver_override, drv->name) == 0; in spi_match_device()
355 return !!spi_match_id(sdrv->id_table, spi); in spi_match_device()
357 return strcmp(spi->modalias, drv->name) == 0; in spi_match_device()
362 const struct spi_device *spi = to_spi_device(dev); in spi_uevent() local
369 return add_uevent_var(env, "MODALIAS=%s%s", SPI_MODULE_PREFIX, spi->modalias); in spi_uevent()
375 struct spi_device *spi = to_spi_device(dev); in spi_probe() local
383 spi->irq = of_irq_get(dev->of_node, 0); in spi_probe()
384 if (spi->irq == -EPROBE_DEFER) in spi_probe()
386 if (spi->irq < 0) in spi_probe()
387 spi->irq = 0; in spi_probe()
395 ret = sdrv->probe(spi); in spi_probe()
540 struct spi_device *spi; in spi_alloc_device() local
545 spi = kzalloc(sizeof(*spi), GFP_KERNEL); in spi_alloc_device()
546 if (!spi) { in spi_alloc_device()
551 spi->master = spi->controller = ctlr; in spi_alloc_device()
552 spi->dev.parent = &ctlr->dev; in spi_alloc_device()
553 spi->dev.bus = &spi_bus_type; in spi_alloc_device()
554 spi->dev.release = spidev_release; in spi_alloc_device()
555 spi->cs_gpio = -ENOENT; in spi_alloc_device()
556 spi->mode = ctlr->buswidth_override_bits; in spi_alloc_device()
558 spin_lock_init(&spi->statistics.lock); in spi_alloc_device()
560 device_initialize(&spi->dev); in spi_alloc_device()
561 return spi; in spi_alloc_device()
564 static void spi_dev_set_name(struct spi_device *spi) in spi_dev_set_name() argument
566 struct acpi_device *adev = ACPI_COMPANION(&spi->dev); in spi_dev_set_name()
569 dev_set_name(&spi->dev, "spi-%s", acpi_dev_name(adev)); in spi_dev_set_name()
573 dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->controller->dev), in spi_dev_set_name()
574 spi->chip_select); in spi_dev_set_name()
579 struct spi_device *spi = to_spi_device(dev); in spi_dev_check() local
582 if (spi->controller == new_spi->controller && in spi_dev_check()
583 spi->chip_select == new_spi->chip_select) in spi_dev_check()
588 static void spi_cleanup(struct spi_device *spi) in spi_cleanup() argument
590 if (spi->controller->cleanup) in spi_cleanup()
591 spi->controller->cleanup(spi); in spi_cleanup()
594 static int __spi_add_device(struct spi_device *spi) in __spi_add_device() argument
596 struct spi_controller *ctlr = spi->controller; in __spi_add_device()
605 status = bus_for_each_dev(&spi_bus_type, NULL, spi, spi_dev_check); in __spi_add_device()
608 spi->chip_select); in __spi_add_device()
620 spi->cs_gpiod = ctlr->cs_gpiods[spi->chip_select]; in __spi_add_device()
622 spi->cs_gpio = ctlr->cs_gpios[spi->chip_select]; in __spi_add_device()
628 status = spi_setup(spi); in __spi_add_device()
631 dev_name(&spi->dev), status); in __spi_add_device()
636 status = device_add(&spi->dev); in __spi_add_device()
639 dev_name(&spi->dev), status); in __spi_add_device()
640 spi_cleanup(spi); in __spi_add_device()
642 dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev)); in __spi_add_device()
657 static int spi_add_device(struct spi_device *spi) in spi_add_device() argument
659 struct spi_controller *ctlr = spi->controller; in spi_add_device()
664 if (spi->chip_select >= ctlr->num_chipselect) { in spi_add_device()
665 dev_err(dev, "cs%d >= max %d\n", spi->chip_select, in spi_add_device()
671 spi_dev_set_name(spi); in spi_add_device()
674 status = __spi_add_device(spi); in spi_add_device()
679 static int spi_add_device_locked(struct spi_device *spi) in spi_add_device_locked() argument
681 struct spi_controller *ctlr = spi->controller; in spi_add_device_locked()
685 if (spi->chip_select >= ctlr->num_chipselect) { in spi_add_device_locked()
686 dev_err(dev, "cs%d >= max %d\n", spi->chip_select, in spi_add_device_locked()
692 spi_dev_set_name(spi); in spi_add_device_locked()
695 return __spi_add_device(spi); in spi_add_device_locked()
769 void spi_unregister_device(struct spi_device *spi) in spi_unregister_device() argument
771 if (!spi) in spi_unregister_device()
774 if (spi->dev.of_node) { in spi_unregister_device()
775 of_node_clear_flag(spi->dev.of_node, OF_POPULATED); in spi_unregister_device()
776 of_node_put(spi->dev.of_node); in spi_unregister_device()
778 if (ACPI_COMPANION(&spi->dev)) in spi_unregister_device()
779 acpi_device_clear_enumerated(ACPI_COMPANION(&spi->dev)); in spi_unregister_device()
780 device_remove_software_node(&spi->dev); in spi_unregister_device()
781 device_del(&spi->dev); in spi_unregister_device()
782 spi_cleanup(spi); in spi_unregister_device()
783 put_device(&spi->dev); in spi_unregister_device()
868 static void *spi_res_alloc(struct spi_device *spi, spi_res_release_t release, in spi_res_alloc() argument
933 static void spi_set_cs(struct spi_device *spi, bool enable, bool force) in spi_set_cs() argument
941 if (!force && (spi->controller->last_cs_enable == enable) && in spi_set_cs()
942 (spi->controller->last_cs_mode_high == (spi->mode & SPI_CS_HIGH))) in spi_set_cs()
945 trace_spi_set_cs(spi, activate); in spi_set_cs()
947 spi->controller->last_cs_enable = enable; in spi_set_cs()
948 spi->controller->last_cs_mode_high = spi->mode & SPI_CS_HIGH; in spi_set_cs()
950 if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) || in spi_set_cs()
951 !spi->controller->set_cs_timing) { in spi_set_cs()
953 spi_delay_exec(&spi->cs_setup, NULL); in spi_set_cs()
955 spi_delay_exec(&spi->cs_hold, NULL); in spi_set_cs()
958 if (spi->mode & SPI_CS_HIGH) in spi_set_cs()
961 if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio)) { in spi_set_cs()
962 if (!(spi->mode & SPI_NO_CS)) { in spi_set_cs()
963 if (spi->cs_gpiod) { in spi_set_cs()
974 if (has_acpi_companion(&spi->dev)) in spi_set_cs()
975 gpiod_set_value_cansleep(spi->cs_gpiod, !enable); in spi_set_cs()
978 gpiod_set_value_cansleep(spi->cs_gpiod, activate); in spi_set_cs()
984 gpio_set_value_cansleep(spi->cs_gpio, !enable); in spi_set_cs()
988 if ((spi->controller->flags & SPI_MASTER_GPIO_SS) && in spi_set_cs()
989 spi->controller->set_cs) in spi_set_cs()
990 spi->controller->set_cs(spi, !enable); in spi_set_cs()
991 } else if (spi->controller->set_cs) { in spi_set_cs()
992 spi->controller->set_cs(spi, !enable); in spi_set_cs()
995 if (spi->cs_gpiod || gpio_is_valid(spi->cs_gpio) || in spi_set_cs()
996 !spi->controller->set_cs_timing) { in spi_set_cs()
998 spi_delay_exec(&spi->cs_inactive, NULL); in spi_set_cs()
1117 if (!ctlr->can_dma(ctlr, msg->spi, xfer)) in __spi_map_msg()
1164 if (!ctlr->can_dma(ctlr, msg->spi, xfer)) in __spi_unmap_msg()
1215 && !(msg->spi->mode & SPI_3WIRE)) { in spi_map_msg()
1266 struct spi_statistics *stats = &msg->spi->statistics; in spi_transfer_wait()
1272 dev_dbg(&msg->spi->dev, "SPI transfer interrupted\n"); in spi_transfer_wait()
1302 dev_err(&msg->spi->dev, in spi_transfer_wait()
1402 dev_err_once(&msg->spi->dev, in _spi_transfer_cs_change_delay()
1423 struct spi_statistics *stats = &msg->spi->statistics; in spi_transfer_one_message()
1425 spi_set_cs(msg->spi, true, false); in spi_transfer_one_message()
1445 ret = ctlr->transfer_one(ctlr, msg->spi, xfer); in spi_transfer_one_message()
1459 dev_err(&msg->spi->dev, in spi_transfer_one_message()
1471 dev_err(&msg->spi->dev, in spi_transfer_one_message()
1493 spi_set_cs(msg->spi, false, false); in spi_transfer_one_message()
1495 spi_set_cs(msg->spi, true, false); in spi_transfer_one_message()
1504 spi_set_cs(msg->spi, false, false); in spi_transfer_one_message()
2014 static int __spi_queued_transfer(struct spi_device *spi, in __spi_queued_transfer() argument
2018 struct spi_controller *ctlr = spi->controller; in __spi_queued_transfer()
2045 static int spi_queued_transfer(struct spi_device *spi, struct spi_message *msg) in spi_queued_transfer() argument
2047 return __spi_queued_transfer(spi, msg, true); in spi_queued_transfer()
2098 static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device *spi, in of_spi_parse_dt() argument
2106 spi->mode |= SPI_CPHA; in of_spi_parse_dt()
2108 spi->mode |= SPI_CPOL; in of_spi_parse_dt()
2110 spi->mode |= SPI_3WIRE; in of_spi_parse_dt()
2112 spi->mode |= SPI_LSB_FIRST; in of_spi_parse_dt()
2114 spi->mode |= SPI_CS_HIGH; in of_spi_parse_dt()
2120 spi->mode |= SPI_NO_TX; in of_spi_parse_dt()
2125 spi->mode |= SPI_TX_DUAL; in of_spi_parse_dt()
2128 spi->mode |= SPI_TX_QUAD; in of_spi_parse_dt()
2131 spi->mode |= SPI_TX_OCTAL; in of_spi_parse_dt()
2144 spi->mode |= SPI_NO_RX; in of_spi_parse_dt()
2149 spi->mode |= SPI_RX_DUAL; in of_spi_parse_dt()
2152 spi->mode |= SPI_RX_QUAD; in of_spi_parse_dt()
2155 spi->mode |= SPI_RX_OCTAL; in of_spi_parse_dt()
2181 spi->chip_select = value; in of_spi_parse_dt()
2185 spi->max_speed_hz = value; in of_spi_parse_dt()
2193 struct spi_device *spi; in of_register_spi_device() local
2197 spi = spi_alloc_device(ctlr); in of_register_spi_device()
2198 if (!spi) { in of_register_spi_device()
2205 rc = of_modalias_node(nc, spi->modalias, in of_register_spi_device()
2206 sizeof(spi->modalias)); in of_register_spi_device()
2212 rc = of_spi_parse_dt(ctlr, spi, nc); in of_register_spi_device()
2218 spi->dev.of_node = nc; in of_register_spi_device()
2219 spi->dev.fwnode = of_fwnode_handle(nc); in of_register_spi_device()
2222 rc = spi_add_device(spi); in of_register_spi_device()
2228 return spi; in of_register_spi_device()
2233 spi_dev_put(spi); in of_register_spi_device()
2246 struct spi_device *spi; in of_register_spi_devices() local
2255 spi = of_register_spi_device(ctlr, nc); in of_register_spi_devices()
2256 if (IS_ERR(spi)) { in of_register_spi_devices()
2279 struct spi_device *spi_new_ancillary_device(struct spi_device *spi, in spi_new_ancillary_device() argument
2286 ancillary = spi_alloc_device(spi->controller); in spi_new_ancillary_device()
2298 ancillary->max_speed_hz = spi->max_speed_hz; in spi_new_ancillary_device()
2299 ancillary->mode = spi->mode; in spi_new_ancillary_device()
2304 dev_err(&spi->dev, "failed to register ancillary device\n"); in spi_new_ancillary_device()
2420 struct spi_device *spi; in acpi_register_spi_device() local
2449 spi = spi_alloc_device(ctlr); in acpi_register_spi_device()
2450 if (!spi) { in acpi_register_spi_device()
2457 ACPI_COMPANION_SET(&spi->dev, adev); in acpi_register_spi_device()
2458 spi->max_speed_hz = lookup.max_speed_hz; in acpi_register_spi_device()
2459 spi->mode |= lookup.mode; in acpi_register_spi_device()
2460 spi->irq = lookup.irq; in acpi_register_spi_device()
2461 spi->bits_per_word = lookup.bits_per_word; in acpi_register_spi_device()
2462 spi->chip_select = lookup.chip_select; in acpi_register_spi_device()
2464 acpi_set_modalias(adev, acpi_device_hid(adev), spi->modalias, in acpi_register_spi_device()
2465 sizeof(spi->modalias)); in acpi_register_spi_device()
2467 if (spi->irq < 0) in acpi_register_spi_device()
2468 spi->irq = acpi_dev_gpio_irq_get(adev, 0); in acpi_register_spi_device()
2473 if (spi_add_device(spi)) { in acpi_register_spi_device()
2477 spi_dev_put(spi); in acpi_register_spi_device()
2537 int spi_slave_abort(struct spi_device *spi) in spi_slave_abort() argument
2539 struct spi_controller *ctlr = spi->controller; in spi_slave_abort()
2570 struct spi_device *spi; in slave_store() local
2588 spi = spi_alloc_device(ctlr); in slave_store()
2589 if (!spi) in slave_store()
2592 strlcpy(spi->modalias, name, sizeof(spi->modalias)); in slave_store()
2594 rc = spi_add_device(spi); in slave_store()
2596 spi_dev_put(spi); in slave_store()
3202 rxfer = spi_res_alloc(msg->spi, __spi_replace_transfers_release, in spi_replace_transfers()
3232 dev_err(&msg->spi->dev, in spi_replace_transfers()
3340 SPI_STATISTICS_INCREMENT_FIELD(&msg->spi->statistics, in __spi_split_transfer_maxsize()
3424 int spi_setup(struct spi_device *spi) in spi_setup() argument
3433 if ((hweight_long(spi->mode & in spi_setup()
3435 (hweight_long(spi->mode & in spi_setup()
3437 dev_err(&spi->dev, in spi_setup()
3443 if ((spi->mode & SPI_3WIRE) && (spi->mode & in spi_setup()
3452 bad_bits = spi->mode & ~(spi->controller->mode_bits | SPI_CS_WORD | in spi_setup()
3457 if (gpio_is_valid(spi->cs_gpio)) in spi_setup()
3463 dev_warn(&spi->dev, in spi_setup()
3466 spi->mode &= ~ugly_bits; in spi_setup()
3470 dev_err(&spi->dev, "setup: unsupported mode bits %x\n", in spi_setup()
3475 if (!spi->bits_per_word) in spi_setup()
3476 spi->bits_per_word = 8; in spi_setup()
3478 status = __spi_validate_bits_per_word(spi->controller, in spi_setup()
3479 spi->bits_per_word); in spi_setup()
3483 if (spi->controller->max_speed_hz && in spi_setup()
3484 (!spi->max_speed_hz || in spi_setup()
3485 spi->max_speed_hz > spi->controller->max_speed_hz)) in spi_setup()
3486 spi->max_speed_hz = spi->controller->max_speed_hz; in spi_setup()
3488 mutex_lock(&spi->controller->io_mutex); in spi_setup()
3490 if (spi->controller->setup) { in spi_setup()
3491 status = spi->controller->setup(spi); in spi_setup()
3493 mutex_unlock(&spi->controller->io_mutex); in spi_setup()
3494 dev_err(&spi->controller->dev, "Failed to setup device: %d\n", in spi_setup()
3500 if (spi->controller->auto_runtime_pm && spi->controller->set_cs) { in spi_setup()
3501 status = pm_runtime_get_sync(spi->controller->dev.parent); in spi_setup()
3503 mutex_unlock(&spi->controller->io_mutex); in spi_setup()
3504 pm_runtime_put_noidle(spi->controller->dev.parent); in spi_setup()
3505 dev_err(&spi->controller->dev, "Failed to power device: %d\n", in spi_setup()
3518 spi_set_cs(spi, false, true); in spi_setup()
3519 pm_runtime_mark_last_busy(spi->controller->dev.parent); in spi_setup()
3520 pm_runtime_put_autosuspend(spi->controller->dev.parent); in spi_setup()
3522 spi_set_cs(spi, false, true); in spi_setup()
3525 mutex_unlock(&spi->controller->io_mutex); in spi_setup()
3527 if (spi->rt && !spi->controller->rt) { in spi_setup()
3528 spi->controller->rt = true; in spi_setup()
3529 spi_set_thread_rt(spi->controller); in spi_setup()
3532 trace_spi_setup(spi, status); in spi_setup()
3534 dev_dbg(&spi->dev, "setup mode %lu, %s%s%s%s%u bits/w, %u Hz max --> %d\n", in spi_setup()
3535 spi->mode & SPI_MODE_X_MASK, in spi_setup()
3536 (spi->mode & SPI_CS_HIGH) ? "cs_high, " : "", in spi_setup()
3537 (spi->mode & SPI_LSB_FIRST) ? "lsb, " : "", in spi_setup()
3538 (spi->mode & SPI_3WIRE) ? "3wire, " : "", in spi_setup()
3539 (spi->mode & SPI_LOOP) ? "loopback, " : "", in spi_setup()
3540 spi->bits_per_word, spi->max_speed_hz, in spi_setup()
3548 struct spi_device *spi) in _spi_xfer_word_delay_update() argument
3556 delay2 = spi_delay_to_ns(&spi->word_delay, xfer); in _spi_xfer_word_delay_update()
3561 memcpy(&xfer->word_delay, &spi->word_delay, in _spi_xfer_word_delay_update()
3567 static int __spi_validate(struct spi_device *spi, struct spi_message *message) in __spi_validate() argument
3569 struct spi_controller *ctlr = spi->controller; in __spi_validate()
3582 if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) || in __spi_validate()
3583 spi->cs_gpiod || in __spi_validate()
3584 gpio_is_valid(spi->cs_gpio))) { in __spi_validate()
3588 maxsize = (spi->bits_per_word + 7) / 8; in __spi_validate()
3591 message->spi = spi; in __spi_validate()
3612 (spi->mode & SPI_3WIRE)) { in __spi_validate()
3638 xfer->bits_per_word = spi->bits_per_word; in __spi_validate()
3641 xfer->speed_hz = spi->max_speed_hz; in __spi_validate()
3677 if (spi->mode & SPI_NO_TX) in __spi_validate()
3684 !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD))) in __spi_validate()
3687 !(spi->mode & SPI_TX_QUAD)) in __spi_validate()
3692 if (spi->mode & SPI_NO_RX) in __spi_validate()
3699 !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD))) in __spi_validate()
3702 !(spi->mode & SPI_RX_QUAD)) in __spi_validate()
3706 if (_spi_xfer_word_delay_update(xfer, spi)) in __spi_validate()
3715 static int __spi_async(struct spi_device *spi, struct spi_message *message) in __spi_async() argument
3717 struct spi_controller *ctlr = spi->controller; in __spi_async()
3727 message->spi = spi; in __spi_async()
3730 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_async); in __spi_async()
3741 return ctlr->transfer(spi, message); in __spi_async()
3775 int spi_async(struct spi_device *spi, struct spi_message *message) in spi_async() argument
3777 struct spi_controller *ctlr = spi->controller; in spi_async()
3781 ret = __spi_validate(spi, message); in spi_async()
3790 ret = __spi_async(spi, message); in spi_async()
3829 static int spi_async_locked(struct spi_device *spi, struct spi_message *message) in spi_async_locked() argument
3831 struct spi_controller *ctlr = spi->controller; in spi_async_locked()
3835 ret = __spi_validate(spi, message); in spi_async_locked()
3841 ret = __spi_async(spi, message); in spi_async_locked()
3861 static int __spi_sync(struct spi_device *spi, struct spi_message *message) in __spi_sync() argument
3865 struct spi_controller *ctlr = spi->controller; in __spi_sync()
3868 status = __spi_validate(spi, message); in __spi_sync()
3874 message->spi = spi; in __spi_sync()
3877 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_sync); in __spi_sync()
3889 status = __spi_queued_transfer(spi, message, false); in __spi_sync()
3893 status = spi_async_locked(spi, message); in __spi_sync()
3903 SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, in __spi_sync()
3936 int spi_sync(struct spi_device *spi, struct spi_message *message) in spi_sync() argument
3940 mutex_lock(&spi->controller->bus_lock_mutex); in spi_sync()
3941 ret = __spi_sync(spi, message); in spi_sync()
3942 mutex_unlock(&spi->controller->bus_lock_mutex); in spi_sync()
3964 int spi_sync_locked(struct spi_device *spi, struct spi_message *message) in spi_sync_locked() argument
3966 return __spi_sync(spi, message); in spi_sync_locked()
4049 int spi_write_then_read(struct spi_device *spi, in spi_write_then_read() argument
4090 status = spi_sync(spi, &message); in spi_write_then_read()
4134 struct spi_device *spi; in of_spi_notify() local
4147 spi = of_register_spi_device(ctlr, rd->dn); in of_spi_notify()
4150 if (IS_ERR(spi)) { in of_spi_notify()
4154 return notifier_from_errno(PTR_ERR(spi)); in of_spi_notify()
4164 spi = of_find_spi_device_by_node(rd->dn); in of_spi_notify()
4165 if (spi == NULL) in of_spi_notify()
4169 spi_unregister_device(spi); in of_spi_notify()
4172 put_device(&spi->dev); in of_spi_notify()
4220 struct spi_device *spi; in acpi_spi_notify() local
4235 spi = acpi_spi_find_device_by_adev(adev); in acpi_spi_notify()
4236 if (!spi) in acpi_spi_notify()
4239 spi_unregister_device(spi); in acpi_spi_notify()
4240 put_device(&spi->dev); in acpi_spi_notify()