static int spi_dw_release(struct device *dev, const struct spi_config *config) { struct spi_dw_data *spi = dev->driver_data; if (!spi_context_configured(&spi->ctx, config)) { return -EINVAL; } spi_context_unlock_unconditionally(&spi->ctx); return 0; }
static int spi_nrfx_release(struct device *dev, const struct spi_config *spi_cfg) { struct spi_nrfx_data *dev_data = get_dev_data(dev); if (!spi_context_configured(&dev_data->ctx, spi_cfg)) { return -EINVAL; } spi_context_unlock_unconditionally(&dev_data->ctx); return 0; }
static int init_spis(struct device *dev, const nrfx_spis_config_t *config) { /* This sets only default values of frequency, mode and bit order. * The proper ones are set in configure() when a transfer is started. */ nrfx_err_t result = nrfx_spis_init(&get_dev_config(dev)->spis, config, event_handler, dev); if (result != NRFX_SUCCESS) { LOG_ERR("Failed to initialize device: %s", dev->config->name); return -EBUSY; } spi_context_unlock_unconditionally(&get_dev_data(dev)->ctx); return 0; }
int spi_dw_init(struct device *dev) { const struct spi_dw_config *info = dev->config->config_info; struct spi_dw_data *spi = dev->driver_data; _clock_config(dev); _clock_on(dev); info->config_func(); /* Masking interrupt and making sure controller is disabled */ write_imr(DW_SPI_IMR_MASK, info->regs); clear_bit_ssienr(info->regs); LOG_DBG("Designware SPI driver initialized on device: %p", dev); spi_context_unlock_unconditionally(&spi->ctx); return 0; }