diff options
Diffstat (limited to 'drivers/spi')
118 files changed, 3123 insertions, 2330 deletions
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 8962b2557615..2c21d5b96fdc 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -281,6 +281,13 @@ config SPI_COLDFIRE_QSPI  	  This enables support for the Coldfire QSPI controller in master  	  mode. +config SPI_CS42L43 +	tristate "Cirrus Logic CS42L43 SPI controller" +	depends on MFD_CS42L43 && PINCTRL_CS42L43 +	help +	  This enables support for the SPI controller inside the Cirrus Logic +	  CS42L43 audio codec. +  config SPI_DAVINCI  	tristate "Texas Instruments DaVinci/DA8x/OMAP-L/AM1x SoC SPI controller"  	depends on ARCH_DAVINCI || ARCH_KEYSTONE || COMPILE_TEST @@ -516,6 +523,32 @@ config SPI_LM70_LLP  	  which interfaces to an LM70 temperature sensor using  	  a parallel port. +config SPI_LOONGSON_CORE +	tristate +	depends on LOONGARCH || COMPILE_TEST + +config SPI_LOONGSON_PCI +	tristate "Loongson SPI Controller PCI Driver Support" +	select SPI_LOONGSON_CORE +	depends on PCI && (LOONGARCH || COMPILE_TEST) +	help +	  This bus driver supports the Loongson SPI hardware controller in +	  the Loongson platforms and supports to use PCI framework to +	  register SPI device resources. +	  Say Y or M here if you want to use the SPI controller on +	  Loongson platform. + +config SPI_LOONGSON_PLATFORM +	tristate "Loongson SPI Controller Platform Driver Support" +	select SPI_LOONGSON_CORE +	depends on OF && (LOONGARCH || COMPILE_TEST) +	help +	  This bus driver supports the Loongson SPI hardware controller in +	  the Loongson platforms and supports to use DTS framework to +	  register SPI device resources. +	  Say Y or M here if you want to use the SPI controller on +	  Loongson platform. +  config SPI_LP8841_RTC  	tristate "ICP DAS LP-8841 SPI Controller for RTC"  	depends on MACH_PXA27X_DT || COMPILE_TEST diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 080c2c1b3ec1..6af54842b9fa 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_CADENCE_QUADSPI)	+= spi-cadence-quadspi.o  obj-$(CONFIG_SPI_CADENCE_XSPI)		+= spi-cadence-xspi.o  obj-$(CONFIG_SPI_CLPS711X)		+= spi-clps711x.o  obj-$(CONFIG_SPI_COLDFIRE_QSPI)		+= spi-coldfire-qspi.o +obj-$(CONFIG_SPI_CS42L43)		+= spi-cs42l43.o  obj-$(CONFIG_SPI_DAVINCI)		+= spi-davinci.o  obj-$(CONFIG_SPI_DLN2)			+= spi-dln2.o  obj-$(CONFIG_SPI_DESIGNWARE)		+= spi-dw.o @@ -71,6 +72,9 @@ obj-$(CONFIG_SPI_INTEL_PLATFORM)	+= spi-intel-platform.o  obj-$(CONFIG_SPI_LANTIQ_SSC)		+= spi-lantiq-ssc.o  obj-$(CONFIG_SPI_JCORE)			+= spi-jcore.o  obj-$(CONFIG_SPI_LM70_LLP)		+= spi-lm70llp.o +obj-$(CONFIG_SPI_LOONGSON_CORE)		+= spi-loongson-core.o +obj-$(CONFIG_SPI_LOONGSON_PCI)		+= spi-loongson-pci.o +obj-$(CONFIG_SPI_LOONGSON_PLATFORM)	+= spi-loongson-plat.o  obj-$(CONFIG_SPI_LP8841_RTC)		+= spi-lp8841-rtc.o  obj-$(CONFIG_SPI_MESON_SPICC)		+= spi-meson-spicc.o  obj-$(CONFIG_SPI_MESON_SPIFC)		+= spi-meson-spifc.o diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c index fecead757a3c..5d9b246b6963 100644 --- a/drivers/spi/spi-amd.c +++ b/drivers/spi/spi-amd.c @@ -215,9 +215,9 @@ static int amd_spi_execute_opcode(struct amd_spi *amd_spi)  	}  } -static int amd_spi_master_setup(struct spi_device *spi) +static int amd_spi_host_setup(struct spi_device *spi)  { -	struct amd_spi *amd_spi = spi_master_get_devdata(spi->master); +	struct amd_spi *amd_spi = spi_controller_get_devdata(spi->controller);  	amd_spi_clear_fifo_ptr(amd_spi); @@ -272,7 +272,7 @@ static int amd_set_spi_freq(struct amd_spi *amd_spi, u32 speed_hz)  }  static inline int amd_spi_fifo_xfer(struct amd_spi *amd_spi, -				    struct spi_master *master, +				    struct spi_controller *host,  				    struct spi_message *message)  {  	struct spi_transfer *xfer = NULL; @@ -353,15 +353,15 @@ fin_msg:  		return -ENODEV;  	} -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return message->status;  } -static int amd_spi_master_transfer(struct spi_master *master, +static int amd_spi_host_transfer(struct spi_controller *host,  				   struct spi_message *msg)  { -	struct amd_spi *amd_spi = spi_master_get_devdata(master); +	struct amd_spi *amd_spi = spi_controller_get_devdata(host);  	struct spi_device *spi = msg->spi;  	amd_spi_select_chip(amd_spi, spi_get_chipselect(spi, 0)); @@ -370,7 +370,7 @@ static int amd_spi_master_transfer(struct spi_master *master,  	 * Extract spi_transfers from the spi message and  	 * program the controller.  	 */ -	return amd_spi_fifo_xfer(amd_spi, master, msg); +	return amd_spi_fifo_xfer(amd_spi, host, msg);  }  static size_t amd_spi_max_transfer_size(struct spi_device *spi) @@ -381,16 +381,16 @@ static size_t amd_spi_max_transfer_size(struct spi_device *spi)  static int amd_spi_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; -	struct spi_master *master; +	struct spi_controller *host;  	struct amd_spi *amd_spi;  	int err; -	/* Allocate storage for spi_master and driver private data */ -	master = devm_spi_alloc_master(dev, sizeof(struct amd_spi)); -	if (!master) -		return dev_err_probe(dev, -ENOMEM, "Error allocating SPI master\n"); +	/* Allocate storage for host and driver private data */ +	host = devm_spi_alloc_host(dev, sizeof(struct amd_spi)); +	if (!host) +		return dev_err_probe(dev, -ENOMEM, "Error allocating SPI host\n"); -	amd_spi = spi_master_get_devdata(master); +	amd_spi = spi_controller_get_devdata(host);  	amd_spi->io_remap_addr = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(amd_spi->io_remap_addr))  		return dev_err_probe(dev, PTR_ERR(amd_spi->io_remap_addr), @@ -398,22 +398,22 @@ static int amd_spi_probe(struct platform_device *pdev)  	dev_dbg(dev, "io_remap_address: %p\n", amd_spi->io_remap_addr); -	amd_spi->version = (enum amd_spi_versions) device_get_match_data(dev); +	amd_spi->version = (uintptr_t) device_get_match_data(dev); -	/* Initialize the spi_master fields */ -	master->bus_num = 0; -	master->num_chipselect = 4; -	master->mode_bits = 0; -	master->flags = SPI_MASTER_HALF_DUPLEX; -	master->max_speed_hz = AMD_SPI_MAX_HZ; -	master->min_speed_hz = AMD_SPI_MIN_HZ; -	master->setup = amd_spi_master_setup; -	master->transfer_one_message = amd_spi_master_transfer; -	master->max_transfer_size = amd_spi_max_transfer_size; -	master->max_message_size = amd_spi_max_transfer_size; +	/* Initialize the spi_controller fields */ +	host->bus_num = 0; +	host->num_chipselect = 4; +	host->mode_bits = 0; +	host->flags = SPI_CONTROLLER_HALF_DUPLEX; +	host->max_speed_hz = AMD_SPI_MAX_HZ; +	host->min_speed_hz = AMD_SPI_MIN_HZ; +	host->setup = amd_spi_host_setup; +	host->transfer_one_message = amd_spi_host_transfer; +	host->max_transfer_size = amd_spi_max_transfer_size; +	host->max_message_size = amd_spi_max_transfer_size;  	/* Register the controller with SPI framework */ -	err = devm_spi_register_master(dev, master); +	err = devm_spi_register_controller(dev, host);  	if (err)  		return dev_err_probe(dev, err, "error registering SPI controller\n"); diff --git a/drivers/spi/spi-amlogic-spifc-a1.c b/drivers/spi/spi-amlogic-spifc-a1.c index 3c4224c38399..fadf6667cd51 100644 --- a/drivers/spi/spi-amlogic-spifc-a1.c +++ b/drivers/spi/spi-amlogic-spifc-a1.c @@ -72,7 +72,7 @@  #define SPIFC_A1_USER_DBUF_ADDR_REG	0x248 -#define SPIFC_A1_BUFFER_SIZE		512 +#define SPIFC_A1_BUFFER_SIZE		512U  #define SPIFC_A1_MAX_HZ			200000000  #define SPIFC_A1_MIN_HZ			1000000 @@ -107,6 +107,7 @@ struct amlogic_spifc_a1 {  	struct clk *clk;  	struct device *dev;  	void __iomem *base; +	u32 curr_speed_hz;  };  static int amlogic_spifc_a1_request(struct amlogic_spifc_a1 *spifc, bool read) @@ -235,66 +236,68 @@ static int amlogic_spifc_a1_write(struct amlogic_spifc_a1 *spifc,  	return amlogic_spifc_a1_request(spifc, false);  } -static int amlogic_spifc_a1_exec_op(struct spi_mem *mem, -				    const struct spi_mem_op *op) +static int amlogic_spifc_a1_set_freq(struct amlogic_spifc_a1 *spifc, u32 freq)  { -	struct amlogic_spifc_a1 *spifc = -		spi_controller_get_devdata(mem->spi->controller); -	size_t off, nbytes = op->data.nbytes; -	u32 cmd_cfg, addr_cfg, dummy_cfg, dmode;  	int ret; -	amlogic_spifc_a1_user_init(spifc); - -	cmd_cfg = SPIFC_A1_USER_CMD(op); -	amlogic_spifc_a1_set_cmd(spifc, cmd_cfg); +	if (freq == spifc->curr_speed_hz) +		return 0; -	if (op->addr.nbytes) { -		addr_cfg = SPIFC_A1_USER_ADDR(op); -		amlogic_spifc_a1_set_addr(spifc, op->addr.val, addr_cfg); -	} +	ret = clk_set_rate(spifc->clk, freq); +	if (ret) +		return ret; -	if (op->dummy.nbytes) { -		dummy_cfg = SPIFC_A1_USER_DUMMY(op); -		amlogic_spifc_a1_set_dummy(spifc, dummy_cfg); -	} +	spifc->curr_speed_hz = freq; +	return 0; +} -	if (!op->data.nbytes) -		return amlogic_spifc_a1_request(spifc, false); +static int amlogic_spifc_a1_exec_op(struct spi_mem *mem, +				    const struct spi_mem_op *op) +{ +	struct amlogic_spifc_a1 *spifc = +		spi_controller_get_devdata(mem->spi->controller); +	size_t data_size = op->data.nbytes; +	int ret; -	dmode = ilog2(op->data.buswidth); -	off = 0; +	ret = amlogic_spifc_a1_set_freq(spifc, mem->spi->max_speed_hz); +	if (ret) +		return ret; -	do { -		size_t block_size = min_t(size_t, nbytes, SPIFC_A1_BUFFER_SIZE); +	amlogic_spifc_a1_user_init(spifc); +	amlogic_spifc_a1_set_cmd(spifc, SPIFC_A1_USER_CMD(op)); -		amlogic_spifc_a1_set_cmd(spifc, cmd_cfg); +	if (op->addr.nbytes) +		amlogic_spifc_a1_set_addr(spifc, op->addr.val, +					  SPIFC_A1_USER_ADDR(op)); -		if (op->addr.nbytes) -			amlogic_spifc_a1_set_addr(spifc, op->addr.val + off, -						  addr_cfg); +	if (op->dummy.nbytes) +		amlogic_spifc_a1_set_dummy(spifc, SPIFC_A1_USER_DUMMY(op)); -		if (op->dummy.nbytes) -			amlogic_spifc_a1_set_dummy(spifc, dummy_cfg); +	if (data_size) { +		u32 mode = ilog2(op->data.buswidth);  		writel(0, spifc->base + SPIFC_A1_USER_DBUF_ADDR_REG);  		if (op->data.dir == SPI_MEM_DATA_IN) -			ret = amlogic_spifc_a1_read(spifc, -						    op->data.buf.in + off, -						    block_size, dmode); +			ret = amlogic_spifc_a1_read(spifc, op->data.buf.in, +						    data_size, mode);  		else -			ret = amlogic_spifc_a1_write(spifc, -						     op->data.buf.out + off, -						     block_size, dmode); - -		nbytes -= block_size; -		off += block_size; -	} while (nbytes != 0 && !ret); +			ret = amlogic_spifc_a1_write(spifc, op->data.buf.out, +						     data_size, mode); +	} else { +		ret = amlogic_spifc_a1_request(spifc, false); +	}  	return ret;  } +static int amlogic_spifc_a1_adjust_op_size(struct spi_mem *mem, +					   struct spi_mem_op *op) +{ +	op->data.nbytes = min(op->data.nbytes, SPIFC_A1_BUFFER_SIZE); +	return 0; +} +  static void amlogic_spifc_a1_hw_init(struct amlogic_spifc_a1 *spifc)  {  	u32 regv; @@ -314,6 +317,7 @@ static void amlogic_spifc_a1_hw_init(struct amlogic_spifc_a1 *spifc)  static const struct spi_controller_mem_ops amlogic_spifc_a1_mem_ops = {  	.exec_op = amlogic_spifc_a1_exec_op, +	.adjust_op_size = amlogic_spifc_a1_adjust_op_size,  };  static int amlogic_spifc_a1_probe(struct platform_device *pdev) @@ -322,7 +326,7 @@ static int amlogic_spifc_a1_probe(struct platform_device *pdev)  	struct amlogic_spifc_a1 *spifc;  	int ret; -	ctrl = devm_spi_alloc_master(&pdev->dev, sizeof(*spifc)); +	ctrl = devm_spi_alloc_host(&pdev->dev, sizeof(*spifc));  	if (!ctrl)  		return -ENOMEM; diff --git a/drivers/spi/spi-ar934x.c b/drivers/spi/spi-ar934x.c index 9dcada8c4cb9..58b98cea31d9 100644 --- a/drivers/spi/spi-ar934x.c +++ b/drivers/spi/spi-ar934x.c @@ -14,7 +14,8 @@  #include <linux/iopoll.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_device.h> +#include <linux/of.h> +#include <linux/platform_device.h>  #include <linux/spi/spi.h>  #define DRIVER_NAME "spi-ar934x" diff --git a/drivers/spi/spi-armada-3700.c b/drivers/spi/spi-armada-3700.c index a7fb7c94e70e..0103ac0158c0 100644 --- a/drivers/spi/spi-armada-3700.c +++ b/drivers/spi/spi-armada-3700.c @@ -17,8 +17,7 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_irq.h> -#include <linux/of_device.h> +#include <linux/platform_device.h>  #include <linux/pinctrl/consumer.h>  #include <linux/spi/spi.h> diff --git a/drivers/spi/spi-aspeed-smc.c b/drivers/spi/spi-aspeed-smc.c index e75b0d51f06a..21b0fa646c7d 100644 --- a/drivers/spi/spi-aspeed-smc.c +++ b/drivers/spi/spi-aspeed-smc.c @@ -295,7 +295,7 @@ static const struct aspeed_spi_data ast2400_spi_data;  static int do_aspeed_spi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct aspeed_spi *aspi = spi_controller_get_devdata(mem->spi->master); +	struct aspeed_spi *aspi = spi_controller_get_devdata(mem->spi->controller);  	struct aspeed_spi_chip *chip = &aspi->chips[spi_get_chipselect(mem->spi, 0)];  	u32 addr_mode, addr_mode_backup;  	u32 ctl_val; @@ -374,7 +374,7 @@ static int aspeed_spi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  static const char *aspeed_spi_get_name(struct spi_mem *mem)  { -	struct aspeed_spi *aspi = spi_controller_get_devdata(mem->spi->master); +	struct aspeed_spi *aspi = spi_controller_get_devdata(mem->spi->controller);  	struct device *dev = aspi->dev;  	return devm_kasprintf(dev, GFP_KERNEL, "%s.%d", dev_name(dev), @@ -553,7 +553,7 @@ static int aspeed_spi_do_calibration(struct aspeed_spi_chip *chip);  static int aspeed_spi_dirmap_create(struct spi_mem_dirmap_desc *desc)  { -	struct aspeed_spi *aspi = spi_controller_get_devdata(desc->mem->spi->master); +	struct aspeed_spi *aspi = spi_controller_get_devdata(desc->mem->spi->controller);  	struct aspeed_spi_chip *chip = &aspi->chips[spi_get_chipselect(desc->mem->spi, 0)];  	struct spi_mem_op *op = &desc->info.op_tmpl;  	u32 ctl_val; @@ -620,7 +620,7 @@ static int aspeed_spi_dirmap_create(struct spi_mem_dirmap_desc *desc)  static ssize_t aspeed_spi_dirmap_read(struct spi_mem_dirmap_desc *desc,  				      u64 offset, size_t len, void *buf)  { -	struct aspeed_spi *aspi = spi_controller_get_devdata(desc->mem->spi->master); +	struct aspeed_spi *aspi = spi_controller_get_devdata(desc->mem->spi->controller);  	struct aspeed_spi_chip *chip = &aspi->chips[spi_get_chipselect(desc->mem->spi, 0)];  	/* Switch to USER command mode if mapping window is too small */ @@ -669,7 +669,7 @@ static void aspeed_spi_chip_enable(struct aspeed_spi *aspi, unsigned int cs, boo  static int aspeed_spi_setup(struct spi_device *spi)  { -	struct aspeed_spi *aspi = spi_controller_get_devdata(spi->master); +	struct aspeed_spi *aspi = spi_controller_get_devdata(spi->controller);  	const struct aspeed_spi_data *data = aspi->data;  	unsigned int cs = spi_get_chipselect(spi, 0);  	struct aspeed_spi_chip *chip = &aspi->chips[cs]; @@ -697,7 +697,7 @@ static int aspeed_spi_setup(struct spi_device *spi)  static void aspeed_spi_cleanup(struct spi_device *spi)  { -	struct aspeed_spi *aspi = spi_controller_get_devdata(spi->master); +	struct aspeed_spi *aspi = spi_controller_get_devdata(spi->controller);  	unsigned int cs = spi_get_chipselect(spi, 0);  	aspeed_spi_chip_enable(aspi, cs, false); @@ -726,7 +726,7 @@ static int aspeed_spi_probe(struct platform_device *pdev)  	if (!data)  		return -ENODEV; -	ctlr = devm_spi_alloc_master(dev, sizeof(*aspi)); +	ctlr = devm_spi_alloc_host(dev, sizeof(*aspi));  	if (!ctlr)  		return -ENOMEM; diff --git a/drivers/spi/spi-at91-usart.c b/drivers/spi/spi-at91-usart.c index 7854d9790fe9..b11d0f993cc7 100644 --- a/drivers/spi/spi-at91-usart.c +++ b/drivers/spi/spi-at91-usart.c @@ -13,7 +13,6 @@  #include <linux/interrupt.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_platform.h>  #include <linux/gpio/consumer.h>  #include <linux/pinctrl/consumer.h>  #include <linux/platform_device.h> @@ -486,10 +485,7 @@ static int at91_usart_gpio_setup(struct platform_device *pdev)  	cs_gpios = devm_gpiod_get_array_optional(&pdev->dev, "cs", GPIOD_OUT_LOW); -	if (IS_ERR(cs_gpios)) -		return PTR_ERR(cs_gpios); - -	return 0; +	return PTR_ERR_OR_ZERO(cs_gpios);  }  static int at91_usart_spi_probe(struct platform_device *pdev) @@ -527,7 +523,7 @@ static int at91_usart_spi_probe(struct platform_device *pdev)  	controller->dev.of_node = pdev->dev.parent->of_node;  	controller->bits_per_word_mask = SPI_BPW_MASK(8);  	controller->setup = at91_usart_spi_setup; -	controller->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; +	controller->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX;  	controller->transfer_one = at91_usart_spi_transfer_one;  	controller->prepare_message = at91_usart_spi_prepare_message;  	controller->unprepare_message = at91_usart_spi_unprepare_message; diff --git a/drivers/spi/spi-ath79.c b/drivers/spi/spi-ath79.c index d3dd21386f12..1b6d977d111c 100644 --- a/drivers/spi/spi-ath79.c +++ b/drivers/spi/spi-ath79.c @@ -185,7 +185,7 @@ static int ath79_spi_probe(struct platform_device *pdev)  	host->use_gpio_descriptors = true;  	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32); -	host->flags = SPI_MASTER_GPIO_SS; +	host->flags = SPI_CONTROLLER_GPIO_SS;  	host->num_chipselect = 3;  	host->mem_ops = &ath79_mem_ops; diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c index 152cd6773403..6aa8adbe4170 100644 --- a/drivers/spi/spi-atmel.c +++ b/drivers/spi/spi-atmel.c @@ -1450,10 +1450,6 @@ static int atmel_spi_probe(struct platform_device *pdev)  	/* Select default pin state */  	pinctrl_pm_select_default_state(&pdev->dev); -	regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!regs) -		return -ENXIO; -  	irq = platform_get_irq(pdev, 0);  	if (irq < 0)  		return irq; @@ -1475,8 +1471,8 @@ static int atmel_spi_probe(struct platform_device *pdev)  	host->bus_num = pdev->id;  	host->num_chipselect = 4;  	host->setup = atmel_spi_setup; -	host->flags = (SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX | -			SPI_MASTER_GPIO_SS); +	host->flags = (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX | +			SPI_CONTROLLER_GPIO_SS);  	host->transfer_one = atmel_spi_one_transfer;  	host->set_cs = atmel_spi_set_cs;  	host->cleanup = atmel_spi_cleanup; @@ -1490,7 +1486,7 @@ static int atmel_spi_probe(struct platform_device *pdev)  	spin_lock_init(&as->lock);  	as->pdev = pdev; -	as->regs = devm_ioremap_resource(&pdev->dev, regs); +	as->regs = devm_platform_get_and_ioremap_resource(pdev, 0, ®s);  	if (IS_ERR(as->regs)) {  		ret = PTR_ERR(as->regs);  		goto out_unmap_regs; diff --git a/drivers/spi/spi-au1550.c b/drivers/spi/spi-au1550.c index 0b57e6afce0f..1011b1a8f241 100644 --- a/drivers/spi/spi-au1550.c +++ b/drivers/spi/spi-au1550.c @@ -54,7 +54,7 @@ struct au1550_spi {  	int (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t);  	irqreturn_t (*irq_callback)(struct au1550_spi *hw); -	struct completion master_done; +	struct completion host_done;  	unsigned int usedma;  	u32 dma_tx_id; @@ -66,7 +66,7 @@ struct au1550_spi {  	unsigned int dma_rx_tmpbuf_size;  	u32 dma_rx_tmpbuf_addr; -	struct spi_master *master; +	struct spi_controller *host;  	struct device *dev;  	struct au1550_spi_info *pdata;  	struct resource *ioarea; @@ -159,7 +159,7 @@ static void au1550_spi_reset_fifos(struct au1550_spi *hw)   */  static void au1550_spi_chipsel(struct spi_device *spi, int value)  { -	struct au1550_spi *hw = spi_master_get_devdata(spi->master); +	struct au1550_spi *hw = spi_controller_get_devdata(spi->controller);  	unsigned int cspol = spi->mode & SPI_CS_HIGH ? 1 : 0;  	u32 cfg, stat; @@ -219,7 +219,7 @@ static void au1550_spi_chipsel(struct spi_device *spi, int value)  static int au1550_spi_setupxfer(struct spi_device *spi, struct spi_transfer *t)  { -	struct au1550_spi *hw = spi_master_get_devdata(spi->master); +	struct au1550_spi *hw = spi_controller_get_devdata(spi->controller);  	unsigned int bpw, hz;  	u32 cfg, stat; @@ -272,7 +272,7 @@ static int au1550_spi_setupxfer(struct spi_device *spi, struct spi_transfer *t)   * no reliable way how to recognize that spi transfer is done   * dma complete callbacks are called before real spi transfer is finished   * and if only tx dma channel is set up (and rx fifo overflow event masked) - * spi master done event irq is not generated unless rx fifo is empty (emptied) + * spi host done event irq is not generated unless rx fifo is empty (emptied)   * so we need rx tmp buffer to use for rx dma if user does not provide one   */  static int au1550_spi_dma_rxtmp_alloc(struct au1550_spi *hw, unsigned int size) @@ -303,7 +303,7 @@ static void au1550_spi_dma_rxtmp_free(struct au1550_spi *hw)  static int au1550_spi_dma_txrxb(struct spi_device *spi, struct spi_transfer *t)  { -	struct au1550_spi *hw = spi_master_get_devdata(spi->master); +	struct au1550_spi *hw = spi_controller_get_devdata(spi->controller);  	dma_addr_t dma_tx_addr;  	dma_addr_t dma_rx_addr;  	u32 res; @@ -387,7 +387,7 @@ static int au1550_spi_dma_txrxb(struct spi_device *spi, struct spi_transfer *t)  	hw->regs->psc_spipcr = PSC_SPIPCR_MS;  	wmb(); /* drain writebuffer */ -	wait_for_completion(&hw->master_done); +	wait_for_completion(&hw->host_done);  	au1xxx_dbdma_stop(hw->dma_tx_ch);  	au1xxx_dbdma_stop(hw->dma_rx_ch); @@ -449,7 +449,7 @@ static irqreturn_t au1550_spi_dma_irq_callback(struct au1550_spi *hw)  				"dma transfer: unexpected SPI error (event=0x%x stat=0x%x)!\n",  				evnt, stat); -		complete(&hw->master_done); +		complete(&hw->host_done);  		return IRQ_HANDLED;  	} @@ -458,7 +458,7 @@ static irqreturn_t au1550_spi_dma_irq_callback(struct au1550_spi *hw)  		au1550_spi_mask_ack_all(hw);  		hw->rx_count = hw->len;  		hw->tx_count = hw->len; -		complete(&hw->master_done); +		complete(&hw->host_done);  	}  	return IRQ_HANDLED;  } @@ -502,7 +502,7 @@ AU1550_SPI_TX_WORD(32, 0xffffff)  static int au1550_spi_pio_txrxb(struct spi_device *spi, struct spi_transfer *t)  {  	u32 stat, mask; -	struct au1550_spi *hw = spi_master_get_devdata(spi->master); +	struct au1550_spi *hw = spi_controller_get_devdata(spi->controller);  	hw->tx = t->tx_buf;  	hw->rx = t->rx_buf; @@ -537,7 +537,7 @@ static int au1550_spi_pio_txrxb(struct spi_device *spi, struct spi_transfer *t)  	hw->regs->psc_spipcr = PSC_SPIPCR_MS;  	wmb(); /* drain writebuffer */ -	wait_for_completion(&hw->master_done); +	wait_for_completion(&hw->host_done);  	return min(hw->rx_count, hw->tx_count);  } @@ -568,7 +568,7 @@ static irqreturn_t au1550_spi_pio_irq_callback(struct au1550_spi *hw)  		dev_err(hw->dev,  			"pio transfer: unexpected SPI error (event=0x%x stat=0x%x)!\n",  			evnt, stat); -		complete(&hw->master_done); +		complete(&hw->host_done);  		return IRQ_HANDLED;  	} @@ -605,11 +605,11 @@ static irqreturn_t au1550_spi_pio_irq_callback(struct au1550_spi *hw)  	/*  	 * Restart the SPI transmission in case of a transmit underflow.  	 * This seems to work despite the notes in the Au1550 data book -	 * of Figure 8-4 with flowchart for SPI master operation: +	 * of Figure 8-4 with flowchart for SPI host operation:  	 *  	 * """Note 1: An XFR Error Interrupt occurs, unless masked,  	 * for any of the following events: Tx FIFO Underflow, -	 * Rx FIFO Overflow, or Multiple-master Error +	 * Rx FIFO Overflow, or Multiple-host Error  	 *    Note 2: In case of a Tx Underflow Error, all zeroes are  	 * transmitted."""  	 * @@ -627,14 +627,14 @@ static irqreturn_t au1550_spi_pio_irq_callback(struct au1550_spi *hw)  	if (hw->rx_count >= hw->len) {  		/* transfer completed successfully */  		au1550_spi_mask_ack_all(hw); -		complete(&hw->master_done); +		complete(&hw->host_done);  	}  	return IRQ_HANDLED;  }  static int au1550_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)  { -	struct au1550_spi *hw = spi_master_get_devdata(spi->master); +	struct au1550_spi *hw = spi_controller_get_devdata(spi->controller);  	return hw->txrx_bufs(spi, t);  } @@ -723,24 +723,24 @@ static void au1550_spi_setup_psc_as_spi(struct au1550_spi *hw)  static int au1550_spi_probe(struct platform_device *pdev)  {  	struct au1550_spi *hw; -	struct spi_master *master; +	struct spi_controller *host;  	struct resource *r;  	int err = 0; -	master = spi_alloc_master(&pdev->dev, sizeof(struct au1550_spi)); -	if (master == NULL) { -		dev_err(&pdev->dev, "No memory for spi_master\n"); +	host = spi_alloc_host(&pdev->dev, sizeof(struct au1550_spi)); +	if (host == NULL) { +		dev_err(&pdev->dev, "No memory for spi_controller\n");  		err = -ENOMEM;  		goto err_nomem;  	}  	/* the spi->mode bits understood by this driver: */ -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 24); +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 24); -	hw = spi_master_get_devdata(master); +	hw = spi_controller_get_devdata(host); -	hw->master = master; +	hw->host = host;  	hw->pdata = dev_get_platdata(&pdev->dev);  	hw->dev = &pdev->dev; @@ -798,9 +798,9 @@ static int au1550_spi_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, hw); -	init_completion(&hw->master_done); +	init_completion(&hw->host_done); -	hw->bitbang.master = hw->master; +	hw->bitbang.master = hw->host;  	hw->bitbang.setup_transfer = au1550_spi_setupxfer;  	hw->bitbang.chipselect = au1550_spi_chipsel;  	hw->bitbang.txrx_bufs = au1550_spi_txrx_bufs; @@ -858,8 +858,8 @@ static int au1550_spi_probe(struct platform_device *pdev)  		goto err_no_irq;  	} -	master->bus_num = pdev->id; -	master->num_chipselect = hw->pdata->num_chipselect; +	host->bus_num = pdev->id; +	host->num_chipselect = hw->pdata->num_chipselect;  	/*  	 *  precompute valid range for spi freq - from au1550 datasheet: @@ -874,8 +874,8 @@ static int au1550_spi_probe(struct platform_device *pdev)  		int min_div = (2 << 0) * (2 * (4 + 1));  		int max_div = (2 << 3) * (2 * (63 + 1)); -		master->max_speed_hz = hw->pdata->mainclk_hz / min_div; -		master->min_speed_hz = +		host->max_speed_hz = hw->pdata->mainclk_hz / min_div; +		host->min_speed_hz =  				hw->pdata->mainclk_hz / (max_div + 1) + 1;  	} @@ -883,13 +883,13 @@ static int au1550_spi_probe(struct platform_device *pdev)  	err = spi_bitbang_start(&hw->bitbang);  	if (err) { -		dev_err(&pdev->dev, "Failed to register SPI master\n"); +		dev_err(&pdev->dev, "Failed to register SPI host\n");  		goto err_register;  	}  	dev_info(&pdev->dev, -		"spi master registered: bus_num=%d num_chipselect=%d\n", -		master->bus_num, master->num_chipselect); +		"spi host registered: bus_num=%d num_chipselect=%d\n", +		host->bus_num, host->num_chipselect);  	return 0; @@ -917,7 +917,7 @@ err_ioremap:  err_no_iores:  err_no_pdata: -	spi_master_put(hw->master); +	spi_controller_put(hw->host);  err_nomem:  	return err; @@ -927,8 +927,8 @@ static void au1550_spi_remove(struct platform_device *pdev)  {  	struct au1550_spi *hw = platform_get_drvdata(pdev); -	dev_info(&pdev->dev, "spi master remove: bus_num=%d\n", -		hw->master->bus_num); +	dev_info(&pdev->dev, "spi host remove: bus_num=%d\n", +		hw->host->bus_num);  	spi_bitbang_stop(&hw->bitbang);  	free_irq(hw->irq, hw); @@ -941,7 +941,7 @@ static void au1550_spi_remove(struct platform_device *pdev)  		au1xxx_dbdma_chan_free(hw->dma_tx_ch);  	} -	spi_master_put(hw->master); +	spi_controller_put(hw->host);  }  /* work with hotplug and coldplug */ diff --git a/drivers/spi/spi-axi-spi-engine.c b/drivers/spi/spi-axi-spi-engine.c index 89661f3b0d44..0258c9a72fdc 100644 --- a/drivers/spi/spi-axi-spi-engine.c +++ b/drivers/spi/spi-axi-spi-engine.c @@ -356,8 +356,8 @@ static bool spi_engine_read_rx_fifo(struct spi_engine *spi_engine)  static irqreturn_t spi_engine_irq(int irq, void *devid)  { -	struct spi_master *master = devid; -	struct spi_engine *spi_engine = spi_master_get_devdata(master); +	struct spi_controller *host = devid; +	struct spi_engine *spi_engine = spi_controller_get_devdata(host);  	unsigned int disable_int = 0;  	unsigned int pending; @@ -396,7 +396,7 @@ static irqreturn_t spi_engine_irq(int irq, void *devid)  			msg->status = 0;  			msg->actual_length = msg->frame_length;  			spi_engine->msg = NULL; -			spi_finalize_current_message(master); +			spi_finalize_current_message(host);  			disable_int |= SPI_ENGINE_INT_SYNC;  		}  	} @@ -412,11 +412,11 @@ static irqreturn_t spi_engine_irq(int irq, void *devid)  	return IRQ_HANDLED;  } -static int spi_engine_transfer_one_message(struct spi_master *master, +static int spi_engine_transfer_one_message(struct spi_controller *host,  	struct spi_message *msg)  {  	struct spi_engine_program p_dry, *p; -	struct spi_engine *spi_engine = spi_master_get_devdata(master); +	struct spi_engine *spi_engine = spi_controller_get_devdata(host);  	unsigned int int_enable = 0;  	unsigned long flags;  	size_t size; @@ -464,42 +464,42 @@ static int spi_engine_transfer_one_message(struct spi_master *master,  static int spi_engine_probe(struct platform_device *pdev)  {  	struct spi_engine *spi_engine; -	struct spi_master *master; +	struct spi_controller *host;  	unsigned int version;  	int irq;  	int ret;  	irq = platform_get_irq(pdev, 0); -	if (irq <= 0) -		return -ENXIO; +	if (irq < 0) +		return irq;  	spi_engine = devm_kzalloc(&pdev->dev, sizeof(*spi_engine), GFP_KERNEL);  	if (!spi_engine)  		return -ENOMEM; -	master = spi_alloc_master(&pdev->dev, 0); -	if (!master) +	host = spi_alloc_host(&pdev->dev, 0); +	if (!host)  		return -ENOMEM; -	spi_master_set_devdata(master, spi_engine); +	spi_controller_set_devdata(host, spi_engine);  	spin_lock_init(&spi_engine->lock);  	spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk");  	if (IS_ERR(spi_engine->clk)) {  		ret = PTR_ERR(spi_engine->clk); -		goto err_put_master; +		goto err_put_host;  	}  	spi_engine->ref_clk = devm_clk_get(&pdev->dev, "spi_clk");  	if (IS_ERR(spi_engine->ref_clk)) {  		ret = PTR_ERR(spi_engine->ref_clk); -		goto err_put_master; +		goto err_put_host;  	}  	ret = clk_prepare_enable(spi_engine->clk);  	if (ret) -		goto err_put_master; +		goto err_put_host;  	ret = clk_prepare_enable(spi_engine->ref_clk);  	if (ret) @@ -525,46 +525,46 @@ static int spi_engine_probe(struct platform_device *pdev)  	writel_relaxed(0xff, spi_engine->base + SPI_ENGINE_REG_INT_PENDING);  	writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_INT_ENABLE); -	ret = request_irq(irq, spi_engine_irq, 0, pdev->name, master); +	ret = request_irq(irq, spi_engine_irq, 0, pdev->name, host);  	if (ret)  		goto err_ref_clk_disable; -	master->dev.of_node = pdev->dev.of_node; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_3WIRE; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->max_speed_hz = clk_get_rate(spi_engine->ref_clk) / 2; -	master->transfer_one_message = spi_engine_transfer_one_message; -	master->num_chipselect = 8; +	host->dev.of_node = pdev->dev.of_node; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_3WIRE; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->max_speed_hz = clk_get_rate(spi_engine->ref_clk) / 2; +	host->transfer_one_message = spi_engine_transfer_one_message; +	host->num_chipselect = 8; -	ret = spi_register_master(master); +	ret = spi_register_controller(host);  	if (ret)  		goto err_free_irq; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host);  	return 0;  err_free_irq: -	free_irq(irq, master); +	free_irq(irq, host);  err_ref_clk_disable:  	clk_disable_unprepare(spi_engine->ref_clk);  err_clk_disable:  	clk_disable_unprepare(spi_engine->clk); -err_put_master: -	spi_master_put(master); +err_put_host: +	spi_controller_put(host);  	return ret;  }  static void spi_engine_remove(struct platform_device *pdev)  { -	struct spi_master *master = spi_master_get(platform_get_drvdata(pdev)); -	struct spi_engine *spi_engine = spi_master_get_devdata(master); +	struct spi_controller *host = spi_controller_get(platform_get_drvdata(pdev)); +	struct spi_engine *spi_engine = spi_controller_get_devdata(host);  	int irq = platform_get_irq(pdev, 0); -	spi_unregister_master(master); +	spi_unregister_controller(host); -	free_irq(irq, master); +	free_irq(irq, host); -	spi_master_put(master); +	spi_controller_put(host);  	writel_relaxed(0xff, spi_engine->base + SPI_ENGINE_REG_INT_PENDING);  	writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_INT_ENABLE); diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c index d91dfbe47aa5..ef08fcac2f6d 100644 --- a/drivers/spi/spi-bcm-qspi.c +++ b/drivers/spi/spi-bcm-qspi.c @@ -220,7 +220,7 @@ struct qspi_trans {  struct bcm_qspi {  	struct platform_device *pdev; -	struct spi_master *master; +	struct spi_controller *host;  	struct clk *clk;  	u32 base_clk;  	u32 max_speed_hz; @@ -732,7 +732,7 @@ static bool bcm_qspi_mspi_transfer_is_last(struct bcm_qspi *qspi,  					   struct qspi_trans *qt)  {  	if (qt->mspi_last_trans && -	    spi_transfer_is_last(qspi->master, qt->trans)) +	    spi_transfer_is_last(qspi->host, qt->trans))  		return true;  	else  		return false; @@ -979,7 +979,7 @@ static int write_to_hw(struct bcm_qspi *qspi, struct spi_device *spi)  		mspi_cdram |= ((tp.trans->bits_per_word <= 8) ? 0 :  			       MSPI_CDRAM_BITSE_BIT); -		/* set 3wrire halfduplex mode data from master to slave */ +		/* set 3wrire halfduplex mode data from host to target */  		if ((spi->mode & SPI_3WIRE) && tp.trans->tx_buf)  			mspi_cdram |= MSPI_CDRAM_OUTP; @@ -1035,7 +1035,7 @@ done:  static int bcm_qspi_bspi_exec_mem_op(struct spi_device *spi,  				     const struct spi_mem_op *op)  { -	struct bcm_qspi *qspi = spi_master_get_devdata(spi->master); +	struct bcm_qspi *qspi = spi_controller_get_devdata(spi->controller);  	u32 addr = 0, len, rdlen, len_words, from = 0;  	int ret = 0;  	unsigned long timeo = msecs_to_jiffies(100); @@ -1118,11 +1118,11 @@ static int bcm_qspi_bspi_exec_mem_op(struct spi_device *spi,  	return ret;  } -static int bcm_qspi_transfer_one(struct spi_master *master, +static int bcm_qspi_transfer_one(struct spi_controller *host,  				 struct spi_device *spi,  				 struct spi_transfer *trans)  { -	struct bcm_qspi *qspi = spi_master_get_devdata(master); +	struct bcm_qspi *qspi = spi_controller_get_devdata(host);  	int slots;  	unsigned long timeo = msecs_to_jiffies(100); @@ -1150,8 +1150,8 @@ static int bcm_qspi_transfer_one(struct spi_master *master,  static int bcm_qspi_mspi_exec_mem_op(struct spi_device *spi,  				     const struct spi_mem_op *op)  { -	struct spi_master *master = spi->master; -	struct bcm_qspi *qspi = spi_master_get_devdata(master); +	struct spi_controller *host = spi->controller; +	struct bcm_qspi *qspi = spi_controller_get_devdata(host);  	struct spi_transfer t[2];  	u8 cmd[6] = { };  	int ret, i; @@ -1171,7 +1171,7 @@ static int bcm_qspi_mspi_exec_mem_op(struct spi_device *spi,  	t[0].tx_nbits = op->cmd.buswidth;  	/* lets mspi know that this is not last transfer */  	qspi->trans_pos.mspi_last_trans = false; -	ret = bcm_qspi_transfer_one(master, spi, &t[0]); +	ret = bcm_qspi_transfer_one(host, spi, &t[0]);  	/* rx */  	qspi->trans_pos.mspi_last_trans = true; @@ -1181,7 +1181,7 @@ static int bcm_qspi_mspi_exec_mem_op(struct spi_device *spi,  		t[1].len = op->data.nbytes;  		t[1].rx_nbits =  op->data.buswidth;  		t[1].bits_per_word = spi->bits_per_word; -		ret = bcm_qspi_transfer_one(master, spi, &t[1]); +		ret = bcm_qspi_transfer_one(host, spi, &t[1]);  	}  	return ret; @@ -1191,7 +1191,7 @@ static int bcm_qspi_exec_mem_op(struct spi_mem *mem,  				const struct spi_mem_op *op)  {  	struct spi_device *spi = mem->spi; -	struct bcm_qspi *qspi = spi_master_get_devdata(spi->master); +	struct bcm_qspi *qspi = spi_controller_get_devdata(spi->controller);  	int ret = 0;  	bool mspi_read = false;  	u32 addr = 0, len; @@ -1486,7 +1486,7 @@ int bcm_qspi_probe(struct platform_device *pdev,  	const struct bcm_qspi_data *data;  	struct device *dev = &pdev->dev;  	struct bcm_qspi *qspi; -	struct spi_master *master; +	struct spi_controller *host;  	struct resource *res;  	int irq, ret = 0, num_ints = 0;  	u32 val; @@ -1504,13 +1504,13 @@ int bcm_qspi_probe(struct platform_device *pdev,  	data = of_id->data; -	master = devm_spi_alloc_master(dev, sizeof(struct bcm_qspi)); -	if (!master) { -		dev_err(dev, "error allocating spi_master\n"); +	host = devm_spi_alloc_host(dev, sizeof(struct bcm_qspi)); +	if (!host) { +		dev_err(dev, "error allocating spi_controller\n");  		return -ENOMEM;  	} -	qspi = spi_master_get_devdata(master); +	qspi = spi_controller_get_devdata(host);  	qspi->clk = devm_clk_get_optional(&pdev->dev, NULL);  	if (IS_ERR(qspi->clk)) @@ -1520,23 +1520,23 @@ int bcm_qspi_probe(struct platform_device *pdev,  	qspi->trans_pos.trans = NULL;  	qspi->trans_pos.byte = 0;  	qspi->trans_pos.mspi_last_trans = true; -	qspi->master = master; +	qspi->host = host; -	master->bus_num = -1; -	master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_RX_DUAL | SPI_RX_QUAD | +	host->bus_num = -1; +	host->mode_bits = SPI_CPHA | SPI_CPOL | SPI_RX_DUAL | SPI_RX_QUAD |  				SPI_3WIRE; -	master->setup = bcm_qspi_setup; -	master->transfer_one = bcm_qspi_transfer_one; -	master->mem_ops = &bcm_qspi_mem_ops; -	master->cleanup = bcm_qspi_cleanup; -	master->dev.of_node = dev->of_node; -	master->num_chipselect = NUM_CHIPSELECT; -	master->use_gpio_descriptors = true; +	host->setup = bcm_qspi_setup; +	host->transfer_one = bcm_qspi_transfer_one; +	host->mem_ops = &bcm_qspi_mem_ops; +	host->cleanup = bcm_qspi_cleanup; +	host->dev.of_node = dev->of_node; +	host->num_chipselect = NUM_CHIPSELECT; +	host->use_gpio_descriptors = true;  	qspi->big_endian = of_device_is_big_endian(dev->of_node);  	if (!of_property_read_u32(dev->of_node, "num-cs", &val)) -		master->num_chipselect = val; +		host->num_chipselect = val;  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hif_mspi");  	if (!res) @@ -1659,9 +1659,9 @@ int bcm_qspi_probe(struct platform_device *pdev,  	qspi->xfer_mode.addrlen = -1;  	qspi->xfer_mode.hp = -1; -	ret = spi_register_master(master); +	ret = spi_register_controller(host);  	if (ret < 0) { -		dev_err(dev, "can't register master\n"); +		dev_err(dev, "can't register host\n");  		goto qspi_reg_err;  	} @@ -1682,7 +1682,7 @@ void bcm_qspi_remove(struct platform_device *pdev)  {  	struct bcm_qspi *qspi = platform_get_drvdata(pdev); -	spi_unregister_master(qspi->master); +	spi_unregister_controller(qspi->host);  	bcm_qspi_hw_uninit(qspi);  	clk_disable_unprepare(qspi->clk);  	kfree(qspi->dev_ids); @@ -1700,7 +1700,7 @@ static int __maybe_unused bcm_qspi_suspend(struct device *dev)  		qspi->s3_strap_override_ctrl =  			bcm_qspi_read(qspi, BSPI, BSPI_STRAP_OVERRIDE_CTRL); -	spi_master_suspend(qspi->master); +	spi_controller_suspend(qspi->host);  	clk_disable_unprepare(qspi->clk);  	bcm_qspi_hw_uninit(qspi); @@ -1721,7 +1721,7 @@ static int __maybe_unused bcm_qspi_resume(struct device *dev)  	ret = clk_prepare_enable(qspi->clk);  	if (!ret) -		spi_master_resume(qspi->master); +		spi_controller_resume(qspi->host);  	return ret;  } diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c index 3b253da98c05..e7bb2714678a 100644 --- a/drivers/spi/spi-bcm2835.c +++ b/drivers/spi/spi-bcm2835.c @@ -24,7 +24,7 @@  #include <linux/module.h>  #include <linux/of.h>  #include <linux/of_address.h> -#include <linux/of_device.h> +#include <linux/platform_device.h>  #include <linux/gpio/consumer.h>  #include <linux/gpio/machine.h> /* FIXME: using chip internals */  #include <linux/gpio/driver.h> /* FIXME: using chip internals */ @@ -105,7 +105,7 @@ MODULE_PARM_DESC(polling_limit_us,   *      These are counted as well in @count_transfer_polling and   *      @count_transfer_irq   * @count_transfer_dma: count how often dma mode is used - * @slv: SPI slave currently selected + * @target: SPI target currently selected   *	(used by bcm2835_spi_dma_tx_done() to write @clear_rx_cs)   * @tx_dma_active: whether a TX DMA descriptor is in progress   * @rx_dma_active: whether a RX DMA descriptor is in progress @@ -135,7 +135,7 @@ struct bcm2835_spi {  	u64 count_transfer_irq_after_polling;  	u64 count_transfer_dma; -	struct bcm2835_spidev *slv; +	struct bcm2835_spidev *target;  	unsigned int tx_dma_active;  	unsigned int rx_dma_active;  	struct dma_async_tx_descriptor *fill_tx_desc; @@ -143,14 +143,14 @@ struct bcm2835_spi {  };  /** - * struct bcm2835_spidev - BCM2835 SPI slave + * struct bcm2835_spidev - BCM2835 SPI target   * @prepare_cs: precalculated CS register value for ->prepare_message() - *	(uses slave-specific clock polarity and phase settings) + *	(uses target-specific clock polarity and phase settings)   * @clear_rx_desc: preallocated RX DMA descriptor used for TX-only transfers   *	(cyclically clears RX FIFO by writing @clear_rx_cs to CS register)   * @clear_rx_addr: bus address of @clear_rx_cs   * @clear_rx_cs: precalculated CS register value to clear RX FIFO - *	(uses slave-specific clock polarity and phase settings) + *	(uses target-specific clock polarity and phase settings)   */  struct bcm2835_spidev {  	u32 prepare_cs; @@ -434,7 +434,7 @@ static int bcm2835_spi_transfer_one_irq(struct spi_controller *ctlr,  /**   * bcm2835_spi_transfer_prologue() - transfer first few bytes without DMA - * @ctlr: SPI master controller + * @ctlr: SPI host controller   * @tfr: SPI transfer   * @bs: BCM2835 SPI controller   * @cs: CS register @@ -596,7 +596,7 @@ out:  /**   * bcm2835_spi_dma_rx_done() - callback for DMA RX channel - * @data: SPI master controller + * @data: SPI host controller   *   * Used for bidirectional and RX-only transfers.   */ @@ -624,7 +624,7 @@ static void bcm2835_spi_dma_rx_done(void *data)  /**   * bcm2835_spi_dma_tx_done() - callback for DMA TX channel - * @data: SPI master controller + * @data: SPI host controller   *   * Used for TX-only transfers.   */ @@ -635,7 +635,7 @@ static void bcm2835_spi_dma_tx_done(void *data)  	/* busy-wait for TX FIFO to empty */  	while (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_DONE)) -		bcm2835_wr(bs, BCM2835_SPI_CS, bs->slv->clear_rx_cs); +		bcm2835_wr(bs, BCM2835_SPI_CS, bs->target->clear_rx_cs);  	bs->tx_dma_active = false;  	smp_wmb(); @@ -655,10 +655,10 @@ static void bcm2835_spi_dma_tx_done(void *data)  /**   * bcm2835_spi_prepare_sg() - prepare and submit DMA descriptor for sglist - * @ctlr: SPI master controller + * @ctlr: SPI host controller   * @tfr: SPI transfer   * @bs: BCM2835 SPI controller - * @slv: BCM2835 SPI slave + * @target: BCM2835 SPI target   * @is_tx: whether to submit DMA descriptor for TX or RX sglist   *   * Prepare and submit a DMA descriptor for the TX or RX sglist of @tfr. @@ -667,7 +667,7 @@ static void bcm2835_spi_dma_tx_done(void *data)  static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,  				  struct spi_transfer *tfr,  				  struct bcm2835_spi *bs, -				  struct bcm2835_spidev *slv, +				  struct bcm2835_spidev *target,  				  bool is_tx)  {  	struct dma_chan *chan; @@ -707,7 +707,7 @@ static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,  	} else if (!tfr->rx_buf) {  		desc->callback = bcm2835_spi_dma_tx_done;  		desc->callback_param = ctlr; -		bs->slv = slv; +		bs->target = target;  	}  	/* submit it to DMA-engine */ @@ -718,9 +718,9 @@ static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,  /**   * bcm2835_spi_transfer_one_dma() - perform SPI transfer using DMA engine - * @ctlr: SPI master controller + * @ctlr: SPI host controller   * @tfr: SPI transfer - * @slv: BCM2835 SPI slave + * @target: BCM2835 SPI target   * @cs: CS register   *   * For *bidirectional* transfers (both tx_buf and rx_buf are non-%NULL), set up @@ -732,7 +732,7 @@ static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,   * clear the RX FIFO by setting the CLEAR_RX bit in the CS register.   *   * The CS register value is precalculated in bcm2835_spi_setup().  Normally - * this is called only once, on slave registration.  A DMA descriptor to write + * this is called only once, on target registration.  A DMA descriptor to write   * this value is preallocated in bcm2835_dma_init().  All that's left to do   * when performing a TX-only transfer is to submit this descriptor to the RX   * DMA channel.  Latency is thereby minimized.  The descriptor does not @@ -765,7 +765,7 @@ static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,   */  static int bcm2835_spi_transfer_one_dma(struct spi_controller *ctlr,  					struct spi_transfer *tfr, -					struct bcm2835_spidev *slv, +					struct bcm2835_spidev *target,  					u32 cs)  {  	struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); @@ -783,7 +783,7 @@ static int bcm2835_spi_transfer_one_dma(struct spi_controller *ctlr,  	/* setup tx-DMA */  	if (bs->tx_buf) { -		ret = bcm2835_spi_prepare_sg(ctlr, tfr, bs, slv, true); +		ret = bcm2835_spi_prepare_sg(ctlr, tfr, bs, target, true);  	} else {  		cookie = dmaengine_submit(bs->fill_tx_desc);  		ret = dma_submit_error(cookie); @@ -809,9 +809,9 @@ static int bcm2835_spi_transfer_one_dma(struct spi_controller *ctlr,  	 * this saves 10us or more.  	 */  	if (bs->rx_buf) { -		ret = bcm2835_spi_prepare_sg(ctlr, tfr, bs, slv, false); +		ret = bcm2835_spi_prepare_sg(ctlr, tfr, bs, target, false);  	} else { -		cookie = dmaengine_submit(slv->clear_rx_desc); +		cookie = dmaengine_submit(target->clear_rx_desc);  		ret = dma_submit_error(cookie);  	}  	if (ret) { @@ -903,15 +903,15 @@ static int bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev,  	/* get tx/rx dma */  	ctlr->dma_tx = dma_request_chan(dev, "tx");  	if (IS_ERR(ctlr->dma_tx)) { -		dev_err(dev, "no tx-dma configuration found - not using dma mode\n"); -		ret = PTR_ERR(ctlr->dma_tx); +		ret = dev_err_probe(dev, PTR_ERR(ctlr->dma_tx), +			"no tx-dma configuration found - not using dma mode\n");  		ctlr->dma_tx = NULL;  		goto err;  	}  	ctlr->dma_rx = dma_request_chan(dev, "rx");  	if (IS_ERR(ctlr->dma_rx)) { -		dev_err(dev, "no rx-dma configuration found - not using dma mode\n"); -		ret = PTR_ERR(ctlr->dma_rx); +		ret = dev_err_probe(dev, PTR_ERR(ctlr->dma_rx), +			"no rx-dma configuration found - not using dma mode\n");  		ctlr->dma_rx = NULL;  		goto err_release;  	} @@ -1050,10 +1050,10 @@ static int bcm2835_spi_transfer_one(struct spi_controller *ctlr,  				    struct spi_transfer *tfr)  {  	struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); -	struct bcm2835_spidev *slv = spi_get_ctldata(spi); +	struct bcm2835_spidev *target = spi_get_ctldata(spi);  	unsigned long spi_hz, cdiv;  	unsigned long hz_per_byte, byte_limit; -	u32 cs = slv->prepare_cs; +	u32 cs = target->prepare_cs;  	/* set clock */  	spi_hz = tfr->speed_hz; @@ -1101,7 +1101,7 @@ static int bcm2835_spi_transfer_one(struct spi_controller *ctlr,  	 * this 1 idle clock cycle pattern but runs the spi clock without gaps  	 */  	if (ctlr->can_dma && bcm2835_spi_can_dma(ctlr, spi, tfr)) -		return bcm2835_spi_transfer_one_dma(ctlr, tfr, slv, cs); +		return bcm2835_spi_transfer_one_dma(ctlr, tfr, target, cs);  	/* run in interrupt-mode */  	return bcm2835_spi_transfer_one_irq(ctlr, spi, tfr, cs, true); @@ -1112,7 +1112,7 @@ static int bcm2835_spi_prepare_message(struct spi_controller *ctlr,  {  	struct spi_device *spi = msg->spi;  	struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); -	struct bcm2835_spidev *slv = spi_get_ctldata(spi); +	struct bcm2835_spidev *target = spi_get_ctldata(spi);  	int ret;  	if (ctlr->can_dma) { @@ -1131,7 +1131,7 @@ static int bcm2835_spi_prepare_message(struct spi_controller *ctlr,  	 * Set up clock polarity before spi_transfer_one_message() asserts  	 * chip select to avoid a gratuitous clock signal edge.  	 */ -	bcm2835_wr(bs, BCM2835_SPI_CS, slv->prepare_cs); +	bcm2835_wr(bs, BCM2835_SPI_CS, target->prepare_cs);  	return 0;  } @@ -1163,51 +1163,51 @@ static int chip_match_name(struct gpio_chip *chip, void *data)  static void bcm2835_spi_cleanup(struct spi_device *spi)  { -	struct bcm2835_spidev *slv = spi_get_ctldata(spi); +	struct bcm2835_spidev *target = spi_get_ctldata(spi);  	struct spi_controller *ctlr = spi->controller; -	if (slv->clear_rx_desc) -		dmaengine_desc_free(slv->clear_rx_desc); +	if (target->clear_rx_desc) +		dmaengine_desc_free(target->clear_rx_desc); -	if (slv->clear_rx_addr) +	if (target->clear_rx_addr)  		dma_unmap_single(ctlr->dma_rx->device->dev, -				 slv->clear_rx_addr, +				 target->clear_rx_addr,  				 sizeof(u32),  				 DMA_TO_DEVICE); -	kfree(slv); +	kfree(target);  }  static int bcm2835_spi_setup_dma(struct spi_controller *ctlr,  				 struct spi_device *spi,  				 struct bcm2835_spi *bs, -				 struct bcm2835_spidev *slv) +				 struct bcm2835_spidev *target)  {  	int ret;  	if (!ctlr->dma_rx)  		return 0; -	slv->clear_rx_addr = dma_map_single(ctlr->dma_rx->device->dev, -					    &slv->clear_rx_cs, -					    sizeof(u32), -					    DMA_TO_DEVICE); -	if (dma_mapping_error(ctlr->dma_rx->device->dev, slv->clear_rx_addr)) { +	target->clear_rx_addr = dma_map_single(ctlr->dma_rx->device->dev, +					       &target->clear_rx_cs, +					       sizeof(u32), +					       DMA_TO_DEVICE); +	if (dma_mapping_error(ctlr->dma_rx->device->dev, target->clear_rx_addr)) {  		dev_err(&spi->dev, "cannot map clear_rx_cs\n"); -		slv->clear_rx_addr = 0; +		target->clear_rx_addr = 0;  		return -ENOMEM;  	} -	slv->clear_rx_desc = dmaengine_prep_dma_cyclic(ctlr->dma_rx, -						       slv->clear_rx_addr, -						       sizeof(u32), 0, -						       DMA_MEM_TO_DEV, 0); -	if (!slv->clear_rx_desc) { +	target->clear_rx_desc = dmaengine_prep_dma_cyclic(ctlr->dma_rx, +						          target->clear_rx_addr, +						          sizeof(u32), 0, +						          DMA_MEM_TO_DEV, 0); +	if (!target->clear_rx_desc) {  		dev_err(&spi->dev, "cannot prepare clear_rx_desc\n");  		return -ENOMEM;  	} -	ret = dmaengine_desc_set_reuse(slv->clear_rx_desc); +	ret = dmaengine_desc_set_reuse(target->clear_rx_desc);  	if (ret) {  		dev_err(&spi->dev, "cannot reuse clear_rx_desc\n");  		return ret; @@ -1220,26 +1220,26 @@ static int bcm2835_spi_setup(struct spi_device *spi)  {  	struct spi_controller *ctlr = spi->controller;  	struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); -	struct bcm2835_spidev *slv = spi_get_ctldata(spi); +	struct bcm2835_spidev *target = spi_get_ctldata(spi);  	struct gpio_chip *chip;  	int ret;  	u32 cs; -	if (!slv) { -		slv = kzalloc(ALIGN(sizeof(*slv), dma_get_cache_alignment()), +	if (!target) { +		target = kzalloc(ALIGN(sizeof(*target), dma_get_cache_alignment()),  			      GFP_KERNEL); -		if (!slv) +		if (!target)  			return -ENOMEM; -		spi_set_ctldata(spi, slv); +		spi_set_ctldata(spi, target); -		ret = bcm2835_spi_setup_dma(ctlr, spi, bs, slv); +		ret = bcm2835_spi_setup_dma(ctlr, spi, bs, target);  		if (ret)  			goto err_cleanup;  	}  	/* -	 * Precalculate SPI slave's CS register value for ->prepare_message(): +	 * Precalculate SPI target's CS register value for ->prepare_message():  	 * The driver always uses software-controlled GPIO chip select, hence  	 * set the hardware-controlled native chip select to an invalid value  	 * to prevent it from interfering. @@ -1249,18 +1249,18 @@ static int bcm2835_spi_setup(struct spi_device *spi)  		cs |= BCM2835_SPI_CS_CPOL;  	if (spi->mode & SPI_CPHA)  		cs |= BCM2835_SPI_CS_CPHA; -	slv->prepare_cs = cs; +	target->prepare_cs = cs;  	/* -	 * Precalculate SPI slave's CS register value to clear RX FIFO +	 * Precalculate SPI target's CS register value to clear RX FIFO  	 * in case of a TX-only DMA transfer.  	 */  	if (ctlr->dma_rx) { -		slv->clear_rx_cs = cs | BCM2835_SPI_CS_TA | +		target->clear_rx_cs = cs | BCM2835_SPI_CS_TA |  					BCM2835_SPI_CS_DMAEN |  					BCM2835_SPI_CS_CLEAR_RX;  		dma_sync_single_for_device(ctlr->dma_rx->device->dev, -					   slv->clear_rx_addr, +					   target->clear_rx_addr,  					   sizeof(u32),  					   DMA_TO_DEVICE);  	} @@ -1328,7 +1328,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)  	struct bcm2835_spi *bs;  	int err; -	ctlr = devm_spi_alloc_master(&pdev->dev, sizeof(*bs)); +	ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(*bs));  	if (!ctlr)  		return -ENOMEM; @@ -1360,10 +1360,12 @@ static int bcm2835_spi_probe(struct platform_device *pdev)  	ctlr->max_speed_hz = clk_get_rate(bs->clk) / 2;  	bs->irq = platform_get_irq(pdev, 0); -	if (bs->irq <= 0) -		return bs->irq ? bs->irq : -ENODEV; +	if (bs->irq < 0) +		return bs->irq; -	clk_prepare_enable(bs->clk); +	err = clk_prepare_enable(bs->clk); +	if (err) +		return err;  	bs->clk_hz = clk_get_rate(bs->clk);  	err = bcm2835_dma_init(ctlr, &pdev->dev, bs); diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c index 288f7b994b36..6d2a5d9f2498 100644 --- a/drivers/spi/spi-bcm2835aux.c +++ b/drivers/spi/spi-bcm2835aux.c @@ -20,9 +20,7 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_address.h> -#include <linux/of_device.h> -#include <linux/of_irq.h> +#include <linux/platform_device.h>  #include <linux/regmap.h>  #include <linux/spi/spi.h>  #include <linux/spinlock.h> @@ -233,8 +231,8 @@ static void bcm2835aux_spi_transfer_helper(struct bcm2835aux_spi *bs)  static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)  { -	struct spi_master *master = dev_id; -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_id; +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	/* IRQ may be shared, so return if our interrupts are disabled */  	if (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_CNTL1) & @@ -253,17 +251,17 @@ static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)  	/* and if rx_len is 0 then disable interrupts and wake up completion */  	if (!bs->rx_len) {  		bcm2835aux_wr(bs, BCM2835_AUX_SPI_CNTL1, bs->cntl[1]); -		spi_finalize_current_transfer(master); +		spi_finalize_current_transfer(host);  	}  	return IRQ_HANDLED;  } -static int __bcm2835aux_spi_transfer_one_irq(struct spi_master *master, +static int __bcm2835aux_spi_transfer_one_irq(struct spi_controller *host,  					     struct spi_device *spi,  					     struct spi_transfer *tfr)  { -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	/* enable interrupts */  	bcm2835aux_wr(bs, BCM2835_AUX_SPI_CNTL1, bs->cntl[1] | @@ -274,11 +272,11 @@ static int __bcm2835aux_spi_transfer_one_irq(struct spi_master *master,  	return 1;  } -static int bcm2835aux_spi_transfer_one_irq(struct spi_master *master, +static int bcm2835aux_spi_transfer_one_irq(struct spi_controller *host,  					   struct spi_device *spi,  					   struct spi_transfer *tfr)  { -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	/* update statistics */  	bs->count_transfer_irq++; @@ -296,14 +294,14 @@ static int bcm2835aux_spi_transfer_one_irq(struct spi_master *master,  	}  	/* now run the interrupt mode */ -	return __bcm2835aux_spi_transfer_one_irq(master, spi, tfr); +	return __bcm2835aux_spi_transfer_one_irq(host, spi, tfr);  } -static int bcm2835aux_spi_transfer_one_poll(struct spi_master *master, +static int bcm2835aux_spi_transfer_one_poll(struct spi_controller *host,  					    struct spi_device *spi,  					struct spi_transfer *tfr)  { -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	unsigned long timeout;  	/* update statistics */ @@ -330,7 +328,7 @@ static int bcm2835aux_spi_transfer_one_poll(struct spi_master *master,  					    bs->tx_len, bs->rx_len);  			/* forward to interrupt handler */  			bs->count_transfer_irq_after_poll++; -			return __bcm2835aux_spi_transfer_one_irq(master, +			return __bcm2835aux_spi_transfer_one_irq(host,  							       spi, tfr);  		}  	} @@ -339,11 +337,11 @@ static int bcm2835aux_spi_transfer_one_poll(struct spi_master *master,  	return 0;  } -static int bcm2835aux_spi_transfer_one(struct spi_master *master, +static int bcm2835aux_spi_transfer_one(struct spi_controller *host,  				       struct spi_device *spi,  				       struct spi_transfer *tfr)  { -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	unsigned long spi_hz, clk_hz, speed;  	unsigned long hz_per_byte, byte_limit; @@ -394,17 +392,17 @@ static int bcm2835aux_spi_transfer_one(struct spi_master *master,  	/* run in polling mode for short transfers */  	if (tfr->len < byte_limit) -		return bcm2835aux_spi_transfer_one_poll(master, spi, tfr); +		return bcm2835aux_spi_transfer_one_poll(host, spi, tfr);  	/* run in interrupt mode for all others */ -	return bcm2835aux_spi_transfer_one_irq(master, spi, tfr); +	return bcm2835aux_spi_transfer_one_irq(host, spi, tfr);  } -static int bcm2835aux_spi_prepare_message(struct spi_master *master, +static int bcm2835aux_spi_prepare_message(struct spi_controller *host,  					  struct spi_message *msg)  {  	struct spi_device *spi = msg->spi; -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	bs->cntl[0] = BCM2835_AUX_SPI_CNTL0_ENABLE |  		      BCM2835_AUX_SPI_CNTL0_VAR_WIDTH | @@ -424,20 +422,20 @@ static int bcm2835aux_spi_prepare_message(struct spi_master *master,  	return 0;  } -static int bcm2835aux_spi_unprepare_message(struct spi_master *master, +static int bcm2835aux_spi_unprepare_message(struct spi_controller *host,  					    struct spi_message *msg)  { -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	bcm2835aux_spi_reset_hw(bs);  	return 0;  } -static void bcm2835aux_spi_handle_err(struct spi_master *master, +static void bcm2835aux_spi_handle_err(struct spi_controller *host,  				      struct spi_message *msg)  { -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	bcm2835aux_spi_reset_hw(bs);  } @@ -475,18 +473,18 @@ static int bcm2835aux_spi_setup(struct spi_device *spi)  static int bcm2835aux_spi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct bcm2835aux_spi *bs;  	unsigned long clk_hz;  	int err; -	master = devm_spi_alloc_master(&pdev->dev, sizeof(*bs)); -	if (!master) +	host = devm_spi_alloc_host(&pdev->dev, sizeof(*bs)); +	if (!host)  		return -ENOMEM; -	platform_set_drvdata(pdev, master); -	master->mode_bits = (SPI_CPOL | SPI_CS_HIGH | SPI_NO_CS); -	master->bits_per_word_mask = SPI_BPW_MASK(8); +	platform_set_drvdata(pdev, host); +	host->mode_bits = (SPI_CPOL | SPI_CS_HIGH | SPI_NO_CS); +	host->bits_per_word_mask = SPI_BPW_MASK(8);  	/* even though the driver never officially supported native CS  	 * allow a single native CS for legacy DT support purposes when  	 * no cs-gpio is configured. @@ -498,16 +496,16 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)  	 * * cs_delay_usec: cs is always deasserted one SCK cycle after  	 *     a spi_transfer  	 */ -	master->num_chipselect = 1; -	master->setup = bcm2835aux_spi_setup; -	master->transfer_one = bcm2835aux_spi_transfer_one; -	master->handle_err = bcm2835aux_spi_handle_err; -	master->prepare_message = bcm2835aux_spi_prepare_message; -	master->unprepare_message = bcm2835aux_spi_unprepare_message; -	master->dev.of_node = pdev->dev.of_node; -	master->use_gpio_descriptors = true; +	host->num_chipselect = 1; +	host->setup = bcm2835aux_spi_setup; +	host->transfer_one = bcm2835aux_spi_transfer_one; +	host->handle_err = bcm2835aux_spi_handle_err; +	host->prepare_message = bcm2835aux_spi_prepare_message; +	host->unprepare_message = bcm2835aux_spi_unprepare_message; +	host->dev.of_node = pdev->dev.of_node; +	host->use_gpio_descriptors = true; -	bs = spi_master_get_devdata(master); +	bs = spi_controller_get_devdata(host);  	/* the main area */  	bs->regs = devm_platform_ioremap_resource(pdev, 0); @@ -522,8 +520,8 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)  	}  	bs->irq = platform_get_irq(pdev, 0); -	if (bs->irq <= 0) -		return bs->irq ? bs->irq : -ENODEV; +	if (bs->irq < 0) +		return bs->irq;  	/* this also enables the HW block */  	err = clk_prepare_enable(bs->clk); @@ -546,15 +544,15 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)  	err = devm_request_irq(&pdev->dev, bs->irq,  			       bcm2835aux_spi_interrupt,  			       IRQF_SHARED, -			       dev_name(&pdev->dev), master); +			       dev_name(&pdev->dev), host);  	if (err) {  		dev_err(&pdev->dev, "could not request IRQ: %d\n", err);  		goto out_clk_disable;  	} -	err = spi_register_master(master); +	err = spi_register_controller(host);  	if (err) { -		dev_err(&pdev->dev, "could not register SPI master: %d\n", err); +		dev_err(&pdev->dev, "could not register SPI host: %d\n", err);  		goto out_clk_disable;  	} @@ -569,12 +567,12 @@ out_clk_disable:  static void bcm2835aux_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct bcm2835aux_spi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct bcm2835aux_spi *bs = spi_controller_get_devdata(host);  	bcm2835aux_debugfs_remove(bs); -	spi_unregister_master(master); +	spi_unregister_controller(host);  	bcm2835aux_spi_reset_hw(bs); diff --git a/drivers/spi/spi-bcm63xx-hsspi.c b/drivers/spi/spi-bcm63xx-hsspi.c index 9e218e143263..1ca857c2a4aa 100644 --- a/drivers/spi/spi-bcm63xx-hsspi.c +++ b/drivers/spi/spi-bcm63xx-hsspi.c @@ -149,7 +149,7 @@ static ssize_t wait_mode_show(struct device *dev, struct device_attribute *attr,  			 char *buf)  {  	struct spi_controller *ctrl = dev_get_drvdata(dev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(ctrl); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(ctrl);  	return sprintf(buf, "%d\n", bs->wait_mode);  } @@ -158,7 +158,7 @@ static ssize_t wait_mode_store(struct device *dev, struct device_attribute *attr  			  const char *buf, size_t count)  {  	struct spi_controller *ctrl = dev_get_drvdata(dev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(ctrl); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(ctrl);  	u32 val;  	if (kstrtou32(buf, 10, &val)) @@ -185,7 +185,7 @@ static ssize_t xfer_mode_show(struct device *dev, struct device_attribute *attr,  			 char *buf)  {  	struct spi_controller *ctrl = dev_get_drvdata(dev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(ctrl); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(ctrl);  	return sprintf(buf, "%d\n", bs->xfer_mode);  } @@ -194,7 +194,7 @@ static ssize_t xfer_mode_store(struct device *dev, struct device_attribute *attr  			  const char *buf, size_t count)  {  	struct spi_controller *ctrl = dev_get_drvdata(dev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(ctrl); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(ctrl);  	u32 val;  	if (kstrtou32(buf, 10, &val)) @@ -262,12 +262,12 @@ static int bcm63xx_hsspi_wait_cmd(struct bcm63xx_hsspi *bs)  	return rc;  } -static bool bcm63xx_prepare_prepend_transfer(struct spi_master *master, +static bool bcm63xx_prepare_prepend_transfer(struct spi_controller *host,  					  struct spi_message *msg,  					  struct spi_transfer *t_prepend)  { -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host);  	bool tx_only = false;  	struct spi_transfer *t; @@ -348,7 +348,7 @@ static bool bcm63xx_prepare_prepend_transfer(struct spi_master *master,  static int bcm63xx_hsspi_do_prepend_txrx(struct spi_device *spi,  					 struct spi_transfer *t)  { -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(spi->controller);  	unsigned int chip_select = spi_get_chipselect(spi, 0);  	u16 opcode = 0, val;  	const u8 *tx = t->tx_buf; @@ -467,7 +467,7 @@ static void bcm63xx_hsspi_set_clk(struct bcm63xx_hsspi *bs,  static int bcm63xx_hsspi_do_txrx(struct spi_device *spi, struct spi_transfer *t)  { -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(spi->controller);  	unsigned int chip_select = spi_get_chipselect(spi, 0);  	u16 opcode = 0, val;  	int pending = t->len; @@ -541,7 +541,7 @@ static int bcm63xx_hsspi_do_txrx(struct spi_device *spi, struct spi_transfer *t)  static int bcm63xx_hsspi_setup(struct spi_device *spi)  { -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(spi->controller);  	u32 reg;  	reg = __raw_readl(bs->regs + @@ -579,7 +579,7 @@ static int bcm63xx_hsspi_setup(struct spi_device *spi)  static int bcm63xx_hsspi_do_dummy_cs_txrx(struct spi_device *spi,  				      struct spi_message *msg)  { -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(spi->controller);  	int status = -EINVAL;  	int dummy_cs;  	bool keep_cs = false; @@ -653,10 +653,10 @@ static int bcm63xx_hsspi_do_dummy_cs_txrx(struct spi_device *spi,  	return status;  } -static int bcm63xx_hsspi_transfer_one(struct spi_master *master, +static int bcm63xx_hsspi_transfer_one(struct spi_controller *host,  				      struct spi_message *msg)  { -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host);  	struct spi_device *spi = msg->spi;  	int status = -EINVAL;  	bool prependable = false; @@ -665,7 +665,7 @@ static int bcm63xx_hsspi_transfer_one(struct spi_master *master,  	mutex_lock(&bs->msg_mutex);  	if (bs->xfer_mode != HSSPI_XFER_MODE_DUMMYCS) -		prependable = bcm63xx_prepare_prepend_transfer(master, msg, &t_prepend); +		prependable = bcm63xx_prepare_prepend_transfer(host, msg, &t_prepend);  	if (prependable) {  		status = bcm63xx_hsspi_do_prepend_txrx(spi, &t_prepend); @@ -681,7 +681,7 @@ static int bcm63xx_hsspi_transfer_one(struct spi_master *master,  	mutex_unlock(&bs->msg_mutex);  	msg->status = status; -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return 0;  } @@ -723,7 +723,7 @@ static irqreturn_t bcm63xx_hsspi_interrupt(int irq, void *dev_id)  static int bcm63xx_hsspi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct bcm63xx_hsspi *bs;  	void __iomem *regs;  	struct device *dev = &pdev->dev; @@ -779,13 +779,13 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)  		}  	} -	master = spi_alloc_master(&pdev->dev, sizeof(*bs)); -	if (!master) { +	host = spi_alloc_host(&pdev->dev, sizeof(*bs)); +	if (!host) {  		ret = -ENOMEM;  		goto out_disable_pll_clk;  	} -	bs = spi_master_get_devdata(master); +	bs = spi_controller_get_devdata(host);  	bs->pdev = pdev;  	bs->clk = clk;  	bs->pll_clk = pll_clk; @@ -796,17 +796,17 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)  	bs->prepend_buf = devm_kzalloc(dev, HSSPI_BUFFER_LEN, GFP_KERNEL);  	if (!bs->prepend_buf) {  		ret = -ENOMEM; -		goto out_put_master; +		goto out_put_host;  	}  	mutex_init(&bs->bus_mutex);  	mutex_init(&bs->msg_mutex);  	init_completion(&bs->done); -	master->mem_ops = &bcm63xx_hsspi_mem_ops; -	master->dev.of_node = dev->of_node; +	host->mem_ops = &bcm63xx_hsspi_mem_ops; +	host->dev.of_node = dev->of_node;  	if (!dev->of_node) -		master->bus_num = HSSPI_BUS_NUM; +		host->bus_num = HSSPI_BUS_NUM;  	of_property_read_u32(dev->of_node, "num-cs", &num_cs);  	if (num_cs > 8) { @@ -814,18 +814,18 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)  			 num_cs);  		num_cs = HSSPI_SPI_MAX_CS;  	} -	master->num_chipselect = num_cs; -	master->setup = bcm63xx_hsspi_setup; -	master->transfer_one_message = bcm63xx_hsspi_transfer_one; -	master->max_transfer_size = bcm63xx_hsspi_max_message_size; -	master->max_message_size = bcm63xx_hsspi_max_message_size; +	host->num_chipselect = num_cs; +	host->setup = bcm63xx_hsspi_setup; +	host->transfer_one_message = bcm63xx_hsspi_transfer_one; +	host->max_transfer_size = bcm63xx_hsspi_max_message_size; +	host->max_message_size = bcm63xx_hsspi_max_message_size; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH |  			    SPI_RX_DUAL | SPI_TX_DUAL; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->auto_runtime_pm = true; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->auto_runtime_pm = true; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host);  	/* Initialize the hardware */  	__raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); @@ -844,7 +844,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)  				       pdev->name, bs);  		if (ret) -			goto out_put_master; +			goto out_put_host;  	}  	pm_runtime_enable(&pdev->dev); @@ -856,7 +856,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)  	}  	/* register and we are done */ -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret)  		goto out_sysgroup_disable; @@ -868,8 +868,8 @@ out_sysgroup_disable:  	sysfs_remove_group(&pdev->dev.kobj, &bcm63xx_hsspi_group);  out_pm_disable:  	pm_runtime_disable(&pdev->dev); -out_put_master: -	spi_master_put(master); +out_put_host: +	spi_controller_put(host);  out_disable_pll_clk:  	clk_disable_unprepare(pll_clk);  out_disable_clk: @@ -880,8 +880,8 @@ out_disable_clk:  static void bcm63xx_hsspi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host);  	/* reset the hardware and block queue progress */  	__raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); @@ -893,10 +893,10 @@ static void bcm63xx_hsspi_remove(struct platform_device *pdev)  #ifdef CONFIG_PM_SLEEP  static int bcm63xx_hsspi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host); -	spi_master_suspend(master); +	spi_controller_suspend(host);  	clk_disable_unprepare(bs->pll_clk);  	clk_disable_unprepare(bs->clk); @@ -905,8 +905,8 @@ static int bcm63xx_hsspi_suspend(struct device *dev)  static int bcm63xx_hsspi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host);  	int ret;  	ret = clk_prepare_enable(bs->clk); @@ -921,7 +921,7 @@ static int bcm63xx_hsspi_resume(struct device *dev)  		}  	} -	spi_master_resume(master); +	spi_controller_resume(host);  	return 0;  } diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c index 07b5b71b2352..aac41bd05f98 100644 --- a/drivers/spi/spi-bcm63xx.c +++ b/drivers/spi/spi-bcm63xx.c @@ -186,7 +186,7 @@ static const unsigned int bcm63xx_spi_freq_table[SPI_CLK_MASK][2] = {  static void bcm63xx_spi_setup_transfer(struct spi_device *spi,  				      struct spi_transfer *t)  { -	struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(spi->controller);  	u8 clk_cfg, reg;  	int i; @@ -217,7 +217,7 @@ static void bcm63xx_spi_setup_transfer(struct spi_device *spi,  static int bcm63xx_txrx_bufs(struct spi_device *spi, struct spi_transfer *first,  				unsigned int num_transfers)  { -	struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(spi->controller);  	u16 msg_ctl;  	u16 cmd;  	unsigned int i, timeout = 0, prepend_len = 0, len = 0; @@ -312,10 +312,10 @@ static int bcm63xx_txrx_bufs(struct spi_device *spi, struct spi_transfer *first,  	return 0;  } -static int bcm63xx_spi_transfer_one(struct spi_master *master, +static int bcm63xx_spi_transfer_one(struct spi_controller *host,  					struct spi_message *m)  { -	struct bcm63xx_spi *bs = spi_master_get_devdata(master); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);  	struct spi_transfer *t, *first = NULL;  	struct spi_device *spi = m->spi;  	int status = 0; @@ -385,18 +385,18 @@ static int bcm63xx_spi_transfer_one(struct spi_master *master,  	}  exit:  	m->status = status; -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return 0;  } -/* This driver supports single master mode only. Hence +/* This driver supports single host mode only. Hence   * CMD_DONE is the only interrupt we care about   */  static irqreturn_t bcm63xx_spi_interrupt(int irq, void *dev_id)  { -	struct spi_master *master = (struct spi_master *)dev_id; -	struct bcm63xx_spi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = (struct spi_controller *)dev_id; +	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);  	u8 intr;  	/* Read interupts and clear them immediately */ @@ -413,7 +413,7 @@ static irqreturn_t bcm63xx_spi_interrupt(int irq, void *dev_id)  static size_t bcm63xx_spi_max_length(struct spi_device *spi)  { -	struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(spi->controller);  	return bs->fifo_size;  } @@ -479,7 +479,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)  	const unsigned long *bcm63xx_spireg;  	struct device *dev = &pdev->dev;  	int irq, bus_num; -	struct spi_master *master; +	struct spi_controller *host;  	struct clk *clk;  	struct bcm63xx_spi *bs;  	int ret; @@ -525,16 +525,16 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)  	if (IS_ERR(reset))  		return PTR_ERR(reset); -	master = spi_alloc_master(dev, sizeof(*bs)); -	if (!master) { +	host = spi_alloc_host(dev, sizeof(*bs)); +	if (!host) {  		dev_err(dev, "out of memory\n");  		return -ENOMEM;  	} -	bs = spi_master_get_devdata(master); +	bs = spi_controller_get_devdata(host);  	init_completion(&bs->done); -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host);  	bs->pdev = pdev;  	bs->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &r); @@ -549,21 +549,21 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)  	bs->fifo_size = bs->reg_offsets[SPI_MSG_DATA_SIZE];  	ret = devm_request_irq(&pdev->dev, irq, bcm63xx_spi_interrupt, 0, -							pdev->name, master); +			       pdev->name, host);  	if (ret) {  		dev_err(dev, "unable to request irq\n");  		goto out_err;  	} -	master->dev.of_node = dev->of_node; -	master->bus_num = bus_num; -	master->num_chipselect = num_cs; -	master->transfer_one_message = bcm63xx_spi_transfer_one; -	master->mode_bits = MODEBITS; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->max_transfer_size = bcm63xx_spi_max_length; -	master->max_message_size = bcm63xx_spi_max_length; -	master->auto_runtime_pm = true; +	host->dev.of_node = dev->of_node; +	host->bus_num = bus_num; +	host->num_chipselect = num_cs; +	host->transfer_one_message = bcm63xx_spi_transfer_one; +	host->mode_bits = MODEBITS; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->max_transfer_size = bcm63xx_spi_max_length; +	host->max_message_size = bcm63xx_spi_max_length; +	host->auto_runtime_pm = true;  	bs->msg_type_shift = bs->reg_offsets[SPI_MSG_TYPE_SHIFT];  	bs->msg_ctl_width = bs->reg_offsets[SPI_MSG_CTL_WIDTH];  	bs->tx_io = (u8 *)(bs->regs + bs->reg_offsets[SPI_MSG_DATA]); @@ -585,7 +585,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)  	pm_runtime_enable(&pdev->dev);  	/* register and we are done */ -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret) {  		dev_err(dev, "spi register failed\n");  		goto out_pm_disable; @@ -601,14 +601,14 @@ out_pm_disable:  out_clk_disable:  	clk_disable_unprepare(clk);  out_err: -	spi_master_put(master); +	spi_controller_put(host);  	return ret;  }  static void bcm63xx_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct bcm63xx_spi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);  	/* reset spi block */  	bcm_spi_writeb(bs, 0, SPI_INT_MASK); @@ -619,10 +619,10 @@ static void bcm63xx_spi_remove(struct platform_device *pdev)  static int bcm63xx_spi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct bcm63xx_spi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(host); -	spi_master_suspend(master); +	spi_controller_suspend(host);  	clk_disable_unprepare(bs->clk); @@ -631,15 +631,15 @@ static int bcm63xx_spi_suspend(struct device *dev)  static int bcm63xx_spi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct bcm63xx_spi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);  	int ret;  	ret = clk_prepare_enable(bs->clk);  	if (ret)  		return ret; -	spi_master_resume(master); +	spi_controller_resume(host);  	return 0;  } diff --git a/drivers/spi/spi-bcmbca-hsspi.c b/drivers/spi/spi-bcmbca-hsspi.c index ca1b4741e9f4..9f64afd8164e 100644 --- a/drivers/spi/spi-bcmbca-hsspi.c +++ b/drivers/spi/spi-bcmbca-hsspi.c @@ -127,7 +127,7 @@ static ssize_t wait_mode_show(struct device *dev, struct device_attribute *attr,  			 char *buf)  {  	struct spi_controller *ctrl = dev_get_drvdata(dev); -	struct bcmbca_hsspi *bs = spi_master_get_devdata(ctrl); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(ctrl);  	return sprintf(buf, "%d\n", bs->wait_mode);  } @@ -136,7 +136,7 @@ static ssize_t wait_mode_store(struct device *dev, struct device_attribute *attr  			  const char *buf, size_t count)  {  	struct spi_controller *ctrl = dev_get_drvdata(dev); -	struct bcmbca_hsspi *bs = spi_master_get_devdata(ctrl); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(ctrl);  	u32 val;  	if (kstrtou32(buf, 10, &val)) @@ -250,7 +250,7 @@ static int bcmbca_hsspi_wait_cmd(struct bcmbca_hsspi *bs, unsigned int cs)  static int bcmbca_hsspi_do_txrx(struct spi_device *spi, struct spi_transfer *t,  								struct spi_message *msg)  { -	struct bcmbca_hsspi *bs = spi_master_get_devdata(spi->master); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(spi->controller);  	unsigned int chip_select = spi_get_chipselect(spi, 0);  	u16 opcode = 0, val;  	int pending = t->len; @@ -328,7 +328,7 @@ static int bcmbca_hsspi_do_txrx(struct spi_device *spi, struct spi_transfer *t,  static int bcmbca_hsspi_setup(struct spi_device *spi)  { -	struct bcmbca_hsspi *bs = spi_master_get_devdata(spi->master); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(spi->controller);  	u32 reg;  	reg = __raw_readl(bs->regs + @@ -366,10 +366,10 @@ static int bcmbca_hsspi_setup(struct spi_device *spi)  	return 0;  } -static int bcmbca_hsspi_transfer_one(struct spi_master *master, +static int bcmbca_hsspi_transfer_one(struct spi_controller *host,  				      struct spi_message *msg)  { -	struct bcmbca_hsspi *bs = spi_master_get_devdata(master); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(host);  	struct spi_transfer *t;  	struct spi_device *spi = msg->spi;  	int status = -EINVAL; @@ -409,7 +409,7 @@ static int bcmbca_hsspi_transfer_one(struct spi_master *master,  		bcmbca_hsspi_set_cs(bs, spi_get_chipselect(spi, 0), false);  	msg->status = status; -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return 0;  } @@ -431,7 +431,7 @@ static irqreturn_t bcmbca_hsspi_interrupt(int irq, void *dev_id)  static int bcmbca_hsspi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct bcmbca_hsspi *bs;  	struct resource *res_mem;  	void __iomem *spim_ctrl; @@ -487,13 +487,13 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)  		}  	} -	master = spi_alloc_master(&pdev->dev, sizeof(*bs)); -	if (!master) { +	host = spi_alloc_host(&pdev->dev, sizeof(*bs)); +	if (!host) {  		ret = -ENOMEM;  		goto out_disable_pll_clk;  	} -	bs = spi_master_get_devdata(master); +	bs = spi_controller_get_devdata(host);  	bs->pdev = pdev;  	bs->clk = clk;  	bs->pll_clk = pll_clk; @@ -507,9 +507,9 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)  	mutex_init(&bs->msg_mutex);  	init_completion(&bs->done); -	master->dev.of_node = dev->of_node; +	host->dev.of_node = dev->of_node;  	if (!dev->of_node) -		master->bus_num = HSSPI_BUS_NUM; +		host->bus_num = HSSPI_BUS_NUM;  	of_property_read_u32(dev->of_node, "num-cs", &num_cs);  	if (num_cs > 8) { @@ -517,15 +517,15 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)  			 num_cs);  		num_cs = HSSPI_SPI_MAX_CS;  	} -	master->num_chipselect = num_cs; -	master->setup = bcmbca_hsspi_setup; -	master->transfer_one_message = bcmbca_hsspi_transfer_one; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | -	    SPI_RX_DUAL | SPI_TX_DUAL; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->auto_runtime_pm = true; +	host->num_chipselect = num_cs; +	host->setup = bcmbca_hsspi_setup; +	host->transfer_one_message = bcmbca_hsspi_transfer_one; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | +			  SPI_RX_DUAL | SPI_TX_DUAL; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->auto_runtime_pm = true; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host);  	/* Initialize the hardware */  	__raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); @@ -543,7 +543,7 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)  		ret = devm_request_irq(dev, irq, bcmbca_hsspi_interrupt, IRQF_SHARED,  			       pdev->name, bs);  		if (ret) -			goto out_put_master; +			goto out_put_host;  	}  	pm_runtime_enable(&pdev->dev); @@ -555,7 +555,7 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)  	}  	/* register and we are done */ -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret)  		goto out_sysgroup_disable; @@ -567,8 +567,8 @@ out_sysgroup_disable:  	sysfs_remove_group(&pdev->dev.kobj, &bcmbca_hsspi_group);  out_pm_disable:  	pm_runtime_disable(&pdev->dev); -out_put_master: -	spi_master_put(master); +out_put_host: +	spi_controller_put(host);  out_disable_pll_clk:  	clk_disable_unprepare(pll_clk);  out_disable_clk: @@ -578,8 +578,8 @@ out_disable_clk:  static void bcmbca_hsspi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct bcmbca_hsspi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(host);  	/* reset the hardware and block queue progress */  	__raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); @@ -591,10 +591,10 @@ static void bcmbca_hsspi_remove(struct platform_device *pdev)  #ifdef CONFIG_PM_SLEEP  static int bcmbca_hsspi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct bcmbca_hsspi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(host); -	spi_master_suspend(master); +	spi_controller_suspend(host);  	clk_disable_unprepare(bs->pll_clk);  	clk_disable_unprepare(bs->clk); @@ -603,8 +603,8 @@ static int bcmbca_hsspi_suspend(struct device *dev)  static int bcmbca_hsspi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct bcmbca_hsspi *bs = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct bcmbca_hsspi *bs = spi_controller_get_devdata(host);  	int ret;  	ret = clk_prepare_enable(bs->clk); @@ -619,7 +619,7 @@ static int bcmbca_hsspi_resume(struct device *dev)  		}  	} -	spi_master_resume(master); +	spi_controller_resume(host);  	return 0;  } diff --git a/drivers/spi/spi-bitbang-txrx.h b/drivers/spi/spi-bitbang-txrx.h index 2dcbe166df63..0cab48b7875b 100644 --- a/drivers/spi/spi-bitbang-txrx.h +++ b/drivers/spi/spi-bitbang-txrx.h @@ -57,7 +57,7 @@ bitbang_txrx_be_cpha0(struct spi_device *spi,  	for (word <<= (32 - bits); likely(bits); bits--) {  		/* setup MSB (to slave) on trailing edge */ -		if ((flags & SPI_MASTER_NO_TX) == 0) { +		if ((flags & SPI_CONTROLLER_NO_TX) == 0) {  			if ((word & (1 << 31)) != oldbit) {  				setmosi(spi, word & (1 << 31));  				oldbit = word & (1 << 31); @@ -70,7 +70,7 @@ bitbang_txrx_be_cpha0(struct spi_device *spi,  		/* sample MSB (from slave) on leading edge */  		word <<= 1; -		if ((flags & SPI_MASTER_NO_RX) == 0) +		if ((flags & SPI_CONTROLLER_NO_RX) == 0)  			word |= getmiso(spi);  		setsck(spi, cpol);  	} @@ -90,7 +90,7 @@ bitbang_txrx_be_cpha1(struct spi_device *spi,  		/* setup MSB (to slave) on leading edge */  		setsck(spi, !cpol); -		if ((flags & SPI_MASTER_NO_TX) == 0) { +		if ((flags & SPI_CONTROLLER_NO_TX) == 0) {  			if ((word & (1 << 31)) != oldbit) {  				setmosi(spi, word & (1 << 31));  				oldbit = word & (1 << 31); @@ -103,7 +103,7 @@ bitbang_txrx_be_cpha1(struct spi_device *spi,  		/* sample MSB (from slave) on trailing edge */  		word <<= 1; -		if ((flags & SPI_MASTER_NO_RX) == 0) +		if ((flags & SPI_CONTROLLER_NO_RX) == 0)  			word |= getmiso(spi);  	}  	return word; @@ -122,7 +122,7 @@ bitbang_txrx_le_cpha0(struct spi_device *spi,  	for (; likely(bits); bits--) {  		/* setup LSB (to slave) on trailing edge */ -		if ((flags & SPI_MASTER_NO_TX) == 0) { +		if ((flags & SPI_CONTROLLER_NO_TX) == 0) {  			if ((word & 1) != oldbit) {  				setmosi(spi, word & 1);  				oldbit = word & 1; @@ -135,7 +135,7 @@ bitbang_txrx_le_cpha0(struct spi_device *spi,  		/* sample LSB (from slave) on leading edge */  		word >>= 1; -		if ((flags & SPI_MASTER_NO_RX) == 0) +		if ((flags & SPI_CONTROLLER_NO_RX) == 0)  			word |= getmiso(spi) << rxbit;  		setsck(spi, cpol);  	} @@ -156,7 +156,7 @@ bitbang_txrx_le_cpha1(struct spi_device *spi,  		/* setup LSB (to slave) on leading edge */  		setsck(spi, !cpol); -		if ((flags & SPI_MASTER_NO_TX) == 0) { +		if ((flags & SPI_CONTROLLER_NO_TX) == 0) {  			if ((word & 1) != oldbit) {  				setmosi(spi, word & 1);  				oldbit = word & 1; @@ -169,7 +169,7 @@ bitbang_txrx_le_cpha1(struct spi_device *spi,  		/* sample LSB (from slave) on trailing edge */  		word >>= 1; -		if ((flags & SPI_MASTER_NO_RX) == 0) +		if ((flags & SPI_CONTROLLER_NO_RX) == 0)  			word |= getmiso(spi) << rxbit;  	}  	return word; diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c index 27d0087f8688..ecd44016c197 100644 --- a/drivers/spi/spi-bitbang.c +++ b/drivers/spi/spi-bitbang.c @@ -248,7 +248,7 @@ static int spi_bitbang_bufs(struct spi_device *spi, struct spi_transfer *t)  	if (spi->mode & SPI_3WIRE) {  		unsigned flags; -		flags = t->tx_buf ? SPI_MASTER_NO_RX : SPI_MASTER_NO_TX; +		flags = t->tx_buf ? SPI_CONTROLLER_NO_RX : SPI_CONTROLLER_NO_TX;  		return cs->txrx_bufs(spi, cs->txrx_word, nsecs, t, flags);  	}  	return cs->txrx_bufs(spi, cs->txrx_word, nsecs, t, 0); @@ -349,11 +349,11 @@ int spi_bitbang_init(struct spi_bitbang *bitbang)  	/*  	 * We only need the chipselect callback if we are actually using it.  	 * If we just use GPIO descriptors, it is surplus. If the -	 * SPI_MASTER_GPIO_SS flag is set, we always need to call the +	 * SPI_CONTROLLER_GPIO_SS flag is set, we always need to call the  	 * driver-specific chipselect routine.  	 */  	custom_cs = (!master->use_gpio_descriptors || -		     (master->flags & SPI_MASTER_GPIO_SS)); +		     (master->flags & SPI_CONTROLLER_GPIO_SS));  	if (custom_cs && !bitbang->chipselect)  		return -EINVAL; @@ -371,7 +371,7 @@ int spi_bitbang_init(struct spi_bitbang *bitbang)  	master->transfer_one = spi_bitbang_transfer_one;  	/*  	 * When using GPIO descriptors, the ->set_cs() callback doesn't even -	 * get called unless SPI_MASTER_GPIO_SS is set. +	 * get called unless SPI_CONTROLLER_GPIO_SS is set.  	 */  	if (custom_cs)  		master->set_cs = spi_bitbang_set_cs; diff --git a/drivers/spi/spi-butterfly.c b/drivers/spi/spi-butterfly.c index cceae816cebc..289b4454242a 100644 --- a/drivers/spi/spi-butterfly.c +++ b/drivers/spi/spi-butterfly.c @@ -178,7 +178,7 @@ static void butterfly_attach(struct parport *p)  	struct pardevice	*pd;  	int			status;  	struct butterfly	*pp; -	struct spi_master	*master; +	struct spi_controller	*host;  	struct device		*dev = p->physport->dev;  	struct pardev_cb	butterfly_cb; @@ -189,12 +189,12 @@ static void butterfly_attach(struct parport *p)  	 * and no way to be selective about what it binds to.  	 */ -	master = spi_alloc_master(dev, sizeof(*pp)); -	if (!master) { +	host = spi_alloc_host(dev, sizeof(*pp)); +	if (!host) {  		status = -ENOMEM;  		goto done;  	} -	pp = spi_master_get_devdata(master); +	pp = spi_controller_get_devdata(host);  	/*  	 * SPI and bitbang hookup @@ -202,10 +202,10 @@ static void butterfly_attach(struct parport *p)  	 * use default setup(), cleanup(), and transfer() methods; and  	 * only bother implementing mode 0.  Start it later.  	 */ -	master->bus_num = 42; -	master->num_chipselect = 2; +	host->bus_num = 42; +	host->num_chipselect = 2; -	pp->bitbang.master = master; +	pp->bitbang.master = host;  	pp->bitbang.chipselect = butterfly_chipselect;  	pp->bitbang.txrx_word[SPI_MODE_0] = butterfly_txrx_word_mode0; @@ -280,7 +280,7 @@ clean2:  clean1:  	parport_unregister_device(pd);  clean0: -	spi_master_put(pp->bitbang.master); +	spi_controller_put(host);  done:  	pr_debug("%s: butterfly probe, fail %d\n", p->name, status);  } @@ -308,7 +308,7 @@ static void butterfly_detach(struct parport *p)  	parport_release(pp->pd);  	parport_unregister_device(pp->pd); -	spi_master_put(pp->bitbang.master); +	spi_controller_put(pp->bitbang.master);  }  static struct parport_driver butterfly_driver = { diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c index abf10f92415d..b50db71ac4cc 100644 --- a/drivers/spi/spi-cadence-quadspi.c +++ b/drivers/spi/spi-cadence-quadspi.c @@ -21,7 +21,6 @@  #include <linux/kernel.h>  #include <linux/log2.h>  #include <linux/module.h> -#include <linux/of_device.h>  #include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h> @@ -47,6 +46,12 @@  #define CQSPI_OP_WIDTH(part) ((part).nbytes ? ilog2((part).buswidth) : 0) +enum { +	CLK_QSPI_APB = 0, +	CLK_QSPI_AHB, +	CLK_QSPI_NUM, +}; +  struct cqspi_st;  struct cqspi_flash_pdata { @@ -62,8 +67,9 @@ struct cqspi_flash_pdata {  struct cqspi_st {  	struct platform_device	*pdev; -	struct spi_master	*master; +	struct spi_controller	*host;  	struct clk		*clk; +	struct clk		*clks[CLK_QSPI_NUM];  	unsigned int		sclk;  	void __iomem		*iobase; @@ -92,6 +98,8 @@ struct cqspi_st {  	bool			wr_completion;  	bool			slow_sram;  	bool			apb_ahb_hazard; + +	bool			is_jh7110; /* Flag for StarFive JH7110 SoC */  };  struct cqspi_driver_platdata { @@ -100,6 +108,8 @@ struct cqspi_driver_platdata {  	int (*indirect_read_dma)(struct cqspi_flash_pdata *f_pdata,  				 u_char *rxbuf, loff_t from_addr, size_t n_rx);  	u32 (*get_dma_status)(struct cqspi_st *cqspi); +	int (*jh7110_clk_init)(struct platform_device *pdev, +			       struct cqspi_st *cqspi);  };  /* Operation timeout value */ @@ -1369,7 +1379,7 @@ static ssize_t cqspi_read(struct cqspi_flash_pdata *f_pdata,  static int cqspi_mem_process(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct cqspi_st *cqspi = spi_master_get_devdata(mem->spi->master); +	struct cqspi_st *cqspi = spi_controller_get_devdata(mem->spi->controller);  	struct cqspi_flash_pdata *f_pdata;  	f_pdata = &cqspi->f_pdata[spi_get_chipselect(mem->spi, 0)]; @@ -1575,7 +1585,7 @@ static int cqspi_request_mmap_dma(struct cqspi_st *cqspi)  static const char *cqspi_get_name(struct spi_mem *mem)  { -	struct cqspi_st *cqspi = spi_master_get_devdata(mem->spi->master); +	struct cqspi_st *cqspi = spi_controller_get_devdata(mem->spi->controller);  	struct device *dev = &cqspi->pdev->dev;  	return devm_kasprintf(dev, GFP_KERNEL, "%s.%d", dev_name(dev), @@ -1630,31 +1640,77 @@ static int cqspi_setup_flash(struct cqspi_st *cqspi)  	return 0;  } +static int cqspi_jh7110_clk_init(struct platform_device *pdev, struct cqspi_st *cqspi) +{ +	static struct clk_bulk_data qspiclk[] = { +		{ .id = "apb" }, +		{ .id = "ahb" }, +	}; + +	int ret = 0; + +	ret = devm_clk_bulk_get(&pdev->dev, ARRAY_SIZE(qspiclk), qspiclk); +	if (ret) { +		dev_err(&pdev->dev, "%s: failed to get qspi clocks\n", __func__); +		return ret; +	} + +	cqspi->clks[CLK_QSPI_APB] = qspiclk[0].clk; +	cqspi->clks[CLK_QSPI_AHB] = qspiclk[1].clk; + +	ret = clk_prepare_enable(cqspi->clks[CLK_QSPI_APB]); +	if (ret) { +		dev_err(&pdev->dev, "%s: failed to enable CLK_QSPI_APB\n", __func__); +		return ret; +	} + +	ret = clk_prepare_enable(cqspi->clks[CLK_QSPI_AHB]); +	if (ret) { +		dev_err(&pdev->dev, "%s: failed to enable CLK_QSPI_AHB\n", __func__); +		goto disable_apb_clk; +	} + +	cqspi->is_jh7110 = true; + +	return 0; + +disable_apb_clk: +	clk_disable_unprepare(cqspi->clks[CLK_QSPI_APB]); + +	return ret; +} + +static void cqspi_jh7110_disable_clk(struct platform_device *pdev, struct cqspi_st *cqspi) +{ +	clk_disable_unprepare(cqspi->clks[CLK_QSPI_AHB]); +	clk_disable_unprepare(cqspi->clks[CLK_QSPI_APB]); +}  static int cqspi_probe(struct platform_device *pdev)  {  	const struct cqspi_driver_platdata *ddata;  	struct reset_control *rstc, *rstc_ocp, *rstc_ref;  	struct device *dev = &pdev->dev; -	struct spi_master *master; +	struct spi_controller *host;  	struct resource *res_ahb;  	struct cqspi_st *cqspi;  	int ret;  	int irq; -	master = devm_spi_alloc_master(&pdev->dev, sizeof(*cqspi)); -	if (!master) { -		dev_err(&pdev->dev, "spi_alloc_master failed\n"); +	host = devm_spi_alloc_host(&pdev->dev, sizeof(*cqspi)); +	if (!host) { +		dev_err(&pdev->dev, "devm_spi_alloc_host failed\n");  		return -ENOMEM;  	} -	master->mode_bits = SPI_RX_QUAD | SPI_RX_DUAL; -	master->mem_ops = &cqspi_mem_ops; -	master->mem_caps = &cqspi_mem_caps; -	master->dev.of_node = pdev->dev.of_node; +	host->mode_bits = SPI_RX_QUAD | SPI_RX_DUAL; +	host->mem_ops = &cqspi_mem_ops; +	host->mem_caps = &cqspi_mem_caps; +	host->dev.of_node = pdev->dev.of_node; -	cqspi = spi_master_get_devdata(master); +	cqspi = spi_controller_get_devdata(host);  	cqspi->pdev = pdev; -	cqspi->master = master; +	cqspi->host = host; +	cqspi->is_jh7110 = false;  	platform_set_drvdata(pdev, cqspi);  	/* Obtain configuration from OF. */ @@ -1741,7 +1797,7 @@ static int cqspi_probe(struct platform_device *pdev)  	reset_control_deassert(rstc_ocp);  	cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); -	master->max_speed_hz = cqspi->master_ref_clk_hz; +	host->max_speed_hz = cqspi->master_ref_clk_hz;  	/* write completion is supported by default */  	cqspi->wr_completion = true; @@ -1752,7 +1808,7 @@ static int cqspi_probe(struct platform_device *pdev)  			cqspi->wr_delay = 50 * DIV_ROUND_UP(NSEC_PER_SEC,  						cqspi->master_ref_clk_hz);  		if (ddata->hwcaps_mask & CQSPI_SUPPORTS_OCTAL) -			master->mode_bits |= SPI_RX_OCTAL | SPI_TX_OCTAL; +			host->mode_bits |= SPI_RX_OCTAL | SPI_TX_OCTAL;  		if (!(ddata->quirks & CQSPI_DISABLE_DAC_MODE)) {  			cqspi->use_direct_mode = true;  			cqspi->use_direct_mode_wr = true; @@ -1766,6 +1822,12 @@ static int cqspi_probe(struct platform_device *pdev)  		if (ddata->quirks & CQSPI_NEEDS_APB_AHB_HAZARD_WAR)  			cqspi->apb_ahb_hazard = true; +		if (ddata->jh7110_clk_init) { +			ret = cqspi_jh7110_clk_init(pdev, cqspi); +			if (ret) +				goto probe_clk_failed; +		} +  		if (of_device_is_compatible(pdev->dev.of_node,  					    "xlnx,versal-ospi-1.0")) {  			ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); @@ -1786,7 +1848,7 @@ static int cqspi_probe(struct platform_device *pdev)  	cqspi->current_cs = -1;  	cqspi->sclk = 0; -	master->num_chipselect = cqspi->num_chipselect; +	host->num_chipselect = cqspi->num_chipselect;  	ret = cqspi_setup_flash(cqspi);  	if (ret) { @@ -1800,7 +1862,7 @@ static int cqspi_probe(struct platform_device *pdev)  			goto probe_setup_failed;  	} -	ret = spi_register_master(master); +	ret = spi_register_controller(host);  	if (ret) {  		dev_err(&pdev->dev, "failed to register SPI ctlr %d\n", ret);  		goto probe_setup_failed; @@ -1822,7 +1884,7 @@ static void cqspi_remove(struct platform_device *pdev)  {  	struct cqspi_st *cqspi = platform_get_drvdata(pdev); -	spi_unregister_master(cqspi->master); +	spi_unregister_controller(cqspi->host);  	cqspi_controller_enable(cqspi, 0);  	if (cqspi->rx_chan) @@ -1830,6 +1892,9 @@ static void cqspi_remove(struct platform_device *pdev)  	clk_disable_unprepare(cqspi->clk); +	if (cqspi->is_jh7110) +		cqspi_jh7110_disable_clk(pdev, cqspi); +  	pm_runtime_put_sync(&pdev->dev);  	pm_runtime_disable(&pdev->dev);  } @@ -1837,10 +1902,10 @@ static void cqspi_remove(struct platform_device *pdev)  static int cqspi_suspend(struct device *dev)  {  	struct cqspi_st *cqspi = dev_get_drvdata(dev); -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev);  	int ret; -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	cqspi_controller_enable(cqspi, 0);  	clk_disable_unprepare(cqspi->clk); @@ -1851,7 +1916,7 @@ static int cqspi_suspend(struct device *dev)  static int cqspi_resume(struct device *dev)  {  	struct cqspi_st *cqspi = dev_get_drvdata(dev); -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev);  	clk_prepare_enable(cqspi->clk);  	cqspi_wait_idle(cqspi); @@ -1860,7 +1925,7 @@ static int cqspi_resume(struct device *dev)  	cqspi->current_cs = -1;  	cqspi->sclk = 0; -	return spi_master_resume(master); +	return spi_controller_resume(host);  }  static DEFINE_SIMPLE_DEV_PM_OPS(cqspi_dev_pm_ops, cqspi_suspend, cqspi_resume); @@ -1897,6 +1962,7 @@ static const struct cqspi_driver_platdata versal_ospi = {  static const struct cqspi_driver_platdata jh7110_qspi = {  	.quirks = CQSPI_DISABLE_DAC_MODE, +	.jh7110_clk_init = cqspi_jh7110_clk_init,  };  static const struct cqspi_driver_platdata pensando_cdns_qspi = { diff --git a/drivers/spi/spi-cadence-xspi.c b/drivers/spi/spi-cadence-xspi.c index ce4a3145f065..b7e04b03be58 100644 --- a/drivers/spi/spi-cadence-xspi.c +++ b/drivers/spi/spi-cadence-xspi.c @@ -11,7 +11,6 @@  #include <linux/iopoll.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_device.h>  #include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h> @@ -420,7 +419,7 @@ static int cdns_xspi_mem_op_execute(struct spi_mem *mem,  				    const struct spi_mem_op *op)  {  	struct cdns_xspi_dev *cdns_xspi = -		spi_master_get_devdata(mem->spi->master); +		spi_controller_get_devdata(mem->spi->controller);  	int ret = 0;  	ret = cdns_xspi_mem_op(cdns_xspi, mem, op); @@ -431,7 +430,7 @@ static int cdns_xspi_mem_op_execute(struct spi_mem *mem,  static int cdns_xspi_adjust_mem_op_size(struct spi_mem *mem, struct spi_mem_op *op)  {  	struct cdns_xspi_dev *cdns_xspi = -		spi_master_get_devdata(mem->spi->master); +		spi_controller_get_devdata(mem->spi->controller);  	op->data.nbytes = clamp_val(op->data.nbytes, 0, cdns_xspi->sdmasize); @@ -528,26 +527,26 @@ static void cdns_xspi_print_phy_config(struct cdns_xspi_dev *cdns_xspi)  static int cdns_xspi_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; -	struct spi_master *master = NULL; +	struct spi_controller *host = NULL;  	struct cdns_xspi_dev *cdns_xspi = NULL;  	struct resource *res;  	int ret; -	master = devm_spi_alloc_master(dev, sizeof(*cdns_xspi)); -	if (!master) +	host = devm_spi_alloc_host(dev, sizeof(*cdns_xspi)); +	if (!host)  		return -ENOMEM; -	master->mode_bits = SPI_3WIRE | SPI_TX_DUAL  | SPI_TX_QUAD  | +	host->mode_bits = SPI_3WIRE | SPI_TX_DUAL  | SPI_TX_QUAD  |  		SPI_RX_DUAL | SPI_RX_QUAD | SPI_TX_OCTAL | SPI_RX_OCTAL |  		SPI_MODE_0  | SPI_MODE_3; -	master->mem_ops = &cadence_xspi_mem_ops; -	master->dev.of_node = pdev->dev.of_node; -	master->bus_num = -1; +	host->mem_ops = &cadence_xspi_mem_ops; +	host->dev.of_node = pdev->dev.of_node; +	host->bus_num = -1; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	cdns_xspi = spi_master_get_devdata(master); +	cdns_xspi = spi_controller_get_devdata(host);  	cdns_xspi->pdev = pdev;  	cdns_xspi->dev = &pdev->dev;  	cdns_xspi->cur_cs = 0; @@ -597,15 +596,15 @@ static int cdns_xspi_probe(struct platform_device *pdev)  		return ret;  	} -	master->num_chipselect = 1 << cdns_xspi->hw_num_banks; +	host->num_chipselect = 1 << cdns_xspi->hw_num_banks; -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret) { -		dev_err(dev, "Failed to register SPI master\n"); +		dev_err(dev, "Failed to register SPI host\n");  		return ret;  	} -	dev_info(dev, "Successfully registered SPI master\n"); +	dev_info(dev, "Successfully registered SPI host\n");  	return 0;  } diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c index de8fe3c5becb..12c940ba074a 100644 --- a/drivers/spi/spi-cadence.c +++ b/drivers/spi/spi-cadence.c @@ -1,6 +1,6 @@  // SPDX-License-Identifier: GPL-2.0-or-later  /* - * Cadence SPI controller driver (master and slave mode) + * Cadence SPI controller driver (host and target mode)   *   * Copyright (C) 2008 - 2014 Xilinx, Inc.   * @@ -59,10 +59,10 @@  					CDNS_SPI_CR_BAUD_DIV_4)  /* - * SPI Configuration Register - Baud rate and slave select + * SPI Configuration Register - Baud rate and target select   *   * These are the values used in the calculation of baud rate divisor and - * setting the slave select. + * setting the target select.   */  #define CDNS_SPI_BAUD_DIV_MAX		7 /* Baud rate divisor maximum */ @@ -141,20 +141,20 @@ static inline void cdns_spi_write(struct cdns_spi *xspi, u32 offset, u32 val)  /**   * cdns_spi_init_hw - Initialize the hardware and configure the SPI controller   * @xspi:	Pointer to the cdns_spi structure - * @is_slave:	Flag to indicate slave or master mode - * * On reset the SPI controller is configured to slave or  master mode. - * In master mode baud rate divisor is set to 4, threshold value for TX FIFO + * @is_target:	Flag to indicate target or host mode + * * On reset the SPI controller is configured to target or host mode. + * In host mode baud rate divisor is set to 4, threshold value for TX FIFO   * not full interrupt is set to 1 and size of the word to be transferred as 8 bit.   *   * This function initializes the SPI controller to disable and clear all the - * interrupts, enable manual slave select and manual start, deselect all the + * interrupts, enable manual target select and manual start, deselect all the   * chip select lines, and enable the SPI controller.   */ -static void cdns_spi_init_hw(struct cdns_spi *xspi, bool is_slave) +static void cdns_spi_init_hw(struct cdns_spi *xspi, bool is_target)  {  	u32 ctrl_reg = 0; -	if (!is_slave) +	if (!is_target)  		ctrl_reg |= CDNS_SPI_CR_DEFAULT;  	if (xspi->is_decoded_cs) @@ -185,10 +185,10 @@ static void cdns_spi_chipselect(struct spi_device *spi, bool is_high)  	ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);  	if (is_high) { -		/* Deselect the slave */ +		/* Deselect the target */  		ctrl_reg |= CDNS_SPI_CR_SSCTRL;  	} else { -		/* Select the slave */ +		/* Select the target */  		ctrl_reg &= ~CDNS_SPI_CR_SSCTRL;  		if (!(xspi->is_decoded_cs))  			ctrl_reg |= ((~(CDNS_SPI_SS0 << spi_get_chipselect(spi, 0))) << @@ -227,7 +227,7 @@ static void cdns_spi_config_clock_mode(struct spi_device *spi)  		/*  		 * Just writing the CR register does not seem to apply the clock  		 * setting changes. This is problematic when changing the clock -		 * polarity as it will cause the SPI slave to see spurious clock +		 * polarity as it will cause the SPI target to see spurious clock  		 * transitions. To workaround the issue toggle the ER register.  		 */  		cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE); @@ -317,12 +317,6 @@ static void cdns_spi_process_fifo(struct cdns_spi *xspi, int ntx, int nrx)  	xspi->rx_bytes -= nrx;  	while (ntx || nrx) { -		/* When xspi in busy condition, bytes may send failed, -		 * then spi control did't work thoroughly, add one byte delay -		 */ -		if (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_TXFULL) -			udelay(10); -  		if (ntx) {  			if (xspi->txbuf)  				cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++); @@ -392,6 +386,11 @@ static irqreturn_t cdns_spi_irq(int irq, void *dev_id)  		if (xspi->tx_bytes) {  			cdns_spi_process_fifo(xspi, trans_cnt, trans_cnt);  		} else { +			/* Fixed delay due to controller limitation with +			 * RX_NEMPTY incorrect status +			 * Xilinx AR:65885 contains more details +			 */ +			udelay(10);  			cdns_spi_process_fifo(xspi, 0, trans_cnt);  			cdns_spi_write(xspi, CDNS_SPI_IDR,  				       CDNS_SPI_IXR_DEFAULT); @@ -406,7 +405,7 @@ static irqreturn_t cdns_spi_irq(int irq, void *dev_id)  static int cdns_prepare_message(struct spi_controller *ctlr,  				struct spi_message *msg)  { -	if (!spi_controller_is_slave(ctlr)) +	if (!spi_controller_is_target(ctlr))  		cdns_spi_config_clock_mode(msg->spi);  	return 0;  } @@ -418,9 +417,9 @@ static int cdns_prepare_message(struct spi_controller *ctlr,   * @transfer:	Pointer to the spi_transfer structure which provides   *		information about next transfer parameters   * - * This function in master mode fills the TX FIFO, starts the SPI transfer and + * This function in host mode fills the TX FIFO, starts the SPI transfer and   * returns a positive transfer count so that core will wait for completion. - * This function in slave mode fills the TX FIFO and wait for transfer trigger. + * This function in target mode fills the TX FIFO and wait for transfer trigger.   *   * Return:	Number of bytes transferred in the last transfer   */ @@ -435,16 +434,22 @@ static int cdns_transfer_one(struct spi_controller *ctlr,  	xspi->tx_bytes = transfer->len;  	xspi->rx_bytes = transfer->len; -	if (!spi_controller_is_slave(ctlr)) { +	if (!spi_controller_is_target(ctlr)) {  		cdns_spi_setup_transfer(spi, transfer);  	} else {  		/* Set TX empty threshold to half of FIFO depth -		 * only if TX bytes are more than half FIFO depth. +		 * only if TX bytes are more than FIFO depth.  		 */  		if (xspi->tx_bytes > xspi->tx_fifo_depth)  			cdns_spi_write(xspi, CDNS_SPI_THLD, xspi->tx_fifo_depth >> 1);  	} +	/* When xspi in busy condition, bytes may send failed, +	 * then spi control didn't work thoroughly, add one byte delay +	 */ +	if (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_TXFULL) +		udelay(10); +  	cdns_spi_process_fifo(xspi, xspi->tx_fifo_depth, 0);  	spi_transfer_delay_exec(transfer); @@ -457,7 +462,7 @@ static int cdns_transfer_one(struct spi_controller *ctlr,   * @ctlr:	Pointer to the spi_controller structure which provides   *		information about the controller.   * - * This function enables SPI master controller. + * This function enables SPI host controller.   *   * Return:	0 always   */ @@ -475,7 +480,7 @@ static int cdns_prepare_transfer_hardware(struct spi_controller *ctlr)   * @ctlr:	Pointer to the spi_controller structure which provides   *		information about the controller.   * - * This function disables the SPI master controller when no slave selected. + * This function disables the SPI host controller when no target selected.   * This function flush out if any pending data in FIFO.   *   * Return:	0 always @@ -486,15 +491,15 @@ static int cdns_unprepare_transfer_hardware(struct spi_controller *ctlr)  	u32 ctrl_reg;  	unsigned int cnt = xspi->tx_fifo_depth; -	if (spi_controller_is_slave(ctlr)) { +	if (spi_controller_is_target(ctlr)) {  		while (cnt--)  			cdns_spi_read(xspi, CDNS_SPI_RXD);  	} -	/* Disable the SPI if slave is deselected */ +	/* Disable the SPI if target is deselected */  	ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);  	ctrl_reg = (ctrl_reg & CDNS_SPI_CR_SSCTRL) >>  CDNS_SPI_SS_SHIFT; -	if (ctrl_reg == CDNS_SPI_NOSS || spi_controller_is_slave(ctlr)) +	if (ctrl_reg == CDNS_SPI_NOSS || spi_controller_is_target(ctlr))  		cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);  	/* Reset to default */ @@ -521,14 +526,14 @@ static void cdns_spi_detect_fifo_depth(struct cdns_spi *xspi)  }  /** - * cdns_slave_abort - Abort slave transfer + * cdns_target_abort - Abort target transfer   * @ctlr:	Pointer to the spi_controller structure   * - * This function abort slave transfer if there any transfer timeout. + * This function abort target transfer if there any transfer timeout.   *   * Return:      0 always   */ -static int cdns_slave_abort(struct spi_controller *ctlr) +static int cdns_target_abort(struct spi_controller *ctlr)  {  	struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);  	u32 intr_status; @@ -555,13 +560,13 @@ static int cdns_spi_probe(struct platform_device *pdev)  	struct spi_controller *ctlr;  	struct cdns_spi *xspi;  	u32 num_cs; -	bool slave; +	bool target; -	slave = of_property_read_bool(pdev->dev.of_node, "spi-slave"); -	if (slave) -		ctlr = spi_alloc_slave(&pdev->dev, sizeof(*xspi)); +	target = of_property_read_bool(pdev->dev.of_node, "spi-slave"); +	if (target) +		ctlr = spi_alloc_target(&pdev->dev, sizeof(*xspi));  	else -		ctlr = spi_alloc_master(&pdev->dev, sizeof(*xspi)); +		ctlr = spi_alloc_host(&pdev->dev, sizeof(*xspi));  	if (!ctlr)  		return -ENOMEM; @@ -589,7 +594,7 @@ static int cdns_spi_probe(struct platform_device *pdev)  		goto remove_ctlr;  	} -	if (!spi_controller_is_slave(ctlr)) { +	if (!spi_controller_is_target(ctlr)) {  		xspi->ref_clk = devm_clk_get(&pdev->dev, "ref_clk");  		if (IS_ERR(xspi->ref_clk)) {  			dev_err(&pdev->dev, "ref_clk clock not found.\n"); @@ -624,11 +629,11 @@ static int cdns_spi_probe(struct platform_device *pdev)  	cdns_spi_detect_fifo_depth(xspi);  	/* SPI controller initializations */ -	cdns_spi_init_hw(xspi, spi_controller_is_slave(ctlr)); +	cdns_spi_init_hw(xspi, spi_controller_is_target(ctlr));  	irq = platform_get_irq(pdev, 0); -	if (irq <= 0) { -		ret = -ENXIO; +	if (irq < 0) { +		ret = irq;  		goto clk_dis_all;  	} @@ -648,7 +653,7 @@ static int cdns_spi_probe(struct platform_device *pdev)  	ctlr->mode_bits = SPI_CPOL | SPI_CPHA;  	ctlr->bits_per_word_mask = SPI_BPW_MASK(8); -	if (!spi_controller_is_slave(ctlr)) { +	if (!spi_controller_is_target(ctlr)) {  		ctlr->mode_bits |=  SPI_CS_HIGH;  		ctlr->set_cs = cdns_spi_chipselect;  		ctlr->auto_runtime_pm = true; @@ -660,7 +665,7 @@ static int cdns_spi_probe(struct platform_device *pdev)  		pm_runtime_put_autosuspend(&pdev->dev);  	} else {  		ctlr->mode_bits |= SPI_NO_CS; -		ctlr->slave_abort = cdns_slave_abort; +		ctlr->target_abort = cdns_target_abort;  	}  	ret = spi_register_controller(ctlr);  	if (ret) { @@ -671,7 +676,7 @@ static int cdns_spi_probe(struct platform_device *pdev)  	return ret;  clk_dis_all: -	if (!spi_controller_is_slave(ctlr)) { +	if (!spi_controller_is_target(ctlr)) {  		pm_runtime_set_suspended(&pdev->dev);  		pm_runtime_disable(&pdev->dev);  		clk_disable_unprepare(xspi->ref_clk); @@ -690,8 +695,6 @@ remove_ctlr:   * This function is called if a device is physically removed from the system or   * if the driver module is being unloaded. It frees all resources allocated to   * the device. - * - * Return:	0 on success and error value on error   */  static void cdns_spi_remove(struct platform_device *pdev)  { @@ -737,7 +740,7 @@ static int __maybe_unused cdns_spi_resume(struct device *dev)  	struct spi_controller *ctlr = dev_get_drvdata(dev);  	struct cdns_spi *xspi = spi_controller_get_devdata(ctlr); -	cdns_spi_init_hw(xspi, spi_controller_is_slave(ctlr)); +	cdns_spi_init_hw(xspi, spi_controller_is_target(ctlr));  	return spi_controller_resume(ctlr);  } diff --git a/drivers/spi/spi-cavium-octeon.c b/drivers/spi/spi-cavium-octeon.c index 58060be33106..4511c3b31223 100644 --- a/drivers/spi/spi-cavium-octeon.c +++ b/drivers/spi/spi-cavium-octeon.c @@ -19,15 +19,15 @@  static int octeon_spi_probe(struct platform_device *pdev)  {  	void __iomem *reg_base; -	struct spi_master *master; +	struct spi_controller *host;  	struct octeon_spi *p;  	int err = -ENOENT; -	master = spi_alloc_master(&pdev->dev, sizeof(struct octeon_spi)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(struct octeon_spi)); +	if (!host)  		return -ENOMEM; -	p = spi_master_get_devdata(master); -	platform_set_drvdata(pdev, master); +	p = spi_controller_get_devdata(host); +	platform_set_drvdata(pdev, host);  	reg_base = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(reg_base)) { @@ -43,21 +43,21 @@ static int octeon_spi_probe(struct platform_device *pdev)  	p->regs.tx = 0x10;  	p->regs.data = 0x80; -	master->num_chipselect = 4; -	master->mode_bits = SPI_CPHA | +	host->num_chipselect = 4; +	host->mode_bits = SPI_CPHA |  			    SPI_CPOL |  			    SPI_CS_HIGH |  			    SPI_LSB_FIRST |  			    SPI_3WIRE; -	master->transfer_one_message = octeon_spi_transfer_one_message; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->max_speed_hz = OCTEON_SPI_MAX_CLOCK_HZ; +	host->transfer_one_message = octeon_spi_transfer_one_message; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->max_speed_hz = OCTEON_SPI_MAX_CLOCK_HZ; -	master->dev.of_node = pdev->dev.of_node; -	err = devm_spi_register_master(&pdev->dev, master); +	host->dev.of_node = pdev->dev.of_node; +	err = devm_spi_register_controller(&pdev->dev, host);  	if (err) { -		dev_err(&pdev->dev, "register master failed: %d\n", err); +		dev_err(&pdev->dev, "register host failed: %d\n", err);  		goto fail;  	} @@ -65,14 +65,14 @@ static int octeon_spi_probe(struct platform_device *pdev)  	return 0;  fail: -	spi_master_put(master); +	spi_controller_put(host);  	return err;  }  static void octeon_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct octeon_spi *p = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct octeon_spi *p = spi_controller_get_devdata(host);  	/* Clear the CSENA* and put everything in a known state. */  	writeq(0, p->register_base + OCTEON_SPI_CFG(p)); diff --git a/drivers/spi/spi-cavium-thunderx.c b/drivers/spi/spi-cavium-thunderx.c index 60c0d6934654..f7c378a5f1bc 100644 --- a/drivers/spi/spi-cavium-thunderx.c +++ b/drivers/spi/spi-cavium-thunderx.c @@ -20,15 +20,15 @@ static int thunderx_spi_probe(struct pci_dev *pdev,  			      const struct pci_device_id *ent)  {  	struct device *dev = &pdev->dev; -	struct spi_master *master; +	struct spi_controller *host;  	struct octeon_spi *p;  	int ret; -	master = spi_alloc_master(dev, sizeof(struct octeon_spi)); -	if (!master) +	host = spi_alloc_host(dev, sizeof(struct octeon_spi)); +	if (!host)  		return -ENOMEM; -	p = spi_master_get_devdata(master); +	p = spi_controller_get_devdata(host);  	ret = pcim_enable_device(pdev);  	if (ret) @@ -64,18 +64,18 @@ static int thunderx_spi_probe(struct pci_dev *pdev,  		p->sys_freq = SYS_FREQ_DEFAULT;  	dev_info(dev, "Set system clock to %u\n", p->sys_freq); -	master->flags = SPI_MASTER_HALF_DUPLEX; -	master->num_chipselect = 4; -	master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_CS_HIGH | +	host->flags = SPI_CONTROLLER_HALF_DUPLEX; +	host->num_chipselect = 4; +	host->mode_bits = SPI_CPHA | SPI_CPOL | SPI_CS_HIGH |  			    SPI_LSB_FIRST | SPI_3WIRE; -	master->transfer_one_message = octeon_spi_transfer_one_message; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->max_speed_hz = OCTEON_SPI_MAX_CLOCK_HZ; -	master->dev.of_node = pdev->dev.of_node; +	host->transfer_one_message = octeon_spi_transfer_one_message; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->max_speed_hz = OCTEON_SPI_MAX_CLOCK_HZ; +	host->dev.of_node = pdev->dev.of_node; -	pci_set_drvdata(pdev, master); +	pci_set_drvdata(pdev, host); -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret)  		goto error; @@ -84,16 +84,16 @@ static int thunderx_spi_probe(struct pci_dev *pdev,  error:  	clk_disable_unprepare(p->clk);  	pci_release_regions(pdev); -	spi_master_put(master); +	spi_controller_put(host);  	return ret;  }  static void thunderx_spi_remove(struct pci_dev *pdev)  { -	struct spi_master *master = pci_get_drvdata(pdev); +	struct spi_controller *host = pci_get_drvdata(pdev);  	struct octeon_spi *p; -	p = spi_master_get_devdata(master); +	p = spi_controller_get_devdata(host);  	if (!p)  		return; diff --git a/drivers/spi/spi-clps711x.c b/drivers/spi/spi-clps711x.c index c005ed26a3e1..5552ccd716fc 100644 --- a/drivers/spi/spi-clps711x.c +++ b/drivers/spi/spi-clps711x.c @@ -33,10 +33,10 @@ struct spi_clps711x_data {  	int			len;  }; -static int spi_clps711x_prepare_message(struct spi_master *master, +static int spi_clps711x_prepare_message(struct spi_controller *host,  					struct spi_message *msg)  { -	struct spi_clps711x_data *hw = spi_master_get_devdata(master); +	struct spi_clps711x_data *hw = spi_controller_get_devdata(host);  	struct spi_device *spi = msg->spi;  	/* Setup mode for transfer */ @@ -45,11 +45,11 @@ static int spi_clps711x_prepare_message(struct spi_master *master,  				  SYSCON3_ADCCKNSEN : 0);  } -static int spi_clps711x_transfer_one(struct spi_master *master, +static int spi_clps711x_transfer_one(struct spi_controller *host,  				     struct spi_device *spi,  				     struct spi_transfer *xfer)  { -	struct spi_clps711x_data *hw = spi_master_get_devdata(master); +	struct spi_clps711x_data *hw = spi_controller_get_devdata(host);  	u8 data;  	clk_set_rate(hw->spi_clk, xfer->speed_hz ? : spi->max_speed_hz); @@ -68,8 +68,8 @@ static int spi_clps711x_transfer_one(struct spi_master *master,  static irqreturn_t spi_clps711x_isr(int irq, void *dev_id)  { -	struct spi_master *master = dev_id; -	struct spi_clps711x_data *hw = spi_master_get_devdata(master); +	struct spi_controller *host = dev_id; +	struct spi_clps711x_data *hw = spi_controller_get_devdata(host);  	u8 data;  	/* Handle RX */ @@ -83,7 +83,7 @@ static irqreturn_t spi_clps711x_isr(int irq, void *dev_id)  		writel(data | SYNCIO_FRMLEN(hw->bpw) | SYNCIO_TXFRMEN,  		       hw->syncio);  	} else -		spi_finalize_current_transfer(master); +		spi_finalize_current_transfer(host);  	return IRQ_HANDLED;  } @@ -92,26 +92,26 @@ static int spi_clps711x_probe(struct platform_device *pdev)  {  	struct device_node *np = pdev->dev.of_node;  	struct spi_clps711x_data *hw; -	struct spi_master *master; +	struct spi_controller *host;  	int irq, ret;  	irq = platform_get_irq(pdev, 0);  	if (irq < 0)  		return irq; -	master = spi_alloc_master(&pdev->dev, sizeof(*hw)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*hw)); +	if (!host)  		return -ENOMEM; -	master->use_gpio_descriptors = true; -	master->bus_num = -1; -	master->mode_bits = SPI_CPHA | SPI_CS_HIGH; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 8); -	master->dev.of_node = pdev->dev.of_node; -	master->prepare_message = spi_clps711x_prepare_message; -	master->transfer_one = spi_clps711x_transfer_one; +	host->use_gpio_descriptors = true; +	host->bus_num = -1; +	host->mode_bits = SPI_CPHA | SPI_CS_HIGH; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 8); +	host->dev.of_node = pdev->dev.of_node; +	host->prepare_message = spi_clps711x_prepare_message; +	host->transfer_one = spi_clps711x_transfer_one; -	hw = spi_master_get_devdata(master); +	hw = spi_controller_get_devdata(host);  	hw->spi_clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(hw->spi_clk)) { @@ -138,16 +138,16 @@ static int spi_clps711x_probe(struct platform_device *pdev)  	readl(hw->syncio);  	ret = devm_request_irq(&pdev->dev, irq, spi_clps711x_isr, 0, -			       dev_name(&pdev->dev), master); +			       dev_name(&pdev->dev), host);  	if (ret)  		goto err_out; -	ret = devm_spi_register_master(&pdev->dev, master); +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (!ret)  		return 0;  err_out: -	spi_master_put(master); +	spi_controller_put(host);  	return ret;  } diff --git a/drivers/spi/spi-coldfire-qspi.c b/drivers/spi/spi-coldfire-qspi.c index b1bd8a6b5bf9..f0b630fe16c3 100644 --- a/drivers/spi/spi-coldfire-qspi.c +++ b/drivers/spi/spi-coldfire-qspi.c @@ -286,7 +286,7 @@ static void mcfqspi_transfer_msg16(struct mcfqspi *mcfqspi, unsigned count,  static void mcfqspi_set_cs(struct spi_device *spi, bool enable)  { -	struct mcfqspi *mcfqspi = spi_master_get_devdata(spi->master); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(spi->controller);  	bool cs_high = spi->mode & SPI_CS_HIGH;  	if (enable) @@ -295,11 +295,11 @@ static void mcfqspi_set_cs(struct spi_device *spi, bool enable)  		mcfqspi_cs_deselect(mcfqspi, spi_get_chipselect(spi, 0), cs_high);  } -static int mcfqspi_transfer_one(struct spi_master *master, +static int mcfqspi_transfer_one(struct spi_controller *host,  				struct spi_device *spi,  				struct spi_transfer *t)  { -	struct mcfqspi *mcfqspi = spi_master_get_devdata(master); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);  	u16 qmr = MCFQSPI_QMR_MSTR;  	qmr |= t->bits_per_word << 10; @@ -323,7 +323,7 @@ static int mcfqspi_transfer_one(struct spi_master *master,  static int mcfqspi_setup(struct spi_device *spi)  { -	mcfqspi_cs_deselect(spi_master_get_devdata(spi->master), +	mcfqspi_cs_deselect(spi_controller_get_devdata(spi->controller),  			    spi_get_chipselect(spi, 0), spi->mode & SPI_CS_HIGH);  	dev_dbg(&spi->dev, @@ -337,7 +337,7 @@ static int mcfqspi_setup(struct spi_device *spi)  static int mcfqspi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct mcfqspi *mcfqspi;  	struct mcfqspi_platform_data *pdata;  	int status; @@ -353,13 +353,13 @@ static int mcfqspi_probe(struct platform_device *pdev)  		return -EINVAL;  	} -	master = spi_alloc_master(&pdev->dev, sizeof(*mcfqspi)); -	if (master == NULL) { -		dev_dbg(&pdev->dev, "spi_alloc_master failed\n"); +	host = spi_alloc_host(&pdev->dev, sizeof(*mcfqspi)); +	if (host == NULL) { +		dev_dbg(&pdev->dev, "spi_alloc_host failed\n");  		return -ENOMEM;  	} -	mcfqspi = spi_master_get_devdata(master); +	mcfqspi = spi_controller_get_devdata(host);  	mcfqspi->iobase = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(mcfqspi->iobase)) { @@ -381,53 +381,50 @@ static int mcfqspi_probe(struct platform_device *pdev)  		goto fail0;  	} -	mcfqspi->clk = devm_clk_get(&pdev->dev, "qspi_clk"); +	mcfqspi->clk = devm_clk_get_enabled(&pdev->dev, "qspi_clk");  	if (IS_ERR(mcfqspi->clk)) {  		dev_dbg(&pdev->dev, "clk_get failed\n");  		status = PTR_ERR(mcfqspi->clk);  		goto fail0;  	} -	clk_prepare_enable(mcfqspi->clk); -	master->bus_num = pdata->bus_num; -	master->num_chipselect = pdata->num_chipselect; +	host->bus_num = pdata->bus_num; +	host->num_chipselect = pdata->num_chipselect;  	mcfqspi->cs_control = pdata->cs_control;  	status = mcfqspi_cs_setup(mcfqspi);  	if (status) {  		dev_dbg(&pdev->dev, "error initializing cs_control\n"); -		goto fail1; +		goto fail0;  	}  	init_waitqueue_head(&mcfqspi->waitq); -	master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16); -	master->setup = mcfqspi_setup; -	master->set_cs = mcfqspi_set_cs; -	master->transfer_one = mcfqspi_transfer_one; -	master->auto_runtime_pm = true; +	host->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16); +	host->setup = mcfqspi_setup; +	host->set_cs = mcfqspi_set_cs; +	host->transfer_one = mcfqspi_transfer_one; +	host->auto_runtime_pm = true; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host);  	pm_runtime_enable(&pdev->dev); -	status = devm_spi_register_master(&pdev->dev, master); +	status = devm_spi_register_controller(&pdev->dev, host);  	if (status) { -		dev_dbg(&pdev->dev, "spi_register_master failed\n"); -		goto fail2; +		dev_dbg(&pdev->dev, "devm_spi_register_controller failed\n"); +		goto fail1;  	}  	dev_info(&pdev->dev, "Coldfire QSPI bus driver\n");  	return 0; -fail2: +fail1:  	pm_runtime_disable(&pdev->dev);  	mcfqspi_cs_teardown(mcfqspi); -fail1: -	clk_disable_unprepare(mcfqspi->clk);  fail0: -	spi_master_put(master); +	spi_controller_put(host);  	dev_dbg(&pdev->dev, "Coldfire QSPI probe failed\n"); @@ -436,8 +433,8 @@ fail0:  static void mcfqspi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct mcfqspi *mcfqspi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);  	pm_runtime_disable(&pdev->dev);  	/* disable the hardware (set the baud rate to 0) */ @@ -450,11 +447,11 @@ static void mcfqspi_remove(struct platform_device *pdev)  #ifdef CONFIG_PM_SLEEP  static int mcfqspi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct mcfqspi *mcfqspi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);  	int ret; -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	if (ret)  		return ret; @@ -465,20 +462,20 @@ static int mcfqspi_suspend(struct device *dev)  static int mcfqspi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct mcfqspi *mcfqspi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);  	clk_enable(mcfqspi->clk); -	return spi_master_resume(master); +	return spi_controller_resume(host);  }  #endif  #ifdef CONFIG_PM  static int mcfqspi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct mcfqspi *mcfqspi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);  	clk_disable(mcfqspi->clk); @@ -487,8 +484,8 @@ static int mcfqspi_runtime_suspend(struct device *dev)  static int mcfqspi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct mcfqspi *mcfqspi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);  	clk_enable(mcfqspi->clk); diff --git a/drivers/spi/spi-cs42l43.c b/drivers/spi/spi-cs42l43.c new file mode 100644 index 000000000000..453a9b37ce78 --- /dev/null +++ b/drivers/spi/spi-cs42l43.c @@ -0,0 +1,284 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// CS42L43 SPI Controller Driver +// +// Copyright (C) 2022-2023 Cirrus Logic, Inc. and +//                         Cirrus Logic International Semiconductor Ltd. + +#include <linux/bits.h> +#include <linux/bitfield.h> +#include <linux/device.h> +#include <linux/errno.h> +#include <linux/mfd/cs42l43.h> +#include <linux/mfd/cs42l43-regs.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/regmap.h> +#include <linux/spi/spi.h> +#include <linux/units.h> + +#define CS42L43_FIFO_SIZE		16 +#define CS42L43_SPI_ROOT_HZ		(40 * HZ_PER_MHZ) +#define CS42L43_SPI_MAX_LENGTH		65532 + +enum cs42l43_spi_cmd { +	CS42L43_WRITE, +	CS42L43_READ +}; + +struct cs42l43_spi { +	struct device *dev; +	struct regmap *regmap; +	struct spi_controller *ctlr; +}; + +static const unsigned int cs42l43_clock_divs[] = { +	2, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 +}; + +static int cs42l43_spi_tx(struct regmap *regmap, const u8 *buf, unsigned int len) +{ +	const u8 *end = buf + len; +	u32 val = 0; +	int ret; + +	while (buf < end) { +		const u8 *block = min(buf + CS42L43_FIFO_SIZE, end); + +		while (buf < block) { +			const u8 *word = min(buf + sizeof(u32), block); +			int pad = (buf + sizeof(u32)) - word; + +			while (buf < word) { +				val >>= BITS_PER_BYTE; +				val |= FIELD_PREP(GENMASK(31, 24), *buf); + +				buf++; +			} + +			val >>= pad * BITS_PER_BYTE; + +			regmap_write(regmap, CS42L43_TX_DATA, val); +		} + +		regmap_write(regmap, CS42L43_TRAN_CONFIG8, CS42L43_SPI_TX_DONE_MASK); + +		ret = regmap_read_poll_timeout(regmap, CS42L43_TRAN_STATUS1, +					       val, (val & CS42L43_SPI_TX_REQUEST_MASK), +					       1000, 5000); +		if (ret) +			return ret; +	} + +	return 0; +} + +static int cs42l43_spi_rx(struct regmap *regmap, u8 *buf, unsigned int len) +{ +	u8 *end = buf + len; +	u32 val; +	int ret; + +	while (buf < end) { +		u8 *block = min(buf + CS42L43_FIFO_SIZE, end); + +		ret = regmap_read_poll_timeout(regmap, CS42L43_TRAN_STATUS1, +					       val, (val & CS42L43_SPI_RX_REQUEST_MASK), +					       1000, 5000); +		if (ret) +			return ret; + +		while (buf < block) { +			u8 *word = min(buf + sizeof(u32), block); + +			ret = regmap_read(regmap, CS42L43_RX_DATA, &val); +			if (ret) +				return ret; + +			while (buf < word) { +				*buf = FIELD_GET(GENMASK(7, 0), val); + +				val >>= BITS_PER_BYTE; +				buf++; +			} +		} + +		regmap_write(regmap, CS42L43_TRAN_CONFIG8, CS42L43_SPI_RX_DONE_MASK); +	} + +	return 0; +} + +static int cs42l43_transfer_one(struct spi_controller *ctlr, struct spi_device *spi, +				struct spi_transfer *tfr) +{ +	struct cs42l43_spi *priv = spi_controller_get_devdata(spi->controller); +	int i, ret = -EINVAL; + +	for (i = 0; i < ARRAY_SIZE(cs42l43_clock_divs); i++) { +		if (CS42L43_SPI_ROOT_HZ / cs42l43_clock_divs[i] <= tfr->speed_hz) +			break; +	} + +	if (i == ARRAY_SIZE(cs42l43_clock_divs)) +		return -EINVAL; + +	regmap_write(priv->regmap, CS42L43_SPI_CLK_CONFIG1, i); + +	if (tfr->tx_buf) { +		regmap_write(priv->regmap, CS42L43_TRAN_CONFIG3, CS42L43_WRITE); +		regmap_write(priv->regmap, CS42L43_TRAN_CONFIG4, tfr->len - 1); +	} else if (tfr->rx_buf) { +		regmap_write(priv->regmap, CS42L43_TRAN_CONFIG3, CS42L43_READ); +		regmap_write(priv->regmap, CS42L43_TRAN_CONFIG5, tfr->len - 1); +	} + +	regmap_write(priv->regmap, CS42L43_TRAN_CONFIG1, CS42L43_SPI_START_MASK); + +	if (tfr->tx_buf) +		ret = cs42l43_spi_tx(priv->regmap, (const u8 *)tfr->tx_buf, tfr->len); +	else if (tfr->rx_buf) +		ret = cs42l43_spi_rx(priv->regmap, (u8 *)tfr->rx_buf, tfr->len); + +	return ret; +} + +static void cs42l43_set_cs(struct spi_device *spi, bool is_high) +{ +	struct cs42l43_spi *priv = spi_controller_get_devdata(spi->controller); + +	if (spi_get_chipselect(spi, 0) == 0) +		regmap_write(priv->regmap, CS42L43_SPI_CONFIG2, !is_high); +} + +static int cs42l43_prepare_message(struct spi_controller *ctlr, struct spi_message *msg) +{ +	struct cs42l43_spi *priv = spi_controller_get_devdata(ctlr); +	struct spi_device *spi = msg->spi; +	unsigned int spi_config1 = 0; + +	/* select another internal CS, which doesn't exist, so CS 0 is not used */ +	if (spi_get_csgpiod(spi, 0)) +		spi_config1 |= 1 << CS42L43_SPI_SS_SEL_SHIFT; +	if (spi->mode & SPI_CPOL) +		spi_config1 |= CS42L43_SPI_CPOL_MASK; +	if (spi->mode & SPI_CPHA) +		spi_config1 |= CS42L43_SPI_CPHA_MASK; +	if (spi->mode & SPI_3WIRE) +		spi_config1 |= CS42L43_SPI_THREE_WIRE_MASK; + +	regmap_write(priv->regmap, CS42L43_SPI_CONFIG1, spi_config1); + +	return 0; +} + +static int cs42l43_prepare_transfer_hardware(struct spi_controller *ctlr) +{ +	struct cs42l43_spi *priv = spi_controller_get_devdata(ctlr); +	int ret; + +	ret = regmap_write(priv->regmap, CS42L43_BLOCK_EN2, CS42L43_SPI_MSTR_EN_MASK); +	if (ret) +		dev_err(priv->dev, "Failed to enable SPI controller: %d\n", ret); + +	return ret; +} + +static int cs42l43_unprepare_transfer_hardware(struct spi_controller *ctlr) +{ +	struct cs42l43_spi *priv = spi_controller_get_devdata(ctlr); +	int ret; + +	ret = regmap_write(priv->regmap, CS42L43_BLOCK_EN2, 0); +	if (ret) +		dev_err(priv->dev, "Failed to disable SPI controller: %d\n", ret); + +	return ret; +} + +static size_t cs42l43_spi_max_length(struct spi_device *spi) +{ +	return CS42L43_SPI_MAX_LENGTH; +} + +static int cs42l43_spi_probe(struct platform_device *pdev) +{ +	struct cs42l43 *cs42l43 = dev_get_drvdata(pdev->dev.parent); +	struct cs42l43_spi *priv; +	struct fwnode_handle *fwnode = dev_fwnode(cs42l43->dev); +	int ret; + +	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); +	if (!priv) +		return -ENOMEM; + +	priv->ctlr = devm_spi_alloc_master(&pdev->dev, sizeof(*priv->ctlr)); +	if (!priv->ctlr) +		return -ENOMEM; + +	spi_controller_set_devdata(priv->ctlr, priv); + +	priv->dev = &pdev->dev; +	priv->regmap = cs42l43->regmap; + +	priv->ctlr->prepare_message = cs42l43_prepare_message; +	priv->ctlr->prepare_transfer_hardware = cs42l43_prepare_transfer_hardware; +	priv->ctlr->unprepare_transfer_hardware = cs42l43_unprepare_transfer_hardware; +	priv->ctlr->transfer_one = cs42l43_transfer_one; +	priv->ctlr->set_cs = cs42l43_set_cs; +	priv->ctlr->max_transfer_size = cs42l43_spi_max_length; + +	if (is_of_node(fwnode)) +		fwnode = fwnode_get_named_child_node(fwnode, "spi"); + +	device_set_node(&priv->ctlr->dev, fwnode); + +	priv->ctlr->mode_bits = SPI_3WIRE | SPI_MODE_X_MASK; +	priv->ctlr->flags = SPI_CONTROLLER_HALF_DUPLEX; +	priv->ctlr->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16) | +					 SPI_BPW_MASK(32); +	priv->ctlr->min_speed_hz = CS42L43_SPI_ROOT_HZ / +				   cs42l43_clock_divs[ARRAY_SIZE(cs42l43_clock_divs) - 1]; +	priv->ctlr->max_speed_hz = CS42L43_SPI_ROOT_HZ / cs42l43_clock_divs[0]; +	priv->ctlr->use_gpio_descriptors = true; +	priv->ctlr->auto_runtime_pm = true; + +	devm_pm_runtime_enable(priv->dev); +	pm_runtime_idle(priv->dev); + +	regmap_write(priv->regmap, CS42L43_TRAN_CONFIG6, CS42L43_FIFO_SIZE - 1); +	regmap_write(priv->regmap, CS42L43_TRAN_CONFIG7, CS42L43_FIFO_SIZE - 1); + +	// Disable Watchdog timer and enable stall +	regmap_write(priv->regmap, CS42L43_SPI_CONFIG3, 0); +	regmap_write(priv->regmap, CS42L43_SPI_CONFIG4, CS42L43_SPI_STALL_ENA_MASK); + +	ret = devm_spi_register_controller(priv->dev, priv->ctlr); +	if (ret) { +		pm_runtime_disable(priv->dev); +		dev_err(priv->dev, "Failed to register SPI controller: %d\n", ret); +	} + +	return ret; +} + +static const struct platform_device_id cs42l43_spi_id_table[] = { +	{ "cs42l43-spi", }, +	{} +}; +MODULE_DEVICE_TABLE(platform, cs42l43_spi_id_table); + +static struct platform_driver cs42l43_spi_driver = { +	.driver = { +		.name	= "cs42l43-spi", +	}, +	.probe		= cs42l43_spi_probe, +	.id_table	= cs42l43_spi_id_table, +}; +module_platform_driver(cs42l43_spi_driver); + +MODULE_DESCRIPTION("CS42L43 SPI Driver"); +MODULE_AUTHOR("Lucas Tanure <tanureal@opensource.cirrus.com>"); +MODULE_AUTHOR("Maciej Strozek <mstrozek@opensource.cirrus.com>"); +MODULE_LICENSE("GPL"); diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c index b04811c911e2..c457b550d3ad 100644 --- a/drivers/spi/spi-davinci.c +++ b/drivers/spi/spi-davinci.c @@ -15,7 +15,6 @@  #include <linux/dmaengine.h>  #include <linux/dma-mapping.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/spi/spi.h>  #include <linux/spi/spi_bitbang.h>  #include <linux/slab.h> @@ -202,7 +201,7 @@ static void davinci_spi_chipselect(struct spi_device *spi, int value)  	u8 chip_sel = spi_get_chipselect(spi, 0);  	u16 spidat1 = CS_DEFAULT; -	dspi = spi_master_get_devdata(spi->master); +	dspi = spi_controller_get_devdata(spi->controller);  	/* program delay transfers if tx_delay is non zero */  	if (spicfg && spicfg->wdelay) @@ -272,7 +271,7 @@ static int davinci_spi_setup_transfer(struct spi_device *spi,  	u32 hz = 0, spifmt = 0;  	int prescale; -	dspi = spi_master_get_devdata(spi->master); +	dspi = spi_controller_get_devdata(spi->controller);  	spicfg = spi->controller_data;  	if (!spicfg)  		spicfg = &davinci_spi_default_cfg; @@ -380,7 +379,7 @@ static int davinci_spi_of_setup(struct spi_device *spi)  {  	struct davinci_spi_config *spicfg = spi->controller_data;  	struct device_node *np = spi->dev.of_node; -	struct davinci_spi *dspi = spi_master_get_devdata(spi->master); +	struct davinci_spi *dspi = spi_controller_get_devdata(spi->controller);  	u32 prop;  	if (spicfg == NULL && np) { @@ -412,7 +411,7 @@ static int davinci_spi_setup(struct spi_device *spi)  	struct device_node *np = spi->dev.of_node;  	bool internal_cs = true; -	dspi = spi_master_get_devdata(spi->master); +	dspi = spi_controller_get_devdata(spi->controller);  	if (!(spi->mode & SPI_NO_CS)) {  		if (np && spi_get_csgpiod(spi, 0)) @@ -442,7 +441,7 @@ static void davinci_spi_cleanup(struct spi_device *spi)  		kfree(spicfg);  } -static bool davinci_spi_can_dma(struct spi_master *master, +static bool davinci_spi_can_dma(struct spi_controller *host,  				struct spi_device *spi,  				struct spi_transfer *xfer)  { @@ -572,7 +571,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)  	struct davinci_spi_config *spicfg;  	struct davinci_spi_platform_data *pdata; -	dspi = spi_master_get_devdata(spi->master); +	dspi = spi_controller_get_devdata(spi->controller);  	pdata = &dspi->pdata;  	spicfg = (struct davinci_spi_config *)spi->controller_data;  	if (!spicfg) @@ -593,7 +592,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)  	reinit_completion(&dspi->done); -	if (!davinci_spi_can_dma(spi->master, spi, t)) { +	if (!davinci_spi_can_dma(spi->controller, spi, t)) {  		if (spicfg->io_type != SPI_IO_TYPE_POLL)  			set_io_bits(dspi->base + SPIINT, SPIINT_MASKINT);  		/* start the transfer */ @@ -674,7 +673,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)  	}  	clear_io_bits(dspi->base + SPIINT, SPIINT_MASKALL); -	if (davinci_spi_can_dma(spi->master, spi, t)) +	if (davinci_spi_can_dma(spi->controller, spi, t))  		clear_io_bits(dspi->base + SPIINT, SPIINT_DMA_REQ_EN);  	clear_io_bits(dspi->base + SPIGCR1, SPIGCR1_SPIENA_MASK); @@ -856,22 +855,22 @@ static int spi_davinci_get_pdata(struct platform_device *pdev,   */  static int davinci_spi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct davinci_spi *dspi;  	struct davinci_spi_platform_data *pdata;  	struct resource *r;  	int ret = 0;  	u32 spipc0; -	master = spi_alloc_master(&pdev->dev, sizeof(struct davinci_spi)); -	if (master == NULL) { +	host = spi_alloc_host(&pdev->dev, sizeof(struct davinci_spi)); +	if (host == NULL) {  		ret = -ENOMEM;  		goto err;  	} -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	dspi = spi_master_get_devdata(master); +	dspi = spi_controller_get_devdata(host);  	if (dev_get_platdata(&pdev->dev)) {  		pdata = dev_get_platdata(&pdev->dev); @@ -880,7 +879,7 @@ static int davinci_spi_probe(struct platform_device *pdev)  		/* update dspi pdata with that from the DT */  		ret = spi_davinci_get_pdata(pdev, dspi);  		if (ret < 0) -			goto free_master; +			goto free_host;  	}  	/* pdata in dspi is now updated and point pdata to that */ @@ -892,57 +891,48 @@ static int davinci_spi_probe(struct platform_device *pdev)  					    GFP_KERNEL);  	if (dspi->bytes_per_word == NULL) {  		ret = -ENOMEM; -		goto free_master; +		goto free_host;  	} -	r = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (r == NULL) { -		ret = -ENOENT; -		goto free_master; -	} - -	dspi->pbase = r->start; - -	dspi->base = devm_ioremap_resource(&pdev->dev, r); +	dspi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);  	if (IS_ERR(dspi->base)) {  		ret = PTR_ERR(dspi->base); -		goto free_master; +		goto free_host;  	} +	dspi->pbase = r->start;  	init_completion(&dspi->done);  	ret = platform_get_irq(pdev, 0); -	if (ret == 0) -		ret = -EINVAL;  	if (ret < 0) -		goto free_master; +		goto free_host;  	dspi->irq = ret;  	ret = devm_request_threaded_irq(&pdev->dev, dspi->irq, davinci_spi_irq,  				dummy_thread_fn, 0, dev_name(&pdev->dev), dspi);  	if (ret) -		goto free_master; +		goto free_host; -	dspi->bitbang.master = master; +	dspi->bitbang.master = host;  	dspi->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(dspi->clk)) {  		ret = -ENODEV; -		goto free_master; +		goto free_host;  	}  	ret = clk_prepare_enable(dspi->clk);  	if (ret) -		goto free_master; +		goto free_host; -	master->use_gpio_descriptors = true; -	master->dev.of_node = pdev->dev.of_node; -	master->bus_num = pdev->id; -	master->num_chipselect = pdata->num_chipselect; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 16); -	master->flags = SPI_MASTER_MUST_RX | SPI_MASTER_GPIO_SS; -	master->setup = davinci_spi_setup; -	master->cleanup = davinci_spi_cleanup; -	master->can_dma = davinci_spi_can_dma; +	host->use_gpio_descriptors = true; +	host->dev.of_node = pdev->dev.of_node; +	host->bus_num = pdev->id; +	host->num_chipselect = pdata->num_chipselect; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 16); +	host->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_GPIO_SS; +	host->setup = davinci_spi_setup; +	host->cleanup = davinci_spi_cleanup; +	host->can_dma = davinci_spi_can_dma;  	dspi->bitbang.chipselect = davinci_spi_chipselect;  	dspi->bitbang.setup_transfer = davinci_spi_setup_transfer; @@ -983,7 +973,7 @@ static int davinci_spi_probe(struct platform_device *pdev)  	iowrite32(CS_DEFAULT, dspi->base + SPIDEF); -	/* master mode default */ +	/* host mode default */  	set_io_bits(dspi->base + SPIGCR1, SPIGCR1_CLKMOD_MASK);  	set_io_bits(dspi->base + SPIGCR1, SPIGCR1_MASTER_MASK);  	set_io_bits(dspi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK); @@ -1003,8 +993,8 @@ free_dma:  	}  free_clk:  	clk_disable_unprepare(dspi->clk); -free_master: -	spi_master_put(master); +free_host: +	spi_controller_put(host);  err:  	return ret;  } @@ -1021,10 +1011,10 @@ err:  static void davinci_spi_remove(struct platform_device *pdev)  {  	struct davinci_spi *dspi; -	struct spi_master *master; +	struct spi_controller *host; -	master = platform_get_drvdata(pdev); -	dspi = spi_master_get_devdata(master); +	host = platform_get_drvdata(pdev); +	dspi = spi_controller_get_devdata(host);  	spi_bitbang_stop(&dspi->bitbang); @@ -1035,7 +1025,7 @@ static void davinci_spi_remove(struct platform_device *pdev)  		dma_release_channel(dspi->dma_tx);  	} -	spi_master_put(master); +	spi_controller_put(host);  }  static struct platform_driver davinci_spi_driver = { diff --git a/drivers/spi/spi-dln2.c b/drivers/spi/spi-dln2.c index 6bd93c47853c..d319dc357fef 100644 --- a/drivers/spi/spi-dln2.c +++ b/drivers/spi/spi-dln2.c @@ -79,7 +79,7 @@  struct dln2_spi {  	struct platform_device *pdev; -	struct spi_master *master; +	struct spi_controller *host;  	u8 port;  	/* @@ -176,7 +176,7 @@ static int dln2_spi_cs_enable(struct dln2_spi *dln2, u8 cs_mask, bool enable)  static int dln2_spi_cs_enable_all(struct dln2_spi *dln2, bool enable)  { -	u8 cs_mask = GENMASK(dln2->master->num_chipselect - 1, 0); +	u8 cs_mask = GENMASK(dln2->host->num_chipselect - 1, 0);  	return dln2_spi_cs_enable(dln2, cs_mask, enable);  } @@ -589,11 +589,11 @@ static int dln2_spi_rdwr(struct dln2_spi *dln2, const u8 *tx_data,  	return 0;  } -static int dln2_spi_prepare_message(struct spi_master *master, +static int dln2_spi_prepare_message(struct spi_controller *host,  				    struct spi_message *message)  {  	int ret; -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host);  	struct spi_device *spi = message->spi;  	if (dln2->cs != spi_get_chipselect(spi, 0)) { @@ -650,11 +650,11 @@ static int dln2_spi_transfer_setup(struct dln2_spi *dln2, u32 speed,  	return dln2_spi_enable(dln2, true);  } -static int dln2_spi_transfer_one(struct spi_master *master, +static int dln2_spi_transfer_one(struct spi_controller *host,  				 struct spi_device *spi,  				 struct spi_transfer *xfer)  { -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host);  	int status;  	u8 attr = 0; @@ -666,7 +666,7 @@ static int dln2_spi_transfer_one(struct spi_master *master,  		return status;  	} -	if (!xfer->cs_change && !spi_transfer_is_last(master, xfer)) +	if (!xfer->cs_change && !spi_transfer_is_last(host, xfer))  		attr = DLN2_SPI_ATTR_LEAVE_SS_LOW;  	status = dln2_spi_rdwr(dln2, xfer->tx_buf, xfer->rx_buf, @@ -679,29 +679,29 @@ static int dln2_spi_transfer_one(struct spi_master *master,  static int dln2_spi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct dln2_spi *dln2;  	struct dln2_platform_data *pdata = dev_get_platdata(&pdev->dev);  	struct device *dev = &pdev->dev;  	int ret; -	master = spi_alloc_master(&pdev->dev, sizeof(*dln2)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*dln2)); +	if (!host)  		return -ENOMEM; -	device_set_node(&master->dev, dev_fwnode(dev)); +	device_set_node(&host->dev, dev_fwnode(dev)); -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	dln2 = spi_master_get_devdata(master); +	dln2 = spi_controller_get_devdata(host);  	dln2->buf = devm_kmalloc(&pdev->dev, DLN2_SPI_BUF_SIZE, GFP_KERNEL);  	if (!dln2->buf) {  		ret = -ENOMEM; -		goto exit_free_master; +		goto exit_free_host;  	} -	dln2->master = master; +	dln2->host = host;  	dln2->pdev = pdev;  	dln2->port = pdata->port;  	/* cs/mode can never be 0xff, so the first transfer will set them */ @@ -712,47 +712,47 @@ static int dln2_spi_probe(struct platform_device *pdev)  	ret = dln2_spi_enable(dln2, false);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to disable SPI module\n"); -		goto exit_free_master; +		goto exit_free_host;  	} -	ret = dln2_spi_get_cs_num(dln2, &master->num_chipselect); +	ret = dln2_spi_get_cs_num(dln2, &host->num_chipselect);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to get number of CS pins\n"); -		goto exit_free_master; +		goto exit_free_host;  	}  	ret = dln2_spi_get_speed_range(dln2, -				       &master->min_speed_hz, -				       &master->max_speed_hz); +				       &host->min_speed_hz, +				       &host->max_speed_hz);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to read bus min/max freqs\n"); -		goto exit_free_master; +		goto exit_free_host;  	}  	ret = dln2_spi_get_supported_frame_sizes(dln2, -						 &master->bits_per_word_mask); +						 &host->bits_per_word_mask);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to read supported frame sizes\n"); -		goto exit_free_master; +		goto exit_free_host;  	}  	ret = dln2_spi_cs_enable_all(dln2, true);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to enable CS pins\n"); -		goto exit_free_master; +		goto exit_free_host;  	} -	master->bus_num = -1; -	master->mode_bits = SPI_CPOL | SPI_CPHA; -	master->prepare_message = dln2_spi_prepare_message; -	master->transfer_one = dln2_spi_transfer_one; -	master->auto_runtime_pm = true; +	host->bus_num = -1; +	host->mode_bits = SPI_CPOL | SPI_CPHA; +	host->prepare_message = dln2_spi_prepare_message; +	host->transfer_one = dln2_spi_transfer_one; +	host->auto_runtime_pm = true;  	/* enable SPI module, we're good to go */  	ret = dln2_spi_enable(dln2, true);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to enable SPI module\n"); -		goto exit_free_master; +		goto exit_free_host;  	}  	pm_runtime_set_autosuspend_delay(&pdev->dev, @@ -761,9 +761,9 @@ static int dln2_spi_probe(struct platform_device *pdev)  	pm_runtime_set_active(&pdev->dev);  	pm_runtime_enable(&pdev->dev); -	ret = devm_spi_register_master(&pdev->dev, master); +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (ret < 0) { -		dev_err(&pdev->dev, "Failed to register master\n"); +		dev_err(&pdev->dev, "Failed to register host\n");  		goto exit_register;  	} @@ -775,16 +775,16 @@ exit_register:  	if (dln2_spi_enable(dln2, false) < 0)  		dev_err(&pdev->dev, "Failed to disable SPI module\n"); -exit_free_master: -	spi_master_put(master); +exit_free_host: +	spi_controller_put(host);  	return ret;  }  static void dln2_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host);  	pm_runtime_disable(&pdev->dev); @@ -796,10 +796,10 @@ static void dln2_spi_remove(struct platform_device *pdev)  static int dln2_spi_suspend(struct device *dev)  {  	int ret; -	struct spi_master *master = dev_get_drvdata(dev); -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host); -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	if (ret < 0)  		return ret; @@ -824,8 +824,8 @@ static int dln2_spi_suspend(struct device *dev)  static int dln2_spi_resume(struct device *dev)  {  	int ret; -	struct spi_master *master = dev_get_drvdata(dev); -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host);  	if (!pm_runtime_suspended(dev)) {  		ret = dln2_spi_cs_enable_all(dln2, true); @@ -837,23 +837,23 @@ static int dln2_spi_resume(struct device *dev)  			return ret;  	} -	return spi_master_resume(master); +	return spi_controller_resume(host);  }  #endif /* CONFIG_PM_SLEEP */  #ifdef CONFIG_PM  static int dln2_spi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host);  	return dln2_spi_enable(dln2, false);  }  static int dln2_spi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct dln2_spi *dln2 = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct dln2_spi *dln2 = spi_controller_get_devdata(host);  	return  dln2_spi_enable(dln2, true);  } @@ -875,7 +875,7 @@ static struct platform_driver spi_dln2_driver = {  };  module_platform_driver(spi_dln2_driver); -MODULE_DESCRIPTION("Driver for the Diolan DLN2 SPI master interface"); +MODULE_DESCRIPTION("Driver for the Diolan DLN2 SPI host interface");  MODULE_AUTHOR("Laurentiu Palcu <laurentiu.palcu@intel.com>");  MODULE_LICENSE("GPL v2");  MODULE_ALIAS("platform:dln2-spi"); diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index a8ba41ad4541..0274c9295514 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -61,7 +61,7 @@ static void dw_spi_debugfs_init(struct dw_spi *dws)  {  	char name[32]; -	snprintf(name, 32, "dw_spi%d", dws->master->bus_num); +	snprintf(name, 32, "dw_spi%d", dws->host->bus_num);  	dws->debugfs = debugfs_create_dir(name, NULL);  	dws->regset.regs = dw_spi_dbgfs_regs; @@ -183,25 +183,25 @@ int dw_spi_check_status(struct dw_spi *dws, bool raw)  		irq_status = dw_readl(dws, DW_SPI_ISR);  	if (irq_status & DW_SPI_INT_RXOI) { -		dev_err(&dws->master->dev, "RX FIFO overflow detected\n"); +		dev_err(&dws->host->dev, "RX FIFO overflow detected\n");  		ret = -EIO;  	}  	if (irq_status & DW_SPI_INT_RXUI) { -		dev_err(&dws->master->dev, "RX FIFO underflow detected\n"); +		dev_err(&dws->host->dev, "RX FIFO underflow detected\n");  		ret = -EIO;  	}  	if (irq_status & DW_SPI_INT_TXOI) { -		dev_err(&dws->master->dev, "TX FIFO overflow detected\n"); +		dev_err(&dws->host->dev, "TX FIFO overflow detected\n");  		ret = -EIO;  	}  	/* Generically handle the erroneous situation */  	if (ret) {  		dw_spi_reset_chip(dws); -		if (dws->master->cur_msg) -			dws->master->cur_msg->status = ret; +		if (dws->host->cur_msg) +			dws->host->cur_msg->status = ret;  	}  	return ret; @@ -213,7 +213,7 @@ static irqreturn_t dw_spi_transfer_handler(struct dw_spi *dws)  	u16 irq_status = dw_readl(dws, DW_SPI_ISR);  	if (dw_spi_check_status(dws, false)) { -		spi_finalize_current_transfer(dws->master); +		spi_finalize_current_transfer(dws->host);  		return IRQ_HANDLED;  	} @@ -227,7 +227,7 @@ static irqreturn_t dw_spi_transfer_handler(struct dw_spi *dws)  	dw_reader(dws);  	if (!dws->rx_len) {  		dw_spi_mask_intr(dws, 0xff); -		spi_finalize_current_transfer(dws->master); +		spi_finalize_current_transfer(dws->host);  	} else if (dws->rx_len <= dw_readl(dws, DW_SPI_RXFTLR)) {  		dw_writel(dws, DW_SPI_RXFTLR, dws->rx_len - 1);  	} @@ -248,14 +248,14 @@ static irqreturn_t dw_spi_transfer_handler(struct dw_spi *dws)  static irqreturn_t dw_spi_irq(int irq, void *dev_id)  { -	struct spi_controller *master = dev_id; -	struct dw_spi *dws = spi_controller_get_devdata(master); +	struct spi_controller *host = dev_id; +	struct dw_spi *dws = spi_controller_get_devdata(host);  	u16 irq_status = dw_readl(dws, DW_SPI_ISR) & DW_SPI_INT_MASK;  	if (!irq_status)  		return IRQ_NONE; -	if (!master->cur_msg) { +	if (!host->cur_msg) {  		dw_spi_mask_intr(dws, 0xff);  		return IRQ_HANDLED;  	} @@ -408,11 +408,11 @@ static int dw_spi_poll_transfer(struct dw_spi *dws,  	return 0;  } -static int dw_spi_transfer_one(struct spi_controller *master, +static int dw_spi_transfer_one(struct spi_controller *host,  			       struct spi_device *spi,  			       struct spi_transfer *transfer)  { -	struct dw_spi *dws = spi_controller_get_devdata(master); +	struct dw_spi *dws = spi_controller_get_devdata(host);  	struct dw_spi_cfg cfg = {  		.tmode = DW_SPI_CTRLR0_TMOD_TR,  		.dfs = transfer->bits_per_word, @@ -440,8 +440,8 @@ static int dw_spi_transfer_one(struct spi_controller *master,  	transfer->effective_speed_hz = dws->current_freq;  	/* Check if current transfer is a DMA transaction */ -	if (master->can_dma && master->can_dma(master, spi, transfer)) -		dws->dma_mapped = master->cur_msg_mapped; +	if (host->can_dma && host->can_dma(host, spi, transfer)) +		dws->dma_mapped = host->cur_msg_mapped;  	/* For poll mode just disable all interrupts */  	dw_spi_mask_intr(dws, 0xff); @@ -464,10 +464,10 @@ static int dw_spi_transfer_one(struct spi_controller *master,  	return 1;  } -static void dw_spi_handle_err(struct spi_controller *master, +static void dw_spi_handle_err(struct spi_controller *host,  			      struct spi_message *msg)  { -	struct dw_spi *dws = spi_controller_get_devdata(master); +	struct dw_spi *dws = spi_controller_get_devdata(host);  	if (dws->dma_mapped)  		dws->dma_ops->dma_stop(dws); @@ -576,7 +576,7 @@ static int dw_spi_write_then_read(struct dw_spi *dws, struct spi_device *spi)  	while (len) {  		entries = readl_relaxed(dws->regs + DW_SPI_TXFLR);  		if (!entries) { -			dev_err(&dws->master->dev, "CS de-assertion on Tx\n"); +			dev_err(&dws->host->dev, "CS de-assertion on Tx\n");  			return -EIO;  		}  		room = min(dws->fifo_len - entries, len); @@ -596,7 +596,7 @@ static int dw_spi_write_then_read(struct dw_spi *dws, struct spi_device *spi)  		if (!entries) {  			sts = readl_relaxed(dws->regs + DW_SPI_RISR);  			if (sts & DW_SPI_INT_RXOI) { -				dev_err(&dws->master->dev, "FIFO overflow on Rx\n"); +				dev_err(&dws->host->dev, "FIFO overflow on Rx\n");  				return -EIO;  			}  			continue; @@ -637,7 +637,7 @@ static int dw_spi_wait_mem_op_done(struct dw_spi *dws)  		spi_delay_exec(&delay, NULL);  	if (retry < 0) { -		dev_err(&dws->master->dev, "Mem op hanged up\n"); +		dev_err(&dws->host->dev, "Mem op hanged up\n");  		return -EIO;  	} @@ -884,56 +884,56 @@ static void dw_spi_hw_init(struct device *dev, struct dw_spi *dws)  int dw_spi_add_host(struct device *dev, struct dw_spi *dws)  { -	struct spi_controller *master; +	struct spi_controller *host;  	int ret;  	if (!dws)  		return -EINVAL; -	master = spi_alloc_master(dev, 0); -	if (!master) +	host = spi_alloc_host(dev, 0); +	if (!host)  		return -ENOMEM; -	device_set_node(&master->dev, dev_fwnode(dev)); +	device_set_node(&host->dev, dev_fwnode(dev)); -	dws->master = master; +	dws->host = host;  	dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR); -	spi_controller_set_devdata(master, dws); +	spi_controller_set_devdata(host, dws);  	/* Basic HW init */  	dw_spi_hw_init(dev, dws);  	ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dev_name(dev), -			  master); +			  host);  	if (ret < 0 && ret != -ENOTCONN) {  		dev_err(dev, "can not get IRQ\n"); -		goto err_free_master; +		goto err_free_host;  	}  	dw_spi_init_mem_ops(dws); -	master->use_gpio_descriptors = true; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP; +	host->use_gpio_descriptors = true; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;  	if (dws->caps & DW_SPI_CAP_DFS32) -		master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); +		host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);  	else -		master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); -	master->bus_num = dws->bus_num; -	master->num_chipselect = dws->num_cs; -	master->setup = dw_spi_setup; -	master->cleanup = dw_spi_cleanup; +		host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); +	host->bus_num = dws->bus_num; +	host->num_chipselect = dws->num_cs; +	host->setup = dw_spi_setup; +	host->cleanup = dw_spi_cleanup;  	if (dws->set_cs) -		master->set_cs = dws->set_cs; +		host->set_cs = dws->set_cs;  	else -		master->set_cs = dw_spi_set_cs; -	master->transfer_one = dw_spi_transfer_one; -	master->handle_err = dw_spi_handle_err; +		host->set_cs = dw_spi_set_cs; +	host->transfer_one = dw_spi_transfer_one; +	host->handle_err = dw_spi_handle_err;  	if (dws->mem_ops.exec_op) -		master->mem_ops = &dws->mem_ops; -	master->max_speed_hz = dws->max_freq; -	master->flags = SPI_MASTER_GPIO_SS; -	master->auto_runtime_pm = true; +		host->mem_ops = &dws->mem_ops; +	host->max_speed_hz = dws->max_freq; +	host->flags = SPI_CONTROLLER_GPIO_SS; +	host->auto_runtime_pm = true;  	/* Get default rx sample delay */  	device_property_read_u32(dev, "rx-sample-delay-ns", @@ -946,14 +946,14 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)  		} else if (ret) {  			dev_warn(dev, "DMA init failed\n");  		} else { -			master->can_dma = dws->dma_ops->can_dma; -			master->flags |= SPI_CONTROLLER_MUST_TX; +			host->can_dma = dws->dma_ops->can_dma; +			host->flags |= SPI_CONTROLLER_MUST_TX;  		}  	} -	ret = spi_register_controller(master); +	ret = spi_register_controller(host);  	if (ret) { -		dev_err_probe(dev, ret, "problem registering spi master\n"); +		dev_err_probe(dev, ret, "problem registering spi host\n");  		goto err_dma_exit;  	} @@ -965,9 +965,9 @@ err_dma_exit:  		dws->dma_ops->dma_exit(dws);  	dw_spi_enable_chip(dws, 0);  err_free_irq: -	free_irq(dws->irq, master); -err_free_master: -	spi_controller_put(master); +	free_irq(dws->irq, host); +err_free_host: +	spi_controller_put(host);  	return ret;  }  EXPORT_SYMBOL_NS_GPL(dw_spi_add_host, SPI_DW_CORE); @@ -976,14 +976,14 @@ void dw_spi_remove_host(struct dw_spi *dws)  {  	dw_spi_debugfs_remove(dws); -	spi_unregister_controller(dws->master); +	spi_unregister_controller(dws->host);  	if (dws->dma_ops && dws->dma_ops->dma_exit)  		dws->dma_ops->dma_exit(dws);  	dw_spi_shutdown_chip(dws); -	free_irq(dws->irq, dws->master); +	free_irq(dws->irq, dws->host);  }  EXPORT_SYMBOL_NS_GPL(dw_spi_remove_host, SPI_DW_CORE); @@ -991,7 +991,7 @@ int dw_spi_suspend_host(struct dw_spi *dws)  {  	int ret; -	ret = spi_controller_suspend(dws->master); +	ret = spi_controller_suspend(dws->host);  	if (ret)  		return ret; @@ -1002,8 +1002,8 @@ EXPORT_SYMBOL_NS_GPL(dw_spi_suspend_host, SPI_DW_CORE);  int dw_spi_resume_host(struct dw_spi *dws)  { -	dw_spi_hw_init(&dws->master->dev, dws); -	return spi_controller_resume(dws->master); +	dw_spi_hw_init(&dws->host->dev, dws); +	return spi_controller_resume(dws->host);  }  EXPORT_SYMBOL_NS_GPL(dw_spi_resume_host, SPI_DW_CORE); diff --git a/drivers/spi/spi-dw-dma.c b/drivers/spi/spi-dw-dma.c index df819652901a..0ecbb6c36e23 100644 --- a/drivers/spi/spi-dw-dma.c +++ b/drivers/spi/spi-dw-dma.c @@ -139,8 +139,8 @@ static int dw_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws)  	if (!dws->txchan)  		goto free_rxchan; -	dws->master->dma_rx = dws->rxchan; -	dws->master->dma_tx = dws->txchan; +	dws->host->dma_rx = dws->rxchan; +	dws->host->dma_tx = dws->txchan;  	init_completion(&dws->dma_completion); @@ -183,8 +183,8 @@ static int dw_spi_dma_init_generic(struct device *dev, struct dw_spi *dws)  		goto free_rxchan;  	} -	dws->master->dma_rx = dws->rxchan; -	dws->master->dma_tx = dws->txchan; +	dws->host->dma_rx = dws->rxchan; +	dws->host->dma_tx = dws->txchan;  	init_completion(&dws->dma_completion); @@ -242,10 +242,10 @@ static enum dma_slave_buswidth dw_spi_dma_convert_width(u8 n_bytes)  	}  } -static bool dw_spi_can_dma(struct spi_controller *master, +static bool dw_spi_can_dma(struct spi_controller *host,  			   struct spi_device *spi, struct spi_transfer *xfer)  { -	struct dw_spi *dws = spi_controller_get_devdata(master); +	struct dw_spi *dws = spi_controller_get_devdata(host);  	enum dma_slave_buswidth dma_bus_width;  	if (xfer->len <= dws->fifo_len) @@ -271,7 +271,7 @@ static int dw_spi_dma_wait(struct dw_spi *dws, unsigned int len, u32 speed)  					 msecs_to_jiffies(ms));  	if (ms == 0) { -		dev_err(&dws->master->cur_msg->spi->dev, +		dev_err(&dws->host->cur_msg->spi->dev,  			"DMA transaction timed out\n");  		return -ETIMEDOUT;  	} @@ -299,7 +299,7 @@ static int dw_spi_dma_wait_tx_done(struct dw_spi *dws,  		spi_delay_exec(&delay, xfer);  	if (retry < 0) { -		dev_err(&dws->master->dev, "Tx hanged up\n"); +		dev_err(&dws->host->dev, "Tx hanged up\n");  		return -EIO;  	} @@ -400,7 +400,7 @@ static int dw_spi_dma_wait_rx_done(struct dw_spi *dws)  		spi_delay_exec(&delay, NULL);  	if (retry < 0) { -		dev_err(&dws->master->dev, "Rx hanged up\n"); +		dev_err(&dws->host->dev, "Rx hanged up\n");  		return -EIO;  	} @@ -656,13 +656,13 @@ static int dw_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)  	if (ret)  		return ret; -	if (dws->master->cur_msg->status == -EINPROGRESS) { +	if (dws->host->cur_msg->status == -EINPROGRESS) {  		ret = dw_spi_dma_wait_tx_done(dws, xfer);  		if (ret)  			return ret;  	} -	if (xfer->rx_buf && dws->master->cur_msg->status == -EINPROGRESS) +	if (xfer->rx_buf && dws->host->cur_msg->status == -EINPROGRESS)  		ret = dw_spi_dma_wait_rx_done(dws);  	return ret; diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c index a963bc96c223..805264c9c65c 100644 --- a/drivers/spi/spi-dw-mmio.c +++ b/drivers/spi/spi-dw-mmio.c @@ -76,7 +76,7 @@ struct dw_spi_mscc {   */  static void dw_spi_mscc_set_cs(struct spi_device *spi, bool enable)  { -	struct dw_spi *dws = spi_master_get_devdata(spi->master); +	struct dw_spi *dws = spi_controller_get_devdata(spi->controller);  	struct dw_spi_mmio *dwsmmio = container_of(dws, struct dw_spi_mmio, dws);  	struct dw_spi_mscc *dwsmscc = dwsmmio->priv;  	u32 cs = spi_get_chipselect(spi, 0); @@ -149,7 +149,7 @@ static int dw_spi_mscc_jaguar2_init(struct platform_device *pdev,   */  static void dw_spi_sparx5_set_cs(struct spi_device *spi, bool enable)  { -	struct dw_spi *dws = spi_master_get_devdata(spi->master); +	struct dw_spi *dws = spi_controller_get_devdata(spi->controller);  	struct dw_spi_mmio *dwsmmio = container_of(dws, struct dw_spi_mmio, dws);  	struct dw_spi_mscc *dwsmscc = dwsmmio->priv;  	u8 cs = spi_get_chipselect(spi, 0); @@ -277,7 +277,7 @@ static void dw_spi_elba_override_cs(struct regmap *syscon, int cs, int enable)  static void dw_spi_elba_set_cs(struct spi_device *spi, bool enable)  { -	struct dw_spi *dws = spi_master_get_devdata(spi->master); +	struct dw_spi *dws = spi_controller_get_devdata(spi->controller);  	struct dw_spi_mmio *dwsmmio = container_of(dws, struct dw_spi_mmio, dws);  	struct regmap *syscon = dwsmmio->priv;  	u8 cs; @@ -369,7 +369,9 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)  	dws->max_freq = clk_get_rate(dwsmmio->clk); -	device_property_read_u32(&pdev->dev, "reg-io-width", &dws->reg_io_width); +	if (device_property_read_u32(&pdev->dev, "reg-io-width", +				     &dws->reg_io_width)) +		dws->reg_io_width = 4;  	num_cs = 4; diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h index 3962e6dcf880..6cafeee8ee2a 100644 --- a/drivers/spi/spi-dw.h +++ b/drivers/spi/spi-dw.h @@ -142,14 +142,14 @@ struct dw_spi_dma_ops {  	int (*dma_init)(struct device *dev, struct dw_spi *dws);  	void (*dma_exit)(struct dw_spi *dws);  	int (*dma_setup)(struct dw_spi *dws, struct spi_transfer *xfer); -	bool (*can_dma)(struct spi_controller *master, struct spi_device *spi, +	bool (*can_dma)(struct spi_controller *host, struct spi_device *spi,  			struct spi_transfer *xfer);  	int (*dma_transfer)(struct dw_spi *dws, struct spi_transfer *xfer);  	void (*dma_stop)(struct dw_spi *dws);  };  struct dw_spi { -	struct spi_controller	*master; +	struct spi_controller	*host;  	u32			ip;		/* Synopsys DW SSI IP-core ID */  	u32			ver;		/* Synopsys component version */ diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c index 1615fd22f9a2..a1d60e51c053 100644 --- a/drivers/spi/spi-ep93xx.c +++ b/drivers/spi/spi-ep93xx.c @@ -104,15 +104,15 @@ struct ep93xx_spi {  /**   * ep93xx_spi_calc_divisors() - calculates SPI clock divisors - * @master: SPI master + * @host: SPI host   * @rate: desired SPI output clock rate   * @div_cpsr: pointer to return the cpsr (pre-scaler) divider   * @div_scr: pointer to return the scr divider   */ -static int ep93xx_spi_calc_divisors(struct spi_master *master, +static int ep93xx_spi_calc_divisors(struct spi_controller *host,  				    u32 rate, u8 *div_cpsr, u8 *div_scr)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	unsigned long spi_clk_rate = clk_get_rate(espi->clk);  	int cpsr, scr; @@ -120,7 +120,7 @@ static int ep93xx_spi_calc_divisors(struct spi_master *master,  	 * Make sure that max value is between values supported by the  	 * controller.  	 */ -	rate = clamp(rate, master->min_speed_hz, master->max_speed_hz); +	rate = clamp(rate, host->min_speed_hz, host->max_speed_hz);  	/*  	 * Calculate divisors so that we can get speed according the @@ -143,18 +143,18 @@ static int ep93xx_spi_calc_divisors(struct spi_master *master,  	return -EINVAL;  } -static int ep93xx_spi_chip_setup(struct spi_master *master, +static int ep93xx_spi_chip_setup(struct spi_controller *host,  				 struct spi_device *spi,  				 struct spi_transfer *xfer)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	u8 dss = bits_per_word_to_dss(xfer->bits_per_word);  	u8 div_cpsr = 0;  	u8 div_scr = 0;  	u16 cr0;  	int err; -	err = ep93xx_spi_calc_divisors(master, xfer->speed_hz, +	err = ep93xx_spi_calc_divisors(host, xfer->speed_hz,  				       &div_cpsr, &div_scr);  	if (err)  		return err; @@ -166,9 +166,9 @@ static int ep93xx_spi_chip_setup(struct spi_master *master,  		cr0 |= SSPCR0_SPH;  	cr0 |= dss; -	dev_dbg(&master->dev, "setup: mode %d, cpsr %d, scr %d, dss %d\n", +	dev_dbg(&host->dev, "setup: mode %d, cpsr %d, scr %d, dss %d\n",  		spi->mode, div_cpsr, div_scr, dss); -	dev_dbg(&master->dev, "setup: cr0 %#x\n", cr0); +	dev_dbg(&host->dev, "setup: cr0 %#x\n", cr0);  	writel(div_cpsr, espi->mmio + SSPCPSR);  	writel(cr0, espi->mmio + SSPCR0); @@ -176,10 +176,10 @@ static int ep93xx_spi_chip_setup(struct spi_master *master,  	return 0;  } -static void ep93xx_do_write(struct spi_master *master) +static void ep93xx_do_write(struct spi_controller *host)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); -	struct spi_transfer *xfer = master->cur_msg->state; +	struct ep93xx_spi *espi = spi_controller_get_devdata(host); +	struct spi_transfer *xfer = host->cur_msg->state;  	u32 val = 0;  	if (xfer->bits_per_word > 8) { @@ -194,10 +194,10 @@ static void ep93xx_do_write(struct spi_master *master)  	writel(val, espi->mmio + SSPDR);  } -static void ep93xx_do_read(struct spi_master *master) +static void ep93xx_do_read(struct spi_controller *host)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); -	struct spi_transfer *xfer = master->cur_msg->state; +	struct ep93xx_spi *espi = spi_controller_get_devdata(host); +	struct spi_transfer *xfer = host->cur_msg->state;  	u32 val;  	val = readl(espi->mmio + SSPDR); @@ -214,7 +214,7 @@ static void ep93xx_do_read(struct spi_master *master)  /**   * ep93xx_spi_read_write() - perform next RX/TX transfer - * @master: SPI master + * @host: SPI host   *   * This function transfers next bytes (or half-words) to/from RX/TX FIFOs. If   * called several times, the whole transfer will be completed. Returns @@ -223,20 +223,20 @@ static void ep93xx_do_read(struct spi_master *master)   * When this function is finished, RX FIFO should be empty and TX FIFO should be   * full.   */ -static int ep93xx_spi_read_write(struct spi_master *master) +static int ep93xx_spi_read_write(struct spi_controller *host)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); -	struct spi_transfer *xfer = master->cur_msg->state; +	struct ep93xx_spi *espi = spi_controller_get_devdata(host); +	struct spi_transfer *xfer = host->cur_msg->state;  	/* read as long as RX FIFO has frames in it */  	while ((readl(espi->mmio + SSPSR) & SSPSR_RNE)) { -		ep93xx_do_read(master); +		ep93xx_do_read(host);  		espi->fifo_level--;  	}  	/* write as long as TX FIFO has room */  	while (espi->fifo_level < SPI_FIFO_SIZE && espi->tx < xfer->len) { -		ep93xx_do_write(master); +		ep93xx_do_write(host);  		espi->fifo_level++;  	} @@ -261,7 +261,7 @@ ep93xx_dma_data_to_trans_dir(enum dma_data_direction dir)  /**   * ep93xx_spi_dma_prepare() - prepares a DMA transfer - * @master: SPI master + * @host: SPI host   * @dir: DMA transfer direction   *   * Function configures the DMA, maps the buffer and prepares the DMA @@ -269,11 +269,11 @@ ep93xx_dma_data_to_trans_dir(enum dma_data_direction dir)   * in case of failure.   */  static struct dma_async_tx_descriptor * -ep93xx_spi_dma_prepare(struct spi_master *master, +ep93xx_spi_dma_prepare(struct spi_controller *host,  		       enum dma_data_direction dir)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); -	struct spi_transfer *xfer = master->cur_msg->state; +	struct ep93xx_spi *espi = spi_controller_get_devdata(host); +	struct spi_transfer *xfer = host->cur_msg->state;  	struct dma_async_tx_descriptor *txd;  	enum dma_slave_buswidth buswidth;  	struct dma_slave_config conf; @@ -348,7 +348,7 @@ ep93xx_spi_dma_prepare(struct spi_master *master,  	}  	if (WARN_ON(len)) { -		dev_warn(&master->dev, "len = %zu expected 0!\n", len); +		dev_warn(&host->dev, "len = %zu expected 0!\n", len);  		return ERR_PTR(-EINVAL);  	} @@ -367,16 +367,16 @@ ep93xx_spi_dma_prepare(struct spi_master *master,  /**   * ep93xx_spi_dma_finish() - finishes with a DMA transfer - * @master: SPI master + * @host: SPI host   * @dir: DMA transfer direction   *   * Function finishes with the DMA transfer. After this, the DMA buffer is   * unmapped.   */ -static void ep93xx_spi_dma_finish(struct spi_master *master, +static void ep93xx_spi_dma_finish(struct spi_controller *host,  				  enum dma_data_direction dir)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	struct dma_chan *chan;  	struct sg_table *sgt; @@ -393,35 +393,35 @@ static void ep93xx_spi_dma_finish(struct spi_master *master,  static void ep93xx_spi_dma_callback(void *callback_param)  { -	struct spi_master *master = callback_param; +	struct spi_controller *host = callback_param; -	ep93xx_spi_dma_finish(master, DMA_TO_DEVICE); -	ep93xx_spi_dma_finish(master, DMA_FROM_DEVICE); +	ep93xx_spi_dma_finish(host, DMA_TO_DEVICE); +	ep93xx_spi_dma_finish(host, DMA_FROM_DEVICE); -	spi_finalize_current_transfer(master); +	spi_finalize_current_transfer(host);  } -static int ep93xx_spi_dma_transfer(struct spi_master *master) +static int ep93xx_spi_dma_transfer(struct spi_controller *host)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	struct dma_async_tx_descriptor *rxd, *txd; -	rxd = ep93xx_spi_dma_prepare(master, DMA_FROM_DEVICE); +	rxd = ep93xx_spi_dma_prepare(host, DMA_FROM_DEVICE);  	if (IS_ERR(rxd)) { -		dev_err(&master->dev, "DMA RX failed: %ld\n", PTR_ERR(rxd)); +		dev_err(&host->dev, "DMA RX failed: %ld\n", PTR_ERR(rxd));  		return PTR_ERR(rxd);  	} -	txd = ep93xx_spi_dma_prepare(master, DMA_TO_DEVICE); +	txd = ep93xx_spi_dma_prepare(host, DMA_TO_DEVICE);  	if (IS_ERR(txd)) { -		ep93xx_spi_dma_finish(master, DMA_FROM_DEVICE); -		dev_err(&master->dev, "DMA TX failed: %ld\n", PTR_ERR(txd)); +		ep93xx_spi_dma_finish(host, DMA_FROM_DEVICE); +		dev_err(&host->dev, "DMA TX failed: %ld\n", PTR_ERR(txd));  		return PTR_ERR(txd);  	}  	/* We are ready when RX is done */  	rxd->callback = ep93xx_spi_dma_callback; -	rxd->callback_param = master; +	rxd->callback_param = host;  	/* Now submit both descriptors and start DMA */  	dmaengine_submit(rxd); @@ -436,8 +436,8 @@ static int ep93xx_spi_dma_transfer(struct spi_master *master)  static irqreturn_t ep93xx_spi_interrupt(int irq, void *dev_id)  { -	struct spi_master *master = dev_id; -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_id; +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	u32 val;  	/* @@ -447,15 +447,15 @@ static irqreturn_t ep93xx_spi_interrupt(int irq, void *dev_id)  	if (readl(espi->mmio + SSPIIR) & SSPIIR_RORIS) {  		/* clear the overrun interrupt */  		writel(0, espi->mmio + SSPICR); -		dev_warn(&master->dev, +		dev_warn(&host->dev,  			 "receive overrun, aborting the message\n"); -		master->cur_msg->status = -EIO; +		host->cur_msg->status = -EIO;  	} else {  		/*  		 * Interrupt is either RX (RIS) or TX (TIS). For both cases we  		 * simply execute next data transfer.  		 */ -		if (ep93xx_spi_read_write(master)) { +		if (ep93xx_spi_read_write(host)) {  			/*  			 * In normal case, there still is some processing left  			 * for current transfer. Let's wait for the next @@ -474,26 +474,26 @@ static irqreturn_t ep93xx_spi_interrupt(int irq, void *dev_id)  	val &= ~(SSPCR1_RORIE | SSPCR1_TIE | SSPCR1_RIE);  	writel(val, espi->mmio + SSPCR1); -	spi_finalize_current_transfer(master); +	spi_finalize_current_transfer(host);  	return IRQ_HANDLED;  } -static int ep93xx_spi_transfer_one(struct spi_master *master, +static int ep93xx_spi_transfer_one(struct spi_controller *host,  				   struct spi_device *spi,  				   struct spi_transfer *xfer)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	u32 val;  	int ret; -	ret = ep93xx_spi_chip_setup(master, spi, xfer); +	ret = ep93xx_spi_chip_setup(host, spi, xfer);  	if (ret) { -		dev_err(&master->dev, "failed to setup chip for transfer\n"); +		dev_err(&host->dev, "failed to setup chip for transfer\n");  		return ret;  	} -	master->cur_msg->state = xfer; +	host->cur_msg->state = xfer;  	espi->rx = 0;  	espi->tx = 0; @@ -503,10 +503,10 @@ static int ep93xx_spi_transfer_one(struct spi_master *master,  	 * So in these cases we will be using PIO and don't bother for DMA.  	 */  	if (espi->dma_rx && xfer->len > SPI_FIFO_SIZE) -		return ep93xx_spi_dma_transfer(master); +		return ep93xx_spi_dma_transfer(host);  	/* Using PIO so prime the TX FIFO and enable interrupts */ -	ep93xx_spi_read_write(master); +	ep93xx_spi_read_write(host);  	val = readl(espi->mmio + SSPCR1);  	val |= (SSPCR1_RORIE | SSPCR1_TIE | SSPCR1_RIE); @@ -516,10 +516,10 @@ static int ep93xx_spi_transfer_one(struct spi_master *master,  	return 1;  } -static int ep93xx_spi_prepare_message(struct spi_master *master, +static int ep93xx_spi_prepare_message(struct spi_controller *host,  				      struct spi_message *msg)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	unsigned long timeout;  	/* @@ -528,7 +528,7 @@ static int ep93xx_spi_prepare_message(struct spi_master *master,  	timeout = jiffies + msecs_to_jiffies(SPI_TIMEOUT);  	while (readl(espi->mmio + SSPSR) & SSPSR_RNE) {  		if (time_after(jiffies, timeout)) { -			dev_warn(&master->dev, +			dev_warn(&host->dev,  				 "timeout while flushing RX FIFO\n");  			return -ETIMEDOUT;  		} @@ -544,9 +544,9 @@ static int ep93xx_spi_prepare_message(struct spi_master *master,  	return 0;  } -static int ep93xx_spi_prepare_hardware(struct spi_master *master) +static int ep93xx_spi_prepare_hardware(struct spi_controller *host)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	u32 val;  	int ret; @@ -561,9 +561,9 @@ static int ep93xx_spi_prepare_hardware(struct spi_master *master)  	return 0;  } -static int ep93xx_spi_unprepare_hardware(struct spi_master *master) +static int ep93xx_spi_unprepare_hardware(struct spi_controller *host)  { -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	u32 val;  	val = readl(espi->mmio + SSPCR1); @@ -646,7 +646,7 @@ static void ep93xx_spi_release_dma(struct ep93xx_spi *espi)  static int ep93xx_spi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct ep93xx_spi_info *info;  	struct ep93xx_spi *espi;  	struct resource *res; @@ -661,63 +661,56 @@ static int ep93xx_spi_probe(struct platform_device *pdev)  	irq = platform_get_irq(pdev, 0);  	if (irq < 0) -		return -EBUSY; +		return irq; -	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!res) { -		dev_err(&pdev->dev, "unable to get iomem resource\n"); -		return -ENODEV; -	} - -	master = spi_alloc_master(&pdev->dev, sizeof(*espi)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*espi)); +	if (!host)  		return -ENOMEM; -	master->use_gpio_descriptors = true; -	master->prepare_transfer_hardware = ep93xx_spi_prepare_hardware; -	master->unprepare_transfer_hardware = ep93xx_spi_unprepare_hardware; -	master->prepare_message = ep93xx_spi_prepare_message; -	master->transfer_one = ep93xx_spi_transfer_one; -	master->bus_num = pdev->id; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); +	host->use_gpio_descriptors = true; +	host->prepare_transfer_hardware = ep93xx_spi_prepare_hardware; +	host->unprepare_transfer_hardware = ep93xx_spi_unprepare_hardware; +	host->prepare_message = ep93xx_spi_prepare_message; +	host->transfer_one = ep93xx_spi_transfer_one; +	host->bus_num = pdev->id; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16);  	/*  	 * The SPI core will count the number of GPIO descriptors to figure  	 * out the number of chip selects available on the platform.  	 */ -	master->num_chipselect = 0; +	host->num_chipselect = 0; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	espi = spi_master_get_devdata(master); +	espi = spi_controller_get_devdata(host);  	espi->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(espi->clk)) {  		dev_err(&pdev->dev, "unable to get spi clock\n");  		error = PTR_ERR(espi->clk); -		goto fail_release_master; +		goto fail_release_host;  	}  	/*  	 * Calculate maximum and minimum supported clock rates  	 * for the controller.  	 */ -	master->max_speed_hz = clk_get_rate(espi->clk) / 2; -	master->min_speed_hz = clk_get_rate(espi->clk) / (254 * 256); +	host->max_speed_hz = clk_get_rate(espi->clk) / 2; +	host->min_speed_hz = clk_get_rate(espi->clk) / (254 * 256); -	espi->sspdr_phys = res->start + SSPDR; - -	espi->mmio = devm_ioremap_resource(&pdev->dev, res); +	espi->mmio = devm_platform_get_and_ioremap_resource(pdev, 0, &res);  	if (IS_ERR(espi->mmio)) {  		error = PTR_ERR(espi->mmio); -		goto fail_release_master; +		goto fail_release_host;  	} +	espi->sspdr_phys = res->start + SSPDR;  	error = devm_request_irq(&pdev->dev, irq, ep93xx_spi_interrupt, -				0, "ep93xx-spi", master); +				0, "ep93xx-spi", host);  	if (error) {  		dev_err(&pdev->dev, "failed to request irq\n"); -		goto fail_release_master; +		goto fail_release_host;  	}  	if (info->use_dma && ep93xx_spi_setup_dma(espi)) @@ -726,9 +719,9 @@ static int ep93xx_spi_probe(struct platform_device *pdev)  	/* make sure that the hardware is disabled */  	writel(0, espi->mmio + SSPCR1); -	error = devm_spi_register_master(&pdev->dev, master); +	error = devm_spi_register_controller(&pdev->dev, host);  	if (error) { -		dev_err(&pdev->dev, "failed to register SPI master\n"); +		dev_err(&pdev->dev, "failed to register SPI host\n");  		goto fail_free_dma;  	} @@ -739,16 +732,16 @@ static int ep93xx_spi_probe(struct platform_device *pdev)  fail_free_dma:  	ep93xx_spi_release_dma(espi); -fail_release_master: -	spi_master_put(master); +fail_release_host: +	spi_controller_put(host);  	return error;  }  static void ep93xx_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct ep93xx_spi *espi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct ep93xx_spi *espi = spi_controller_get_devdata(host);  	ep93xx_spi_release_dma(espi);  } diff --git a/drivers/spi/spi-falcon.c b/drivers/spi/spi-falcon.c index 4c103dff0d44..84279058f0f1 100644 --- a/drivers/spi/spi-falcon.c +++ b/drivers/spi/spi-falcon.c @@ -91,14 +91,14 @@  struct falcon_sflash {  	u32 sfcmd; /* for caching of opcode, direction, ... */ -	struct spi_master *master; +	struct spi_controller *host;  };  int falcon_sflash_xfer(struct spi_device *spi, struct spi_transfer *t,  		unsigned long flags)  {  	struct device *dev = &spi->dev; -	struct falcon_sflash *priv = spi_master_get_devdata(spi->master); +	struct falcon_sflash *priv = spi_controller_get_devdata(spi->controller);  	const u8 *txp = t->tx_buf;  	u8 *rxp = t->rx_buf;  	unsigned int bytelen = ((8 * t->len + 7) / 8); @@ -351,10 +351,10 @@ static int falcon_sflash_setup(struct spi_device *spi)  	return 0;  } -static int falcon_sflash_xfer_one(struct spi_master *master, +static int falcon_sflash_xfer_one(struct spi_controller *host,  					struct spi_message *m)  { -	struct falcon_sflash *priv = spi_master_get_devdata(master); +	struct falcon_sflash *priv = spi_controller_get_devdata(host);  	struct spi_transfer *t;  	unsigned long spi_flags;  	unsigned long flags; @@ -382,7 +382,7 @@ static int falcon_sflash_xfer_one(struct spi_master *master,  	}  	m->status = ret; -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return 0;  } @@ -390,25 +390,25 @@ static int falcon_sflash_xfer_one(struct spi_master *master,  static int falcon_sflash_probe(struct platform_device *pdev)  {  	struct falcon_sflash *priv; -	struct spi_master *master; +	struct spi_controller *host;  	int ret; -	master = spi_alloc_master(&pdev->dev, sizeof(*priv)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*priv)); +	if (!host)  		return -ENOMEM; -	priv = spi_master_get_devdata(master); -	priv->master = master; +	priv = spi_controller_get_devdata(host); +	priv->host = host; -	master->mode_bits = SPI_MODE_3; -	master->flags = SPI_MASTER_HALF_DUPLEX; -	master->setup = falcon_sflash_setup; -	master->transfer_one_message = falcon_sflash_xfer_one; -	master->dev.of_node = pdev->dev.of_node; +	host->mode_bits = SPI_MODE_3; +	host->flags = SPI_CONTROLLER_HALF_DUPLEX; +	host->setup = falcon_sflash_setup; +	host->transfer_one_message = falcon_sflash_xfer_one; +	host->dev.of_node = pdev->dev.of_node; -	ret = devm_spi_register_master(&pdev->dev, master); +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (ret) -		spi_master_put(master); +		spi_controller_put(host);  	return ret;  } diff --git a/drivers/spi/spi-fsi.c b/drivers/spi/spi-fsi.c index ba3b17d7c9ec..fc9e33be1e0e 100644 --- a/drivers/spi/spi-fsi.c +++ b/drivers/spi/spi-fsi.c @@ -542,7 +542,7 @@ static int fsi_spi_probe(struct device *dev)  		if (of_property_read_u32(np, "reg", &base))  			continue; -		ctlr = spi_alloc_master(dev, sizeof(*ctx)); +		ctlr = spi_alloc_host(dev, sizeof(*ctx));  		if (!ctlr) {  			of_node_put(np);  			break; diff --git a/drivers/spi/spi-fsl-cpm.c b/drivers/spi/spi-fsl-cpm.c index 38452089e8f3..47c7a5c6257f 100644 --- a/drivers/spi/spi-fsl-cpm.c +++ b/drivers/spi/spi-fsl-cpm.c @@ -56,12 +56,12 @@ void fsl_spi_cpm_reinit_txrx(struct mpc8xxx_spi *mspi)  			     QE_CR_PROTOCOL_UNSPECIFIED, 0);  	} else {  		if (mspi->flags & SPI_CPM1) { -			out_be32(&mspi->pram->rstate, 0); -			out_be16(&mspi->pram->rbptr, -				 in_be16(&mspi->pram->rbase)); -			out_be32(&mspi->pram->tstate, 0); -			out_be16(&mspi->pram->tbptr, -				 in_be16(&mspi->pram->tbase)); +			iowrite32be(0, &mspi->pram->rstate); +			iowrite16be(ioread16be(&mspi->pram->rbase), +				    &mspi->pram->rbptr); +			iowrite32be(0, &mspi->pram->tstate); +			iowrite16be(ioread16be(&mspi->pram->tbase), +				    &mspi->pram->tbptr);  		} else {  			cpm_command(CPM_SPI_CMD, CPM_CR_INIT_TRX);  		} @@ -75,24 +75,24 @@ static void fsl_spi_cpm_bufs_start(struct mpc8xxx_spi *mspi)  	struct cpm_buf_desc __iomem *rx_bd = mspi->rx_bd;  	unsigned int xfer_len = min(mspi->count, SPI_MRBLR);  	unsigned int xfer_ofs; -	struct fsl_spi_reg *reg_base = mspi->reg_base; +	struct fsl_spi_reg __iomem *reg_base = mspi->reg_base;  	xfer_ofs = mspi->xfer_in_progress->len - mspi->count;  	if (mspi->rx_dma == mspi->dma_dummy_rx) -		out_be32(&rx_bd->cbd_bufaddr, mspi->rx_dma); +		iowrite32be(mspi->rx_dma, &rx_bd->cbd_bufaddr);  	else -		out_be32(&rx_bd->cbd_bufaddr, mspi->rx_dma + xfer_ofs); -	out_be16(&rx_bd->cbd_datlen, 0); -	out_be16(&rx_bd->cbd_sc, BD_SC_EMPTY | BD_SC_INTRPT | BD_SC_WRAP); +		iowrite32be(mspi->rx_dma + xfer_ofs, &rx_bd->cbd_bufaddr); +	iowrite16be(0, &rx_bd->cbd_datlen); +	iowrite16be(BD_SC_EMPTY | BD_SC_INTRPT | BD_SC_WRAP, &rx_bd->cbd_sc);  	if (mspi->tx_dma == mspi->dma_dummy_tx) -		out_be32(&tx_bd->cbd_bufaddr, mspi->tx_dma); +		iowrite32be(mspi->tx_dma, &tx_bd->cbd_bufaddr);  	else -		out_be32(&tx_bd->cbd_bufaddr, mspi->tx_dma + xfer_ofs); -	out_be16(&tx_bd->cbd_datlen, xfer_len); -	out_be16(&tx_bd->cbd_sc, BD_SC_READY | BD_SC_INTRPT | BD_SC_WRAP | -				 BD_SC_LAST); +		iowrite32be(mspi->tx_dma + xfer_ofs, &tx_bd->cbd_bufaddr); +	iowrite16be(xfer_len, &tx_bd->cbd_datlen); +	iowrite16be(BD_SC_READY | BD_SC_INTRPT | BD_SC_WRAP | BD_SC_LAST, +		    &tx_bd->cbd_sc);  	/* start transfer */  	mpc8xxx_spi_write_reg(®_base->command, SPCOM_STR); @@ -102,7 +102,7 @@ int fsl_spi_cpm_bufs(struct mpc8xxx_spi *mspi,  		     struct spi_transfer *t, bool is_dma_mapped)  {  	struct device *dev = mspi->dev; -	struct fsl_spi_reg *reg_base = mspi->reg_base; +	struct fsl_spi_reg __iomem *reg_base = mspi->reg_base;  	if (is_dma_mapped) {  		mspi->map_tx_dma = 0; @@ -123,7 +123,7 @@ int fsl_spi_cpm_bufs(struct mpc8xxx_spi *mspi,  	}  	if (t->bits_per_word == 16 && t->tx_buf) {  		const u16 *src = t->tx_buf; -		u16 *dst; +		__le16 *dst;  		int i;  		dst = kmalloc(t->len, GFP_KERNEL); @@ -202,12 +202,12 @@ EXPORT_SYMBOL_GPL(fsl_spi_cpm_bufs_complete);  void fsl_spi_cpm_irq(struct mpc8xxx_spi *mspi, u32 events)  {  	u16 len; -	struct fsl_spi_reg *reg_base = mspi->reg_base; +	struct fsl_spi_reg __iomem *reg_base = mspi->reg_base;  	dev_dbg(mspi->dev, "%s: bd datlen %d, count %d\n", __func__, -		in_be16(&mspi->rx_bd->cbd_datlen), mspi->count); +		ioread16be(&mspi->rx_bd->cbd_datlen), mspi->count); -	len = in_be16(&mspi->rx_bd->cbd_datlen); +	len = ioread16be(&mspi->rx_bd->cbd_datlen);  	if (len > mspi->count) {  		WARN_ON(1);  		len = mspi->count; @@ -328,7 +328,7 @@ int fsl_spi_cpm_init(struct mpc8xxx_spi *mspi)  	}  	if (mspi->flags & SPI_CPM1) { -		void *pram; +		void __iomem *pram;  		pram = devm_platform_ioremap_resource(to_platform_device(dev),  						      1); @@ -374,21 +374,21 @@ int fsl_spi_cpm_init(struct mpc8xxx_spi *mspi)  	mspi->rx_bd = cpm_muram_addr(bds_ofs + sizeof(*mspi->tx_bd));  	/* Initialize parameter ram. */ -	out_be16(&mspi->pram->tbase, cpm_muram_offset(mspi->tx_bd)); -	out_be16(&mspi->pram->rbase, cpm_muram_offset(mspi->rx_bd)); -	out_8(&mspi->pram->tfcr, CPMFCR_EB | CPMFCR_GBL); -	out_8(&mspi->pram->rfcr, CPMFCR_EB | CPMFCR_GBL); -	out_be16(&mspi->pram->mrblr, SPI_MRBLR); -	out_be32(&mspi->pram->rstate, 0); -	out_be32(&mspi->pram->rdp, 0); -	out_be16(&mspi->pram->rbptr, 0); -	out_be16(&mspi->pram->rbc, 0); -	out_be32(&mspi->pram->rxtmp, 0); -	out_be32(&mspi->pram->tstate, 0); -	out_be32(&mspi->pram->tdp, 0); -	out_be16(&mspi->pram->tbptr, 0); -	out_be16(&mspi->pram->tbc, 0); -	out_be32(&mspi->pram->txtmp, 0); +	iowrite16be(cpm_muram_offset(mspi->tx_bd), &mspi->pram->tbase); +	iowrite16be(cpm_muram_offset(mspi->rx_bd), &mspi->pram->rbase); +	iowrite8(CPMFCR_EB | CPMFCR_GBL, &mspi->pram->tfcr); +	iowrite8(CPMFCR_EB | CPMFCR_GBL, &mspi->pram->rfcr); +	iowrite16be(SPI_MRBLR, &mspi->pram->mrblr); +	iowrite32be(0, &mspi->pram->rstate); +	iowrite32be(0, &mspi->pram->rdp); +	iowrite16be(0, &mspi->pram->rbptr); +	iowrite16be(0, &mspi->pram->rbc); +	iowrite32be(0, &mspi->pram->rxtmp); +	iowrite32be(0, &mspi->pram->tstate); +	iowrite32be(0, &mspi->pram->tdp); +	iowrite16be(0, &mspi->pram->tbptr); +	iowrite16be(0, &mspi->pram->tbc); +	iowrite32be(0, &mspi->pram->txtmp);  	return 0; diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 674cfe05f411..8318249f8a1f 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -13,7 +13,8 @@  #include <linux/interrupt.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_device.h> +#include <linux/of.h> +#include <linux/platform_device.h>  #include <linux/pinctrl/consumer.h>  #include <linux/regmap.h>  #include <linux/spi/spi.h> @@ -22,7 +23,7 @@  #define DRIVER_NAME			"fsl-dspi"  #define SPI_MCR				0x00 -#define SPI_MCR_MASTER			BIT(31) +#define SPI_MCR_HOST			BIT(31)  #define SPI_MCR_PCSIS(x)		((x) << 16)  #define SPI_MCR_CLR_TXF			BIT(11)  #define SPI_MCR_CLR_RXF			BIT(10) @@ -339,7 +340,7 @@ static u32 dspi_pop_tx_pushr(struct fsl_dspi *dspi)  {  	u16 cmd = dspi->tx_cmd, data = dspi_pop_tx(dspi); -	if (spi_controller_is_slave(dspi->ctlr)) +	if (spi_controller_is_target(dspi->ctlr))  		return data;  	if (dspi->len > 0) @@ -429,7 +430,7 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi)  	dma_async_issue_pending(dma->chan_rx);  	dma_async_issue_pending(dma->chan_tx); -	if (spi_controller_is_slave(dspi->ctlr)) { +	if (spi_controller_is_target(dspi->ctlr)) {  		wait_for_completion_interruptible(&dspi->dma->cmd_rx_complete);  		return 0;  	} @@ -502,15 +503,14 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr)  	dma->chan_rx = dma_request_chan(dev, "rx");  	if (IS_ERR(dma->chan_rx)) { -		dev_err(dev, "rx dma channel not available\n"); -		ret = PTR_ERR(dma->chan_rx); -		return ret; +		return dev_err_probe(dev, PTR_ERR(dma->chan_rx), +			"rx dma channel not available\n");  	}  	dma->chan_tx = dma_request_chan(dev, "tx");  	if (IS_ERR(dma->chan_tx)) { -		dev_err(dev, "tx dma channel not available\n");  		ret = PTR_ERR(dma->chan_tx); +		dev_err_probe(dev, ret, "tx dma channel not available\n");  		goto err_tx_channel;  	} @@ -1061,7 +1061,7 @@ static int dspi_setup(struct spi_device *spi)  	if (spi->mode & SPI_CPHA)  		chip->ctar_val |= SPI_CTAR_CPHA; -	if (!spi_controller_is_slave(dspi->ctlr)) { +	if (!spi_controller_is_target(dspi->ctlr)) {  		chip->ctar_val |= SPI_CTAR_PCSSCK(pcssck) |  				  SPI_CTAR_CSSCK(cssck) |  				  SPI_CTAR_PASC(pasc) | @@ -1216,8 +1216,8 @@ static int dspi_init(struct fsl_dspi *dspi)  	if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE)  		mcr |= SPI_MCR_XSPI; -	if (!spi_controller_is_slave(dspi->ctlr)) -		mcr |= SPI_MCR_MASTER; +	if (!spi_controller_is_target(dspi->ctlr)) +		mcr |= SPI_MCR_HOST;  	regmap_write(dspi->regmap, SPI_MCR, mcr);  	regmap_write(dspi->regmap, SPI_SR, SPI_SR_CLEAR); @@ -1240,13 +1240,13 @@ static int dspi_init(struct fsl_dspi *dspi)  	return 0;  } -static int dspi_slave_abort(struct spi_master *master) +static int dspi_target_abort(struct spi_controller *host)  { -	struct fsl_dspi *dspi = spi_master_get_devdata(master); +	struct fsl_dspi *dspi = spi_controller_get_devdata(host);  	/*  	 * Terminate all pending DMA transactions for the SPI working -	 * in SLAVE mode. +	 * in TARGET mode.  	 */  	if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) {  		dmaengine_terminate_sync(dspi->dma->chan_rx); @@ -1277,7 +1277,7 @@ static int dspi_probe(struct platform_device *pdev)  	if (!dspi)  		return -ENOMEM; -	ctlr = spi_alloc_master(&pdev->dev, 0); +	ctlr = spi_alloc_host(&pdev->dev, 0);  	if (!ctlr)  		return -ENOMEM; @@ -1292,7 +1292,7 @@ static int dspi_probe(struct platform_device *pdev)  	ctlr->dev.of_node = pdev->dev.of_node;  	ctlr->cleanup = dspi_cleanup; -	ctlr->slave_abort = dspi_slave_abort; +	ctlr->target_abort = dspi_target_abort;  	ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;  	ctlr->use_gpio_descriptors = true; @@ -1317,7 +1317,7 @@ static int dspi_probe(struct platform_device *pdev)  		ctlr->bus_num = bus_num;  		if (of_property_read_bool(np, "spi-slave")) -			ctlr->slave = true; +			ctlr->target = true;  		dspi->devtype_data = of_device_get_match_data(&pdev->dev);  		if (!dspi->devtype_data) { diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index b3d2d3db5850..ea647ee94da8 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -148,7 +148,7 @@ static inline void fsl_espi_write_reg8(struct fsl_espi *espi, int offset,  static int fsl_espi_check_message(struct spi_message *m)  { -	struct fsl_espi *espi = spi_master_get_devdata(m->spi->master); +	struct fsl_espi *espi = spi_controller_get_devdata(m->spi->controller);  	struct spi_transfer *t, *first;  	if (m->frame_length > SPCOM_TRANLEN_MAX) { @@ -323,7 +323,7 @@ start:  static void fsl_espi_setup_transfer(struct spi_device *spi,  					struct spi_transfer *t)  { -	struct fsl_espi *espi = spi_master_get_devdata(spi->master); +	struct fsl_espi *espi = spi_controller_get_devdata(spi->controller);  	int bits_per_word = t ? t->bits_per_word : spi->bits_per_word;  	u32 pm, hz = t ? t->speed_hz : spi->max_speed_hz;  	struct fsl_espi_cs *cs = spi_get_ctldata(spi); @@ -351,7 +351,7 @@ static void fsl_espi_setup_transfer(struct spi_device *spi,  static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)  { -	struct fsl_espi *espi = spi_master_get_devdata(spi->master); +	struct fsl_espi *espi = spi_controller_get_devdata(spi->controller);  	unsigned int rx_len = t->len;  	u32 mask, spcom;  	int ret; @@ -396,7 +396,7 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)  static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans)  { -	struct fsl_espi *espi = spi_master_get_devdata(m->spi->master); +	struct fsl_espi *espi = spi_controller_get_devdata(m->spi->controller);  	struct spi_device *spi = m->spi;  	int ret; @@ -432,7 +432,7 @@ static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans)  	return ret;  } -static int fsl_espi_do_one_msg(struct spi_master *master, +static int fsl_espi_do_one_msg(struct spi_controller *host,  			       struct spi_message *m)  {  	unsigned int rx_nbits = 0, delay_nsecs = 0; @@ -470,7 +470,7 @@ out:  	if (m->status == -EINPROGRESS)  		m->status = ret; -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return ret;  } @@ -488,7 +488,7 @@ static int fsl_espi_setup(struct spi_device *spi)  		spi_set_ctldata(spi, cs);  	} -	espi = spi_master_get_devdata(spi->master); +	espi = spi_controller_get_devdata(spi->controller);  	pm_runtime_get_sync(espi->dev); @@ -584,8 +584,8 @@ static irqreturn_t fsl_espi_irq(s32 irq, void *context_data)  #ifdef CONFIG_PM  static int fsl_espi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct fsl_espi *espi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct fsl_espi *espi = spi_controller_get_devdata(host);  	u32 regval;  	regval = fsl_espi_read_reg(espi, ESPI_SPMODE); @@ -597,8 +597,8 @@ static int fsl_espi_runtime_suspend(struct device *dev)  static int fsl_espi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct fsl_espi *espi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct fsl_espi *espi = spi_controller_get_devdata(host);  	u32 regval;  	regval = fsl_espi_read_reg(espi, ESPI_SPMODE); @@ -616,8 +616,8 @@ static size_t fsl_espi_max_message_size(struct spi_device *spi)  static void fsl_espi_init_regs(struct device *dev, bool initial)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct fsl_espi *espi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct fsl_espi *espi = spi_controller_get_devdata(host);  	struct device_node *nc;  	u32 csmode, cs, prop;  	int ret; @@ -629,10 +629,10 @@ static void fsl_espi_init_regs(struct device *dev, bool initial)  	fsl_espi_write_reg(espi, ESPI_SPIE, 0xffffffff);  	/* Init eSPI CS mode register */ -	for_each_available_child_of_node(master->dev.of_node, nc) { +	for_each_available_child_of_node(host->dev.of_node, nc) {  		/* get chip select */  		ret = of_property_read_u32(nc, "reg", &cs); -		if (ret || cs >= master->num_chipselect) +		if (ret || cs >= host->num_chipselect)  			continue;  		csmode = CSMODE_INIT_VAL; @@ -664,28 +664,28 @@ static void fsl_espi_init_regs(struct device *dev, bool initial)  static int fsl_espi_probe(struct device *dev, struct resource *mem,  			  unsigned int irq, unsigned int num_cs)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct fsl_espi *espi;  	int ret; -	master = spi_alloc_master(dev, sizeof(struct fsl_espi)); -	if (!master) +	host = spi_alloc_host(dev, sizeof(struct fsl_espi)); +	if (!host)  		return -ENOMEM; -	dev_set_drvdata(dev, master); +	dev_set_drvdata(dev, host); -	master->mode_bits = SPI_RX_DUAL | SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | -			    SPI_LSB_FIRST | SPI_LOOP; -	master->dev.of_node = dev->of_node; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); -	master->setup = fsl_espi_setup; -	master->cleanup = fsl_espi_cleanup; -	master->transfer_one_message = fsl_espi_do_one_msg; -	master->auto_runtime_pm = true; -	master->max_message_size = fsl_espi_max_message_size; -	master->num_chipselect = num_cs; +	host->mode_bits = SPI_RX_DUAL | SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | +			  SPI_LSB_FIRST | SPI_LOOP; +	host->dev.of_node = dev->of_node; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); +	host->setup = fsl_espi_setup; +	host->cleanup = fsl_espi_cleanup; +	host->transfer_one_message = fsl_espi_do_one_msg; +	host->auto_runtime_pm = true; +	host->max_message_size = fsl_espi_max_message_size; +	host->num_chipselect = num_cs; -	espi = spi_master_get_devdata(master); +	espi = spi_controller_get_devdata(host);  	spin_lock_init(&espi->lock);  	espi->dev = dev; @@ -696,8 +696,8 @@ static int fsl_espi_probe(struct device *dev, struct resource *mem,  		goto err_probe;  	}  	/* determined by clock divider fields DIV16/PM in register SPMODEx */ -	master->min_speed_hz = DIV_ROUND_UP(espi->spibrg, 4 * 16 * 16); -	master->max_speed_hz = DIV_ROUND_UP(espi->spibrg, 4); +	host->min_speed_hz = DIV_ROUND_UP(espi->spibrg, 4 * 16 * 16); +	host->max_speed_hz = DIV_ROUND_UP(espi->spibrg, 4);  	init_completion(&espi->done); @@ -720,7 +720,7 @@ static int fsl_espi_probe(struct device *dev, struct resource *mem,  	pm_runtime_enable(dev);  	pm_runtime_get_sync(dev); -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret < 0)  		goto err_pm; @@ -736,7 +736,7 @@ err_pm:  	pm_runtime_disable(dev);  	pm_runtime_set_suspended(dev);  err_probe: -	spi_master_put(master); +	spi_controller_put(host);  	return ret;  } @@ -791,10 +791,10 @@ static void of_fsl_espi_remove(struct platform_device *dev)  #ifdef CONFIG_PM_SLEEP  static int of_fsl_espi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev);  	int ret; -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	if (ret)  		return ret; @@ -803,7 +803,7 @@ static int of_fsl_espi_suspend(struct device *dev)  static int of_fsl_espi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev);  	int ret;  	fsl_espi_init_regs(dev, false); @@ -812,7 +812,7 @@ static int of_fsl_espi_resume(struct device *dev)  	if (ret < 0)  		return ret; -	return spi_master_resume(master); +	return spi_controller_resume(host);  }  #endif /* CONFIG_PM_SLEEP */ diff --git a/drivers/spi/spi-fsl-lib.c b/drivers/spi/spi-fsl-lib.c index 76e1192eb025..885757c29fbb 100644 --- a/drivers/spi/spi-fsl-lib.c +++ b/drivers/spi/spi-fsl-lib.c @@ -18,7 +18,8 @@  #include <linux/kernel.h>  #include <linux/mm.h>  #include <linux/module.h> -#include <linux/of_platform.h> +#include <linux/of.h> +#include <linux/platform_device.h>  #include <linux/spi/spi.h>  #ifdef CONFIG_FSL_SOC  #include <sysdev/fsl_soc.h> diff --git a/drivers/spi/spi-fsl-lib.h b/drivers/spi/spi-fsl-lib.h index 015a1abb6a84..50a07f984b23 100644 --- a/drivers/spi/spi-fsl-lib.h +++ b/drivers/spi/spi-fsl-lib.h @@ -103,12 +103,9 @@ extern void mpc8xxx_spi_rx_buf_u32(u32 data, struct mpc8xxx_spi *mpc8xxx_spi);  extern struct mpc8xxx_spi_probe_info *to_of_pinfo(  		struct fsl_spi_platform_data *pdata); -extern int mpc8xxx_spi_bufs(struct mpc8xxx_spi *mspi, -		struct spi_transfer *t, unsigned int len);  extern const char *mpc8xxx_spi_strmode(unsigned int flags);  extern void mpc8xxx_spi_probe(struct device *dev, struct resource *mem,  		unsigned int irq); -extern int mpc8xxx_spi_remove(struct device *dev);  extern int of_mpc8xxx_spi_probe(struct platform_device *ofdev);  #endif /* __SPI_FSL_LIB_H__ */ diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c index fb68c72df171..11991eb12636 100644 --- a/drivers/spi/spi-fsl-lpspi.c +++ b/drivers/spi/spi-fsl-lpspi.c @@ -17,7 +17,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/pinctrl/consumer.h>  #include <linux/platform_device.h>  #include <linux/dma/imx-dma.h> @@ -73,7 +72,7 @@  #define CFGR1_PINCFG	(BIT(24)|BIT(25))  #define CFGR1_PCSPOL	BIT(8)  #define CFGR1_NOSTALL	BIT(3) -#define CFGR1_MASTER	BIT(0) +#define CFGR1_HOST	BIT(0)  #define FSR_TXCOUNT	(0xFF)  #define RSR_RXEMPTY	BIT(1)  #define TCR_CPOL	BIT(31) @@ -97,8 +96,7 @@ struct fsl_lpspi_data {  	unsigned long base_phys;  	struct clk *clk_ipg;  	struct clk *clk_per; -	bool is_slave; -	u32 num_cs; +	bool is_target;  	bool is_only_cs1;  	bool is_first_byte; @@ -115,7 +113,7 @@ struct fsl_lpspi_data {  	struct lpspi_config config;  	struct completion xfer_done; -	bool slave_aborted; +	bool target_aborted;  	/* DMA */  	bool usedma; @@ -236,7 +234,7 @@ static void fsl_lpspi_write_tx_fifo(struct fsl_lpspi_data *fsl_lpspi)  	}  	if (txfifo_cnt < fsl_lpspi->txfifosize) { -		if (!fsl_lpspi->is_slave) { +		if (!fsl_lpspi->is_target) {  			temp = readl(fsl_lpspi->base + IMX7ULP_TCR);  			temp &= ~TCR_CONTC;  			writel(temp, fsl_lpspi->base + IMX7ULP_TCR); @@ -260,7 +258,7 @@ static void fsl_lpspi_set_cmd(struct fsl_lpspi_data *fsl_lpspi)  	temp |= fsl_lpspi->config.bpw - 1;  	temp |= (fsl_lpspi->config.mode & 0x3) << 30;  	temp |= (fsl_lpspi->config.chip_select & 0x3) << 24; -	if (!fsl_lpspi->is_slave) { +	if (!fsl_lpspi->is_target) {  		temp |= fsl_lpspi->config.prescale << 27;  		/*  		 * Set TCR_CONT will keep SS asserted after current transfer. @@ -387,7 +385,7 @@ static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi)  	u32 temp;  	int ret; -	if (!fsl_lpspi->is_slave) { +	if (!fsl_lpspi->is_target) {  		ret = fsl_lpspi_set_bitrate(fsl_lpspi);  		if (ret)  			return ret; @@ -395,8 +393,8 @@ static int fsl_lpspi_config(struct fsl_lpspi_data *fsl_lpspi)  	fsl_lpspi_set_watermark(fsl_lpspi); -	if (!fsl_lpspi->is_slave) -		temp = CFGR1_MASTER; +	if (!fsl_lpspi->is_target) +		temp = CFGR1_HOST;  	else  		temp = CFGR1_PINCFG;  	if (fsl_lpspi->config.mode & SPI_CS_HIGH) @@ -463,12 +461,12 @@ static int fsl_lpspi_setup_transfer(struct spi_controller *controller,  	return fsl_lpspi_config(fsl_lpspi);  } -static int fsl_lpspi_slave_abort(struct spi_controller *controller) +static int fsl_lpspi_target_abort(struct spi_controller *controller)  {  	struct fsl_lpspi_data *fsl_lpspi =  				spi_controller_get_devdata(controller); -	fsl_lpspi->slave_aborted = true; +	fsl_lpspi->target_aborted = true;  	if (!fsl_lpspi->usedma)  		complete(&fsl_lpspi->xfer_done);  	else { @@ -484,9 +482,9 @@ static int fsl_lpspi_wait_for_completion(struct spi_controller *controller)  	struct fsl_lpspi_data *fsl_lpspi =  				spi_controller_get_devdata(controller); -	if (fsl_lpspi->is_slave) { +	if (fsl_lpspi->is_target) {  		if (wait_for_completion_interruptible(&fsl_lpspi->xfer_done) || -			fsl_lpspi->slave_aborted) { +			fsl_lpspi->target_aborted) {  			dev_dbg(fsl_lpspi->dev, "interrupted\n");  			return -EINTR;  		} @@ -589,9 +587,9 @@ static int fsl_lpspi_dma_transfer(struct spi_controller *controller,  	reinit_completion(&fsl_lpspi->dma_tx_completion);  	dma_async_issue_pending(controller->dma_tx); -	fsl_lpspi->slave_aborted = false; +	fsl_lpspi->target_aborted = false; -	if (!fsl_lpspi->is_slave) { +	if (!fsl_lpspi->is_target) {  		transfer_timeout = fsl_lpspi_calculate_timeout(fsl_lpspi,  							       transfer->len); @@ -617,7 +615,7 @@ static int fsl_lpspi_dma_transfer(struct spi_controller *controller,  		}  	} else {  		if (wait_for_completion_interruptible(&fsl_lpspi->dma_tx_completion) || -			fsl_lpspi->slave_aborted) { +			fsl_lpspi->target_aborted) {  			dev_dbg(fsl_lpspi->dev,  				"I/O Error in DMA TX interrupted\n");  			dmaengine_terminate_all(controller->dma_tx); @@ -627,7 +625,7 @@ static int fsl_lpspi_dma_transfer(struct spi_controller *controller,  		}  		if (wait_for_completion_interruptible(&fsl_lpspi->dma_rx_completion) || -			fsl_lpspi->slave_aborted) { +			fsl_lpspi->target_aborted) {  			dev_dbg(fsl_lpspi->dev,  				"I/O Error in DMA RX interrupted\n");  			dmaengine_terminate_all(controller->dma_tx); @@ -702,7 +700,7 @@ static int fsl_lpspi_pio_transfer(struct spi_controller *controller,  	fsl_lpspi->remain = t->len;  	reinit_completion(&fsl_lpspi->xfer_done); -	fsl_lpspi->slave_aborted = false; +	fsl_lpspi->target_aborted = false;  	fsl_lpspi_write_tx_fifo(fsl_lpspi); @@ -826,16 +824,17 @@ static int fsl_lpspi_probe(struct platform_device *pdev)  	struct spi_controller *controller;  	struct resource *res;  	int ret, irq; +	u32 num_cs;  	u32 temp; -	bool is_slave; +	bool is_target; -	is_slave = of_property_read_bool((&pdev->dev)->of_node, "spi-slave"); -	if (is_slave) -		controller = spi_alloc_slave(&pdev->dev, -					sizeof(struct fsl_lpspi_data)); +	is_target = of_property_read_bool((&pdev->dev)->of_node, "spi-slave"); +	if (is_target) +		controller = spi_alloc_target(&pdev->dev, +					      sizeof(struct fsl_lpspi_data));  	else -		controller = spi_alloc_master(&pdev->dev, -					sizeof(struct fsl_lpspi_data)); +		controller = spi_alloc_host(&pdev->dev, +					    sizeof(struct fsl_lpspi_data));  	if (!controller)  		return -ENOMEM; @@ -844,25 +843,9 @@ static int fsl_lpspi_probe(struct platform_device *pdev)  	fsl_lpspi = spi_controller_get_devdata(controller);  	fsl_lpspi->dev = &pdev->dev; -	fsl_lpspi->is_slave = is_slave; +	fsl_lpspi->is_target = is_target;  	fsl_lpspi->is_only_cs1 = of_property_read_bool((&pdev->dev)->of_node,  						"fsl,spi-only-use-cs1-sel"); -	if (of_property_read_u32((&pdev->dev)->of_node, "num-cs", -				 &fsl_lpspi->num_cs)) -		fsl_lpspi->num_cs = 1; - -	controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 32); -	controller->transfer_one = fsl_lpspi_transfer_one; -	controller->prepare_transfer_hardware = lpspi_prepare_xfer_hardware; -	controller->unprepare_transfer_hardware = lpspi_unprepare_xfer_hardware; -	controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; -	controller->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; -	controller->dev.of_node = pdev->dev.of_node; -	controller->bus_num = pdev->id; -	controller->num_chipselect = fsl_lpspi->num_cs; -	controller->slave_abort = fsl_lpspi_slave_abort; -	if (!fsl_lpspi->is_slave) -		controller->use_gpio_descriptors = true;  	init_completion(&fsl_lpspi->xfer_done); @@ -912,6 +895,26 @@ static int fsl_lpspi_probe(struct platform_device *pdev)  	temp = readl(fsl_lpspi->base + IMX7ULP_PARAM);  	fsl_lpspi->txfifosize = 1 << (temp & 0x0f);  	fsl_lpspi->rxfifosize = 1 << ((temp >> 8) & 0x0f); +	if (of_property_read_u32((&pdev->dev)->of_node, "num-cs", +				 &num_cs)) { +		if (of_device_is_compatible(pdev->dev.of_node, "fsl,imx93-spi")) +			num_cs = ((temp >> 16) & 0xf); +		else +			num_cs = 1; +	} + +	controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 32); +	controller->transfer_one = fsl_lpspi_transfer_one; +	controller->prepare_transfer_hardware = lpspi_prepare_xfer_hardware; +	controller->unprepare_transfer_hardware = lpspi_unprepare_xfer_hardware; +	controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; +	controller->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX; +	controller->dev.of_node = pdev->dev.of_node; +	controller->bus_num = pdev->id; +	controller->num_chipselect = num_cs; +	controller->target_abort = fsl_lpspi_target_abort; +	if (!fsl_lpspi->is_target) +		controller->use_gpio_descriptors = true;  	ret = fsl_lpspi_dma_init(&pdev->dev, fsl_lpspi, controller);  	if (ret == -EPROBE_DEFER) diff --git a/drivers/spi/spi-fsl-qspi.c b/drivers/spi/spi-fsl-qspi.c index 8ade61e5ebc0..79bac30e79af 100644 --- a/drivers/spi/spi-fsl-qspi.c +++ b/drivers/spi/spi-fsl-qspi.c @@ -34,7 +34,6 @@  #include <linux/module.h>  #include <linux/mutex.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/pm_qos.h>  #include <linux/sizes.h> @@ -368,7 +367,7 @@ static int fsl_qspi_check_buswidth(struct fsl_qspi *q, u8 width)  static bool fsl_qspi_supports_op(struct spi_mem *mem,  				 const struct spi_mem_op *op)  { -	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master); +	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->controller);  	int ret;  	ret = fsl_qspi_check_buswidth(q, op->cmd.buswidth); @@ -641,7 +640,7 @@ static int fsl_qspi_readl_poll_tout(struct fsl_qspi *q, void __iomem *base,  static int fsl_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master); +	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->controller);  	void __iomem *base = q->iobase;  	u32 addr_offset = 0;  	int err = 0; @@ -703,7 +702,7 @@ static int fsl_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  static int fsl_qspi_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op)  { -	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master); +	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->controller);  	if (op->data.dir == SPI_MEM_DATA_OUT) {  		if (op->data.nbytes > q->devtype_data->txfifo) @@ -809,7 +808,7 @@ static int fsl_qspi_default_setup(struct fsl_qspi *q)  static const char *fsl_qspi_get_name(struct spi_mem *mem)  { -	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master); +	struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->controller);  	struct device *dev = &mem->spi->dev;  	const char *name; @@ -849,7 +848,7 @@ static int fsl_qspi_probe(struct platform_device *pdev)  	struct fsl_qspi *q;  	int ret; -	ctlr = spi_alloc_master(&pdev->dev, sizeof(*q)); +	ctlr = spi_alloc_host(&pdev->dev, sizeof(*q));  	if (!ctlr)  		return -ENOMEM; diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c index 106fe60a0a50..97faf984801f 100644 --- a/drivers/spi/spi-fsl-spi.c +++ b/drivers/spi/spi-fsl-spi.c @@ -88,7 +88,7 @@ static int fsl_spi_get_type(struct device *dev)  static void fsl_spi_change_mode(struct spi_device *spi)  { -	struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master); +	struct mpc8xxx_spi *mspi = spi_controller_get_devdata(spi->controller);  	struct spi_mpc8xxx_cs *cs = spi->controller_state;  	struct fsl_spi_reg __iomem *reg_base = mspi->reg_base;  	__be32 __iomem *mode = ®_base->mode; @@ -183,7 +183,7 @@ static int fsl_spi_setup_transfer(struct spi_device *spi,  	u32 hz = 0;  	struct spi_mpc8xxx_cs	*cs = spi->controller_state; -	mpc8xxx_spi = spi_master_get_devdata(spi->master); +	mpc8xxx_spi = spi_controller_get_devdata(spi->controller);  	if (t) {  		bits_per_word = t->bits_per_word; @@ -252,7 +252,7 @@ static int fsl_spi_cpu_bufs(struct mpc8xxx_spi *mspi,  static int fsl_spi_bufs(struct spi_device *spi, struct spi_transfer *t,  			    bool is_dma_mapped)  { -	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); +	struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(spi->controller);  	struct fsl_spi_reg __iomem *reg_base;  	unsigned int len = t->len;  	u8 bits_per_word; @@ -385,7 +385,7 @@ static int fsl_spi_setup(struct spi_device *spi)  		spi_set_ctldata(spi, cs);  		initial_setup = true;  	} -	mpc8xxx_spi = spi_master_get_devdata(spi->master); +	mpc8xxx_spi = spi_controller_get_devdata(spi->controller);  	reg_base = mpc8xxx_spi->reg_base; @@ -479,7 +479,7 @@ static irqreturn_t fsl_spi_irq(s32 irq, void *context_data)  static void fsl_spi_grlib_cs_control(struct spi_device *spi, bool on)  { -	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); +	struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(spi->controller);  	struct fsl_spi_reg __iomem *reg_base = mpc8xxx_spi->reg_base;  	u32 slvsel;  	u16 cs = spi_get_chipselect(spi, 0); @@ -493,8 +493,8 @@ static void fsl_spi_grlib_cs_control(struct spi_device *spi, bool on)  static void fsl_spi_grlib_probe(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(host);  	struct fsl_spi_reg __iomem *reg_base = mpc8xxx_spi->reg_base;  	int mbits;  	u32 capabilities; @@ -511,8 +511,8 @@ static void fsl_spi_grlib_probe(struct device *dev)  		mpc8xxx_spi->native_chipselects = SPCAP_SSSZ(capabilities);  		mpc8xxx_spi_write_reg(®_base->slvsel, 0xffffffff);  	} -	master->num_chipselect = mpc8xxx_spi->native_chipselects; -	master->set_cs = fsl_spi_grlib_cs_control; +	host->num_chipselect = mpc8xxx_spi->native_chipselects; +	host->set_cs = fsl_spi_grlib_cs_control;  }  static void fsl_spi_cs_control(struct spi_device *spi, bool on) @@ -526,35 +526,35 @@ static void fsl_spi_cs_control(struct spi_device *spi, bool on)  	iowrite32be(on ? 0 : SPI_BOOT_SEL_BIT, pinfo->immr_spi_cs);  } -static struct spi_master *fsl_spi_probe(struct device *dev, +static struct spi_controller *fsl_spi_probe(struct device *dev,  		struct resource *mem, unsigned int irq)  {  	struct fsl_spi_platform_data *pdata = dev_get_platdata(dev); -	struct spi_master *master; +	struct spi_controller *host;  	struct mpc8xxx_spi *mpc8xxx_spi;  	struct fsl_spi_reg __iomem *reg_base;  	u32 regval;  	int ret = 0; -	master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi)); -	if (master == NULL) { +	host = spi_alloc_host(dev, sizeof(struct mpc8xxx_spi)); +	if (host == NULL) {  		ret = -ENOMEM;  		goto err;  	} -	dev_set_drvdata(dev, master); +	dev_set_drvdata(dev, host);  	mpc8xxx_spi_probe(dev, mem, irq); -	master->setup = fsl_spi_setup; -	master->cleanup = fsl_spi_cleanup; -	master->prepare_message = fsl_spi_prepare_message; -	master->transfer_one = fsl_spi_transfer_one; -	master->unprepare_message = fsl_spi_unprepare_message; -	master->use_gpio_descriptors = true; -	master->set_cs = fsl_spi_cs_control; +	host->setup = fsl_spi_setup; +	host->cleanup = fsl_spi_cleanup; +	host->prepare_message = fsl_spi_prepare_message; +	host->transfer_one = fsl_spi_transfer_one; +	host->unprepare_message = fsl_spi_unprepare_message; +	host->use_gpio_descriptors = true; +	host->set_cs = fsl_spi_cs_control; -	mpc8xxx_spi = spi_master_get_devdata(master); +	mpc8xxx_spi = spi_controller_get_devdata(host);  	mpc8xxx_spi->max_bits_per_word = 32;  	mpc8xxx_spi->type = fsl_spi_get_type(dev); @@ -572,13 +572,13 @@ static struct spi_master *fsl_spi_probe(struct device *dev,  		fsl_spi_grlib_probe(dev);  	if (mpc8xxx_spi->flags & SPI_CPM_MODE) -		master->bits_per_word_mask = +		host->bits_per_word_mask =  			(SPI_BPW_RANGE_MASK(4, 8) | SPI_BPW_MASK(16) | SPI_BPW_MASK(32));  	else -		master->bits_per_word_mask = +		host->bits_per_word_mask =  			(SPI_BPW_RANGE_MASK(4, 16) | SPI_BPW_MASK(32)); -	master->bits_per_word_mask &= +	host->bits_per_word_mask &=  		SPI_BPW_RANGE_MASK(1, mpc8xxx_spi->max_bits_per_word);  	if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) @@ -615,19 +615,19 @@ static struct spi_master *fsl_spi_probe(struct device *dev,  	mpc8xxx_spi_write_reg(®_base->mode, regval); -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret < 0)  		goto err_probe;  	dev_info(dev, "at 0x%p (irq = %d), %s mode\n", reg_base,  		 mpc8xxx_spi->irq, mpc8xxx_spi_strmode(mpc8xxx_spi->flags)); -	return master; +	return host;  err_probe:  	fsl_spi_cpm_free(mpc8xxx_spi);  err_cpm_init: -	spi_master_put(master); +	spi_controller_put(host);  err:  	return ERR_PTR(ret);  } @@ -636,7 +636,7 @@ static int of_fsl_spi_probe(struct platform_device *ofdev)  {  	struct device *dev = &ofdev->dev;  	struct device_node *np = ofdev->dev.of_node; -	struct spi_master *master; +	struct spi_controller *host;  	struct resource mem;  	int irq, type;  	int ret; @@ -689,9 +689,9 @@ static int of_fsl_spi_probe(struct platform_device *ofdev)  		goto unmap_out;  	} -	master = fsl_spi_probe(dev, &mem, irq); +	host = fsl_spi_probe(dev, &mem, irq); -	return PTR_ERR_OR_ZERO(master); +	return PTR_ERR_OR_ZERO(host);  unmap_out:  #if IS_ENABLED(CONFIG_FSL_SOC) @@ -703,8 +703,8 @@ unmap_out:  static void of_fsl_spi_remove(struct platform_device *ofdev)  { -	struct spi_master *master = platform_get_drvdata(ofdev); -	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(ofdev); +	struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(host);  	fsl_spi_cpm_free(mpc8xxx_spi);  } @@ -730,7 +730,7 @@ static int plat_mpc8xxx_spi_probe(struct platform_device *pdev)  {  	struct resource *mem;  	int irq; -	struct spi_master *master; +	struct spi_controller *host;  	if (!dev_get_platdata(&pdev->dev))  		return -EINVAL; @@ -740,17 +740,17 @@ static int plat_mpc8xxx_spi_probe(struct platform_device *pdev)  		return -EINVAL;  	irq = platform_get_irq(pdev, 0); -	if (irq <= 0) -		return -EINVAL; +	if (irq < 0) +		return irq; -	master = fsl_spi_probe(&pdev->dev, mem, irq); -	return PTR_ERR_OR_ZERO(master); +	host = fsl_spi_probe(&pdev->dev, mem, irq); +	return PTR_ERR_OR_ZERO(host);  }  static void plat_mpc8xxx_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(host);  	fsl_spi_cpm_free(mpc8xxx_spi);  } diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c index 1df9d4844a68..f4f376a8351b 100644 --- a/drivers/spi/spi-geni-qcom.c +++ b/drivers/spi/spi-geni-qcom.c @@ -12,6 +12,7 @@  #include <linux/platform_device.h>  #include <linux/pm_opp.h>  #include <linux/pm_runtime.h> +#include <linux/property.h>  #include <linux/soc/qcom/geni-se.h>  #include <linux/spi/spi.h>  #include <linux/spinlock.h> @@ -52,6 +53,9 @@  #define SPI_CS_CLK_DELAY_MSK		GENMASK(19, 10)  #define SPI_CS_CLK_DELAY_SHFT		10 +#define SE_SPI_SLAVE_EN				(0x2BC) +#define SPI_SLAVE_EN				BIT(0) +  /* M_CMD OP codes for SPI */  #define SPI_TX_ONLY		1  #define SPI_RX_ONLY		2 @@ -99,6 +103,16 @@ struct spi_geni_master {  	int cur_xfer_mode;  }; +static void spi_slv_setup(struct spi_geni_master *mas) +{ +	struct geni_se *se = &mas->se; + +	writel(SPI_SLAVE_EN, se->base + SE_SPI_SLAVE_EN); +	writel(GENI_IO_MUX_0_EN, se->base + GENI_OUTPUT_CTRL); +	writel(START_TRIGGER, se->base + SE_GENI_CFG_SEQ_START); +	dev_dbg(mas->dev, "spi slave setup done\n"); +} +  static int get_spi_clk_cfg(unsigned int speed_hz,  			struct spi_geni_master *mas,  			unsigned int *clk_idx, @@ -140,12 +154,22 @@ static void handle_se_timeout(struct spi_master *spi,  	const struct spi_transfer *xfer;  	spin_lock_irq(&mas->lock); -	reinit_completion(&mas->cancel_done);  	if (mas->cur_xfer_mode == GENI_SE_FIFO)  		writel(0, se->base + SE_GENI_TX_WATERMARK_REG);  	xfer = mas->cur_xfer;  	mas->cur_xfer = NULL; + +	if (spi->slave) { +		/* +		 * skip CMD Cancel sequnece since spi slave +		 * doesn`t support CMD Cancel sequnece +		 */ +		spin_unlock_irq(&mas->lock); +		goto unmap_if_dma; +	} + +	reinit_completion(&mas->cancel_done);  	geni_se_cancel_m_cmd(se);  	spin_unlock_irq(&mas->lock); @@ -542,6 +566,10 @@ static bool geni_can_dma(struct spi_controller *ctlr,  	if (mas->cur_xfer_mode == GENI_GPI_DMA)  		return true; +	/* Set SE DMA mode for SPI slave. */ +	if (ctlr->slave) +		return true; +  	len = get_xfer_len_in_words(xfer, mas);  	fifo_size = mas->tx_fifo_depth * mas->fifo_width_bits / mas->cur_bits_per_word; @@ -619,6 +647,7 @@ static void spi_geni_release_dma_chan(struct spi_geni_master *mas)  static int spi_geni_init(struct spi_geni_master *mas)  { +	struct spi_master *spi = dev_get_drvdata(mas->dev);  	struct geni_se *se = &mas->se;  	unsigned int proto, major, minor, ver;  	u32 spi_tx_cfg, fifo_disable; @@ -627,7 +656,14 @@ static int spi_geni_init(struct spi_geni_master *mas)  	pm_runtime_get_sync(mas->dev);  	proto = geni_se_read_proto(se); -	if (proto != GENI_SE_SPI) { + +	if (spi->slave) { +		if (proto != GENI_SE_SPI_SLAVE) { +			dev_err(mas->dev, "Invalid proto %d\n", proto); +			goto out_pm; +		} +		spi_slv_setup(mas); +	} else if (proto != GENI_SE_SPI) {  		dev_err(mas->dev, "Invalid proto %d\n", proto);  		goto out_pm;  	} @@ -679,9 +715,11 @@ static int spi_geni_init(struct spi_geni_master *mas)  	}  	/* We always control CS manually */ -	spi_tx_cfg = readl(se->base + SE_SPI_TRANS_CFG); -	spi_tx_cfg &= ~CS_TOGGLE; -	writel(spi_tx_cfg, se->base + SE_SPI_TRANS_CFG); +	if (!spi->slave) { +		spi_tx_cfg = readl(se->base + SE_SPI_TRANS_CFG); +		spi_tx_cfg &= ~CS_TOGGLE; +		writel(spi_tx_cfg, se->base + SE_SPI_TRANS_CFG); +	}  out_pm:  	pm_runtime_put(mas->dev); @@ -1074,6 +1112,9 @@ static int spi_geni_probe(struct platform_device *pdev)  	pm_runtime_set_autosuspend_delay(&pdev->dev, 250);  	pm_runtime_enable(dev); +	if (device_property_read_bool(&pdev->dev, "spi-slave")) +		spi->slave = true; +  	ret = geni_icc_get(&mas->se, NULL);  	if (ret)  		goto spi_geni_probe_runtime_disable; @@ -1094,7 +1135,7 @@ static int spi_geni_probe(struct platform_device *pdev)  	 * for dma (gsi) mode, the gsi will set cs based on params passed in  	 * TRE  	 */ -	if (mas->cur_xfer_mode == GENI_SE_FIFO) +	if (!spi->slave && mas->cur_xfer_mode == GENI_SE_FIFO)  		spi->set_cs = spi_geni_set_cs;  	/* diff --git a/drivers/spi/spi-gpio.c b/drivers/spi/spi-gpio.c index 092afc7679d4..d8db4564b406 100644 --- a/drivers/spi/spi-gpio.c +++ b/drivers/spi/spi-gpio.c @@ -1,6 +1,6 @@  // SPDX-License-Identifier: GPL-2.0-or-later  /* - * SPI master driver using generic bitbanged GPIO + * SPI host driver using generic bitbanged GPIO   *   * Copyright (C) 2006,2008 David Brownell   * Copyright (C) 2017 Linus Walleij @@ -10,7 +10,6 @@  #include <linux/platform_device.h>  #include <linux/gpio/consumer.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/spi/spi.h>  #include <linux/spi/spi_bitbang.h> @@ -18,7 +17,7 @@  /* - * This bitbanging SPI master driver should help make systems usable + * This bitbanging SPI host driver should help make systems usable   * when a native hardware SPI engine is not available, perhaps because   * its driver isn't yet working or because the I/O pins it requires   * are used for other purposes. @@ -27,7 +26,7 @@   *   * spi->controller_state ... reserved for bitbang framework code   * - * spi->master->dev.driver_data ... points to spi_gpio->bitbang + * spi->controller->dev.driver_data ... points to spi_gpio->bitbang   */  struct spi_gpio { @@ -78,7 +77,7 @@ spi_to_spi_gpio(const struct spi_device *spi)  	const struct spi_bitbang	*bang;  	struct spi_gpio			*spi_gpio; -	bang = spi_master_get_devdata(spi->master); +	bang = spi_controller_get_devdata(spi->controller);  	spi_gpio = container_of(bang, struct spi_gpio, bitbang);  	return spi_gpio;  } @@ -170,7 +169,7 @@ static u32 spi_gpio_txrx_word_mode3(struct spi_device *spi,  /*   * These functions do not call setmosi or getmiso if respective flag - * (SPI_MASTER_NO_RX or SPI_MASTER_NO_TX) is set, so they are safe to + * (SPI_CONTROLLER_NO_RX or SPI_CONTROLLER_NO_TX) is set, so they are safe to   * call when such pin is not present or defined in the controller.   * A separate set of callbacks is defined to get highest possible   * speed in the generic case (when both MISO and MOSI lines are @@ -181,7 +180,7 @@ static u32 spi_gpio_txrx_word_mode3(struct spi_device *spi,  static u32 spi_gpio_spec_txrx_word_mode0(struct spi_device *spi,  		unsigned nsecs, u32 word, u8 bits, unsigned flags)  { -	flags = spi->master->flags; +	flags = spi->controller->flags;  	if (unlikely(spi->mode & SPI_LSB_FIRST))  		return bitbang_txrx_le_cpha0(spi, nsecs, 0, flags, word, bits);  	else @@ -191,7 +190,7 @@ static u32 spi_gpio_spec_txrx_word_mode0(struct spi_device *spi,  static u32 spi_gpio_spec_txrx_word_mode1(struct spi_device *spi,  		unsigned nsecs, u32 word, u8 bits, unsigned flags)  { -	flags = spi->master->flags; +	flags = spi->controller->flags;  	if (unlikely(spi->mode & SPI_LSB_FIRST))  		return bitbang_txrx_le_cpha1(spi, nsecs, 0, flags, word, bits);  	else @@ -201,7 +200,7 @@ static u32 spi_gpio_spec_txrx_word_mode1(struct spi_device *spi,  static u32 spi_gpio_spec_txrx_word_mode2(struct spi_device *spi,  		unsigned nsecs, u32 word, u8 bits, unsigned flags)  { -	flags = spi->master->flags; +	flags = spi->controller->flags;  	if (unlikely(spi->mode & SPI_LSB_FIRST))  		return bitbang_txrx_le_cpha0(spi, nsecs, 1, flags, word, bits);  	else @@ -211,7 +210,7 @@ static u32 spi_gpio_spec_txrx_word_mode2(struct spi_device *spi,  static u32 spi_gpio_spec_txrx_word_mode3(struct spi_device *spi,  		unsigned nsecs, u32 word, u8 bits, unsigned flags)  { -	flags = spi->master->flags; +	flags = spi->controller->flags;  	if (unlikely(spi->mode & SPI_LSB_FIRST))  		return bitbang_txrx_le_cpha1(spi, nsecs, 1, flags, word, bits);  	else @@ -311,7 +310,7 @@ static void spi_gpio_cleanup(struct spi_device *spi)   * On platforms which can do so, configure MISO with a weak pullup unless   * there's an external pullup on that signal.  That saves power by avoiding   * floating signals.  (A weak pulldown would save power too, but many - * drivers expect to see all-ones data as the no slave "response".) + * drivers expect to see all-ones data as the no target "response".)   */  static int spi_gpio_request(struct device *dev, struct spi_gpio *spi_gpio)  { @@ -335,27 +334,27 @@ static const struct of_device_id spi_gpio_dt_ids[] = {  MODULE_DEVICE_TABLE(of, spi_gpio_dt_ids);  static int spi_gpio_probe_dt(struct platform_device *pdev, -			     struct spi_master *master) +			     struct spi_controller *host)  { -	master->dev.of_node = pdev->dev.of_node; -	master->use_gpio_descriptors = true; +	host->dev.of_node = pdev->dev.of_node; +	host->use_gpio_descriptors = true;  	return 0;  }  #else  static inline int spi_gpio_probe_dt(struct platform_device *pdev, -				    struct spi_master *master) +				    struct spi_controller *host)  {  	return 0;  }  #endif  static int spi_gpio_probe_pdata(struct platform_device *pdev, -				struct spi_master *master) +				struct spi_controller *host)  {  	struct device *dev = &pdev->dev;  	struct spi_gpio_platform_data *pdata = dev_get_platdata(dev); -	struct spi_gpio *spi_gpio = spi_master_get_devdata(master); +	struct spi_gpio *spi_gpio = spi_controller_get_devdata(host);  	int i;  #ifdef GENERIC_BITBANG @@ -363,18 +362,18 @@ static int spi_gpio_probe_pdata(struct platform_device *pdev,  		return -ENODEV;  #endif  	/* -	 * The master needs to think there is a chipselect even if not +	 * The host needs to think there is a chipselect even if not  	 * connected  	 */ -	master->num_chipselect = pdata->num_chipselect ?: 1; +	host->num_chipselect = pdata->num_chipselect ?: 1; -	spi_gpio->cs_gpios = devm_kcalloc(dev, master->num_chipselect, +	spi_gpio->cs_gpios = devm_kcalloc(dev, host->num_chipselect,  					  sizeof(*spi_gpio->cs_gpios),  					  GFP_KERNEL);  	if (!spi_gpio->cs_gpios)  		return -ENOMEM; -	for (i = 0; i < master->num_chipselect; i++) { +	for (i = 0; i < host->num_chipselect; i++) {  		spi_gpio->cs_gpios[i] = devm_gpiod_get_index(dev, "cs", i,  							     GPIOD_OUT_HIGH);  		if (IS_ERR(spi_gpio->cs_gpios[i])) @@ -387,58 +386,58 @@ static int spi_gpio_probe_pdata(struct platform_device *pdev,  static int spi_gpio_probe(struct platform_device *pdev)  {  	int				status; -	struct spi_master		*master; +	struct spi_controller		*host;  	struct spi_gpio			*spi_gpio;  	struct device			*dev = &pdev->dev;  	struct spi_bitbang		*bb; -	master = devm_spi_alloc_master(dev, sizeof(*spi_gpio)); -	if (!master) +	host = devm_spi_alloc_host(dev, sizeof(*spi_gpio)); +	if (!host)  		return -ENOMEM;  	if (pdev->dev.of_node) -		status = spi_gpio_probe_dt(pdev, master); +		status = spi_gpio_probe_dt(pdev, host);  	else -		status = spi_gpio_probe_pdata(pdev, master); +		status = spi_gpio_probe_pdata(pdev, host);  	if (status)  		return status; -	spi_gpio = spi_master_get_devdata(master); +	spi_gpio = spi_controller_get_devdata(host);  	status = spi_gpio_request(dev, spi_gpio);  	if (status)  		return status; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32); -	master->mode_bits = SPI_3WIRE | SPI_3WIRE_HIZ | SPI_CPHA | SPI_CPOL | +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32); +	host->mode_bits = SPI_3WIRE | SPI_3WIRE_HIZ | SPI_CPHA | SPI_CPOL |  			    SPI_CS_HIGH | SPI_LSB_FIRST;  	if (!spi_gpio->mosi) {  		/* HW configuration without MOSI pin  		 * -		 * No setting SPI_MASTER_NO_RX here - if there is only +		 * No setting SPI_CONTROLLER_NO_RX here - if there is only  		 * a MOSI pin connected the host can still do RX by  		 * changing the direction of the line.  		 */ -		master->flags = SPI_MASTER_NO_TX; +		host->flags = SPI_CONTROLLER_NO_TX;  	} -	master->bus_num = pdev->id; -	master->setup = spi_gpio_setup; -	master->cleanup = spi_gpio_cleanup; +	host->bus_num = pdev->id; +	host->setup = spi_gpio_setup; +	host->cleanup = spi_gpio_cleanup;  	bb = &spi_gpio->bitbang; -	bb->master = master; +	bb->master = host;  	/*  	 * There is some additional business, apart from driving the CS GPIO  	 * line, that we need to do on selection. This makes the local  	 * callback for chipselect always get called.  	 */ -	master->flags |= SPI_MASTER_GPIO_SS; +	host->flags |= SPI_CONTROLLER_GPIO_SS;  	bb->chipselect = spi_gpio_chipselect;  	bb->set_line_direction = spi_gpio_set_direction; -	if (master->flags & SPI_MASTER_NO_TX) { +	if (host->flags & SPI_CONTROLLER_NO_TX) {  		bb->txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0;  		bb->txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1;  		bb->txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2; @@ -455,7 +454,7 @@ static int spi_gpio_probe(struct platform_device *pdev)  	if (status)  		return status; -	return devm_spi_register_master(&pdev->dev, master); +	return devm_spi_register_controller(&pdev->dev, host);  }  MODULE_ALIAS("platform:" DRIVER_NAME); @@ -469,6 +468,6 @@ static struct platform_driver spi_gpio_driver = {  };  module_platform_driver(spi_gpio_driver); -MODULE_DESCRIPTION("SPI master driver using generic bitbanged GPIO "); +MODULE_DESCRIPTION("SPI host driver using generic bitbanged GPIO ");  MODULE_AUTHOR("David Brownell");  MODULE_LICENSE("GPL"); diff --git a/drivers/spi/spi-gxp.c b/drivers/spi/spi-gxp.c index 684d63f402f3..fd2fac236bbd 100644 --- a/drivers/spi/spi-gxp.c +++ b/drivers/spi/spi-gxp.c @@ -3,7 +3,6 @@  #include <linux/iopoll.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/spi/spi.h>  #include <linux/spi/spi-mem.h> @@ -200,7 +199,7 @@ static ssize_t gxp_spi_write(struct gxp_spi_chip *chip, const struct spi_mem_op  static int do_gxp_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct gxp_spi *spifi = spi_controller_get_devdata(mem->spi->master); +	struct gxp_spi *spifi = spi_controller_get_devdata(mem->spi->controller);  	struct gxp_spi_chip *chip = &spifi->chips[spi_get_chipselect(mem->spi, 0)];  	int ret; @@ -236,7 +235,7 @@ static const struct spi_controller_mem_ops gxp_spi_mem_ops = {  static int gxp_spi_setup(struct spi_device *spi)  { -	struct gxp_spi *spifi = spi_controller_get_devdata(spi->master); +	struct gxp_spi *spifi = spi_controller_get_devdata(spi->controller);  	unsigned int cs = spi_get_chipselect(spi, 0);  	struct gxp_spi_chip *chip = &spifi->chips[cs]; @@ -258,7 +257,7 @@ static int gxp_spifi_probe(struct platform_device *pdev)  	data = of_device_get_match_data(&pdev->dev); -	ctlr = devm_spi_alloc_master(dev, sizeof(*spifi)); +	ctlr = devm_spi_alloc_host(dev, sizeof(*spifi));  	if (!ctlr)  		return -ENOMEM; diff --git a/drivers/spi/spi-hisi-kunpeng.c b/drivers/spi/spi-hisi-kunpeng.c index 2b4b3d2a22b8..35ef5e8e2ffd 100644 --- a/drivers/spi/spi-hisi-kunpeng.c +++ b/drivers/spi/spi-hisi-kunpeng.c @@ -164,10 +164,10 @@ static int hisi_spi_debugfs_init(struct hisi_spi *hs)  {  	char name[32]; -	struct spi_controller *master; +	struct spi_controller *host; -	master = container_of(hs->dev, struct spi_controller, dev); -	snprintf(name, 32, "hisi_spi%d", master->bus_num); +	host = container_of(hs->dev, struct spi_controller, dev); +	snprintf(name, 32, "hisi_spi%d", host->bus_num);  	hs->debugfs = debugfs_create_dir(name, NULL);  	if (IS_ERR(hs->debugfs))  		return -ENOMEM; @@ -291,18 +291,18 @@ static void __hisi_calc_div_reg(struct hisi_chip_data *chip)  	chip->div_post = (chip->clk_div / chip->div_pre) - 1;  } -static u32 hisi_calc_effective_speed(struct spi_controller *master, +static u32 hisi_calc_effective_speed(struct spi_controller *host,  			struct hisi_chip_data *chip, u32 speed_hz)  {  	u32 effective_speed;  	/* Note clock divider doesn't support odd numbers */ -	chip->clk_div = DIV_ROUND_UP(master->max_speed_hz, speed_hz) + 1; +	chip->clk_div = DIV_ROUND_UP(host->max_speed_hz, speed_hz) + 1;  	chip->clk_div &= 0xfffe;  	if (chip->clk_div > CLK_DIV_MAX)  		chip->clk_div = CLK_DIV_MAX; -	effective_speed = master->max_speed_hz / chip->clk_div; +	effective_speed = host->max_speed_hz / chip->clk_div;  	if (chip->speed_hz != effective_speed) {  		__hisi_calc_div_reg(chip);  		chip->speed_hz = effective_speed; @@ -336,20 +336,20 @@ static void hisi_spi_hw_init(struct hisi_spi *hs)  static irqreturn_t hisi_spi_irq(int irq, void *dev_id)  { -	struct spi_controller *master = dev_id; -	struct hisi_spi *hs = spi_controller_get_devdata(master); +	struct spi_controller *host = dev_id; +	struct hisi_spi *hs = spi_controller_get_devdata(host);  	u32 irq_status = readl(hs->regs + HISI_SPI_ISR) & ISR_MASK;  	if (!irq_status)  		return IRQ_NONE; -	if (!master->cur_msg) +	if (!host->cur_msg)  		return IRQ_HANDLED;  	/* Error handling */  	if (irq_status & ISR_RXOF) {  		dev_err(hs->dev, "interrupt_transfer: fifo overflow\n"); -		master->cur_msg->status = -EIO; +		host->cur_msg->status = -EIO;  		goto finalize_transfer;  	} @@ -369,20 +369,20 @@ static irqreturn_t hisi_spi_irq(int irq, void *dev_id)  finalize_transfer:  	hisi_spi_disable(hs); -	spi_finalize_current_transfer(master); +	spi_finalize_current_transfer(host);  	return IRQ_HANDLED;  } -static int hisi_spi_transfer_one(struct spi_controller *master, +static int hisi_spi_transfer_one(struct spi_controller *host,  		struct spi_device *spi, struct spi_transfer *transfer)  { -	struct hisi_spi *hs = spi_controller_get_devdata(master); +	struct hisi_spi *hs = spi_controller_get_devdata(host);  	struct hisi_chip_data *chip = spi_get_ctldata(spi);  	u32 cr = chip->cr;  	/* Update per transfer options for speed and bpw */  	transfer->effective_speed_hz = -		hisi_calc_effective_speed(master, chip, transfer->speed_hz); +		hisi_calc_effective_speed(host, chip, transfer->speed_hz);  	cr |= FIELD_PREP(CR_DIV_PRE_MASK, chip->div_pre);  	cr |= FIELD_PREP(CR_DIV_POST_MASK, chip->div_post);  	cr |= FIELD_PREP(CR_BPW_MASK, transfer->bits_per_word - 1); @@ -409,10 +409,10 @@ static int hisi_spi_transfer_one(struct spi_controller *master,  	return 1;  } -static void hisi_spi_handle_err(struct spi_controller *master, +static void hisi_spi_handle_err(struct spi_controller *host,  		struct spi_message *msg)  { -	struct hisi_spi *hs = spi_controller_get_devdata(master); +	struct hisi_spi *hs = spi_controller_get_devdata(host);  	hisi_spi_disable(hs); @@ -452,7 +452,7 @@ static void hisi_spi_cleanup(struct spi_device *spi)  static int hisi_spi_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; -	struct spi_controller *master; +	struct spi_controller *host;  	struct hisi_spi *hs;  	int ret, irq; @@ -460,13 +460,13 @@ static int hisi_spi_probe(struct platform_device *pdev)  	if (irq < 0)  		return irq; -	master = devm_spi_alloc_master(dev, sizeof(*hs)); -	if (!master) +	host = devm_spi_alloc_host(dev, sizeof(*hs)); +	if (!host)  		return -ENOMEM; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	hs = spi_controller_get_devdata(master); +	hs = spi_controller_get_devdata(host);  	hs->dev = dev;  	hs->irq = irq; @@ -474,9 +474,9 @@ static int hisi_spi_probe(struct platform_device *pdev)  	if (IS_ERR(hs->regs))  		return PTR_ERR(hs->regs); -	/* Specify maximum SPI clocking speed (master only) by firmware */ +	/* Specify maximum SPI clocking speed (host only) by firmware */  	ret = device_property_read_u32(dev, "spi-max-frequency", -					&master->max_speed_hz); +					&host->max_speed_hz);  	if (ret) {  		dev_err(dev, "failed to get max SPI clocking speed, ret=%d\n",  			ret); @@ -484,32 +484,32 @@ static int hisi_spi_probe(struct platform_device *pdev)  	}  	ret = device_property_read_u16(dev, "num-cs", -					&master->num_chipselect); +					&host->num_chipselect);  	if (ret) -		master->num_chipselect = DEFAULT_NUM_CS; +		host->num_chipselect = DEFAULT_NUM_CS; -	master->use_gpio_descriptors = true; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); -	master->bus_num = pdev->id; -	master->setup = hisi_spi_setup; -	master->cleanup = hisi_spi_cleanup; -	master->transfer_one = hisi_spi_transfer_one; -	master->handle_err = hisi_spi_handle_err; -	master->dev.fwnode = dev->fwnode; +	host->use_gpio_descriptors = true; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); +	host->bus_num = pdev->id; +	host->setup = hisi_spi_setup; +	host->cleanup = hisi_spi_cleanup; +	host->transfer_one = hisi_spi_transfer_one; +	host->handle_err = hisi_spi_handle_err; +	host->dev.fwnode = dev->fwnode;  	hisi_spi_hw_init(hs);  	ret = devm_request_irq(dev, hs->irq, hisi_spi_irq, 0, dev_name(dev), -			master); +			       host);  	if (ret < 0) {  		dev_err(dev, "failed to get IRQ=%d, ret=%d\n", hs->irq, ret);  		return ret;  	} -	ret = spi_register_controller(master); +	ret = spi_register_controller(host);  	if (ret) { -		dev_err(dev, "failed to register spi master, ret=%d\n", ret); +		dev_err(dev, "failed to register spi host, ret=%d\n", ret);  		return ret;  	} @@ -518,18 +518,18 @@ static int hisi_spi_probe(struct platform_device *pdev)  	dev_info(dev, "hw version:0x%x max-freq:%u kHz\n",  		readl(hs->regs + HISI_SPI_VERSION), -		master->max_speed_hz / 1000); +		host->max_speed_hz / 1000);  	return 0;  }  static void hisi_spi_remove(struct platform_device *pdev)  { -	struct spi_controller *master = platform_get_drvdata(pdev); -	struct hisi_spi *hs = spi_controller_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct hisi_spi *hs = spi_controller_get_devdata(host);  	debugfs_remove_recursive(hs->debugfs); -	spi_unregister_controller(master); +	spi_unregister_controller(host);  }  static const struct acpi_device_id hisi_spi_acpi_match[] = { diff --git a/drivers/spi/spi-hisi-sfc-v3xx.c b/drivers/spi/spi-hisi-sfc-v3xx.c index 7cbcb065bb44..9d22018f7985 100644 --- a/drivers/spi/spi-hisi-sfc-v3xx.c +++ b/drivers/spi/spi-hisi-sfc-v3xx.c @@ -152,7 +152,7 @@ static int hisi_sfc_v3xx_adjust_op_size(struct spi_mem *mem,  	uintptr_t addr = (uintptr_t)op->data.buf.in;  	int max_byte_count; -	host = spi_controller_get_devdata(spi->master); +	host = spi_controller_get_devdata(spi->controller);  	max_byte_count = host->max_cmd_dword * 4; @@ -174,7 +174,7 @@ static bool hisi_sfc_v3xx_supports_op(struct spi_mem *mem,  	struct spi_device *spi = mem->spi;  	struct hisi_sfc_v3xx_host *host; -	host = spi_controller_get_devdata(spi->master); +	host = spi_controller_get_devdata(spi->controller);  	if (op->data.buswidth > 4 || op->dummy.buswidth > 4 ||  	    op->addr.buswidth > 4 || op->cmd.buswidth > 4) @@ -363,7 +363,7 @@ static int hisi_sfc_v3xx_exec_op(struct spi_mem *mem,  	struct spi_device *spi = mem->spi;  	u8 chip_select = spi_get_chipselect(spi, 0); -	host = spi_controller_get_devdata(spi->master); +	host = spi_controller_get_devdata(spi->controller);  	return hisi_sfc_v3xx_generic_exec_op(host, op, chip_select);  } @@ -431,7 +431,7 @@ static int hisi_sfc_v3xx_probe(struct platform_device *pdev)  	u32 version, glb_config;  	int ret; -	ctlr = spi_alloc_master(&pdev->dev, sizeof(*host)); +	ctlr = spi_alloc_host(&pdev->dev, sizeof(*host));  	if (!ctlr)  		return -ENOMEM; @@ -448,13 +448,13 @@ static int hisi_sfc_v3xx_probe(struct platform_device *pdev)  	host->regbase = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(host->regbase)) {  		ret = PTR_ERR(host->regbase); -		goto err_put_master; +		goto err_put_host;  	}  	host->irq = platform_get_irq_optional(pdev, 0);  	if (host->irq == -EPROBE_DEFER) {  		ret = -EPROBE_DEFER; -		goto err_put_master; +		goto err_put_host;  	}  	hisi_sfc_v3xx_disable_int(host); @@ -496,15 +496,15 @@ static int hisi_sfc_v3xx_probe(struct platform_device *pdev)  	ret = devm_spi_register_controller(dev, ctlr);  	if (ret) -		goto err_put_master; +		goto err_put_host;  	dev_info(&pdev->dev, "hw version 0x%x, %s mode.\n",  		 version, host->irq ? "irq" : "polling");  	return 0; -err_put_master: -	spi_master_put(ctlr); +err_put_host: +	spi_controller_put(ctlr);  	return ret;  } diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c index d775f87770e3..d8360f94d3b7 100644 --- a/drivers/spi/spi-img-spfi.c +++ b/drivers/spi/spi-img-spfi.c @@ -86,7 +86,7 @@  struct img_spfi {  	struct device *dev; -	struct spi_master *master; +	struct spi_controller *host;  	spinlock_t lock;  	void __iomem *regs; @@ -221,11 +221,11 @@ static unsigned int spfi_pio_read8(struct img_spfi *spfi, u8 *buf,  	return count;  } -static int img_spfi_start_pio(struct spi_master *master, +static int img_spfi_start_pio(struct spi_controller *host,  			       struct spi_device *spi,  			       struct spi_transfer *xfer)  { -	struct img_spfi *spfi = spi_master_get_devdata(spi->master); +	struct img_spfi *spfi = spi_controller_get_devdata(spi->controller);  	unsigned int tx_bytes = 0, rx_bytes = 0;  	const void *tx_buf = xfer->tx_buf;  	void *rx_buf = xfer->rx_buf; @@ -285,7 +285,7 @@ static void img_spfi_dma_rx_cb(void *data)  	spin_lock_irqsave(&spfi->lock, flags);  	spfi->rx_dma_busy = false;  	if (!spfi->tx_dma_busy) -		spi_finalize_current_transfer(spfi->master); +		spi_finalize_current_transfer(spfi->host);  	spin_unlock_irqrestore(&spfi->lock, flags);  } @@ -299,15 +299,15 @@ static void img_spfi_dma_tx_cb(void *data)  	spin_lock_irqsave(&spfi->lock, flags);  	spfi->tx_dma_busy = false;  	if (!spfi->rx_dma_busy) -		spi_finalize_current_transfer(spfi->master); +		spi_finalize_current_transfer(spfi->host);  	spin_unlock_irqrestore(&spfi->lock, flags);  } -static int img_spfi_start_dma(struct spi_master *master, +static int img_spfi_start_dma(struct spi_controller *host,  			      struct spi_device *spi,  			      struct spi_transfer *xfer)  { -	struct img_spfi *spfi = spi_master_get_devdata(spi->master); +	struct img_spfi *spfi = spi_controller_get_devdata(spi->controller);  	struct dma_async_tx_descriptor *rxdesc = NULL, *txdesc = NULL;  	struct dma_slave_config rxconf, txconf; @@ -384,10 +384,10 @@ stop_dma:  	return -EIO;  } -static void img_spfi_handle_err(struct spi_master *master, +static void img_spfi_handle_err(struct spi_controller *host,  				struct spi_message *msg)  { -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	unsigned long flags;  	/* @@ -405,9 +405,9 @@ static void img_spfi_handle_err(struct spi_master *master,  	spin_unlock_irqrestore(&spfi->lock, flags);  } -static int img_spfi_prepare(struct spi_master *master, struct spi_message *msg) +static int img_spfi_prepare(struct spi_controller *host, struct spi_message *msg)  { -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	u32 val;  	val = spfi_readl(spfi, SPFI_PORT_STATE); @@ -427,20 +427,20 @@ static int img_spfi_prepare(struct spi_master *master, struct spi_message *msg)  	return 0;  } -static int img_spfi_unprepare(struct spi_master *master, +static int img_spfi_unprepare(struct spi_controller *host,  			      struct spi_message *msg)  { -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	spfi_reset(spfi);  	return 0;  } -static void img_spfi_config(struct spi_master *master, struct spi_device *spi, +static void img_spfi_config(struct spi_controller *host, struct spi_device *spi,  			    struct spi_transfer *xfer)  { -	struct img_spfi *spfi = spi_master_get_devdata(spi->master); +	struct img_spfi *spfi = spi_controller_get_devdata(spi->controller);  	u32 val, div;  	/* @@ -476,11 +476,11 @@ static void img_spfi_config(struct spi_master *master, struct spi_device *spi,  	spfi_writel(spfi, val, SPFI_CONTROL);  } -static int img_spfi_transfer_one(struct spi_master *master, +static int img_spfi_transfer_one(struct spi_controller *host,  				 struct spi_device *spi,  				 struct spi_transfer *xfer)  { -	struct img_spfi *spfi = spi_master_get_devdata(spi->master); +	struct img_spfi *spfi = spi_controller_get_devdata(spi->controller);  	int ret;  	if (xfer->len > SPFI_TRANSACTION_TSIZE_MASK) { @@ -490,16 +490,16 @@ static int img_spfi_transfer_one(struct spi_master *master,  		return -EINVAL;  	} -	img_spfi_config(master, spi, xfer); -	if (master->can_dma && master->can_dma(master, spi, xfer)) -		ret = img_spfi_start_dma(master, spi, xfer); +	img_spfi_config(host, spi, xfer); +	if (host->can_dma && host->can_dma(host, spi, xfer)) +		ret = img_spfi_start_dma(host, spi, xfer);  	else -		ret = img_spfi_start_pio(master, spi, xfer); +		ret = img_spfi_start_pio(host, spi, xfer);  	return ret;  } -static bool img_spfi_can_dma(struct spi_master *master, struct spi_device *spi, +static bool img_spfi_can_dma(struct spi_controller *host, struct spi_device *spi,  			     struct spi_transfer *xfer)  {  	if (xfer->len > SPFI_32BIT_FIFO_SIZE) @@ -524,20 +524,20 @@ static irqreturn_t img_spfi_irq(int irq, void *dev_id)  static int img_spfi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct img_spfi *spfi;  	struct resource *res;  	int ret;  	u32 max_speed_hz; -	master = spi_alloc_master(&pdev->dev, sizeof(*spfi)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*spfi)); +	if (!host)  		return -ENOMEM; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	spfi = spi_master_get_devdata(master); +	spfi = spi_controller_get_devdata(host);  	spfi->dev = &pdev->dev; -	spfi->master = master; +	spfi->host = host;  	spin_lock_init(&spfi->lock);  	spfi->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res); @@ -582,15 +582,15 @@ static int img_spfi_probe(struct platform_device *pdev)  	 */  	spfi_writel(spfi, SPFI_INTERRUPT_IACCESS, SPFI_INTERRUPT_ENABLE); -	master->auto_runtime_pm = true; -	master->bus_num = pdev->id; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_TX_DUAL | SPI_RX_DUAL; +	host->auto_runtime_pm = true; +	host->bus_num = pdev->id; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_TX_DUAL | SPI_RX_DUAL;  	if (of_property_read_bool(spfi->dev->of_node, "img,supports-quad-mode")) -		master->mode_bits |= SPI_TX_QUAD | SPI_RX_QUAD; -	master->dev.of_node = pdev->dev.of_node; -	master->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(8); -	master->max_speed_hz = clk_get_rate(spfi->spfi_clk) / 4; -	master->min_speed_hz = clk_get_rate(spfi->spfi_clk) / 512; +		host->mode_bits |= SPI_TX_QUAD | SPI_RX_QUAD; +	host->dev.of_node = pdev->dev.of_node; +	host->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(8); +	host->max_speed_hz = clk_get_rate(spfi->spfi_clk) / 4; +	host->min_speed_hz = clk_get_rate(spfi->spfi_clk) / 512;  	/*  	 * Maximum speed supported by spfi is limited to the lower value @@ -601,15 +601,15 @@ static int img_spfi_probe(struct platform_device *pdev)  	 */  	if (!of_property_read_u32(spfi->dev->of_node, "spfi-max-frequency",  				  &max_speed_hz)) { -		if (master->max_speed_hz > max_speed_hz) -			master->max_speed_hz = max_speed_hz; +		if (host->max_speed_hz > max_speed_hz) +			host->max_speed_hz = max_speed_hz;  	} -	master->transfer_one = img_spfi_transfer_one; -	master->prepare_message = img_spfi_prepare; -	master->unprepare_message = img_spfi_unprepare; -	master->handle_err = img_spfi_handle_err; -	master->use_gpio_descriptors = true; +	host->transfer_one = img_spfi_transfer_one; +	host->prepare_message = img_spfi_prepare; +	host->unprepare_message = img_spfi_unprepare; +	host->handle_err = img_spfi_handle_err; +	host->use_gpio_descriptors = true;  	spfi->tx_ch = dma_request_chan(spfi->dev, "tx");  	if (IS_ERR(spfi->tx_ch)) { @@ -636,15 +636,15 @@ static int img_spfi_probe(struct platform_device *pdev)  		spfi->rx_ch = NULL;  		dev_warn(spfi->dev, "Failed to get DMA channels, falling back to PIO mode\n");  	} else { -		master->dma_tx = spfi->tx_ch; -		master->dma_rx = spfi->rx_ch; -		master->can_dma = img_spfi_can_dma; +		host->dma_tx = spfi->tx_ch; +		host->dma_rx = spfi->rx_ch; +		host->can_dma = img_spfi_can_dma;  	}  	pm_runtime_set_active(spfi->dev);  	pm_runtime_enable(spfi->dev); -	ret = devm_spi_register_master(spfi->dev, master); +	ret = devm_spi_register_controller(spfi->dev, host);  	if (ret)  		goto disable_pm; @@ -660,15 +660,15 @@ disable_pm:  disable_pclk:  	clk_disable_unprepare(spfi->sys_clk);  put_spi: -	spi_master_put(master); +	spi_controller_put(host);  	return ret;  }  static void img_spfi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	if (spfi->tx_ch)  		dma_release_channel(spfi->tx_ch); @@ -685,8 +685,8 @@ static void img_spfi_remove(struct platform_device *pdev)  #ifdef CONFIG_PM  static int img_spfi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	clk_disable_unprepare(spfi->spfi_clk);  	clk_disable_unprepare(spfi->sys_clk); @@ -696,8 +696,8 @@ static int img_spfi_runtime_suspend(struct device *dev)  static int img_spfi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	int ret;  	ret = clk_prepare_enable(spfi->sys_clk); @@ -716,15 +716,15 @@ static int img_spfi_runtime_resume(struct device *dev)  #ifdef CONFIG_PM_SLEEP  static int img_spfi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev); -	return spi_master_suspend(master); +	return spi_controller_suspend(host);  }  static int img_spfi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct img_spfi *spfi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct img_spfi *spfi = spi_controller_get_devdata(host);  	int ret;  	ret = pm_runtime_resume_and_get(dev); @@ -733,7 +733,7 @@ static int img_spfi_resume(struct device *dev)  	spfi_reset(spfi);  	pm_runtime_put(dev); -	return spi_master_resume(master); +	return spi_controller_resume(host);  }  #endif /* CONFIG_PM_SLEEP */ diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 528ae46c087f..a8a74c7cb79f 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -20,7 +20,6 @@  #include <linux/spi/spi.h>  #include <linux/types.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/property.h>  #include <linux/dma/imx-dma.h> @@ -53,7 +52,7 @@ MODULE_PARM_DESC(polling_limit_us,  /* The maximum bytes that a sdma BD can transfer. */  #define MAX_SDMA_BD_BYTES (1 << 15)  #define MX51_ECSPI_CTRL_MAX_BURST	512 -/* The maximum bytes that IMX53_ECSPI can transfer in slave mode.*/ +/* The maximum bytes that IMX53_ECSPI can transfer in target mode.*/  #define MX53_MAX_TRANSFER_BYTES		512  enum spi_imx_devtype { @@ -78,7 +77,7 @@ struct spi_imx_devtype_data {  	void (*setup_wml)(struct spi_imx_data *spi_imx);  	void (*disable)(struct spi_imx_data *spi_imx);  	bool has_dmamode; -	bool has_slavemode; +	bool has_targetmode;  	unsigned int fifo_size;  	bool dynamic_burst;  	/* @@ -114,10 +113,10 @@ struct spi_imx_data {  	unsigned int dynamic_burst;  	bool rx_only; -	/* Slave mode */ -	bool slave_mode; -	bool slave_aborted; -	unsigned int slave_burst; +	/* Target mode */ +	bool target_mode; +	bool target_aborted; +	unsigned int target_burst;  	/* DMA */  	bool usedma; @@ -241,7 +240,7 @@ static bool spi_imx_can_dma(struct spi_controller *controller, struct spi_device  	if (!controller->dma_rx)  		return false; -	if (spi_imx->slave_mode) +	if (spi_imx->target_mode)  		return false;  	if (transfer->len < spi_imx->devtype_data->fifo_size) @@ -405,12 +404,12 @@ static void spi_imx_buf_tx_swap(struct spi_imx_data *spi_imx)  	writel(val, spi_imx->base + MXC_CSPITXDATA);  } -static void mx53_ecspi_rx_slave(struct spi_imx_data *spi_imx) +static void mx53_ecspi_rx_target(struct spi_imx_data *spi_imx)  {  	u32 val = be32_to_cpu(readl(spi_imx->base + MXC_CSPIRXDATA));  	if (spi_imx->rx_buf) { -		int n_bytes = spi_imx->slave_burst % sizeof(val); +		int n_bytes = spi_imx->target_burst % sizeof(val);  		if (!n_bytes)  			n_bytes = sizeof(val); @@ -419,13 +418,13 @@ static void mx53_ecspi_rx_slave(struct spi_imx_data *spi_imx)  		       ((u8 *)&val) + sizeof(val) - n_bytes, n_bytes);  		spi_imx->rx_buf += n_bytes; -		spi_imx->slave_burst -= n_bytes; +		spi_imx->target_burst -= n_bytes;  	}  	spi_imx->remainder -= sizeof(u32);  } -static void mx53_ecspi_tx_slave(struct spi_imx_data *spi_imx) +static void mx53_ecspi_tx_target(struct spi_imx_data *spi_imx)  {  	u32 val = 0;  	int n_bytes = spi_imx->count % sizeof(val); @@ -536,8 +535,8 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,  	u32 current_cfg = cfg;  	int channel = mx51_ecspi_channel(spi); -	/* set Master or Slave mode */ -	if (spi_imx->slave_mode) +	/* set Host or Target mode */ +	if (spi_imx->target_mode)  		ctrl &= ~MX51_ECSPI_CTRL_MODE_MASK;  	else  		ctrl |= MX51_ECSPI_CTRL_MODE_MASK; @@ -565,11 +564,11 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,  	writel(testreg, spi_imx->base + MX51_ECSPI_TESTREG);  	/* -	 * eCSPI burst completion by Chip Select signal in Slave mode +	 * eCSPI burst completion by Chip Select signal in Target mode  	 * is not functional for imx53 Soc, config SPI burst completed when  	 * BURST_LENGTH + 1 bits are received  	 */ -	if (spi_imx->slave_mode && is_imx53_ecspi(spi_imx)) +	if (spi_imx->target_mode && is_imx53_ecspi(spi_imx))  		cfg &= ~MX51_ECSPI_CONFIG_SBBCTRL(channel);  	else  		cfg |= MX51_ECSPI_CONFIG_SBBCTRL(channel); @@ -656,12 +655,16 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,  	/* Clear BL field and set the right value */  	ctrl &= ~MX51_ECSPI_CTRL_BL_MASK; -	if (spi_imx->slave_mode && is_imx53_ecspi(spi_imx)) -		ctrl |= (spi_imx->slave_burst * 8 - 1) -			<< MX51_ECSPI_CTRL_BL_OFFSET; -	else -		ctrl |= (spi_imx->bits_per_word - 1) +	if (spi_imx->target_mode && is_imx53_ecspi(spi_imx)) +		ctrl |= (spi_imx->target_burst * 8 - 1)  			<< MX51_ECSPI_CTRL_BL_OFFSET; +	else { +		if (spi_imx->count >= 512) +			ctrl |= 0xFFF << MX51_ECSPI_CTRL_BL_OFFSET; +		else +			ctrl |= (spi_imx->count*8 - 1) +				<< MX51_ECSPI_CTRL_BL_OFFSET; +	}  	/* set clock speed */  	ctrl &= ~(0xf << MX51_ECSPI_CTRL_POSTDIV_OFFSET | @@ -718,7 +721,7 @@ static void mx51_ecspi_reset(struct spi_imx_data *spi_imx)  #define MX31_INTREG_RREN	(1 << 3)  #define MX31_CSPICTRL_ENABLE	(1 << 0) -#define MX31_CSPICTRL_MASTER	(1 << 1) +#define MX31_CSPICTRL_HOST	(1 << 1)  #define MX31_CSPICTRL_XCH	(1 << 2)  #define MX31_CSPICTRL_SMC	(1 << 3)  #define MX31_CSPICTRL_POL	(1 << 4) @@ -775,7 +778,7 @@ static int mx31_prepare_message(struct spi_imx_data *spi_imx,  static int mx31_prepare_transfer(struct spi_imx_data *spi_imx,  				 struct spi_device *spi)  { -	unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_MASTER; +	unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_HOST;  	unsigned int clk;  	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, spi_imx->spi_bus_clk, &clk) << @@ -845,7 +848,7 @@ static void mx31_reset(struct spi_imx_data *spi_imx)  #define MX21_CSPICTRL_SSPOL	(1 << 8)  #define MX21_CSPICTRL_XCH	(1 << 9)  #define MX21_CSPICTRL_ENABLE	(1 << 10) -#define MX21_CSPICTRL_MASTER	(1 << 11) +#define MX21_CSPICTRL_HOST	(1 << 11)  #define MX21_CSPICTRL_DR_SHIFT	14  #define MX21_CSPICTRL_CS_SHIFT	19 @@ -879,7 +882,7 @@ static int mx21_prepare_message(struct spi_imx_data *spi_imx,  static int mx21_prepare_transfer(struct spi_imx_data *spi_imx,  				 struct spi_device *spi)  { -	unsigned int reg = MX21_CSPICTRL_ENABLE | MX21_CSPICTRL_MASTER; +	unsigned int reg = MX21_CSPICTRL_ENABLE | MX21_CSPICTRL_HOST;  	unsigned int max = is_imx27_cspi(spi_imx) ? 16 : 18;  	unsigned int clk; @@ -921,7 +924,7 @@ static void mx21_reset(struct spi_imx_data *spi_imx)  #define MX1_CSPICTRL_PHA	(1 << 5)  #define MX1_CSPICTRL_XCH	(1 << 8)  #define MX1_CSPICTRL_ENABLE	(1 << 9) -#define MX1_CSPICTRL_MASTER	(1 << 10) +#define MX1_CSPICTRL_HOST	(1 << 10)  #define MX1_CSPICTRL_DR_SHIFT	13  static void mx1_intctrl(struct spi_imx_data *spi_imx, int enable) @@ -954,7 +957,7 @@ static int mx1_prepare_message(struct spi_imx_data *spi_imx,  static int mx1_prepare_transfer(struct spi_imx_data *spi_imx,  				struct spi_device *spi)  { -	unsigned int reg = MX1_CSPICTRL_ENABLE | MX1_CSPICTRL_MASTER; +	unsigned int reg = MX1_CSPICTRL_ENABLE | MX1_CSPICTRL_HOST;  	unsigned int clk;  	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, spi_imx->spi_bus_clk, &clk) << @@ -993,7 +996,7 @@ static struct spi_imx_devtype_data imx1_cspi_devtype_data = {  	.fifo_size = 8,  	.has_dmamode = false,  	.dynamic_burst = false, -	.has_slavemode = false, +	.has_targetmode = false,  	.devtype = IMX1_CSPI,  }; @@ -1007,7 +1010,7 @@ static struct spi_imx_devtype_data imx21_cspi_devtype_data = {  	.fifo_size = 8,  	.has_dmamode = false,  	.dynamic_burst = false, -	.has_slavemode = false, +	.has_targetmode = false,  	.devtype = IMX21_CSPI,  }; @@ -1022,7 +1025,7 @@ static struct spi_imx_devtype_data imx27_cspi_devtype_data = {  	.fifo_size = 8,  	.has_dmamode = false,  	.dynamic_burst = false, -	.has_slavemode = false, +	.has_targetmode = false,  	.devtype = IMX27_CSPI,  }; @@ -1036,7 +1039,7 @@ static struct spi_imx_devtype_data imx31_cspi_devtype_data = {  	.fifo_size = 8,  	.has_dmamode = false,  	.dynamic_burst = false, -	.has_slavemode = false, +	.has_targetmode = false,  	.devtype = IMX31_CSPI,  }; @@ -1051,7 +1054,7 @@ static struct spi_imx_devtype_data imx35_cspi_devtype_data = {  	.fifo_size = 8,  	.has_dmamode = true,  	.dynamic_burst = false, -	.has_slavemode = false, +	.has_targetmode = false,  	.devtype = IMX35_CSPI,  }; @@ -1066,7 +1069,7 @@ static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {  	.fifo_size = 64,  	.has_dmamode = true,  	.dynamic_burst = true, -	.has_slavemode = true, +	.has_targetmode = true,  	.disable = mx51_ecspi_disable,  	.devtype = IMX51_ECSPI,  }; @@ -1080,7 +1083,7 @@ static struct spi_imx_devtype_data imx53_ecspi_devtype_data = {  	.reset = mx51_ecspi_reset,  	.fifo_size = 64,  	.has_dmamode = true, -	.has_slavemode = true, +	.has_targetmode = true,  	.disable = mx51_ecspi_disable,  	.devtype = IMX53_ECSPI,  }; @@ -1096,7 +1099,7 @@ static struct spi_imx_devtype_data imx6ul_ecspi_devtype_data = {  	.fifo_size = 64,  	.has_dmamode = true,  	.dynamic_burst = true, -	.has_slavemode = true, +	.has_targetmode = true,  	.tx_glitch_fixed = true,  	.disable = mx51_ecspi_disable,  	.devtype = IMX51_ECSPI, @@ -1161,7 +1164,7 @@ static void spi_imx_push(struct spi_imx_data *spi_imx)  		spi_imx->txfifo++;  	} -	if (!spi_imx->slave_mode) +	if (!spi_imx->target_mode)  		spi_imx->devtype_data->trigger(spi_imx);  } @@ -1258,13 +1261,14 @@ static int spi_imx_setupxfer(struct spi_device *spi,  		spi_imx->spi_bus_clk = t->speed_hz;  	spi_imx->bits_per_word = t->bits_per_word; +	spi_imx->count = t->len;  	/*  	 * Initialize the functions for transfer. To transfer non byte-aligned  	 * words, we have to use multiple word-size bursts, we can't use  	 * dynamic_burst in that case.  	 */ -	if (spi_imx->devtype_data->dynamic_burst && !spi_imx->slave_mode && +	if (spi_imx->devtype_data->dynamic_burst && !spi_imx->target_mode &&  	    !(spi->mode & SPI_CS_WORD) &&  	    (spi_imx->bits_per_word == 8 ||  	    spi_imx->bits_per_word == 16 || @@ -1296,10 +1300,10 @@ static int spi_imx_setupxfer(struct spi_device *spi,  	spi_imx->rx_only = ((t->tx_buf == NULL)  			|| (t->tx_buf == spi->controller->dummy_tx)); -	if (is_imx53_ecspi(spi_imx) && spi_imx->slave_mode) { -		spi_imx->rx = mx53_ecspi_rx_slave; -		spi_imx->tx = mx53_ecspi_tx_slave; -		spi_imx->slave_burst = t->len; +	if (is_imx53_ecspi(spi_imx) && spi_imx->target_mode) { +		spi_imx->rx = mx53_ecspi_rx_target; +		spi_imx->tx = mx53_ecspi_tx_target; +		spi_imx->target_burst = t->len;  	}  	spi_imx->devtype_data->prepare_transfer(spi_imx, spi); @@ -1564,8 +1568,8 @@ static int spi_imx_poll_transfer(struct spi_device *spi,  	return 0;  } -static int spi_imx_pio_transfer_slave(struct spi_device *spi, -				      struct spi_transfer *transfer) +static int spi_imx_pio_transfer_target(struct spi_device *spi, +				       struct spi_transfer *transfer)  {  	struct spi_imx_data *spi_imx = spi_controller_get_devdata(spi->controller);  	int ret = 0; @@ -1584,22 +1588,22 @@ static int spi_imx_pio_transfer_slave(struct spi_device *spi,  	spi_imx->remainder = 0;  	reinit_completion(&spi_imx->xfer_done); -	spi_imx->slave_aborted = false; +	spi_imx->target_aborted = false;  	spi_imx_push(spi_imx);  	spi_imx->devtype_data->intctrl(spi_imx, MXC_INT_TE | MXC_INT_RDR);  	if (wait_for_completion_interruptible(&spi_imx->xfer_done) || -	    spi_imx->slave_aborted) { +	    spi_imx->target_aborted) {  		dev_dbg(&spi->dev, "interrupted\n");  		ret = -EINTR;  	} -	/* ecspi has a HW issue when works in Slave mode, +	/* ecspi has a HW issue when works in Target mode,  	 * after 64 words writtern to TXFIFO, even TXFIFO becomes empty,  	 * ECSPI_TXDATA keeps shift out the last word data, -	 * so we have to disable ECSPI when in slave mode after the +	 * so we have to disable ECSPI when in target mode after the  	 * transfer completes  	 */  	if (spi_imx->devtype_data->disable) @@ -1622,8 +1626,8 @@ static int spi_imx_transfer_one(struct spi_controller *controller,  	while (spi_imx->devtype_data->rx_available(spi_imx))  		readl(spi_imx->base + MXC_CSPIRXDATA); -	if (spi_imx->slave_mode) -		return spi_imx_pio_transfer_slave(spi, transfer); +	if (spi_imx->target_mode) +		return spi_imx_pio_transfer_target(spi, transfer);  	/*  	 * If we decided in spi_imx_can_dma() that we want to do a DMA @@ -1689,11 +1693,11 @@ spi_imx_unprepare_message(struct spi_controller *controller, struct spi_message  	return 0;  } -static int spi_imx_slave_abort(struct spi_controller *controller) +static int spi_imx_target_abort(struct spi_controller *controller)  {  	struct spi_imx_data *spi_imx = spi_controller_get_devdata(controller); -	spi_imx->slave_aborted = true; +	spi_imx->target_aborted = true;  	complete(&spi_imx->xfer_done);  	return 0; @@ -1708,17 +1712,17 @@ static int spi_imx_probe(struct platform_device *pdev)  	int ret, irq, spi_drctl;  	const struct spi_imx_devtype_data *devtype_data =  			of_device_get_match_data(&pdev->dev); -	bool slave_mode; +	bool target_mode;  	u32 val; -	slave_mode = devtype_data->has_slavemode && -			of_property_read_bool(np, "spi-slave"); -	if (slave_mode) -		controller = spi_alloc_slave(&pdev->dev, -					     sizeof(struct spi_imx_data)); -	else -		controller = spi_alloc_master(&pdev->dev, +	target_mode = devtype_data->has_targetmode && +		      of_property_read_bool(np, "spi-slave"); +	if (target_mode) +		controller = spi_alloc_target(&pdev->dev,  					      sizeof(struct spi_imx_data)); +	else +		controller = spi_alloc_host(&pdev->dev, +					    sizeof(struct spi_imx_data));  	if (!controller)  		return -ENOMEM; @@ -1737,7 +1741,7 @@ static int spi_imx_probe(struct platform_device *pdev)  	spi_imx = spi_controller_get_devdata(controller);  	spi_imx->controller = controller;  	spi_imx->dev = &pdev->dev; -	spi_imx->slave_mode = slave_mode; +	spi_imx->target_mode = target_mode;  	spi_imx->devtype_data = devtype_data; @@ -1757,7 +1761,7 @@ static int spi_imx_probe(struct platform_device *pdev)  	controller->cleanup = spi_imx_cleanup;  	controller->prepare_message = spi_imx_prepare_message;  	controller->unprepare_message = spi_imx_unprepare_message; -	controller->slave_abort = spi_imx_slave_abort; +	controller->target_abort = spi_imx_target_abort;  	controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_NO_CS |  				SPI_MOSI_IDLE_LOW; @@ -1779,7 +1783,7 @@ static int spi_imx_probe(struct platform_device *pdev)  	if (is_imx51_ecspi(spi_imx) || is_imx53_ecspi(spi_imx)) {  		controller->max_native_cs = 4; -		controller->flags |= SPI_MASTER_GPIO_SS; +		controller->flags |= SPI_CONTROLLER_GPIO_SS;  	}  	spi_imx->spi_drctl = spi_drctl; diff --git a/drivers/spi/spi-ingenic.c b/drivers/spi/spi-ingenic.c index 7d4b515a160d..cc366936d72b 100644 --- a/drivers/spi/spi-ingenic.c +++ b/drivers/spi/spi-ingenic.c @@ -12,7 +12,7 @@  #include <linux/dma-mapping.h>  #include <linux/iopoll.h>  #include <linux/module.h> -#include <linux/of_device.h> +#include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/regmap.h>  #include <linux/spi/spi.h> @@ -392,7 +392,7 @@ static int spi_ingenic_probe(struct platform_device *pdev)  		return -EINVAL;  	} -	ctlr = devm_spi_alloc_master(dev, sizeof(*priv)); +	ctlr = devm_spi_alloc_host(dev, sizeof(*priv));  	if (!ctlr) {  		dev_err(dev, "Unable to allocate SPI controller.\n");  		return -ENOMEM; diff --git a/drivers/spi/spi-intel.c b/drivers/spi/spi-intel.c index bc6d22149e7e..98ec4dc22b81 100644 --- a/drivers/spi/spi-intel.c +++ b/drivers/spi/spi-intel.c @@ -143,7 +143,7 @@   * @base: Beginning of MMIO space   * @pregs: Start of protection registers   * @sregs: Start of software sequencer registers - * @master: Pointer to the SPI controller structure + * @host: Pointer to the SPI controller structure   * @nregions: Maximum number of regions   * @pr_num: Maximum number of protected range registers   * @chip0_size: Size of the first flash chip in bytes @@ -161,7 +161,7 @@ struct intel_spi {  	void __iomem *base;  	void __iomem *pregs;  	void __iomem *sregs; -	struct spi_controller *master; +	struct spi_controller *host;  	size_t nregions;  	size_t pr_num;  	size_t chip0_size; @@ -747,7 +747,7 @@ intel_spi_match_mem_op(struct intel_spi *ispi, const struct spi_mem_op *op)  static bool intel_spi_supports_mem_op(struct spi_mem *mem,  				      const struct spi_mem_op *op)  { -	struct intel_spi *ispi = spi_master_get_devdata(mem->spi->master); +	struct intel_spi *ispi = spi_controller_get_devdata(mem->spi->controller);  	const struct intel_spi_mem_op *iop;  	iop = intel_spi_match_mem_op(ispi, op); @@ -778,7 +778,7 @@ static bool intel_spi_supports_mem_op(struct spi_mem *mem,  static int intel_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct intel_spi *ispi = spi_master_get_devdata(mem->spi->master); +	struct intel_spi *ispi = spi_controller_get_devdata(mem->spi->controller);  	const struct intel_spi_mem_op *iop;  	iop = intel_spi_match_mem_op(ispi, op); @@ -790,7 +790,7 @@ static int intel_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *o  static const char *intel_spi_get_name(struct spi_mem *mem)  { -	const struct intel_spi *ispi = spi_master_get_devdata(mem->spi->master); +	const struct intel_spi *ispi = spi_controller_get_devdata(mem->spi->controller);  	/*  	 * Return name of the flash controller device to be compatible @@ -801,7 +801,7 @@ static const char *intel_spi_get_name(struct spi_mem *mem)  static int intel_spi_dirmap_create(struct spi_mem_dirmap_desc *desc)  { -	struct intel_spi *ispi = spi_master_get_devdata(desc->mem->spi->master); +	struct intel_spi *ispi = spi_controller_get_devdata(desc->mem->spi->controller);  	const struct intel_spi_mem_op *iop;  	iop = intel_spi_match_mem_op(ispi, &desc->info.op_tmpl); @@ -815,7 +815,7 @@ static int intel_spi_dirmap_create(struct spi_mem_dirmap_desc *desc)  static ssize_t intel_spi_dirmap_read(struct spi_mem_dirmap_desc *desc, u64 offs,  				     size_t len, void *buf)  { -	struct intel_spi *ispi = spi_master_get_devdata(desc->mem->spi->master); +	struct intel_spi *ispi = spi_controller_get_devdata(desc->mem->spi->controller);  	const struct intel_spi_mem_op *iop = desc->priv;  	struct spi_mem_op op = desc->info.op_tmpl;  	int ret; @@ -832,7 +832,7 @@ static ssize_t intel_spi_dirmap_read(struct spi_mem_dirmap_desc *desc, u64 offs,  static ssize_t intel_spi_dirmap_write(struct spi_mem_dirmap_desc *desc, u64 offs,  				      size_t len, const void *buf)  { -	struct intel_spi *ispi = spi_master_get_devdata(desc->mem->spi->master); +	struct intel_spi *ispi = spi_controller_get_devdata(desc->mem->spi->controller);  	const struct intel_spi_mem_op *iop = desc->priv;  	struct spi_mem_op op = desc->info.op_tmpl;  	int ret; @@ -1332,14 +1332,14 @@ static int intel_spi_read_desc(struct intel_spi *ispi)  	nc = (buf[1] & FLMAP0_NC_MASK) >> FLMAP0_NC_SHIFT;  	if (!nc) -		ispi->master->num_chipselect = 1; +		ispi->host->num_chipselect = 1;  	else if (nc == 1) -		ispi->master->num_chipselect = 2; +		ispi->host->num_chipselect = 2;  	else  		return -EINVAL;  	dev_dbg(ispi->dev, "%u flash components found\n", -		ispi->master->num_chipselect); +		ispi->host->num_chipselect);  	return 0;  } @@ -1365,7 +1365,7 @@ static int intel_spi_populate_chip(struct intel_spi *ispi)  	snprintf(chip.modalias, 8, "spi-nor");  	chip.platform_data = pdata; -	if (!spi_new_device(ispi->master, &chip)) +	if (!spi_new_device(ispi->host, &chip))  		return -ENODEV;  	ret = intel_spi_read_desc(ispi); @@ -1373,13 +1373,13 @@ static int intel_spi_populate_chip(struct intel_spi *ispi)  		return ret;  	/* Add the second chip if present */ -	if (ispi->master->num_chipselect < 2) +	if (ispi->host->num_chipselect < 2)  		return 0;  	chip.platform_data = NULL;  	chip.chip_select = 1; -	if (!spi_new_device(ispi->master, &chip)) +	if (!spi_new_device(ispi->host, &chip))  		return -ENODEV;  	return 0;  } @@ -1396,31 +1396,31 @@ static int intel_spi_populate_chip(struct intel_spi *ispi)  int intel_spi_probe(struct device *dev, struct resource *mem,  		    const struct intel_spi_boardinfo *info)  { -	struct spi_controller *master; +	struct spi_controller *host;  	struct intel_spi *ispi;  	int ret; -	master = devm_spi_alloc_master(dev, sizeof(*ispi)); -	if (!master) +	host = devm_spi_alloc_host(dev, sizeof(*ispi)); +	if (!host)  		return -ENOMEM; -	master->mem_ops = &intel_spi_mem_ops; +	host->mem_ops = &intel_spi_mem_ops; -	ispi = spi_master_get_devdata(master); +	ispi = spi_controller_get_devdata(host);  	ispi->base = devm_ioremap_resource(dev, mem);  	if (IS_ERR(ispi->base))  		return PTR_ERR(ispi->base);  	ispi->dev = dev; -	ispi->master = master; +	ispi->host = host;  	ispi->info = info;  	ret = intel_spi_init(ispi);  	if (ret)  		return ret; -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret)  		return ret; diff --git a/drivers/spi/spi-iproc-qspi.c b/drivers/spi/spi-iproc-qspi.c index 5980a0dbbccb..39ee2b43a516 100644 --- a/drivers/spi/spi-iproc-qspi.c +++ b/drivers/spi/spi-iproc-qspi.c @@ -94,7 +94,6 @@ static int bcm_iproc_probe(struct platform_device *pdev)  	struct device *dev = &pdev->dev;  	struct bcm_iproc_intc *priv;  	struct bcm_qspi_soc_intc *soc_intc; -	struct resource *res;  	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);  	if (!priv) @@ -104,14 +103,12 @@ static int bcm_iproc_probe(struct platform_device *pdev)  	spin_lock_init(&priv->soclock); -	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "intr_regs"); -	priv->int_reg = devm_ioremap_resource(dev, res); +	priv->int_reg = devm_platform_ioremap_resource_byname(pdev, "intr_regs");  	if (IS_ERR(priv->int_reg))  		return PTR_ERR(priv->int_reg); -	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, -					   "intr_status_reg"); -	priv->int_status_reg = devm_ioremap_resource(dev, res); +	priv->int_status_reg = devm_platform_ioremap_resource_byname(pdev, +								     "intr_status_reg");  	if (IS_ERR(priv->int_status_reg))  		return PTR_ERR(priv->int_status_reg); diff --git a/drivers/spi/spi-jcore.c b/drivers/spi/spi-jcore.c index c42a3358e8c9..e37ca22e04ba 100644 --- a/drivers/spi/spi-jcore.c +++ b/drivers/spi/spi-jcore.c @@ -33,7 +33,7 @@  #define JCORE_SPI_WAIT_RDY_MAX_LOOP	2000000  struct jcore_spi { -	struct spi_master *master; +	struct spi_controller *host;  	void __iomem *base;  	unsigned int cs_reg;  	unsigned int speed_reg; @@ -59,7 +59,7 @@ static void jcore_spi_program(struct jcore_spi *hw)  	void __iomem *ctrl_reg = hw->base + CTRL_REG;  	if (jcore_spi_wait(ctrl_reg)) -		dev_err(hw->master->dev.parent, +		dev_err(hw->host->dev.parent,  			"timeout waiting to program ctrl reg.\n");  	writel(hw->cs_reg | hw->speed_reg, ctrl_reg); @@ -67,10 +67,10 @@ static void jcore_spi_program(struct jcore_spi *hw)  static void jcore_spi_chipsel(struct spi_device *spi, bool value)  { -	struct jcore_spi *hw = spi_master_get_devdata(spi->master); +	struct jcore_spi *hw = spi_controller_get_devdata(spi->controller);  	u32 csbit = 1U << (2 * spi_get_chipselect(spi, 0)); -	dev_dbg(hw->master->dev.parent, "chipselect %d\n", spi_get_chipselect(spi, 0)); +	dev_dbg(hw->host->dev.parent, "chipselect %d\n", spi_get_chipselect(spi, 0));  	if (value)  		hw->cs_reg |= csbit; @@ -90,14 +90,14 @@ static void jcore_spi_baudrate(struct jcore_spi *hw, int speed)  	else  		hw->speed_reg = ((hw->clock_freq / 2 / speed) - 1) << 27;  	jcore_spi_program(hw); -	dev_dbg(hw->master->dev.parent, "speed=%d reg=0x%x\n", +	dev_dbg(hw->host->dev.parent, "speed=%d reg=0x%x\n",  		speed, hw->speed_reg);  } -static int jcore_spi_txrx(struct spi_master *master, struct spi_device *spi, +static int jcore_spi_txrx(struct spi_controller *host, struct spi_device *spi,  			  struct spi_transfer *t)  { -	struct jcore_spi *hw = spi_master_get_devdata(master); +	struct jcore_spi *hw = spi_controller_get_devdata(host);  	void __iomem *ctrl_reg = hw->base + CTRL_REG;  	void __iomem *data_reg = hw->base + DATA_REG; @@ -130,7 +130,7 @@ static int jcore_spi_txrx(struct spi_master *master, struct spi_device *spi,  			*rx++ = readl(data_reg);  	} -	spi_finalize_current_transfer(master); +	spi_finalize_current_transfer(host);  	if (count < len)  		return -EREMOTEIO; @@ -142,26 +142,26 @@ static int jcore_spi_probe(struct platform_device *pdev)  {  	struct device_node *node = pdev->dev.of_node;  	struct jcore_spi *hw; -	struct spi_master *master; +	struct spi_controller *host;  	struct resource *res;  	u32 clock_freq;  	struct clk *clk;  	int err = -ENODEV; -	master = spi_alloc_master(&pdev->dev, sizeof(struct jcore_spi)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(struct jcore_spi)); +	if (!host)  		return err; -	/* Setup the master state. */ -	master->num_chipselect = 3; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; -	master->transfer_one = jcore_spi_txrx; -	master->set_cs = jcore_spi_chipsel; -	master->dev.of_node = node; -	master->bus_num = pdev->id; +	/* Setup the host state. */ +	host->num_chipselect = 3; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; +	host->transfer_one = jcore_spi_txrx; +	host->set_cs = jcore_spi_chipsel; +	host->dev.of_node = node; +	host->bus_num = pdev->id; -	hw = spi_master_get_devdata(master); -	hw->master = master; +	hw = spi_controller_get_devdata(host); +	hw->host = host;  	platform_set_drvdata(pdev, hw);  	/* Find and map our resources */ @@ -200,7 +200,7 @@ static int jcore_spi_probe(struct platform_device *pdev)  	jcore_spi_baudrate(hw, 400000);  	/* Register our spi controller */ -	err = devm_spi_register_master(&pdev->dev, master); +	err = devm_spi_register_controller(&pdev->dev, host);  	if (err)  		goto exit; @@ -209,7 +209,7 @@ static int jcore_spi_probe(struct platform_device *pdev)  exit_busy:  	err = -EBUSY;  exit: -	spi_master_put(master); +	spi_controller_put(host);  	return err;  } diff --git a/drivers/spi/spi-lantiq-ssc.c b/drivers/spi/spi-lantiq-ssc.c index 8d6ecc5d6f70..938e9e577e4f 100644 --- a/drivers/spi/spi-lantiq-ssc.c +++ b/drivers/spi/spi-lantiq-ssc.c @@ -6,7 +6,8 @@  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_device.h> +#include <linux/of.h> +#include <linux/platform_device.h>  #include <linux/clk.h>  #include <linux/io.h>  #include <linux/delay.h> @@ -91,7 +92,7 @@  #define LTQ_SPI_STAT_RE		BIT(9)	/* Receive error flag */  #define LTQ_SPI_STAT_TE		BIT(8)	/* Transmit error flag */  #define LTQ_SPI_STAT_ME		BIT(7)	/* Mode error flag */ -#define LTQ_SPI_STAT_MS		BIT(1)	/* Master/slave select bit */ +#define LTQ_SPI_STAT_MS		BIT(1)	/* Host/target select bit */  #define LTQ_SPI_STAT_EN		BIT(0)	/* Enable bit */  #define LTQ_SPI_STAT_ERRORS	(LTQ_SPI_STAT_ME | LTQ_SPI_STAT_TE | \  				 LTQ_SPI_STAT_RE | LTQ_SPI_STAT_AE | \ @@ -109,8 +110,8 @@  #define LTQ_SPI_WHBSTATE_CLRME	BIT(6)	/* Clear mode error flag */  #define LTQ_SPI_WHBSTATE_SETRUE	BIT(5)	/* Set receive underflow error flag */  #define LTQ_SPI_WHBSTATE_CLRRUE	BIT(4)	/* Clear receive underflow error flag */ -#define LTQ_SPI_WHBSTATE_SETMS	BIT(3)	/* Set master select bit */ -#define LTQ_SPI_WHBSTATE_CLRMS	BIT(2)	/* Clear master select bit */ +#define LTQ_SPI_WHBSTATE_SETMS	BIT(3)	/* Set host select bit */ +#define LTQ_SPI_WHBSTATE_CLRMS	BIT(2)	/* Clear host select bit */  #define LTQ_SPI_WHBSTATE_SETEN	BIT(1)	/* Set enable bit (operational mode) */  #define LTQ_SPI_WHBSTATE_CLREN	BIT(0)	/* Clear enable bit (config mode */  #define LTQ_SPI_WHBSTATE_CLR_ERRORS	(LTQ_SPI_WHBSTATE_CLRRUE | \ @@ -162,7 +163,7 @@ struct lantiq_ssc_hwcfg {  };  struct lantiq_ssc_spi { -	struct spi_master		*master; +	struct spi_controller		*host;  	struct device			*dev;  	void __iomem			*regbase;  	struct clk			*spi_clk; @@ -366,7 +367,7 @@ static void lantiq_ssc_hw_init(const struct lantiq_ssc_spi *spi)  	hw_setup_bits_per_word(spi, spi->bits_per_word);  	hw_setup_clock_mode(spi, SPI_MODE_0); -	/* Enable master mode and clear error flags */ +	/* Enable host mode and clear error flags */  	lantiq_ssc_writel(spi, LTQ_SPI_WHBSTATE_SETMS |  			       LTQ_SPI_WHBSTATE_CLR_ERRORS,  			       LTQ_SPI_WHBSTATE); @@ -386,8 +387,8 @@ static void lantiq_ssc_hw_init(const struct lantiq_ssc_spi *spi)  static int lantiq_ssc_setup(struct spi_device *spidev)  { -	struct spi_master *master = spidev->master; -	struct lantiq_ssc_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = spidev->controller; +	struct lantiq_ssc_spi *spi = spi_controller_get_devdata(host);  	unsigned int cs = spi_get_chipselect(spidev, 0);  	u32 gpocon; @@ -415,10 +416,10 @@ static int lantiq_ssc_setup(struct spi_device *spidev)  	return 0;  } -static int lantiq_ssc_prepare_message(struct spi_master *master, +static int lantiq_ssc_prepare_message(struct spi_controller *host,  				      struct spi_message *message)  { -	struct lantiq_ssc_spi *spi = spi_master_get_devdata(master); +	struct lantiq_ssc_spi *spi = spi_controller_get_devdata(host);  	hw_enter_config_mode(spi);  	hw_setup_clock_mode(spi, message->spi->mode); @@ -460,10 +461,10 @@ static void hw_setup_transfer(struct lantiq_ssc_spi *spi,  	lantiq_ssc_writel(spi, con, LTQ_SPI_CON);  } -static int lantiq_ssc_unprepare_message(struct spi_master *master, +static int lantiq_ssc_unprepare_message(struct spi_controller *host,  					struct spi_message *message)  { -	struct lantiq_ssc_spi *spi = spi_master_get_devdata(master); +	struct lantiq_ssc_spi *spi = spi_controller_get_devdata(host);  	flush_workqueue(spi->wq); @@ -692,8 +693,8 @@ static irqreturn_t lantiq_ssc_err_interrupt(int irq, void *data)  	lantiq_ssc_maskl(spi, 0, LTQ_SPI_WHBSTATE_CLR_ERRORS, LTQ_SPI_WHBSTATE);  	/* set bad status so it can be retried */ -	if (spi->master->cur_msg) -		spi->master->cur_msg->status = -EIO; +	if (spi->host->cur_msg) +		spi->host->cur_msg->status = -EIO;  	queue_work(spi->wq, &spi->work);  	spin_unlock(&spi->lock); @@ -771,22 +772,22 @@ static void lantiq_ssc_bussy_work(struct work_struct *work)  		u32 stat = lantiq_ssc_readl(spi, LTQ_SPI_STAT);  		if (!(stat & LTQ_SPI_STAT_BSY)) { -			spi_finalize_current_transfer(spi->master); +			spi_finalize_current_transfer(spi->host);  			return;  		}  		cond_resched();  	} while (!time_after_eq(jiffies, end)); -	if (spi->master->cur_msg) -		spi->master->cur_msg->status = -EIO; -	spi_finalize_current_transfer(spi->master); +	if (spi->host->cur_msg) +		spi->host->cur_msg->status = -EIO; +	spi_finalize_current_transfer(spi->host);  } -static void lantiq_ssc_handle_err(struct spi_master *master, +static void lantiq_ssc_handle_err(struct spi_controller *host,  				  struct spi_message *message)  { -	struct lantiq_ssc_spi *spi = spi_master_get_devdata(master); +	struct lantiq_ssc_spi *spi = spi_controller_get_devdata(host);  	/* flush FIFOs on timeout */  	rx_fifo_flush(spi); @@ -795,7 +796,7 @@ static void lantiq_ssc_handle_err(struct spi_master *master,  static void lantiq_ssc_set_cs(struct spi_device *spidev, bool enable)  { -	struct lantiq_ssc_spi *spi = spi_master_get_devdata(spidev->master); +	struct lantiq_ssc_spi *spi = spi_controller_get_devdata(spidev->controller);  	unsigned int cs = spi_get_chipselect(spidev, 0);  	u32 fgpo; @@ -807,11 +808,11 @@ static void lantiq_ssc_set_cs(struct spi_device *spidev, bool enable)  	lantiq_ssc_writel(spi, fgpo, LTQ_SPI_FPGO);  } -static int lantiq_ssc_transfer_one(struct spi_master *master, +static int lantiq_ssc_transfer_one(struct spi_controller *host,  				   struct spi_device *spidev,  				   struct spi_transfer *t)  { -	struct lantiq_ssc_spi *spi = spi_master_get_devdata(master); +	struct lantiq_ssc_spi *spi = spi_controller_get_devdata(host);  	hw_setup_transfer(spi, spidev, t); @@ -903,7 +904,7 @@ MODULE_DEVICE_TABLE(of, lantiq_ssc_match);  static int lantiq_ssc_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; -	struct spi_master *master; +	struct spi_controller *host;  	struct lantiq_ssc_spi *spi;  	const struct lantiq_ssc_hwcfg *hwcfg;  	u32 id, supports_dma, revision; @@ -912,33 +913,33 @@ static int lantiq_ssc_probe(struct platform_device *pdev)  	hwcfg = of_device_get_match_data(dev); -	master = spi_alloc_master(dev, sizeof(struct lantiq_ssc_spi)); -	if (!master) +	host = spi_alloc_host(dev, sizeof(struct lantiq_ssc_spi)); +	if (!host)  		return -ENOMEM; -	spi = spi_master_get_devdata(master); -	spi->master = master; +	spi = spi_controller_get_devdata(host); +	spi->host = host;  	spi->dev = dev;  	spi->hwcfg = hwcfg;  	platform_set_drvdata(pdev, spi);  	spi->regbase = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(spi->regbase)) {  		err = PTR_ERR(spi->regbase); -		goto err_master_put; +		goto err_host_put;  	}  	err = hwcfg->cfg_irq(pdev, spi);  	if (err) -		goto err_master_put; +		goto err_host_put;  	spi->spi_clk = devm_clk_get(dev, "gate");  	if (IS_ERR(spi->spi_clk)) {  		err = PTR_ERR(spi->spi_clk); -		goto err_master_put; +		goto err_host_put;  	}  	err = clk_prepare_enable(spi->spi_clk);  	if (err) -		goto err_master_put; +		goto err_host_put;  	/*  	 * Use the old clk_get_fpi() function on Lantiq platform, till it @@ -964,19 +965,19 @@ static int lantiq_ssc_probe(struct platform_device *pdev)  	spi->bits_per_word = 8;  	spi->speed_hz = 0; -	master->dev.of_node = pdev->dev.of_node; -	master->num_chipselect = num_cs; -	master->use_gpio_descriptors = true; -	master->setup = lantiq_ssc_setup; -	master->set_cs = lantiq_ssc_set_cs; -	master->handle_err = lantiq_ssc_handle_err; -	master->prepare_message = lantiq_ssc_prepare_message; -	master->unprepare_message = lantiq_ssc_unprepare_message; -	master->transfer_one = lantiq_ssc_transfer_one; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST | SPI_CS_HIGH | -				SPI_LOOP; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 8) | -				     SPI_BPW_MASK(16) | SPI_BPW_MASK(32); +	host->dev.of_node = pdev->dev.of_node; +	host->num_chipselect = num_cs; +	host->use_gpio_descriptors = true; +	host->setup = lantiq_ssc_setup; +	host->set_cs = lantiq_ssc_set_cs; +	host->handle_err = lantiq_ssc_handle_err; +	host->prepare_message = lantiq_ssc_prepare_message; +	host->unprepare_message = lantiq_ssc_unprepare_message; +	host->transfer_one = lantiq_ssc_transfer_one; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST | SPI_CS_HIGH | +			  SPI_LOOP; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(2, 8) | +				   SPI_BPW_MASK(16) | SPI_BPW_MASK(32);  	spi->wq = alloc_ordered_workqueue(dev_name(dev), WQ_MEM_RECLAIM);  	if (!spi->wq) { @@ -997,9 +998,9 @@ static int lantiq_ssc_probe(struct platform_device *pdev)  		"Lantiq SSC SPI controller (Rev %i, TXFS %u, RXFS %u, DMA %u)\n",  		revision, spi->tx_fifo_size, spi->rx_fifo_size, supports_dma); -	err = devm_spi_register_master(dev, master); +	err = devm_spi_register_controller(dev, host);  	if (err) { -		dev_err(dev, "failed to register spi_master\n"); +		dev_err(dev, "failed to register spi host\n");  		goto err_wq_destroy;  	} @@ -1011,8 +1012,8 @@ err_clk_put:  	clk_put(spi->fpi_clk);  err_clk_disable:  	clk_disable_unprepare(spi->spi_clk); -err_master_put: -	spi_master_put(master); +err_host_put: +	spi_controller_put(host);  	return err;  } diff --git a/drivers/spi/spi-loongson-core.c b/drivers/spi/spi-loongson-core.c new file mode 100644 index 000000000000..f97800b6fd65 --- /dev/null +++ b/drivers/spi/spi-loongson-core.c @@ -0,0 +1,279 @@ +// SPDX-License-Identifier: GPL-2.0+ +// Loongson SPI Support +// Copyright (C) 2023 Loongson Technology Corporation Limited + +#include <linux/clk.h> +#include <linux/delay.h> +#include <linux/err.h> +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/iopoll.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/spi/spi.h> + +#include "spi-loongson.h" + +static inline void loongson_spi_write_reg(struct loongson_spi *spi, unsigned char reg, +					  unsigned char data) +{ +	writeb(data, spi->base + reg); +} + +static inline char loongson_spi_read_reg(struct loongson_spi *spi, unsigned char reg) +{ +	return readb(spi->base + reg); +} + +static void loongson_spi_set_cs(struct spi_device *spi, bool en) +{ +	int cs; +	unsigned char mask = (BIT(4) | BIT(0)) << spi_get_chipselect(spi, 0); +	unsigned char val = en ? mask :  (BIT(0) << spi_get_chipselect(spi, 0)); +	struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); + +	cs = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SFCS_REG) & ~mask; +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SFCS_REG, val | cs); +} + +static void loongson_spi_set_clk(struct loongson_spi *loongson_spi, unsigned int hz) +{ +	unsigned char val; +	unsigned int div, div_tmp; +	static const char rdiv[12] = {0, 1, 4, 2, 3, 5, 6, 7, 8, 9, 10, 11}; + +	div = clamp_val(DIV_ROUND_UP_ULL(loongson_spi->clk_rate, hz), 2, 4096); +	div_tmp = rdiv[fls(div - 1)]; +	loongson_spi->spcr = (div_tmp & GENMASK(1, 0)) >> 0; +	loongson_spi->sper = (div_tmp & GENMASK(3, 2)) >> 2; +	val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG); +	val &= ~GENMASK(1, 0); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, val | +			       loongson_spi->spcr); +	val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPER_REG); +	val &= ~GENMASK(1, 0); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPER_REG, val | +			       loongson_spi->sper); +	loongson_spi->hz = hz; +} + +static void loongson_spi_set_mode(struct loongson_spi *loongson_spi, +				  struct spi_device *spi) +{ +	unsigned char val; + +	val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG); +	val &= ~(LOONGSON_SPI_SPCR_CPOL | LOONGSON_SPI_SPCR_CPHA); +	if (spi->mode & SPI_CPOL) +		val |= LOONGSON_SPI_SPCR_CPOL; +	if (spi->mode & SPI_CPHA) +		val |= LOONGSON_SPI_SPCR_CPHA; + +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, val); +	loongson_spi->mode |= spi->mode; +} + +static int loongson_spi_update_state(struct loongson_spi *loongson_spi, +				struct spi_device *spi, struct spi_transfer *t) +{ +	if (t && loongson_spi->hz != t->speed_hz) +		loongson_spi_set_clk(loongson_spi, t->speed_hz); + +	if ((spi->mode ^ loongson_spi->mode) & SPI_MODE_X_MASK) +		loongson_spi_set_mode(loongson_spi, spi); + +	return 0; +} + +static int loongson_spi_setup(struct spi_device *spi) +{ +	struct loongson_spi *loongson_spi; + +	loongson_spi = spi_controller_get_devdata(spi->controller); +	if (spi->bits_per_word % 8) +		return -EINVAL; + +	if (spi_get_chipselect(spi, 0) >= spi->controller->num_chipselect) +		return -EINVAL; + +	loongson_spi->hz = 0; +	loongson_spi_set_cs(spi, true); + +	return 0; +} + +static int loongson_spi_write_read_8bit(struct spi_device *spi, const u8 **tx_buf, +					u8 **rx_buf, unsigned int num) +{ +	int ret; +	struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); + +	if (tx_buf && *tx_buf) +		loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_FIFO_REG, *((*tx_buf)++)); +	else +		loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_FIFO_REG, 0); + +	ret = readb_poll_timeout(loongson_spi->base + LOONGSON_SPI_SPSR_REG, +				 loongson_spi->spsr, (loongson_spi->spsr & +				 LOONGSON_SPI_SPSR_RFEMPTY) != LOONGSON_SPI_SPSR_RFEMPTY, +				 1, USEC_PER_MSEC); + +	if (rx_buf && *rx_buf) +		*(*rx_buf)++ = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_FIFO_REG); +	else +		loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_FIFO_REG); + +	return ret; +} + +static int loongson_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer) +{ +	int ret; +	unsigned int count; +	const u8 *tx = xfer->tx_buf; +	u8 *rx = xfer->rx_buf; + +	count = xfer->len; +	do { +		ret = loongson_spi_write_read_8bit(spi, &tx, &rx, count); +		if (ret) +			break; +	} while (--count); + +	return ret; +} + +static int loongson_spi_prepare_message(struct spi_controller *ctlr, struct spi_message *m) +{ +	struct loongson_spi *loongson_spi = spi_controller_get_devdata(ctlr); + +	loongson_spi->para = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_PARA_REG); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para & +			       ~LOONGSON_SPI_PARA_MEM_EN); + +	return 0; +} + +static int loongson_spi_transfer_one(struct spi_controller *ctrl, struct spi_device *spi, +				     struct spi_transfer *xfer) +{ +	struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); + +	loongson_spi_update_state(loongson_spi, spi, xfer); +	if (xfer->len) +		return loongson_spi_write_read(spi, xfer); + +	return 0; +} + +static int loongson_spi_unprepare_message(struct spi_controller *ctrl, struct spi_message *m) +{ +	struct loongson_spi *loongson_spi = spi_controller_get_devdata(ctrl); + +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para); + +	return 0; +} + +static void loongson_spi_reginit(struct loongson_spi *loongson_spi_dev) +{ +	unsigned char val; + +	val = loongson_spi_read_reg(loongson_spi_dev, LOONGSON_SPI_SPCR_REG); +	val &= ~LOONGSON_SPI_SPCR_SPE; +	loongson_spi_write_reg(loongson_spi_dev, LOONGSON_SPI_SPCR_REG, val); + +	loongson_spi_write_reg(loongson_spi_dev, LOONGSON_SPI_SPSR_REG, +			       (LOONGSON_SPI_SPSR_SPIF | LOONGSON_SPI_SPSR_WCOL)); + +	val = loongson_spi_read_reg(loongson_spi_dev, LOONGSON_SPI_SPCR_REG); +	val |= LOONGSON_SPI_SPCR_SPE; +	loongson_spi_write_reg(loongson_spi_dev, LOONGSON_SPI_SPCR_REG, val); +} + +int loongson_spi_init_controller(struct device *dev, void __iomem *regs) +{ +	struct spi_controller *controller; +	struct loongson_spi *spi; +	struct clk *clk; + +	controller = devm_spi_alloc_host(dev, sizeof(struct loongson_spi)); +	if (controller == NULL) +		return -ENOMEM; + +	controller->mode_bits = SPI_MODE_X_MASK | SPI_CS_HIGH; +	controller->setup = loongson_spi_setup; +	controller->prepare_message = loongson_spi_prepare_message; +	controller->transfer_one = loongson_spi_transfer_one; +	controller->unprepare_message = loongson_spi_unprepare_message; +	controller->set_cs = loongson_spi_set_cs; +	controller->num_chipselect = 4; +	device_set_node(&controller->dev, dev_fwnode(dev)); +	dev_set_drvdata(dev, controller); + +	spi = spi_controller_get_devdata(controller); +	spi->base = regs; +	spi->controller = controller; + +	clk = devm_clk_get_optional(dev, NULL); +	if (IS_ERR(clk)) +		return dev_err_probe(dev, PTR_ERR(clk), "unable to get clock\n"); + +	spi->clk_rate = clk_get_rate(clk); +	loongson_spi_reginit(spi); + +	spi->mode = 0; + +	return devm_spi_register_controller(dev, controller); +} +EXPORT_SYMBOL_NS_GPL(loongson_spi_init_controller, SPI_LOONGSON_CORE); + +static int __maybe_unused loongson_spi_suspend(struct device *dev) +{ +	struct loongson_spi *loongson_spi; +	struct spi_controller *controller; + +	controller = dev_get_drvdata(dev); +	spi_controller_suspend(controller); + +	loongson_spi = spi_controller_get_devdata(controller); + +	loongson_spi->spcr = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG); +	loongson_spi->sper = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPER_REG); +	loongson_spi->spsr = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPSR_REG); +	loongson_spi->para = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_PARA_REG); +	loongson_spi->sfcs = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SFCS_REG); +	loongson_spi->timi = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_TIMI_REG); + +	return 0; +} + +static int __maybe_unused loongson_spi_resume(struct device *dev) +{ +	struct loongson_spi *loongson_spi; +	struct spi_controller *controller; + +	controller = dev_get_drvdata(dev); +	loongson_spi = spi_controller_get_devdata(controller); + +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, loongson_spi->spcr); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPER_REG, loongson_spi->sper); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPSR_REG, loongson_spi->spsr); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SFCS_REG, loongson_spi->sfcs); +	loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_TIMI_REG, loongson_spi->timi); + +	spi_controller_resume(controller); + +	return 0; +} + +const struct dev_pm_ops loongson_spi_dev_pm_ops = { +	.suspend = loongson_spi_suspend, +	.resume = loongson_spi_resume, +}; +EXPORT_SYMBOL_NS_GPL(loongson_spi_dev_pm_ops, SPI_LOONGSON_CORE); + +MODULE_DESCRIPTION("Loongson SPI core driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/spi/spi-loongson-pci.c b/drivers/spi/spi-loongson-pci.c new file mode 100644 index 000000000000..134cda0c13a5 --- /dev/null +++ b/drivers/spi/spi-loongson-pci.c @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0+ +// PCI interface driver for Loongson SPI Support +// Copyright (C) 2023 Loongson Technology Corporation Limited + +#include <linux/mod_devicetable.h> +#include <linux/pci.h> + +#include "spi-loongson.h" + +static int loongson_spi_pci_register(struct pci_dev *pdev, +			const struct pci_device_id *ent) +{ +	int ret; +	void __iomem *reg_base; +	struct device *dev = &pdev->dev; +	int pci_bar = 0; + +	ret = pcim_enable_device(pdev); +	if (ret < 0) +		return dev_err_probe(dev, ret, "cannot enable pci device\n"); + +	ret = pcim_iomap_regions(pdev, BIT(pci_bar), pci_name(pdev)); +	if (ret) +		return dev_err_probe(dev, ret, "failed to request and remap memory\n"); + +	reg_base = pcim_iomap_table(pdev)[pci_bar]; + +	ret = loongson_spi_init_controller(dev, reg_base); +	if (ret) +		return dev_err_probe(dev, ret, "failed to initialize controller\n"); + +	return 0; +} + +static struct pci_device_id loongson_spi_devices[] = { +	{ PCI_DEVICE(PCI_VENDOR_ID_LOONGSON, 0x7a0b) }, +	{ PCI_DEVICE(PCI_VENDOR_ID_LOONGSON, 0x7a1b) }, +	{ } +}; +MODULE_DEVICE_TABLE(pci, loongson_spi_devices); + +static struct pci_driver loongson_spi_pci_driver = { +	.name       = "loongson-spi-pci", +	.id_table   = loongson_spi_devices, +	.probe      = loongson_spi_pci_register, +	.driver	= { +		.bus = &pci_bus_type, +		.pm = &loongson_spi_dev_pm_ops, +	}, +}; +module_pci_driver(loongson_spi_pci_driver); + +MODULE_DESCRIPTION("Loongson spi pci driver"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS(SPI_LOONGSON_CORE); diff --git a/drivers/spi/spi-loongson-plat.c b/drivers/spi/spi-loongson-plat.c new file mode 100644 index 000000000000..c066e5f5891e --- /dev/null +++ b/drivers/spi/spi-loongson-plat.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0+ +// Platform driver for Loongson SPI Support +// Copyright (C) 2023 Loongson Technology Corporation Limited + +#include <linux/err.h> +#include <linux/mod_devicetable.h> +#include <linux/platform_device.h> + +#include "spi-loongson.h" + +static int loongson_spi_platform_probe(struct platform_device *pdev) +{ +	int ret; +	void __iomem *reg_base; +	struct device *dev = &pdev->dev; + +	reg_base = devm_platform_ioremap_resource(pdev, 0); +	if (IS_ERR(reg_base)) +		return PTR_ERR(reg_base); + +	ret = loongson_spi_init_controller(dev, reg_base); +	if (ret) +		return dev_err_probe(dev, ret, "failed to initialize controller\n"); + +	return 0; +} + +static const struct of_device_id loongson_spi_id_table[] = { +	{ .compatible = "loongson,ls2k1000-spi" }, +	{ } +}; +MODULE_DEVICE_TABLE(of, loongson_spi_id_table); + +static struct platform_driver loongson_spi_plat_driver = { +	.probe = loongson_spi_platform_probe, +	.driver	= { +		.name	= "loongson-spi", +		.bus = &platform_bus_type, +		.pm = &loongson_spi_dev_pm_ops, +		.of_match_table = loongson_spi_id_table, +	}, +}; +module_platform_driver(loongson_spi_plat_driver); + +MODULE_DESCRIPTION("Loongson spi platform driver"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS(SPI_LOONGSON_CORE); diff --git a/drivers/spi/spi-loongson.h b/drivers/spi/spi-loongson.h new file mode 100644 index 000000000000..35f95b161842 --- /dev/null +++ b/drivers/spi/spi-loongson.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* Header File for Loongson SPI Driver. */ +/* Copyright (C) 2023 Loongson Technology Corporation Limited */ + +#ifndef __LINUX_SPI_LOONGSON_H +#define __LINUX_SPI_LOONGSON_H + +#include <linux/bits.h> +#include <linux/pm.h> +#include <linux/types.h> + +#define	LOONGSON_SPI_SPCR_REG	0x00 +#define	LOONGSON_SPI_SPSR_REG	0x01 +#define	LOONGSON_SPI_FIFO_REG	0x02 +#define	LOONGSON_SPI_SPER_REG	0x03 +#define	LOONGSON_SPI_PARA_REG	0x04 +#define	LOONGSON_SPI_SFCS_REG	0x05 +#define	LOONGSON_SPI_TIMI_REG	0x06 + +/* Bits definition for Loongson SPI register */ +#define	LOONGSON_SPI_PARA_MEM_EN	BIT(0) +#define	LOONGSON_SPI_SPCR_CPHA	BIT(2) +#define	LOONGSON_SPI_SPCR_CPOL	BIT(3) +#define	LOONGSON_SPI_SPCR_SPE	BIT(6) +#define	LOONGSON_SPI_SPSR_RFEMPTY	BIT(0) +#define	LOONGSON_SPI_SPSR_WCOL	BIT(6) +#define	LOONGSON_SPI_SPSR_SPIF	BIT(7) + +struct device; +struct spi_controller; + +struct loongson_spi { +	struct	spi_controller	*controller; +	void __iomem		*base; +	int			cs_active; +	unsigned int		hz; +	unsigned char		spcr; +	unsigned char		sper; +	unsigned char		spsr; +	unsigned char		para; +	unsigned char		sfcs; +	unsigned char		timi; +	unsigned int		mode; +	u64			clk_rate; +}; + +int loongson_spi_init_controller(struct device *dev, void __iomem *reg); +extern const struct dev_pm_ops loongson_spi_dev_pm_ops; +#endif /* __LINUX_SPI_LOONGSON_H */ diff --git a/drivers/spi/spi-loopback-test.c b/drivers/spi/spi-loopback-test.c index 675a73cf1579..bbf2015d8e5c 100644 --- a/drivers/spi/spi-loopback-test.c +++ b/drivers/spi/spi-loopback-test.c @@ -14,8 +14,8 @@  #include <linux/ktime.h>  #include <linux/list.h>  #include <linux/list_sort.h> +#include <linux/mod_devicetable.h>  #include <linux/module.h> -#include <linux/of_device.h>  #include <linux/printk.h>  #include <linux/vmalloc.h>  #include <linux/spi/spi.h> diff --git a/drivers/spi/spi-lp8841-rtc.c b/drivers/spi/spi-lp8841-rtc.c index 2d436541d6c2..b357461f1b8b 100644 --- a/drivers/spi/spi-lp8841-rtc.c +++ b/drivers/spi/spi-lp8841-rtc.c @@ -15,7 +15,6 @@  #include <linux/module.h>  #include <linux/platform_device.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/spi/spi.h>  #define DRIVER_NAME	"spi_lp8841_rtc" @@ -75,14 +74,14 @@ bitbang_txrx_be_cpha0_lsb(struct spi_lp8841_rtc *data,  	for (; likely(bits); bits--) {  		/* setup LSB (to slave) on leading edge */ -		if ((flags & SPI_MASTER_NO_TX) == 0) +		if ((flags & SPI_CONTROLLER_NO_TX) == 0)  			setmosi(data, (word & 1));  		usleep_range(usecs, usecs + 1);	/* T(setup) */  		/* sample LSB (from slave) on trailing edge */  		word >>= 1; -		if ((flags & SPI_MASTER_NO_RX) == 0) +		if ((flags & SPI_CONTROLLER_NO_RX) == 0)  			word |= (getmiso(data) << 31);  		setsck(data, !cpol); @@ -113,7 +112,7 @@ spi_lp8841_rtc_transfer_one(struct spi_master *master,  		while (likely(count > 0)) {  			word = *tx++;  			bitbang_txrx_be_cpha0_lsb(data, 1, 0, -					SPI_MASTER_NO_RX, word, 8); +					SPI_CONTROLLER_NO_RX, word, 8);  			count--;  		}  	} else if (rx) { @@ -121,7 +120,7 @@ spi_lp8841_rtc_transfer_one(struct spi_master *master,  		writeb(data->state, data->iomem);  		while (likely(count > 0)) {  			word = bitbang_txrx_be_cpha0_lsb(data, 1, 0, -					SPI_MASTER_NO_TX, word, 8); +					SPI_CONTROLLER_NO_TX, word, 8);  			*rx++ = word;  			count--;  		} @@ -191,7 +190,7 @@ spi_lp8841_rtc_probe(struct platform_device *pdev)  		return -ENOMEM;  	platform_set_drvdata(pdev, master); -	master->flags = SPI_MASTER_HALF_DUPLEX; +	master->flags = SPI_CONTROLLER_HALF_DUPLEX;  	master->mode_bits = SPI_CS_HIGH | SPI_3WIRE | SPI_LSB_FIRST;  	master->bus_num = pdev->id; diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c index 141562c882f1..43d134f4b42b 100644 --- a/drivers/spi/spi-meson-spicc.c +++ b/drivers/spi/spi-meson-spicc.c @@ -15,7 +15,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/spi/spi.h>  #include <linux/types.h> @@ -864,7 +863,7 @@ static int meson_spicc_probe(struct platform_device *pdev)  				     SPI_BPW_MASK(24) |  				     SPI_BPW_MASK(16) |  				     SPI_BPW_MASK(8); -	master->flags = (SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX); +	master->flags = (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX);  	master->min_speed_hz = spicc->data->min_speed_hz;  	master->max_speed_hz = spicc->data->max_speed_hz;  	master->setup = meson_spicc_setup; diff --git a/drivers/spi/spi-microchip-core.c b/drivers/spi/spi-microchip-core.c index b59e8a0c5b97..b451cd4860ec 100644 --- a/drivers/spi/spi-microchip-core.c +++ b/drivers/spi/spi-microchip-core.c @@ -530,10 +530,8 @@ static int mchp_corespi_probe(struct platform_device *pdev)  		return PTR_ERR(spi->regs);  	spi->irq = platform_get_irq(pdev, 0); -	if (spi->irq <= 0) -		return dev_err_probe(&pdev->dev, -ENXIO, -				     "invalid IRQ %d for SPI controller\n", -				     spi->irq); +	if (spi->irq < 0) +		return spi->irq;  	ret = devm_request_irq(&pdev->dev, spi->irq, mchp_corespi_interrupt,  			       IRQF_SHARED, dev_name(&pdev->dev), master); diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c index 99aeef28a477..5cecca1bef02 100644 --- a/drivers/spi/spi-mpc512x-psc.c +++ b/drivers/spi/spi-mpc512x-psc.c @@ -53,7 +53,7 @@ struct mpc512x_psc_spi {  	int type;  	void __iomem *psc;  	struct mpc512x_psc_fifo __iomem *fifo; -	unsigned int irq; +	int irq;  	u8 bits_per_word;  	u32 mclk_rate; diff --git a/drivers/spi/spi-mpc52xx-psc.c b/drivers/spi/spi-mpc52xx-psc.c index 9a1a080fb688..795c08594a4d 100644 --- a/drivers/spi/spi-mpc52xx-psc.c +++ b/drivers/spi/spi-mpc52xx-psc.c @@ -29,7 +29,7 @@ struct mpc52xx_psc_spi {  	/* driver internal data */  	struct mpc52xx_psc __iomem *psc;  	struct mpc52xx_psc_fifo __iomem *fifo; -	unsigned int irq; +	int irq;  	u8 bits_per_word;  	struct completion done; diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c index 39272ad6641b..0757985947dd 100644 --- a/drivers/spi/spi-mt65xx.c +++ b/drivers/spi/spi-mt65xx.c @@ -1142,7 +1142,7 @@ static int mtk_spi_probe(struct platform_device *pdev)  		master->mode_bits |= SPI_CS_HIGH;  	if (mdata->dev_comp->must_tx) -		master->flags = SPI_MASTER_MUST_TX; +		master->flags = SPI_CONTROLLER_MUST_TX;  	if (mdata->dev_comp->ipm_design)  		master->mode_bits |= SPI_LOOP | SPI_RX_DUAL | SPI_TX_DUAL |  				     SPI_RX_QUAD | SPI_TX_QUAD; diff --git a/drivers/spi/spi-mt7621.c b/drivers/spi/spi-mt7621.c index 3e9d396b33bd..91600e5c22e4 100644 --- a/drivers/spi/spi-mt7621.c +++ b/drivers/spi/spi-mt7621.c @@ -14,7 +14,9 @@  #include <linux/delay.h>  #include <linux/io.h>  #include <linux/module.h> +#include <linux/of.h>  #include <linux/of_device.h> +#include <linux/platform_device.h>  #include <linux/reset.h>  #include <linux/spi/spi.h> diff --git a/drivers/spi/spi-mtk-nor.c b/drivers/spi/spi-mtk-nor.c index baa7a5353987..cf4ee8b19e42 100644 --- a/drivers/spi/spi-mtk-nor.c +++ b/drivers/spi/spi-mtk-nor.c @@ -13,7 +13,8 @@  #include <linux/iopoll.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_device.h> +#include <linux/of.h> +#include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/spi/spi.h>  #include <linux/spi/spi-mem.h> diff --git a/drivers/spi/spi-mtk-snfi.c b/drivers/spi/spi-mtk-snfi.c index bed8317cd205..4433a8a9299f 100644 --- a/drivers/spi/spi-mtk-snfi.c +++ b/drivers/spi/spi-mtk-snfi.c @@ -76,7 +76,8 @@  #include <linux/interrupt.h>  #include <linux/dma-mapping.h>  #include <linux/iopoll.h> -#include <linux/of_platform.h> +#include <linux/of.h> +#include <linux/platform_device.h>  #include <linux/mtd/nand-ecc-mtk.h>  #include <linux/spi/spi.h>  #include <linux/spi/spi-mem.h> diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c index 963a53dd680b..cd0e7ae07162 100644 --- a/drivers/spi/spi-mxs.c +++ b/drivers/spi/spi-mxs.c @@ -572,7 +572,7 @@ static int mxs_spi_probe(struct platform_device *pdev)  	master->mode_bits = SPI_CPOL | SPI_CPHA;  	master->num_chipselect = 3;  	master->dev.of_node = np; -	master->flags = SPI_MASTER_HALF_DUPLEX; +	master->flags = SPI_CONTROLLER_HALF_DUPLEX;  	master->auto_runtime_pm = true;  	spi = spi_master_get_devdata(master); diff --git a/drivers/spi/spi-npcm-fiu.c b/drivers/spi/spi-npcm-fiu.c index eb353561509a..0ca21ff0e9cc 100644 --- a/drivers/spi/spi-npcm-fiu.c +++ b/drivers/spi/spi-npcm-fiu.c @@ -12,7 +12,7 @@  #include <linux/io.h>  #include <linux/vmalloc.h>  #include <linux/regmap.h> -#include <linux/of_device.h> +#include <linux/of.h>  #include <linux/spi/spi-mem.h>  #include <linux/mfd/syscon.h> @@ -287,7 +287,7 @@ static ssize_t npcm_fiu_direct_read(struct spi_mem_dirmap_desc *desc,  				    u64 offs, size_t len, void *buf)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(desc->mem->spi->master); +		spi_controller_get_devdata(desc->mem->spi->controller);  	struct npcm_fiu_chip *chip = &fiu->chip[spi_get_chipselect(desc->mem->spi, 0)];  	void __iomem *src = (void __iomem *)(chip->flash_region_mapped_ptr +  					     offs); @@ -314,7 +314,7 @@ static ssize_t npcm_fiu_direct_write(struct spi_mem_dirmap_desc *desc,  				     u64 offs, size_t len, const void *buf)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(desc->mem->spi->master); +		spi_controller_get_devdata(desc->mem->spi->controller);  	struct npcm_fiu_chip *chip = &fiu->chip[spi_get_chipselect(desc->mem->spi, 0)];  	void __iomem *dst = (void __iomem *)(chip->flash_region_mapped_ptr +  					     offs); @@ -335,7 +335,7 @@ static int npcm_fiu_uma_read(struct spi_mem *mem,  			      bool is_address_size, u8 *data, u32 data_size)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(mem->spi->master); +		spi_controller_get_devdata(mem->spi->controller);  	u32 uma_cfg = BIT(10);  	u32 data_reg[4];  	int ret; @@ -390,7 +390,7 @@ static int npcm_fiu_uma_write(struct spi_mem *mem,  			      bool is_address_size, u8 *data, u32 data_size)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(mem->spi->master); +		spi_controller_get_devdata(mem->spi->controller);  	u32 uma_cfg = BIT(10);  	u32 data_reg[4] = {0};  	u32 val; @@ -439,7 +439,7 @@ static int npcm_fiu_manualwrite(struct spi_mem *mem,  				const struct spi_mem_op *op)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(mem->spi->master); +		spi_controller_get_devdata(mem->spi->controller);  	u8 *data = (u8 *)op->data.buf.out;  	u32 num_data_chunks;  	u32 remain_data; @@ -544,7 +544,7 @@ static void npcm_fiux_set_direct_rd(struct npcm_fiu_spi *fiu)  static int npcm_fiu_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(mem->spi->master); +		spi_controller_get_devdata(mem->spi->controller);  	struct npcm_fiu_chip *chip = &fiu->chip[spi_get_chipselect(mem->spi, 0)];  	int ret = 0;  	u8 *buf; @@ -604,7 +604,7 @@ static int npcm_fiu_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  static int npcm_fiu_dirmap_create(struct spi_mem_dirmap_desc *desc)  {  	struct npcm_fiu_spi *fiu = -		spi_controller_get_devdata(desc->mem->spi->master); +		spi_controller_get_devdata(desc->mem->spi->controller);  	struct npcm_fiu_chip *chip = &fiu->chip[spi_get_chipselect(desc->mem->spi, 0)];  	struct regmap *gcr_regmap; @@ -665,7 +665,7 @@ static int npcm_fiu_dirmap_create(struct spi_mem_dirmap_desc *desc)  static int npcm_fiu_setup(struct spi_device *spi)  { -	struct spi_controller *ctrl = spi->master; +	struct spi_controller *ctrl = spi->controller;  	struct npcm_fiu_spi *fiu = spi_controller_get_devdata(ctrl);  	struct npcm_fiu_chip *chip; @@ -701,7 +701,7 @@ static int npcm_fiu_probe(struct platform_device *pdev)  	void __iomem *regbase;  	int id, ret; -	ctrl = devm_spi_alloc_master(dev, sizeof(*fiu)); +	ctrl = devm_spi_alloc_host(dev, sizeof(*fiu));  	if (!ctrl)  		return -ENOMEM; @@ -755,7 +755,7 @@ static int npcm_fiu_probe(struct platform_device *pdev)  	ctrl->num_chipselect = fiu->info->max_cs;  	ctrl->dev.of_node = dev->of_node; -	ret = devm_spi_register_master(dev, ctrl); +	ret = devm_spi_register_controller(dev, ctrl);  	if (ret)  		clk_disable_unprepare(fiu->clk); diff --git a/drivers/spi/spi-nxp-fspi.c b/drivers/spi/spi-nxp-fspi.c index 544017655787..45a4acc95661 100644 --- a/drivers/spi/spi-nxp-fspi.c +++ b/drivers/spi/spi-nxp-fspi.c @@ -47,7 +47,6 @@  #include <linux/module.h>  #include <linux/mutex.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/pm_qos.h>  #include <linux/regmap.h> @@ -1157,12 +1156,10 @@ static int nxp_fspi_probe(struct platform_device *pdev)  	/* find the resources - configuration register address space */  	if (is_acpi_node(dev_fwnode(f->dev))) -		res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +		f->iobase = devm_platform_ioremap_resource(pdev, 0);  	else -		res = platform_get_resource_byname(pdev, -				IORESOURCE_MEM, "fspi_base"); +		f->iobase = devm_platform_ioremap_resource_byname(pdev, "fspi_base"); -	f->iobase = devm_ioremap_resource(dev, res);  	if (IS_ERR(f->iobase)) {  		ret = PTR_ERR(f->iobase);  		goto err_put_ctrl; diff --git a/drivers/spi/spi-omap-uwire.c b/drivers/spi/spi-omap-uwire.c index 902d2e0c1f2f..f89aa9e52c23 100644 --- a/drivers/spi/spi-omap-uwire.c +++ b/drivers/spi/spi-omap-uwire.c @@ -486,7 +486,7 @@ static int uwire_probe(struct platform_device *pdev)  	/* the spi->mode bits understood by this driver: */  	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;  	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 16); -	master->flags = SPI_MASTER_HALF_DUPLEX; +	master->flags = SPI_CONTROLLER_HALF_DUPLEX;  	master->bus_num = 2;	/* "official" */  	master->num_chipselect = 4; diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c index 8331e247bf5c..e5cd82eb9e54 100644 --- a/drivers/spi/spi-omap2-mcspi.c +++ b/drivers/spi/spi-omap2-mcspi.c @@ -1508,10 +1508,8 @@ static int omap2_mcspi_probe(struct platform_device *pdev)  	}  	status = platform_get_irq(pdev, 0); -	if (status < 0) { -		dev_err_probe(&pdev->dev, status, "no irq resource found\n"); +	if (status < 0)  		goto free_master; -	}  	init_completion(&mcspi->txdone);  	status = devm_request_irq(&pdev->dev, status,  				  omap2_mcspi_irq_handler, 0, pdev->name, diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c index ad9e83e34297..1f10f5c8e34d 100644 --- a/drivers/spi/spi-orion.c +++ b/drivers/spi/spi-orion.c @@ -16,7 +16,6 @@  #include <linux/pm_runtime.h>  #include <linux/of.h>  #include <linux/of_address.h> -#include <linux/of_device.h>  #include <linux/clk.h>  #include <linux/sizes.h>  #include <asm/unaligned.h> @@ -91,7 +90,7 @@ struct orion_child_options {  };  struct orion_spi { -	struct spi_master	*master; +	struct spi_controller	*host;  	void __iomem		*base;  	struct clk              *clk;  	struct clk              *axi_clk; @@ -142,7 +141,7 @@ static int orion_spi_baudrate_set(struct spi_device *spi, unsigned int speed)  	struct orion_spi *orion_spi;  	const struct orion_spi_dev *devdata; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	devdata = orion_spi->devdata;  	tclk_hz = clk_get_rate(orion_spi->clk); @@ -236,7 +235,7 @@ orion_spi_mode_set(struct spi_device *spi)  	u32 reg;  	struct orion_spi *orion_spi; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	reg = readl(spi_reg(orion_spi, ORION_SPI_IF_CONFIG_REG));  	reg &= ~ORION_SPI_MODE_MASK; @@ -258,7 +257,7 @@ orion_spi_50mhz_ac_timing_erratum(struct spi_device *spi, unsigned int speed)  	u32 reg;  	struct orion_spi *orion_spi; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	/*  	 * Erratum description: (Erratum NO. FE-9144572) The device @@ -298,7 +297,7 @@ orion_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)  	unsigned int bits_per_word = spi->bits_per_word;  	int	rc; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	if ((t != NULL) && t->speed_hz)  		speed = t->speed_hz; @@ -331,7 +330,7 @@ static void orion_spi_set_cs(struct spi_device *spi, bool enable)  	void __iomem *ctrl_reg;  	u32 val; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	ctrl_reg = spi_reg(orion_spi, ORION_SPI_IF_CTRL_REG);  	val = readl(ctrl_reg); @@ -389,7 +388,7 @@ orion_spi_write_read_8bit(struct spi_device *spi,  	cs_single_byte = spi->mode & SPI_CS_WORD; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	if (cs_single_byte)  		orion_spi_set_cs(spi, 0); @@ -440,7 +439,7 @@ orion_spi_write_read_16bit(struct spi_device *spi,  		return -1;  	} -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	tx_reg = spi_reg(orion_spi, ORION_SPI_DATA_OUT_REG);  	rx_reg = spi_reg(orion_spi, ORION_SPI_DATA_IN_REG);  	int_reg = spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG); @@ -476,7 +475,7 @@ orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer)  	word_len = spi->bits_per_word;  	count = xfer->len; -	orion_spi = spi_master_get_devdata(spi->master); +	orion_spi = spi_controller_get_devdata(spi->controller);  	/*  	 * Use SPI direct write mode if base address is available @@ -529,7 +528,7 @@ out:  	return xfer->len - count;  } -static int orion_spi_transfer_one(struct spi_master *master, +static int orion_spi_transfer_one(struct spi_controller *host,  					struct spi_device *spi,  					struct spi_transfer *t)  { @@ -549,7 +548,7 @@ static int orion_spi_setup(struct spi_device *spi)  {  	int ret;  #ifdef CONFIG_PM -	struct orion_spi *orion_spi = spi_master_get_devdata(spi->master); +	struct orion_spi *orion_spi = spi_controller_get_devdata(spi->controller);  	struct device *dev = orion_spi->dev;  	orion_spi_runtime_resume(dev); @@ -645,44 +644,44 @@ MODULE_DEVICE_TABLE(of, orion_spi_of_match_table);  static int orion_spi_probe(struct platform_device *pdev)  {  	const struct orion_spi_dev *devdata; -	struct spi_master *master; +	struct spi_controller *host;  	struct orion_spi *spi;  	struct resource *r;  	unsigned long tclk_hz;  	int status = 0;  	struct device_node *np; -	master = spi_alloc_master(&pdev->dev, sizeof(*spi)); -	if (master == NULL) { -		dev_dbg(&pdev->dev, "master allocation failed\n"); +	host = spi_alloc_host(&pdev->dev, sizeof(*spi)); +	if (host == NULL) { +		dev_dbg(&pdev->dev, "host allocation failed\n");  		return -ENOMEM;  	}  	if (pdev->id != -1) -		master->bus_num = pdev->id; +		host->bus_num = pdev->id;  	if (pdev->dev.of_node) {  		u32 cell_index;  		if (!of_property_read_u32(pdev->dev.of_node, "cell-index",  					  &cell_index)) -			master->bus_num = cell_index; +			host->bus_num = cell_index;  	}  	/* we support all 4 SPI modes and LSB first option */ -	master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST | SPI_CS_WORD; -	master->set_cs = orion_spi_set_cs; -	master->transfer_one = orion_spi_transfer_one; -	master->num_chipselect = ORION_NUM_CHIPSELECTS; -	master->setup = orion_spi_setup; -	master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16); -	master->auto_runtime_pm = true; -	master->use_gpio_descriptors = true; -	master->flags = SPI_MASTER_GPIO_SS; +	host->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST | SPI_CS_WORD; +	host->set_cs = orion_spi_set_cs; +	host->transfer_one = orion_spi_transfer_one; +	host->num_chipselect = ORION_NUM_CHIPSELECTS; +	host->setup = orion_spi_setup; +	host->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16); +	host->auto_runtime_pm = true; +	host->use_gpio_descriptors = true; +	host->flags = SPI_CONTROLLER_GPIO_SS; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	spi = spi_master_get_devdata(master); -	spi->master = master; +	spi = spi_controller_get_devdata(host); +	spi->host = host;  	spi->dev = &pdev->dev;  	devdata = device_get_match_data(&pdev->dev); @@ -719,14 +718,14 @@ static int orion_spi_probe(struct platform_device *pdev)  	 */  	if (of_device_is_compatible(pdev->dev.of_node,  					"marvell,armada-370-spi")) -		master->max_speed_hz = min(devdata->max_hz, +		host->max_speed_hz = min(devdata->max_hz,  				DIV_ROUND_UP(tclk_hz, devdata->min_divisor));  	else if (devdata->min_divisor) -		master->max_speed_hz = +		host->max_speed_hz =  			DIV_ROUND_UP(tclk_hz, devdata->min_divisor);  	else -		master->max_speed_hz = devdata->max_hz; -	master->min_speed_hz = DIV_ROUND_UP(tclk_hz, devdata->max_divisor); +		host->max_speed_hz = devdata->max_hz; +	host->min_speed_hz = DIV_ROUND_UP(tclk_hz, devdata->max_divisor);  	spi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);  	if (IS_ERR(spi->base)) { @@ -785,8 +784,8 @@ static int orion_spi_probe(struct platform_device *pdev)  	if (status < 0)  		goto out_rel_pm; -	master->dev.of_node = pdev->dev.of_node; -	status = spi_register_master(master); +	host->dev.of_node = pdev->dev.of_node; +	status = spi_register_controller(host);  	if (status < 0)  		goto out_rel_pm; @@ -799,21 +798,21 @@ out_rel_axi_clk:  out_rel_clk:  	clk_disable_unprepare(spi->clk);  out: -	spi_master_put(master); +	spi_controller_put(host);  	return status;  }  static void orion_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct orion_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct orion_spi *spi = spi_controller_get_devdata(host);  	pm_runtime_get_sync(&pdev->dev);  	clk_disable_unprepare(spi->axi_clk);  	clk_disable_unprepare(spi->clk); -	spi_unregister_master(master); +	spi_unregister_controller(host);  	pm_runtime_disable(&pdev->dev);  } @@ -822,8 +821,8 @@ MODULE_ALIAS("platform:" DRIVER_NAME);  #ifdef CONFIG_PM  static int orion_spi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct orion_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct orion_spi *spi = spi_controller_get_devdata(host);  	clk_disable_unprepare(spi->axi_clk);  	clk_disable_unprepare(spi->clk); @@ -832,8 +831,8 @@ static int orion_spi_runtime_suspend(struct device *dev)  static int orion_spi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct orion_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct orion_spi *spi = spi_controller_get_devdata(host);  	if (!IS_ERR(spi->axi_clk))  		clk_prepare_enable(spi->axi_clk); diff --git a/drivers/spi/spi-pci1xxxx.c b/drivers/spi/spi-pci1xxxx.c index 4445d82409d6..3638e974f5d4 100644 --- a/drivers/spi/spi-pci1xxxx.c +++ b/drivers/spi/spi-pci1xxxx.c @@ -65,7 +65,7 @@ struct pci1xxxx_spi_internal {  	bool spi_xfer_in_progress;  	int irq;  	struct completion spi_xfer_done; -	struct spi_master *spi_host; +	struct spi_controller *spi_host;  	struct pci1xxxx_spi *parent;  	struct {  		unsigned int dev_sel : 3; @@ -250,7 +250,7 @@ static int pci1xxxx_spi_probe(struct pci_dev *pdev, const struct pci_device_id *  	struct pci1xxxx_spi_internal *spi_sub_ptr;  	struct device *dev = &pdev->dev;  	struct pci1xxxx_spi *spi_bus; -	struct spi_master *spi_host; +	struct spi_controller *spi_host;  	u32 regval;  	int ret; @@ -276,7 +276,7 @@ static int pci1xxxx_spi_probe(struct pci_dev *pdev, const struct pci_device_id *  						      sizeof(struct pci1xxxx_spi_internal),  						      GFP_KERNEL);  		spi_sub_ptr = spi_bus->spi_int[iter]; -		spi_sub_ptr->spi_host = devm_spi_alloc_master(dev, sizeof(struct spi_master)); +		spi_sub_ptr->spi_host = devm_spi_alloc_host(dev, sizeof(struct spi_controller));  		if (!spi_sub_ptr->spi_host)  			return -ENOMEM; @@ -365,9 +365,9 @@ static int pci1xxxx_spi_probe(struct pci_dev *pdev, const struct pci_device_id *  		spi_host->bits_per_word_mask = SPI_BPW_MASK(8);  		spi_host->max_speed_hz = PCI1XXXX_SPI_MAX_CLOCK_HZ;  		spi_host->min_speed_hz = PCI1XXXX_SPI_MIN_CLOCK_HZ; -		spi_host->flags = SPI_MASTER_MUST_TX; -		spi_master_set_devdata(spi_host, spi_sub_ptr); -		ret = devm_spi_register_master(dev, spi_host); +		spi_host->flags = SPI_CONTROLLER_MUST_TX; +		spi_controller_set_devdata(spi_host, spi_sub_ptr); +		ret = devm_spi_register_controller(dev, spi_host);  		if (ret)  			goto error;  	} @@ -415,7 +415,7 @@ static int pci1xxxx_spi_resume(struct device *dev)  	for (iter = 0; iter < spi_ptr->total_hw_instances; iter++) {  		spi_sub_ptr = spi_ptr->spi_int[iter]; -		spi_master_resume(spi_sub_ptr->spi_host); +		spi_controller_resume(spi_sub_ptr->spi_host);  		writel(regval, spi_ptr->reg_base +  		       SPI_MST_EVENT_MASK_REG_OFFSET(iter)); @@ -441,7 +441,7 @@ static int pci1xxxx_spi_suspend(struct device *dev)  		/* Store existing config before suspend */  		store_restore_config(spi_ptr, spi_sub_ptr, iter, 1); -		spi_master_suspend(spi_sub_ptr->spi_host); +		spi_controller_suspend(spi_sub_ptr->spi_host);  		writel(reg1, spi_ptr->reg_base +  		       SPI_MST_EVENT_MASK_REG_OFFSET(iter));  	} diff --git a/drivers/spi/spi-pic32-sqi.c b/drivers/spi/spi-pic32-sqi.c index 51dfb49523f3..883354d0ff52 100644 --- a/drivers/spi/spi-pic32-sqi.c +++ b/drivers/spi/spi-pic32-sqi.c @@ -139,7 +139,7 @@ struct pic32_sqi {  	void __iomem		*regs;  	struct clk		*sys_clk;  	struct clk		*base_clk; /* drives spi clock */ -	struct spi_master	*master; +	struct spi_controller	*host;  	int			irq;  	struct completion	xfer_done;  	struct ring_desc	*ring; @@ -316,9 +316,9 @@ static int pic32_sqi_one_transfer(struct pic32_sqi *sqi,  	return 0;  } -static int pic32_sqi_prepare_hardware(struct spi_master *master) +static int pic32_sqi_prepare_hardware(struct spi_controller *host)  { -	struct pic32_sqi *sqi = spi_master_get_devdata(master); +	struct pic32_sqi *sqi = spi_controller_get_devdata(host);  	/* enable spi interface */  	pic32_setbits(sqi->regs + PESQI_CONF_REG, PESQI_EN); @@ -328,7 +328,7 @@ static int pic32_sqi_prepare_hardware(struct spi_master *master)  	return 0;  } -static bool pic32_sqi_can_dma(struct spi_master *master, +static bool pic32_sqi_can_dma(struct spi_controller *host,  			      struct spi_device *spi,  			      struct spi_transfer *x)  { @@ -336,7 +336,7 @@ static bool pic32_sqi_can_dma(struct spi_master *master,  	return true;  } -static int pic32_sqi_one_message(struct spi_master *master, +static int pic32_sqi_one_message(struct spi_controller *host,  				 struct spi_message *msg)  {  	struct spi_device *spi = msg->spi; @@ -347,7 +347,7 @@ static int pic32_sqi_one_message(struct spi_master *master,  	unsigned long timeout;  	u32 val; -	sqi = spi_master_get_devdata(master); +	sqi = spi_controller_get_devdata(host);  	reinit_completion(&sqi->xfer_done);  	msg->actual_length = 0; @@ -412,7 +412,7 @@ static int pic32_sqi_one_message(struct spi_master *master,  	/* wait for xfer completion */  	timeout = wait_for_completion_timeout(&sqi->xfer_done, 5 * HZ);  	if (timeout == 0) { -		dev_err(&sqi->master->dev, "wait timedout/interrupted\n"); +		dev_err(&sqi->host->dev, "wait timedout/interrupted\n");  		ret = -ETIMEDOUT;  		msg->status = ret;  	} else { @@ -434,14 +434,14 @@ xfer_out:  		/* release ring descr */  		ring_desc_put(sqi, rdesc);  	} -	spi_finalize_current_message(spi->master); +	spi_finalize_current_message(spi->controller);  	return ret;  } -static int pic32_sqi_unprepare_hardware(struct spi_master *master) +static int pic32_sqi_unprepare_hardware(struct spi_controller *host)  { -	struct pic32_sqi *sqi = spi_master_get_devdata(master); +	struct pic32_sqi *sqi = spi_controller_get_devdata(host);  	/* disable clk */  	pic32_clrbits(sqi->regs + PESQI_CLK_CTRL_REG, PESQI_CLK_EN); @@ -458,18 +458,18 @@ static int ring_desc_ring_alloc(struct pic32_sqi *sqi)  	int i;  	/* allocate coherent DMAable memory for hardware buffer descriptors. */ -	sqi->bd = dma_alloc_coherent(&sqi->master->dev, +	sqi->bd = dma_alloc_coherent(&sqi->host->dev,  				     sizeof(*bd) * PESQI_BD_COUNT,  				     &sqi->bd_dma, GFP_KERNEL);  	if (!sqi->bd) { -		dev_err(&sqi->master->dev, "failed allocating dma buffer\n"); +		dev_err(&sqi->host->dev, "failed allocating dma buffer\n");  		return -ENOMEM;  	}  	/* allocate software ring descriptors */  	sqi->ring = kcalloc(PESQI_BD_COUNT, sizeof(*rdesc), GFP_KERNEL);  	if (!sqi->ring) { -		dma_free_coherent(&sqi->master->dev, +		dma_free_coherent(&sqi->host->dev,  				  sizeof(*bd) * PESQI_BD_COUNT,  				  sqi->bd, sqi->bd_dma);  		return -ENOMEM; @@ -498,7 +498,7 @@ static int ring_desc_ring_alloc(struct pic32_sqi *sqi)  static void ring_desc_ring_free(struct pic32_sqi *sqi)  { -	dma_free_coherent(&sqi->master->dev, +	dma_free_coherent(&sqi->host->dev,  			  sizeof(struct buf_desc) * PESQI_BD_COUNT,  			  sqi->bd, sqi->bd_dma);  	kfree(sqi->ring); @@ -568,28 +568,28 @@ static void pic32_sqi_hw_init(struct pic32_sqi *sqi)  static int pic32_sqi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct pic32_sqi *sqi;  	int ret; -	master = spi_alloc_master(&pdev->dev, sizeof(*sqi)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*sqi)); +	if (!host)  		return -ENOMEM; -	sqi = spi_master_get_devdata(master); -	sqi->master = master; +	sqi = spi_controller_get_devdata(host); +	sqi->host = host;  	sqi->regs = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(sqi->regs)) {  		ret = PTR_ERR(sqi->regs); -		goto err_free_master; +		goto err_free_host;  	}  	/* irq */  	sqi->irq = platform_get_irq(pdev, 0);  	if (sqi->irq < 0) {  		ret = sqi->irq; -		goto err_free_master; +		goto err_free_host;  	}  	/* clocks */ @@ -597,27 +597,27 @@ static int pic32_sqi_probe(struct platform_device *pdev)  	if (IS_ERR(sqi->sys_clk)) {  		ret = PTR_ERR(sqi->sys_clk);  		dev_err(&pdev->dev, "no sys_clk ?\n"); -		goto err_free_master; +		goto err_free_host;  	}  	sqi->base_clk = devm_clk_get(&pdev->dev, "spi_ck");  	if (IS_ERR(sqi->base_clk)) {  		ret = PTR_ERR(sqi->base_clk);  		dev_err(&pdev->dev, "no base clk ?\n"); -		goto err_free_master; +		goto err_free_host;  	}  	ret = clk_prepare_enable(sqi->sys_clk);  	if (ret) {  		dev_err(&pdev->dev, "sys clk enable failed\n"); -		goto err_free_master; +		goto err_free_host;  	}  	ret = clk_prepare_enable(sqi->base_clk);  	if (ret) {  		dev_err(&pdev->dev, "base clk enable failed\n");  		clk_disable_unprepare(sqi->sys_clk); -		goto err_free_master; +		goto err_free_host;  	}  	init_completion(&sqi->xfer_done); @@ -640,24 +640,24 @@ static int pic32_sqi_probe(struct platform_device *pdev)  		goto err_free_ring;  	} -	/* register master */ -	master->num_chipselect	= 2; -	master->max_speed_hz	= clk_get_rate(sqi->base_clk); -	master->dma_alignment	= 32; -	master->max_dma_len	= PESQI_BD_BUF_LEN_MAX; -	master->dev.of_node	= pdev->dev.of_node; -	master->mode_bits	= SPI_MODE_3 | SPI_MODE_0 | SPI_TX_DUAL | +	/* register host */ +	host->num_chipselect	= 2; +	host->max_speed_hz	= clk_get_rate(sqi->base_clk); +	host->dma_alignment	= 32; +	host->max_dma_len	= PESQI_BD_BUF_LEN_MAX; +	host->dev.of_node	= pdev->dev.of_node; +	host->mode_bits		= SPI_MODE_3 | SPI_MODE_0 | SPI_TX_DUAL |  				  SPI_RX_DUAL | SPI_TX_QUAD | SPI_RX_QUAD; -	master->flags		= SPI_MASTER_HALF_DUPLEX; -	master->can_dma		= pic32_sqi_can_dma; -	master->bits_per_word_mask	= SPI_BPW_RANGE_MASK(8, 32); -	master->transfer_one_message	= pic32_sqi_one_message; -	master->prepare_transfer_hardware	= pic32_sqi_prepare_hardware; -	master->unprepare_transfer_hardware	= pic32_sqi_unprepare_hardware; +	host->flags		= SPI_CONTROLLER_HALF_DUPLEX; +	host->can_dma		= pic32_sqi_can_dma; +	host->bits_per_word_mask	= SPI_BPW_RANGE_MASK(8, 32); +	host->transfer_one_message	= pic32_sqi_one_message; +	host->prepare_transfer_hardware	= pic32_sqi_prepare_hardware; +	host->unprepare_transfer_hardware	= pic32_sqi_unprepare_hardware; -	ret = devm_spi_register_master(&pdev->dev, master); +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (ret) { -		dev_err(&master->dev, "failed registering spi master\n"); +		dev_err(&host->dev, "failed registering spi host\n");  		free_irq(sqi->irq, sqi);  		goto err_free_ring;  	} @@ -673,8 +673,8 @@ err_disable_clk:  	clk_disable_unprepare(sqi->base_clk);  	clk_disable_unprepare(sqi->sys_clk); -err_free_master: -	spi_master_put(master); +err_free_host: +	spi_controller_put(host);  	return ret;  } diff --git a/drivers/spi/spi-pic32.c b/drivers/spi/spi-pic32.c index f2af5e653f3d..52b788dac10a 100644 --- a/drivers/spi/spi-pic32.c +++ b/drivers/spi/spi-pic32.c @@ -100,7 +100,7 @@ struct pic32_spi {  	int			tx_irq;  	u32			fifo_n_byte; /* FIFO depth in bytes */  	struct clk		*clk; -	struct spi_master	*master; +	struct spi_controller	*host;  	/* Current controller setting */  	u32			speed_hz; /* spi-clk rate */  	u32			mode; @@ -224,9 +224,9 @@ static void pic32_err_stop(struct pic32_spi *pic32s, const char *msg)  	disable_irq_nosync(pic32s->tx_irq);  	/* Show err message and abort xfer with err */ -	dev_err(&pic32s->master->dev, "%s\n", msg); -	if (pic32s->master->cur_msg) -		pic32s->master->cur_msg->status = -EIO; +	dev_err(&pic32s->host->dev, "%s\n", msg); +	if (pic32s->host->cur_msg) +		pic32s->host->cur_msg->status = -EIO;  	complete(&pic32s->xfer_done);  } @@ -250,7 +250,7 @@ static irqreturn_t pic32_spi_fault_irq(int irq, void *dev_id)  		return IRQ_HANDLED;  	} -	if (!pic32s->master->cur_msg) { +	if (!pic32s->host->cur_msg) {  		pic32_err_stop(pic32s, "err_irq: no mesg");  		return IRQ_NONE;  	} @@ -300,16 +300,16 @@ static void pic32_spi_dma_rx_notify(void *data)  static int pic32_spi_dma_transfer(struct pic32_spi *pic32s,  				  struct spi_transfer *xfer)  { -	struct spi_master *master = pic32s->master; +	struct spi_controller *host = pic32s->host;  	struct dma_async_tx_descriptor *desc_rx;  	struct dma_async_tx_descriptor *desc_tx;  	dma_cookie_t cookie;  	int ret; -	if (!master->dma_rx || !master->dma_tx) +	if (!host->dma_rx || !host->dma_tx)  		return -ENODEV; -	desc_rx = dmaengine_prep_slave_sg(master->dma_rx, +	desc_rx = dmaengine_prep_slave_sg(host->dma_rx,  					  xfer->rx_sg.sgl,  					  xfer->rx_sg.nents,  					  DMA_DEV_TO_MEM, @@ -319,7 +319,7 @@ static int pic32_spi_dma_transfer(struct pic32_spi *pic32s,  		goto err_dma;  	} -	desc_tx = dmaengine_prep_slave_sg(master->dma_tx, +	desc_tx = dmaengine_prep_slave_sg(host->dma_tx,  					  xfer->tx_sg.sgl,  					  xfer->tx_sg.nents,  					  DMA_MEM_TO_DEV, @@ -343,13 +343,13 @@ static int pic32_spi_dma_transfer(struct pic32_spi *pic32s,  	if (ret)  		goto err_dma_tx; -	dma_async_issue_pending(master->dma_rx); -	dma_async_issue_pending(master->dma_tx); +	dma_async_issue_pending(host->dma_rx); +	dma_async_issue_pending(host->dma_tx);  	return 0;  err_dma_tx: -	dmaengine_terminate_all(master->dma_rx); +	dmaengine_terminate_all(host->dma_rx);  err_dma:  	return ret;  } @@ -357,7 +357,7 @@ err_dma:  static int pic32_spi_dma_config(struct pic32_spi *pic32s, u32 dma_width)  {  	int buf_offset = offsetof(struct pic32_spi_regs, buf); -	struct spi_master *master = pic32s->master; +	struct spi_controller *host = pic32s->host;  	struct dma_slave_config cfg;  	int ret; @@ -371,16 +371,16 @@ static int pic32_spi_dma_config(struct pic32_spi *pic32s, u32 dma_width)  	cfg.dst_addr_width = dma_width;  	/* tx channel */  	cfg.direction = DMA_MEM_TO_DEV; -	ret = dmaengine_slave_config(master->dma_tx, &cfg); +	ret = dmaengine_slave_config(host->dma_tx, &cfg);  	if (ret) { -		dev_err(&master->dev, "tx channel setup failed\n"); +		dev_err(&host->dev, "tx channel setup failed\n");  		return ret;  	}  	/* rx channel */  	cfg.direction = DMA_DEV_TO_MEM; -	ret = dmaengine_slave_config(master->dma_rx, &cfg); +	ret = dmaengine_slave_config(host->dma_rx, &cfg);  	if (ret) -		dev_err(&master->dev, "rx channel setup failed\n"); +		dev_err(&host->dev, "rx channel setup failed\n");  	return ret;  } @@ -430,19 +430,19 @@ static int pic32_spi_set_word_size(struct pic32_spi *pic32s, u8 bits_per_word)  	return 0;  } -static int pic32_spi_prepare_hardware(struct spi_master *master) +static int pic32_spi_prepare_hardware(struct spi_controller *host)  { -	struct pic32_spi *pic32s = spi_master_get_devdata(master); +	struct pic32_spi *pic32s = spi_controller_get_devdata(host);  	pic32_spi_enable(pic32s);  	return 0;  } -static int pic32_spi_prepare_message(struct spi_master *master, +static int pic32_spi_prepare_message(struct spi_controller *host,  				     struct spi_message *msg)  { -	struct pic32_spi *pic32s = spi_master_get_devdata(master); +	struct pic32_spi *pic32s = spi_controller_get_devdata(host);  	struct spi_device *spi = msg->spi;  	u32 val; @@ -481,18 +481,18 @@ static int pic32_spi_prepare_message(struct spi_master *master,  	return 0;  } -static bool pic32_spi_can_dma(struct spi_master *master, +static bool pic32_spi_can_dma(struct spi_controller *host,  			      struct spi_device *spi,  			      struct spi_transfer *xfer)  { -	struct pic32_spi *pic32s = spi_master_get_devdata(master); +	struct pic32_spi *pic32s = spi_controller_get_devdata(host);  	/* skip using DMA on small size transfer to avoid overhead.*/  	return (xfer->len >= PIC32_DMA_LEN_MIN) &&  	       test_bit(PIC32F_DMA_PREP, &pic32s->flags);  } -static int pic32_spi_one_transfer(struct spi_master *master, +static int pic32_spi_one_transfer(struct spi_controller *host,  				  struct spi_device *spi,  				  struct spi_transfer *transfer)  { @@ -501,7 +501,7 @@ static int pic32_spi_one_transfer(struct spi_master *master,  	unsigned long timeout;  	int ret; -	pic32s = spi_master_get_devdata(master); +	pic32s = spi_controller_get_devdata(host);  	/* handle transfer specific word size change */  	if (transfer->bits_per_word && @@ -549,8 +549,8 @@ static int pic32_spi_one_transfer(struct spi_master *master,  	if (timeout == 0) {  		dev_err(&spi->dev, "wait error/timedout\n");  		if (dma_issued) { -			dmaengine_terminate_all(master->dma_rx); -			dmaengine_terminate_all(master->dma_tx); +			dmaengine_terminate_all(host->dma_rx); +			dmaengine_terminate_all(host->dma_tx);  		}  		ret = -ETIMEDOUT;  	} else { @@ -560,16 +560,16 @@ static int pic32_spi_one_transfer(struct spi_master *master,  	return ret;  } -static int pic32_spi_unprepare_message(struct spi_master *master, +static int pic32_spi_unprepare_message(struct spi_controller *host,  				       struct spi_message *msg)  {  	/* nothing to do */  	return 0;  } -static int pic32_spi_unprepare_hardware(struct spi_master *master) +static int pic32_spi_unprepare_hardware(struct spi_controller *host)  { -	struct pic32_spi *pic32s = spi_master_get_devdata(master); +	struct pic32_spi *pic32s = spi_controller_get_devdata(host);  	pic32_spi_disable(pic32s); @@ -605,28 +605,28 @@ static void pic32_spi_cleanup(struct spi_device *spi)  static int pic32_spi_dma_prep(struct pic32_spi *pic32s, struct device *dev)  { -	struct spi_master *master = pic32s->master; +	struct spi_controller *host = pic32s->host;  	int ret = 0; -	master->dma_rx = dma_request_chan(dev, "spi-rx"); -	if (IS_ERR(master->dma_rx)) { -		if (PTR_ERR(master->dma_rx) == -EPROBE_DEFER) +	host->dma_rx = dma_request_chan(dev, "spi-rx"); +	if (IS_ERR(host->dma_rx)) { +		if (PTR_ERR(host->dma_rx) == -EPROBE_DEFER)  			ret = -EPROBE_DEFER;  		else  			dev_warn(dev, "RX channel not found.\n"); -		master->dma_rx = NULL; +		host->dma_rx = NULL;  		goto out_err;  	} -	master->dma_tx = dma_request_chan(dev, "spi-tx"); -	if (IS_ERR(master->dma_tx)) { -		if (PTR_ERR(master->dma_tx) == -EPROBE_DEFER) +	host->dma_tx = dma_request_chan(dev, "spi-tx"); +	if (IS_ERR(host->dma_tx)) { +		if (PTR_ERR(host->dma_tx) == -EPROBE_DEFER)  			ret = -EPROBE_DEFER;  		else  			dev_warn(dev, "TX channel not found.\n"); -		master->dma_tx = NULL; +		host->dma_tx = NULL;  		goto out_err;  	} @@ -639,14 +639,14 @@ static int pic32_spi_dma_prep(struct pic32_spi *pic32s, struct device *dev)  	return 0;  out_err: -	if (master->dma_rx) { -		dma_release_channel(master->dma_rx); -		master->dma_rx = NULL; +	if (host->dma_rx) { +		dma_release_channel(host->dma_rx); +		host->dma_rx = NULL;  	} -	if (master->dma_tx) { -		dma_release_channel(master->dma_tx); -		master->dma_tx = NULL; +	if (host->dma_tx) { +		dma_release_channel(host->dma_tx); +		host->dma_tx = NULL;  	}  	return ret; @@ -658,11 +658,11 @@ static void pic32_spi_dma_unprep(struct pic32_spi *pic32s)  		return;  	clear_bit(PIC32F_DMA_PREP, &pic32s->flags); -	if (pic32s->master->dma_rx) -		dma_release_channel(pic32s->master->dma_rx); +	if (pic32s->host->dma_rx) +		dma_release_channel(pic32s->host->dma_rx); -	if (pic32s->master->dma_tx) -		dma_release_channel(pic32s->master->dma_tx); +	if (pic32s->host->dma_tx) +		dma_release_channel(pic32s->host->dma_tx);  }  static void pic32_spi_hw_init(struct pic32_spi *pic32s) @@ -680,7 +680,7 @@ static void pic32_spi_hw_init(struct pic32_spi *pic32s)  	/* disable framing mode */  	ctrl &= ~CTRL_FRMEN; -	/* enable master mode while disabled */ +	/* enable host mode while disabled */  	ctrl |= CTRL_MSTEN;  	/* set tx fifo threshold interrupt */ @@ -752,36 +752,36 @@ err_unmap_mem:  static int pic32_spi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct pic32_spi *pic32s;  	int ret; -	master = spi_alloc_master(&pdev->dev, sizeof(*pic32s)); -	if (!master) +	host = spi_alloc_host(&pdev->dev, sizeof(*pic32s)); +	if (!host)  		return -ENOMEM; -	pic32s = spi_master_get_devdata(master); -	pic32s->master = master; +	pic32s = spi_controller_get_devdata(host); +	pic32s->host = host;  	ret = pic32_spi_hw_probe(pdev, pic32s);  	if (ret) -		goto err_master; +		goto err_host; -	master->dev.of_node	= pdev->dev.of_node; -	master->mode_bits	= SPI_MODE_3 | SPI_MODE_0 | SPI_CS_HIGH; -	master->num_chipselect	= 1; /* single chip-select */ -	master->max_speed_hz	= clk_get_rate(pic32s->clk); -	master->setup		= pic32_spi_setup; -	master->cleanup		= pic32_spi_cleanup; -	master->flags		= SPI_MASTER_MUST_TX | SPI_MASTER_MUST_RX; -	master->bits_per_word_mask	= SPI_BPW_MASK(8) | SPI_BPW_MASK(16) | +	host->dev.of_node	= pdev->dev.of_node; +	host->mode_bits	= SPI_MODE_3 | SPI_MODE_0 | SPI_CS_HIGH; +	host->num_chipselect	= 1; /* single chip-select */ +	host->max_speed_hz	= clk_get_rate(pic32s->clk); +	host->setup		= pic32_spi_setup; +	host->cleanup		= pic32_spi_cleanup; +	host->flags		= SPI_CONTROLLER_MUST_TX | SPI_CONTROLLER_MUST_RX; +	host->bits_per_word_mask	= SPI_BPW_MASK(8) | SPI_BPW_MASK(16) |  					  SPI_BPW_MASK(32); -	master->transfer_one		= pic32_spi_one_transfer; -	master->prepare_message		= pic32_spi_prepare_message; -	master->unprepare_message	= pic32_spi_unprepare_message; -	master->prepare_transfer_hardware	= pic32_spi_prepare_hardware; -	master->unprepare_transfer_hardware	= pic32_spi_unprepare_hardware; -	master->use_gpio_descriptors = true; +	host->transfer_one		= pic32_spi_one_transfer; +	host->prepare_message		= pic32_spi_prepare_message; +	host->unprepare_message	= pic32_spi_unprepare_message; +	host->prepare_transfer_hardware	= pic32_spi_prepare_hardware; +	host->unprepare_transfer_hardware	= pic32_spi_unprepare_hardware; +	host->use_gpio_descriptors = true;  	/* optional DMA support */  	ret = pic32_spi_dma_prep(pic32s, &pdev->dev); @@ -789,7 +789,7 @@ static int pic32_spi_probe(struct platform_device *pdev)  		goto err_bailout;  	if (test_bit(PIC32F_DMA_PREP, &pic32s->flags)) -		master->can_dma	= pic32_spi_can_dma; +		host->can_dma	= pic32_spi_can_dma;  	init_completion(&pic32s->xfer_done);  	pic32s->mode = -1; @@ -824,10 +824,10 @@ static int pic32_spi_probe(struct platform_device *pdev)  		goto err_bailout;  	} -	/* register master */ -	ret = devm_spi_register_master(&pdev->dev, master); +	/* register host */ +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (ret) { -		dev_err(&master->dev, "failed registering spi master\n"); +		dev_err(&host->dev, "failed registering spi host\n");  		goto err_bailout;  	} @@ -838,8 +838,8 @@ static int pic32_spi_probe(struct platform_device *pdev)  err_bailout:  	pic32_spi_dma_unprep(pic32s);  	clk_disable_unprepare(pic32s->clk); -err_master: -	spi_master_put(master); +err_host: +	spi_controller_put(host);  	return ret;  } diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c index 1af75eff26b6..bb347b6bb6f3 100644 --- a/drivers/spi/spi-pl022.c +++ b/drivers/spi/spi-pl022.c @@ -336,8 +336,8 @@ struct vendor_data {   * @phybase: the physical memory where the SSP device resides   * @virtbase: the virtual memory where the SSP is mapped   * @clk: outgoing clock "SPICLK" for the SPI bus - * @master: SPI framework hookup - * @master_info: controller-specific data from machine setup + * @host: SPI framework hookup + * @host_info: controller-specific data from machine setup   * @pump_transfers: Tasklet used in Interrupt Transfer mode   * @cur_msg: Pointer to current spi_message being processed   * @cur_transfer: Pointer to current spi_transfer @@ -370,8 +370,8 @@ struct pl022 {  	resource_size_t			phybase;  	void __iomem			*virtbase;  	struct clk			*clk; -	struct spi_master		*master; -	struct pl022_ssp_controller	*master_info; +	struct spi_controller		*host; +	struct pl022_ssp_controller	*host_info;  	/* Message per-transfer pump */  	struct tasklet_struct		pump_transfers;  	struct spi_message		*cur_msg; @@ -500,7 +500,7 @@ static void giveback(struct pl022 *pl022)  		 * could invalidate the cs_control() callback...  		 */  		/* get a pointer to the next message, if any */ -		next_msg = spi_get_next_queued_message(pl022->master); +		next_msg = spi_get_next_queued_message(pl022->host);  		/*  		 * see if the next and current messages point @@ -523,7 +523,7 @@ static void giveback(struct pl022 *pl022)  	writew((readw(SSP_CR1(pl022->virtbase)) &  		(~SSP_CR1_MASK_SSE)), SSP_CR1(pl022->virtbase)); -	spi_finalize_current_message(pl022->master); +	spi_finalize_current_message(pl022->host);  }  /** @@ -1110,16 +1110,16 @@ static int pl022_dma_probe(struct pl022 *pl022)  	 * of them.  	 */  	pl022->dma_rx_channel = dma_request_channel(mask, -					    pl022->master_info->dma_filter, -					    pl022->master_info->dma_rx_param); +					    pl022->host_info->dma_filter, +					    pl022->host_info->dma_rx_param);  	if (!pl022->dma_rx_channel) {  		dev_dbg(&pl022->adev->dev, "no RX DMA channel!\n");  		goto err_no_rxchan;  	}  	pl022->dma_tx_channel = dma_request_channel(mask, -					    pl022->master_info->dma_filter, -					    pl022->master_info->dma_tx_param); +					    pl022->host_info->dma_filter, +					    pl022->host_info->dma_tx_param);  	if (!pl022->dma_tx_channel) {  		dev_dbg(&pl022->adev->dev, "no TX DMA channel!\n");  		goto err_no_txchan; @@ -1573,10 +1573,10 @@ out:  	return;  } -static int pl022_transfer_one_message(struct spi_master *master, +static int pl022_transfer_one_message(struct spi_controller *host,  				      struct spi_message *msg)  { -	struct pl022 *pl022 = spi_master_get_devdata(master); +	struct pl022 *pl022 = spi_controller_get_devdata(host);  	/* Initial message state */  	pl022->cur_msg = msg; @@ -1602,9 +1602,9 @@ static int pl022_transfer_one_message(struct spi_master *master,  	return 0;  } -static int pl022_unprepare_transfer_hardware(struct spi_master *master) +static int pl022_unprepare_transfer_hardware(struct spi_controller *host)  { -	struct pl022 *pl022 = spi_master_get_devdata(master); +	struct pl022 *pl022 = spi_controller_get_devdata(host);  	/* nothing more to do - disable spi/ssp and power off */  	writew((readw(SSP_CR1(pl022->virtbase)) & @@ -1826,10 +1826,10 @@ static const struct pl022_config_chip pl022_default_chip_info = {  };  /** - * pl022_setup - setup function registered to SPI master framework + * pl022_setup - setup function registered to SPI host framework   * @spi: spi device which is requesting setup   * - * This function is registered to the SPI framework for this SPI master + * This function is registered to the SPI framework for this SPI host   * controller. If it is the first time when setup is called by this device,   * this function will initialize the runtime state for this chip and save   * the same in the device structure. Else it will update the runtime info @@ -1844,7 +1844,7 @@ static int pl022_setup(struct spi_device *spi)  	struct chip_data *chip;  	struct ssp_clock_params clk_freq = { .cpsdvsr = 0, .scr = 0};  	int status = 0; -	struct pl022 *pl022 = spi_master_get_devdata(spi->master); +	struct pl022 *pl022 = spi_controller_get_devdata(spi->controller);  	unsigned int bits = spi->bits_per_word;  	u32 tmp;  	struct device_node *np = spi->dev.of_node; @@ -1964,7 +1964,7 @@ static int pl022_setup(struct spi_device *spi)  	chip->dmacr = 0;  	chip->cpsr = 0;  	if ((chip_info->com_mode == DMA_TRANSFER) -	    && ((pl022->master_info)->enable_dma)) { +	    && ((pl022->host_info)->enable_dma)) {  		chip->enable_dma = true;  		dev_dbg(&spi->dev, "DMA mode set in controller state\n");  		SSP_WRITE_BITS(chip->dmacr, SSP_DMA_ENABLED, @@ -2061,10 +2061,10 @@ static int pl022_setup(struct spi_device *spi)  }  /** - * pl022_cleanup - cleanup function registered to SPI master framework + * pl022_cleanup - cleanup function registered to SPI host framework   * @spi: spi device which is requesting cleanup   * - * This function is registered to the SPI framework for this SPI master + * This function is registered to the SPI framework for this SPI host   * controller. It will free the runtime state of chip.   */  static void pl022_cleanup(struct spi_device *spi) @@ -2103,7 +2103,7 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)  	struct device *dev = &adev->dev;  	struct pl022_ssp_controller *platform_info =  			dev_get_platdata(&adev->dev); -	struct spi_master *master; +	struct spi_controller *host;  	struct pl022 *pl022 = NULL;	/*Data for this driver */  	int status = 0; @@ -2117,16 +2117,16 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)  		return -ENODEV;  	} -	/* Allocate master with space for data */ -	master = spi_alloc_master(dev, sizeof(struct pl022)); -	if (master == NULL) { -		dev_err(&adev->dev, "probe - cannot alloc SPI master\n"); +	/* Allocate host with space for data */ +	host = spi_alloc_host(dev, sizeof(struct pl022)); +	if (host == NULL) { +		dev_err(&adev->dev, "probe - cannot alloc SPI host\n");  		return -ENOMEM;  	} -	pl022 = spi_master_get_devdata(master); -	pl022->master = master; -	pl022->master_info = platform_info; +	pl022 = spi_controller_get_devdata(host); +	pl022->host = host; +	pl022->host_info = platform_info;  	pl022->adev = adev;  	pl022->vendor = id->data; @@ -2134,25 +2134,25 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)  	 * Bus Number Which has been Assigned to this SSP controller  	 * on this board  	 */ -	master->bus_num = platform_info->bus_id; -	master->cleanup = pl022_cleanup; -	master->setup = pl022_setup; -	master->auto_runtime_pm = true; -	master->transfer_one_message = pl022_transfer_one_message; -	master->unprepare_transfer_hardware = pl022_unprepare_transfer_hardware; -	master->rt = platform_info->rt; -	master->dev.of_node = dev->of_node; -	master->use_gpio_descriptors = true; +	host->bus_num = platform_info->bus_id; +	host->cleanup = pl022_cleanup; +	host->setup = pl022_setup; +	host->auto_runtime_pm = true; +	host->transfer_one_message = pl022_transfer_one_message; +	host->unprepare_transfer_hardware = pl022_unprepare_transfer_hardware; +	host->rt = platform_info->rt; +	host->dev.of_node = dev->of_node; +	host->use_gpio_descriptors = true;  	/*  	 * Supports mode 0-3, loopback, and active low CS. Transfers are  	 * always MS bit first on the original pl022.  	 */ -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;  	if (pl022->vendor->extended_cr) -		master->mode_bits |= SPI_LSB_FIRST; +		host->mode_bits |= SPI_LSB_FIRST; -	dev_dbg(&adev->dev, "BUSNO: %d\n", master->bus_num); +	dev_dbg(&adev->dev, "BUSNO: %d\n", host->bus_num);  	status = amba_request_regions(adev, NULL);  	if (status) @@ -2215,10 +2215,10 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)  	/* Register with the SPI framework */  	amba_set_drvdata(adev, pl022); -	status = devm_spi_register_master(&adev->dev, master); +	status = devm_spi_register_controller(&adev->dev, host);  	if (status != 0) {  		dev_err_probe(&adev->dev, status, -			      "problem registering spi master\n"); +			      "problem registering spi host\n");  		goto err_spi_register;  	}  	dev_dbg(dev, "probe succeeded\n"); @@ -2246,7 +2246,7 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)   err_no_ioremap:  	amba_release_regions(adev);   err_no_ioregion: -	spi_master_put(master); +	spi_controller_put(host);  	return status;  } @@ -2265,7 +2265,7 @@ pl022_remove(struct amba_device *adev)  	pm_runtime_get_noresume(&adev->dev);  	load_ssp_default_config(pl022); -	if (pl022->master_info->enable_dma) +	if (pl022->host_info->enable_dma)  		pl022_dma_remove(pl022);  	clk_disable_unprepare(pl022->clk); @@ -2279,13 +2279,13 @@ static int pl022_suspend(struct device *dev)  	struct pl022 *pl022 = dev_get_drvdata(dev);  	int ret; -	ret = spi_master_suspend(pl022->master); +	ret = spi_controller_suspend(pl022->host);  	if (ret)  		return ret;  	ret = pm_runtime_force_suspend(dev);  	if (ret) { -		spi_master_resume(pl022->master); +		spi_controller_resume(pl022->host);  		return ret;  	} @@ -2305,7 +2305,7 @@ static int pl022_resume(struct device *dev)  		dev_err(dev, "problem resuming\n");  	/* Start the queue running */ -	ret = spi_master_resume(pl022->master); +	ret = spi_controller_resume(pl022->host);  	if (!ret)  		dev_dbg(dev, "resumed\n"); diff --git a/drivers/spi/spi-ppc4xx.c b/drivers/spi/spi-ppc4xx.c index d725e915025d..03aab661be9d 100644 --- a/drivers/spi/spi-ppc4xx.c +++ b/drivers/spi/spi-ppc4xx.c @@ -126,7 +126,7 @@ struct ppc4xx_spi {  	unsigned char *rx;  	struct spi_ppc4xx_regs __iomem *regs; /* pointer to the registers */ -	struct spi_master *master; +	struct spi_controller *host;  	struct device *dev;  }; @@ -143,7 +143,7 @@ static int spi_ppc4xx_txrx(struct spi_device *spi, struct spi_transfer *t)  	dev_dbg(&spi->dev, "txrx: tx %p, rx %p, len %d\n",  		t->tx_buf, t->rx_buf, t->len); -	hw = spi_master_get_devdata(spi->master); +	hw = spi_controller_get_devdata(spi->controller);  	hw->tx = t->tx_buf;  	hw->rx = t->rx_buf; @@ -161,7 +161,7 @@ static int spi_ppc4xx_txrx(struct spi_device *spi, struct spi_transfer *t)  static int spi_ppc4xx_setupxfer(struct spi_device *spi, struct spi_transfer *t)  { -	struct ppc4xx_spi *hw = spi_master_get_devdata(spi->master); +	struct ppc4xx_spi *hw = spi_controller_get_devdata(spi->controller);  	struct spi_ppc4xx_cs *cs = spi->controller_state;  	int scr;  	u8 cdm = 0; @@ -340,7 +340,7 @@ static void spi_ppc4xx_enable(struct ppc4xx_spi *hw)  static int spi_ppc4xx_of_probe(struct platform_device *op)  {  	struct ppc4xx_spi *hw; -	struct spi_master *master; +	struct spi_controller *host;  	struct spi_bitbang *bbp;  	struct resource resource;  	struct device_node *np = op->dev.of_node; @@ -349,20 +349,20 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  	int ret;  	const unsigned int *clk; -	master = spi_alloc_master(dev, sizeof(*hw)); -	if (master == NULL) +	host = spi_alloc_host(dev, sizeof(*hw)); +	if (host == NULL)  		return -ENOMEM; -	master->dev.of_node = np; -	platform_set_drvdata(op, master); -	hw = spi_master_get_devdata(master); -	hw->master = master; +	host->dev.of_node = np; +	platform_set_drvdata(op, host); +	hw = spi_controller_get_devdata(host); +	hw->host = host;  	hw->dev = dev;  	init_completion(&hw->done);  	/* Setup the state for the bitbang driver */  	bbp = &hw->bitbang; -	bbp->master = hw->master; +	bbp->master = hw->host;  	bbp->setup_transfer = spi_ppc4xx_setupxfer;  	bbp->txrx_bufs = spi_ppc4xx_txrx;  	bbp->use_dma = 0; @@ -385,7 +385,7 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  	if (opbnp == NULL) {  		dev_err(dev, "OPB: cannot find node\n");  		ret = -ENODEV; -		goto free_master; +		goto free_host;  	}  	/* Get the clock (Hz) for the OPB */  	clk = of_get_property(opbnp, "clock-frequency", NULL); @@ -393,7 +393,7 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  		dev_err(dev, "OPB: no clock-frequency property set\n");  		of_node_put(opbnp);  		ret = -ENODEV; -		goto free_master; +		goto free_host;  	}  	hw->opb_freq = *clk;  	hw->opb_freq >>= 2; @@ -402,7 +402,7 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  	ret = of_address_to_resource(np, 0, &resource);  	if (ret) {  		dev_err(dev, "error while parsing device node resource\n"); -		goto free_master; +		goto free_host;  	}  	hw->mapbase = resource.start;  	hw->mapsize = resource_size(&resource); @@ -411,7 +411,7 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  	if (hw->mapsize < sizeof(struct spi_ppc4xx_regs)) {  		dev_err(dev, "too small to map registers\n");  		ret = -EINVAL; -		goto free_master; +		goto free_host;  	}  	/* Request IRQ */ @@ -420,7 +420,7 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  			  0, "spi_ppc4xx_of", (void *)hw);  	if (ret) {  		dev_err(dev, "unable to allocate interrupt\n"); -		goto free_master; +		goto free_host;  	}  	if (!request_mem_region(hw->mapbase, hw->mapsize, DRIVER_NAME)) { @@ -443,7 +443,7 @@ static int spi_ppc4xx_of_probe(struct platform_device *op)  	dev->dma_mask = 0;  	ret = spi_bitbang_start(bbp);  	if (ret) { -		dev_err(dev, "failed to register SPI master\n"); +		dev_err(dev, "failed to register SPI host\n");  		goto unmap_regs;  	} @@ -457,8 +457,8 @@ map_io_error:  	release_mem_region(hw->mapbase, hw->mapsize);  request_mem_error:  	free_irq(hw->irqnum, hw); -free_master: -	spi_master_put(master); +free_host: +	spi_controller_put(host);  	dev_err(dev, "initialization failed\n");  	return ret; @@ -466,14 +466,14 @@ free_master:  static void spi_ppc4xx_of_remove(struct platform_device *op)  { -	struct spi_master *master = platform_get_drvdata(op); -	struct ppc4xx_spi *hw = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(op); +	struct ppc4xx_spi *hw = spi_controller_get_devdata(host);  	spi_bitbang_stop(&hw->bitbang);  	release_mem_region(hw->mapbase, hw->mapsize);  	free_irq(hw->irqnum, hw);  	iounmap(hw->regs); -	spi_master_put(master); +	spi_controller_put(host);  }  static const struct of_device_id spi_ppc4xx_of_match[] = { diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index 1bab18a0f262..f2a856f6a99e 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c @@ -1102,7 +1102,7 @@ static int pxa2xx_spi_transfer_one(struct spi_controller *controller,  		}  	} -	if (spi_controller_is_slave(controller)) { +	if (spi_controller_is_target(controller)) {  		while (drv_data->write(drv_data))  			;  		if (drv_data->gpiod_ready) { @@ -1121,7 +1121,7 @@ static int pxa2xx_spi_transfer_one(struct spi_controller *controller,  	return 1;  } -static int pxa2xx_spi_slave_abort(struct spi_controller *controller) +static int pxa2xx_spi_target_abort(struct spi_controller *controller)  {  	struct driver_data *drv_data = spi_controller_get_devdata(controller); @@ -1199,7 +1199,7 @@ static int setup(struct spi_device *spi)  		break;  	default:  		tx_hi_thres = 0; -		if (spi_controller_is_slave(drv_data->controller)) { +		if (spi_controller_is_target(drv_data->controller)) {  			tx_thres = 1;  			rx_thres = 2;  		} else { @@ -1248,7 +1248,7 @@ static int setup(struct spi_device *spi)  	}  	chip->cr1 = 0; -	if (spi_controller_is_slave(drv_data->controller)) { +	if (spi_controller_is_target(drv_data->controller)) {  		chip->cr1 |= SSCR1_SCFR;  		chip->cr1 |= SSCR1_SCLKDIR;  		chip->cr1 |= SSCR1_SFRMDIR; @@ -1344,7 +1344,7 @@ pxa2xx_spi_init_pdata(struct platform_device *pdev)  	match = device_get_match_data(dev);  	if (match) -		type = (enum pxa_ssp_type)match; +		type = (uintptr_t)match;  	else if (is_lpss_priv) {  		u32 value; @@ -1395,7 +1395,7 @@ pxa2xx_spi_init_pdata(struct platform_device *pdev)  	else  		ssp->port_id = uid; -	pdata->is_slave = device_property_read_bool(dev, "spi-slave"); +	pdata->is_target = device_property_read_bool(dev, "spi-slave");  	pdata->num_chipselect = 1;  	pdata->enable_dma = true;  	pdata->dma_burst_size = 1; @@ -1461,10 +1461,10 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	if (platform_info->is_slave) -		controller = devm_spi_alloc_slave(dev, sizeof(*drv_data)); +	if (platform_info->is_target) +		controller = devm_spi_alloc_target(dev, sizeof(*drv_data));  	else -		controller = devm_spi_alloc_master(dev, sizeof(*drv_data)); +		controller = devm_spi_alloc_host(dev, sizeof(*drv_data));  	if (!controller) {  		dev_err(&pdev->dev, "cannot alloc spi_controller\n"); @@ -1487,7 +1487,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)  	controller->setup = setup;  	controller->set_cs = pxa2xx_spi_set_cs;  	controller->transfer_one = pxa2xx_spi_transfer_one; -	controller->slave_abort = pxa2xx_spi_slave_abort; +	controller->target_abort = pxa2xx_spi_target_abort;  	controller->handle_err = pxa2xx_spi_handle_err;  	controller->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer;  	controller->fw_translate_cs = pxa2xx_spi_fw_translate_cs; @@ -1579,7 +1579,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)  		break;  	default: -		if (spi_controller_is_slave(controller)) { +		if (spi_controller_is_target(controller)) {  			tmp = SSCR1_SCFR |  			      SSCR1_SCLKDIR |  			      SSCR1_SFRMDIR | @@ -1592,7 +1592,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)  		}  		pxa2xx_spi_write(drv_data, SSCR1, tmp);  		tmp = SSCR0_Motorola | SSCR0_DataSize(8); -		if (!spi_controller_is_slave(controller)) +		if (!spi_controller_is_target(controller))  			tmp |= SSCR0_SCR(2);  		pxa2xx_spi_write(drv_data, SSCR0, tmp);  		break; @@ -1620,7 +1620,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)  	controller->num_chipselect = platform_info->num_chipselect;  	controller->use_gpio_descriptors = true; -	if (platform_info->is_slave) { +	if (platform_info->is_target) {  		drv_data->gpiod_ready = devm_gpiod_get_optional(dev,  						"ready", GPIOD_OUT_LOW);  		if (IS_ERR(drv_data->gpiod_ready)) { diff --git a/drivers/spi/spi-qcom-qspi.c b/drivers/spi/spi-qcom-qspi.c index 1954c39b3d08..49b775134485 100644 --- a/drivers/spi/spi-qcom-qspi.c +++ b/drivers/spi/spi-qcom-qspi.c @@ -9,7 +9,7 @@  #include <linux/io.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_platform.h> +#include <linux/platform_device.h>  #include <linux/pinctrl/consumer.h>  #include <linux/pm_runtime.h>  #include <linux/pm_opp.h> @@ -247,11 +247,11 @@ static void qcom_qspi_pio_xfer(struct qcom_qspi *ctrl)  	qcom_qspi_pio_xfer_ctrl(ctrl);  } -static void qcom_qspi_handle_err(struct spi_master *master, +static void qcom_qspi_handle_err(struct spi_controller *host,  				 struct spi_message *msg)  {  	u32 int_status; -	struct qcom_qspi *ctrl = spi_master_get_devdata(master); +	struct qcom_qspi *ctrl = spi_controller_get_devdata(host);  	unsigned long flags;  	int i; @@ -411,11 +411,11 @@ static bool qcom_qspi_can_dma(struct spi_controller *ctlr,  	return xfer->len > QSPI_MAX_BYTES_FIFO;  } -static int qcom_qspi_transfer_one(struct spi_master *master, +static int qcom_qspi_transfer_one(struct spi_controller *host,  				  struct spi_device *slv,  				  struct spi_transfer *xfer)  { -	struct qcom_qspi *ctrl = spi_master_get_devdata(master); +	struct qcom_qspi *ctrl = spi_controller_get_devdata(host);  	int ret;  	unsigned long speed_hz;  	unsigned long flags; @@ -443,7 +443,7 @@ static int qcom_qspi_transfer_one(struct spi_master *master,  		ctrl->xfer.tx_buf = xfer->tx_buf;  	}  	ctrl->xfer.is_last = list_is_last(&xfer->transfer_list, -					  &master->cur_msg->transfers); +					  &host->cur_msg->transfers);  	ctrl->xfer.rem_bytes = xfer->len;  	if (xfer->rx_sg.nents || xfer->tx_sg.nents) { @@ -481,7 +481,7 @@ exit:  	return 1;  } -static int qcom_qspi_prepare_message(struct spi_master *master, +static int qcom_qspi_prepare_message(struct spi_controller *host,  				     struct spi_message *message)  {  	u32 mstr_cfg; @@ -490,7 +490,7 @@ static int qcom_qspi_prepare_message(struct spi_master *master,  	int tx_data_delay = 1;  	unsigned long flags; -	ctrl = spi_master_get_devdata(master); +	ctrl = spi_controller_get_devdata(host);  	spin_lock_irqsave(&ctrl->lock, flags);  	mstr_cfg = readl(ctrl->base + MSTR_CONFIG); @@ -694,18 +694,18 @@ static int qcom_qspi_probe(struct platform_device *pdev)  {  	int ret;  	struct device *dev; -	struct spi_master *master; +	struct spi_controller *host;  	struct qcom_qspi *ctrl;  	dev = &pdev->dev; -	master = devm_spi_alloc_master(dev, sizeof(*ctrl)); -	if (!master) +	host = devm_spi_alloc_host(dev, sizeof(*ctrl)); +	if (!host)  		return -ENOMEM; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	ctrl = spi_master_get_devdata(master); +	ctrl = spi_controller_get_devdata(host);  	spin_lock_init(&ctrl->lock);  	ctrl->dev = dev; @@ -758,23 +758,23 @@ static int qcom_qspi_probe(struct platform_device *pdev)  	if (ret)  		return dev_err_probe(dev, ret, "could not set DMA mask\n"); -	master->max_speed_hz = 300000000; -	master->max_dma_len = 65536; /* as per HPG */ -	master->dma_alignment = QSPI_ALIGN_REQ; -	master->num_chipselect = QSPI_NUM_CS; -	master->bus_num = -1; -	master->dev.of_node = pdev->dev.of_node; -	master->mode_bits = SPI_MODE_0 | -			    SPI_TX_DUAL | SPI_RX_DUAL | -			    SPI_TX_QUAD | SPI_RX_QUAD; -	master->flags = SPI_MASTER_HALF_DUPLEX; -	master->prepare_message = qcom_qspi_prepare_message; -	master->transfer_one = qcom_qspi_transfer_one; -	master->handle_err = qcom_qspi_handle_err; +	host->max_speed_hz = 300000000; +	host->max_dma_len = 65536; /* as per HPG */ +	host->dma_alignment = QSPI_ALIGN_REQ; +	host->num_chipselect = QSPI_NUM_CS; +	host->bus_num = -1; +	host->dev.of_node = pdev->dev.of_node; +	host->mode_bits = SPI_MODE_0 | +			  SPI_TX_DUAL | SPI_RX_DUAL | +			  SPI_TX_QUAD | SPI_RX_QUAD; +	host->flags = SPI_CONTROLLER_HALF_DUPLEX; +	host->prepare_message = qcom_qspi_prepare_message; +	host->transfer_one = qcom_qspi_transfer_one; +	host->handle_err = qcom_qspi_handle_err;  	if (of_property_read_bool(pdev->dev.of_node, "iommus")) -		master->can_dma = qcom_qspi_can_dma; -	master->auto_runtime_pm = true; -	master->mem_ops = &qcom_qspi_mem_ops; +		host->can_dma = qcom_qspi_can_dma; +	host->auto_runtime_pm = true; +	host->mem_ops = &qcom_qspi_mem_ops;  	ret = devm_pm_opp_set_clkname(&pdev->dev, "core");  	if (ret) @@ -794,7 +794,7 @@ static int qcom_qspi_probe(struct platform_device *pdev)  	pm_runtime_set_autosuspend_delay(dev, 250);  	pm_runtime_enable(dev); -	ret = spi_register_master(master); +	ret = spi_register_controller(host);  	if (!ret)  		return 0; @@ -805,18 +805,18 @@ static int qcom_qspi_probe(struct platform_device *pdev)  static void qcom_qspi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); +	struct spi_controller *host = platform_get_drvdata(pdev);  	/* Unregister _before_ disabling pm_runtime() so we stop transfers */ -	spi_unregister_master(master); +	spi_unregister_controller(host);  	pm_runtime_disable(&pdev->dev);  }  static int __maybe_unused qcom_qspi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct qcom_qspi *ctrl = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct qcom_qspi *ctrl = spi_controller_get_devdata(host);  	int ret;  	/* Drop the performance state vote */ @@ -837,8 +837,8 @@ static int __maybe_unused qcom_qspi_runtime_suspend(struct device *dev)  static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct qcom_qspi *ctrl = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct qcom_qspi *ctrl = spi_controller_get_devdata(host);  	int ret;  	pinctrl_pm_select_default_state(dev); @@ -859,30 +859,30 @@ static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev)  static int __maybe_unused qcom_qspi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev);  	int ret; -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	if (ret)  		return ret;  	ret = pm_runtime_force_suspend(dev);  	if (ret) -		spi_master_resume(master); +		spi_controller_resume(host);  	return ret;  }  static int __maybe_unused qcom_qspi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); +	struct spi_controller *host = dev_get_drvdata(dev);  	int ret;  	ret = pm_runtime_force_resume(dev);  	if (ret)  		return ret; -	ret = spi_master_resume(master); +	ret = spi_controller_resume(host);  	if (ret)  		pm_runtime_force_suspend(dev); diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index 00e5e88e72c4..4b6f6b25219b 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c @@ -11,7 +11,6 @@  #include <linux/list.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/spi/spi.h> @@ -386,20 +385,20 @@ static void spi_qup_write(struct spi_qup *controller)  	} while (remainder);  } -static int spi_qup_prep_sg(struct spi_master *master, struct scatterlist *sgl, +static int spi_qup_prep_sg(struct spi_controller *host, struct scatterlist *sgl,  			   unsigned int nents, enum dma_transfer_direction dir,  			   dma_async_tx_callback callback)  { -	struct spi_qup *qup = spi_master_get_devdata(master); +	struct spi_qup *qup = spi_controller_get_devdata(host);  	unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE;  	struct dma_async_tx_descriptor *desc;  	struct dma_chan *chan;  	dma_cookie_t cookie;  	if (dir == DMA_MEM_TO_DEV) -		chan = master->dma_tx; +		chan = host->dma_tx;  	else -		chan = master->dma_rx; +		chan = host->dma_rx;  	desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags);  	if (IS_ERR_OR_NULL(desc)) @@ -413,13 +412,13 @@ static int spi_qup_prep_sg(struct spi_master *master, struct scatterlist *sgl,  	return dma_submit_error(cookie);  } -static void spi_qup_dma_terminate(struct spi_master *master, +static void spi_qup_dma_terminate(struct spi_controller *host,  				  struct spi_transfer *xfer)  {  	if (xfer->tx_buf) -		dmaengine_terminate_all(master->dma_tx); +		dmaengine_terminate_all(host->dma_tx);  	if (xfer->rx_buf) -		dmaengine_terminate_all(master->dma_rx); +		dmaengine_terminate_all(host->dma_rx);  }  static u32 spi_qup_sgl_get_nents_len(struct scatterlist *sgl, u32 max, @@ -446,8 +445,8 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer,  			  unsigned long timeout)  {  	dma_async_tx_callback rx_done = NULL, tx_done = NULL; -	struct spi_master *master = spi->master; -	struct spi_qup *qup = spi_master_get_devdata(master); +	struct spi_controller *host = spi->controller; +	struct spi_qup *qup = spi_controller_get_devdata(host);  	struct scatterlist *tx_sgl, *rx_sgl;  	int ret; @@ -482,20 +481,20 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer,  			return ret;  		}  		if (rx_sgl) { -			ret = spi_qup_prep_sg(master, rx_sgl, rx_nents, +			ret = spi_qup_prep_sg(host, rx_sgl, rx_nents,  					      DMA_DEV_TO_MEM, rx_done);  			if (ret)  				return ret; -			dma_async_issue_pending(master->dma_rx); +			dma_async_issue_pending(host->dma_rx);  		}  		if (tx_sgl) { -			ret = spi_qup_prep_sg(master, tx_sgl, tx_nents, +			ret = spi_qup_prep_sg(host, tx_sgl, tx_nents,  					      DMA_MEM_TO_DEV, tx_done);  			if (ret)  				return ret; -			dma_async_issue_pending(master->dma_tx); +			dma_async_issue_pending(host->dma_tx);  		}  		if (!wait_for_completion_timeout(&qup->done, timeout)) @@ -514,8 +513,8 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer,  static int spi_qup_do_pio(struct spi_device *spi, struct spi_transfer *xfer,  			  unsigned long timeout)  { -	struct spi_master *master = spi->master; -	struct spi_qup *qup = spi_master_get_devdata(master); +	struct spi_controller *host = spi->controller; +	struct spi_qup *qup = spi_controller_get_devdata(host);  	int ret, n_words, iterations, offset = 0;  	n_words = qup->n_words; @@ -659,7 +658,7 @@ static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)  /* set clock freq ... bits per word, determine mode */  static int spi_qup_io_prep(struct spi_device *spi, struct spi_transfer *xfer)  { -	struct spi_qup *controller = spi_master_get_devdata(spi->master); +	struct spi_qup *controller = spi_controller_get_devdata(spi->controller);  	int ret;  	if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) { @@ -680,9 +679,9 @@ static int spi_qup_io_prep(struct spi_device *spi, struct spi_transfer *xfer)  	if (controller->n_words <= (controller->in_fifo_sz / sizeof(u32)))  		controller->mode = QUP_IO_M_MODE_FIFO; -	else if (spi->master->can_dma && -		 spi->master->can_dma(spi->master, spi, xfer) && -		 spi->master->cur_msg_mapped) +	else if (spi->controller->can_dma && +		 spi->controller->can_dma(spi->controller, spi, xfer) && +		 spi->controller->cur_msg_mapped)  		controller->mode = QUP_IO_M_MODE_BAM;  	else  		controller->mode = QUP_IO_M_MODE_BLOCK; @@ -693,7 +692,7 @@ static int spi_qup_io_prep(struct spi_device *spi, struct spi_transfer *xfer)  /* prep qup for another spi transaction of specific type */  static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)  { -	struct spi_qup *controller = spi_master_get_devdata(spi->master); +	struct spi_qup *controller = spi_controller_get_devdata(spi->controller);  	u32 config, iomode, control;  	unsigned long flags; @@ -841,11 +840,11 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)  	return 0;  } -static int spi_qup_transfer_one(struct spi_master *master, +static int spi_qup_transfer_one(struct spi_controller *host,  			      struct spi_device *spi,  			      struct spi_transfer *xfer)  { -	struct spi_qup *controller = spi_master_get_devdata(master); +	struct spi_qup *controller = spi_controller_get_devdata(host);  	unsigned long timeout, flags;  	int ret; @@ -879,21 +878,21 @@ static int spi_qup_transfer_one(struct spi_master *master,  	spin_unlock_irqrestore(&controller->lock, flags);  	if (ret && spi_qup_is_dma_xfer(controller->mode)) -		spi_qup_dma_terminate(master, xfer); +		spi_qup_dma_terminate(host, xfer);  	return ret;  } -static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi, +static bool spi_qup_can_dma(struct spi_controller *host, struct spi_device *spi,  			    struct spi_transfer *xfer)  { -	struct spi_qup *qup = spi_master_get_devdata(master); +	struct spi_qup *qup = spi_controller_get_devdata(host);  	size_t dma_align = dma_get_cache_alignment();  	int n_words;  	if (xfer->rx_buf) {  		if (!IS_ALIGNED((size_t)xfer->rx_buf, dma_align) || -		    IS_ERR_OR_NULL(master->dma_rx)) +		    IS_ERR_OR_NULL(host->dma_rx))  			return false;  		if (qup->qup_v1 && (xfer->len % qup->in_blk_sz))  			return false; @@ -901,7 +900,7 @@ static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi,  	if (xfer->tx_buf) {  		if (!IS_ALIGNED((size_t)xfer->tx_buf, dma_align) || -		    IS_ERR_OR_NULL(master->dma_tx)) +		    IS_ERR_OR_NULL(host->dma_tx))  			return false;  		if (qup->qup_v1 && (xfer->len % qup->out_blk_sz))  			return false; @@ -914,30 +913,30 @@ static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi,  	return true;  } -static void spi_qup_release_dma(struct spi_master *master) +static void spi_qup_release_dma(struct spi_controller *host)  { -	if (!IS_ERR_OR_NULL(master->dma_rx)) -		dma_release_channel(master->dma_rx); -	if (!IS_ERR_OR_NULL(master->dma_tx)) -		dma_release_channel(master->dma_tx); +	if (!IS_ERR_OR_NULL(host->dma_rx)) +		dma_release_channel(host->dma_rx); +	if (!IS_ERR_OR_NULL(host->dma_tx)) +		dma_release_channel(host->dma_tx);  } -static int spi_qup_init_dma(struct spi_master *master, resource_size_t base) +static int spi_qup_init_dma(struct spi_controller *host, resource_size_t base)  { -	struct spi_qup *spi = spi_master_get_devdata(master); +	struct spi_qup *spi = spi_controller_get_devdata(host);  	struct dma_slave_config *rx_conf = &spi->rx_conf,  				*tx_conf = &spi->tx_conf;  	struct device *dev = spi->dev;  	int ret;  	/* allocate dma resources, if available */ -	master->dma_rx = dma_request_chan(dev, "rx"); -	if (IS_ERR(master->dma_rx)) -		return PTR_ERR(master->dma_rx); +	host->dma_rx = dma_request_chan(dev, "rx"); +	if (IS_ERR(host->dma_rx)) +		return PTR_ERR(host->dma_rx); -	master->dma_tx = dma_request_chan(dev, "tx"); -	if (IS_ERR(master->dma_tx)) { -		ret = PTR_ERR(master->dma_tx); +	host->dma_tx = dma_request_chan(dev, "tx"); +	if (IS_ERR(host->dma_tx)) { +		ret = PTR_ERR(host->dma_tx);  		goto err_tx;  	} @@ -952,13 +951,13 @@ static int spi_qup_init_dma(struct spi_master *master, resource_size_t base)  	tx_conf->dst_addr = base + QUP_OUTPUT_FIFO;  	tx_conf->dst_maxburst = spi->out_blk_sz; -	ret = dmaengine_slave_config(master->dma_rx, rx_conf); +	ret = dmaengine_slave_config(host->dma_rx, rx_conf);  	if (ret) {  		dev_err(dev, "failed to configure RX channel\n");  		goto err;  	} -	ret = dmaengine_slave_config(master->dma_tx, tx_conf); +	ret = dmaengine_slave_config(host->dma_tx, tx_conf);  	if (ret) {  		dev_err(dev, "failed to configure TX channel\n");  		goto err; @@ -967,9 +966,9 @@ static int spi_qup_init_dma(struct spi_master *master, resource_size_t base)  	return 0;  err: -	dma_release_channel(master->dma_tx); +	dma_release_channel(host->dma_tx);  err_tx: -	dma_release_channel(master->dma_rx); +	dma_release_channel(host->dma_rx);  	return ret;  } @@ -979,7 +978,7 @@ static void spi_qup_set_cs(struct spi_device *spi, bool val)  	u32 spi_ioc;  	u32 spi_ioc_orig; -	controller = spi_master_get_devdata(spi->master); +	controller = spi_controller_get_devdata(spi->controller);  	spi_ioc = readl_relaxed(controller->base + SPI_IO_CONTROL);  	spi_ioc_orig = spi_ioc;  	if (!val) @@ -993,7 +992,7 @@ static void spi_qup_set_cs(struct spi_device *spi, bool val)  static int spi_qup_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct clk *iclk, *cclk;  	struct spi_qup *controller;  	struct resource *res; @@ -1028,34 +1027,34 @@ static int spi_qup_probe(struct platform_device *pdev)  		return -ENXIO;  	} -	master = spi_alloc_master(dev, sizeof(struct spi_qup)); -	if (!master) { -		dev_err(dev, "cannot allocate master\n"); +	host = spi_alloc_host(dev, sizeof(struct spi_qup)); +	if (!host) { +		dev_err(dev, "cannot allocate host\n");  		return -ENOMEM;  	}  	/* use num-cs unless not present or out of range */  	if (of_property_read_u32(dev->of_node, "num-cs", &num_cs) ||  	    num_cs > SPI_NUM_CHIPSELECTS) -		master->num_chipselect = SPI_NUM_CHIPSELECTS; +		host->num_chipselect = SPI_NUM_CHIPSELECTS;  	else -		master->num_chipselect = num_cs; +		host->num_chipselect = num_cs; -	master->use_gpio_descriptors = true; -	master->max_native_cs = SPI_NUM_CHIPSELECTS; -	master->bus_num = pdev->id; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; -	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); -	master->max_speed_hz = max_freq; -	master->transfer_one = spi_qup_transfer_one; -	master->dev.of_node = pdev->dev.of_node; -	master->auto_runtime_pm = true; -	master->dma_alignment = dma_get_cache_alignment(); -	master->max_dma_len = SPI_MAX_XFER; +	host->use_gpio_descriptors = true; +	host->max_native_cs = SPI_NUM_CHIPSELECTS; +	host->bus_num = pdev->id; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; +	host->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); +	host->max_speed_hz = max_freq; +	host->transfer_one = spi_qup_transfer_one; +	host->dev.of_node = pdev->dev.of_node; +	host->auto_runtime_pm = true; +	host->dma_alignment = dma_get_cache_alignment(); +	host->max_dma_len = SPI_MAX_XFER; -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	controller = spi_master_get_devdata(master); +	controller = spi_controller_get_devdata(host);  	controller->dev = dev;  	controller->base = base; @@ -1063,16 +1062,16 @@ static int spi_qup_probe(struct platform_device *pdev)  	controller->cclk = cclk;  	controller->irq = irq; -	ret = spi_qup_init_dma(master, res->start); +	ret = spi_qup_init_dma(host, res->start);  	if (ret == -EPROBE_DEFER)  		goto error;  	else if (!ret) -		master->can_dma = spi_qup_can_dma; +		host->can_dma = spi_qup_can_dma;  	controller->qup_v1 = (uintptr_t)of_device_get_match_data(dev);  	if (!controller->qup_v1) -		master->set_cs = spi_qup_set_cs; +		host->set_cs = spi_qup_set_cs;  	spin_lock_init(&controller->lock);  	init_completion(&controller->done); @@ -1150,7 +1149,7 @@ static int spi_qup_probe(struct platform_device *pdev)  	pm_runtime_set_active(dev);  	pm_runtime_enable(dev); -	ret = devm_spi_register_master(dev, master); +	ret = devm_spi_register_controller(dev, host);  	if (ret)  		goto disable_pm; @@ -1162,17 +1161,17 @@ error_clk:  	clk_disable_unprepare(cclk);  	clk_disable_unprepare(iclk);  error_dma: -	spi_qup_release_dma(master); +	spi_qup_release_dma(host);  error: -	spi_master_put(master); +	spi_controller_put(host);  	return ret;  }  #ifdef CONFIG_PM  static int spi_qup_pm_suspend_runtime(struct device *device)  { -	struct spi_master *master = dev_get_drvdata(device); -	struct spi_qup *controller = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(device); +	struct spi_qup *controller = spi_controller_get_devdata(host);  	u32 config;  	/* Enable clocks auto gaiting */ @@ -1188,8 +1187,8 @@ static int spi_qup_pm_suspend_runtime(struct device *device)  static int spi_qup_pm_resume_runtime(struct device *device)  { -	struct spi_master *master = dev_get_drvdata(device); -	struct spi_qup *controller = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(device); +	struct spi_qup *controller = spi_controller_get_devdata(host);  	u32 config;  	int ret; @@ -1214,8 +1213,8 @@ static int spi_qup_pm_resume_runtime(struct device *device)  #ifdef CONFIG_PM_SLEEP  static int spi_qup_suspend(struct device *device)  { -	struct spi_master *master = dev_get_drvdata(device); -	struct spi_qup *controller = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(device); +	struct spi_qup *controller = spi_controller_get_devdata(host);  	int ret;  	if (pm_runtime_suspended(device)) { @@ -1223,7 +1222,7 @@ static int spi_qup_suspend(struct device *device)  		if (ret)  			return ret;  	} -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	if (ret)  		return ret; @@ -1238,8 +1237,8 @@ static int spi_qup_suspend(struct device *device)  static int spi_qup_resume(struct device *device)  { -	struct spi_master *master = dev_get_drvdata(device); -	struct spi_qup *controller = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(device); +	struct spi_qup *controller = spi_controller_get_devdata(host);  	int ret;  	ret = clk_prepare_enable(controller->iclk); @@ -1256,7 +1255,7 @@ static int spi_qup_resume(struct device *device)  	if (ret)  		goto disable_clk; -	ret = spi_master_resume(master); +	ret = spi_controller_resume(host);  	if (ret)  		goto disable_clk; @@ -1271,8 +1270,8 @@ disable_clk:  static void spi_qup_remove(struct platform_device *pdev)  { -	struct spi_master *master = dev_get_drvdata(&pdev->dev); -	struct spi_qup *controller = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(&pdev->dev); +	struct spi_qup *controller = spi_controller_get_devdata(host);  	int ret;  	ret = pm_runtime_get_sync(&pdev->dev); @@ -1290,7 +1289,7 @@ static void spi_qup_remove(struct platform_device *pdev)  			 ERR_PTR(ret));  	} -	spi_qup_release_dma(master); +	spi_qup_release_dma(host);  	pm_runtime_put_noidle(&pdev->dev);  	pm_runtime_disable(&pdev->dev); diff --git a/drivers/spi/spi-rb4xx.c b/drivers/spi/spi-rb4xx.c index 5073736d3d1f..225f75550780 100644 --- a/drivers/spi/spi-rb4xx.c +++ b/drivers/spi/spi-rb4xx.c @@ -80,7 +80,7 @@ static void do_spi_byte_two(struct rb4xx_spi *rbspi, u32 spi_ioc, u8 byte)  static void rb4xx_set_cs(struct spi_device *spi, bool enable)  { -	struct rb4xx_spi *rbspi = spi_master_get_devdata(spi->master); +	struct rb4xx_spi *rbspi = spi_controller_get_devdata(spi->controller);  	/*  	 * Setting CS is done along with bitbanging the actual values, @@ -92,10 +92,10 @@ static void rb4xx_set_cs(struct spi_device *spi, bool enable)  			    AR71XX_SPI_IOC_CS0 | AR71XX_SPI_IOC_CS1);  } -static int rb4xx_transfer_one(struct spi_master *master, +static int rb4xx_transfer_one(struct spi_controller *host,  			      struct spi_device *spi, struct spi_transfer *t)  { -	struct rb4xx_spi *rbspi = spi_master_get_devdata(master); +	struct rb4xx_spi *rbspi = spi_controller_get_devdata(host);  	int i;  	u32 spi_ioc;  	u8 *rx_buf; @@ -126,14 +126,14 @@ static int rb4xx_transfer_one(struct spi_master *master,  			continue;  		rx_buf[i] = rb4xx_read(rbspi, AR71XX_SPI_REG_RDS);  	} -	spi_finalize_current_transfer(master); +	spi_finalize_current_transfer(host);  	return 0;  }  static int rb4xx_spi_probe(struct platform_device *pdev)  { -	struct spi_master *master; +	struct spi_controller *host;  	struct clk *ahb_clk;  	struct rb4xx_spi *rbspi;  	int err; @@ -143,31 +143,31 @@ static int rb4xx_spi_probe(struct platform_device *pdev)  	if (IS_ERR(spi_base))  		return PTR_ERR(spi_base); -	master = devm_spi_alloc_master(&pdev->dev, sizeof(*rbspi)); -	if (!master) +	host = devm_spi_alloc_host(&pdev->dev, sizeof(*rbspi)); +	if (!host)  		return -ENOMEM;  	ahb_clk = devm_clk_get(&pdev->dev, "ahb");  	if (IS_ERR(ahb_clk))  		return PTR_ERR(ahb_clk); -	master->dev.of_node = pdev->dev.of_node; -	master->bus_num = 0; -	master->num_chipselect = 3; -	master->mode_bits = SPI_TX_DUAL; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->flags = SPI_MASTER_MUST_TX; -	master->transfer_one = rb4xx_transfer_one; -	master->set_cs = rb4xx_set_cs; +	host->dev.of_node = pdev->dev.of_node; +	host->bus_num = 0; +	host->num_chipselect = 3; +	host->mode_bits = SPI_TX_DUAL; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->flags = SPI_CONTROLLER_MUST_TX; +	host->transfer_one = rb4xx_transfer_one; +	host->set_cs = rb4xx_set_cs; -	rbspi = spi_master_get_devdata(master); +	rbspi = spi_controller_get_devdata(host);  	rbspi->base = spi_base;  	rbspi->clk = ahb_clk;  	platform_set_drvdata(pdev, rbspi); -	err = devm_spi_register_master(&pdev->dev, master); +	err = devm_spi_register_controller(&pdev->dev, host);  	if (err) { -		dev_err(&pdev->dev, "failed to register SPI master\n"); +		dev_err(&pdev->dev, "failed to register SPI host\n");  		return err;  	} diff --git a/drivers/spi/spi-realtek-rtl.c b/drivers/spi/spi-realtek-rtl.c index 866b0477dbd7..0b0123e20b54 100644 --- a/drivers/spi/spi-realtek-rtl.c +++ b/drivers/spi/spi-realtek-rtl.c @@ -153,7 +153,7 @@ static int realtek_rtl_spi_probe(struct platform_device *pdev)  	struct rtspi *rtspi;  	int err; -	ctrl = devm_spi_alloc_master(&pdev->dev, sizeof(*rtspi)); +	ctrl = devm_spi_alloc_host(&pdev->dev, sizeof(*rtspi));  	if (!ctrl) {  		dev_err(&pdev->dev, "Error allocating SPI controller\n");  		return -ENOMEM; diff --git a/drivers/spi/spi-rockchip-sfc.c b/drivers/spi/spi-rockchip-sfc.c index 583f4187f030..0d7fadcd4ed3 100644 --- a/drivers/spi/spi-rockchip-sfc.c +++ b/drivers/spi/spi-rockchip-sfc.c @@ -487,7 +487,7 @@ static int rockchip_sfc_xfer_done(struct rockchip_sfc *sfc, u32 timeout_us)  static int rockchip_sfc_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct rockchip_sfc *sfc = spi_master_get_devdata(mem->spi->master); +	struct rockchip_sfc *sfc = spi_controller_get_devdata(mem->spi->controller);  	u32 len = op->data.nbytes;  	int ret; @@ -523,7 +523,7 @@ static int rockchip_sfc_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op  static int rockchip_sfc_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op)  { -	struct rockchip_sfc *sfc = spi_master_get_devdata(mem->spi->master); +	struct rockchip_sfc *sfc = spi_controller_get_devdata(mem->spi->controller);  	op->data.nbytes = min(op->data.nbytes, sfc->max_iosize); @@ -557,22 +557,22 @@ static irqreturn_t rockchip_sfc_irq_handler(int irq, void *dev_id)  static int rockchip_sfc_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; -	struct spi_master *master; +	struct spi_controller *host;  	struct rockchip_sfc *sfc;  	int ret; -	master = devm_spi_alloc_master(&pdev->dev, sizeof(*sfc)); -	if (!master) +	host = devm_spi_alloc_host(&pdev->dev, sizeof(*sfc)); +	if (!host)  		return -ENOMEM; -	master->flags = SPI_MASTER_HALF_DUPLEX; -	master->mem_ops = &rockchip_sfc_mem_ops; -	master->dev.of_node = pdev->dev.of_node; -	master->mode_bits = SPI_TX_QUAD | SPI_TX_DUAL | SPI_RX_QUAD | SPI_RX_DUAL; -	master->max_speed_hz = SFC_MAX_SPEED; -	master->num_chipselect = SFC_MAX_CHIPSELECT_NUM; +	host->flags = SPI_CONTROLLER_HALF_DUPLEX; +	host->mem_ops = &rockchip_sfc_mem_ops; +	host->dev.of_node = pdev->dev.of_node; +	host->mode_bits = SPI_TX_QUAD | SPI_TX_DUAL | SPI_RX_QUAD | SPI_RX_DUAL; +	host->max_speed_hz = SFC_MAX_SPEED; +	host->num_chipselect = SFC_MAX_CHIPSELECT_NUM; -	sfc = spi_master_get_devdata(master); +	sfc = spi_controller_get_devdata(host);  	sfc->dev = dev;  	sfc->regbase = devm_platform_ioremap_resource(pdev, 0); @@ -640,7 +640,7 @@ static int rockchip_sfc_probe(struct platform_device *pdev)  	sfc->max_iosize = rockchip_sfc_get_max_iosize(sfc);  	sfc->version = rockchip_sfc_get_version(sfc); -	ret = spi_register_master(master); +	ret = spi_register_controller(host);  	if (ret)  		goto err_irq; @@ -656,10 +656,10 @@ err_hclk:  static void rockchip_sfc_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); +	struct spi_controller *host = platform_get_drvdata(pdev);  	struct rockchip_sfc *sfc = platform_get_drvdata(pdev); -	spi_unregister_master(master); +	spi_unregister_controller(host);  	clk_disable_unprepare(sfc->clk);  	clk_disable_unprepare(sfc->hclk); diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 143ede958ac1..5b010094dace 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -104,8 +104,8 @@  #define CR0_XFM_RO					0x2  #define CR0_OPM_OFFSET				20 -#define CR0_OPM_MASTER				0x0 -#define CR0_OPM_SLAVE				0x1 +#define CR0_OPM_HOST				0x0 +#define CR0_OPM_TARGET				0x1  #define CR0_SOI_OFFSET				23 @@ -125,7 +125,7 @@  #define SR_TF_EMPTY					(1 << 2)  #define SR_RF_EMPTY					(1 << 3)  #define SR_RF_FULL					(1 << 4) -#define SR_SLAVE_TX_BUSY				(1 << 5) +#define SR_TARGET_TX_BUSY				(1 << 5)  /* Bit fields in ISR, IMR, ISR, RISR, 5bit */  #define INT_MASK					0x1f @@ -151,7 +151,7 @@  #define RXDMA					(1 << 0)  #define TXDMA					(1 << 1) -/* sclk_out: spi master internal logic in rk3x can support 50Mhz */ +/* sclk_out: spi host internal logic in rk3x can support 50Mhz */  #define MAX_SCLK_OUT				50000000U  /* @@ -194,8 +194,8 @@ struct rockchip_spi {  	bool cs_asserted[ROCKCHIP_SPI_MAX_CS_NUM]; -	bool slave_abort; -	bool cs_inactive; /* spi slave tansmition stop when cs inactive */ +	bool target_abort; +	bool cs_inactive; /* spi target tansmition stop when cs inactive */  	bool cs_high_supported; /* native CS supports active-high polarity */  	struct spi_transfer *xfer; /* Store xfer temporarily */ @@ -206,13 +206,13 @@ static inline void spi_enable_chip(struct rockchip_spi *rs, bool enable)  	writel_relaxed((enable ? 1U : 0U), rs->regs + ROCKCHIP_SPI_SSIENR);  } -static inline void wait_for_tx_idle(struct rockchip_spi *rs, bool slave_mode) +static inline void wait_for_tx_idle(struct rockchip_spi *rs, bool target_mode)  {  	unsigned long timeout = jiffies + msecs_to_jiffies(5);  	do { -		if (slave_mode) { -			if (!(readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_SLAVE_TX_BUSY) && +		if (target_mode) { +			if (!(readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_TARGET_TX_BUSY) &&  			    !((readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY)))  				return;  		} else { @@ -351,9 +351,9 @@ static irqreturn_t rockchip_spi_isr(int irq, void *dev_id)  	struct spi_controller *ctlr = dev_id;  	struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); -	/* When int_cs_inactive comes, spi slave abort */ +	/* When int_cs_inactive comes, spi target abort */  	if (rs->cs_inactive && readl_relaxed(rs->regs + ROCKCHIP_SPI_IMR) & INT_CS_INACTIVE) { -		ctlr->slave_abort(ctlr); +		ctlr->target_abort(ctlr);  		writel_relaxed(0, rs->regs + ROCKCHIP_SPI_IMR);  		writel_relaxed(0xffffffff, rs->regs + ROCKCHIP_SPI_ICR); @@ -405,7 +405,7 @@ static void rockchip_spi_dma_rxcb(void *data)  	struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);  	int state = atomic_fetch_andnot(RXDMA, &rs->state); -	if (state & TXDMA && !rs->slave_abort) +	if (state & TXDMA && !rs->target_abort)  		return;  	if (rs->cs_inactive) @@ -421,11 +421,11 @@ static void rockchip_spi_dma_txcb(void *data)  	struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);  	int state = atomic_fetch_andnot(TXDMA, &rs->state); -	if (state & RXDMA && !rs->slave_abort) +	if (state & RXDMA && !rs->target_abort)  		return;  	/* Wait until the FIFO data completely. */ -	wait_for_tx_idle(rs, ctlr->slave); +	wait_for_tx_idle(rs, ctlr->target);  	spi_enable_chip(rs, false);  	spi_finalize_current_transfer(ctlr); @@ -525,7 +525,7 @@ static int rockchip_spi_prepare_dma(struct rockchip_spi *rs,  static int rockchip_spi_config(struct rockchip_spi *rs,  		struct spi_device *spi, struct spi_transfer *xfer, -		bool use_dma, bool slave_mode) +		bool use_dma, bool target_mode)  {  	u32 cr0 = CR0_FRF_SPI  << CR0_FRF_OFFSET  		| CR0_BHT_8BIT << CR0_BHT_OFFSET @@ -534,9 +534,9 @@ static int rockchip_spi_config(struct rockchip_spi *rs,  	u32 cr1;  	u32 dmacr = 0; -	if (slave_mode) -		cr0 |= CR0_OPM_SLAVE << CR0_OPM_OFFSET; -	rs->slave_abort = false; +	if (target_mode) +		cr0 |= CR0_OPM_TARGET << CR0_OPM_OFFSET; +	rs->target_abort = false;  	cr0 |= rs->rsd << CR0_RSD_OFFSET;  	cr0 |= (spi->mode & 0x3U) << CR0_SCPH_OFFSET; @@ -614,7 +614,7 @@ static size_t rockchip_spi_max_transfer_size(struct spi_device *spi)  	return ROCKCHIP_SPI_MAX_TRANLEN;  } -static int rockchip_spi_slave_abort(struct spi_controller *ctlr) +static int rockchip_spi_target_abort(struct spi_controller *ctlr)  {  	struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);  	u32 rx_fifo_left; @@ -659,7 +659,7 @@ out:  		dmaengine_terminate_sync(ctlr->dma_tx);  	atomic_set(&rs->state, 0);  	spi_enable_chip(rs, false); -	rs->slave_abort = true; +	rs->target_abort = true;  	spi_finalize_current_transfer(ctlr);  	return 0; @@ -697,7 +697,7 @@ static int rockchip_spi_transfer_one(  	rs->xfer = xfer;  	use_dma = ctlr->can_dma ? ctlr->can_dma(ctlr, spi, xfer) : false; -	ret = rockchip_spi_config(rs, spi, xfer, use_dma, ctlr->slave); +	ret = rockchip_spi_config(rs, spi, xfer, use_dma, ctlr->target);  	if (ret)  		return ret; @@ -757,15 +757,15 @@ static int rockchip_spi_probe(struct platform_device *pdev)  	struct resource *mem;  	struct device_node *np = pdev->dev.of_node;  	u32 rsd_nsecs, num_cs; -	bool slave_mode; +	bool target_mode; -	slave_mode = of_property_read_bool(np, "spi-slave"); +	target_mode = of_property_read_bool(np, "spi-slave"); -	if (slave_mode) -		ctlr = spi_alloc_slave(&pdev->dev, +	if (target_mode) +		ctlr = spi_alloc_target(&pdev->dev,  				sizeof(struct rockchip_spi));  	else -		ctlr = spi_alloc_master(&pdev->dev, +		ctlr = spi_alloc_host(&pdev->dev,  				sizeof(struct rockchip_spi));  	if (!ctlr) @@ -854,11 +854,11 @@ static int rockchip_spi_probe(struct platform_device *pdev)  	ctlr->auto_runtime_pm = true;  	ctlr->bus_num = pdev->id;  	ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_LSB_FIRST; -	if (slave_mode) { +	if (target_mode) {  		ctlr->mode_bits |= SPI_NO_CS; -		ctlr->slave_abort = rockchip_spi_slave_abort; +		ctlr->target_abort = rockchip_spi_target_abort;  	} else { -		ctlr->flags = SPI_MASTER_GPIO_SS; +		ctlr->flags = SPI_CONTROLLER_GPIO_SS;  		ctlr->max_native_cs = ROCKCHIP_SPI_MAX_CS_NUM;  		/*  		 * rk spi0 has two native cs, spi1..5 one cs only @@ -911,7 +911,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)  	case ROCKCHIP_SPI_VER2_TYPE2:  		rs->cs_high_supported = true;  		ctlr->mode_bits |= SPI_CS_HIGH; -		if (ctlr->can_dma && slave_mode) +		if (ctlr->can_dma && target_mode)  			rs->cs_inactive = true;  		else  			rs->cs_inactive = false; diff --git a/drivers/spi/spi-rpc-if.c b/drivers/spi/spi-rpc-if.c index 2f78124a1b59..e11146932828 100644 --- a/drivers/spi/spi-rpc-if.c +++ b/drivers/spi/spi-rpc-if.c @@ -134,7 +134,7 @@ static int rpcif_spi_probe(struct platform_device *pdev)  	struct rpcif *rpc;  	int error; -	ctlr = devm_spi_alloc_master(&pdev->dev, sizeof(*rpc)); +	ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(*rpc));  	if (!ctlr)  		return -ENOMEM; diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c index 08ceebbaf69b..8e81f1a8623f 100644 --- a/drivers/spi/spi-rspi.c +++ b/drivers/spi/spi-rspi.c @@ -19,7 +19,7 @@  #include <linux/clk.h>  #include <linux/dmaengine.h>  #include <linux/dma-mapping.h> -#include <linux/of_device.h> +#include <linux/of.h>  #include <linux/pm_runtime.h>  #include <linux/reset.h>  #include <linux/sh_dma.h> @@ -1294,7 +1294,7 @@ static int rspi_probe(struct platform_device *pdev)  	const struct spi_ops *ops;  	unsigned long clksrc; -	ctlr = spi_alloc_master(&pdev->dev, sizeof(struct rspi_data)); +	ctlr = spi_alloc_host(&pdev->dev, sizeof(struct rspi_data));  	if (ctlr == NULL)  		return -ENOMEM; @@ -1317,8 +1317,7 @@ static int rspi_probe(struct platform_device *pdev)  	rspi->ops = ops;  	rspi->ctlr = ctlr; -	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	rspi->addr = devm_ioremap_resource(&pdev->dev, res); +	rspi->addr = devm_platform_get_and_ioremap_resource(pdev, 0, &res);  	if (IS_ERR(rspi->addr)) {  		ret = PTR_ERR(rspi->addr);  		goto error1; diff --git a/drivers/spi/spi-rzv2m-csi.c b/drivers/spi/spi-rzv2m-csi.c index 14ad65da930d..d0f51b17aa7c 100644 --- a/drivers/spi/spi-rzv2m-csi.c +++ b/drivers/spi/spi-rzv2m-csi.c @@ -5,13 +5,17 @@   * Copyright (C) 2023 Renesas Electronics Corporation   */ +#include <linux/bits.h>  #include <linux/clk.h>  #include <linux/count_zeros.h>  #include <linux/interrupt.h>  #include <linux/iopoll.h> +#include <linux/log2.h>  #include <linux/platform_device.h> +#include <linux/property.h>  #include <linux/reset.h>  #include <linux/spi/spi.h> +#include <linux/units.h>  /* Registers */  #define CSI_MODE		0x00	/* CSI mode control */ @@ -36,6 +40,7 @@  /* CSI_CLKSEL */  #define CSI_CLKSEL_CKP		BIT(17)  #define CSI_CLKSEL_DAP		BIT(16) +#define CSI_CLKSEL_MODE		(CSI_CLKSEL_CKP|CSI_CLKSEL_DAP)  #define CSI_CLKSEL_SLAVE	BIT(15)  #define CSI_CLKSEL_CKS		GENMASK(14, 1) @@ -60,17 +65,22 @@  /* CSI_FIFOTRG */  #define CSI_FIFOTRG_R_TRG       GENMASK(2, 0) -#define CSI_FIFO_SIZE_BYTES	32 -#define CSI_FIFO_HALF_SIZE	16 +#define CSI_FIFO_SIZE_BYTES	32U +#define CSI_FIFO_HALF_SIZE	16U  #define CSI_EN_DIS_TIMEOUT_US	100 -#define CSI_CKS_MAX		0x3FFF +/* + * Clock "csiclk" gets divided by 2 * CSI_CLKSEL_CKS in order to generate the + * serial clock (output from master), with CSI_CLKSEL_CKS ranging from 0x1 (that + * means "csiclk" is divided by 2) to 0x3FFF ("csiclk" is divided by 32766). + */ +#define CSI_CKS_MAX		GENMASK(13, 0)  #define UNDERRUN_ERROR		BIT(0)  #define OVERFLOW_ERROR		BIT(1)  #define TX_TIMEOUT_ERROR	BIT(2)  #define RX_TIMEOUT_ERROR	BIT(3) -#define CSI_MAX_SPI_SCKO	8000000 +#define CSI_MAX_SPI_SCKO	(8 * HZ_PER_MHZ)  struct rzv2m_csi_priv {  	void __iomem *base; @@ -78,33 +88,19 @@ struct rzv2m_csi_priv {  	struct clk *pclk;  	struct device *dev;  	struct spi_controller *controller; -	const u8 *txbuf; -	u8 *rxbuf; -	int buffer_len; -	int bytes_sent; -	int bytes_received; -	int bytes_to_transfer; -	int words_to_transfer; -	unsigned char bytes_per_word; +	const void *txbuf; +	void *rxbuf; +	unsigned int buffer_len; +	unsigned int bytes_sent; +	unsigned int bytes_received; +	unsigned int bytes_to_transfer; +	unsigned int words_to_transfer; +	unsigned int bytes_per_word;  	wait_queue_head_t wait; -	u8 errors; +	u32 errors;  	u32 status;  }; -static const unsigned char x_trg[] = { -	0, 1, 1, 2, 2, 2, 2, 3, -	3, 3, 3, 3, 3, 3, 3, 4, -	4, 4, 4, 4, 4, 4, 4, 4, -	4, 4, 4, 4, 4, 4, 4, 5 -}; - -static const unsigned char x_trg_words[] = { -	1,  2,  2,  4,  4,  4,  4,  8, -	8,  8,  8,  8,  8,  8,  8,  16, -	16, 16, 16, 16, 16, 16, 16, 16, -	16, 16, 16, 16, 16, 16, 16, 32 -}; -  static void rzv2m_csi_reg_write_bit(const struct rzv2m_csi_priv *csi,  				    int reg_offs, int bit_mask, u32 value)  { @@ -124,13 +120,12 @@ static int rzv2m_csi_sw_reset(struct rzv2m_csi_priv *csi, int assert)  	rzv2m_csi_reg_write_bit(csi, CSI_CNT, CSI_CNT_CSIRST, assert); -	if (assert) { -		return readl_poll_timeout(csi->base + CSI_MODE, reg, -					  !(reg & CSI_MODE_CSOT), 0, -					  CSI_EN_DIS_TIMEOUT_US); -	} +	if (!assert) +		return 0; -	return 0; +	return readl_poll_timeout(csi->base + CSI_MODE, reg, +				  !(reg & CSI_MODE_CSOT), 0, +				  CSI_EN_DIS_TIMEOUT_US);  }  static int rzv2m_csi_start_stop_operation(const struct rzv2m_csi_priv *csi, @@ -140,28 +135,28 @@ static int rzv2m_csi_start_stop_operation(const struct rzv2m_csi_priv *csi,  	rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_CSIE, enable); -	if (!enable && wait) -		return readl_poll_timeout(csi->base + CSI_MODE, reg, -					  !(reg & CSI_MODE_CSOT), 0, -					  CSI_EN_DIS_TIMEOUT_US); +	if (enable || !wait) +		return 0; -	return 0; +	return readl_poll_timeout(csi->base + CSI_MODE, reg, +				  !(reg & CSI_MODE_CSOT), 0, +				  CSI_EN_DIS_TIMEOUT_US);  }  static int rzv2m_csi_fill_txfifo(struct rzv2m_csi_priv *csi)  { -	int i; +	unsigned int i;  	if (readl(csi->base + CSI_OFIFOL))  		return -EIO;  	if (csi->bytes_per_word == 2) { -		u16 *buf = (u16 *)csi->txbuf; +		const u16 *buf = csi->txbuf;  		for (i = 0; i < csi->words_to_transfer; i++)  			writel(buf[i], csi->base + CSI_OFIFO);  	} else { -		u8 *buf = (u8 *)csi->txbuf; +		const u8 *buf = csi->txbuf;  		for (i = 0; i < csi->words_to_transfer; i++)  			writel(buf[i], csi->base + CSI_OFIFO); @@ -175,18 +170,18 @@ static int rzv2m_csi_fill_txfifo(struct rzv2m_csi_priv *csi)  static int rzv2m_csi_read_rxfifo(struct rzv2m_csi_priv *csi)  { -	int i; +	unsigned int i;  	if (readl(csi->base + CSI_IFIFOL) != csi->bytes_to_transfer)  		return -EIO;  	if (csi->bytes_per_word == 2) { -		u16 *buf = (u16 *)csi->rxbuf; +		u16 *buf = csi->rxbuf;  		for (i = 0; i < csi->words_to_transfer; i++)  			buf[i] = (u16)readl(csi->base + CSI_IFIFO);  	} else { -		u8 *buf = (u8 *)csi->rxbuf; +		u8 *buf = csi->rxbuf;  		for (i = 0; i < csi->words_to_transfer; i++)  			buf[i] = (u8)readl(csi->base + CSI_IFIFO); @@ -200,9 +195,9 @@ static int rzv2m_csi_read_rxfifo(struct rzv2m_csi_priv *csi)  static inline void rzv2m_csi_calc_current_transfer(struct rzv2m_csi_priv *csi)  { -	int bytes_transferred = max_t(int, csi->bytes_received, csi->bytes_sent); -	int bytes_remaining = csi->buffer_len - bytes_transferred; -	int to_transfer; +	unsigned int bytes_transferred = max(csi->bytes_received, csi->bytes_sent); +	unsigned int bytes_remaining = csi->buffer_len - bytes_transferred; +	unsigned int to_transfer;  	if (csi->txbuf)  		/* @@ -210,9 +205,9 @@ static inline void rzv2m_csi_calc_current_transfer(struct rzv2m_csi_priv *csi)  		 * hard to raise an overflow error (which is only possible  		 * when IP transmits and receives at the same time).  		 */ -		to_transfer = min_t(int, CSI_FIFO_HALF_SIZE, bytes_remaining); +		to_transfer = min(CSI_FIFO_HALF_SIZE, bytes_remaining);  	else -		to_transfer = min_t(int, CSI_FIFO_SIZE_BYTES, bytes_remaining); +		to_transfer = min(CSI_FIFO_SIZE_BYTES, bytes_remaining);  	if (csi->bytes_per_word == 2)  		to_transfer >>= 1; @@ -223,7 +218,7 @@ static inline void rzv2m_csi_calc_current_transfer(struct rzv2m_csi_priv *csi)  	 * less than or equal to the number of bytes we need to transfer.  	 * This may result in multiple smaller transfers.  	 */ -	csi->words_to_transfer = x_trg_words[to_transfer - 1]; +	csi->words_to_transfer = rounddown_pow_of_two(to_transfer);  	if (csi->bytes_per_word == 2)  		csi->bytes_to_transfer = csi->words_to_transfer << 1; @@ -234,7 +229,7 @@ static inline void rzv2m_csi_calc_current_transfer(struct rzv2m_csi_priv *csi)  static inline void rzv2m_csi_set_rx_fifo_trigger_level(struct rzv2m_csi_priv *csi)  {  	rzv2m_csi_reg_write_bit(csi, CSI_FIFOTRG, CSI_FIFOTRG_R_TRG, -				x_trg[csi->words_to_transfer - 1]); +				ilog2(csi->words_to_transfer));  }  static inline void rzv2m_csi_enable_rx_trigger(struct rzv2m_csi_priv *csi, @@ -307,7 +302,6 @@ static int rzv2m_csi_wait_for_tx_empty(struct rzv2m_csi_priv *csi)  		return 0;  	ret = rzv2m_csi_wait_for_interrupt(csi, CSI_INT_TREND, CSI_CNT_TREND_E); -  	if (ret == -ETIMEDOUT)  		csi->errors |= TX_TIMEOUT_ERROR; @@ -323,7 +317,6 @@ static inline int rzv2m_csi_wait_for_rx_ready(struct rzv2m_csi_priv *csi)  	ret = rzv2m_csi_wait_for_interrupt(csi, CSI_INT_R_TRGR,  					   CSI_CNT_R_TRGR_E); -  	if (ret == -ETIMEDOUT)  		csi->errors |= RX_TIMEOUT_ERROR; @@ -332,7 +325,7 @@ static inline int rzv2m_csi_wait_for_rx_ready(struct rzv2m_csi_priv *csi)  static irqreturn_t rzv2m_csi_irq_handler(int irq, void *data)  { -	struct rzv2m_csi_priv *csi = (struct rzv2m_csi_priv *)data; +	struct rzv2m_csi_priv *csi = data;  	csi->status = readl(csi->base + CSI_INT);  	rzv2m_csi_disable_irqs(csi, csi->status); @@ -402,10 +395,8 @@ static int rzv2m_csi_setup(struct spi_device *spi)  	writel(CSI_MODE_SETUP, csi->base + CSI_MODE);  	/* Setup clock polarity and phase timing */ -	rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_CKP, -				!(spi->mode & SPI_CPOL)); -	rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_DAP, -				!(spi->mode & SPI_CPHA)); +	rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_MODE, +				~spi->mode & SPI_MODE_X_MASK);  	/* Setup serial data order */  	rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_DIR, @@ -433,8 +424,8 @@ static int rzv2m_csi_setup(struct spi_device *spi)  static int rzv2m_csi_pio_transfer(struct rzv2m_csi_priv *csi)  { -	bool tx_completed = csi->txbuf ? false : true; -	bool rx_completed = csi->rxbuf ? false : true; +	bool tx_completed = !csi->txbuf; +	bool rx_completed = !csi->rxbuf;  	int ret = 0;  	/* Make sure the TX FIFO is empty */ @@ -564,7 +555,7 @@ static int rzv2m_csi_probe(struct platform_device *pdev)  	int irq;  	int ret; -	controller = devm_spi_alloc_master(dev, sizeof(*csi)); +	controller = devm_spi_alloc_host(dev, sizeof(*csi));  	if (!controller)  		return -ENOMEM; @@ -599,12 +590,13 @@ static int rzv2m_csi_probe(struct platform_device *pdev)  	init_waitqueue_head(&csi->wait);  	controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST; -	controller->dev.of_node = pdev->dev.of_node;  	controller->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8);  	controller->setup = rzv2m_csi_setup;  	controller->transfer_one = rzv2m_csi_transfer_one;  	controller->use_gpio_descriptors = true; +	device_set_node(&controller->dev, dev_fwnode(dev)); +  	ret = devm_request_irq(dev, irq, rzv2m_csi_irq_handler, 0,  			       dev_name(dev), csi);  	if (ret) @@ -635,15 +627,13 @@ static int rzv2m_csi_probe(struct platform_device *pdev)  	return 0;  } -static int rzv2m_csi_remove(struct platform_device *pdev) +static void rzv2m_csi_remove(struct platform_device *pdev)  {  	struct rzv2m_csi_priv *csi = platform_get_drvdata(pdev);  	spi_unregister_controller(csi->controller);  	rzv2m_csi_sw_reset(csi, 1);  	clk_disable_unprepare(csi->csiclk); - -	return 0;  }  static const struct of_device_id rzv2m_csi_match[] = { @@ -654,7 +644,7 @@ MODULE_DEVICE_TABLE(of, rzv2m_csi_match);  static struct platform_driver rzv2m_csi_drv = {  	.probe = rzv2m_csi_probe, -	.remove = rzv2m_csi_remove, +	.remove_new = rzv2m_csi_remove,  	.driver = {  		.name = "rzv2m_csi",  		.of_match_table = rzv2m_csi_match, diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c index b6c2659a66ca..0e48ffd499b9 100644 --- a/drivers/spi/spi-s3c64xx.c +++ b/drivers/spi/spi-s3c64xx.c @@ -14,7 +14,6 @@  #include <linux/pm_runtime.h>  #include <linux/spi/spi.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_data/spi-s3c64xx.h> @@ -164,9 +163,9 @@ struct s3c64xx_spi_port_config {   * struct s3c64xx_spi_driver_data - Runtime info holder for SPI driver.   * @clk: Pointer to the spi clock.   * @src_clk: Pointer to the clock used to generate SPI signals. - * @ioclk: Pointer to the i/o clock between master and slave + * @ioclk: Pointer to the i/o clock between host and target   * @pdev: Pointer to device's platform device data - * @master: Pointer to the SPI Protocol master. + * @host: Pointer to the SPI Protocol host.   * @cntrlr_info: Platform specific data for the controller this driver manages.   * @lock: Controller specific lock.   * @state: Set of FLAGS to indicate status. @@ -187,7 +186,7 @@ struct s3c64xx_spi_driver_data {  	struct clk                      *src_clk;  	struct clk                      *ioclk;  	struct platform_device          *pdev; -	struct spi_master               *master; +	struct spi_controller           *host;  	struct s3c64xx_spi_info         *cntrlr_info;  	spinlock_t                      lock;  	unsigned long                   sfr_start; @@ -330,7 +329,7 @@ static int prepare_dma(struct s3c64xx_spi_dma_data *dma,  static void s3c64xx_spi_set_cs(struct spi_device *spi, bool enable)  {  	struct s3c64xx_spi_driver_data *sdd = -					spi_master_get_devdata(spi->master); +					spi_controller_get_devdata(spi->controller);  	if (sdd->cntrlr_info->no_cs)  		return; @@ -352,9 +351,9 @@ static void s3c64xx_spi_set_cs(struct spi_device *spi, bool enable)  	}  } -static int s3c64xx_spi_prepare_transfer(struct spi_master *spi) +static int s3c64xx_spi_prepare_transfer(struct spi_controller *spi)  { -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(spi); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(spi);  	if (is_polling(sdd))  		return 0; @@ -382,9 +381,9 @@ static int s3c64xx_spi_prepare_transfer(struct spi_master *spi)  	return 0;  } -static int s3c64xx_spi_unprepare_transfer(struct spi_master *spi) +static int s3c64xx_spi_unprepare_transfer(struct spi_controller *spi)  { -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(spi); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(spi);  	if (is_polling(sdd))  		return 0; @@ -400,11 +399,11 @@ static int s3c64xx_spi_unprepare_transfer(struct spi_master *spi)  	return 0;  } -static bool s3c64xx_spi_can_dma(struct spi_master *master, +static bool s3c64xx_spi_can_dma(struct spi_controller *host,  				struct spi_device *spi,  				struct spi_transfer *xfer)  { -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	if (sdd->rx_dma.ch && sdd->tx_dma.ch) {  		return xfer->len > (FIFO_LVL_MASK(sdd) >> 1) + 1; @@ -713,10 +712,10 @@ static int s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)  #define XFER_DMAADDR_INVALID DMA_BIT_MASK(32) -static int s3c64xx_spi_prepare_message(struct spi_master *master, +static int s3c64xx_spi_prepare_message(struct spi_controller *host,  				       struct spi_message *msg)  { -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	struct spi_device *spi = msg->spi;  	struct s3c64xx_spi_csinfo *cs = spi->controller_data; @@ -737,11 +736,11 @@ static size_t s3c64xx_spi_max_transfer_size(struct spi_device *spi)  	return ctlr->can_dma ? S3C64XX_SPI_PACKET_CNT_MASK : SIZE_MAX;  } -static int s3c64xx_spi_transfer_one(struct spi_master *master, +static int s3c64xx_spi_transfer_one(struct spi_controller *host,  				    struct spi_device *spi,  				    struct spi_transfer *xfer)  { -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	const unsigned int fifo_len = (FIFO_LVL_MASK(sdd) >> 1) + 1;  	const void *tx_buf = NULL;  	void *rx_buf = NULL; @@ -891,15 +890,15 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master,  	return status;  } -static struct s3c64xx_spi_csinfo *s3c64xx_get_slave_ctrldata( +static struct s3c64xx_spi_csinfo *s3c64xx_get_target_ctrldata(  				struct spi_device *spi)  {  	struct s3c64xx_spi_csinfo *cs; -	struct device_node *slave_np, *data_np = NULL; +	struct device_node *target_np, *data_np = NULL;  	u32 fb_delay = 0; -	slave_np = spi->dev.of_node; -	if (!slave_np) { +	target_np = spi->dev.of_node; +	if (!target_np) {  		dev_err(&spi->dev, "device node not found\n");  		return ERR_PTR(-EINVAL);  	} @@ -908,7 +907,7 @@ static struct s3c64xx_spi_csinfo *s3c64xx_get_slave_ctrldata(  	if (!cs)  		return ERR_PTR(-ENOMEM); -	data_np = of_get_child_by_name(slave_np, "controller-data"); +	data_np = of_get_child_by_name(target_np, "controller-data");  	if (!data_np) {  		dev_info(&spi->dev, "feedback delay set to default (0)\n");  		return cs; @@ -933,9 +932,9 @@ static int s3c64xx_spi_setup(struct spi_device *spi)  	int err;  	int div; -	sdd = spi_master_get_devdata(spi->master); +	sdd = spi_controller_get_devdata(spi->controller);  	if (spi->dev.of_node) { -		cs = s3c64xx_get_slave_ctrldata(spi); +		cs = s3c64xx_get_target_ctrldata(spi);  		spi->controller_data = cs;  	} @@ -1023,7 +1022,7 @@ static void s3c64xx_spi_cleanup(struct spi_device *spi)  static irqreturn_t s3c64xx_spi_irq(int irq, void *data)  {  	struct s3c64xx_spi_driver_data *sdd = data; -	struct spi_master *spi = sdd->master; +	struct spi_controller *spi = sdd->host;  	unsigned int val, clr = 0;  	val = readl(sdd->regs + S3C64XX_SPI_STATUS); @@ -1152,7 +1151,7 @@ static int s3c64xx_spi_probe(struct platform_device *pdev)  	struct resource	*mem_res;  	struct s3c64xx_spi_driver_data *sdd;  	struct s3c64xx_spi_info *sci = dev_get_platdata(&pdev->dev); -	struct spi_master *master; +	struct spi_controller *host;  	int ret, irq;  	char clk_name[16]; @@ -1166,28 +1165,22 @@ static int s3c64xx_spi_probe(struct platform_device *pdev)  		return dev_err_probe(&pdev->dev, -ENODEV,  				     "Platform_data missing!\n"); -	mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!mem_res) -		return dev_err_probe(&pdev->dev, -ENXIO, -				     "Unable to get SPI MEM resource\n"); -  	irq = platform_get_irq(pdev, 0);  	if (irq < 0) -		return dev_err_probe(&pdev->dev, irq, "Failed to get IRQ\n"); +		return irq; -	master = devm_spi_alloc_master(&pdev->dev, sizeof(*sdd)); -	if (!master) +	host = devm_spi_alloc_host(&pdev->dev, sizeof(*sdd)); +	if (!host)  		return dev_err_probe(&pdev->dev, -ENOMEM, -				     "Unable to allocate SPI Master\n"); +				     "Unable to allocate SPI Host\n"); -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host); -	sdd = spi_master_get_devdata(master); +	sdd = spi_controller_get_devdata(host);  	sdd->port_conf = s3c64xx_spi_get_port_config(pdev); -	sdd->master = master; +	sdd->host = host;  	sdd->cntrlr_info = sci;  	sdd->pdev = pdev; -	sdd->sfr_start = mem_res->start;  	if (pdev->dev.of_node) {  		ret = of_alias_get_id(pdev->dev.of_node, "spi");  		if (ret < 0) @@ -1203,31 +1196,32 @@ static int s3c64xx_spi_probe(struct platform_device *pdev)  	sdd->tx_dma.direction = DMA_MEM_TO_DEV;  	sdd->rx_dma.direction = DMA_DEV_TO_MEM; -	master->dev.of_node = pdev->dev.of_node; -	master->bus_num = sdd->port_id; -	master->setup = s3c64xx_spi_setup; -	master->cleanup = s3c64xx_spi_cleanup; -	master->prepare_transfer_hardware = s3c64xx_spi_prepare_transfer; -	master->unprepare_transfer_hardware = s3c64xx_spi_unprepare_transfer; -	master->prepare_message = s3c64xx_spi_prepare_message; -	master->transfer_one = s3c64xx_spi_transfer_one; -	master->max_transfer_size = s3c64xx_spi_max_transfer_size; -	master->num_chipselect = sci->num_cs; -	master->use_gpio_descriptors = true; -	master->dma_alignment = 8; -	master->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(16) | -					SPI_BPW_MASK(8); +	host->dev.of_node = pdev->dev.of_node; +	host->bus_num = sdd->port_id; +	host->setup = s3c64xx_spi_setup; +	host->cleanup = s3c64xx_spi_cleanup; +	host->prepare_transfer_hardware = s3c64xx_spi_prepare_transfer; +	host->unprepare_transfer_hardware = s3c64xx_spi_unprepare_transfer; +	host->prepare_message = s3c64xx_spi_prepare_message; +	host->transfer_one = s3c64xx_spi_transfer_one; +	host->max_transfer_size = s3c64xx_spi_max_transfer_size; +	host->num_chipselect = sci->num_cs; +	host->use_gpio_descriptors = true; +	host->dma_alignment = 8; +	host->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(16) | +				   SPI_BPW_MASK(8);  	/* the spi->mode bits understood by this driver: */ -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; +	host->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;  	if (sdd->port_conf->has_loopback) -		master->mode_bits |= SPI_LOOP; -	master->auto_runtime_pm = true; +		host->mode_bits |= SPI_LOOP; +	host->auto_runtime_pm = true;  	if (!is_polling(sdd)) -		master->can_dma = s3c64xx_spi_can_dma; +		host->can_dma = s3c64xx_spi_can_dma; -	sdd->regs = devm_ioremap_resource(&pdev->dev, mem_res); +	sdd->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &mem_res);  	if (IS_ERR(sdd->regs))  		return PTR_ERR(sdd->regs); +	sdd->sfr_start = mem_res->start;  	if (sci->cfg_gpio && sci->cfg_gpio())  		return dev_err_probe(&pdev->dev, -EBUSY, @@ -1277,14 +1271,14 @@ static int s3c64xx_spi_probe(struct platform_device *pdev)  	       S3C64XX_SPI_INT_TX_OVERRUN_EN | S3C64XX_SPI_INT_TX_UNDERRUN_EN,  	       sdd->regs + S3C64XX_SPI_INT_EN); -	ret = devm_spi_register_master(&pdev->dev, master); +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (ret != 0) { -		dev_err(&pdev->dev, "cannot register SPI master: %d\n", ret); +		dev_err(&pdev->dev, "cannot register SPI host: %d\n", ret);  		goto err_pm_put;  	} -	dev_dbg(&pdev->dev, "Samsung SoC SPI Driver loaded for Bus SPI-%d with %d Slaves attached\n", -					sdd->port_id, master->num_chipselect); +	dev_dbg(&pdev->dev, "Samsung SoC SPI Driver loaded for Bus SPI-%d with %d Targets attached\n", +					sdd->port_id, host->num_chipselect);  	dev_dbg(&pdev->dev, "\tIOmem=[%pR]\tFIFO %dbytes\n",  					mem_res, (FIFO_LVL_MASK(sdd) >> 1) + 1); @@ -1303,8 +1297,8 @@ err_pm_put:  static void s3c64xx_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	pm_runtime_get_sync(&pdev->dev); @@ -1323,10 +1317,10 @@ static void s3c64xx_spi_remove(struct platform_device *pdev)  #ifdef CONFIG_PM_SLEEP  static int s3c64xx_spi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host); -	int ret = spi_master_suspend(master); +	int ret = spi_controller_suspend(host);  	if (ret)  		return ret; @@ -1341,8 +1335,8 @@ static int s3c64xx_spi_suspend(struct device *dev)  static int s3c64xx_spi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	struct s3c64xx_spi_info *sci = sdd->cntrlr_info;  	int ret; @@ -1353,15 +1347,15 @@ static int s3c64xx_spi_resume(struct device *dev)  	if (ret < 0)  		return ret; -	return spi_master_resume(master); +	return spi_controller_resume(host);  }  #endif /* CONFIG_PM_SLEEP */  #ifdef CONFIG_PM  static int s3c64xx_spi_runtime_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	clk_disable_unprepare(sdd->clk);  	clk_disable_unprepare(sdd->src_clk); @@ -1372,8 +1366,8 @@ static int s3c64xx_spi_runtime_suspend(struct device *dev)  static int s3c64xx_spi_runtime_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct s3c64xx_spi_driver_data *sdd = spi_controller_get_devdata(host);  	int ret;  	if (sdd->port_conf->clk_ioclk) { diff --git a/drivers/spi/spi-sc18is602.c b/drivers/spi/spi-sc18is602.c index d52ed67243f7..eecf9ea95ae3 100644 --- a/drivers/spi/spi-sc18is602.c +++ b/drivers/spi/spi-sc18is602.c @@ -12,7 +12,6 @@  #include <linux/i2c.h>  #include <linux/delay.h>  #include <linux/pm_runtime.h> -#include <linux/of_device.h>  #include <linux/of.h>  #include <linux/platform_data/sc18is602.h>  #include <linux/gpio/consumer.h> @@ -31,7 +30,7 @@ enum chips { sc18is602, sc18is602b, sc18is603 };  #define SC18IS602_MODE_CLOCK_DIV_128	0x3  struct sc18is602 { -	struct spi_master	*master; +	struct spi_controller	*host;  	struct device		*dev;  	u8			ctrl;  	u32			freq; @@ -180,10 +179,10 @@ static int sc18is602_check_transfer(struct spi_device *spi,  	return 0;  } -static int sc18is602_transfer_one(struct spi_master *master, +static int sc18is602_transfer_one(struct spi_controller *host,  				  struct spi_message *m)  { -	struct sc18is602 *hw = spi_master_get_devdata(master); +	struct sc18is602 *hw = spi_controller_get_devdata(host);  	struct spi_device *spi = m->spi;  	struct spi_transfer *t;  	int status = 0; @@ -214,7 +213,7 @@ static int sc18is602_transfer_one(struct spi_master *master,  		spi_transfer_delay_exec(t);  	}  	m->status = status; -	spi_finalize_current_message(master); +	spi_finalize_current_message(host);  	return status;  } @@ -226,7 +225,7 @@ static size_t sc18is602_max_transfer_size(struct spi_device *spi)  static int sc18is602_setup(struct spi_device *spi)  { -	struct sc18is602 *hw = spi_master_get_devdata(spi->master); +	struct sc18is602 *hw = spi_controller_get_devdata(spi->controller);  	/* SC18IS602 does not support CS2 */  	if (hw->id == sc18is602 && (spi_get_chipselect(spi, 0) == 2)) @@ -242,17 +241,17 @@ static int sc18is602_probe(struct i2c_client *client)  	struct device_node *np = dev->of_node;  	struct sc18is602_platform_data *pdata = dev_get_platdata(dev);  	struct sc18is602 *hw; -	struct spi_master *master; +	struct spi_controller *host;  	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C |  				     I2C_FUNC_SMBUS_WRITE_BYTE_DATA))  		return -EINVAL; -	master = devm_spi_alloc_master(dev, sizeof(struct sc18is602)); -	if (!master) +	host = devm_spi_alloc_host(dev, sizeof(struct sc18is602)); +	if (!host)  		return -ENOMEM; -	hw = spi_master_get_devdata(master); +	hw = spi_controller_get_devdata(host);  	i2c_set_clientdata(client, hw);  	/* assert reset and then release */ @@ -261,24 +260,24 @@ static int sc18is602_probe(struct i2c_client *client)  		return PTR_ERR(hw->reset);  	gpiod_set_value_cansleep(hw->reset, 0); -	hw->master = master; +	hw->host = host;  	hw->client = client;  	hw->dev = dev;  	hw->ctrl = 0xff;  	if (client->dev.of_node) -		hw->id = (enum chips)of_device_get_match_data(&client->dev); +		hw->id = (uintptr_t)of_device_get_match_data(&client->dev);  	else  		hw->id = id->driver_data;  	switch (hw->id) {  	case sc18is602:  	case sc18is602b: -		master->num_chipselect = 4; +		host->num_chipselect = 4;  		hw->freq = SC18IS602_CLOCK;  		break;  	case sc18is603: -		master->num_chipselect = 2; +		host->num_chipselect = 2;  		if (pdata) {  			hw->freq = pdata->clock_frequency;  		} else { @@ -293,18 +292,18 @@ static int sc18is602_probe(struct i2c_client *client)  			hw->freq = SC18IS602_CLOCK;  		break;  	} -	master->bus_num = np ? -1 : client->adapter->nr; -	master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST; -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->setup = sc18is602_setup; -	master->transfer_one_message = sc18is602_transfer_one; -	master->max_transfer_size = sc18is602_max_transfer_size; -	master->max_message_size = sc18is602_max_transfer_size; -	master->dev.of_node = np; -	master->min_speed_hz = hw->freq / 128; -	master->max_speed_hz = hw->freq / 4; +	host->bus_num = np ? -1 : client->adapter->nr; +	host->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->setup = sc18is602_setup; +	host->transfer_one_message = sc18is602_transfer_one; +	host->max_transfer_size = sc18is602_max_transfer_size; +	host->max_message_size = sc18is602_max_transfer_size; +	host->dev.of_node = np; +	host->min_speed_hz = hw->freq / 128; +	host->max_speed_hz = hw->freq / 4; -	return devm_spi_register_master(dev, master); +	return devm_spi_register_controller(dev, host);  }  static const struct i2c_device_id sc18is602_id[] = { @@ -343,6 +342,6 @@ static struct i2c_driver sc18is602_driver = {  module_i2c_driver(sc18is602_driver); -MODULE_DESCRIPTION("SC18IS602/603 SPI Master Driver"); +MODULE_DESCRIPTION("SC18IS602/603 SPI Host Driver");  MODULE_AUTHOR("Guenter Roeck");  MODULE_LICENSE("GPL"); diff --git a/drivers/spi/spi-sh-hspi.c b/drivers/spi/spi-sh-hspi.c index d6ffeae66ed3..5d63aa1d28e2 100644 --- a/drivers/spi/spi-sh-hspi.c +++ b/drivers/spi/spi-sh-hspi.c @@ -82,7 +82,7 @@ static int hspi_status_check_timeout(struct hspi_priv *hspi, u32 mask, u32 val)  }  /* - *		spi master function + *		spi host function   */  #define hspi_hw_cs_enable(hspi)		hspi_hw_cs_ctrl(hspi, 0) @@ -224,7 +224,7 @@ static int hspi_probe(struct platform_device *pdev)  		return -EINVAL;  	} -	ctlr = spi_alloc_master(&pdev->dev, sizeof(*hspi)); +	ctlr = spi_alloc_host(&pdev->dev, sizeof(*hspi));  	if (!ctlr)  		return -ENOMEM; diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c index 9e90b4f8b357..fb452bc78372 100644 --- a/drivers/spi/spi-sh-msiof.c +++ b/drivers/spi/spi-sh-msiof.c @@ -20,7 +20,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/sh_dma.h> @@ -55,7 +54,7 @@ struct sh_msiof_spi_priv {  	dma_addr_t rx_dma_addr;  	bool native_cs_inited;  	bool native_cs_high; -	bool slave_aborted; +	bool target_aborted;  };  #define MAX_SS	3	/* Maximum number of native chip selects */ @@ -362,7 +361,7 @@ static void sh_msiof_spi_set_pin_regs(struct sh_msiof_spi_priv *p, u32 ss,  	tmp |= !cs_high << SIMDR1_SYNCAC_SHIFT;  	tmp |= lsb_first << SIMDR1_BITLSB_SHIFT;  	tmp |= sh_msiof_spi_get_dtdl_and_syncdl(p); -	if (spi_controller_is_slave(p->ctlr)) { +	if (spi_controller_is_target(p->ctlr)) {  		sh_msiof_write(p, SITMDR1, tmp | SITMDR1_PCON);  	} else {  		sh_msiof_write(p, SITMDR1, @@ -554,7 +553,7 @@ static int sh_msiof_spi_setup(struct spi_device *spi)  		spi_controller_get_devdata(spi->controller);  	u32 clr, set, tmp; -	if (spi_get_csgpiod(spi, 0) || spi_controller_is_slave(p->ctlr)) +	if (spi_get_csgpiod(spi, 0) || spi_controller_is_target(p->ctlr))  		return 0;  	if (p->native_cs_inited && @@ -603,11 +602,11 @@ static int sh_msiof_prepare_message(struct spi_controller *ctlr,  static int sh_msiof_spi_start(struct sh_msiof_spi_priv *p, void *rx_buf)  { -	bool slave = spi_controller_is_slave(p->ctlr); +	bool target = spi_controller_is_target(p->ctlr);  	int ret = 0;  	/* setup clock and rx/tx signals */ -	if (!slave) +	if (!target)  		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TSCKE);  	if (rx_buf && !ret)  		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_RXE); @@ -615,7 +614,7 @@ static int sh_msiof_spi_start(struct sh_msiof_spi_priv *p, void *rx_buf)  		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TXE);  	/* start by setting frame bit */ -	if (!ret && !slave) +	if (!ret && !target)  		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TFSE);  	return ret; @@ -623,27 +622,27 @@ static int sh_msiof_spi_start(struct sh_msiof_spi_priv *p, void *rx_buf)  static int sh_msiof_spi_stop(struct sh_msiof_spi_priv *p, void *rx_buf)  { -	bool slave = spi_controller_is_slave(p->ctlr); +	bool target = spi_controller_is_target(p->ctlr);  	int ret = 0;  	/* shut down frame, rx/tx and clock signals */ -	if (!slave) +	if (!target)  		ret = sh_msiof_modify_ctr_wait(p, SICTR_TFSE, 0);  	if (!ret)  		ret = sh_msiof_modify_ctr_wait(p, SICTR_TXE, 0);  	if (rx_buf && !ret)  		ret = sh_msiof_modify_ctr_wait(p, SICTR_RXE, 0); -	if (!ret && !slave) +	if (!ret && !target)  		ret = sh_msiof_modify_ctr_wait(p, SICTR_TSCKE, 0);  	return ret;  } -static int sh_msiof_slave_abort(struct spi_controller *ctlr) +static int sh_msiof_target_abort(struct spi_controller *ctlr)  {  	struct sh_msiof_spi_priv *p = spi_controller_get_devdata(ctlr); -	p->slave_aborted = true; +	p->target_aborted = true;  	complete(&p->done);  	complete(&p->done_txdma);  	return 0; @@ -652,9 +651,9 @@ static int sh_msiof_slave_abort(struct spi_controller *ctlr)  static int sh_msiof_wait_for_completion(struct sh_msiof_spi_priv *p,  					struct completion *x)  { -	if (spi_controller_is_slave(p->ctlr)) { +	if (spi_controller_is_target(p->ctlr)) {  		if (wait_for_completion_interruptible(x) || -		    p->slave_aborted) { +		    p->target_aborted) {  			dev_dbg(&p->pdev->dev, "interrupted\n");  			return -EINTR;  		} @@ -700,7 +699,7 @@ static int sh_msiof_spi_txrx_once(struct sh_msiof_spi_priv *p,  		tx_fifo(p, tx_buf, words, fifo_shift);  	reinit_completion(&p->done); -	p->slave_aborted = false; +	p->target_aborted = false;  	ret = sh_msiof_spi_start(p, rx_buf);  	if (ret) { @@ -797,7 +796,7 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,  	reinit_completion(&p->done);  	if (tx)  		reinit_completion(&p->done_txdma); -	p->slave_aborted = false; +	p->target_aborted = false;  	/* Now start DMA */  	if (rx) @@ -926,7 +925,7 @@ static int sh_msiof_transfer_one(struct spi_controller *ctlr,  	sh_msiof_spi_reset_regs(p);  	/* setup clocks (clock already enabled in chipselect()) */ -	if (!spi_controller_is_slave(p->ctlr)) +	if (!spi_controller_is_target(p->ctlr))  		sh_msiof_spi_set_clk_regs(p, t);  	while (ctlr->dma_tx && len > 15) { @@ -1102,11 +1101,11 @@ static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)  	if (!info)  		return NULL; -	info->mode = of_property_read_bool(np, "spi-slave") ? MSIOF_SPI_SLAVE -							    : MSIOF_SPI_MASTER; +	info->mode = of_property_read_bool(np, "spi-slave") ? MSIOF_SPI_TARGET +							    : MSIOF_SPI_HOST;  	/* Parse the MSIOF properties */ -	if (info->mode == MSIOF_SPI_MASTER) +	if (info->mode == MSIOF_SPI_HOST)  		of_property_read_u32(np, "num-cs", &num_cs);  	of_property_read_u32(np, "renesas,tx-fifo-size",  					&info->tx_fifo_override); @@ -1280,12 +1279,12 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)  		return -ENXIO;  	} -	if (info->mode == MSIOF_SPI_SLAVE) -		ctlr = spi_alloc_slave(&pdev->dev, -				       sizeof(struct sh_msiof_spi_priv)); +	if (info->mode == MSIOF_SPI_TARGET) +		ctlr = spi_alloc_target(&pdev->dev, +				        sizeof(struct sh_msiof_spi_priv));  	else -		ctlr = spi_alloc_master(&pdev->dev, -					sizeof(struct sh_msiof_spi_priv)); +		ctlr = spi_alloc_host(&pdev->dev, +				      sizeof(struct sh_msiof_spi_priv));  	if (ctlr == NULL)  		return -ENOMEM; @@ -1348,7 +1347,7 @@ static int sh_msiof_spi_probe(struct platform_device *pdev)  	ctlr->dev.of_node = pdev->dev.of_node;  	ctlr->setup = sh_msiof_spi_setup;  	ctlr->prepare_message = sh_msiof_prepare_message; -	ctlr->slave_abort = sh_msiof_slave_abort; +	ctlr->target_abort = sh_msiof_target_abort;  	ctlr->bits_per_word_mask = chipdata->bits_per_word_mask;  	ctlr->auto_runtime_pm = true;  	ctlr->transfer_one = sh_msiof_transfer_one; diff --git a/drivers/spi/spi-sh-sci.c b/drivers/spi/spi-sh-sci.c index 92ca3f2d61ba..148d615d2f38 100644 --- a/drivers/spi/spi-sh-sci.c +++ b/drivers/spi/spi-sh-sci.c @@ -56,17 +56,17 @@ static inline void setbits(struct sh_sci_spi *sp, int bits, int on)  static inline void setsck(struct spi_device *dev, int on)  { -	setbits(spi_master_get_devdata(dev->master), PIN_SCK, on); +	setbits(spi_controller_get_devdata(dev->controller), PIN_SCK, on);  }  static inline void setmosi(struct spi_device *dev, int on)  { -	setbits(spi_master_get_devdata(dev->master), PIN_TXD, on); +	setbits(spi_controller_get_devdata(dev->controller), PIN_TXD, on);  }  static inline u32 getmiso(struct spi_device *dev)  { -	struct sh_sci_spi *sp = spi_master_get_devdata(dev->master); +	struct sh_sci_spi *sp = spi_controller_get_devdata(dev->controller);  	return (ioread8(SCSPTR(sp)) & PIN_RXD) ? 1 : 0;  } @@ -105,7 +105,7 @@ static u32 sh_sci_spi_txrx_mode3(struct spi_device *spi,  static void sh_sci_spi_chipselect(struct spi_device *dev, int value)  { -	struct sh_sci_spi *sp = spi_master_get_devdata(dev->master); +	struct sh_sci_spi *sp = spi_controller_get_devdata(dev->controller);  	if (sp->info->chip_select)  		(sp->info->chip_select)(sp->info, spi_get_chipselect(dev, 0), value); @@ -114,18 +114,18 @@ static void sh_sci_spi_chipselect(struct spi_device *dev, int value)  static int sh_sci_spi_probe(struct platform_device *dev)  {  	struct resource	*r; -	struct spi_master *master; +	struct spi_controller *host;  	struct sh_sci_spi *sp;  	int ret; -	master = spi_alloc_master(&dev->dev, sizeof(struct sh_sci_spi)); -	if (master == NULL) { -		dev_err(&dev->dev, "failed to allocate spi master\n"); +	host = spi_alloc_host(&dev->dev, sizeof(struct sh_sci_spi)); +	if (host == NULL) { +		dev_err(&dev->dev, "failed to allocate spi host\n");  		ret = -ENOMEM;  		goto err0;  	} -	sp = spi_master_get_devdata(master); +	sp = spi_controller_get_devdata(host);  	platform_set_drvdata(dev, sp);  	sp->info = dev_get_platdata(&dev->dev); @@ -136,7 +136,7 @@ static int sh_sci_spi_probe(struct platform_device *dev)  	}  	/* setup spi bitbang adaptor */ -	sp->bitbang.master = master; +	sp->bitbang.master = host;  	sp->bitbang.master->bus_num = sp->info->bus_num;  	sp->bitbang.master->num_chipselect = sp->info->num_chipselect;  	sp->bitbang.chipselect = sh_sci_spi_chipselect; @@ -166,7 +166,7 @@ static int sh_sci_spi_probe(struct platform_device *dev)  	setbits(sp, PIN_INIT, 0);  	iounmap(sp->membase);   err1: -	spi_master_put(sp->bitbang.master); +	spi_controller_put(sp->bitbang.master);   err0:  	return ret;  } @@ -178,7 +178,7 @@ static void sh_sci_spi_remove(struct platform_device *dev)  	spi_bitbang_stop(&sp->bitbang);  	setbits(sp, PIN_INIT, 0);  	iounmap(sp->membase); -	spi_master_put(sp->bitbang.master); +	spi_controller_put(sp->bitbang.master);  }  static struct platform_driver sh_sci_spi_drv = { diff --git a/drivers/spi/spi-sh.c b/drivers/spi/spi-sh.c index d358a2a9c3f5..4b873d9a7602 100644 --- a/drivers/spi/spi-sh.c +++ b/drivers/spi/spi-sh.c @@ -72,7 +72,7 @@  struct spi_sh_data {  	void __iomem *addr;  	int irq; -	struct spi_master *master; +	struct spi_controller *host;  	unsigned long cr1;  	wait_queue_head_t wait;  	int width; @@ -327,7 +327,7 @@ static int spi_sh_transfer_one_message(struct spi_controller *ctlr,  static int spi_sh_setup(struct spi_device *spi)  { -	struct spi_sh_data *ss = spi_master_get_devdata(spi->master); +	struct spi_sh_data *ss = spi_controller_get_devdata(spi->controller);  	pr_debug("%s: enter\n", __func__); @@ -346,7 +346,7 @@ static int spi_sh_setup(struct spi_device *spi)  static void spi_sh_cleanup(struct spi_device *spi)  { -	struct spi_sh_data *ss = spi_master_get_devdata(spi->master); +	struct spi_sh_data *ss = spi_controller_get_devdata(spi->controller);  	pr_debug("%s: enter\n", __func__); @@ -381,14 +381,14 @@ static void spi_sh_remove(struct platform_device *pdev)  {  	struct spi_sh_data *ss = platform_get_drvdata(pdev); -	spi_unregister_master(ss->master); +	spi_unregister_controller(ss->host);  	free_irq(ss->irq, ss);  }  static int spi_sh_probe(struct platform_device *pdev)  {  	struct resource *res; -	struct spi_master *master; +	struct spi_controller *host;  	struct spi_sh_data *ss;  	int ret, irq; @@ -403,13 +403,13 @@ static int spi_sh_probe(struct platform_device *pdev)  	if (irq < 0)  		return irq; -	master = devm_spi_alloc_master(&pdev->dev, sizeof(struct spi_sh_data)); -	if (master == NULL) { -		dev_err(&pdev->dev, "spi_alloc_master error.\n"); +	host = devm_spi_alloc_host(&pdev->dev, sizeof(struct spi_sh_data)); +	if (host == NULL) { +		dev_err(&pdev->dev, "devm_spi_alloc_host error.\n");  		return -ENOMEM;  	} -	ss = spi_master_get_devdata(master); +	ss = spi_controller_get_devdata(host);  	platform_set_drvdata(pdev, ss);  	switch (res->flags & IORESOURCE_MEM_TYPE_MASK) { @@ -424,7 +424,7 @@ static int spi_sh_probe(struct platform_device *pdev)  		return -ENODEV;  	}  	ss->irq = irq; -	ss->master = master; +	ss->host = host;  	ss->addr = devm_ioremap(&pdev->dev, res->start, resource_size(res));  	if (ss->addr == NULL) {  		dev_err(&pdev->dev, "ioremap error.\n"); @@ -438,15 +438,15 @@ static int spi_sh_probe(struct platform_device *pdev)  		return ret;  	} -	master->num_chipselect = 2; -	master->bus_num = pdev->id; -	master->setup = spi_sh_setup; -	master->transfer_one_message = spi_sh_transfer_one_message; -	master->cleanup = spi_sh_cleanup; +	host->num_chipselect = 2; +	host->bus_num = pdev->id; +	host->setup = spi_sh_setup; +	host->transfer_one_message = spi_sh_transfer_one_message; +	host->cleanup = spi_sh_cleanup; -	ret = spi_register_master(master); +	ret = spi_register_controller(host);  	if (ret < 0) { -		printk(KERN_ERR "spi_register_master error.\n"); +		printk(KERN_ERR "spi_register_controller error.\n");  		goto error3;  	} diff --git a/drivers/spi/spi-sifive.c b/drivers/spi/spi-sifive.c index dae9e097c333..cfd17bbb2202 100644 --- a/drivers/spi/spi-sifive.c +++ b/drivers/spi/spi-sifive.c @@ -128,9 +128,9 @@ static void sifive_spi_init(struct sifive_spi *spi)  }  static int -sifive_spi_prepare_message(struct spi_master *master, struct spi_message *msg) +sifive_spi_prepare_message(struct spi_controller *host, struct spi_message *msg)  { -	struct sifive_spi *spi = spi_master_get_devdata(master); +	struct sifive_spi *spi = spi_controller_get_devdata(host);  	struct spi_device *device = msg->spi;  	/* Update the chip select polarity */ @@ -152,7 +152,7 @@ sifive_spi_prepare_message(struct spi_master *master, struct spi_message *msg)  static void sifive_spi_set_cs(struct spi_device *device, bool is_high)  { -	struct sifive_spi *spi = spi_master_get_devdata(device->master); +	struct sifive_spi *spi = spi_controller_get_devdata(device->controller);  	/* Reverse polarity is handled by SCMR/CPOL. Not inverted CS. */  	if (device->mode & SPI_CS_HIGH) @@ -252,10 +252,10 @@ static void sifive_spi_rx(struct sifive_spi *spi, u8 *rx_ptr)  }  static int -sifive_spi_transfer_one(struct spi_master *master, struct spi_device *device, +sifive_spi_transfer_one(struct spi_controller *host, struct spi_device *device,  			struct spi_transfer *t)  { -	struct sifive_spi *spi = spi_master_get_devdata(master); +	struct sifive_spi *spi = spi_controller_get_devdata(host);  	int poll = sifive_spi_prep_transfer(spi, device, t);  	const u8 *tx_ptr = t->tx_buf;  	u8 *rx_ptr = t->rx_buf; @@ -294,35 +294,35 @@ static int sifive_spi_probe(struct platform_device *pdev)  	struct sifive_spi *spi;  	int ret, irq, num_cs;  	u32 cs_bits, max_bits_per_word; -	struct spi_master *master; +	struct spi_controller *host; -	master = spi_alloc_master(&pdev->dev, sizeof(struct sifive_spi)); -	if (!master) { +	host = spi_alloc_host(&pdev->dev, sizeof(struct sifive_spi)); +	if (!host) {  		dev_err(&pdev->dev, "out of memory\n");  		return -ENOMEM;  	} -	spi = spi_master_get_devdata(master); +	spi = spi_controller_get_devdata(host);  	init_completion(&spi->done); -	platform_set_drvdata(pdev, master); +	platform_set_drvdata(pdev, host);  	spi->regs = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(spi->regs)) {  		ret = PTR_ERR(spi->regs); -		goto put_master; +		goto put_host;  	}  	spi->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(spi->clk)) {  		dev_err(&pdev->dev, "Unable to find bus clock\n");  		ret = PTR_ERR(spi->clk); -		goto put_master; +		goto put_host;  	}  	irq = platform_get_irq(pdev, 0);  	if (irq < 0) {  		ret = irq; -		goto put_master; +		goto put_host;  	}  	/* Optional parameters */ @@ -339,14 +339,14 @@ static int sifive_spi_probe(struct platform_device *pdev)  	if (!ret && max_bits_per_word < 8) {  		dev_err(&pdev->dev, "Only 8bit SPI words supported by the driver\n");  		ret = -EINVAL; -		goto put_master; +		goto put_host;  	}  	/* Spin up the bus clock before hitting registers */  	ret = clk_prepare_enable(spi->clk);  	if (ret) {  		dev_err(&pdev->dev, "Unable to enable bus clock\n"); -		goto put_master; +		goto put_host;  	}  	/* probe the number of CS lines */ @@ -362,30 +362,30 @@ static int sifive_spi_probe(struct platform_device *pdev)  	num_cs = ilog2(cs_bits) + 1;  	if (num_cs > SIFIVE_SPI_MAX_CS) { -		dev_err(&pdev->dev, "Invalid number of spi slaves\n"); +		dev_err(&pdev->dev, "Invalid number of spi targets\n");  		ret = -EINVAL;  		goto disable_clk;  	} -	/* Define our master */ -	master->dev.of_node = pdev->dev.of_node; -	master->bus_num = pdev->id; -	master->num_chipselect = num_cs; -	master->mode_bits = SPI_CPHA | SPI_CPOL +	/* Define our host */ +	host->dev.of_node = pdev->dev.of_node; +	host->bus_num = pdev->id; +	host->num_chipselect = num_cs; +	host->mode_bits = SPI_CPHA | SPI_CPOL  			  | SPI_CS_HIGH | SPI_LSB_FIRST  			  | SPI_TX_DUAL | SPI_TX_QUAD  			  | SPI_RX_DUAL | SPI_RX_QUAD;  	/* TODO: add driver support for bits_per_word < 8  	 * we need to "left-align" the bits (unless SPI_LSB_FIRST)  	 */ -	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->flags = SPI_CONTROLLER_MUST_TX | SPI_MASTER_GPIO_SS; -	master->prepare_message = sifive_spi_prepare_message; -	master->set_cs = sifive_spi_set_cs; -	master->transfer_one = sifive_spi_transfer_one; +	host->bits_per_word_mask = SPI_BPW_MASK(8); +	host->flags = SPI_CONTROLLER_MUST_TX | SPI_CONTROLLER_GPIO_SS; +	host->prepare_message = sifive_spi_prepare_message; +	host->set_cs = sifive_spi_set_cs; +	host->transfer_one = sifive_spi_transfer_one;  	pdev->dev.dma_mask = NULL; -	/* Configure the SPI master hardware */ +	/* Configure the SPI host hardware */  	sifive_spi_init(spi);  	/* Register for SPI Interrupt */ @@ -397,11 +397,11 @@ static int sifive_spi_probe(struct platform_device *pdev)  	}  	dev_info(&pdev->dev, "mapped; irq=%d, cs=%d\n", -		 irq, master->num_chipselect); +		 irq, host->num_chipselect); -	ret = devm_spi_register_master(&pdev->dev, master); +	ret = devm_spi_register_controller(&pdev->dev, host);  	if (ret < 0) { -		dev_err(&pdev->dev, "spi_register_master failed\n"); +		dev_err(&pdev->dev, "spi_register_host failed\n");  		goto disable_clk;  	} @@ -409,16 +409,16 @@ static int sifive_spi_probe(struct platform_device *pdev)  disable_clk:  	clk_disable_unprepare(spi->clk); -put_master: -	spi_master_put(master); +put_host: +	spi_controller_put(host);  	return ret;  }  static void sifive_spi_remove(struct platform_device *pdev)  { -	struct spi_master *master = platform_get_drvdata(pdev); -	struct sifive_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = platform_get_drvdata(pdev); +	struct sifive_spi *spi = spi_controller_get_devdata(host);  	/* Disable all the interrupts just in case */  	sifive_spi_write(spi, SIFIVE_SPI_REG_IE, 0); @@ -427,11 +427,11 @@ static void sifive_spi_remove(struct platform_device *pdev)  static int sifive_spi_suspend(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct sifive_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct sifive_spi *spi = spi_controller_get_devdata(host);  	int ret; -	ret = spi_master_suspend(master); +	ret = spi_controller_suspend(host);  	if (ret)  		return ret; @@ -445,14 +445,14 @@ static int sifive_spi_suspend(struct device *dev)  static int sifive_spi_resume(struct device *dev)  { -	struct spi_master *master = dev_get_drvdata(dev); -	struct sifive_spi *spi = spi_master_get_devdata(master); +	struct spi_controller *host = dev_get_drvdata(dev); +	struct sifive_spi *spi = spi_controller_get_devdata(host);  	int ret;  	ret = clk_prepare_enable(spi->clk);  	if (ret)  		return ret; -	ret = spi_master_resume(master); +	ret = spi_controller_resume(host);  	if (ret)  		clk_disable_unprepare(spi->clk); diff --git a/drivers/spi/spi-slave-mt27xx.c b/drivers/spi/spi-slave-mt27xx.c index 4e4d426bfb43..6d6772974783 100644 --- a/drivers/spi/spi-slave-mt27xx.c +++ b/drivers/spi/spi-slave-mt27xx.c @@ -414,7 +414,7 @@ static int mtk_spi_slave_probe(struct platform_device *pdev)  	mdata->dev_comp = of_id->data;  	if (mdata->dev_comp->must_rx) -		ctlr->flags = SPI_MASTER_MUST_RX; +		ctlr->flags = SPI_CONTROLLER_MUST_RX;  	platform_set_drvdata(pdev, ctlr); diff --git a/drivers/spi/spi-sn-f-ospi.c b/drivers/spi/spi-sn-f-ospi.c index d64d3f75c726..a7c3b3923b4a 100644 --- a/drivers/spi/spi-sn-f-ospi.c +++ b/drivers/spi/spi-sn-f-ospi.c @@ -10,7 +10,7 @@  #include <linux/iopoll.h>  #include <linux/module.h>  #include <linux/mutex.h> -#include <linux/of_device.h> +#include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/spi/spi.h>  #include <linux/spi/spi-mem.h> @@ -501,7 +501,7 @@ out:  static int f_ospi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)  { -	struct f_ospi *ospi = spi_controller_get_devdata(mem->spi->master); +	struct f_ospi *ospi = spi_controller_get_devdata(mem->spi->controller);  	int err = 0;  	switch (op->data.dir) { @@ -606,7 +606,7 @@ static int f_ospi_probe(struct platform_device *pdev)  	u32 num_cs = OSPI_NUM_CS;  	int ret; -	ctlr = spi_alloc_master(dev, sizeof(*ospi)); +	ctlr = spi_alloc_host(dev, sizeof(*ospi));  	if (!ctlr)  		return -ENOMEM; diff --git a/drivers/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c index 22e39c4c12c4..bf01feedbf93 100644 --- a/drivers/spi/spi-sprd-adi.c +++ b/drivers/spi/spi-sprd-adi.c @@ -11,7 +11,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/reboot.h>  #include <linux/spi/spi.h> @@ -580,7 +579,7 @@ static int sprd_adi_probe(struct platform_device *pdev)  	ctlr->dev.of_node = pdev->dev.of_node;  	ctlr->bus_num = pdev->id;  	ctlr->num_chipselect = num_chipselect; -	ctlr->flags = SPI_MASTER_HALF_DUPLEX; +	ctlr->flags = SPI_CONTROLLER_HALF_DUPLEX;  	ctlr->bits_per_word_mask = 0;  	ctlr->transfer_one = sprd_adi_transfer_one; diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c index 518c7eaca84e..95377cf748c0 100644 --- a/drivers/spi/spi-sprd.c +++ b/drivers/spi/spi-sprd.c @@ -11,7 +11,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/of_dma.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h> diff --git a/drivers/spi/spi-stm32-qspi.c b/drivers/spi/spi-stm32-qspi.c index 2b6804aa6901..def74ae9b5f6 100644 --- a/drivers/spi/spi-stm32-qspi.c +++ b/drivers/spi/spi-stm32-qspi.c @@ -14,7 +14,6 @@  #include <linux/module.h>  #include <linux/mutex.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/of_gpio.h>  #include <linux/pinctrl/consumer.h>  #include <linux/pm_runtime.h> diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c index 6d10fa4ab783..b6d66caba4c0 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -238,6 +238,7 @@ struct stm32_spi;   * @baud_rate_div_min: minimum baud rate divisor   * @baud_rate_div_max: maximum baud rate divisor   * @has_fifo: boolean to know if fifo is used for driver + * @has_device_mode: is this compatible capable to switch on device mode   * @flags: compatible specific SPI controller flags used at registration time   */  struct stm32_spi_cfg { @@ -259,6 +260,7 @@ struct stm32_spi_cfg {  	unsigned int baud_rate_div_min;  	unsigned int baud_rate_div_max;  	bool has_fifo; +	bool has_device_mode;  	u16 flags;  }; @@ -1001,9 +1003,9 @@ static int stm32_spi_prepare_msg(struct spi_controller *ctrl,  	if (spi->cfg->set_number_of_data) {  		int ret; -		ret = spi_split_transfers_maxsize(ctrl, msg, -						  STM32H7_SPI_TSIZE_MAX, -						  GFP_KERNEL | GFP_DMA); +		ret = spi_split_transfers_maxwords(ctrl, msg, +						   STM32H7_SPI_TSIZE_MAX, +						   GFP_KERNEL | GFP_DMA);  		if (ret)  			return ret;  	} @@ -1750,7 +1752,8 @@ static const struct stm32_spi_cfg stm32f4_spi_cfg = {  	.baud_rate_div_min = STM32F4_SPI_BR_DIV_MIN,  	.baud_rate_div_max = STM32F4_SPI_BR_DIV_MAX,  	.has_fifo = false, -	.flags = SPI_MASTER_MUST_TX, +	.has_device_mode = false, +	.flags = SPI_CONTROLLER_MUST_TX,  };  static const struct stm32_spi_cfg stm32h7_spi_cfg = { @@ -1774,6 +1777,7 @@ static const struct stm32_spi_cfg stm32h7_spi_cfg = {  	.baud_rate_div_min = STM32H7_SPI_MBR_DIV_MIN,  	.baud_rate_div_max = STM32H7_SPI_MBR_DIV_MAX,  	.has_fifo = true, +	.has_device_mode = true,  };  static const struct of_device_id stm32_spi_of_match[] = { @@ -1798,8 +1802,13 @@ static int stm32_spi_probe(struct platform_device *pdev)  	struct device_node *np = pdev->dev.of_node;  	bool device_mode;  	int ret; +	const struct stm32_spi_cfg *cfg = of_device_get_match_data(&pdev->dev);  	device_mode = of_property_read_bool(np, "spi-slave"); +	if (!cfg->has_device_mode && device_mode) { +		dev_err(&pdev->dev, "spi-slave not supported\n"); +		return -EPERM; +	}  	if (device_mode)  		ctrl = devm_spi_alloc_slave(&pdev->dev, sizeof(struct stm32_spi)); @@ -1817,9 +1826,7 @@ static int stm32_spi_probe(struct platform_device *pdev)  	spi->device_mode = device_mode;  	spin_lock_init(&spi->lock); -	spi->cfg = (const struct stm32_spi_cfg *) -		of_match_device(pdev->dev.driver->of_match_table, -				&pdev->dev)->data; +	spi->cfg = cfg;  	spi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);  	if (IS_ERR(spi->base)) @@ -1829,8 +1836,7 @@ static int stm32_spi_probe(struct platform_device *pdev)  	spi->irq = platform_get_irq(pdev, 0);  	if (spi->irq <= 0) -		return dev_err_probe(&pdev->dev, spi->irq, -				     "failed to get irq\n"); +		return spi->irq;  	ret = devm_request_threaded_irq(&pdev->dev, spi->irq,  					spi->cfg->irq_handler_event, diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c index 30d541612253..3f5b1556ece0 100644 --- a/drivers/spi/spi-sun6i.c +++ b/drivers/spi/spi-sun6i.c @@ -14,7 +14,7 @@  #include <linux/interrupt.h>  #include <linux/io.h>  #include <linux/module.h> -#include <linux/of_device.h> +#include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/reset.h> @@ -83,6 +83,9 @@  #define SUN6I_XMIT_CNT_REG		0x34  #define SUN6I_BURST_CTL_CNT_REG		0x38 +#define SUN6I_BURST_CTL_CNT_STC_MASK		GENMASK(23, 0) +#define SUN6I_BURST_CTL_CNT_DRM			BIT(28) +#define SUN6I_BURST_CTL_CNT_QUAD_EN		BIT(29)  #define SUN6I_TXDATA_REG		0x200  #define SUN6I_RXDATA_REG		0x300 @@ -90,6 +93,7 @@  struct sun6i_spi_cfg {  	unsigned long		fifo_depth;  	bool			has_clk_ctl; +	u32			mode_bits;  };  struct sun6i_spi { @@ -266,7 +270,7 @@ static int sun6i_spi_transfer_one(struct spi_master *master,  	unsigned int div, div_cdr1, div_cdr2, timeout;  	unsigned int start, end, tx_time;  	unsigned int trig_level; -	unsigned int tx_len = 0, rx_len = 0; +	unsigned int tx_len = 0, rx_len = 0, nbits = 0;  	bool use_dma;  	int ret = 0;  	u32 reg; @@ -418,13 +422,29 @@ static int sun6i_spi_transfer_one(struct spi_master *master,  	sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, reg);  	/* Setup the transfer now... */ -	if (sspi->tx_buf) +	if (sspi->tx_buf) {  		tx_len = tfr->len; +		nbits = tfr->tx_nbits; +	} else if (tfr->rx_buf) { +		nbits = tfr->rx_nbits; +	} + +	switch (nbits) { +	case SPI_NBITS_DUAL: +		reg = SUN6I_BURST_CTL_CNT_DRM; +		break; +	case SPI_NBITS_QUAD: +		reg = SUN6I_BURST_CTL_CNT_QUAD_EN; +		break; +	case SPI_NBITS_SINGLE: +	default: +		reg = FIELD_PREP(SUN6I_BURST_CTL_CNT_STC_MASK, tx_len); +	}  	/* Setup the counters */ +	sun6i_spi_write(sspi, SUN6I_BURST_CTL_CNT_REG, reg);  	sun6i_spi_write(sspi, SUN6I_BURST_CNT_REG, tfr->len);  	sun6i_spi_write(sspi, SUN6I_XMIT_CNT_REG, tx_len); -	sun6i_spi_write(sspi, SUN6I_BURST_CTL_CNT_REG, tx_len);  	if (!use_dma) {  		/* Fill the TX FIFO */ @@ -623,7 +643,8 @@ static int sun6i_spi_probe(struct platform_device *pdev)  	master->set_cs = sun6i_spi_set_cs;  	master->transfer_one = sun6i_spi_transfer_one;  	master->num_chipselect = 4; -	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST; +	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST | +			    sspi->cfg->mode_bits;  	master->bits_per_word_mask = SPI_BPW_MASK(8);  	master->dev.of_node = pdev->dev.of_node;  	master->auto_runtime_pm = true; @@ -740,6 +761,7 @@ static const struct sun6i_spi_cfg sun8i_h3_spi_cfg = {  static const struct sun6i_spi_cfg sun50i_r329_spi_cfg = {  	.fifo_depth	= SUN8I_FIFO_DEPTH, +	.mode_bits	= SPI_RX_DUAL | SPI_TX_DUAL | SPI_RX_QUAD | SPI_TX_QUAD,  };  static const struct of_device_id sun6i_spi_match[] = { diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c index 488df681eaef..460f232dad50 100644 --- a/drivers/spi/spi-tegra114.c +++ b/drivers/spi/spi-tegra114.c @@ -20,7 +20,6 @@  #include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/reset.h>  #include <linux/spi/spi.h> @@ -723,27 +722,23 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi)  	struct spi_delay *setup = &spi->cs_setup;  	struct spi_delay *hold = &spi->cs_hold;  	struct spi_delay *inactive = &spi->cs_inactive; -	u8 setup_dly, hold_dly, inactive_dly; +	u8 setup_dly, hold_dly;  	u32 setup_hold;  	u32 spi_cs_timing;  	u32 inactive_cycles;  	u8 cs_state; -	if ((setup && setup->unit != SPI_DELAY_UNIT_SCK) || -	    (hold && hold->unit != SPI_DELAY_UNIT_SCK) || -	    (inactive && inactive->unit != SPI_DELAY_UNIT_SCK)) { +	if (setup->unit != SPI_DELAY_UNIT_SCK || +	    hold->unit != SPI_DELAY_UNIT_SCK || +	    inactive->unit != SPI_DELAY_UNIT_SCK) {  		dev_err(&spi->dev,  			"Invalid delay unit %d, should be SPI_DELAY_UNIT_SCK\n",  			SPI_DELAY_UNIT_SCK);  		return -EINVAL;  	} -	setup_dly = setup ? setup->value : 0; -	hold_dly = hold ? hold->value : 0; -	inactive_dly = inactive ? inactive->value : 0; - -	setup_dly = min_t(u8, setup_dly, MAX_SETUP_HOLD_CYCLES); -	hold_dly = min_t(u8, hold_dly, MAX_SETUP_HOLD_CYCLES); +	setup_dly = min_t(u8, setup->value, MAX_SETUP_HOLD_CYCLES); +	hold_dly = min_t(u8, hold->value, MAX_SETUP_HOLD_CYCLES);  	if (setup_dly && hold_dly) {  		setup_hold = SPI_SETUP_HOLD(setup_dly - 1, hold_dly - 1);  		spi_cs_timing = SPI_CS_SETUP_HOLD(tspi->spi_cs_timing1, @@ -755,7 +750,7 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi)  		}  	} -	inactive_cycles = min_t(u8, inactive_dly, MAX_INACTIVE_CYCLES); +	inactive_cycles = min_t(u8, inactive->value, MAX_INACTIVE_CYCLES);  	if (inactive_cycles)  		inactive_cycles--;  	cs_state = inactive_cycles ? 0 : 1; diff --git a/drivers/spi/spi-tegra20-sflash.c b/drivers/spi/spi-tegra20-sflash.c index 4286310628a2..0c5507473f97 100644 --- a/drivers/spi/spi-tegra20-sflash.c +++ b/drivers/spi/spi-tegra20-sflash.c @@ -455,7 +455,11 @@ static int tegra_sflash_probe(struct platform_device *pdev)  		goto exit_free_master;  	} -	tsd->irq = platform_get_irq(pdev, 0); +	ret = platform_get_irq(pdev, 0); +	if (ret < 0) +		goto exit_free_master; +	tsd->irq = ret; +  	ret = request_irq(tsd->irq, tegra_sflash_isr, 0,  			dev_name(&pdev->dev), tsd);  	if (ret < 0) { diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c index c2915f7672cc..4d6db6182c5e 100644 --- a/drivers/spi/spi-tegra20-slink.c +++ b/drivers/spi/spi-tegra20-slink.c @@ -21,7 +21,6 @@  #include <linux/pm_opp.h>  #include <linux/pm_runtime.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/reset.h>  #include <linux/spi/spi.h> @@ -1034,18 +1033,12 @@ static int tegra_slink_probe(struct platform_device *pdev)  				 &master->max_speed_hz))  		master->max_speed_hz = 25000000; /* 25MHz */ -	r = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!r) { -		dev_err(&pdev->dev, "No IO memory resource\n"); -		ret = -ENODEV; -		goto exit_free_master; -	} -	tspi->phys = r->start; -	tspi->base = devm_ioremap_resource(&pdev->dev, r); +	tspi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);  	if (IS_ERR(tspi->base)) {  		ret = PTR_ERR(tspi->base);  		goto exit_free_master;  	} +	tspi->phys = r->start;  	/* disabled clock may cause interrupt storm upon request */  	tspi->clk = devm_clk_get(&pdev->dev, NULL); diff --git a/drivers/spi/spi-tegra210-quad.c b/drivers/spi/spi-tegra210-quad.c index fbd14dd7be44..e9ad9b0b598b 100644 --- a/drivers/spi/spi-tegra210-quad.c +++ b/drivers/spi/spi-tegra210-quad.c @@ -18,7 +18,6 @@  #include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/reset.h>  #include <linux/spi/spi.h>  #include <linux/acpi.h> diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c index 5914335ff63d..4c81516b67db 100644 --- a/drivers/spi/spi-ti-qspi.c +++ b/drivers/spi/spi-ti-qspi.c @@ -22,7 +22,6 @@  #include <linux/slab.h>  #include <linux/pm_runtime.h>  #include <linux/of.h> -#include <linux/of_device.h>  #include <linux/pinctrl/consumer.h>  #include <linux/mfd/syscon.h>  #include <linux/regmap.h> @@ -770,7 +769,7 @@ static int ti_qspi_probe(struct platform_device *pdev)  	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD; -	master->flags = SPI_MASTER_HALF_DUPLEX; +	master->flags = SPI_CONTROLLER_HALF_DUPLEX;  	master->setup = ti_qspi_setup;  	master->auto_runtime_pm = true;  	master->transfer_one_message = ti_qspi_start_transfer_one; diff --git a/drivers/spi/spi-wpcm-fiu.c b/drivers/spi/spi-wpcm-fiu.c index f15312fdcdaf..852ffe013d32 100644 --- a/drivers/spi/spi-wpcm-fiu.c +++ b/drivers/spi/spi-wpcm-fiu.c @@ -3,9 +3,8 @@  #include <linux/clk.h>  #include <linux/mfd/syscon.h> +#include <linux/mod_devicetable.h>  #include <linux/module.h> -#include <linux/of_address.h> -#include <linux/of_device.h>  #include <linux/platform_device.h>  #include <linux/regmap.h>  #include <linux/spi/spi-mem.h> diff --git a/drivers/spi/spi-xcomm.c b/drivers/spi/spi-xcomm.c index ae6218bcd02a..a3d57554f5ba 100644 --- a/drivers/spi/spi-xcomm.c +++ b/drivers/spi/spi-xcomm.c @@ -218,7 +218,7 @@ static int spi_xcomm_probe(struct i2c_client *i2c)  	master->num_chipselect = 16;  	master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_3WIRE;  	master->bits_per_word_mask = SPI_BPW_MASK(8); -	master->flags = SPI_MASTER_HALF_DUPLEX; +	master->flags = SPI_CONTROLLER_HALF_DUPLEX;  	master->transfer_one_message = spi_xcomm_transfer_one;  	master->dev.of_node = i2c->dev.of_node;  	i2c_set_clientdata(i2c, master); diff --git a/drivers/spi/spi-xtensa-xtfpga.c b/drivers/spi/spi-xtensa-xtfpga.c index 24dc845b940e..dbd85d7a1526 100644 --- a/drivers/spi/spi-xtensa-xtfpga.c +++ b/drivers/spi/spi-xtensa-xtfpga.c @@ -87,7 +87,7 @@ static int xtfpga_spi_probe(struct platform_device *pdev)  	if (!master)  		return -ENOMEM; -	master->flags = SPI_MASTER_NO_RX; +	master->flags = SPI_CONTROLLER_NO_RX;  	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 16);  	master->bus_num = pdev->dev.id;  	master->dev.of_node = pdev->dev.of_node; diff --git a/drivers/spi/spi-zynq-qspi.c b/drivers/spi/spi-zynq-qspi.c index ee1995b91287..0db69a2a72ff 100644 --- a/drivers/spi/spi-zynq-qspi.c +++ b/drivers/spi/spi-zynq-qspi.c @@ -679,8 +679,8 @@ static int zynq_qspi_probe(struct platform_device *pdev)  	}  	xqspi->irq = platform_get_irq(pdev, 0); -	if (xqspi->irq <= 0) { -		ret = -ENXIO; +	if (xqspi->irq < 0) { +		ret = xqspi->irq;  		goto clk_dis_all;  	}  	ret = devm_request_irq(&pdev->dev, xqspi->irq, zynq_qspi_irq, diff --git a/drivers/spi/spi-zynqmp-gqspi.c b/drivers/spi/spi-zynqmp-gqspi.c index fb2ca9b90eab..94d9a33d9af5 100644 --- a/drivers/spi/spi-zynqmp-gqspi.c +++ b/drivers/spi/spi-zynqmp-gqspi.c @@ -14,9 +14,7 @@  #include <linux/interrupt.h>  #include <linux/io.h>  #include <linux/module.h> -#include <linux/of_irq.h> -#include <linux/of_address.h> -#include <linux/of_device.h> +#include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h>  #include <linux/spi/spi.h> @@ -1295,8 +1293,8 @@ static int zynqmp_qspi_probe(struct platform_device *pdev)  	zynqmp_qspi_init_hw(xqspi);  	xqspi->irq = platform_get_irq(pdev, 0); -	if (xqspi->irq <= 0) { -		ret = -ENXIO; +	if (xqspi->irq < 0) { +		ret = xqspi->irq;  		goto clk_dis_all;  	}  	ret = devm_request_irq(&pdev->dev, xqspi->irq, zynqmp_qspi_irq, diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 9291b2a0e887..8d6304cb061e 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -4,36 +4,36 @@  // Copyright (C) 2005 David Brownell  // Copyright (C) 2008 Secret Lab Technologies Ltd. -#include <linux/kernel.h> -#include <linux/device.h> -#include <linux/init.h> +#include <linux/acpi.h>  #include <linux/cache.h> -#include <linux/dma-mapping.h> +#include <linux/clk/clk-conf.h> +#include <linux/delay.h> +#include <linux/device.h>  #include <linux/dmaengine.h> +#include <linux/dma-mapping.h> +#include <linux/export.h> +#include <linux/gpio/consumer.h> +#include <linux/highmem.h> +#include <linux/idr.h> +#include <linux/init.h> +#include <linux/ioport.h> +#include <linux/kernel.h> +#include <linux/kthread.h> +#include <linux/mod_devicetable.h>  #include <linux/mutex.h>  #include <linux/of_device.h>  #include <linux/of_irq.h> -#include <linux/clk/clk-conf.h> -#include <linux/slab.h> -#include <linux/mod_devicetable.h> -#include <linux/spi/spi.h> -#include <linux/spi/spi-mem.h> -#include <linux/gpio/consumer.h> -#include <linux/pm_runtime.h> +#include <linux/percpu.h> +#include <linux/platform_data/x86/apple.h>  #include <linux/pm_domain.h> +#include <linux/pm_runtime.h>  #include <linux/property.h> -#include <linux/export.h> +#include <linux/ptp_clock_kernel.h>  #include <linux/sched/rt.h> +#include <linux/slab.h> +#include <linux/spi/spi.h> +#include <linux/spi/spi-mem.h>  #include <uapi/linux/sched/types.h> -#include <linux/delay.h> -#include <linux/kthread.h> -#include <linux/ioport.h> -#include <linux/acpi.h> -#include <linux/highmem.h> -#include <linux/idr.h> -#include <linux/platform_data/x86/apple.h> -#include <linux/ptp_clock_kernel.h> -#include <linux/percpu.h>  #define CREATE_TRACE_POINTS  #include <trace/events/spi.h> @@ -64,7 +64,7 @@ modalias_show(struct device *dev, struct device_attribute *a, char *buf)  	if (len != -ENODEV)  		return len; -	return sprintf(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias); +	return sysfs_emit(buf, "%s%s\n", SPI_MODULE_PREFIX, spi->modalias);  }  static DEVICE_ATTR_RO(modalias); @@ -89,7 +89,7 @@ static ssize_t driver_override_show(struct device *dev,  	ssize_t len;  	device_lock(dev); -	len = snprintf(buf, PAGE_SIZE, "%s\n", spi->driver_override ? : ""); +	len = sysfs_emit(buf, "%s\n", spi->driver_override ? : "");  	device_unlock(dev);  	return len;  } @@ -631,6 +631,16 @@ static int __spi_add_device(struct spi_device *spi)  	struct device *dev = ctlr->dev.parent;  	int status; +	/* Chipselects are numbered 0..max; validate. */ +	if (spi_get_chipselect(spi, 0) >= ctlr->num_chipselect) { +		dev_err(dev, "cs%d >= max %d\n", spi_get_chipselect(spi, 0), +			ctlr->num_chipselect); +		return -EINVAL; +	} + +	/* Set the bus ID string */ +	spi_dev_set_name(spi); +  	/*  	 * We need to make sure there's no other device with this  	 * chipselect **BEFORE** we call setup(), else we'll trash @@ -682,26 +692,15 @@ static int __spi_add_device(struct spi_device *spi)   * @spi: spi_device to register   *   * Companion function to spi_alloc_device.  Devices allocated with - * spi_alloc_device can be added onto the spi bus with this function. + * spi_alloc_device can be added onto the SPI bus with this function.   *   * Return: 0 on success; negative errno on failure   */  int spi_add_device(struct spi_device *spi)  {  	struct spi_controller *ctlr = spi->controller; -	struct device *dev = ctlr->dev.parent;  	int status; -	/* Chipselects are numbered 0..max; validate. */ -	if (spi_get_chipselect(spi, 0) >= ctlr->num_chipselect) { -		dev_err(dev, "cs%d >= max %d\n", spi_get_chipselect(spi, 0), -			ctlr->num_chipselect); -		return -EINVAL; -	} - -	/* Set the bus ID string */ -	spi_dev_set_name(spi); -  	mutex_lock(&ctlr->add_lock);  	status = __spi_add_device(spi);  	mutex_unlock(&ctlr->add_lock); @@ -709,25 +708,6 @@ int spi_add_device(struct spi_device *spi)  }  EXPORT_SYMBOL_GPL(spi_add_device); -static int spi_add_device_locked(struct spi_device *spi) -{ -	struct spi_controller *ctlr = spi->controller; -	struct device *dev = ctlr->dev.parent; - -	/* Chipselects are numbered 0..max; validate. */ -	if (spi_get_chipselect(spi, 0) >= ctlr->num_chipselect) { -		dev_err(dev, "cs%d >= max %d\n", spi_get_chipselect(spi, 0), -			ctlr->num_chipselect); -		return -EINVAL; -	} - -	/* Set the bus ID string */ -	spi_dev_set_name(spi); - -	WARN_ON(!mutex_is_locked(&ctlr->add_lock)); -	return __spi_add_device(spi); -} -  /**   * spi_new_device - instantiate one new SPI device   * @ctlr: Controller to which device is connected @@ -889,7 +869,7 @@ int spi_register_board_info(struct spi_board_info const *info, unsigned n)   * spi_res_alloc - allocate a spi resource that is life-cycle managed   *                 during the processing of a spi_message while using   *                 spi_transfer_one - * @spi:     the spi device for which we allocate memory + * @spi:     the SPI device for which we allocate memory   * @release: the release code to execute for this resource   * @size:    size to alloc and return   * @gfp:     GFP allocation flags @@ -915,7 +895,7 @@ static void *spi_res_alloc(struct spi_device *spi, spi_res_release_t release,  }  /** - * spi_res_free - free an spi resource + * spi_res_free - free an SPI resource   * @res: pointer to the custom data of a resource   */  static void spi_res_free(void *res) @@ -931,7 +911,7 @@ static void spi_res_free(void *res)  /**   * spi_res_add - add a spi_res to the spi_message - * @message: the spi message + * @message: the SPI message   * @res:     the spi_resource   */  static void spi_res_add(struct spi_message *message, void *res) @@ -943,7 +923,7 @@ static void spi_res_add(struct spi_message *message, void *res)  }  /** - * spi_res_release - release all spi resources for this message + * spi_res_release - release all SPI resources for this message   * @ctlr:  the @spi_controller   * @message: the @spi_message   */ @@ -1006,7 +986,7 @@ static void spi_set_cs(struct spi_device *spi, bool enable, bool force)  				gpiod_set_value_cansleep(spi_get_csgpiod(spi, 0), activate);  		}  		/* Some SPI masters need both GPIO CS & slave_select */ -		if ((spi->controller->flags & SPI_MASTER_GPIO_SS) && +		if ((spi->controller->flags & SPI_CONTROLLER_GPIO_SS) &&  		    spi->controller->set_cs)  			spi->controller->set_cs(spi, !enable);  	} else if (spi->controller->set_cs) { @@ -1424,7 +1404,7 @@ int spi_delay_to_ns(struct spi_delay *_delay, struct spi_transfer *xfer)  			return -EINVAL;  		/*  		 * If there is unknown effective speed, approximate it -		 * by underestimating with half of the requested hz. +		 * by underestimating with half of the requested Hz.  		 */  		hz = xfer->effective_speed_hz ?: xfer->speed_hz / 2;  		if (!hz) @@ -1739,11 +1719,11 @@ static int __spi_pump_transfer_message(struct spi_controller *ctlr,  }  /** - * __spi_pump_messages - function which processes spi message queue + * __spi_pump_messages - function which processes SPI message queue   * @ctlr: controller to process queue for   * @in_kthread: true if we are in the context of the message pump thread   * - * This function checks if there is any spi message in the queue that + * This function checks if there is any SPI message in the queue that   * needs processing and if so call out to the driver to initialize hardware   * and transfer each message.   * @@ -1758,7 +1738,7 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)  	unsigned long flags;  	int ret; -	/* Take the IO mutex */ +	/* Take the I/O mutex */  	mutex_lock(&ctlr->io_mutex);  	/* Lock queue */ @@ -2169,8 +2149,8 @@ static int __spi_queued_transfer(struct spi_device *spi,  /**   * spi_queued_transfer - transfer function for queued transfers - * @spi: spi device which is requesting transfer - * @msg: spi message which is to handled is queued to driver queue + * @spi: SPI device which is requesting transfer + * @msg: SPI message which is to handled is queued to driver queue   *   * Return: zero on success, else a negative error code.   */ @@ -2399,9 +2379,6 @@ static void of_register_spi_devices(struct spi_controller *ctlr)  	struct spi_device *spi;  	struct device_node *nc; -	if (!ctlr->dev.of_node) -		return; -  	for_each_available_child_of_node(ctlr->dev.of_node, nc) {  		if (of_node_test_and_set_flag(nc, OF_POPULATED))  			continue; @@ -2432,11 +2409,12 @@ static void of_register_spi_devices(struct spi_controller *ctlr) { }  struct spi_device *spi_new_ancillary_device(struct spi_device *spi,  					     u8 chip_select)  { +	struct spi_controller *ctlr = spi->controller;  	struct spi_device *ancillary;  	int rc = 0;  	/* Alloc an spi_device */ -	ancillary = spi_alloc_device(spi->controller); +	ancillary = spi_alloc_device(ctlr);  	if (!ancillary) {  		rc = -ENOMEM;  		goto err_out; @@ -2451,8 +2429,10 @@ struct spi_device *spi_new_ancillary_device(struct spi_device *spi,  	ancillary->max_speed_hz = spi->max_speed_hz;  	ancillary->mode = spi->mode; +	WARN_ON(!mutex_is_locked(&ctlr->add_lock)); +  	/* Register the new device */ -	rc = spi_add_device_locked(ancillary); +	rc = __spi_add_device(ancillary);  	if (rc) {  		dev_err(&spi->dev, "failed to register ancillary device\n");  		goto err_out; @@ -2499,7 +2479,7 @@ static int acpi_spi_count(struct acpi_resource *ares, void *data)   * acpi_spi_count_resources - Count the number of SpiSerialBus resources   * @adev:	ACPI device   * - * Returns the number of SpiSerialBus resources in the ACPI-device's + * Return: the number of SpiSerialBus resources in the ACPI-device's   * resource-list; or a negative error code.   */  int acpi_spi_count_resources(struct acpi_device *adev) @@ -2633,10 +2613,10 @@ static int acpi_spi_add_resource(struct acpi_resource *ares, void *data)   * @adev: ACPI Device for the spi device   * @index: Index of the spi resource inside the ACPI Node   * - * This should be used to allocate a new spi device from and ACPI Node. - * The caller is responsible for calling spi_add_device to register the spi device. + * This should be used to allocate a new SPI device from and ACPI Device node. + * The caller is responsible for calling spi_add_device to register the SPI device.   * - * If ctlr is set to NULL, the Controller for the spi device will be looked up + * If ctlr is set to NULL, the Controller for the SPI device will be looked up   * using the resource.   * If index is set to -1, index is not used.   * Note: If index is -1, ctlr must be set. @@ -2817,8 +2797,7 @@ static ssize_t slave_show(struct device *dev, struct device_attribute *attr,  	struct device *child;  	child = device_find_any_child(&ctlr->dev); -	return sprintf(buf, "%s\n", -		       child ? to_spi_device(child)->modalias : NULL); +	return sysfs_emit(buf, "%s\n", child ? to_spi_device(child)->modalias : NULL);  }  static ssize_t slave_store(struct device *dev, struct device_attribute *attr, @@ -3056,7 +3035,7 @@ static int spi_get_gpio_descs(struct spi_controller *ctlr)  	ctlr->unused_native_cs = ffs(~native_cs_mask) - 1; -	if ((ctlr->flags & SPI_MASTER_GPIO_SS) && num_cs_gpios && +	if ((ctlr->flags & SPI_CONTROLLER_GPIO_SS) && num_cs_gpios &&  	    ctlr->max_native_cs && ctlr->unused_native_cs >= ctlr->max_native_cs) {  		dev_err(dev, "No unused native chip select available\n");  		return -EINVAL; @@ -3084,6 +3063,20 @@ static int spi_controller_check_ops(struct spi_controller *ctlr)  	return 0;  } +/* Allocate dynamic bus number using Linux idr */ +static int spi_controller_id_alloc(struct spi_controller *ctlr, int start, int end) +{ +	int id; + +	mutex_lock(&board_lock); +	id = idr_alloc(&spi_master_idr, ctlr, start, end, GFP_KERNEL); +	mutex_unlock(&board_lock); +	if (WARN(id < 0, "couldn't get idr")) +		return id == -ENOSPC ? -EBUSY : id; +	ctlr->bus_num = id; +	return 0; +} +  /**   * spi_register_controller - register SPI master or slave controller   * @ctlr: initialized master, originally from spi_alloc_master() or @@ -3111,8 +3104,8 @@ int spi_register_controller(struct spi_controller *ctlr)  {  	struct device		*dev = ctlr->dev.parent;  	struct boardinfo	*bi; +	int			first_dynamic;  	int			status; -	int			id, first_dynamic;  	if (!dev)  		return -ENODEV; @@ -3125,27 +3118,13 @@ int spi_register_controller(struct spi_controller *ctlr)  	if (status)  		return status; +	if (ctlr->bus_num < 0) +		ctlr->bus_num = of_alias_get_id(ctlr->dev.of_node, "spi");  	if (ctlr->bus_num >= 0) {  		/* Devices with a fixed bus num must check-in with the num */ -		mutex_lock(&board_lock); -		id = idr_alloc(&spi_master_idr, ctlr, ctlr->bus_num, -			ctlr->bus_num + 1, GFP_KERNEL); -		mutex_unlock(&board_lock); -		if (WARN(id < 0, "couldn't get idr")) -			return id == -ENOSPC ? -EBUSY : id; -		ctlr->bus_num = id; -	} else if (ctlr->dev.of_node) { -		/* Allocate dynamic bus number using Linux idr */ -		id = of_alias_get_id(ctlr->dev.of_node, "spi"); -		if (id >= 0) { -			ctlr->bus_num = id; -			mutex_lock(&board_lock); -			id = idr_alloc(&spi_master_idr, ctlr, ctlr->bus_num, -				       ctlr->bus_num + 1, GFP_KERNEL); -			mutex_unlock(&board_lock); -			if (WARN(id < 0, "couldn't get idr")) -				return id == -ENOSPC ? -EBUSY : id; -		} +		status = spi_controller_id_alloc(ctlr, ctlr->bus_num, ctlr->bus_num + 1); +		if (status) +			return status;  	}  	if (ctlr->bus_num < 0) {  		first_dynamic = of_alias_get_highest_id("spi"); @@ -3154,13 +3133,9 @@ int spi_register_controller(struct spi_controller *ctlr)  		else  			first_dynamic++; -		mutex_lock(&board_lock); -		id = idr_alloc(&spi_master_idr, ctlr, first_dynamic, -			       0, GFP_KERNEL); -		mutex_unlock(&board_lock); -		if (WARN(id < 0, "couldn't get idr")) -			return id; -		ctlr->bus_num = id; +		status = spi_controller_id_alloc(ctlr, first_dynamic, 0); +		if (status) +			return status;  	}  	ctlr->bus_lock_flag = 0;  	init_completion(&ctlr->xfer_completion); @@ -3339,7 +3314,8 @@ void spi_unregister_controller(struct spi_controller *ctlr)  	if (IS_ENABLED(CONFIG_SPI_DYNAMIC))  		mutex_unlock(&ctlr->add_lock); -	/* Release the last reference on the controller if its driver +	/* +	 * Release the last reference on the controller if its driver  	 * has not yet been converted to devm_spi_alloc_master/slave().  	 */  	if (!ctlr->devm_allocated) @@ -3552,7 +3528,7 @@ static int __spi_split_transfer_maxsize(struct spi_controller *ctlr,  	/* All the others need rx_buf/tx_buf also set */  	for (i = 1, offset = maxsize; i < count; offset += maxsize, i++) { -		/* Update rx_buf, tx_buf and dma */ +		/* Update rx_buf, tx_buf and DMA */  		if (xfers[i].rx_buf)  			xfers[i].rx_buf += offset;  		if (xfers[i].rx_dma) @@ -3622,7 +3598,7 @@ EXPORT_SYMBOL_GPL(spi_split_transfers_maxsize);  /** - * spi_split_transfers_maxwords - split spi transfers into multiple transfers + * spi_split_transfers_maxwords - split SPI transfers into multiple transfers   *                                when an individual transfer exceeds a   *                                certain number of SPI words   * @ctlr:     the @spi_controller for this transfer @@ -3650,13 +3626,7 @@ int spi_split_transfers_maxwords(struct spi_controller *ctlr,  		size_t maxsize;  		int ret; -		if (xfer->bits_per_word <= 8) -			maxsize = maxwords; -		else if (xfer->bits_per_word <= 16) -			maxsize = 2 * maxwords; -		else -			maxsize = 4 * maxwords; - +		maxsize = maxwords * roundup_pow_of_two(BITS_TO_BYTES(xfer->bits_per_word));  		if (xfer->len > maxsize) {  			ret = __spi_split_transfer_maxsize(ctlr, msg, &xfer,  							   maxsize, gfp); @@ -3671,7 +3641,8 @@ EXPORT_SYMBOL_GPL(spi_split_transfers_maxwords);  /*-------------------------------------------------------------------------*/ -/* Core methods for SPI controller protocol drivers.  Some of the +/* + * Core methods for SPI controller protocol drivers. Some of the   * other core methods are currently defined as inline functions.   */ @@ -3731,7 +3702,7 @@ static int spi_set_cs_timing(struct spi_device *spi)   * changes those settings, and must be called from a context that can sleep.   * Except for SPI_CS_HIGH, which takes effect immediately, the changes take   * effect the next time the device is selected and data is transferred to - * or from it.  When this function returns, the spi device is deselected. + * or from it.  When this function returns, the SPI device is deselected.   *   * Note that this call will fail if the protocol driver specifies an option   * that the underlying controller or its driver does not support.  For @@ -3906,11 +3877,9 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message)  	 */  	if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) ||  					  spi_get_csgpiod(spi, 0))) { -		size_t maxsize; +		size_t maxsize = BITS_TO_BYTES(spi->bits_per_word);  		int ret; -		maxsize = (spi->bits_per_word + 7) / 8; -  		/* spi_split_transfers_maxsize() requires message->spi */  		message->spi = spi; @@ -4071,7 +4040,7 @@ static int __spi_async(struct spi_device *spi, struct spi_message *message)   * spi_async - asynchronous SPI transfer   * @spi: device with which data will be exchanged   * @message: describes the data transfers, including completion callback - * Context: any (irqs may be blocked, etc) + * Context: any (IRQs may be blocked, etc)   *   * This call may be used in_irq and other contexts which can't sleep,   * as well as from task contexts which can sleep. @@ -4125,7 +4094,7 @@ EXPORT_SYMBOL_GPL(spi_async);   * spi_async_locked - version of spi_async with exclusive bus usage   * @spi: device with which data will be exchanged   * @message: describes the data transfers, including completion callback - * Context: any (irqs may be blocked, etc) + * Context: any (IRQs may be blocked, etc)   *   * This call may be used in_irq and other contexts which can't sleep,   * as well as from task contexts which can sleep. @@ -4388,9 +4357,9 @@ static u8	*buf;  /**   * spi_write_then_read - SPI synchronous write followed by read   * @spi: device with which data will be exchanged - * @txbuf: data to be written (need not be dma-safe) + * @txbuf: data to be written (need not be DMA-safe)   * @n_tx: size of txbuf, in bytes - * @rxbuf: buffer into which data will be read (need not be dma-safe) + * @rxbuf: buffer into which data will be read (need not be DMA-safe)   * @n_rx: size of rxbuf, in bytes   * Context: can sleep   * @@ -4401,7 +4370,7 @@ static u8	*buf;   *   * Parameters to this routine are always copied using a small buffer.   * Performance-sensitive or bulk transfer code should instead use - * spi_{async,sync}() calls with dma-safe buffers. + * spi_{async,sync}() calls with DMA-safe buffers.   *   * Return: zero on success, else a negative error code.   */ @@ -4446,7 +4415,7 @@ int spi_write_then_read(struct spi_device *spi,  	x[0].tx_buf = local_buf;  	x[1].rx_buf = local_buf + n_tx; -	/* Do the i/o */ +	/* Do the I/O */  	status = spi_sync(spi, &message);  	if (status == 0)  		memcpy(rxbuf, x[1].rx_buf, n_rx);  | 
