Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge remote-tracking branches 'spi/topic/bcm2835', 'spi/topic/bcm63xx', 'spi/topic/bcm63xx-hsspi', 'spi/topic/bitbang', 'spi/topic/bpw', 'spi/topic/clps711x', 'spi/topic/coldfire', 'spi/topic/davinci', 'spi/topic/dw' and 'spi/topic/falcon' into spi-linus

+763 -452
+8 -2
drivers/spi/Kconfig
··· 118 118 help 119 119 Enable support for the SPI controller on the Broadcom BCM63xx SoCs. 120 120 121 + config SPI_BCM63XX_HSSPI 122 + tristate "Broadcom BCM63XX HS SPI controller driver" 123 + depends on BCM63XX || COMPILE_TEST 124 + help 125 + This enables support for the High Speed SPI controller present on 126 + newer Broadcom BCM63XX SoCs. 127 + 121 128 config SPI_BITBANG 122 129 tristate "Utilities for Bitbanging SPI masters" 123 130 help ··· 166 159 tristate "Texas Instruments DaVinci/DA8x/OMAP-L/AM1x SoC SPI controller" 167 160 depends on ARCH_DAVINCI || ARCH_KEYSTONE 168 161 select SPI_BITBANG 169 - select TI_EDMA 170 162 help 171 163 SPI master controller for DaVinci/DA8x/OMAP-L/AM1x SPI modules. 172 164 ··· 376 370 377 371 config SPI_RSPI 378 372 tristate "Renesas RSPI controller" 379 - depends on (SUPERH || ARCH_SHMOBILE) && SH_DMAE_BASE 373 + depends on (SUPERH && SH_DMAE_BASE) || ARCH_SHMOBILE 380 374 help 381 375 SPI driver for Renesas RSPI blocks. 382 376
+1
drivers/spi/Makefile
··· 16 16 obj-$(CONFIG_SPI_AU1550) += spi-au1550.o 17 17 obj-$(CONFIG_SPI_BCM2835) += spi-bcm2835.o 18 18 obj-$(CONFIG_SPI_BCM63XX) += spi-bcm63xx.o 19 + obj-$(CONFIG_SPI_BCM63XX_HSSPI) += spi-bcm63xx-hsspi.o 19 20 obj-$(CONFIG_SPI_BFIN5XX) += spi-bfin5xx.o 20 21 obj-$(CONFIG_SPI_BFIN_V3) += spi-bfin-v3.o 21 22 obj-$(CONFIG_SPI_BFIN_SPORT) += spi-bfin-sport.o
+3 -7
drivers/spi/spi-bcm2835.c
··· 347 347 348 348 clk_prepare_enable(bs->clk); 349 349 350 - err = request_irq(bs->irq, bcm2835_spi_interrupt, 0, 351 - dev_name(&pdev->dev), master); 350 + err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt, 0, 351 + dev_name(&pdev->dev), master); 352 352 if (err) { 353 353 dev_err(&pdev->dev, "could not request IRQ: %d\n", err); 354 354 goto out_clk_disable; ··· 361 361 err = devm_spi_register_master(&pdev->dev, master); 362 362 if (err) { 363 363 dev_err(&pdev->dev, "could not register SPI master: %d\n", err); 364 - goto out_free_irq; 364 + goto out_clk_disable; 365 365 } 366 366 367 367 return 0; 368 368 369 - out_free_irq: 370 - free_irq(bs->irq, master); 371 369 out_clk_disable: 372 370 clk_disable_unprepare(bs->clk); 373 371 out_master_put: ··· 377 379 { 378 380 struct spi_master *master = platform_get_drvdata(pdev); 379 381 struct bcm2835_spi *bs = spi_master_get_devdata(master); 380 - 381 - free_irq(bs->irq, master); 382 382 383 383 /* Clear FIFOs, and disable the HW block */ 384 384 bcm2835_wr(bs, BCM2835_SPI_CS,
+475
drivers/spi/spi-bcm63xx-hsspi.c
··· 1 + /* 2 + * Broadcom BCM63XX High Speed SPI Controller driver 3 + * 4 + * Copyright 2000-2010 Broadcom Corporation 5 + * Copyright 2012-2013 Jonas Gorski <jogo@openwrt.org> 6 + * 7 + * Licensed under the GNU/GPL. See COPYING for details. 8 + */ 9 + 10 + #include <linux/kernel.h> 11 + #include <linux/init.h> 12 + #include <linux/io.h> 13 + #include <linux/clk.h> 14 + #include <linux/module.h> 15 + #include <linux/platform_device.h> 16 + #include <linux/delay.h> 17 + #include <linux/dma-mapping.h> 18 + #include <linux/err.h> 19 + #include <linux/interrupt.h> 20 + #include <linux/spi/spi.h> 21 + #include <linux/workqueue.h> 22 + #include <linux/mutex.h> 23 + 24 + #define HSSPI_GLOBAL_CTRL_REG 0x0 25 + #define GLOBAL_CTRL_CS_POLARITY_SHIFT 0 26 + #define GLOBAL_CTRL_CS_POLARITY_MASK 0x000000ff 27 + #define GLOBAL_CTRL_PLL_CLK_CTRL_SHIFT 8 28 + #define GLOBAL_CTRL_PLL_CLK_CTRL_MASK 0x0000ff00 29 + #define GLOBAL_CTRL_CLK_GATE_SSOFF BIT(16) 30 + #define GLOBAL_CTRL_CLK_POLARITY BIT(17) 31 + #define GLOBAL_CTRL_MOSI_IDLE BIT(18) 32 + 33 + #define HSSPI_GLOBAL_EXT_TRIGGER_REG 0x4 34 + 35 + #define HSSPI_INT_STATUS_REG 0x8 36 + #define HSSPI_INT_STATUS_MASKED_REG 0xc 37 + #define HSSPI_INT_MASK_REG 0x10 38 + 39 + #define HSSPI_PINGx_CMD_DONE(i) BIT((i * 8) + 0) 40 + #define HSSPI_PINGx_RX_OVER(i) BIT((i * 8) + 1) 41 + #define HSSPI_PINGx_TX_UNDER(i) BIT((i * 8) + 2) 42 + #define HSSPI_PINGx_POLL_TIMEOUT(i) BIT((i * 8) + 3) 43 + #define HSSPI_PINGx_CTRL_INVAL(i) BIT((i * 8) + 4) 44 + 45 + #define HSSPI_INT_CLEAR_ALL 0xff001f1f 46 + 47 + #define HSSPI_PINGPONG_COMMAND_REG(x) (0x80 + (x) * 0x40) 48 + #define PINGPONG_CMD_COMMAND_MASK 0xf 49 + #define PINGPONG_COMMAND_NOOP 0 50 + #define PINGPONG_COMMAND_START_NOW 1 51 + #define PINGPONG_COMMAND_START_TRIGGER 2 52 + #define PINGPONG_COMMAND_HALT 3 53 + #define PINGPONG_COMMAND_FLUSH 4 54 + #define PINGPONG_CMD_PROFILE_SHIFT 8 55 + #define PINGPONG_CMD_SS_SHIFT 12 56 + 57 + #define HSSPI_PINGPONG_STATUS_REG(x) (0x84 + (x) * 0x40) 58 + 59 + #define HSSPI_PROFILE_CLK_CTRL_REG(x) (0x100 + (x) * 0x20) 60 + #define CLK_CTRL_FREQ_CTRL_MASK 0x0000ffff 61 + #define CLK_CTRL_SPI_CLK_2X_SEL BIT(14) 62 + #define CLK_CTRL_ACCUM_RST_ON_LOOP BIT(15) 63 + 64 + #define HSSPI_PROFILE_SIGNAL_CTRL_REG(x) (0x104 + (x) * 0x20) 65 + #define SIGNAL_CTRL_LATCH_RISING BIT(12) 66 + #define SIGNAL_CTRL_LAUNCH_RISING BIT(13) 67 + #define SIGNAL_CTRL_ASYNC_INPUT_PATH BIT(16) 68 + 69 + #define HSSPI_PROFILE_MODE_CTRL_REG(x) (0x108 + (x) * 0x20) 70 + #define MODE_CTRL_MULTIDATA_RD_STRT_SHIFT 8 71 + #define MODE_CTRL_MULTIDATA_WR_STRT_SHIFT 12 72 + #define MODE_CTRL_MULTIDATA_RD_SIZE_SHIFT 16 73 + #define MODE_CTRL_MULTIDATA_WR_SIZE_SHIFT 18 74 + #define MODE_CTRL_MODE_3WIRE BIT(20) 75 + #define MODE_CTRL_PREPENDBYTE_CNT_SHIFT 24 76 + 77 + #define HSSPI_FIFO_REG(x) (0x200 + (x) * 0x200) 78 + 79 + 80 + #define HSSPI_OP_CODE_SHIFT 13 81 + #define HSSPI_OP_SLEEP (0 << HSSPI_OP_CODE_SHIFT) 82 + #define HSSPI_OP_READ_WRITE (1 << HSSPI_OP_CODE_SHIFT) 83 + #define HSSPI_OP_WRITE (2 << HSSPI_OP_CODE_SHIFT) 84 + #define HSSPI_OP_READ (3 << HSSPI_OP_CODE_SHIFT) 85 + #define HSSPI_OP_SETIRQ (4 << HSSPI_OP_CODE_SHIFT) 86 + 87 + #define HSSPI_BUFFER_LEN 512 88 + #define HSSPI_OPCODE_LEN 2 89 + 90 + #define HSSPI_MAX_PREPEND_LEN 15 91 + 92 + #define HSSPI_MAX_SYNC_CLOCK 30000000 93 + 94 + #define HSSPI_BUS_NUM 1 /* 0 is legacy SPI */ 95 + 96 + struct bcm63xx_hsspi { 97 + struct completion done; 98 + struct mutex bus_mutex; 99 + 100 + struct platform_device *pdev; 101 + struct clk *clk; 102 + void __iomem *regs; 103 + u8 __iomem *fifo; 104 + 105 + u32 speed_hz; 106 + u8 cs_polarity; 107 + }; 108 + 109 + static void bcm63xx_hsspi_set_cs(struct bcm63xx_hsspi *bs, unsigned cs, 110 + bool active) 111 + { 112 + u32 reg; 113 + 114 + mutex_lock(&bs->bus_mutex); 115 + reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); 116 + 117 + reg &= ~BIT(cs); 118 + if (active == !(bs->cs_polarity & BIT(cs))) 119 + reg |= BIT(cs); 120 + 121 + __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); 122 + mutex_unlock(&bs->bus_mutex); 123 + } 124 + 125 + static void bcm63xx_hsspi_set_clk(struct bcm63xx_hsspi *bs, 126 + struct spi_device *spi, int hz) 127 + { 128 + unsigned profile = spi->chip_select; 129 + u32 reg; 130 + 131 + reg = DIV_ROUND_UP(2048, DIV_ROUND_UP(bs->speed_hz, hz)); 132 + __raw_writel(CLK_CTRL_ACCUM_RST_ON_LOOP | reg, 133 + bs->regs + HSSPI_PROFILE_CLK_CTRL_REG(profile)); 134 + 135 + reg = __raw_readl(bs->regs + HSSPI_PROFILE_SIGNAL_CTRL_REG(profile)); 136 + if (hz > HSSPI_MAX_SYNC_CLOCK) 137 + reg |= SIGNAL_CTRL_ASYNC_INPUT_PATH; 138 + else 139 + reg &= ~SIGNAL_CTRL_ASYNC_INPUT_PATH; 140 + __raw_writel(reg, bs->regs + HSSPI_PROFILE_SIGNAL_CTRL_REG(profile)); 141 + 142 + mutex_lock(&bs->bus_mutex); 143 + /* setup clock polarity */ 144 + reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); 145 + reg &= ~GLOBAL_CTRL_CLK_POLARITY; 146 + if (spi->mode & SPI_CPOL) 147 + reg |= GLOBAL_CTRL_CLK_POLARITY; 148 + __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); 149 + mutex_unlock(&bs->bus_mutex); 150 + } 151 + 152 + static int bcm63xx_hsspi_do_txrx(struct spi_device *spi, struct spi_transfer *t) 153 + { 154 + struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); 155 + unsigned chip_select = spi->chip_select; 156 + u16 opcode = 0; 157 + int pending = t->len; 158 + int step_size = HSSPI_BUFFER_LEN; 159 + const u8 *tx = t->tx_buf; 160 + u8 *rx = t->rx_buf; 161 + 162 + bcm63xx_hsspi_set_clk(bs, spi, t->speed_hz); 163 + bcm63xx_hsspi_set_cs(bs, spi->chip_select, true); 164 + 165 + if (tx && rx) 166 + opcode = HSSPI_OP_READ_WRITE; 167 + else if (tx) 168 + opcode = HSSPI_OP_WRITE; 169 + else if (rx) 170 + opcode = HSSPI_OP_READ; 171 + 172 + if (opcode != HSSPI_OP_READ) 173 + step_size -= HSSPI_OPCODE_LEN; 174 + 175 + __raw_writel(0 << MODE_CTRL_PREPENDBYTE_CNT_SHIFT | 176 + 2 << MODE_CTRL_MULTIDATA_WR_STRT_SHIFT | 177 + 2 << MODE_CTRL_MULTIDATA_RD_STRT_SHIFT | 0xff, 178 + bs->regs + HSSPI_PROFILE_MODE_CTRL_REG(chip_select)); 179 + 180 + while (pending > 0) { 181 + int curr_step = min_t(int, step_size, pending); 182 + 183 + init_completion(&bs->done); 184 + if (tx) { 185 + memcpy_toio(bs->fifo + HSSPI_OPCODE_LEN, tx, curr_step); 186 + tx += curr_step; 187 + } 188 + 189 + __raw_writew(opcode | curr_step, bs->fifo); 190 + 191 + /* enable interrupt */ 192 + __raw_writel(HSSPI_PINGx_CMD_DONE(0), 193 + bs->regs + HSSPI_INT_MASK_REG); 194 + 195 + /* start the transfer */ 196 + __raw_writel(!chip_select << PINGPONG_CMD_SS_SHIFT | 197 + chip_select << PINGPONG_CMD_PROFILE_SHIFT | 198 + PINGPONG_COMMAND_START_NOW, 199 + bs->regs + HSSPI_PINGPONG_COMMAND_REG(0)); 200 + 201 + if (wait_for_completion_timeout(&bs->done, HZ) == 0) { 202 + dev_err(&bs->pdev->dev, "transfer timed out!\n"); 203 + return -ETIMEDOUT; 204 + } 205 + 206 + if (rx) { 207 + memcpy_fromio(rx, bs->fifo, curr_step); 208 + rx += curr_step; 209 + } 210 + 211 + pending -= curr_step; 212 + } 213 + 214 + return 0; 215 + } 216 + 217 + static int bcm63xx_hsspi_setup(struct spi_device *spi) 218 + { 219 + struct bcm63xx_hsspi *bs = spi_master_get_devdata(spi->master); 220 + u32 reg; 221 + 222 + reg = __raw_readl(bs->regs + 223 + HSSPI_PROFILE_SIGNAL_CTRL_REG(spi->chip_select)); 224 + reg &= ~(SIGNAL_CTRL_LAUNCH_RISING | SIGNAL_CTRL_LATCH_RISING); 225 + if (spi->mode & SPI_CPHA) 226 + reg |= SIGNAL_CTRL_LAUNCH_RISING; 227 + else 228 + reg |= SIGNAL_CTRL_LATCH_RISING; 229 + __raw_writel(reg, bs->regs + 230 + HSSPI_PROFILE_SIGNAL_CTRL_REG(spi->chip_select)); 231 + 232 + mutex_lock(&bs->bus_mutex); 233 + reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); 234 + 235 + /* only change actual polarities if there is no transfer */ 236 + if ((reg & GLOBAL_CTRL_CS_POLARITY_MASK) == bs->cs_polarity) { 237 + if (spi->mode & SPI_CS_HIGH) 238 + reg |= BIT(spi->chip_select); 239 + else 240 + reg &= ~BIT(spi->chip_select); 241 + __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); 242 + } 243 + 244 + if (spi->mode & SPI_CS_HIGH) 245 + bs->cs_polarity |= BIT(spi->chip_select); 246 + else 247 + bs->cs_polarity &= ~BIT(spi->chip_select); 248 + 249 + mutex_unlock(&bs->bus_mutex); 250 + 251 + return 0; 252 + } 253 + 254 + static int bcm63xx_hsspi_transfer_one(struct spi_master *master, 255 + struct spi_message *msg) 256 + { 257 + struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); 258 + struct spi_transfer *t; 259 + struct spi_device *spi = msg->spi; 260 + int status = -EINVAL; 261 + int dummy_cs; 262 + u32 reg; 263 + 264 + /* This controller does not support keeping CS active during idle. 265 + * To work around this, we use the following ugly hack: 266 + * 267 + * a. Invert the target chip select's polarity so it will be active. 268 + * b. Select a "dummy" chip select to use as the hardware target. 269 + * c. Invert the dummy chip select's polarity so it will be inactive 270 + * during the actual transfers. 271 + * d. Tell the hardware to send to the dummy chip select. Thanks to 272 + * the multiplexed nature of SPI the actual target will receive 273 + * the transfer and we see its response. 274 + * 275 + * e. At the end restore the polarities again to their default values. 276 + */ 277 + 278 + dummy_cs = !spi->chip_select; 279 + bcm63xx_hsspi_set_cs(bs, dummy_cs, true); 280 + 281 + list_for_each_entry(t, &msg->transfers, transfer_list) { 282 + status = bcm63xx_hsspi_do_txrx(spi, t); 283 + if (status) 284 + break; 285 + 286 + msg->actual_length += t->len; 287 + 288 + if (t->delay_usecs) 289 + udelay(t->delay_usecs); 290 + 291 + if (t->cs_change) 292 + bcm63xx_hsspi_set_cs(bs, spi->chip_select, false); 293 + } 294 + 295 + mutex_lock(&bs->bus_mutex); 296 + reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); 297 + reg &= ~GLOBAL_CTRL_CS_POLARITY_MASK; 298 + reg |= bs->cs_polarity; 299 + __raw_writel(reg, bs->regs + HSSPI_GLOBAL_CTRL_REG); 300 + mutex_unlock(&bs->bus_mutex); 301 + 302 + msg->status = status; 303 + spi_finalize_current_message(master); 304 + 305 + return 0; 306 + } 307 + 308 + static irqreturn_t bcm63xx_hsspi_interrupt(int irq, void *dev_id) 309 + { 310 + struct bcm63xx_hsspi *bs = (struct bcm63xx_hsspi *)dev_id; 311 + 312 + if (__raw_readl(bs->regs + HSSPI_INT_STATUS_MASKED_REG) == 0) 313 + return IRQ_NONE; 314 + 315 + __raw_writel(HSSPI_INT_CLEAR_ALL, bs->regs + HSSPI_INT_STATUS_REG); 316 + __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); 317 + 318 + complete(&bs->done); 319 + 320 + return IRQ_HANDLED; 321 + } 322 + 323 + static int bcm63xx_hsspi_probe(struct platform_device *pdev) 324 + { 325 + struct spi_master *master; 326 + struct bcm63xx_hsspi *bs; 327 + struct resource *res_mem; 328 + void __iomem *regs; 329 + struct device *dev = &pdev->dev; 330 + struct clk *clk; 331 + int irq, ret; 332 + u32 reg, rate; 333 + 334 + irq = platform_get_irq(pdev, 0); 335 + if (irq < 0) { 336 + dev_err(dev, "no irq\n"); 337 + return -ENXIO; 338 + } 339 + 340 + res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 341 + regs = devm_ioremap_resource(dev, res_mem); 342 + if (IS_ERR(regs)) 343 + return PTR_ERR(regs); 344 + 345 + clk = devm_clk_get(dev, "hsspi"); 346 + 347 + if (IS_ERR(clk)) 348 + return PTR_ERR(clk); 349 + 350 + rate = clk_get_rate(clk); 351 + if (!rate) 352 + return -EINVAL; 353 + 354 + ret = clk_prepare_enable(clk); 355 + if (ret) 356 + return ret; 357 + 358 + master = spi_alloc_master(&pdev->dev, sizeof(*bs)); 359 + if (!master) { 360 + ret = -ENOMEM; 361 + goto out_disable_clk; 362 + } 363 + 364 + bs = spi_master_get_devdata(master); 365 + bs->pdev = pdev; 366 + bs->clk = clk; 367 + bs->regs = regs; 368 + bs->speed_hz = rate; 369 + bs->fifo = (u8 __iomem *)(bs->regs + HSSPI_FIFO_REG(0)); 370 + 371 + mutex_init(&bs->bus_mutex); 372 + 373 + master->bus_num = HSSPI_BUS_NUM; 374 + master->num_chipselect = 8; 375 + master->setup = bcm63xx_hsspi_setup; 376 + master->transfer_one_message = bcm63xx_hsspi_transfer_one; 377 + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; 378 + master->bits_per_word_mask = SPI_BPW_MASK(8); 379 + master->auto_runtime_pm = true; 380 + 381 + platform_set_drvdata(pdev, master); 382 + 383 + /* Initialize the hardware */ 384 + __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); 385 + 386 + /* clean up any pending interrupts */ 387 + __raw_writel(HSSPI_INT_CLEAR_ALL, bs->regs + HSSPI_INT_STATUS_REG); 388 + 389 + /* read out default CS polarities */ 390 + reg = __raw_readl(bs->regs + HSSPI_GLOBAL_CTRL_REG); 391 + bs->cs_polarity = reg & GLOBAL_CTRL_CS_POLARITY_MASK; 392 + __raw_writel(reg | GLOBAL_CTRL_CLK_GATE_SSOFF, 393 + bs->regs + HSSPI_GLOBAL_CTRL_REG); 394 + 395 + ret = devm_request_irq(dev, irq, bcm63xx_hsspi_interrupt, IRQF_SHARED, 396 + pdev->name, bs); 397 + 398 + if (ret) 399 + goto out_put_master; 400 + 401 + /* register and we are done */ 402 + ret = devm_spi_register_master(dev, master); 403 + if (ret) 404 + goto out_put_master; 405 + 406 + return 0; 407 + 408 + out_put_master: 409 + spi_master_put(master); 410 + out_disable_clk: 411 + clk_disable_unprepare(clk); 412 + return ret; 413 + } 414 + 415 + 416 + static int bcm63xx_hsspi_remove(struct platform_device *pdev) 417 + { 418 + struct spi_master *master = platform_get_drvdata(pdev); 419 + struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); 420 + 421 + /* reset the hardware and block queue progress */ 422 + __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG); 423 + clk_disable_unprepare(bs->clk); 424 + 425 + return 0; 426 + } 427 + 428 + #ifdef CONFIG_PM_SLEEP 429 + static int bcm63xx_hsspi_suspend(struct device *dev) 430 + { 431 + struct spi_master *master = dev_get_drvdata(dev); 432 + struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); 433 + 434 + spi_master_suspend(master); 435 + clk_disable_unprepare(bs->clk); 436 + 437 + return 0; 438 + } 439 + 440 + static int bcm63xx_hsspi_resume(struct device *dev) 441 + { 442 + struct spi_master *master = dev_get_drvdata(dev); 443 + struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); 444 + int ret; 445 + 446 + ret = clk_prepare_enable(bs->clk); 447 + if (ret) 448 + return ret; 449 + 450 + spi_master_resume(master); 451 + 452 + return 0; 453 + } 454 + #endif 455 + 456 + static const struct dev_pm_ops bcm63xx_hsspi_pm_ops = { 457 + SET_SYSTEM_SLEEP_PM_OPS(bcm63xx_hsspi_suspend, bcm63xx_hsspi_resume) 458 + }; 459 + 460 + static struct platform_driver bcm63xx_hsspi_driver = { 461 + .driver = { 462 + .name = "bcm63xx-hsspi", 463 + .owner = THIS_MODULE, 464 + .pm = &bcm63xx_hsspi_pm_ops, 465 + }, 466 + .probe = bcm63xx_hsspi_probe, 467 + .remove = bcm63xx_hsspi_remove, 468 + }; 469 + 470 + module_platform_driver(bcm63xx_hsspi_driver); 471 + 472 + MODULE_ALIAS("platform:bcm63xx_hsspi"); 473 + MODULE_DESCRIPTION("Broadcom BCM63xx High Speed SPI Controller driver"); 474 + MODULE_AUTHOR("Jonas Gorski <jogo@openwrt.org>"); 475 + MODULE_LICENSE("GPL");
+17 -29
drivers/spi/spi-bcm63xx.c
··· 203 203 if (!timeout) 204 204 return -ETIMEDOUT; 205 205 206 - /* read out all data */ 207 - rx_tail = bcm_spi_readb(bs, SPI_RX_TAIL); 208 - 209 - if (do_rx && rx_tail != len) 210 - return -EIO; 211 - 212 - if (!rx_tail) 206 + if (!do_rx) 213 207 return 0; 214 208 215 209 len = 0; ··· 337 343 irq = platform_get_irq(pdev, 0); 338 344 if (irq < 0) { 339 345 dev_err(dev, "no irq\n"); 340 - ret = -ENXIO; 341 - goto out; 346 + return -ENXIO; 342 347 } 343 348 344 - clk = clk_get(dev, "spi"); 349 + clk = devm_clk_get(dev, "spi"); 345 350 if (IS_ERR(clk)) { 346 351 dev_err(dev, "no clock for device\n"); 347 - ret = PTR_ERR(clk); 348 - goto out; 352 + return PTR_ERR(clk); 349 353 } 350 354 351 355 master = spi_alloc_master(dev, sizeof(*bs)); 352 356 if (!master) { 353 357 dev_err(dev, "out of memory\n"); 354 - ret = -ENOMEM; 355 - goto out_clk; 358 + return -ENOMEM; 356 359 } 357 360 358 361 bs = spi_master_get_devdata(master); ··· 397 406 } 398 407 399 408 /* Initialize hardware */ 400 - clk_prepare_enable(bs->clk); 409 + ret = clk_prepare_enable(bs->clk); 410 + if (ret) 411 + goto out_err; 412 + 401 413 bcm_spi_writeb(bs, SPI_INTR_CLEAR_ALL, SPI_INT_STATUS); 402 414 403 415 /* register and we are done */ ··· 419 425 clk_disable_unprepare(clk); 420 426 out_err: 421 427 spi_master_put(master); 422 - out_clk: 423 - clk_put(clk); 424 - out: 425 428 return ret; 426 429 } 427 430 ··· 432 441 433 442 /* HW shutdown */ 434 443 clk_disable_unprepare(bs->clk); 435 - clk_put(bs->clk); 436 444 437 445 return 0; 438 446 } 439 447 440 - #ifdef CONFIG_PM 448 + #ifdef CONFIG_PM_SLEEP 441 449 static int bcm63xx_spi_suspend(struct device *dev) 442 450 { 443 451 struct spi_master *master = dev_get_drvdata(dev); ··· 453 463 { 454 464 struct spi_master *master = dev_get_drvdata(dev); 455 465 struct bcm63xx_spi *bs = spi_master_get_devdata(master); 466 + int ret; 456 467 457 - clk_prepare_enable(bs->clk); 468 + ret = clk_prepare_enable(bs->clk); 469 + if (ret) 470 + return ret; 458 471 459 472 spi_master_resume(master); 460 473 461 474 return 0; 462 475 } 476 + #endif 463 477 464 478 static const struct dev_pm_ops bcm63xx_spi_pm_ops = { 465 - .suspend = bcm63xx_spi_suspend, 466 - .resume = bcm63xx_spi_resume, 479 + SET_SYSTEM_SLEEP_PM_OPS(bcm63xx_spi_suspend, bcm63xx_spi_resume) 467 480 }; 468 - 469 - #define BCM63XX_SPI_PM_OPS (&bcm63xx_spi_pm_ops) 470 - #else 471 - #define BCM63XX_SPI_PM_OPS NULL 472 - #endif 473 481 474 482 static struct platform_driver bcm63xx_spi_driver = { 475 483 .driver = { 476 484 .name = "bcm63xx-spi", 477 485 .owner = THIS_MODULE, 478 - .pm = BCM63XX_SPI_PM_OPS, 486 + .pm = &bcm63xx_spi_pm_ops, 479 487 }, 480 488 .probe = bcm63xx_spi_probe, 481 489 .remove = bcm63xx_spi_remove,
+1 -1
drivers/spi/spi-bitbang-txrx.h
··· 38 38 * 39 39 * Since this is software, the timings may not be exactly what your board's 40 40 * chips need ... there may be several reasons you'd need to tweak timings 41 - * in these routines, not just make to make it faster or slower to match a 41 + * in these routines, not just to make it faster or slower to match a 42 42 * particular CPU clock rate. 43 43 */ 44 44
+3 -20
drivers/spi/spi-clps711x.c
··· 1 1 /* 2 2 * CLPS711X SPI bus driver 3 3 * 4 - * Copyright (C) 2012 Alexander Shiyan <shc_work@mail.ru> 4 + * Copyright (C) 2012-2014 Alexander Shiyan <shc_work@mail.ru> 5 5 * 6 6 * This program is free software; you can redistribute it and/or modify 7 7 * it under the terms of the GNU General Public License as published by ··· 198 198 ret = -EINVAL; 199 199 goto err_out; 200 200 } 201 - if (gpio_request(hw->chipselect[i], DRIVER_NAME)) { 201 + if (devm_gpio_request(&pdev->dev, hw->chipselect[i], NULL)) { 202 202 dev_err(&pdev->dev, "Can't get CS GPIO %i\n", i); 203 203 ret = -EINVAL; 204 204 goto err_out; ··· 240 240 dev_err(&pdev->dev, "Failed to register master\n"); 241 241 242 242 err_out: 243 - while (--i >= 0) 244 - if (gpio_is_valid(hw->chipselect[i])) 245 - gpio_free(hw->chipselect[i]); 246 - 247 243 spi_master_put(master); 248 244 249 245 return ret; 250 - } 251 - 252 - static int spi_clps711x_remove(struct platform_device *pdev) 253 - { 254 - int i; 255 - struct spi_master *master = platform_get_drvdata(pdev); 256 - struct spi_clps711x_data *hw = spi_master_get_devdata(master); 257 - 258 - for (i = 0; i < master->num_chipselect; i++) 259 - if (gpio_is_valid(hw->chipselect[i])) 260 - gpio_free(hw->chipselect[i]); 261 - 262 - return 0; 263 246 } 264 247 265 248 static struct platform_driver clps711x_spi_driver = { ··· 251 268 .owner = THIS_MODULE, 252 269 }, 253 270 .probe = spi_clps711x_probe, 254 - .remove = spi_clps711x_remove, 255 271 }; 256 272 module_platform_driver(clps711x_spi_driver); 257 273 258 274 MODULE_LICENSE("GPL"); 259 275 MODULE_AUTHOR("Alexander Shiyan <shc_work@mail.ru>"); 260 276 MODULE_DESCRIPTION("CLPS711X SPI bus driver"); 277 + MODULE_ALIAS("platform:" DRIVER_NAME);
+14 -39
drivers/spi/spi-coldfire-qspi.c
··· 397 397 mcfqspi = spi_master_get_devdata(master); 398 398 399 399 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 400 - if (!res) { 401 - dev_dbg(&pdev->dev, "platform_get_resource failed\n"); 402 - status = -ENXIO; 400 + mcfqspi->iobase = devm_ioremap_resource(&pdev->dev, res); 401 + if (IS_ERR(mcfqspi->iobase)) { 402 + status = PTR_ERR(mcfqspi->iobase); 403 403 goto fail0; 404 - } 405 - 406 - if (!request_mem_region(res->start, resource_size(res), pdev->name)) { 407 - dev_dbg(&pdev->dev, "request_mem_region failed\n"); 408 - status = -EBUSY; 409 - goto fail0; 410 - } 411 - 412 - mcfqspi->iobase = ioremap(res->start, resource_size(res)); 413 - if (!mcfqspi->iobase) { 414 - dev_dbg(&pdev->dev, "ioremap failed\n"); 415 - status = -ENOMEM; 416 - goto fail1; 417 404 } 418 405 419 406 mcfqspi->irq = platform_get_irq(pdev, 0); 420 407 if (mcfqspi->irq < 0) { 421 408 dev_dbg(&pdev->dev, "platform_get_irq failed\n"); 422 409 status = -ENXIO; 423 - goto fail2; 410 + goto fail0; 424 411 } 425 412 426 - status = request_irq(mcfqspi->irq, mcfqspi_irq_handler, 0, 427 - pdev->name, mcfqspi); 413 + status = devm_request_irq(&pdev->dev, mcfqspi->irq, mcfqspi_irq_handler, 414 + 0, pdev->name, mcfqspi); 428 415 if (status) { 429 416 dev_dbg(&pdev->dev, "request_irq failed\n"); 430 - goto fail2; 417 + goto fail0; 431 418 } 432 419 433 - mcfqspi->clk = clk_get(&pdev->dev, "qspi_clk"); 420 + mcfqspi->clk = devm_clk_get(&pdev->dev, "qspi_clk"); 434 421 if (IS_ERR(mcfqspi->clk)) { 435 422 dev_dbg(&pdev->dev, "clk_get failed\n"); 436 423 status = PTR_ERR(mcfqspi->clk); 437 - goto fail3; 424 + goto fail0; 438 425 } 439 426 clk_enable(mcfqspi->clk); 440 427 ··· 432 445 status = mcfqspi_cs_setup(mcfqspi); 433 446 if (status) { 434 447 dev_dbg(&pdev->dev, "error initializing cs_control\n"); 435 - goto fail4; 448 + goto fail1; 436 449 } 437 450 438 451 init_waitqueue_head(&mcfqspi->waitq); ··· 446 459 447 460 platform_set_drvdata(pdev, master); 448 461 449 - status = spi_register_master(master); 462 + status = devm_spi_register_master(&pdev->dev, master); 450 463 if (status) { 451 464 dev_dbg(&pdev->dev, "spi_register_master failed\n"); 452 - goto fail5; 465 + goto fail2; 453 466 } 454 467 pm_runtime_enable(mcfqspi->dev); 455 468 ··· 457 470 458 471 return 0; 459 472 460 - fail5: 461 - mcfqspi_cs_teardown(mcfqspi); 462 - fail4: 463 - clk_disable(mcfqspi->clk); 464 - clk_put(mcfqspi->clk); 465 - fail3: 466 - free_irq(mcfqspi->irq, mcfqspi); 467 473 fail2: 468 - iounmap(mcfqspi->iobase); 474 + mcfqspi_cs_teardown(mcfqspi); 469 475 fail1: 470 - release_mem_region(res->start, resource_size(res)); 476 + clk_disable(mcfqspi->clk); 471 477 fail0: 472 478 spi_master_put(master); 473 479 ··· 481 501 482 502 mcfqspi_cs_teardown(mcfqspi); 483 503 clk_disable(mcfqspi->clk); 484 - clk_put(mcfqspi->clk); 485 - free_irq(mcfqspi->irq, mcfqspi); 486 - iounmap(mcfqspi->iobase); 487 - release_mem_region(res->start, resource_size(res)); 488 - spi_unregister_master(master); 489 504 490 505 return 0; 491 506 }
+13 -36
drivers/spi/spi-davinci.c
··· 396 396 dspi = spi_master_get_devdata(spi->master); 397 397 pdata = &dspi->pdata; 398 398 399 - /* if bits per word length is zero then set it default 8 */ 400 - if (!spi->bits_per_word) 401 - spi->bits_per_word = 8; 402 - 403 399 if (!(spi->mode & SPI_NO_CS)) { 404 400 if ((pdata->chip_sel == NULL) || 405 401 (pdata->chip_sel[spi->chip_select] == SPI_INTERN_CS)) ··· 849 853 struct spi_master *master; 850 854 struct davinci_spi *dspi; 851 855 struct davinci_spi_platform_data *pdata; 852 - struct resource *r, *mem; 856 + struct resource *r; 853 857 resource_size_t dma_rx_chan = SPI_NO_RESOURCE; 854 858 resource_size_t dma_tx_chan = SPI_NO_RESOURCE; 855 859 int i = 0, ret = 0; ··· 890 894 891 895 dspi->pbase = r->start; 892 896 893 - mem = request_mem_region(r->start, resource_size(r), pdev->name); 894 - if (mem == NULL) { 895 - ret = -EBUSY; 897 + dspi->base = devm_ioremap_resource(&pdev->dev, r); 898 + if (IS_ERR(dspi->base)) { 899 + ret = PTR_ERR(dspi->base); 896 900 goto free_master; 897 - } 898 - 899 - dspi->base = ioremap(r->start, resource_size(r)); 900 - if (dspi->base == NULL) { 901 - ret = -ENOMEM; 902 - goto release_region; 903 901 } 904 902 905 903 dspi->irq = platform_get_irq(pdev, 0); 906 904 if (dspi->irq <= 0) { 907 905 ret = -EINVAL; 908 - goto unmap_io; 906 + goto free_master; 909 907 } 910 908 911 - ret = request_threaded_irq(dspi->irq, davinci_spi_irq, dummy_thread_fn, 912 - 0, dev_name(&pdev->dev), dspi); 909 + ret = devm_request_threaded_irq(&pdev->dev, dspi->irq, davinci_spi_irq, 910 + dummy_thread_fn, 0, dev_name(&pdev->dev), dspi); 913 911 if (ret) 914 - goto unmap_io; 912 + goto free_master; 915 913 916 914 dspi->bitbang.master = master; 917 915 if (dspi->bitbang.master == NULL) { 918 916 ret = -ENODEV; 919 - goto irq_free; 917 + goto free_master; 920 918 } 921 919 922 - dspi->clk = clk_get(&pdev->dev, NULL); 920 + dspi->clk = devm_clk_get(&pdev->dev, NULL); 923 921 if (IS_ERR(dspi->clk)) { 924 922 ret = -ENODEV; 925 - goto irq_free; 923 + goto free_master; 926 924 } 927 925 clk_prepare_enable(dspi->clk); 928 926 ··· 953 963 goto free_clk; 954 964 955 965 dev_info(&pdev->dev, "DMA: supported\n"); 956 - dev_info(&pdev->dev, "DMA: RX channel: %d, TX channel: %d, " 957 - "event queue: %d\n", dma_rx_chan, dma_tx_chan, 966 + dev_info(&pdev->dev, "DMA: RX channel: %pa, TX channel: %pa, " 967 + "event queue: %d\n", &dma_rx_chan, &dma_tx_chan, 958 968 pdata->dma_event_q); 959 969 } 960 970 ··· 1005 1015 dma_release_channel(dspi->dma_tx); 1006 1016 free_clk: 1007 1017 clk_disable_unprepare(dspi->clk); 1008 - clk_put(dspi->clk); 1009 - irq_free: 1010 - free_irq(dspi->irq, dspi); 1011 - unmap_io: 1012 - iounmap(dspi->base); 1013 - release_region: 1014 - release_mem_region(dspi->pbase, resource_size(r)); 1015 1018 free_master: 1016 1019 spi_master_put(master); 1017 1020 err: ··· 1024 1041 { 1025 1042 struct davinci_spi *dspi; 1026 1043 struct spi_master *master; 1027 - struct resource *r; 1028 1044 1029 1045 master = platform_get_drvdata(pdev); 1030 1046 dspi = spi_master_get_devdata(master); ··· 1031 1049 spi_bitbang_stop(&dspi->bitbang); 1032 1050 1033 1051 clk_disable_unprepare(dspi->clk); 1034 - clk_put(dspi->clk); 1035 - free_irq(dspi->irq, dspi); 1036 - iounmap(dspi->base); 1037 - r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1038 - release_mem_region(dspi->pbase, resource_size(r)); 1039 1052 spi_master_put(master); 1040 1053 1041 1054 return 0;
+22 -52
drivers/spi/spi-dw-mmio.c
··· 30 30 { 31 31 struct dw_spi_mmio *dwsmmio; 32 32 struct dw_spi *dws; 33 - struct resource *mem, *ioarea; 33 + struct resource *mem; 34 34 int ret; 35 35 36 - dwsmmio = kzalloc(sizeof(struct dw_spi_mmio), GFP_KERNEL); 37 - if (!dwsmmio) { 38 - ret = -ENOMEM; 39 - goto err_end; 40 - } 36 + dwsmmio = devm_kzalloc(&pdev->dev, sizeof(struct dw_spi_mmio), 37 + GFP_KERNEL); 38 + if (!dwsmmio) 39 + return -ENOMEM; 41 40 42 41 dws = &dwsmmio->dws; 43 42 ··· 44 45 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 45 46 if (!mem) { 46 47 dev_err(&pdev->dev, "no mem resource?\n"); 47 - ret = -EINVAL; 48 - goto err_kfree; 48 + return -EINVAL; 49 49 } 50 50 51 - ioarea = request_mem_region(mem->start, resource_size(mem), 52 - pdev->name); 53 - if (!ioarea) { 54 - dev_err(&pdev->dev, "SPI region already claimed\n"); 55 - ret = -EBUSY; 56 - goto err_kfree; 57 - } 58 - 59 - dws->regs = ioremap_nocache(mem->start, resource_size(mem)); 60 - if (!dws->regs) { 61 - dev_err(&pdev->dev, "SPI region already mapped\n"); 62 - ret = -ENOMEM; 63 - goto err_release_reg; 51 + dws->regs = devm_ioremap_resource(&pdev->dev, mem); 52 + if (IS_ERR(dws->regs)) { 53 + dev_err(&pdev->dev, "SPI region map failed\n"); 54 + return PTR_ERR(dws->regs); 64 55 } 65 56 66 57 dws->irq = platform_get_irq(pdev, 0); 67 58 if (dws->irq < 0) { 68 59 dev_err(&pdev->dev, "no irq resource?\n"); 69 - ret = dws->irq; /* -ENXIO */ 70 - goto err_unmap; 60 + return dws->irq; /* -ENXIO */ 71 61 } 72 62 73 - dwsmmio->clk = clk_get(&pdev->dev, NULL); 74 - if (IS_ERR(dwsmmio->clk)) { 75 - ret = PTR_ERR(dwsmmio->clk); 76 - goto err_unmap; 77 - } 78 - clk_enable(dwsmmio->clk); 63 + dwsmmio->clk = devm_clk_get(&pdev->dev, NULL); 64 + if (IS_ERR(dwsmmio->clk)) 65 + return PTR_ERR(dwsmmio->clk); 66 + ret = clk_prepare_enable(dwsmmio->clk); 67 + if (ret) 68 + return ret; 79 69 80 - dws->parent_dev = &pdev->dev; 81 70 dws->bus_num = 0; 82 71 dws->num_cs = 4; 83 72 dws->max_freq = clk_get_rate(dwsmmio->clk); 84 73 85 - ret = dw_spi_add_host(dws); 74 + ret = dw_spi_add_host(&pdev->dev, dws); 86 75 if (ret) 87 - goto err_clk; 76 + goto out; 88 77 89 78 platform_set_drvdata(pdev, dwsmmio); 90 79 return 0; 91 80 92 - err_clk: 93 - clk_disable(dwsmmio->clk); 94 - clk_put(dwsmmio->clk); 95 - dwsmmio->clk = NULL; 96 - err_unmap: 97 - iounmap(dws->regs); 98 - err_release_reg: 99 - release_mem_region(mem->start, resource_size(mem)); 100 - err_kfree: 101 - kfree(dwsmmio); 102 - err_end: 81 + out: 82 + clk_disable_unprepare(dwsmmio->clk); 103 83 return ret; 104 84 } 105 85 106 86 static int dw_spi_mmio_remove(struct platform_device *pdev) 107 87 { 108 88 struct dw_spi_mmio *dwsmmio = platform_get_drvdata(pdev); 109 - struct resource *mem; 110 89 111 - clk_disable(dwsmmio->clk); 112 - clk_put(dwsmmio->clk); 113 - dwsmmio->clk = NULL; 114 - 90 + clk_disable_unprepare(dwsmmio->clk); 115 91 dw_spi_remove_host(&dwsmmio->dws); 116 - iounmap(dwsmmio->dws.regs); 117 - kfree(dwsmmio); 118 92 119 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 120 - release_mem_region(mem->start, resource_size(mem)); 121 93 return 0; 122 94 } 123 95
+11 -34
drivers/spi/spi-dw-pci.c
··· 43 43 dev_info(&pdev->dev, "found PCI SPI controller(ID: %04x:%04x)\n", 44 44 pdev->vendor, pdev->device); 45 45 46 - ret = pci_enable_device(pdev); 46 + ret = pcim_enable_device(pdev); 47 47 if (ret) 48 48 return ret; 49 49 50 - dwpci = kzalloc(sizeof(struct dw_spi_pci), GFP_KERNEL); 51 - if (!dwpci) { 52 - ret = -ENOMEM; 53 - goto err_disable; 54 - } 50 + dwpci = devm_kzalloc(&pdev->dev, sizeof(struct dw_spi_pci), 51 + GFP_KERNEL); 52 + if (!dwpci) 53 + return -ENOMEM; 55 54 56 55 dwpci->pdev = pdev; 57 56 dws = &dwpci->dws; 58 57 59 58 /* Get basic io resource and map it */ 60 59 dws->paddr = pci_resource_start(pdev, pci_bar); 61 - dws->iolen = pci_resource_len(pdev, pci_bar); 62 60 63 - ret = pci_request_region(pdev, pci_bar, dev_name(&pdev->dev)); 61 + ret = pcim_iomap_regions(pdev, 1, dev_name(&pdev->dev)); 64 62 if (ret) 65 - goto err_kfree; 63 + return ret; 66 64 67 - dws->regs = ioremap_nocache((unsigned long)dws->paddr, 68 - pci_resource_len(pdev, pci_bar)); 69 - if (!dws->regs) { 70 - ret = -ENOMEM; 71 - goto err_release_reg; 72 - } 73 - 74 - dws->parent_dev = &pdev->dev; 75 65 dws->bus_num = 0; 76 66 dws->num_cs = 4; 77 67 dws->irq = pdev->irq; ··· 73 83 if (pdev->device == 0x0800) { 74 84 ret = dw_spi_mid_init(dws); 75 85 if (ret) 76 - goto err_unmap; 86 + return ret; 77 87 } 78 88 79 - ret = dw_spi_add_host(dws); 89 + ret = dw_spi_add_host(&pdev->dev, dws); 80 90 if (ret) 81 - goto err_unmap; 91 + return ret; 82 92 83 93 /* PCI hook and SPI hook use the same drv data */ 84 94 pci_set_drvdata(pdev, dwpci); 85 - return 0; 86 95 87 - err_unmap: 88 - iounmap(dws->regs); 89 - err_release_reg: 90 - pci_release_region(pdev, pci_bar); 91 - err_kfree: 92 - kfree(dwpci); 93 - err_disable: 94 - pci_disable_device(pdev); 95 - return ret; 96 + return 0; 96 97 } 97 98 98 99 static void spi_pci_remove(struct pci_dev *pdev) ··· 91 110 struct dw_spi_pci *dwpci = pci_get_drvdata(pdev); 92 111 93 112 dw_spi_remove_host(&dwpci->dws); 94 - iounmap(dwpci->dws.regs); 95 - pci_release_region(pdev, 0); 96 - kfree(dwpci); 97 - pci_disable_device(pdev); 98 113 } 99 114 100 115 #ifdef CONFIG_PM
+9 -17
drivers/spi/spi-dw.c
··· 427 427 dws->tx_end = dws->tx + transfer->len; 428 428 dws->rx = transfer->rx_buf; 429 429 dws->rx_end = dws->rx + transfer->len; 430 - dws->cs_change = transfer->cs_change; 431 430 dws->len = dws->cur_transfer->len; 432 431 if (chip != dws->prev_chip) 433 432 cs_change = 1; ··· 619 620 /* Only alloc on first setup */ 620 621 chip = spi_get_ctldata(spi); 621 622 if (!chip) { 622 - chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL); 623 + chip = devm_kzalloc(&spi->dev, sizeof(struct chip_data), 624 + GFP_KERNEL); 623 625 if (!chip) 624 626 return -ENOMEM; 627 + spi_set_ctldata(spi, chip); 625 628 } 626 629 627 630 /* ··· 668 667 | (spi->mode << SPI_MODE_OFFSET) 669 668 | (chip->tmode << SPI_TMOD_OFFSET); 670 669 671 - spi_set_ctldata(spi, chip); 672 670 return 0; 673 671 } 674 672 ··· 776 776 } 777 777 } 778 778 779 - int dw_spi_add_host(struct dw_spi *dws) 779 + int dw_spi_add_host(struct device *dev, struct dw_spi *dws) 780 780 { 781 781 struct spi_master *master; 782 782 int ret; 783 783 784 784 BUG_ON(dws == NULL); 785 785 786 - master = spi_alloc_master(dws->parent_dev, 0); 787 - if (!master) { 788 - ret = -ENOMEM; 789 - goto exit; 790 - } 786 + master = spi_alloc_master(dev, 0); 787 + if (!master) 788 + return -ENOMEM; 791 789 792 790 dws->master = master; 793 791 dws->type = SSI_MOTO_SPI; ··· 795 797 snprintf(dws->name, sizeof(dws->name), "dw_spi%d", 796 798 dws->bus_num); 797 799 798 - ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, 800 + ret = devm_request_irq(dev, dws->irq, dw_spi_irq, IRQF_SHARED, 799 801 dws->name, dws); 800 802 if (ret < 0) { 801 803 dev_err(&master->dev, "can not get IRQ\n"); ··· 834 836 } 835 837 836 838 spi_master_set_devdata(master, dws); 837 - ret = spi_register_master(master); 839 + ret = devm_spi_register_master(dev, master); 838 840 if (ret) { 839 841 dev_err(&master->dev, "problem registering spi master\n"); 840 842 goto err_queue_alloc; ··· 849 851 dws->dma_ops->dma_exit(dws); 850 852 err_diable_hw: 851 853 spi_enable_chip(dws, 0); 852 - free_irq(dws->irq, dws); 853 854 err_free_master: 854 855 spi_master_put(master); 855 - exit: 856 856 return ret; 857 857 } 858 858 EXPORT_SYMBOL_GPL(dw_spi_add_host); ··· 874 878 spi_enable_chip(dws, 0); 875 879 /* Disable clk */ 876 880 spi_set_clk(dws, 0); 877 - free_irq(dws->irq, dws); 878 - 879 - /* Disconnect from the SPI framework */ 880 - spi_unregister_master(dws->master); 881 881 } 882 882 EXPORT_SYMBOL_GPL(dw_spi_remove_host); 883 883
+1 -4
drivers/spi/spi-dw.h
··· 92 92 struct dw_spi { 93 93 struct spi_master *master; 94 94 struct spi_device *cur_dev; 95 - struct device *parent_dev; 96 95 enum dw_ssi_type type; 97 96 char name[16]; 98 97 99 98 void __iomem *regs; 100 99 unsigned long paddr; 101 - u32 iolen; 102 100 int irq; 103 101 u32 fifo_len; /* depth of the FIFO buffer */ 104 102 u32 max_freq; /* max bus freq supported */ ··· 133 135 u8 n_bytes; /* current is a 1/2 bytes op */ 134 136 u8 max_bits_per_word; /* maxim is 16b */ 135 137 u32 dma_width; 136 - int cs_change; 137 138 irqreturn_t (*transfer_handler)(struct dw_spi *dws); 138 139 void (*cs_control)(u32 command); 139 140 ··· 228 231 void (*cs_control)(u32 command); 229 232 }; 230 233 231 - extern int dw_spi_add_host(struct dw_spi *dws); 234 + extern int dw_spi_add_host(struct device *dev, struct dw_spi *dws); 232 235 extern void dw_spi_remove_host(struct dw_spi *dws); 233 236 extern int dw_spi_suspend_host(struct dw_spi *dws); 234 237 extern int dw_spi_resume_host(struct dw_spi *dws);
+1 -11
drivers/spi/spi-falcon.c
··· 433 433 434 434 platform_set_drvdata(pdev, priv); 435 435 436 - ret = spi_register_master(master); 436 + ret = devm_spi_register_master(&pdev->dev, master); 437 437 if (ret) 438 438 spi_master_put(master); 439 439 return ret; 440 - } 441 - 442 - static int falcon_sflash_remove(struct platform_device *pdev) 443 - { 444 - struct falcon_sflash *priv = platform_get_drvdata(pdev); 445 - 446 - spi_unregister_master(priv->master); 447 - 448 - return 0; 449 440 } 450 441 451 442 static const struct of_device_id falcon_sflash_match[] = { ··· 447 456 448 457 static struct platform_driver falcon_sflash_driver = { 449 458 .probe = falcon_sflash_probe, 450 - .remove = falcon_sflash_remove, 451 459 .driver = { 452 460 .name = DRV_NAME, 453 461 .owner = THIS_MODULE,
-3
drivers/spi/spi-fsl-dspi.c
··· 375 375 if (!spi->max_speed_hz) 376 376 return -EINVAL; 377 377 378 - if (!spi->bits_per_word) 379 - spi->bits_per_word = 8; 380 - 381 378 return dspi_setup_transfer(spi, NULL); 382 379 } 383 380
-9
drivers/spi/spi-mxs.c
··· 111 111 return 0; 112 112 } 113 113 114 - static int mxs_spi_setup(struct spi_device *dev) 115 - { 116 - if (!dev->bits_per_word) 117 - dev->bits_per_word = 8; 118 - 119 - return 0; 120 - } 121 - 122 114 static u32 mxs_spi_cs_to_reg(unsigned cs) 123 115 { 124 116 u32 select = 0; ··· 494 502 return -ENOMEM; 495 503 496 504 master->transfer_one_message = mxs_spi_transfer_one; 497 - master->setup = mxs_spi_setup; 498 505 master->bits_per_word_mask = SPI_BPW_MASK(8); 499 506 master->mode_bits = SPI_CPOL | SPI_CPHA; 500 507 master->num_chipselect = 3;
+183 -157
drivers/spi/spi-rspi.c
··· 37 37 #include <linux/spi/spi.h> 38 38 #include <linux/spi/rspi.h> 39 39 40 - #define RSPI_SPCR 0x00 41 - #define RSPI_SSLP 0x01 42 - #define RSPI_SPPCR 0x02 43 - #define RSPI_SPSR 0x03 44 - #define RSPI_SPDR 0x04 45 - #define RSPI_SPSCR 0x08 46 - #define RSPI_SPSSR 0x09 47 - #define RSPI_SPBR 0x0a 48 - #define RSPI_SPDCR 0x0b 49 - #define RSPI_SPCKD 0x0c 50 - #define RSPI_SSLND 0x0d 51 - #define RSPI_SPND 0x0e 52 - #define RSPI_SPCR2 0x0f 53 - #define RSPI_SPCMD0 0x10 54 - #define RSPI_SPCMD1 0x12 55 - #define RSPI_SPCMD2 0x14 56 - #define RSPI_SPCMD3 0x16 57 - #define RSPI_SPCMD4 0x18 58 - #define RSPI_SPCMD5 0x1a 59 - #define RSPI_SPCMD6 0x1c 60 - #define RSPI_SPCMD7 0x1e 40 + #define RSPI_SPCR 0x00 /* Control Register */ 41 + #define RSPI_SSLP 0x01 /* Slave Select Polarity Register */ 42 + #define RSPI_SPPCR 0x02 /* Pin Control Register */ 43 + #define RSPI_SPSR 0x03 /* Status Register */ 44 + #define RSPI_SPDR 0x04 /* Data Register */ 45 + #define RSPI_SPSCR 0x08 /* Sequence Control Register */ 46 + #define RSPI_SPSSR 0x09 /* Sequence Status Register */ 47 + #define RSPI_SPBR 0x0a /* Bit Rate Register */ 48 + #define RSPI_SPDCR 0x0b /* Data Control Register */ 49 + #define RSPI_SPCKD 0x0c /* Clock Delay Register */ 50 + #define RSPI_SSLND 0x0d /* Slave Select Negation Delay Register */ 51 + #define RSPI_SPND 0x0e /* Next-Access Delay Register */ 52 + #define RSPI_SPCR2 0x0f /* Control Register 2 */ 53 + #define RSPI_SPCMD0 0x10 /* Command Register 0 */ 54 + #define RSPI_SPCMD1 0x12 /* Command Register 1 */ 55 + #define RSPI_SPCMD2 0x14 /* Command Register 2 */ 56 + #define RSPI_SPCMD3 0x16 /* Command Register 3 */ 57 + #define RSPI_SPCMD4 0x18 /* Command Register 4 */ 58 + #define RSPI_SPCMD5 0x1a /* Command Register 5 */ 59 + #define RSPI_SPCMD6 0x1c /* Command Register 6 */ 60 + #define RSPI_SPCMD7 0x1e /* Command Register 7 */ 61 + #define RSPI_SPBFCR 0x20 /* Buffer Control Register */ 62 + #define RSPI_SPBFDR 0x22 /* Buffer Data Count Setting Register */ 61 63 62 64 /*qspi only */ 63 - #define QSPI_SPBFCR 0x18 64 - #define QSPI_SPBDCR 0x1a 65 - #define QSPI_SPBMUL0 0x1c 66 - #define QSPI_SPBMUL1 0x20 67 - #define QSPI_SPBMUL2 0x24 68 - #define QSPI_SPBMUL3 0x28 65 + #define QSPI_SPBFCR 0x18 /* Buffer Control Register */ 66 + #define QSPI_SPBDCR 0x1a /* Buffer Data Count Register */ 67 + #define QSPI_SPBMUL0 0x1c /* Transfer Data Length Multiplier Setting Register 0 */ 68 + #define QSPI_SPBMUL1 0x20 /* Transfer Data Length Multiplier Setting Register 1 */ 69 + #define QSPI_SPBMUL2 0x24 /* Transfer Data Length Multiplier Setting Register 2 */ 70 + #define QSPI_SPBMUL3 0x28 /* Transfer Data Length Multiplier Setting Register 3 */ 69 71 70 - /* SPCR */ 71 - #define SPCR_SPRIE 0x80 72 - #define SPCR_SPE 0x40 73 - #define SPCR_SPTIE 0x20 74 - #define SPCR_SPEIE 0x10 75 - #define SPCR_MSTR 0x08 76 - #define SPCR_MODFEN 0x04 77 - #define SPCR_TXMD 0x02 78 - #define SPCR_SPMS 0x01 72 + /* SPCR - Control Register */ 73 + #define SPCR_SPRIE 0x80 /* Receive Interrupt Enable */ 74 + #define SPCR_SPE 0x40 /* Function Enable */ 75 + #define SPCR_SPTIE 0x20 /* Transmit Interrupt Enable */ 76 + #define SPCR_SPEIE 0x10 /* Error Interrupt Enable */ 77 + #define SPCR_MSTR 0x08 /* Master/Slave Mode Select */ 78 + #define SPCR_MODFEN 0x04 /* Mode Fault Error Detection Enable */ 79 + /* RSPI on SH only */ 80 + #define SPCR_TXMD 0x02 /* TX Only Mode (vs. Full Duplex) */ 81 + #define SPCR_SPMS 0x01 /* 3-wire Mode (vs. 4-wire) */ 82 + /* QSPI on R-Car M2 only */ 83 + #define SPCR_WSWAP 0x02 /* Word Swap of read-data for DMAC */ 84 + #define SPCR_BSWAP 0x01 /* Byte Swap of read-data for DMAC */ 79 85 80 - /* SSLP */ 81 - #define SSLP_SSL1P 0x02 82 - #define SSLP_SSL0P 0x01 86 + /* SSLP - Slave Select Polarity Register */ 87 + #define SSLP_SSL1P 0x02 /* SSL1 Signal Polarity Setting */ 88 + #define SSLP_SSL0P 0x01 /* SSL0 Signal Polarity Setting */ 83 89 84 - /* SPPCR */ 85 - #define SPPCR_MOIFE 0x20 86 - #define SPPCR_MOIFV 0x10 90 + /* SPPCR - Pin Control Register */ 91 + #define SPPCR_MOIFE 0x20 /* MOSI Idle Value Fixing Enable */ 92 + #define SPPCR_MOIFV 0x10 /* MOSI Idle Fixed Value */ 87 93 #define SPPCR_SPOM 0x04 88 - #define SPPCR_SPLP2 0x02 89 - #define SPPCR_SPLP 0x01 94 + #define SPPCR_SPLP2 0x02 /* Loopback Mode 2 (non-inverting) */ 95 + #define SPPCR_SPLP 0x01 /* Loopback Mode (inverting) */ 90 96 91 - /* SPSR */ 92 - #define SPSR_SPRF 0x80 93 - #define SPSR_SPTEF 0x20 94 - #define SPSR_PERF 0x08 95 - #define SPSR_MODF 0x04 96 - #define SPSR_IDLNF 0x02 97 - #define SPSR_OVRF 0x01 97 + #define SPPCR_IO3FV 0x04 /* Single-/Dual-SPI Mode IO3 Output Fixed Value */ 98 + #define SPPCR_IO2FV 0x04 /* Single-/Dual-SPI Mode IO2 Output Fixed Value */ 98 99 99 - /* SPSCR */ 100 - #define SPSCR_SPSLN_MASK 0x07 100 + /* SPSR - Status Register */ 101 + #define SPSR_SPRF 0x80 /* Receive Buffer Full Flag */ 102 + #define SPSR_TEND 0x40 /* Transmit End */ 103 + #define SPSR_SPTEF 0x20 /* Transmit Buffer Empty Flag */ 104 + #define SPSR_PERF 0x08 /* Parity Error Flag */ 105 + #define SPSR_MODF 0x04 /* Mode Fault Error Flag */ 106 + #define SPSR_IDLNF 0x02 /* RSPI Idle Flag */ 107 + #define SPSR_OVRF 0x01 /* Overrun Error Flag */ 101 108 102 - /* SPSSR */ 103 - #define SPSSR_SPECM_MASK 0x70 104 - #define SPSSR_SPCP_MASK 0x07 109 + /* SPSCR - Sequence Control Register */ 110 + #define SPSCR_SPSLN_MASK 0x07 /* Sequence Length Specification */ 105 111 106 - /* SPDCR */ 107 - #define SPDCR_SPLW 0x20 108 - #define SPDCR_SPRDTD 0x10 112 + /* SPSSR - Sequence Status Register */ 113 + #define SPSSR_SPECM_MASK 0x70 /* Command Error Mask */ 114 + #define SPSSR_SPCP_MASK 0x07 /* Command Pointer Mask */ 115 + 116 + /* SPDCR - Data Control Register */ 117 + #define SPDCR_TXDMY 0x80 /* Dummy Data Transmission Enable */ 118 + #define SPDCR_SPLW1 0x40 /* Access Width Specification (RZ) */ 119 + #define SPDCR_SPLW0 0x20 /* Access Width Specification (RZ) */ 120 + #define SPDCR_SPLLWORD (SPDCR_SPLW1 | SPDCR_SPLW0) 121 + #define SPDCR_SPLWORD SPDCR_SPLW1 122 + #define SPDCR_SPLBYTE SPDCR_SPLW0 123 + #define SPDCR_SPLW 0x20 /* Access Width Specification (SH) */ 124 + #define SPDCR_SPRDTD 0x10 /* Receive Transmit Data Select */ 109 125 #define SPDCR_SLSEL1 0x08 110 126 #define SPDCR_SLSEL0 0x04 111 - #define SPDCR_SLSEL_MASK 0x0c 127 + #define SPDCR_SLSEL_MASK 0x0c /* SSL1 Output Select */ 112 128 #define SPDCR_SPFC1 0x02 113 129 #define SPDCR_SPFC0 0x01 130 + #define SPDCR_SPFC_MASK 0x03 /* Frame Count Setting (1-4) */ 114 131 115 - /* SPCKD */ 116 - #define SPCKD_SCKDL_MASK 0x07 132 + /* SPCKD - Clock Delay Register */ 133 + #define SPCKD_SCKDL_MASK 0x07 /* Clock Delay Setting (1-8) */ 117 134 118 - /* SSLND */ 119 - #define SSLND_SLNDL_MASK 0x07 135 + /* SSLND - Slave Select Negation Delay Register */ 136 + #define SSLND_SLNDL_MASK 0x07 /* SSL Negation Delay Setting (1-8) */ 120 137 121 - /* SPND */ 122 - #define SPND_SPNDL_MASK 0x07 138 + /* SPND - Next-Access Delay Register */ 139 + #define SPND_SPNDL_MASK 0x07 /* Next-Access Delay Setting (1-8) */ 123 140 124 - /* SPCR2 */ 125 - #define SPCR2_PTE 0x08 126 - #define SPCR2_SPIE 0x04 127 - #define SPCR2_SPOE 0x02 128 - #define SPCR2_SPPE 0x01 141 + /* SPCR2 - Control Register 2 */ 142 + #define SPCR2_PTE 0x08 /* Parity Self-Test Enable */ 143 + #define SPCR2_SPIE 0x04 /* Idle Interrupt Enable */ 144 + #define SPCR2_SPOE 0x02 /* Odd Parity Enable (vs. Even) */ 145 + #define SPCR2_SPPE 0x01 /* Parity Enable */ 129 146 130 - /* SPCMDn */ 131 - #define SPCMD_SCKDEN 0x8000 132 - #define SPCMD_SLNDEN 0x4000 133 - #define SPCMD_SPNDEN 0x2000 134 - #define SPCMD_LSBF 0x1000 135 - #define SPCMD_SPB_MASK 0x0f00 147 + /* SPCMDn - Command Registers */ 148 + #define SPCMD_SCKDEN 0x8000 /* Clock Delay Setting Enable */ 149 + #define SPCMD_SLNDEN 0x4000 /* SSL Negation Delay Setting Enable */ 150 + #define SPCMD_SPNDEN 0x2000 /* Next-Access Delay Enable */ 151 + #define SPCMD_LSBF 0x1000 /* LSB First */ 152 + #define SPCMD_SPB_MASK 0x0f00 /* Data Length Setting */ 136 153 #define SPCMD_SPB_8_TO_16(bit) (((bit - 1) << 8) & SPCMD_SPB_MASK) 137 154 #define SPCMD_SPB_8BIT 0x0000 /* qspi only */ 138 155 #define SPCMD_SPB_16BIT 0x0100 139 156 #define SPCMD_SPB_20BIT 0x0000 140 157 #define SPCMD_SPB_24BIT 0x0100 141 158 #define SPCMD_SPB_32BIT 0x0200 142 - #define SPCMD_SSLKP 0x0080 143 - #define SPCMD_SSLA_MASK 0x0030 144 - #define SPCMD_BRDV_MASK 0x000c 145 - #define SPCMD_CPOL 0x0002 146 - #define SPCMD_CPHA 0x0001 159 + #define SPCMD_SSLKP 0x0080 /* SSL Signal Level Keeping */ 160 + #define SPCMD_SPIMOD_MASK 0x0060 /* SPI Operating Mode (QSPI only) */ 161 + #define SPCMD_SPIMOD1 0x0040 162 + #define SPCMD_SPIMOD0 0x0020 163 + #define SPCMD_SPIMOD_SINGLE 0 164 + #define SPCMD_SPIMOD_DUAL SPCMD_SPIMOD0 165 + #define SPCMD_SPIMOD_QUAD SPCMD_SPIMOD1 166 + #define SPCMD_SPRW 0x0010 /* SPI Read/Write Access (Dual/Quad) */ 167 + #define SPCMD_SSLA_MASK 0x0030 /* SSL Assert Signal Setting (RSPI) */ 168 + #define SPCMD_BRDV_MASK 0x000c /* Bit Rate Division Setting */ 169 + #define SPCMD_CPOL 0x0002 /* Clock Polarity Setting */ 170 + #define SPCMD_CPHA 0x0001 /* Clock Phase Setting */ 147 171 148 - /* SPBFCR */ 149 - #define SPBFCR_TXRST 0x80 /* qspi only */ 150 - #define SPBFCR_RXRST 0x40 /* qspi only */ 172 + /* SPBFCR - Buffer Control Register */ 173 + #define SPBFCR_TXRST 0x80 /* Transmit Buffer Data Reset (qspi only) */ 174 + #define SPBFCR_RXRST 0x40 /* Receive Buffer Data Reset (qspi only) */ 175 + #define SPBFCR_TXTRG_MASK 0x30 /* Transmit Buffer Data Triggering Number */ 176 + #define SPBFCR_RXTRG_MASK 0x07 /* Receive Buffer Data Triggering Number */ 177 + 178 + #define DUMMY_DATA 0x00 151 179 152 180 struct rspi_data { 153 181 void __iomem *addr; ··· 186 158 wait_queue_head_t wait; 187 159 spinlock_t lock; 188 160 struct clk *clk; 189 - unsigned char spsr; 161 + u8 spsr; 162 + u16 spcmd; 190 163 const struct spi_ops *ops; 191 164 192 165 /* for dmaengine */ ··· 199 170 unsigned dma_callbacked:1; 200 171 }; 201 172 202 - static void rspi_write8(struct rspi_data *rspi, u8 data, u16 offset) 173 + static void rspi_write8(const struct rspi_data *rspi, u8 data, u16 offset) 203 174 { 204 175 iowrite8(data, rspi->addr + offset); 205 176 } 206 177 207 - static void rspi_write16(struct rspi_data *rspi, u16 data, u16 offset) 178 + static void rspi_write16(const struct rspi_data *rspi, u16 data, u16 offset) 208 179 { 209 180 iowrite16(data, rspi->addr + offset); 210 181 } 211 182 212 - static void rspi_write32(struct rspi_data *rspi, u32 data, u16 offset) 183 + static void rspi_write32(const struct rspi_data *rspi, u32 data, u16 offset) 213 184 { 214 185 iowrite32(data, rspi->addr + offset); 215 186 } 216 187 217 - static u8 rspi_read8(struct rspi_data *rspi, u16 offset) 188 + static u8 rspi_read8(const struct rspi_data *rspi, u16 offset) 218 189 { 219 190 return ioread8(rspi->addr + offset); 220 191 } 221 192 222 - static u16 rspi_read16(struct rspi_data *rspi, u16 offset) 193 + static u16 rspi_read16(const struct rspi_data *rspi, u16 offset) 223 194 { 224 195 return ioread16(rspi->addr + offset); 225 196 } 226 197 227 198 /* optional functions */ 228 199 struct spi_ops { 229 - int (*set_config_register)(struct rspi_data *rspi, int access_size); 200 + int (*set_config_register)(const struct rspi_data *rspi, 201 + int access_size); 230 202 int (*send_pio)(struct rspi_data *rspi, struct spi_message *mesg, 231 203 struct spi_transfer *t); 232 204 int (*receive_pio)(struct rspi_data *rspi, struct spi_message *mesg, ··· 238 208 /* 239 209 * functions for RSPI 240 210 */ 241 - static int rspi_set_config_register(struct rspi_data *rspi, int access_size) 211 + static int rspi_set_config_register(const struct rspi_data *rspi, 212 + int access_size) 242 213 { 243 214 int spbr; 244 215 ··· 262 231 rspi_write8(rspi, 0x00, RSPI_SPCR2); 263 232 264 233 /* Sets SPCMD */ 265 - rspi_write16(rspi, SPCMD_SPB_8_TO_16(access_size) | SPCMD_SSLKP, 234 + rspi_write16(rspi, SPCMD_SPB_8_TO_16(access_size) | rspi->spcmd, 266 235 RSPI_SPCMD0); 267 236 268 237 /* Sets RSPI mode */ ··· 274 243 /* 275 244 * functions for QSPI 276 245 */ 277 - static int qspi_set_config_register(struct rspi_data *rspi, int access_size) 246 + static int qspi_set_config_register(const struct rspi_data *rspi, 247 + int access_size) 278 248 { 279 249 u16 spcmd; 280 250 int spbr; ··· 300 268 spcmd = SPCMD_SPB_8BIT; 301 269 else if (access_size == 16) 302 270 spcmd = SPCMD_SPB_16BIT; 303 - else if (access_size == 32) 271 + else 304 272 spcmd = SPCMD_SPB_32BIT; 305 273 306 - spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | SPCMD_SSLKP | SPCMD_SPNDEN; 274 + spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | rspi->spcmd | SPCMD_SPNDEN; 307 275 308 276 /* Resets transfer data length */ 309 277 rspi_write32(rspi, 0, QSPI_SPBMUL0); ··· 324 292 325 293 #define set_config_register(spi, n) spi->ops->set_config_register(spi, n) 326 294 327 - static void rspi_enable_irq(struct rspi_data *rspi, u8 enable) 295 + static void rspi_enable_irq(const struct rspi_data *rspi, u8 enable) 328 296 { 329 297 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | enable, RSPI_SPCR); 330 298 } 331 299 332 - static void rspi_disable_irq(struct rspi_data *rspi, u8 disable) 300 + static void rspi_disable_irq(const struct rspi_data *rspi, u8 disable) 333 301 { 334 302 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~disable, RSPI_SPCR); 335 303 } ··· 348 316 return 0; 349 317 } 350 318 351 - static void rspi_assert_ssl(struct rspi_data *rspi) 319 + static void rspi_assert_ssl(const struct rspi_data *rspi) 352 320 { 353 321 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_SPE, RSPI_SPCR); 354 322 } 355 323 356 - static void rspi_negate_ssl(struct rspi_data *rspi) 324 + static void rspi_negate_ssl(const struct rspi_data *rspi) 357 325 { 358 326 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_SPE, RSPI_SPCR); 359 327 } ··· 362 330 struct spi_transfer *t) 363 331 { 364 332 int remain = t->len; 365 - u8 *data; 366 - 367 - data = (u8 *)t->tx_buf; 333 + const u8 *data = t->tx_buf; 368 334 while (remain > 0) { 369 335 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_TXMD, 370 336 RSPI_SPCR); ··· 378 348 remain--; 379 349 } 380 350 381 - /* Waiting for the last transmition */ 351 + /* Waiting for the last transmission */ 382 352 rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 383 353 384 354 return 0; ··· 388 358 struct spi_transfer *t) 389 359 { 390 360 int remain = t->len; 391 - u8 *data; 361 + const u8 *data = t->tx_buf; 392 362 393 363 rspi_write8(rspi, SPBFCR_TXRST, QSPI_SPBFCR); 394 364 rspi_write8(rspi, 0x00, QSPI_SPBFCR); 395 365 396 - data = (u8 *)t->tx_buf; 397 366 while (remain > 0) { 398 367 399 368 if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { ··· 412 383 remain--; 413 384 } 414 385 415 - /* Waiting for the last transmition */ 386 + /* Waiting for the last transmission */ 416 387 rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 417 388 418 389 return 0; ··· 428 399 wake_up_interruptible(&rspi->wait); 429 400 } 430 401 431 - static int rspi_dma_map_sg(struct scatterlist *sg, void *buf, unsigned len, 432 - struct dma_chan *chan, 402 + static int rspi_dma_map_sg(struct scatterlist *sg, const void *buf, 403 + unsigned len, struct dma_chan *chan, 433 404 enum dma_transfer_direction dir) 434 405 { 435 406 sg_init_table(sg, 1); ··· 469 440 static int rspi_send_dma(struct rspi_data *rspi, struct spi_transfer *t) 470 441 { 471 442 struct scatterlist sg; 472 - void *buf = NULL; 443 + const void *buf = NULL; 473 444 struct dma_async_tx_descriptor *desc; 474 445 unsigned len; 475 446 int ret = 0; 476 447 477 448 if (rspi->dma_width_16bit) { 449 + void *tmp; 478 450 /* 479 451 * If DMAC bus width is 16-bit, the driver allocates a dummy 480 452 * buffer. And, the driver converts original data into the ··· 484 454 * DMAC data: 1st byte, dummy, 2nd byte, dummy ... 485 455 */ 486 456 len = t->len * 2; 487 - buf = kmalloc(len, GFP_KERNEL); 488 - if (!buf) 457 + tmp = kmalloc(len, GFP_KERNEL); 458 + if (!tmp) 489 459 return -ENOMEM; 490 - rspi_memory_to_8bit(buf, t->tx_buf, t->len); 460 + rspi_memory_to_8bit(tmp, t->tx_buf, t->len); 461 + buf = tmp; 491 462 } else { 492 463 len = t->len; 493 - buf = (void *)t->tx_buf; 464 + buf = t->tx_buf; 494 465 } 495 466 496 467 if (!rspi_dma_map_sg(&sg, buf, len, rspi->chan_tx, DMA_TO_DEVICE)) { ··· 539 508 return ret; 540 509 } 541 510 542 - static void rspi_receive_init(struct rspi_data *rspi) 511 + static void rspi_receive_init(const struct rspi_data *rspi) 543 512 { 544 - unsigned char spsr; 513 + u8 spsr; 545 514 546 515 spsr = rspi_read8(rspi, RSPI_SPSR); 547 516 if (spsr & SPSR_SPRF) ··· 559 528 560 529 rspi_receive_init(rspi); 561 530 562 - data = (u8 *)t->rx_buf; 531 + data = t->rx_buf; 563 532 while (remain > 0) { 564 533 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_TXMD, 565 534 RSPI_SPCR); ··· 570 539 return -ETIMEDOUT; 571 540 } 572 541 /* dummy write for generate clock */ 573 - rspi_write16(rspi, 0x00, RSPI_SPDR); 542 + rspi_write16(rspi, DUMMY_DATA, RSPI_SPDR); 574 543 575 544 if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) { 576 545 dev_err(&rspi->master->dev, ··· 587 556 return 0; 588 557 } 589 558 590 - static void qspi_receive_init(struct rspi_data *rspi) 559 + static void qspi_receive_init(const struct rspi_data *rspi) 591 560 { 592 - unsigned char spsr; 561 + u8 spsr; 593 562 594 563 spsr = rspi_read8(rspi, RSPI_SPSR); 595 564 if (spsr & SPSR_SPRF) ··· 606 575 607 576 qspi_receive_init(rspi); 608 577 609 - data = (u8 *)t->rx_buf; 578 + data = t->rx_buf; 610 579 while (remain > 0) { 611 580 612 581 if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { ··· 615 584 return -ETIMEDOUT; 616 585 } 617 586 /* dummy write for generate clock */ 618 - rspi_write8(rspi, 0x00, RSPI_SPDR); 587 + rspi_write8(rspi, DUMMY_DATA, RSPI_SPDR); 619 588 620 589 if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) { 621 590 dev_err(&rspi->master->dev, ··· 735 704 return ret; 736 705 } 737 706 738 - static int rspi_is_dma(struct rspi_data *rspi, struct spi_transfer *t) 707 + static int rspi_is_dma(const struct rspi_data *rspi, struct spi_transfer *t) 739 708 { 740 709 if (t->tx_buf && rspi->chan_tx) 741 710 return 1; ··· 802 771 { 803 772 struct rspi_data *rspi = spi_master_get_devdata(spi->master); 804 773 805 - if (!spi->bits_per_word) 806 - spi->bits_per_word = 8; 807 774 rspi->max_speed_hz = spi->max_speed_hz; 775 + 776 + rspi->spcmd = SPCMD_SSLKP; 777 + if (spi->mode & SPI_CPOL) 778 + rspi->spcmd |= SPCMD_CPOL; 779 + if (spi->mode & SPI_CPHA) 780 + rspi->spcmd |= SPCMD_CPHA; 808 781 809 782 set_config_register(rspi, 8); 810 783 ··· 837 802 838 803 static irqreturn_t rspi_irq(int irq, void *_sr) 839 804 { 840 - struct rspi_data *rspi = (struct rspi_data *)_sr; 841 - unsigned long spsr; 805 + struct rspi_data *rspi = _sr; 806 + u8 spsr; 842 807 irqreturn_t ret = IRQ_NONE; 843 - unsigned char disable_irq = 0; 808 + u8 disable_irq = 0; 844 809 845 810 rspi->spsr = spsr = rspi_read8(rspi, RSPI_SPSR); 846 811 if (spsr & SPSR_SPRF) ··· 860 825 static int rspi_request_dma(struct rspi_data *rspi, 861 826 struct platform_device *pdev) 862 827 { 863 - struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev); 828 + const struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev); 864 829 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 865 830 dma_cap_mask_t mask; 866 831 struct dma_slave_config cfg; ··· 922 887 { 923 888 struct rspi_data *rspi = platform_get_drvdata(pdev); 924 889 925 - spi_unregister_master(rspi->master); 926 890 rspi_release_dma(rspi); 927 - free_irq(platform_get_irq(pdev, 0), rspi); 928 - clk_put(rspi->clk); 929 - iounmap(rspi->addr); 891 + clk_disable(rspi->clk); 930 892 931 893 return 0; 932 894 } ··· 935 903 struct rspi_data *rspi; 936 904 int ret, irq; 937 905 char clk_name[16]; 938 - struct rspi_plat_data *rspi_pd = pdev->dev.platform_data; 906 + const struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev); 939 907 const struct spi_ops *ops; 940 908 const struct platform_device_id *id_entry = pdev->id_entry; 941 909 ··· 944 912 if (!ops->set_config_register) { 945 913 dev_err(&pdev->dev, "there is no set_config_register\n"); 946 914 return -ENODEV; 947 - } 948 - /* get base addr */ 949 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 950 - if (unlikely(res == NULL)) { 951 - dev_err(&pdev->dev, "invalid resource\n"); 952 - return -EINVAL; 953 915 } 954 916 955 917 irq = platform_get_irq(pdev, 0); ··· 962 936 platform_set_drvdata(pdev, rspi); 963 937 rspi->ops = ops; 964 938 rspi->master = master; 965 - rspi->addr = ioremap(res->start, resource_size(res)); 966 - if (rspi->addr == NULL) { 967 - dev_err(&pdev->dev, "ioremap error.\n"); 968 - ret = -ENOMEM; 939 + 940 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 941 + rspi->addr = devm_ioremap_resource(&pdev->dev, res); 942 + if (IS_ERR(rspi->addr)) { 943 + ret = PTR_ERR(rspi->addr); 969 944 goto error1; 970 945 } 971 946 972 947 snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id); 973 - rspi->clk = clk_get(&pdev->dev, clk_name); 948 + rspi->clk = devm_clk_get(&pdev->dev, clk_name); 974 949 if (IS_ERR(rspi->clk)) { 975 950 dev_err(&pdev->dev, "cannot get clock\n"); 976 951 ret = PTR_ERR(rspi->clk); 977 - goto error2; 952 + goto error1; 978 953 } 979 954 clk_enable(rspi->clk); 980 955 ··· 992 965 master->setup = rspi_setup; 993 966 master->transfer = rspi_transfer; 994 967 master->cleanup = rspi_cleanup; 968 + master->mode_bits = SPI_CPHA | SPI_CPOL; 995 969 996 - ret = request_irq(irq, rspi_irq, 0, dev_name(&pdev->dev), rspi); 970 + ret = devm_request_irq(&pdev->dev, irq, rspi_irq, 0, 971 + dev_name(&pdev->dev), rspi); 997 972 if (ret < 0) { 998 973 dev_err(&pdev->dev, "request_irq error\n"); 999 - goto error3; 974 + goto error2; 1000 975 } 1001 976 1002 977 rspi->irq = irq; 1003 978 ret = rspi_request_dma(rspi, pdev); 1004 979 if (ret < 0) { 1005 980 dev_err(&pdev->dev, "rspi_request_dma failed.\n"); 1006 - goto error4; 981 + goto error3; 1007 982 } 1008 983 1009 - ret = spi_register_master(master); 984 + ret = devm_spi_register_master(&pdev->dev, master); 1010 985 if (ret < 0) { 1011 986 dev_err(&pdev->dev, "spi_register_master error.\n"); 1012 - goto error4; 987 + goto error3; 1013 988 } 1014 989 1015 990 dev_info(&pdev->dev, "probed\n"); 1016 991 1017 992 return 0; 1018 993 1019 - error4: 1020 - rspi_release_dma(rspi); 1021 - free_irq(irq, rspi); 1022 994 error3: 1023 - clk_put(rspi->clk); 995 + rspi_release_dma(rspi); 1024 996 error2: 1025 - iounmap(rspi->addr); 997 + clk_disable(rspi->clk); 1026 998 error1: 1027 999 spi_master_put(master); 1028 1000
+1 -15
drivers/spi/spi-sc18is602.c
··· 254 254 255 255 static int sc18is602_setup(struct spi_device *spi) 256 256 { 257 - if (!spi->bits_per_word) 258 - spi->bits_per_word = 8; 259 - 260 257 if (spi->mode & ~(SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST)) 261 258 return -EINVAL; 262 259 ··· 316 319 master->transfer_one_message = sc18is602_transfer_one; 317 320 master->dev.of_node = np; 318 321 319 - error = spi_register_master(master); 322 + error = devm_spi_register_master(dev, master); 320 323 if (error) 321 324 goto error_reg; 322 325 ··· 325 328 error_reg: 326 329 spi_master_put(master); 327 330 return error; 328 - } 329 - 330 - static int sc18is602_remove(struct i2c_client *client) 331 - { 332 - struct sc18is602 *hw = i2c_get_clientdata(client); 333 - struct spi_master *master = hw->master; 334 - 335 - spi_unregister_master(master); 336 - 337 - return 0; 338 331 } 339 332 340 333 static const struct i2c_device_id sc18is602_id[] = { ··· 340 353 .name = "sc18is602", 341 354 }, 342 355 .probe = sc18is602_probe, 343 - .remove = sc18is602_remove, 344 356 .id_table = sc18is602_id, 345 357 }; 346 358
-3
drivers/spi/spi-sh.c
··· 358 358 { 359 359 struct spi_sh_data *ss = spi_master_get_devdata(spi->master); 360 360 361 - if (!spi->bits_per_word) 362 - spi->bits_per_word = 8; 363 - 364 361 pr_debug("%s: enter\n", __func__); 365 362 366 363 spi_sh_write(ss, 0xfe, SPI_SH_CR1); /* SPI sycle stop */
-7
drivers/spi/spi-sirf.c
··· 536 536 537 537 static int spi_sirfsoc_setup(struct spi_device *spi) 538 538 { 539 - struct sirfsoc_spi *sspi; 540 - 541 539 if (!spi->max_speed_hz) 542 540 return -EINVAL; 543 - 544 - sspi = spi_master_get_devdata(spi->master); 545 - 546 - if (!spi->bits_per_word) 547 - spi->bits_per_word = 8; 548 541 549 542 return spi_sirfsoc_setup_transfer(spi, NULL); 550 543 }
-6
drivers/spi/spi-topcliff-pch.c
··· 466 466 467 467 static int pch_spi_setup(struct spi_device *pspi) 468 468 { 469 - /* check bits per word */ 470 - if (pspi->bits_per_word == 0) { 471 - pspi->bits_per_word = 8; 472 - dev_dbg(&pspi->dev, "%s 8 bits per word\n", __func__); 473 - } 474 - 475 469 /* Check baud rate setting */ 476 470 /* if baud rate of chip is greater than 477 471 max we can support,return error */