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/omap-uwire', 'spi/topic/omap100k', 'spi/topic/omap2', 'spi/topic/orion', 'spi/topic/pl022', 'spi/topic/qup', 'spi/topic/rspi' and 'spi/topic/s3c24xx' into spi-next

+1740 -533
+85
Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
··· 1 + Qualcomm Universal Peripheral (QUP) Serial Peripheral Interface (SPI) 2 + 3 + The QUP core is an AHB slave that provides a common data path (an output FIFO 4 + and an input FIFO) for serial peripheral interface (SPI) mini-core. 5 + 6 + SPI in master mode supports up to 50MHz, up to four chip selects, programmable 7 + data path from 4 bits to 32 bits and numerous protocol variants. 8 + 9 + Required properties: 10 + - compatible: Should contain "qcom,spi-qup-v2.1.1" or "qcom,spi-qup-v2.2.1" 11 + - reg: Should contain base register location and length 12 + - interrupts: Interrupt number used by this controller 13 + 14 + - clocks: Should contain the core clock and the AHB clock. 15 + - clock-names: Should be "core" for the core clock and "iface" for the 16 + AHB clock. 17 + 18 + - #address-cells: Number of cells required to define a chip select 19 + address on the SPI bus. Should be set to 1. 20 + - #size-cells: Should be zero. 21 + 22 + Optional properties: 23 + - spi-max-frequency: Specifies maximum SPI clock frequency, 24 + Units - Hz. Definition as per 25 + Documentation/devicetree/bindings/spi/spi-bus.txt 26 + 27 + SPI slave nodes must be children of the SPI master node and can contain 28 + properties described in Documentation/devicetree/bindings/spi/spi-bus.txt 29 + 30 + Example: 31 + 32 + spi_8: spi@f9964000 { /* BLSP2 QUP2 */ 33 + 34 + compatible = "qcom,spi-qup-v2"; 35 + #address-cells = <1>; 36 + #size-cells = <0>; 37 + reg = <0xf9964000 0x1000>; 38 + interrupts = <0 102 0>; 39 + spi-max-frequency = <19200000>; 40 + 41 + clocks = <&gcc GCC_BLSP2_QUP2_SPI_APPS_CLK>, <&gcc GCC_BLSP2_AHB_CLK>; 42 + clock-names = "core", "iface"; 43 + 44 + pinctrl-names = "default"; 45 + pinctrl-0 = <&spi8_default>; 46 + 47 + device@0 { 48 + compatible = "arm,pl022-dummy"; 49 + #address-cells = <1>; 50 + #size-cells = <1>; 51 + reg = <0>; /* Chip select 0 */ 52 + spi-max-frequency = <19200000>; 53 + spi-cpol; 54 + }; 55 + 56 + device@1 { 57 + compatible = "arm,pl022-dummy"; 58 + #address-cells = <1>; 59 + #size-cells = <1>; 60 + reg = <1>; /* Chip select 1 */ 61 + spi-max-frequency = <9600000>; 62 + spi-cpha; 63 + }; 64 + 65 + device@2 { 66 + compatible = "arm,pl022-dummy"; 67 + #address-cells = <1>; 68 + #size-cells = <1>; 69 + reg = <2>; /* Chip select 2 */ 70 + spi-max-frequency = <19200000>; 71 + spi-cpol; 72 + spi-cpha; 73 + }; 74 + 75 + device@3 { 76 + compatible = "arm,pl022-dummy"; 77 + #address-cells = <1>; 78 + #size-cells = <1>; 79 + reg = <3>; /* Chip select 3 */ 80 + spi-max-frequency = <19200000>; 81 + spi-cpol; 82 + spi-cpha; 83 + spi-cs-high; 84 + }; 85 + };
+61
Documentation/devicetree/bindings/spi/spi-rspi.txt
··· 1 + Device tree configuration for Renesas RSPI/QSPI driver 2 + 3 + Required properties: 4 + - compatible : For Renesas Serial Peripheral Interface on legacy SH: 5 + "renesas,rspi-<soctype>", "renesas,rspi" as fallback. 6 + For Renesas Serial Peripheral Interface on RZ/A1H: 7 + "renesas,rspi-<soctype>", "renesas,rspi-rz" as fallback. 8 + For Quad Serial Peripheral Interface on R-Car Gen2: 9 + "renesas,qspi-<soctype>", "renesas,qspi" as fallback. 10 + Examples with soctypes are: 11 + - "renesas,rspi-sh7757" (SH) 12 + - "renesas,rspi-r7s72100" (RZ/A1H) 13 + - "renesas,qspi-r8a7790" (R-Car H2) 14 + - "renesas,qspi-r8a7791" (R-Car M2) 15 + - reg : Address start and address range size of the device 16 + - interrupts : A list of interrupt-specifiers, one for each entry in 17 + interrupt-names. 18 + If interrupt-names is not present, an interrupt specifier 19 + for a single muxed interrupt. 20 + - interrupt-names : A list of interrupt names. Should contain (if present): 21 + - "error" for SPEI, 22 + - "rx" for SPRI, 23 + - "tx" to SPTI, 24 + - "mux" for a single muxed interrupt. 25 + - interrupt-parent : The phandle for the interrupt controller that 26 + services interrupts for this device. 27 + - num-cs : Number of chip selects. Some RSPI cores have more than 1. 28 + - #address-cells : Must be <1> 29 + - #size-cells : Must be <0> 30 + 31 + Optional properties: 32 + - clocks : Must contain a reference to the functional clock. 33 + 34 + Pinctrl properties might be needed, too. See 35 + Documentation/devicetree/bindings/pinctrl/renesas,*. 36 + 37 + Examples: 38 + 39 + spi0: spi@e800c800 { 40 + compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz"; 41 + reg = <0xe800c800 0x24>; 42 + interrupts = <0 238 IRQ_TYPE_LEVEL_HIGH>, 43 + <0 239 IRQ_TYPE_LEVEL_HIGH>, 44 + <0 240 IRQ_TYPE_LEVEL_HIGH>; 45 + interrupt-names = "error", "rx", "tx"; 46 + interrupt-parent = <&gic>; 47 + num-cs = <1>; 48 + #address-cells = <1>; 49 + #size-cells = <0>; 50 + }; 51 + 52 + spi: spi@e6b10000 { 53 + compatible = "renesas,qspi-r8a7791", "renesas,qspi"; 54 + reg = <0 0xe6b10000 0 0x2c>; 55 + interrupt-parent = <&gic>; 56 + interrupts = <0 184 IRQ_TYPE_LEVEL_HIGH>; 57 + clocks = <&mstp9_clks R8A7791_CLK_QSPI_MOD>; 58 + num-cs = <1>; 59 + #address-cells = <1>; 60 + #size-cells = <0>; 61 + };
+1 -2
drivers/base/power/Makefile
··· 1 - obj-$(CONFIG_PM) += sysfs.o generic_ops.o common.o qos.o 1 + obj-$(CONFIG_PM) += sysfs.o generic_ops.o common.o qos.o runtime.o 2 2 obj-$(CONFIG_PM_SLEEP) += main.o wakeup.o 3 - obj-$(CONFIG_PM_RUNTIME) += runtime.o 4 3 obj-$(CONFIG_PM_TRACE_RTC) += trace.o 5 4 obj-$(CONFIG_PM_OPP) += opp.o 6 5 obj-$(CONFIG_PM_GENERIC_DOMAINS) += domain.o domain_governor.o
+123 -39
drivers/base/power/runtime.c
··· 13 13 #include <trace/events/rpm.h> 14 14 #include "power.h" 15 15 16 + #define RPM_GET_CALLBACK(dev, cb) \ 17 + ({ \ 18 + int (*__rpm_cb)(struct device *__d); \ 19 + \ 20 + if (dev->pm_domain) \ 21 + __rpm_cb = dev->pm_domain->ops.cb; \ 22 + else if (dev->type && dev->type->pm) \ 23 + __rpm_cb = dev->type->pm->cb; \ 24 + else if (dev->class && dev->class->pm) \ 25 + __rpm_cb = dev->class->pm->cb; \ 26 + else if (dev->bus && dev->bus->pm) \ 27 + __rpm_cb = dev->bus->pm->cb; \ 28 + else \ 29 + __rpm_cb = NULL; \ 30 + \ 31 + if (!__rpm_cb && dev->driver && dev->driver->pm) \ 32 + __rpm_cb = dev->driver->pm->cb; \ 33 + \ 34 + __rpm_cb; \ 35 + }) 36 + 37 + static int (*rpm_get_suspend_cb(struct device *dev))(struct device *) 38 + { 39 + return RPM_GET_CALLBACK(dev, runtime_suspend); 40 + } 41 + 42 + static int (*rpm_get_resume_cb(struct device *dev))(struct device *) 43 + { 44 + return RPM_GET_CALLBACK(dev, runtime_resume); 45 + } 46 + 47 + #ifdef CONFIG_PM_RUNTIME 48 + static int (*rpm_get_idle_cb(struct device *dev))(struct device *) 49 + { 50 + return RPM_GET_CALLBACK(dev, runtime_idle); 51 + } 52 + 16 53 static int rpm_resume(struct device *dev, int rpmflags); 17 54 static int rpm_suspend(struct device *dev, int rpmflags); 18 55 ··· 347 310 348 311 dev->power.idle_notification = true; 349 312 350 - if (dev->pm_domain) 351 - callback = dev->pm_domain->ops.runtime_idle; 352 - else if (dev->type && dev->type->pm) 353 - callback = dev->type->pm->runtime_idle; 354 - else if (dev->class && dev->class->pm) 355 - callback = dev->class->pm->runtime_idle; 356 - else if (dev->bus && dev->bus->pm) 357 - callback = dev->bus->pm->runtime_idle; 358 - else 359 - callback = NULL; 360 - 361 - if (!callback && dev->driver && dev->driver->pm) 362 - callback = dev->driver->pm->runtime_idle; 313 + callback = rpm_get_idle_cb(dev); 363 314 364 315 if (callback) 365 316 retval = __rpm_callback(callback, dev); ··· 517 492 518 493 __update_runtime_status(dev, RPM_SUSPENDING); 519 494 520 - if (dev->pm_domain) 521 - callback = dev->pm_domain->ops.runtime_suspend; 522 - else if (dev->type && dev->type->pm) 523 - callback = dev->type->pm->runtime_suspend; 524 - else if (dev->class && dev->class->pm) 525 - callback = dev->class->pm->runtime_suspend; 526 - else if (dev->bus && dev->bus->pm) 527 - callback = dev->bus->pm->runtime_suspend; 528 - else 529 - callback = NULL; 530 - 531 - if (!callback && dev->driver && dev->driver->pm) 532 - callback = dev->driver->pm->runtime_suspend; 495 + callback = rpm_get_suspend_cb(dev); 533 496 534 497 retval = rpm_callback(callback, dev); 535 498 if (retval) ··· 737 724 738 725 __update_runtime_status(dev, RPM_RESUMING); 739 726 740 - if (dev->pm_domain) 741 - callback = dev->pm_domain->ops.runtime_resume; 742 - else if (dev->type && dev->type->pm) 743 - callback = dev->type->pm->runtime_resume; 744 - else if (dev->class && dev->class->pm) 745 - callback = dev->class->pm->runtime_resume; 746 - else if (dev->bus && dev->bus->pm) 747 - callback = dev->bus->pm->runtime_resume; 748 - else 749 - callback = NULL; 750 - 751 - if (!callback && dev->driver && dev->driver->pm) 752 - callback = dev->driver->pm->runtime_resume; 727 + callback = rpm_get_resume_cb(dev); 753 728 754 729 retval = rpm_callback(callback, dev); 755 730 if (retval) { ··· 1402 1401 if (dev->power.irq_safe && dev->parent) 1403 1402 pm_runtime_put(dev->parent); 1404 1403 } 1404 + #endif 1405 + 1406 + /** 1407 + * pm_runtime_force_suspend - Force a device into suspend state if needed. 1408 + * @dev: Device to suspend. 1409 + * 1410 + * Disable runtime PM so we safely can check the device's runtime PM status and 1411 + * if it is active, invoke it's .runtime_suspend callback to bring it into 1412 + * suspend state. Keep runtime PM disabled to preserve the state unless we 1413 + * encounter errors. 1414 + * 1415 + * Typically this function may be invoked from a system suspend callback to make 1416 + * sure the device is put into low power state. 1417 + */ 1418 + int pm_runtime_force_suspend(struct device *dev) 1419 + { 1420 + int (*callback)(struct device *); 1421 + int ret = 0; 1422 + 1423 + pm_runtime_disable(dev); 1424 + 1425 + /* 1426 + * Note that pm_runtime_status_suspended() returns false while 1427 + * !CONFIG_PM_RUNTIME, which means the device will be put into low 1428 + * power state. 1429 + */ 1430 + if (pm_runtime_status_suspended(dev)) 1431 + return 0; 1432 + 1433 + callback = rpm_get_suspend_cb(dev); 1434 + 1435 + if (!callback) { 1436 + ret = -ENOSYS; 1437 + goto err; 1438 + } 1439 + 1440 + ret = callback(dev); 1441 + if (ret) 1442 + goto err; 1443 + 1444 + pm_runtime_set_suspended(dev); 1445 + return 0; 1446 + err: 1447 + pm_runtime_enable(dev); 1448 + return ret; 1449 + } 1450 + EXPORT_SYMBOL_GPL(pm_runtime_force_suspend); 1451 + 1452 + /** 1453 + * pm_runtime_force_resume - Force a device into resume state. 1454 + * @dev: Device to resume. 1455 + * 1456 + * Prior invoking this function we expect the user to have brought the device 1457 + * into low power state by a call to pm_runtime_force_suspend(). Here we reverse 1458 + * those actions and brings the device into full power. We update the runtime PM 1459 + * status and re-enables runtime PM. 1460 + * 1461 + * Typically this function may be invoked from a system resume callback to make 1462 + * sure the device is put into full power state. 1463 + */ 1464 + int pm_runtime_force_resume(struct device *dev) 1465 + { 1466 + int (*callback)(struct device *); 1467 + int ret = 0; 1468 + 1469 + callback = rpm_get_resume_cb(dev); 1470 + 1471 + if (!callback) { 1472 + ret = -ENOSYS; 1473 + goto out; 1474 + } 1475 + 1476 + ret = callback(dev); 1477 + if (ret) 1478 + goto out; 1479 + 1480 + pm_runtime_set_active(dev); 1481 + pm_runtime_mark_last_busy(dev); 1482 + out: 1483 + pm_runtime_enable(dev); 1484 + return ret; 1485 + } 1486 + EXPORT_SYMBOL_GPL(pm_runtime_force_resume);
+14 -1
drivers/spi/Kconfig
··· 307 307 308 308 config SPI_OMAP24XX 309 309 tristate "McSPI driver for OMAP" 310 - depends on ARM || ARM64 || AVR32 || HEXAGON || MIPS || SH 310 + depends on ARM || ARM64 || AVR32 || HEXAGON || MIPS || SUPERH 311 311 depends on ARCH_OMAP2PLUS || COMPILE_TEST 312 312 help 313 313 SPI master controller for OMAP24XX and later Multichannel SPI ··· 380 380 depends on (SUPERH && SH_DMAE_BASE) || ARCH_SHMOBILE 381 381 help 382 382 SPI driver for Renesas RSPI and QSPI blocks. 383 + 384 + config SPI_QUP 385 + tristate "Qualcomm SPI controller with QUP interface" 386 + depends on ARCH_MSM_DT || (ARM && COMPILE_TEST) 387 + help 388 + Qualcomm Universal Peripheral (QUP) core is an AHB slave that 389 + provides a common data path (an output FIFO and an input FIFO) 390 + for serial peripheral interface (SPI) mini-core. SPI in master 391 + mode supports up to 50MHz, up to four chip selects, programmable 392 + data path from 4 bits to 32 bits and numerous protocol variants. 393 + 394 + This driver can also be built as a module. If so, the module 395 + will be called spi_qup. 383 396 384 397 config SPI_S3C24XX 385 398 tristate "Samsung S3C24XX series SPI"
+1
drivers/spi/Makefile
··· 59 59 spi-pxa2xx-platform-$(CONFIG_SPI_PXA2XX_DMA) += spi-pxa2xx-dma.o 60 60 obj-$(CONFIG_SPI_PXA2XX) += spi-pxa2xx-platform.o 61 61 obj-$(CONFIG_SPI_PXA2XX_PCI) += spi-pxa2xx-pci.o 62 + obj-$(CONFIG_SPI_QUP) += spi-qup.o 62 63 obj-$(CONFIG_SPI_RSPI) += spi-rspi.o 63 64 obj-$(CONFIG_SPI_S3C24XX) += spi-s3c24xx-hw.o 64 65 spi-s3c24xx-hw-y := spi-s3c24xx.o
+19 -33
drivers/spi/spi-omap-100k.c
··· 83 83 #define SPI_SHUTDOWN 1 84 84 85 85 struct omap1_spi100k { 86 - struct spi_master *master; 87 86 struct clk *ick; 88 87 struct clk *fck; 89 88 90 89 /* Virtual base address of the controller */ 91 90 void __iomem *base; 92 - 93 - /* State of the SPI */ 94 - unsigned int state; 95 91 }; 96 92 97 93 struct omap1_spi100k_cs { 98 94 void __iomem *base; 99 95 int word_len; 100 96 }; 101 - 102 - #define MOD_REG_BIT(val, mask, set) do { \ 103 - if (set) \ 104 - val |= mask; \ 105 - else \ 106 - val &= ~mask; \ 107 - } while (0) 108 97 109 98 static void spi100k_enable_clock(struct spi_master *master) 110 99 { ··· 128 139 } 129 140 130 141 spi100k_enable_clock(master); 131 - writew( data , spi100k->base + SPI_TX_MSB); 142 + writew(data , spi100k->base + SPI_TX_MSB); 132 143 133 144 writew(SPI_CTRL_SEN(0) | 134 145 SPI_CTRL_WORD_SIZE(len) | ··· 136 147 spi100k->base + SPI_CTRL); 137 148 138 149 /* Wait for bit ack send change */ 139 - while((readw(spi100k->base + SPI_STATUS) & SPI_STATUS_WE) != SPI_STATUS_WE); 150 + while ((readw(spi100k->base + SPI_STATUS) & SPI_STATUS_WE) != SPI_STATUS_WE) 151 + ; 140 152 udelay(1000); 141 153 142 154 spi100k_disable_clock(master); ··· 145 155 146 156 static int spi100k_read_data(struct spi_master *master, int len) 147 157 { 148 - int dataH,dataL; 158 + int dataH, dataL; 149 159 struct omap1_spi100k *spi100k = spi_master_get_devdata(master); 150 160 151 161 /* Always do at least 16 bits */ ··· 158 168 SPI_CTRL_RD, 159 169 spi100k->base + SPI_CTRL); 160 170 161 - while((readw(spi100k->base + SPI_STATUS) & SPI_STATUS_RD) != SPI_STATUS_RD); 171 + while ((readw(spi100k->base + SPI_STATUS) & SPI_STATUS_RD) != SPI_STATUS_RD) 172 + ; 162 173 udelay(1000); 163 174 164 175 dataL = readw(spi100k->base + SPI_RX_LSB); ··· 195 204 static unsigned 196 205 omap1_spi100k_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) 197 206 { 198 - struct omap1_spi100k *spi100k; 199 207 struct omap1_spi100k_cs *cs = spi->controller_state; 200 208 unsigned int count, c; 201 209 int word_len; 202 210 203 - spi100k = spi_master_get_devdata(spi->master); 204 211 count = xfer->len; 205 212 c = count; 206 213 word_len = cs->word_len; ··· 210 221 rx = xfer->rx_buf; 211 222 tx = xfer->tx_buf; 212 223 do { 213 - c-=1; 224 + c -= 1; 214 225 if (xfer->tx_buf != NULL) 215 226 spi100k_write_data(spi->master, word_len, *tx++); 216 227 if (xfer->rx_buf != NULL) 217 228 *rx++ = spi100k_read_data(spi->master, word_len); 218 - } while(c); 229 + } while (c); 219 230 } else if (word_len <= 16) { 220 231 u16 *rx; 221 232 const u16 *tx; ··· 223 234 rx = xfer->rx_buf; 224 235 tx = xfer->tx_buf; 225 236 do { 226 - c-=2; 237 + c -= 2; 227 238 if (xfer->tx_buf != NULL) 228 - spi100k_write_data(spi->master,word_len, *tx++); 239 + spi100k_write_data(spi->master, word_len, *tx++); 229 240 if (xfer->rx_buf != NULL) 230 - *rx++ = spi100k_read_data(spi->master,word_len); 231 - } while(c); 241 + *rx++ = spi100k_read_data(spi->master, word_len); 242 + } while (c); 232 243 } else if (word_len <= 32) { 233 244 u32 *rx; 234 245 const u32 *tx; ··· 236 247 rx = xfer->rx_buf; 237 248 tx = xfer->tx_buf; 238 249 do { 239 - c-=4; 250 + c -= 4; 240 251 if (xfer->tx_buf != NULL) 241 - spi100k_write_data(spi->master,word_len, *tx); 252 + spi100k_write_data(spi->master, word_len, *tx); 242 253 if (xfer->rx_buf != NULL) 243 - *rx = spi100k_read_data(spi->master,word_len); 244 - } while(c); 254 + *rx = spi100k_read_data(spi->master, word_len); 255 + } while (c); 245 256 } 246 257 return count - c; 247 258 } ··· 283 294 spi100k = spi_master_get_devdata(spi->master); 284 295 285 296 if (!cs) { 286 - cs = kzalloc(sizeof *cs, GFP_KERNEL); 297 + cs = devm_kzalloc(&spi->dev, sizeof(*cs), GFP_KERNEL); 287 298 if (!cs) 288 299 return -ENOMEM; 289 300 cs->base = spi100k->base + spi->chip_select * 0x14; ··· 400 411 if (!pdev->id) 401 412 return -EINVAL; 402 413 403 - master = spi_alloc_master(&pdev->dev, sizeof *spi100k); 414 + master = spi_alloc_master(&pdev->dev, sizeof(*spi100k)); 404 415 if (master == NULL) { 405 416 dev_dbg(&pdev->dev, "master allocation failed\n"); 406 417 return -ENOMEM; 407 418 } 408 419 409 420 if (pdev->id != -1) 410 - master->bus_num = pdev->id; 421 + master->bus_num = pdev->id; 411 422 412 423 master->setup = omap1_spi100k_setup; 413 424 master->transfer_one_message = omap1_spi100k_transfer_one_message; ··· 423 434 platform_set_drvdata(pdev, master); 424 435 425 436 spi100k = spi_master_get_devdata(master); 426 - spi100k->master = master; 427 437 428 438 /* 429 439 * The memory region base address is taken as the platform_data. ··· 448 460 status = devm_spi_register_master(&pdev->dev, master); 449 461 if (status < 0) 450 462 goto err; 451 - 452 - spi100k->state = SPI_RUNNING; 453 463 454 464 return status; 455 465
+3 -20
drivers/spi/spi-omap-uwire.c
··· 99 99 }; 100 100 101 101 struct uwire_state { 102 - unsigned bits_per_word; 103 102 unsigned div1_idx; 104 103 }; 105 104 ··· 209 210 210 211 static int uwire_txrx(struct spi_device *spi, struct spi_transfer *t) 211 212 { 212 - struct uwire_state *ust = spi->controller_state; 213 213 unsigned len = t->len; 214 - unsigned bits = ust->bits_per_word; 214 + unsigned bits = t->bits_per_word ? : spi->bits_per_word; 215 215 unsigned bytes; 216 216 u16 val, w; 217 217 int status = 0; 218 218 219 219 if (!t->tx_buf && !t->rx_buf) 220 220 return 0; 221 - 222 - /* Microwire doesn't read and write concurrently */ 223 - if (t->tx_buf && t->rx_buf) 224 - return -EPERM; 225 221 226 222 w = spi->chip_select << 10; 227 223 w |= CS_CMD; ··· 316 322 struct uwire_state *ust = spi->controller_state; 317 323 struct uwire_spi *uwire; 318 324 unsigned flags = 0; 319 - unsigned bits; 320 325 unsigned hz; 321 326 unsigned long rate; 322 327 int div1_idx; ··· 324 331 int status; 325 332 326 333 uwire = spi_master_get_devdata(spi->master); 327 - 328 - bits = spi->bits_per_word; 329 - if (t != NULL && t->bits_per_word) 330 - bits = t->bits_per_word; 331 - 332 - if (bits > 16) { 333 - pr_debug("%s: wordsize %d?\n", dev_name(&spi->dev), bits); 334 - status = -ENODEV; 335 - goto done; 336 - } 337 - ust->bits_per_word = bits; 338 334 339 335 /* mode 0..3, clock inverted separately; 340 336 * standard nCS signaling; ··· 478 496 status = PTR_ERR(uwire->ck); 479 497 dev_dbg(&pdev->dev, "no functional clock?\n"); 480 498 spi_master_put(master); 499 + iounmap(uwire_base); 481 500 return status; 482 501 } 483 502 clk_enable(uwire->ck); ··· 492 509 493 510 /* the spi->mode bits understood by this driver: */ 494 511 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; 495 - 512 + master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 16); 496 513 master->flags = SPI_MASTER_HALF_DUPLEX; 497 514 498 515 master->bus_num = 2; /* "official" */
+44 -20
drivers/spi/spi-omap2-mcspi.c
··· 44 44 #include <linux/platform_data/spi-omap2-mcspi.h> 45 45 46 46 #define OMAP2_MCSPI_MAX_FREQ 48000000 47 + #define OMAP2_MCSPI_MAX_DIVIDER 4096 47 48 #define OMAP2_MCSPI_MAX_FIFODEPTH 64 48 49 #define OMAP2_MCSPI_MAX_FIFOWCNT 0xFFFF 49 50 #define SPI_AUTOSUSPEND_TIMEOUT 2000 ··· 89 88 #define OMAP2_MCSPI_CHCONF_FORCE BIT(20) 90 89 #define OMAP2_MCSPI_CHCONF_FFET BIT(27) 91 90 #define OMAP2_MCSPI_CHCONF_FFER BIT(28) 91 + #define OMAP2_MCSPI_CHCONF_CLKG BIT(29) 92 92 93 93 #define OMAP2_MCSPI_CHSTAT_RXS BIT(0) 94 94 #define OMAP2_MCSPI_CHSTAT_TXS BIT(1) ··· 97 95 #define OMAP2_MCSPI_CHSTAT_TXFFE BIT(3) 98 96 99 97 #define OMAP2_MCSPI_CHCTRL_EN BIT(0) 98 + #define OMAP2_MCSPI_CHCTRL_EXTCLK_MASK (0xff << 8) 100 99 101 100 #define OMAP2_MCSPI_WAKEUPENABLE_WKEN BIT(0) 102 101 ··· 151 148 int word_len; 152 149 struct list_head node; 153 150 /* Context save and restore shadow register */ 154 - u32 chconf0; 151 + u32 chconf0, chctrl0; 155 152 }; 156 153 157 154 static inline void mcspi_write_reg(struct spi_master *master, ··· 232 229 233 230 static void omap2_mcspi_set_enable(const struct spi_device *spi, int enable) 234 231 { 232 + struct omap2_mcspi_cs *cs = spi->controller_state; 235 233 u32 l; 236 234 237 - l = enable ? OMAP2_MCSPI_CHCTRL_EN : 0; 238 - mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCTRL0, l); 235 + l = cs->chctrl0; 236 + if (enable) 237 + l |= OMAP2_MCSPI_CHCTRL_EN; 238 + else 239 + l &= ~OMAP2_MCSPI_CHCTRL_EN; 240 + cs->chctrl0 = l; 241 + mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCTRL0, cs->chctrl0); 239 242 /* Flash post-writes */ 240 243 mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCTRL0); 241 244 } ··· 848 839 struct omap2_mcspi_cs *cs = spi->controller_state; 849 840 struct omap2_mcspi *mcspi; 850 841 struct spi_master *spi_cntrl; 851 - u32 l = 0, div = 0; 842 + u32 l = 0, clkd = 0, div, extclk = 0, clkg = 0; 852 843 u8 word_len = spi->bits_per_word; 853 844 u32 speed_hz = spi->max_speed_hz; 854 845 ··· 864 855 speed_hz = t->speed_hz; 865 856 866 857 speed_hz = min_t(u32, speed_hz, OMAP2_MCSPI_MAX_FREQ); 867 - div = omap2_mcspi_calc_divisor(speed_hz); 858 + if (speed_hz < (OMAP2_MCSPI_MAX_FREQ / OMAP2_MCSPI_MAX_DIVIDER)) { 859 + clkd = omap2_mcspi_calc_divisor(speed_hz); 860 + speed_hz = OMAP2_MCSPI_MAX_FREQ >> clkd; 861 + clkg = 0; 862 + } else { 863 + div = (OMAP2_MCSPI_MAX_FREQ + speed_hz - 1) / speed_hz; 864 + speed_hz = OMAP2_MCSPI_MAX_FREQ / div; 865 + clkd = (div - 1) & 0xf; 866 + extclk = (div - 1) >> 4; 867 + clkg = OMAP2_MCSPI_CHCONF_CLKG; 868 + } 868 869 869 870 l = mcspi_cached_chconf0(spi); 870 871 ··· 903 884 904 885 /* set clock divisor */ 905 886 l &= ~OMAP2_MCSPI_CHCONF_CLKD_MASK; 906 - l |= div << 2; 887 + l |= clkd << 2; 888 + 889 + /* set clock granularity */ 890 + l &= ~OMAP2_MCSPI_CHCONF_CLKG; 891 + l |= clkg; 892 + if (clkg) { 893 + cs->chctrl0 &= ~OMAP2_MCSPI_CHCTRL_EXTCLK_MASK; 894 + cs->chctrl0 |= extclk << 8; 895 + mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCTRL0, cs->chctrl0); 896 + } 907 897 908 898 /* set SPI mode 0..3 */ 909 899 if (spi->mode & SPI_CPOL) ··· 927 899 mcspi_write_chconf0(spi, l); 928 900 929 901 dev_dbg(&spi->dev, "setup: speed %d, sample %s edge, clk %s\n", 930 - OMAP2_MCSPI_MAX_FREQ >> div, 902 + speed_hz, 931 903 (spi->mode & SPI_CPHA) ? "trailing" : "leading", 932 904 (spi->mode & SPI_CPOL) ? "inverted" : "normal"); 933 905 ··· 999 971 cs->base = mcspi->base + spi->chip_select * 0x14; 1000 972 cs->phys = mcspi->phys + spi->chip_select * 0x14; 1001 973 cs->chconf0 = 0; 974 + cs->chctrl0 = 0; 1002 975 spi->controller_state = cs; 1003 976 /* Link this to context save list */ 1004 977 list_add_tail(&cs->node, &ctx->cs); ··· 1085 1056 status = -EINVAL; 1086 1057 break; 1087 1058 } 1088 - if (par_override || t->speed_hz || t->bits_per_word) { 1059 + if (par_override || 1060 + (t->speed_hz != spi->max_speed_hz) || 1061 + (t->bits_per_word != spi->bits_per_word)) { 1089 1062 par_override = 1; 1090 1063 status = omap2_mcspi_setup_transfer(spi, t); 1091 1064 if (status < 0) 1092 1065 break; 1093 - if (!t->speed_hz && !t->bits_per_word) 1066 + if (t->speed_hz == spi->max_speed_hz && 1067 + t->bits_per_word == spi->bits_per_word) 1094 1068 par_override = 0; 1095 1069 } 1096 1070 if (cd && cd->cs_per_word) { ··· 1207 1175 m->actual_length = 0; 1208 1176 m->status = 0; 1209 1177 1210 - /* reject invalid messages and transfers */ 1211 - if (list_empty(&m->transfers)) 1212 - return -EINVAL; 1213 1178 list_for_each_entry(t, &m->transfers, transfer_list) { 1214 1179 const void *tx_buf = t->tx_buf; 1215 1180 void *rx_buf = t->rx_buf; 1216 1181 unsigned len = t->len; 1217 1182 1218 - if (t->speed_hz > OMAP2_MCSPI_MAX_FREQ 1219 - || (len && !(rx_buf || tx_buf))) { 1183 + if ((len && !(rx_buf || tx_buf))) { 1220 1184 dev_dbg(mcspi->dev, "transfer: %d Hz, %d %s%s, %d bpw\n", 1221 1185 t->speed_hz, 1222 1186 len, 1223 1187 tx_buf ? "tx" : "", 1224 1188 rx_buf ? "rx" : "", 1225 1189 t->bits_per_word); 1226 - return -EINVAL; 1227 - } 1228 - if (t->speed_hz && t->speed_hz < (OMAP2_MCSPI_MAX_FREQ >> 15)) { 1229 - dev_dbg(mcspi->dev, "speed_hz %d below minimum %d Hz\n", 1230 - t->speed_hz, 1231 - OMAP2_MCSPI_MAX_FREQ >> 15); 1232 1190 return -EINVAL; 1233 1191 } 1234 1192 ··· 1332 1310 master->transfer_one_message = omap2_mcspi_transfer_one_message; 1333 1311 master->cleanup = omap2_mcspi_cleanup; 1334 1312 master->dev.of_node = node; 1313 + master->max_speed_hz = OMAP2_MCSPI_MAX_FREQ; 1314 + master->min_speed_hz = OMAP2_MCSPI_MAX_FREQ >> 15; 1335 1315 1336 1316 platform_set_drvdata(pdev, master); 1337 1317
+11 -68
drivers/spi/spi-orion.c
··· 42 42 struct orion_spi { 43 43 struct spi_master *master; 44 44 void __iomem *base; 45 - unsigned int max_speed; 46 - unsigned int min_speed; 47 45 struct clk *clk; 48 46 }; 49 47 ··· 70 72 val = readl(reg_addr); 71 73 val &= ~mask; 72 74 writel(val, reg_addr); 73 - } 74 - 75 - static int orion_spi_set_transfer_size(struct orion_spi *orion_spi, int size) 76 - { 77 - if (size == 16) { 78 - orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG, 79 - ORION_SPI_IF_8_16_BIT_MODE); 80 - } else if (size == 8) { 81 - orion_spi_clrbits(orion_spi, ORION_SPI_IF_CONFIG_REG, 82 - ORION_SPI_IF_8_16_BIT_MODE); 83 - } else { 84 - pr_debug("Bad bits per word value %d (only 8 or 16 are allowed).\n", 85 - size); 86 - return -EINVAL; 87 - } 88 - 89 - return 0; 90 75 } 91 76 92 77 static int orion_spi_baudrate_set(struct spi_device *spi, unsigned int speed) ··· 150 169 if (rc) 151 170 return rc; 152 171 153 - return orion_spi_set_transfer_size(orion_spi, bits_per_word); 172 + if (bits_per_word == 16) 173 + orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG, 174 + ORION_SPI_IF_8_16_BIT_MODE); 175 + else 176 + orion_spi_clrbits(orion_spi, ORION_SPI_IF_CONFIG_REG, 177 + ORION_SPI_IF_8_16_BIT_MODE); 178 + 179 + return 0; 154 180 } 155 181 156 182 static void orion_spi_set_cs(struct orion_spi *orion_spi, int enable) ··· 247 259 static unsigned int 248 260 orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer) 249 261 { 250 - struct orion_spi *orion_spi; 251 262 unsigned int count; 252 263 int word_len; 253 264 254 - orion_spi = spi_master_get_devdata(spi->master); 255 265 word_len = spi->bits_per_word; 256 266 count = xfer->len; 257 267 ··· 295 309 goto msg_done; 296 310 297 311 list_for_each_entry(t, &m->transfers, transfer_list) { 298 - /* make sure buffer length is even when working in 16 299 - * bit mode*/ 300 - if ((t->bits_per_word == 16) && (t->len & 1)) { 301 - dev_err(&spi->dev, 302 - "message rejected : " 303 - "odd data length %d while in 16 bit mode\n", 304 - t->len); 305 - status = -EIO; 306 - goto msg_done; 307 - } 308 - 309 - if (t->speed_hz && t->speed_hz < orion_spi->min_speed) { 310 - dev_err(&spi->dev, 311 - "message rejected : " 312 - "device min speed (%d Hz) exceeds " 313 - "required transfer speed (%d Hz)\n", 314 - orion_spi->min_speed, t->speed_hz); 315 - status = -EIO; 316 - goto msg_done; 317 - } 318 - 319 312 if (par_override || t->speed_hz || t->bits_per_word) { 320 313 par_override = 1; 321 314 status = orion_spi_setup_transfer(spi, t); ··· 339 374 return 0; 340 375 } 341 376 342 - static int orion_spi_setup(struct spi_device *spi) 343 - { 344 - struct orion_spi *orion_spi; 345 - 346 - orion_spi = spi_master_get_devdata(spi->master); 347 - 348 - if ((spi->max_speed_hz == 0) 349 - || (spi->max_speed_hz > orion_spi->max_speed)) 350 - spi->max_speed_hz = orion_spi->max_speed; 351 - 352 - if (spi->max_speed_hz < orion_spi->min_speed) { 353 - dev_err(&spi->dev, "setup: requested speed too low %d Hz\n", 354 - spi->max_speed_hz); 355 - return -EINVAL; 356 - } 357 - 358 - /* 359 - * baudrate & width will be set orion_spi_setup_transfer 360 - */ 361 - return 0; 362 - } 363 - 364 377 static int orion_spi_probe(struct platform_device *pdev) 365 378 { 366 379 struct spi_master *master; ··· 367 424 /* we support only mode 0, and no options */ 368 425 master->mode_bits = SPI_CPHA | SPI_CPOL; 369 426 370 - master->setup = orion_spi_setup; 371 427 master->transfer_one_message = orion_spi_transfer_one_message; 372 428 master->num_chipselect = ORION_NUM_CHIPSELECTS; 429 + master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16); 373 430 374 431 platform_set_drvdata(pdev, master); 375 432 ··· 385 442 clk_prepare(spi->clk); 386 443 clk_enable(spi->clk); 387 444 tclk_hz = clk_get_rate(spi->clk); 388 - spi->max_speed = DIV_ROUND_UP(tclk_hz, 4); 389 - spi->min_speed = DIV_ROUND_UP(tclk_hz, 30); 445 + master->max_speed_hz = DIV_ROUND_UP(tclk_hz, 4); 446 + master->min_speed_hz = DIV_ROUND_UP(tclk_hz, 30); 390 447 391 448 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 392 449 spi->base = devm_ioremap_resource(&pdev->dev, r);
+23 -52
drivers/spi/spi-pl022.c
··· 2108 2108 pl022->chipselects = devm_kzalloc(dev, num_cs * sizeof(int), 2109 2109 GFP_KERNEL); 2110 2110 2111 - pinctrl_pm_select_default_state(dev); 2112 - 2113 2111 /* 2114 2112 * Bus Number Which has been Assigned to this SSP controller 2115 2113 * on this board ··· 2180 2182 goto err_no_clk; 2181 2183 } 2182 2184 2183 - status = clk_prepare(pl022->clk); 2184 - if (status) { 2185 - dev_err(&adev->dev, "could not prepare SSP/SPI bus clock\n"); 2186 - goto err_clk_prep; 2187 - } 2188 - 2189 - status = clk_enable(pl022->clk); 2185 + status = clk_prepare_enable(pl022->clk); 2190 2186 if (status) { 2191 2187 dev_err(&adev->dev, "could not enable SSP/SPI bus clock\n"); 2192 2188 goto err_no_clk_en; ··· 2241 2249 if (platform_info->enable_dma) 2242 2250 pl022_dma_remove(pl022); 2243 2251 err_no_irq: 2244 - clk_disable(pl022->clk); 2252 + clk_disable_unprepare(pl022->clk); 2245 2253 err_no_clk_en: 2246 - clk_unprepare(pl022->clk); 2247 - err_clk_prep: 2248 2254 err_no_clk: 2249 2255 err_no_ioremap: 2250 2256 amba_release_regions(adev); ··· 2270 2280 if (pl022->master_info->enable_dma) 2271 2281 pl022_dma_remove(pl022); 2272 2282 2273 - clk_disable(pl022->clk); 2274 - clk_unprepare(pl022->clk); 2283 + clk_disable_unprepare(pl022->clk); 2275 2284 amba_release_regions(adev); 2276 2285 tasklet_disable(&pl022->pump_transfers); 2277 2286 return 0; 2278 2287 } 2279 2288 2280 - #if defined(CONFIG_SUSPEND) || defined(CONFIG_PM_RUNTIME) 2281 - /* 2282 - * These two functions are used from both suspend/resume and 2283 - * the runtime counterparts to handle external resources like 2284 - * clocks, pins and regulators when going to sleep. 2285 - */ 2286 - static void pl022_suspend_resources(struct pl022 *pl022, bool runtime) 2287 - { 2288 - clk_disable(pl022->clk); 2289 - 2290 - if (runtime) 2291 - pinctrl_pm_select_idle_state(&pl022->adev->dev); 2292 - else 2293 - pinctrl_pm_select_sleep_state(&pl022->adev->dev); 2294 - } 2295 - 2296 - static void pl022_resume_resources(struct pl022 *pl022, bool runtime) 2297 - { 2298 - /* First go to the default state */ 2299 - pinctrl_pm_select_default_state(&pl022->adev->dev); 2300 - if (!runtime) 2301 - /* Then let's idle the pins until the next transfer happens */ 2302 - pinctrl_pm_select_idle_state(&pl022->adev->dev); 2303 - 2304 - clk_enable(pl022->clk); 2305 - } 2306 - #endif 2307 - 2308 - #ifdef CONFIG_SUSPEND 2289 + #ifdef CONFIG_PM_SLEEP 2309 2290 static int pl022_suspend(struct device *dev) 2310 2291 { 2311 2292 struct pl022 *pl022 = dev_get_drvdata(dev); ··· 2288 2327 return ret; 2289 2328 } 2290 2329 2291 - pm_runtime_get_sync(dev); 2292 - pl022_suspend_resources(pl022, false); 2330 + ret = pm_runtime_force_suspend(dev); 2331 + if (ret) { 2332 + spi_master_resume(pl022->master); 2333 + return ret; 2334 + } 2335 + 2336 + pinctrl_pm_select_sleep_state(dev); 2293 2337 2294 2338 dev_dbg(dev, "suspended\n"); 2295 2339 return 0; ··· 2305 2339 struct pl022 *pl022 = dev_get_drvdata(dev); 2306 2340 int ret; 2307 2341 2308 - pl022_resume_resources(pl022, false); 2309 - pm_runtime_put(dev); 2342 + ret = pm_runtime_force_resume(dev); 2343 + if (ret) 2344 + dev_err(dev, "problem resuming\n"); 2310 2345 2311 2346 /* Start the queue running */ 2312 2347 ret = spi_master_resume(pl022->master); ··· 2318 2351 2319 2352 return ret; 2320 2353 } 2321 - #endif /* CONFIG_PM */ 2354 + #endif 2322 2355 2323 - #ifdef CONFIG_PM_RUNTIME 2356 + #ifdef CONFIG_PM 2324 2357 static int pl022_runtime_suspend(struct device *dev) 2325 2358 { 2326 2359 struct pl022 *pl022 = dev_get_drvdata(dev); 2327 2360 2328 - pl022_suspend_resources(pl022, true); 2361 + clk_disable_unprepare(pl022->clk); 2362 + pinctrl_pm_select_idle_state(dev); 2363 + 2329 2364 return 0; 2330 2365 } 2331 2366 ··· 2335 2366 { 2336 2367 struct pl022 *pl022 = dev_get_drvdata(dev); 2337 2368 2338 - pl022_resume_resources(pl022, true); 2369 + pinctrl_pm_select_default_state(dev); 2370 + clk_prepare_enable(pl022->clk); 2371 + 2339 2372 return 0; 2340 2373 } 2341 2374 #endif 2342 2375 2343 2376 static const struct dev_pm_ops pl022_dev_pm_ops = { 2344 2377 SET_SYSTEM_SLEEP_PM_OPS(pl022_suspend, pl022_resume) 2345 - SET_RUNTIME_PM_OPS(pl022_runtime_suspend, pl022_runtime_resume, NULL) 2378 + SET_PM_RUNTIME_PM_OPS(pl022_runtime_suspend, pl022_runtime_resume, NULL) 2346 2379 }; 2347 2380 2348 2381 static struct vendor_data vendor_arm = {
+779
drivers/spi/spi-qup.c
··· 1 + /* 2 + * Copyright (c) 2008-2014, The Linux foundation. All rights reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License rev 2 and 6 + * only rev 2 as published by the free Software foundation. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or fITNESS fOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + */ 13 + 14 + #include <linux/clk.h> 15 + #include <linux/delay.h> 16 + #include <linux/err.h> 17 + #include <linux/interrupt.h> 18 + #include <linux/io.h> 19 + #include <linux/list.h> 20 + #include <linux/module.h> 21 + #include <linux/of.h> 22 + #include <linux/platform_device.h> 23 + #include <linux/pm_runtime.h> 24 + #include <linux/spi/spi.h> 25 + 26 + #define QUP_CONFIG 0x0000 27 + #define QUP_STATE 0x0004 28 + #define QUP_IO_M_MODES 0x0008 29 + #define QUP_SW_RESET 0x000c 30 + #define QUP_OPERATIONAL 0x0018 31 + #define QUP_ERROR_FLAGS 0x001c 32 + #define QUP_ERROR_FLAGS_EN 0x0020 33 + #define QUP_OPERATIONAL_MASK 0x0028 34 + #define QUP_HW_VERSION 0x0030 35 + #define QUP_MX_OUTPUT_CNT 0x0100 36 + #define QUP_OUTPUT_FIFO 0x0110 37 + #define QUP_MX_WRITE_CNT 0x0150 38 + #define QUP_MX_INPUT_CNT 0x0200 39 + #define QUP_MX_READ_CNT 0x0208 40 + #define QUP_INPUT_FIFO 0x0218 41 + 42 + #define SPI_CONFIG 0x0300 43 + #define SPI_IO_CONTROL 0x0304 44 + #define SPI_ERROR_FLAGS 0x0308 45 + #define SPI_ERROR_FLAGS_EN 0x030c 46 + 47 + /* QUP_CONFIG fields */ 48 + #define QUP_CONFIG_SPI_MODE (1 << 8) 49 + #define QUP_CONFIG_CLOCK_AUTO_GATE BIT(13) 50 + #define QUP_CONFIG_NO_INPUT BIT(7) 51 + #define QUP_CONFIG_NO_OUTPUT BIT(6) 52 + #define QUP_CONFIG_N 0x001f 53 + 54 + /* QUP_STATE fields */ 55 + #define QUP_STATE_VALID BIT(2) 56 + #define QUP_STATE_RESET 0 57 + #define QUP_STATE_RUN 1 58 + #define QUP_STATE_PAUSE 3 59 + #define QUP_STATE_MASK 3 60 + #define QUP_STATE_CLEAR 2 61 + 62 + #define QUP_HW_VERSION_2_1_1 0x20010001 63 + 64 + /* QUP_IO_M_MODES fields */ 65 + #define QUP_IO_M_PACK_EN BIT(15) 66 + #define QUP_IO_M_UNPACK_EN BIT(14) 67 + #define QUP_IO_M_INPUT_MODE_MASK_SHIFT 12 68 + #define QUP_IO_M_OUTPUT_MODE_MASK_SHIFT 10 69 + #define QUP_IO_M_INPUT_MODE_MASK (3 << QUP_IO_M_INPUT_MODE_MASK_SHIFT) 70 + #define QUP_IO_M_OUTPUT_MODE_MASK (3 << QUP_IO_M_OUTPUT_MODE_MASK_SHIFT) 71 + 72 + #define QUP_IO_M_OUTPUT_BLOCK_SIZE(x) (((x) & (0x03 << 0)) >> 0) 73 + #define QUP_IO_M_OUTPUT_FIFO_SIZE(x) (((x) & (0x07 << 2)) >> 2) 74 + #define QUP_IO_M_INPUT_BLOCK_SIZE(x) (((x) & (0x03 << 5)) >> 5) 75 + #define QUP_IO_M_INPUT_FIFO_SIZE(x) (((x) & (0x07 << 7)) >> 7) 76 + 77 + #define QUP_IO_M_MODE_FIFO 0 78 + #define QUP_IO_M_MODE_BLOCK 1 79 + #define QUP_IO_M_MODE_DMOV 2 80 + #define QUP_IO_M_MODE_BAM 3 81 + 82 + /* QUP_OPERATIONAL fields */ 83 + #define QUP_OP_MAX_INPUT_DONE_FLAG BIT(11) 84 + #define QUP_OP_MAX_OUTPUT_DONE_FLAG BIT(10) 85 + #define QUP_OP_IN_SERVICE_FLAG BIT(9) 86 + #define QUP_OP_OUT_SERVICE_FLAG BIT(8) 87 + #define QUP_OP_IN_FIFO_FULL BIT(7) 88 + #define QUP_OP_OUT_FIFO_FULL BIT(6) 89 + #define QUP_OP_IN_FIFO_NOT_EMPTY BIT(5) 90 + #define QUP_OP_OUT_FIFO_NOT_EMPTY BIT(4) 91 + 92 + /* QUP_ERROR_FLAGS and QUP_ERROR_FLAGS_EN fields */ 93 + #define QUP_ERROR_OUTPUT_OVER_RUN BIT(5) 94 + #define QUP_ERROR_INPUT_UNDER_RUN BIT(4) 95 + #define QUP_ERROR_OUTPUT_UNDER_RUN BIT(3) 96 + #define QUP_ERROR_INPUT_OVER_RUN BIT(2) 97 + 98 + /* SPI_CONFIG fields */ 99 + #define SPI_CONFIG_HS_MODE BIT(10) 100 + #define SPI_CONFIG_INPUT_FIRST BIT(9) 101 + #define SPI_CONFIG_LOOPBACK BIT(8) 102 + 103 + /* SPI_IO_CONTROL fields */ 104 + #define SPI_IO_C_FORCE_CS BIT(11) 105 + #define SPI_IO_C_CLK_IDLE_HIGH BIT(10) 106 + #define SPI_IO_C_MX_CS_MODE BIT(8) 107 + #define SPI_IO_C_CS_N_POLARITY_0 BIT(4) 108 + #define SPI_IO_C_CS_SELECT(x) (((x) & 3) << 2) 109 + #define SPI_IO_C_CS_SELECT_MASK 0x000c 110 + #define SPI_IO_C_TRISTATE_CS BIT(1) 111 + #define SPI_IO_C_NO_TRI_STATE BIT(0) 112 + 113 + /* SPI_ERROR_FLAGS and SPI_ERROR_FLAGS_EN fields */ 114 + #define SPI_ERROR_CLK_OVER_RUN BIT(1) 115 + #define SPI_ERROR_CLK_UNDER_RUN BIT(0) 116 + 117 + #define SPI_NUM_CHIPSELECTS 4 118 + 119 + /* high speed mode is when bus rate is greater then 26MHz */ 120 + #define SPI_HS_MIN_RATE 26000000 121 + #define SPI_MAX_RATE 50000000 122 + 123 + #define SPI_DELAY_THRESHOLD 1 124 + #define SPI_DELAY_RETRY 10 125 + 126 + struct spi_qup { 127 + void __iomem *base; 128 + struct device *dev; 129 + struct clk *cclk; /* core clock */ 130 + struct clk *iclk; /* interface clock */ 131 + int irq; 132 + spinlock_t lock; 133 + 134 + int in_fifo_sz; 135 + int out_fifo_sz; 136 + int in_blk_sz; 137 + int out_blk_sz; 138 + 139 + struct spi_transfer *xfer; 140 + struct completion done; 141 + int error; 142 + int w_size; /* bytes per SPI word */ 143 + int tx_bytes; 144 + int rx_bytes; 145 + }; 146 + 147 + 148 + static inline bool spi_qup_is_valid_state(struct spi_qup *controller) 149 + { 150 + u32 opstate = readl_relaxed(controller->base + QUP_STATE); 151 + 152 + return opstate & QUP_STATE_VALID; 153 + } 154 + 155 + static int spi_qup_set_state(struct spi_qup *controller, u32 state) 156 + { 157 + unsigned long loop; 158 + u32 cur_state; 159 + 160 + loop = 0; 161 + while (!spi_qup_is_valid_state(controller)) { 162 + 163 + usleep_range(SPI_DELAY_THRESHOLD, SPI_DELAY_THRESHOLD * 2); 164 + 165 + if (++loop > SPI_DELAY_RETRY) 166 + return -EIO; 167 + } 168 + 169 + if (loop) 170 + dev_dbg(controller->dev, "invalid state for %ld,us %d\n", 171 + loop, state); 172 + 173 + cur_state = readl_relaxed(controller->base + QUP_STATE); 174 + /* 175 + * Per spec: for PAUSE_STATE to RESET_STATE, two writes 176 + * of (b10) are required 177 + */ 178 + if (((cur_state & QUP_STATE_MASK) == QUP_STATE_PAUSE) && 179 + (state == QUP_STATE_RESET)) { 180 + writel_relaxed(QUP_STATE_CLEAR, controller->base + QUP_STATE); 181 + writel_relaxed(QUP_STATE_CLEAR, controller->base + QUP_STATE); 182 + } else { 183 + cur_state &= ~QUP_STATE_MASK; 184 + cur_state |= state; 185 + writel_relaxed(cur_state, controller->base + QUP_STATE); 186 + } 187 + 188 + loop = 0; 189 + while (!spi_qup_is_valid_state(controller)) { 190 + 191 + usleep_range(SPI_DELAY_THRESHOLD, SPI_DELAY_THRESHOLD * 2); 192 + 193 + if (++loop > SPI_DELAY_RETRY) 194 + return -EIO; 195 + } 196 + 197 + return 0; 198 + } 199 + 200 + 201 + static void spi_qup_fifo_read(struct spi_qup *controller, 202 + struct spi_transfer *xfer) 203 + { 204 + u8 *rx_buf = xfer->rx_buf; 205 + u32 word, state; 206 + int idx, shift, w_size; 207 + 208 + w_size = controller->w_size; 209 + 210 + while (controller->rx_bytes < xfer->len) { 211 + 212 + state = readl_relaxed(controller->base + QUP_OPERATIONAL); 213 + if (0 == (state & QUP_OP_IN_FIFO_NOT_EMPTY)) 214 + break; 215 + 216 + word = readl_relaxed(controller->base + QUP_INPUT_FIFO); 217 + 218 + if (!rx_buf) { 219 + controller->rx_bytes += w_size; 220 + continue; 221 + } 222 + 223 + for (idx = 0; idx < w_size; idx++, controller->rx_bytes++) { 224 + /* 225 + * The data format depends on bytes per SPI word: 226 + * 4 bytes: 0x12345678 227 + * 2 bytes: 0x00001234 228 + * 1 byte : 0x00000012 229 + */ 230 + shift = BITS_PER_BYTE; 231 + shift *= (w_size - idx - 1); 232 + rx_buf[controller->rx_bytes] = word >> shift; 233 + } 234 + } 235 + } 236 + 237 + static void spi_qup_fifo_write(struct spi_qup *controller, 238 + struct spi_transfer *xfer) 239 + { 240 + const u8 *tx_buf = xfer->tx_buf; 241 + u32 word, state, data; 242 + int idx, w_size; 243 + 244 + w_size = controller->w_size; 245 + 246 + while (controller->tx_bytes < xfer->len) { 247 + 248 + state = readl_relaxed(controller->base + QUP_OPERATIONAL); 249 + if (state & QUP_OP_OUT_FIFO_FULL) 250 + break; 251 + 252 + word = 0; 253 + for (idx = 0; idx < w_size; idx++, controller->tx_bytes++) { 254 + 255 + if (!tx_buf) { 256 + controller->tx_bytes += w_size; 257 + break; 258 + } 259 + 260 + data = tx_buf[controller->tx_bytes]; 261 + word |= data << (BITS_PER_BYTE * (3 - idx)); 262 + } 263 + 264 + writel_relaxed(word, controller->base + QUP_OUTPUT_FIFO); 265 + } 266 + } 267 + 268 + static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id) 269 + { 270 + struct spi_qup *controller = dev_id; 271 + struct spi_transfer *xfer; 272 + u32 opflags, qup_err, spi_err; 273 + unsigned long flags; 274 + int error = 0; 275 + 276 + spin_lock_irqsave(&controller->lock, flags); 277 + xfer = controller->xfer; 278 + controller->xfer = NULL; 279 + spin_unlock_irqrestore(&controller->lock, flags); 280 + 281 + qup_err = readl_relaxed(controller->base + QUP_ERROR_FLAGS); 282 + spi_err = readl_relaxed(controller->base + SPI_ERROR_FLAGS); 283 + opflags = readl_relaxed(controller->base + QUP_OPERATIONAL); 284 + 285 + writel_relaxed(qup_err, controller->base + QUP_ERROR_FLAGS); 286 + writel_relaxed(spi_err, controller->base + SPI_ERROR_FLAGS); 287 + writel_relaxed(opflags, controller->base + QUP_OPERATIONAL); 288 + 289 + if (!xfer) { 290 + dev_err_ratelimited(controller->dev, "unexpected irq %x08 %x08 %x08\n", 291 + qup_err, spi_err, opflags); 292 + return IRQ_HANDLED; 293 + } 294 + 295 + if (qup_err) { 296 + if (qup_err & QUP_ERROR_OUTPUT_OVER_RUN) 297 + dev_warn(controller->dev, "OUTPUT_OVER_RUN\n"); 298 + if (qup_err & QUP_ERROR_INPUT_UNDER_RUN) 299 + dev_warn(controller->dev, "INPUT_UNDER_RUN\n"); 300 + if (qup_err & QUP_ERROR_OUTPUT_UNDER_RUN) 301 + dev_warn(controller->dev, "OUTPUT_UNDER_RUN\n"); 302 + if (qup_err & QUP_ERROR_INPUT_OVER_RUN) 303 + dev_warn(controller->dev, "INPUT_OVER_RUN\n"); 304 + 305 + error = -EIO; 306 + } 307 + 308 + if (spi_err) { 309 + if (spi_err & SPI_ERROR_CLK_OVER_RUN) 310 + dev_warn(controller->dev, "CLK_OVER_RUN\n"); 311 + if (spi_err & SPI_ERROR_CLK_UNDER_RUN) 312 + dev_warn(controller->dev, "CLK_UNDER_RUN\n"); 313 + 314 + error = -EIO; 315 + } 316 + 317 + if (opflags & QUP_OP_IN_SERVICE_FLAG) 318 + spi_qup_fifo_read(controller, xfer); 319 + 320 + if (opflags & QUP_OP_OUT_SERVICE_FLAG) 321 + spi_qup_fifo_write(controller, xfer); 322 + 323 + spin_lock_irqsave(&controller->lock, flags); 324 + controller->error = error; 325 + controller->xfer = xfer; 326 + spin_unlock_irqrestore(&controller->lock, flags); 327 + 328 + if (controller->rx_bytes == xfer->len || error) 329 + complete(&controller->done); 330 + 331 + return IRQ_HANDLED; 332 + } 333 + 334 + 335 + /* set clock freq ... bits per word */ 336 + static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer) 337 + { 338 + struct spi_qup *controller = spi_master_get_devdata(spi->master); 339 + u32 config, iomode, mode; 340 + int ret, n_words, w_size; 341 + 342 + if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) { 343 + dev_err(controller->dev, "too big size for loopback %d > %d\n", 344 + xfer->len, controller->in_fifo_sz); 345 + return -EIO; 346 + } 347 + 348 + ret = clk_set_rate(controller->cclk, xfer->speed_hz); 349 + if (ret) { 350 + dev_err(controller->dev, "fail to set frequency %d", 351 + xfer->speed_hz); 352 + return -EIO; 353 + } 354 + 355 + if (spi_qup_set_state(controller, QUP_STATE_RESET)) { 356 + dev_err(controller->dev, "cannot set RESET state\n"); 357 + return -EIO; 358 + } 359 + 360 + w_size = 4; 361 + if (xfer->bits_per_word <= 8) 362 + w_size = 1; 363 + else if (xfer->bits_per_word <= 16) 364 + w_size = 2; 365 + 366 + n_words = xfer->len / w_size; 367 + controller->w_size = w_size; 368 + 369 + if (n_words <= controller->in_fifo_sz) { 370 + mode = QUP_IO_M_MODE_FIFO; 371 + writel_relaxed(n_words, controller->base + QUP_MX_READ_CNT); 372 + writel_relaxed(n_words, controller->base + QUP_MX_WRITE_CNT); 373 + /* must be zero for FIFO */ 374 + writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT); 375 + writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT); 376 + } else { 377 + mode = QUP_IO_M_MODE_BLOCK; 378 + writel_relaxed(n_words, controller->base + QUP_MX_INPUT_CNT); 379 + writel_relaxed(n_words, controller->base + QUP_MX_OUTPUT_CNT); 380 + /* must be zero for BLOCK and BAM */ 381 + writel_relaxed(0, controller->base + QUP_MX_READ_CNT); 382 + writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT); 383 + } 384 + 385 + iomode = readl_relaxed(controller->base + QUP_IO_M_MODES); 386 + /* Set input and output transfer mode */ 387 + iomode &= ~(QUP_IO_M_INPUT_MODE_MASK | QUP_IO_M_OUTPUT_MODE_MASK); 388 + iomode &= ~(QUP_IO_M_PACK_EN | QUP_IO_M_UNPACK_EN); 389 + iomode |= (mode << QUP_IO_M_OUTPUT_MODE_MASK_SHIFT); 390 + iomode |= (mode << QUP_IO_M_INPUT_MODE_MASK_SHIFT); 391 + 392 + writel_relaxed(iomode, controller->base + QUP_IO_M_MODES); 393 + 394 + config = readl_relaxed(controller->base + SPI_CONFIG); 395 + 396 + if (spi->mode & SPI_LOOP) 397 + config |= SPI_CONFIG_LOOPBACK; 398 + else 399 + config &= ~SPI_CONFIG_LOOPBACK; 400 + 401 + if (spi->mode & SPI_CPHA) 402 + config &= ~SPI_CONFIG_INPUT_FIRST; 403 + else 404 + config |= SPI_CONFIG_INPUT_FIRST; 405 + 406 + /* 407 + * HS_MODE improves signal stability for spi-clk high rates, 408 + * but is invalid in loop back mode. 409 + */ 410 + if ((xfer->speed_hz >= SPI_HS_MIN_RATE) && !(spi->mode & SPI_LOOP)) 411 + config |= SPI_CONFIG_HS_MODE; 412 + else 413 + config &= ~SPI_CONFIG_HS_MODE; 414 + 415 + writel_relaxed(config, controller->base + SPI_CONFIG); 416 + 417 + config = readl_relaxed(controller->base + QUP_CONFIG); 418 + config &= ~(QUP_CONFIG_NO_INPUT | QUP_CONFIG_NO_OUTPUT | QUP_CONFIG_N); 419 + config |= xfer->bits_per_word - 1; 420 + config |= QUP_CONFIG_SPI_MODE; 421 + writel_relaxed(config, controller->base + QUP_CONFIG); 422 + 423 + writel_relaxed(0, controller->base + QUP_OPERATIONAL_MASK); 424 + return 0; 425 + } 426 + 427 + static void spi_qup_set_cs(struct spi_device *spi, bool enable) 428 + { 429 + struct spi_qup *controller = spi_master_get_devdata(spi->master); 430 + 431 + u32 iocontol, mask; 432 + 433 + iocontol = readl_relaxed(controller->base + SPI_IO_CONTROL); 434 + 435 + /* Disable auto CS toggle and use manual */ 436 + iocontol &= ~SPI_IO_C_MX_CS_MODE; 437 + iocontol |= SPI_IO_C_FORCE_CS; 438 + 439 + iocontol &= ~SPI_IO_C_CS_SELECT_MASK; 440 + iocontol |= SPI_IO_C_CS_SELECT(spi->chip_select); 441 + 442 + mask = SPI_IO_C_CS_N_POLARITY_0 << spi->chip_select; 443 + 444 + if (enable) 445 + iocontol |= mask; 446 + else 447 + iocontol &= ~mask; 448 + 449 + writel_relaxed(iocontol, controller->base + SPI_IO_CONTROL); 450 + } 451 + 452 + static int spi_qup_transfer_one(struct spi_master *master, 453 + struct spi_device *spi, 454 + struct spi_transfer *xfer) 455 + { 456 + struct spi_qup *controller = spi_master_get_devdata(master); 457 + unsigned long timeout, flags; 458 + int ret = -EIO; 459 + 460 + ret = spi_qup_io_config(spi, xfer); 461 + if (ret) 462 + return ret; 463 + 464 + timeout = DIV_ROUND_UP(xfer->speed_hz, MSEC_PER_SEC); 465 + timeout = DIV_ROUND_UP(xfer->len * 8, timeout); 466 + timeout = 100 * msecs_to_jiffies(timeout); 467 + 468 + reinit_completion(&controller->done); 469 + 470 + spin_lock_irqsave(&controller->lock, flags); 471 + controller->xfer = xfer; 472 + controller->error = 0; 473 + controller->rx_bytes = 0; 474 + controller->tx_bytes = 0; 475 + spin_unlock_irqrestore(&controller->lock, flags); 476 + 477 + if (spi_qup_set_state(controller, QUP_STATE_RUN)) { 478 + dev_warn(controller->dev, "cannot set RUN state\n"); 479 + goto exit; 480 + } 481 + 482 + if (spi_qup_set_state(controller, QUP_STATE_PAUSE)) { 483 + dev_warn(controller->dev, "cannot set PAUSE state\n"); 484 + goto exit; 485 + } 486 + 487 + spi_qup_fifo_write(controller, xfer); 488 + 489 + if (spi_qup_set_state(controller, QUP_STATE_RUN)) { 490 + dev_warn(controller->dev, "cannot set EXECUTE state\n"); 491 + goto exit; 492 + } 493 + 494 + if (!wait_for_completion_timeout(&controller->done, timeout)) 495 + ret = -ETIMEDOUT; 496 + exit: 497 + spi_qup_set_state(controller, QUP_STATE_RESET); 498 + spin_lock_irqsave(&controller->lock, flags); 499 + controller->xfer = NULL; 500 + if (!ret) 501 + ret = controller->error; 502 + spin_unlock_irqrestore(&controller->lock, flags); 503 + return ret; 504 + } 505 + 506 + static int spi_qup_probe(struct platform_device *pdev) 507 + { 508 + struct spi_master *master; 509 + struct clk *iclk, *cclk; 510 + struct spi_qup *controller; 511 + struct resource *res; 512 + struct device *dev; 513 + void __iomem *base; 514 + u32 data, max_freq, iomode; 515 + int ret, irq, size; 516 + 517 + dev = &pdev->dev; 518 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 519 + base = devm_ioremap_resource(dev, res); 520 + if (IS_ERR(base)) 521 + return PTR_ERR(base); 522 + 523 + irq = platform_get_irq(pdev, 0); 524 + if (irq < 0) 525 + return irq; 526 + 527 + cclk = devm_clk_get(dev, "core"); 528 + if (IS_ERR(cclk)) 529 + return PTR_ERR(cclk); 530 + 531 + iclk = devm_clk_get(dev, "iface"); 532 + if (IS_ERR(iclk)) 533 + return PTR_ERR(iclk); 534 + 535 + /* This is optional parameter */ 536 + if (of_property_read_u32(dev->of_node, "spi-max-frequency", &max_freq)) 537 + max_freq = SPI_MAX_RATE; 538 + 539 + if (!max_freq || max_freq > SPI_MAX_RATE) { 540 + dev_err(dev, "invalid clock frequency %d\n", max_freq); 541 + return -ENXIO; 542 + } 543 + 544 + ret = clk_prepare_enable(cclk); 545 + if (ret) { 546 + dev_err(dev, "cannot enable core clock\n"); 547 + return ret; 548 + } 549 + 550 + ret = clk_prepare_enable(iclk); 551 + if (ret) { 552 + clk_disable_unprepare(cclk); 553 + dev_err(dev, "cannot enable iface clock\n"); 554 + return ret; 555 + } 556 + 557 + data = readl_relaxed(base + QUP_HW_VERSION); 558 + 559 + if (data < QUP_HW_VERSION_2_1_1) { 560 + clk_disable_unprepare(cclk); 561 + clk_disable_unprepare(iclk); 562 + dev_err(dev, "v.%08x is not supported\n", data); 563 + return -ENXIO; 564 + } 565 + 566 + master = spi_alloc_master(dev, sizeof(struct spi_qup)); 567 + if (!master) { 568 + clk_disable_unprepare(cclk); 569 + clk_disable_unprepare(iclk); 570 + dev_err(dev, "cannot allocate master\n"); 571 + return -ENOMEM; 572 + } 573 + 574 + master->bus_num = pdev->id; 575 + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; 576 + master->num_chipselect = SPI_NUM_CHIPSELECTS; 577 + master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); 578 + master->max_speed_hz = max_freq; 579 + master->set_cs = spi_qup_set_cs; 580 + master->transfer_one = spi_qup_transfer_one; 581 + master->dev.of_node = pdev->dev.of_node; 582 + master->auto_runtime_pm = true; 583 + 584 + platform_set_drvdata(pdev, master); 585 + 586 + controller = spi_master_get_devdata(master); 587 + 588 + controller->dev = dev; 589 + controller->base = base; 590 + controller->iclk = iclk; 591 + controller->cclk = cclk; 592 + controller->irq = irq; 593 + 594 + spin_lock_init(&controller->lock); 595 + init_completion(&controller->done); 596 + 597 + iomode = readl_relaxed(base + QUP_IO_M_MODES); 598 + 599 + size = QUP_IO_M_OUTPUT_BLOCK_SIZE(iomode); 600 + if (size) 601 + controller->out_blk_sz = size * 16; 602 + else 603 + controller->out_blk_sz = 4; 604 + 605 + size = QUP_IO_M_INPUT_BLOCK_SIZE(iomode); 606 + if (size) 607 + controller->in_blk_sz = size * 16; 608 + else 609 + controller->in_blk_sz = 4; 610 + 611 + size = QUP_IO_M_OUTPUT_FIFO_SIZE(iomode); 612 + controller->out_fifo_sz = controller->out_blk_sz * (2 << size); 613 + 614 + size = QUP_IO_M_INPUT_FIFO_SIZE(iomode); 615 + controller->in_fifo_sz = controller->in_blk_sz * (2 << size); 616 + 617 + dev_info(dev, "v.%08x IN:block:%d, fifo:%d, OUT:block:%d, fifo:%d\n", 618 + data, controller->in_blk_sz, controller->in_fifo_sz, 619 + controller->out_blk_sz, controller->out_fifo_sz); 620 + 621 + writel_relaxed(1, base + QUP_SW_RESET); 622 + 623 + ret = spi_qup_set_state(controller, QUP_STATE_RESET); 624 + if (ret) { 625 + dev_err(dev, "cannot set RESET state\n"); 626 + goto error; 627 + } 628 + 629 + writel_relaxed(0, base + QUP_OPERATIONAL); 630 + writel_relaxed(0, base + QUP_IO_M_MODES); 631 + writel_relaxed(0, base + QUP_OPERATIONAL_MASK); 632 + writel_relaxed(SPI_ERROR_CLK_UNDER_RUN | SPI_ERROR_CLK_OVER_RUN, 633 + base + SPI_ERROR_FLAGS_EN); 634 + 635 + writel_relaxed(0, base + SPI_CONFIG); 636 + writel_relaxed(SPI_IO_C_NO_TRI_STATE, base + SPI_IO_CONTROL); 637 + 638 + ret = devm_request_irq(dev, irq, spi_qup_qup_irq, 639 + IRQF_TRIGGER_HIGH, pdev->name, controller); 640 + if (ret) 641 + goto error; 642 + 643 + ret = devm_spi_register_master(dev, master); 644 + if (ret) 645 + goto error; 646 + 647 + pm_runtime_set_autosuspend_delay(dev, MSEC_PER_SEC); 648 + pm_runtime_use_autosuspend(dev); 649 + pm_runtime_set_active(dev); 650 + pm_runtime_enable(dev); 651 + return 0; 652 + 653 + error: 654 + clk_disable_unprepare(cclk); 655 + clk_disable_unprepare(iclk); 656 + spi_master_put(master); 657 + return ret; 658 + } 659 + 660 + #ifdef CONFIG_PM_RUNTIME 661 + static int spi_qup_pm_suspend_runtime(struct device *device) 662 + { 663 + struct spi_master *master = dev_get_drvdata(device); 664 + struct spi_qup *controller = spi_master_get_devdata(master); 665 + u32 config; 666 + 667 + /* Enable clocks auto gaiting */ 668 + config = readl(controller->base + QUP_CONFIG); 669 + config |= QUP_CONFIG_CLOCK_AUTO_GATE; 670 + writel_relaxed(config, controller->base + QUP_CONFIG); 671 + return 0; 672 + } 673 + 674 + static int spi_qup_pm_resume_runtime(struct device *device) 675 + { 676 + struct spi_master *master = dev_get_drvdata(device); 677 + struct spi_qup *controller = spi_master_get_devdata(master); 678 + u32 config; 679 + 680 + /* Disable clocks auto gaiting */ 681 + config = readl_relaxed(controller->base + QUP_CONFIG); 682 + config &= ~QUP_CONFIG_CLOCK_AUTO_GATE; 683 + writel_relaxed(config, controller->base + QUP_CONFIG); 684 + return 0; 685 + } 686 + #endif /* CONFIG_PM_RUNTIME */ 687 + 688 + #ifdef CONFIG_PM_SLEEP 689 + static int spi_qup_suspend(struct device *device) 690 + { 691 + struct spi_master *master = dev_get_drvdata(device); 692 + struct spi_qup *controller = spi_master_get_devdata(master); 693 + int ret; 694 + 695 + ret = spi_master_suspend(master); 696 + if (ret) 697 + return ret; 698 + 699 + ret = spi_qup_set_state(controller, QUP_STATE_RESET); 700 + if (ret) 701 + return ret; 702 + 703 + clk_disable_unprepare(controller->cclk); 704 + clk_disable_unprepare(controller->iclk); 705 + return 0; 706 + } 707 + 708 + static int spi_qup_resume(struct device *device) 709 + { 710 + struct spi_master *master = dev_get_drvdata(device); 711 + struct spi_qup *controller = spi_master_get_devdata(master); 712 + int ret; 713 + 714 + ret = clk_prepare_enable(controller->iclk); 715 + if (ret) 716 + return ret; 717 + 718 + ret = clk_prepare_enable(controller->cclk); 719 + if (ret) 720 + return ret; 721 + 722 + ret = spi_qup_set_state(controller, QUP_STATE_RESET); 723 + if (ret) 724 + return ret; 725 + 726 + return spi_master_resume(master); 727 + } 728 + #endif /* CONFIG_PM_SLEEP */ 729 + 730 + static int spi_qup_remove(struct platform_device *pdev) 731 + { 732 + struct spi_master *master = dev_get_drvdata(&pdev->dev); 733 + struct spi_qup *controller = spi_master_get_devdata(master); 734 + int ret; 735 + 736 + ret = pm_runtime_get_sync(&pdev->dev); 737 + if (ret) 738 + return ret; 739 + 740 + ret = spi_qup_set_state(controller, QUP_STATE_RESET); 741 + if (ret) 742 + return ret; 743 + 744 + clk_disable_unprepare(controller->cclk); 745 + clk_disable_unprepare(controller->iclk); 746 + 747 + pm_runtime_put_noidle(&pdev->dev); 748 + pm_runtime_disable(&pdev->dev); 749 + return 0; 750 + } 751 + 752 + static struct of_device_id spi_qup_dt_match[] = { 753 + { .compatible = "qcom,spi-qup-v2.1.1", }, 754 + { .compatible = "qcom,spi-qup-v2.2.1", }, 755 + { } 756 + }; 757 + MODULE_DEVICE_TABLE(of, spi_qup_dt_match); 758 + 759 + static const struct dev_pm_ops spi_qup_dev_pm_ops = { 760 + SET_SYSTEM_SLEEP_PM_OPS(spi_qup_suspend, spi_qup_resume) 761 + SET_RUNTIME_PM_OPS(spi_qup_pm_suspend_runtime, 762 + spi_qup_pm_resume_runtime, 763 + NULL) 764 + }; 765 + 766 + static struct platform_driver spi_qup_driver = { 767 + .driver = { 768 + .name = "spi_qup", 769 + .owner = THIS_MODULE, 770 + .pm = &spi_qup_dev_pm_ops, 771 + .of_match_table = spi_qup_dt_match, 772 + }, 773 + .probe = spi_qup_probe, 774 + .remove = spi_qup_remove, 775 + }; 776 + module_platform_driver(spi_qup_driver); 777 + 778 + MODULE_LICENSE("GPL v2"); 779 + MODULE_ALIAS("platform:spi_qup");
+565 -287
drivers/spi/spi-rspi.c
··· 1 1 /* 2 2 * SH RSPI driver 3 3 * 4 - * Copyright (C) 2012 Renesas Solutions Corp. 4 + * Copyright (C) 2012, 2013 Renesas Solutions Corp. 5 + * Copyright (C) 2014 Glider bvba 5 6 * 6 7 * Based on spi-sh.c: 7 8 * Copyright (C) 2011 Renesas Solutions Corp. ··· 26 25 #include <linux/kernel.h> 27 26 #include <linux/sched.h> 28 27 #include <linux/errno.h> 29 - #include <linux/list.h> 30 - #include <linux/workqueue.h> 31 28 #include <linux/interrupt.h> 32 29 #include <linux/platform_device.h> 33 30 #include <linux/io.h> 34 31 #include <linux/clk.h> 35 32 #include <linux/dmaengine.h> 36 33 #include <linux/dma-mapping.h> 34 + #include <linux/of_device.h> 35 + #include <linux/pm_runtime.h> 37 36 #include <linux/sh_dma.h> 38 37 #include <linux/spi/spi.h> 39 38 #include <linux/spi/rspi.h> ··· 50 49 #define RSPI_SPCKD 0x0c /* Clock Delay Register */ 51 50 #define RSPI_SSLND 0x0d /* Slave Select Negation Delay Register */ 52 51 #define RSPI_SPND 0x0e /* Next-Access Delay Register */ 53 - #define RSPI_SPCR2 0x0f /* Control Register 2 */ 52 + #define RSPI_SPCR2 0x0f /* Control Register 2 (SH only) */ 54 53 #define RSPI_SPCMD0 0x10 /* Command Register 0 */ 55 54 #define RSPI_SPCMD1 0x12 /* Command Register 1 */ 56 55 #define RSPI_SPCMD2 0x14 /* Command Register 2 */ ··· 59 58 #define RSPI_SPCMD5 0x1a /* Command Register 5 */ 60 59 #define RSPI_SPCMD6 0x1c /* Command Register 6 */ 61 60 #define RSPI_SPCMD7 0x1e /* Command Register 7 */ 61 + #define RSPI_SPCMD(i) (RSPI_SPCMD0 + (i) * 2) 62 + #define RSPI_NUM_SPCMD 8 63 + #define RSPI_RZ_NUM_SPCMD 4 64 + #define QSPI_NUM_SPCMD 4 65 + 66 + /* RSPI on RZ only */ 62 67 #define RSPI_SPBFCR 0x20 /* Buffer Control Register */ 63 68 #define RSPI_SPBFDR 0x22 /* Buffer Data Count Setting Register */ 64 69 65 - /*qspi only */ 70 + /* QSPI only */ 66 71 #define QSPI_SPBFCR 0x18 /* Buffer Control Register */ 67 72 #define QSPI_SPBDCR 0x1a /* Buffer Data Count Register */ 68 73 #define QSPI_SPBMUL0 0x1c /* Transfer Data Length Multiplier Setting Register 0 */ 69 74 #define QSPI_SPBMUL1 0x20 /* Transfer Data Length Multiplier Setting Register 1 */ 70 75 #define QSPI_SPBMUL2 0x24 /* Transfer Data Length Multiplier Setting Register 2 */ 71 76 #define QSPI_SPBMUL3 0x28 /* Transfer Data Length Multiplier Setting Register 3 */ 77 + #define QSPI_SPBMUL(i) (QSPI_SPBMUL0 + (i) * 4) 72 78 73 79 /* SPCR - Control Register */ 74 80 #define SPCR_SPRIE 0x80 /* Receive Interrupt Enable */ ··· 112 104 #define SPSR_PERF 0x08 /* Parity Error Flag */ 113 105 #define SPSR_MODF 0x04 /* Mode Fault Error Flag */ 114 106 #define SPSR_IDLNF 0x02 /* RSPI Idle Flag */ 115 - #define SPSR_OVRF 0x01 /* Overrun Error Flag */ 107 + #define SPSR_OVRF 0x01 /* Overrun Error Flag (RSPI only) */ 116 108 117 109 /* SPSCR - Sequence Control Register */ 118 110 #define SPSCR_SPSLN_MASK 0x07 /* Sequence Length Specification */ ··· 129 121 #define SPDCR_SPLWORD SPDCR_SPLW1 130 122 #define SPDCR_SPLBYTE SPDCR_SPLW0 131 123 #define SPDCR_SPLW 0x20 /* Access Width Specification (SH) */ 132 - #define SPDCR_SPRDTD 0x10 /* Receive Transmit Data Select */ 124 + #define SPDCR_SPRDTD 0x10 /* Receive Transmit Data Select (SH) */ 133 125 #define SPDCR_SLSEL1 0x08 134 126 #define SPDCR_SLSEL0 0x04 135 - #define SPDCR_SLSEL_MASK 0x0c /* SSL1 Output Select */ 127 + #define SPDCR_SLSEL_MASK 0x0c /* SSL1 Output Select (SH) */ 136 128 #define SPDCR_SPFC1 0x02 137 129 #define SPDCR_SPFC0 0x01 138 - #define SPDCR_SPFC_MASK 0x03 /* Frame Count Setting (1-4) */ 130 + #define SPDCR_SPFC_MASK 0x03 /* Frame Count Setting (1-4) (SH) */ 139 131 140 132 /* SPCKD - Clock Delay Register */ 141 133 #define SPCKD_SCKDL_MASK 0x07 /* Clock Delay Setting (1-8) */ ··· 159 151 #define SPCMD_LSBF 0x1000 /* LSB First */ 160 152 #define SPCMD_SPB_MASK 0x0f00 /* Data Length Setting */ 161 153 #define SPCMD_SPB_8_TO_16(bit) (((bit - 1) << 8) & SPCMD_SPB_MASK) 162 - #define SPCMD_SPB_8BIT 0x0000 /* qspi only */ 154 + #define SPCMD_SPB_8BIT 0x0000 /* QSPI only */ 163 155 #define SPCMD_SPB_16BIT 0x0100 164 156 #define SPCMD_SPB_20BIT 0x0000 165 157 #define SPCMD_SPB_24BIT 0x0100 ··· 178 170 #define SPCMD_CPHA 0x0001 /* Clock Phase Setting */ 179 171 180 172 /* SPBFCR - Buffer Control Register */ 181 - #define SPBFCR_TXRST 0x80 /* Transmit Buffer Data Reset (qspi only) */ 182 - #define SPBFCR_RXRST 0x40 /* Receive Buffer Data Reset (qspi only) */ 173 + #define SPBFCR_TXRST 0x80 /* Transmit Buffer Data Reset */ 174 + #define SPBFCR_RXRST 0x40 /* Receive Buffer Data Reset */ 183 175 #define SPBFCR_TXTRG_MASK 0x30 /* Transmit Buffer Data Triggering Number */ 184 176 #define SPBFCR_RXTRG_MASK 0x07 /* Receive Buffer Data Triggering Number */ 185 177 ··· 189 181 void __iomem *addr; 190 182 u32 max_speed_hz; 191 183 struct spi_master *master; 192 - struct list_head queue; 193 - struct work_struct ws; 194 184 wait_queue_head_t wait; 195 - spinlock_t lock; 196 185 struct clk *clk; 197 - u8 spsr; 198 186 u16 spcmd; 187 + u8 spsr; 188 + u8 sppcr; 189 + int rx_irq, tx_irq; 199 190 const struct spi_ops *ops; 200 191 201 192 /* for dmaengine */ 202 193 struct dma_chan *chan_tx; 203 194 struct dma_chan *chan_rx; 204 - int irq; 205 195 206 196 unsigned dma_width_16bit:1; 207 197 unsigned dma_callbacked:1; 198 + unsigned byte_access:1; 208 199 }; 209 200 210 201 static void rspi_write8(const struct rspi_data *rspi, u8 data, u16 offset) ··· 231 224 return ioread16(rspi->addr + offset); 232 225 } 233 226 227 + static void rspi_write_data(const struct rspi_data *rspi, u16 data) 228 + { 229 + if (rspi->byte_access) 230 + rspi_write8(rspi, data, RSPI_SPDR); 231 + else /* 16 bit */ 232 + rspi_write16(rspi, data, RSPI_SPDR); 233 + } 234 + 235 + static u16 rspi_read_data(const struct rspi_data *rspi) 236 + { 237 + if (rspi->byte_access) 238 + return rspi_read8(rspi, RSPI_SPDR); 239 + else /* 16 bit */ 240 + return rspi_read16(rspi, RSPI_SPDR); 241 + } 242 + 234 243 /* optional functions */ 235 244 struct spi_ops { 236 - int (*set_config_register)(const struct rspi_data *rspi, 237 - int access_size); 238 - int (*send_pio)(struct rspi_data *rspi, struct spi_message *mesg, 239 - struct spi_transfer *t); 240 - int (*receive_pio)(struct rspi_data *rspi, struct spi_message *mesg, 241 - struct spi_transfer *t); 242 - 245 + int (*set_config_register)(struct rspi_data *rspi, int access_size); 246 + int (*transfer_one)(struct spi_master *master, struct spi_device *spi, 247 + struct spi_transfer *xfer); 248 + u16 mode_bits; 243 249 }; 244 250 245 251 /* 246 - * functions for RSPI 252 + * functions for RSPI on legacy SH 247 253 */ 248 - static int rspi_set_config_register(const struct rspi_data *rspi, 249 - int access_size) 254 + static int rspi_set_config_register(struct rspi_data *rspi, int access_size) 250 255 { 251 256 int spbr; 252 257 253 - /* Sets output mode(CMOS) and MOSI signal(from previous transfer) */ 254 - rspi_write8(rspi, 0x00, RSPI_SPPCR); 258 + /* Sets output mode, MOSI signal, and (optionally) loopback */ 259 + rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR); 255 260 256 261 /* Sets transfer bit rate */ 257 262 spbr = clk_get_rate(rspi->clk) / (2 * rspi->max_speed_hz) - 1; 258 263 rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR); 259 264 260 - /* Sets number of frames to be used: 1 frame */ 261 - rspi_write8(rspi, 0x00, RSPI_SPDCR); 265 + /* Disable dummy transmission, set 16-bit word access, 1 frame */ 266 + rspi_write8(rspi, 0, RSPI_SPDCR); 267 + rspi->byte_access = 0; 262 268 263 269 /* Sets RSPCK, SSL, next-access delay value */ 264 270 rspi_write8(rspi, 0x00, RSPI_SPCKD); ··· 282 262 rspi_write8(rspi, 0x00, RSPI_SPCR2); 283 263 284 264 /* Sets SPCMD */ 285 - rspi_write16(rspi, SPCMD_SPB_8_TO_16(access_size) | rspi->spcmd, 286 - RSPI_SPCMD0); 265 + rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); 266 + rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 267 + 268 + /* Sets RSPI mode */ 269 + rspi_write8(rspi, SPCR_MSTR, RSPI_SPCR); 270 + 271 + return 0; 272 + } 273 + 274 + /* 275 + * functions for RSPI on RZ 276 + */ 277 + static int rspi_rz_set_config_register(struct rspi_data *rspi, int access_size) 278 + { 279 + int spbr; 280 + 281 + /* Sets output mode, MOSI signal, and (optionally) loopback */ 282 + rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR); 283 + 284 + /* Sets transfer bit rate */ 285 + spbr = clk_get_rate(rspi->clk) / (2 * rspi->max_speed_hz) - 1; 286 + rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR); 287 + 288 + /* Disable dummy transmission, set byte access */ 289 + rspi_write8(rspi, SPDCR_SPLBYTE, RSPI_SPDCR); 290 + rspi->byte_access = 1; 291 + 292 + /* Sets RSPCK, SSL, next-access delay value */ 293 + rspi_write8(rspi, 0x00, RSPI_SPCKD); 294 + rspi_write8(rspi, 0x00, RSPI_SSLND); 295 + rspi_write8(rspi, 0x00, RSPI_SPND); 296 + 297 + /* Sets SPCMD */ 298 + rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); 299 + rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 287 300 288 301 /* Sets RSPI mode */ 289 302 rspi_write8(rspi, SPCR_MSTR, RSPI_SPCR); ··· 327 274 /* 328 275 * functions for QSPI 329 276 */ 330 - static int qspi_set_config_register(const struct rspi_data *rspi, 331 - int access_size) 277 + static int qspi_set_config_register(struct rspi_data *rspi, int access_size) 332 278 { 333 - u16 spcmd; 334 279 int spbr; 335 280 336 - /* Sets output mode(CMOS) and MOSI signal(from previous transfer) */ 337 - rspi_write8(rspi, 0x00, RSPI_SPPCR); 281 + /* Sets output mode, MOSI signal, and (optionally) loopback */ 282 + rspi_write8(rspi, rspi->sppcr, RSPI_SPPCR); 338 283 339 284 /* Sets transfer bit rate */ 340 285 spbr = clk_get_rate(rspi->clk) / (2 * rspi->max_speed_hz); 341 286 rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR); 342 287 343 - /* Sets number of frames to be used: 1 frame */ 344 - rspi_write8(rspi, 0x00, RSPI_SPDCR); 288 + /* Disable dummy transmission, set byte access */ 289 + rspi_write8(rspi, 0, RSPI_SPDCR); 290 + rspi->byte_access = 1; 345 291 346 292 /* Sets RSPCK, SSL, next-access delay value */ 347 293 rspi_write8(rspi, 0x00, RSPI_SPCKD); ··· 349 297 350 298 /* Data Length Setting */ 351 299 if (access_size == 8) 352 - spcmd = SPCMD_SPB_8BIT; 300 + rspi->spcmd |= SPCMD_SPB_8BIT; 353 301 else if (access_size == 16) 354 - spcmd = SPCMD_SPB_16BIT; 302 + rspi->spcmd |= SPCMD_SPB_16BIT; 355 303 else 356 - spcmd = SPCMD_SPB_32BIT; 304 + rspi->spcmd |= SPCMD_SPB_32BIT; 357 305 358 - spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | rspi->spcmd | SPCMD_SPNDEN; 306 + rspi->spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | SPCMD_SPNDEN; 359 307 360 308 /* Resets transfer data length */ 361 309 rspi_write32(rspi, 0, QSPI_SPBMUL0); ··· 366 314 rspi_write8(rspi, 0x00, QSPI_SPBFCR); 367 315 368 316 /* Sets SPCMD */ 369 - rspi_write16(rspi, spcmd, RSPI_SPCMD0); 317 + rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 370 318 371 - /* Enables SPI function in a master mode */ 319 + /* Enables SPI function in master mode */ 372 320 rspi_write8(rspi, SPCR_SPE | SPCR_MSTR, RSPI_SPCR); 373 321 374 322 return 0; ··· 392 340 int ret; 393 341 394 342 rspi->spsr = rspi_read8(rspi, RSPI_SPSR); 343 + if (rspi->spsr & wait_mask) 344 + return 0; 345 + 395 346 rspi_enable_irq(rspi, enable_bit); 396 347 ret = wait_event_timeout(rspi->wait, rspi->spsr & wait_mask, HZ); 397 348 if (ret == 0 && !(rspi->spsr & wait_mask)) ··· 403 348 return 0; 404 349 } 405 350 406 - static void rspi_assert_ssl(const struct rspi_data *rspi) 351 + static int rspi_data_out(struct rspi_data *rspi, u8 data) 407 352 { 408 - rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_SPE, RSPI_SPCR); 409 - } 410 - 411 - static void rspi_negate_ssl(const struct rspi_data *rspi) 412 - { 413 - rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_SPE, RSPI_SPCR); 414 - } 415 - 416 - static int rspi_send_pio(struct rspi_data *rspi, struct spi_message *mesg, 417 - struct spi_transfer *t) 418 - { 419 - int remain = t->len; 420 - const u8 *data = t->tx_buf; 421 - while (remain > 0) { 422 - rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_TXMD, 423 - RSPI_SPCR); 424 - 425 - if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { 426 - dev_err(&rspi->master->dev, 427 - "%s: tx empty timeout\n", __func__); 428 - return -ETIMEDOUT; 429 - } 430 - 431 - rspi_write16(rspi, *data, RSPI_SPDR); 432 - data++; 433 - remain--; 353 + if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { 354 + dev_err(&rspi->master->dev, "transmit timeout\n"); 355 + return -ETIMEDOUT; 434 356 } 435 - 436 - /* Waiting for the last transmission */ 437 - rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 438 - 357 + rspi_write_data(rspi, data); 439 358 return 0; 440 359 } 441 360 442 - static int qspi_send_pio(struct rspi_data *rspi, struct spi_message *mesg, 443 - struct spi_transfer *t) 361 + static int rspi_data_in(struct rspi_data *rspi) 444 362 { 445 - int remain = t->len; 446 - const u8 *data = t->tx_buf; 363 + u8 data; 447 364 448 - rspi_write8(rspi, SPBFCR_TXRST, QSPI_SPBFCR); 449 - rspi_write8(rspi, 0x00, QSPI_SPBFCR); 450 - 451 - while (remain > 0) { 452 - 453 - if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { 454 - dev_err(&rspi->master->dev, 455 - "%s: tx empty timeout\n", __func__); 456 - return -ETIMEDOUT; 457 - } 458 - rspi_write8(rspi, *data++, RSPI_SPDR); 459 - 460 - if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) { 461 - dev_err(&rspi->master->dev, 462 - "%s: receive timeout\n", __func__); 463 - return -ETIMEDOUT; 464 - } 465 - rspi_read8(rspi, RSPI_SPDR); 466 - 467 - remain--; 365 + if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) { 366 + dev_err(&rspi->master->dev, "receive timeout\n"); 367 + return -ETIMEDOUT; 468 368 } 469 - 470 - /* Waiting for the last transmission */ 471 - rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 472 - 473 - return 0; 369 + data = rspi_read_data(rspi); 370 + return data; 474 371 } 475 372 476 - #define send_pio(spi, mesg, t) spi->ops->send_pio(spi, mesg, t) 373 + static int rspi_data_out_in(struct rspi_data *rspi, u8 data) 374 + { 375 + int ret; 376 + 377 + ret = rspi_data_out(rspi, data); 378 + if (ret < 0) 379 + return ret; 380 + 381 + return rspi_data_in(rspi); 382 + } 477 383 478 384 static void rspi_dma_complete(void *arg) 479 385 { ··· 487 471 struct scatterlist sg; 488 472 const void *buf = NULL; 489 473 struct dma_async_tx_descriptor *desc; 490 - unsigned len; 474 + unsigned int len; 491 475 int ret = 0; 492 476 493 477 if (rspi->dma_width_16bit) { ··· 525 509 * DMAC needs SPTIE, but if SPTIE is set, this IRQ routine will be 526 510 * called. So, this driver disables the IRQ while DMA transfer. 527 511 */ 528 - disable_irq(rspi->irq); 512 + disable_irq(rspi->tx_irq); 529 513 530 514 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_TXMD, RSPI_SPCR); 531 515 rspi_enable_irq(rspi, SPCR_SPTIE); ··· 544 528 ret = -ETIMEDOUT; 545 529 rspi_disable_irq(rspi, SPCR_SPTIE); 546 530 547 - enable_irq(rspi->irq); 531 + enable_irq(rspi->tx_irq); 548 532 549 533 end: 550 534 rspi_dma_unmap_sg(&sg, rspi->chan_tx, DMA_TO_DEVICE); ··· 561 545 562 546 spsr = rspi_read8(rspi, RSPI_SPSR); 563 547 if (spsr & SPSR_SPRF) 564 - rspi_read16(rspi, RSPI_SPDR); /* dummy read */ 548 + rspi_read_data(rspi); /* dummy read */ 565 549 if (spsr & SPSR_OVRF) 566 550 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPSR) & ~SPSR_OVRF, 567 551 RSPI_SPSR); 568 552 } 569 553 570 - static int rspi_receive_pio(struct rspi_data *rspi, struct spi_message *mesg, 571 - struct spi_transfer *t) 554 + static void rspi_rz_receive_init(const struct rspi_data *rspi) 572 555 { 573 - int remain = t->len; 574 - u8 *data; 575 - 576 556 rspi_receive_init(rspi); 577 - 578 - data = t->rx_buf; 579 - while (remain > 0) { 580 - rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_TXMD, 581 - RSPI_SPCR); 582 - 583 - if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { 584 - dev_err(&rspi->master->dev, 585 - "%s: tx empty timeout\n", __func__); 586 - return -ETIMEDOUT; 587 - } 588 - /* dummy write for generate clock */ 589 - rspi_write16(rspi, DUMMY_DATA, RSPI_SPDR); 590 - 591 - if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) { 592 - dev_err(&rspi->master->dev, 593 - "%s: receive timeout\n", __func__); 594 - return -ETIMEDOUT; 595 - } 596 - /* SPDR allows 16 or 32-bit access only */ 597 - *data = (u8)rspi_read16(rspi, RSPI_SPDR); 598 - 599 - data++; 600 - remain--; 601 - } 602 - 603 - return 0; 557 + rspi_write8(rspi, SPBFCR_TXRST | SPBFCR_RXRST, RSPI_SPBFCR); 558 + rspi_write8(rspi, 0, RSPI_SPBFCR); 604 559 } 605 560 606 561 static void qspi_receive_init(const struct rspi_data *rspi) ··· 580 593 581 594 spsr = rspi_read8(rspi, RSPI_SPSR); 582 595 if (spsr & SPSR_SPRF) 583 - rspi_read8(rspi, RSPI_SPDR); /* dummy read */ 596 + rspi_read_data(rspi); /* dummy read */ 584 597 rspi_write8(rspi, SPBFCR_TXRST | SPBFCR_RXRST, QSPI_SPBFCR); 585 - rspi_write8(rspi, 0x00, QSPI_SPBFCR); 598 + rspi_write8(rspi, 0, QSPI_SPBFCR); 586 599 } 587 - 588 - static int qspi_receive_pio(struct rspi_data *rspi, struct spi_message *mesg, 589 - struct spi_transfer *t) 590 - { 591 - int remain = t->len; 592 - u8 *data; 593 - 594 - qspi_receive_init(rspi); 595 - 596 - data = t->rx_buf; 597 - while (remain > 0) { 598 - 599 - if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) { 600 - dev_err(&rspi->master->dev, 601 - "%s: tx empty timeout\n", __func__); 602 - return -ETIMEDOUT; 603 - } 604 - /* dummy write for generate clock */ 605 - rspi_write8(rspi, DUMMY_DATA, RSPI_SPDR); 606 - 607 - if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) { 608 - dev_err(&rspi->master->dev, 609 - "%s: receive timeout\n", __func__); 610 - return -ETIMEDOUT; 611 - } 612 - /* SPDR allows 8, 16 or 32-bit access */ 613 - *data++ = rspi_read8(rspi, RSPI_SPDR); 614 - remain--; 615 - } 616 - 617 - return 0; 618 - } 619 - 620 - #define receive_pio(spi, mesg, t) spi->ops->receive_pio(spi, mesg, t) 621 600 622 601 static int rspi_receive_dma(struct rspi_data *rspi, struct spi_transfer *t) 623 602 { 624 603 struct scatterlist sg, sg_dummy; 625 604 void *dummy = NULL, *rx_buf = NULL; 626 605 struct dma_async_tx_descriptor *desc, *desc_dummy; 627 - unsigned len; 606 + unsigned int len; 628 607 int ret = 0; 629 608 630 609 if (rspi->dma_width_16bit) { ··· 648 695 * DMAC needs SPTIE, but if SPTIE is set, this IRQ routine will be 649 696 * called. So, this driver disables the IRQ while DMA transfer. 650 697 */ 651 - disable_irq(rspi->irq); 698 + disable_irq(rspi->tx_irq); 699 + if (rspi->rx_irq != rspi->tx_irq) 700 + disable_irq(rspi->rx_irq); 652 701 653 702 rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_TXMD, RSPI_SPCR); 654 703 rspi_enable_irq(rspi, SPCR_SPTIE | SPCR_SPRIE); ··· 673 718 ret = -ETIMEDOUT; 674 719 rspi_disable_irq(rspi, SPCR_SPTIE | SPCR_SPRIE); 675 720 676 - enable_irq(rspi->irq); 721 + enable_irq(rspi->tx_irq); 722 + if (rspi->rx_irq != rspi->tx_irq) 723 + enable_irq(rspi->rx_irq); 677 724 678 725 end: 679 726 rspi_dma_unmap_sg(&sg, rspi->chan_rx, DMA_FROM_DEVICE); ··· 703 746 return 0; 704 747 } 705 748 706 - static void rspi_work(struct work_struct *work) 749 + static int rspi_transfer_out_in(struct rspi_data *rspi, 750 + struct spi_transfer *xfer) 707 751 { 708 - struct rspi_data *rspi = container_of(work, struct rspi_data, ws); 709 - struct spi_message *mesg; 710 - struct spi_transfer *t; 711 - unsigned long flags; 712 - int ret; 752 + int remain = xfer->len, ret; 753 + const u8 *tx_buf = xfer->tx_buf; 754 + u8 *rx_buf = xfer->rx_buf; 755 + u8 spcr, data; 713 756 714 - while (1) { 715 - spin_lock_irqsave(&rspi->lock, flags); 716 - if (list_empty(&rspi->queue)) { 717 - spin_unlock_irqrestore(&rspi->lock, flags); 718 - break; 757 + rspi_receive_init(rspi); 758 + 759 + spcr = rspi_read8(rspi, RSPI_SPCR); 760 + if (rx_buf) 761 + spcr &= ~SPCR_TXMD; 762 + else 763 + spcr |= SPCR_TXMD; 764 + rspi_write8(rspi, spcr, RSPI_SPCR); 765 + 766 + while (remain > 0) { 767 + data = tx_buf ? *tx_buf++ : DUMMY_DATA; 768 + ret = rspi_data_out(rspi, data); 769 + if (ret < 0) 770 + return ret; 771 + if (rx_buf) { 772 + ret = rspi_data_in(rspi); 773 + if (ret < 0) 774 + return ret; 775 + *rx_buf++ = ret; 719 776 } 720 - mesg = list_entry(rspi->queue.next, struct spi_message, queue); 721 - list_del_init(&mesg->queue); 722 - spin_unlock_irqrestore(&rspi->lock, flags); 723 - 724 - rspi_assert_ssl(rspi); 725 - 726 - list_for_each_entry(t, &mesg->transfers, transfer_list) { 727 - if (t->tx_buf) { 728 - if (rspi_is_dma(rspi, t)) 729 - ret = rspi_send_dma(rspi, t); 730 - else 731 - ret = send_pio(rspi, mesg, t); 732 - if (ret < 0) 733 - goto error; 734 - } 735 - if (t->rx_buf) { 736 - if (rspi_is_dma(rspi, t)) 737 - ret = rspi_receive_dma(rspi, t); 738 - else 739 - ret = receive_pio(rspi, mesg, t); 740 - if (ret < 0) 741 - goto error; 742 - } 743 - mesg->actual_length += t->len; 744 - } 745 - rspi_negate_ssl(rspi); 746 - 747 - mesg->status = 0; 748 - mesg->complete(mesg->context); 777 + remain--; 749 778 } 750 779 751 - return; 780 + /* Wait for the last transmission */ 781 + rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 752 782 753 - error: 754 - mesg->status = ret; 755 - mesg->complete(mesg->context); 783 + return 0; 784 + } 785 + 786 + static int rspi_transfer_one(struct spi_master *master, struct spi_device *spi, 787 + struct spi_transfer *xfer) 788 + { 789 + struct rspi_data *rspi = spi_master_get_devdata(master); 790 + int ret; 791 + 792 + if (!rspi_is_dma(rspi, xfer)) 793 + return rspi_transfer_out_in(rspi, xfer); 794 + 795 + if (xfer->tx_buf) { 796 + ret = rspi_send_dma(rspi, xfer); 797 + if (ret < 0) 798 + return ret; 799 + } 800 + if (xfer->rx_buf) 801 + return rspi_receive_dma(rspi, xfer); 802 + 803 + return 0; 804 + } 805 + 806 + static int rspi_rz_transfer_out_in(struct rspi_data *rspi, 807 + struct spi_transfer *xfer) 808 + { 809 + int remain = xfer->len, ret; 810 + const u8 *tx_buf = xfer->tx_buf; 811 + u8 *rx_buf = xfer->rx_buf; 812 + u8 data; 813 + 814 + rspi_rz_receive_init(rspi); 815 + 816 + while (remain > 0) { 817 + data = tx_buf ? *tx_buf++ : DUMMY_DATA; 818 + ret = rspi_data_out_in(rspi, data); 819 + if (ret < 0) 820 + return ret; 821 + if (rx_buf) 822 + *rx_buf++ = ret; 823 + remain--; 824 + } 825 + 826 + /* Wait for the last transmission */ 827 + rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 828 + 829 + return 0; 830 + } 831 + 832 + static int rspi_rz_transfer_one(struct spi_master *master, 833 + struct spi_device *spi, 834 + struct spi_transfer *xfer) 835 + { 836 + struct rspi_data *rspi = spi_master_get_devdata(master); 837 + 838 + return rspi_rz_transfer_out_in(rspi, xfer); 839 + } 840 + 841 + static int qspi_transfer_out_in(struct rspi_data *rspi, 842 + struct spi_transfer *xfer) 843 + { 844 + int remain = xfer->len, ret; 845 + const u8 *tx_buf = xfer->tx_buf; 846 + u8 *rx_buf = xfer->rx_buf; 847 + u8 data; 848 + 849 + qspi_receive_init(rspi); 850 + 851 + while (remain > 0) { 852 + data = tx_buf ? *tx_buf++ : DUMMY_DATA; 853 + ret = rspi_data_out_in(rspi, data); 854 + if (ret < 0) 855 + return ret; 856 + if (rx_buf) 857 + *rx_buf++ = ret; 858 + remain--; 859 + } 860 + 861 + /* Wait for the last transmission */ 862 + rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 863 + 864 + return 0; 865 + } 866 + 867 + static int qspi_transfer_out(struct rspi_data *rspi, struct spi_transfer *xfer) 868 + { 869 + const u8 *buf = xfer->tx_buf; 870 + unsigned int i; 871 + int ret; 872 + 873 + for (i = 0; i < xfer->len; i++) { 874 + ret = rspi_data_out(rspi, *buf++); 875 + if (ret < 0) 876 + return ret; 877 + } 878 + 879 + /* Wait for the last transmission */ 880 + rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE); 881 + 882 + return 0; 883 + } 884 + 885 + static int qspi_transfer_in(struct rspi_data *rspi, struct spi_transfer *xfer) 886 + { 887 + u8 *buf = xfer->rx_buf; 888 + unsigned int i; 889 + int ret; 890 + 891 + for (i = 0; i < xfer->len; i++) { 892 + ret = rspi_data_in(rspi); 893 + if (ret < 0) 894 + return ret; 895 + *buf++ = ret; 896 + } 897 + 898 + return 0; 899 + } 900 + 901 + static int qspi_transfer_one(struct spi_master *master, struct spi_device *spi, 902 + struct spi_transfer *xfer) 903 + { 904 + struct rspi_data *rspi = spi_master_get_devdata(master); 905 + 906 + if (spi->mode & SPI_LOOP) { 907 + return qspi_transfer_out_in(rspi, xfer); 908 + } else if (xfer->tx_buf && xfer->tx_nbits > SPI_NBITS_SINGLE) { 909 + /* Quad or Dual SPI Write */ 910 + return qspi_transfer_out(rspi, xfer); 911 + } else if (xfer->rx_buf && xfer->rx_nbits > SPI_NBITS_SINGLE) { 912 + /* Quad or Dual SPI Read */ 913 + return qspi_transfer_in(rspi, xfer); 914 + } else { 915 + /* Single SPI Transfer */ 916 + return qspi_transfer_out_in(rspi, xfer); 917 + } 756 918 } 757 919 758 920 static int rspi_setup(struct spi_device *spi) ··· 886 810 if (spi->mode & SPI_CPHA) 887 811 rspi->spcmd |= SPCMD_CPHA; 888 812 813 + /* CMOS output mode and MOSI signal from previous transfer */ 814 + rspi->sppcr = 0; 815 + if (spi->mode & SPI_LOOP) 816 + rspi->sppcr |= SPPCR_SPLP; 817 + 889 818 set_config_register(rspi, 8); 890 819 891 820 return 0; 892 821 } 893 822 894 - static int rspi_transfer(struct spi_device *spi, struct spi_message *mesg) 823 + static u16 qspi_transfer_mode(const struct spi_transfer *xfer) 895 824 { 896 - struct rspi_data *rspi = spi_master_get_devdata(spi->master); 897 - unsigned long flags; 898 - 899 - mesg->actual_length = 0; 900 - mesg->status = -EINPROGRESS; 901 - 902 - spin_lock_irqsave(&rspi->lock, flags); 903 - list_add_tail(&mesg->queue, &rspi->queue); 904 - schedule_work(&rspi->ws); 905 - spin_unlock_irqrestore(&rspi->lock, flags); 825 + if (xfer->tx_buf) 826 + switch (xfer->tx_nbits) { 827 + case SPI_NBITS_QUAD: 828 + return SPCMD_SPIMOD_QUAD; 829 + case SPI_NBITS_DUAL: 830 + return SPCMD_SPIMOD_DUAL; 831 + default: 832 + return 0; 833 + } 834 + if (xfer->rx_buf) 835 + switch (xfer->rx_nbits) { 836 + case SPI_NBITS_QUAD: 837 + return SPCMD_SPIMOD_QUAD | SPCMD_SPRW; 838 + case SPI_NBITS_DUAL: 839 + return SPCMD_SPIMOD_DUAL | SPCMD_SPRW; 840 + default: 841 + return 0; 842 + } 906 843 907 844 return 0; 908 845 } 909 846 910 - static void rspi_cleanup(struct spi_device *spi) 847 + static int qspi_setup_sequencer(struct rspi_data *rspi, 848 + const struct spi_message *msg) 911 849 { 850 + const struct spi_transfer *xfer; 851 + unsigned int i = 0, len = 0; 852 + u16 current_mode = 0xffff, mode; 853 + 854 + list_for_each_entry(xfer, &msg->transfers, transfer_list) { 855 + mode = qspi_transfer_mode(xfer); 856 + if (mode == current_mode) { 857 + len += xfer->len; 858 + continue; 859 + } 860 + 861 + /* Transfer mode change */ 862 + if (i) { 863 + /* Set transfer data length of previous transfer */ 864 + rspi_write32(rspi, len, QSPI_SPBMUL(i - 1)); 865 + } 866 + 867 + if (i >= QSPI_NUM_SPCMD) { 868 + dev_err(&msg->spi->dev, 869 + "Too many different transfer modes"); 870 + return -EINVAL; 871 + } 872 + 873 + /* Program transfer mode for this transfer */ 874 + rspi_write16(rspi, rspi->spcmd | mode, RSPI_SPCMD(i)); 875 + current_mode = mode; 876 + len = xfer->len; 877 + i++; 878 + } 879 + if (i) { 880 + /* Set final transfer data length and sequence length */ 881 + rspi_write32(rspi, len, QSPI_SPBMUL(i - 1)); 882 + rspi_write8(rspi, i - 1, RSPI_SPSCR); 883 + } 884 + 885 + return 0; 912 886 } 913 887 914 - static irqreturn_t rspi_irq(int irq, void *_sr) 888 + static int rspi_prepare_message(struct spi_master *master, 889 + struct spi_message *msg) 890 + { 891 + struct rspi_data *rspi = spi_master_get_devdata(master); 892 + int ret; 893 + 894 + if (msg->spi->mode & 895 + (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) { 896 + /* Setup sequencer for messages with multiple transfer modes */ 897 + ret = qspi_setup_sequencer(rspi, msg); 898 + if (ret < 0) 899 + return ret; 900 + } 901 + 902 + /* Enable SPI function in master mode */ 903 + rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_SPE, RSPI_SPCR); 904 + return 0; 905 + } 906 + 907 + static int rspi_unprepare_message(struct spi_master *master, 908 + struct spi_message *msg) 909 + { 910 + struct rspi_data *rspi = spi_master_get_devdata(master); 911 + 912 + /* Disable SPI function */ 913 + rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_SPE, RSPI_SPCR); 914 + 915 + /* Reset sequencer for Single SPI Transfers */ 916 + rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 917 + rspi_write8(rspi, 0, RSPI_SPSCR); 918 + return 0; 919 + } 920 + 921 + static irqreturn_t rspi_irq_mux(int irq, void *_sr) 915 922 { 916 923 struct rspi_data *rspi = _sr; 917 924 u8 spsr; ··· 1014 855 } 1015 856 1016 857 return ret; 858 + } 859 + 860 + static irqreturn_t rspi_irq_rx(int irq, void *_sr) 861 + { 862 + struct rspi_data *rspi = _sr; 863 + u8 spsr; 864 + 865 + rspi->spsr = spsr = rspi_read8(rspi, RSPI_SPSR); 866 + if (spsr & SPSR_SPRF) { 867 + rspi_disable_irq(rspi, SPCR_SPRIE); 868 + wake_up(&rspi->wait); 869 + return IRQ_HANDLED; 870 + } 871 + 872 + return 0; 873 + } 874 + 875 + static irqreturn_t rspi_irq_tx(int irq, void *_sr) 876 + { 877 + struct rspi_data *rspi = _sr; 878 + u8 spsr; 879 + 880 + rspi->spsr = spsr = rspi_read8(rspi, RSPI_SPSR); 881 + if (spsr & SPSR_SPTEF) { 882 + rspi_disable_irq(rspi, SPCR_SPTIE); 883 + wake_up(&rspi->wait); 884 + return IRQ_HANDLED; 885 + } 886 + 887 + return 0; 1017 888 } 1018 889 1019 890 static int rspi_request_dma(struct rspi_data *rspi, ··· 1112 923 struct rspi_data *rspi = platform_get_drvdata(pdev); 1113 924 1114 925 rspi_release_dma(rspi); 1115 - clk_disable(rspi->clk); 926 + pm_runtime_disable(&pdev->dev); 1116 927 1117 928 return 0; 929 + } 930 + 931 + static const struct spi_ops rspi_ops = { 932 + .set_config_register = rspi_set_config_register, 933 + .transfer_one = rspi_transfer_one, 934 + .mode_bits = SPI_CPHA | SPI_CPOL | SPI_LOOP, 935 + }; 936 + 937 + static const struct spi_ops rspi_rz_ops = { 938 + .set_config_register = rspi_rz_set_config_register, 939 + .transfer_one = rspi_rz_transfer_one, 940 + .mode_bits = SPI_CPHA | SPI_CPOL | SPI_LOOP, 941 + }; 942 + 943 + static const struct spi_ops qspi_ops = { 944 + .set_config_register = qspi_set_config_register, 945 + .transfer_one = qspi_transfer_one, 946 + .mode_bits = SPI_CPHA | SPI_CPOL | SPI_LOOP | 947 + SPI_TX_DUAL | SPI_TX_QUAD | 948 + SPI_RX_DUAL | SPI_RX_QUAD, 949 + }; 950 + 951 + #ifdef CONFIG_OF 952 + static const struct of_device_id rspi_of_match[] = { 953 + /* RSPI on legacy SH */ 954 + { .compatible = "renesas,rspi", .data = &rspi_ops }, 955 + /* RSPI on RZ/A1H */ 956 + { .compatible = "renesas,rspi-rz", .data = &rspi_rz_ops }, 957 + /* QSPI on R-Car Gen2 */ 958 + { .compatible = "renesas,qspi", .data = &qspi_ops }, 959 + { /* sentinel */ } 960 + }; 961 + 962 + MODULE_DEVICE_TABLE(of, rspi_of_match); 963 + 964 + static int rspi_parse_dt(struct device *dev, struct spi_master *master) 965 + { 966 + u32 num_cs; 967 + int error; 968 + 969 + /* Parse DT properties */ 970 + error = of_property_read_u32(dev->of_node, "num-cs", &num_cs); 971 + if (error) { 972 + dev_err(dev, "of_property_read_u32 num-cs failed %d\n", error); 973 + return error; 974 + } 975 + 976 + master->num_chipselect = num_cs; 977 + return 0; 978 + } 979 + #else 980 + #define rspi_of_match NULL 981 + static inline int rspi_parse_dt(struct device *dev, struct spi_master *master) 982 + { 983 + return -EINVAL; 984 + } 985 + #endif /* CONFIG_OF */ 986 + 987 + static int rspi_request_irq(struct device *dev, unsigned int irq, 988 + irq_handler_t handler, const char *suffix, 989 + void *dev_id) 990 + { 991 + const char *base = dev_name(dev); 992 + size_t len = strlen(base) + strlen(suffix) + 2; 993 + char *name = devm_kzalloc(dev, len, GFP_KERNEL); 994 + if (!name) 995 + return -ENOMEM; 996 + snprintf(name, len, "%s:%s", base, suffix); 997 + return devm_request_irq(dev, irq, handler, 0, name, dev_id); 1118 998 } 1119 999 1120 1000 static int rspi_probe(struct platform_device *pdev) ··· 1191 933 struct resource *res; 1192 934 struct spi_master *master; 1193 935 struct rspi_data *rspi; 1194 - int ret, irq; 1195 - char clk_name[16]; 1196 - const struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev); 936 + int ret; 937 + const struct of_device_id *of_id; 938 + const struct rspi_plat_data *rspi_pd; 1197 939 const struct spi_ops *ops; 1198 - const struct platform_device_id *id_entry = pdev->id_entry; 1199 - 1200 - ops = (struct spi_ops *)id_entry->driver_data; 1201 - /* ops parameter check */ 1202 - if (!ops->set_config_register) { 1203 - dev_err(&pdev->dev, "there is no set_config_register\n"); 1204 - return -ENODEV; 1205 - } 1206 - 1207 - irq = platform_get_irq(pdev, 0); 1208 - if (irq < 0) { 1209 - dev_err(&pdev->dev, "platform_get_irq error\n"); 1210 - return -ENODEV; 1211 - } 1212 940 1213 941 master = spi_alloc_master(&pdev->dev, sizeof(struct rspi_data)); 1214 942 if (master == NULL) { 1215 943 dev_err(&pdev->dev, "spi_alloc_master error.\n"); 1216 944 return -ENOMEM; 945 + } 946 + 947 + of_id = of_match_device(rspi_of_match, &pdev->dev); 948 + if (of_id) { 949 + ops = of_id->data; 950 + ret = rspi_parse_dt(&pdev->dev, master); 951 + if (ret) 952 + goto error1; 953 + } else { 954 + ops = (struct spi_ops *)pdev->id_entry->driver_data; 955 + rspi_pd = dev_get_platdata(&pdev->dev); 956 + if (rspi_pd && rspi_pd->num_chipselect) 957 + master->num_chipselect = rspi_pd->num_chipselect; 958 + else 959 + master->num_chipselect = 2; /* default */ 960 + }; 961 + 962 + /* ops parameter check */ 963 + if (!ops->set_config_register) { 964 + dev_err(&pdev->dev, "there is no set_config_register\n"); 965 + ret = -ENODEV; 966 + goto error1; 1217 967 } 1218 968 1219 969 rspi = spi_master_get_devdata(master); ··· 1236 970 goto error1; 1237 971 } 1238 972 1239 - snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id); 1240 - rspi->clk = devm_clk_get(&pdev->dev, clk_name); 973 + rspi->clk = devm_clk_get(&pdev->dev, NULL); 1241 974 if (IS_ERR(rspi->clk)) { 1242 975 dev_err(&pdev->dev, "cannot get clock\n"); 1243 976 ret = PTR_ERR(rspi->clk); 1244 977 goto error1; 1245 978 } 1246 - clk_enable(rspi->clk); 1247 979 1248 - INIT_LIST_HEAD(&rspi->queue); 1249 - spin_lock_init(&rspi->lock); 1250 - INIT_WORK(&rspi->ws, rspi_work); 980 + pm_runtime_enable(&pdev->dev); 981 + 1251 982 init_waitqueue_head(&rspi->wait); 1252 - 1253 - if (rspi_pd && rspi_pd->num_chipselect) 1254 - master->num_chipselect = rspi_pd->num_chipselect; 1255 - else 1256 - master->num_chipselect = 2; /* default */ 1257 983 1258 984 master->bus_num = pdev->id; 1259 985 master->setup = rspi_setup; 1260 - master->transfer = rspi_transfer; 1261 - master->cleanup = rspi_cleanup; 1262 - master->mode_bits = SPI_CPHA | SPI_CPOL; 986 + master->auto_runtime_pm = true; 987 + master->transfer_one = ops->transfer_one; 988 + master->prepare_message = rspi_prepare_message; 989 + master->unprepare_message = rspi_unprepare_message; 990 + master->mode_bits = ops->mode_bits; 991 + master->dev.of_node = pdev->dev.of_node; 1263 992 1264 - ret = devm_request_irq(&pdev->dev, irq, rspi_irq, 0, 1265 - dev_name(&pdev->dev), rspi); 993 + ret = platform_get_irq_byname(pdev, "rx"); 994 + if (ret < 0) { 995 + ret = platform_get_irq_byname(pdev, "mux"); 996 + if (ret < 0) 997 + ret = platform_get_irq(pdev, 0); 998 + if (ret >= 0) 999 + rspi->rx_irq = rspi->tx_irq = ret; 1000 + } else { 1001 + rspi->rx_irq = ret; 1002 + ret = platform_get_irq_byname(pdev, "tx"); 1003 + if (ret >= 0) 1004 + rspi->tx_irq = ret; 1005 + } 1006 + if (ret < 0) { 1007 + dev_err(&pdev->dev, "platform_get_irq error\n"); 1008 + goto error2; 1009 + } 1010 + 1011 + if (rspi->rx_irq == rspi->tx_irq) { 1012 + /* Single multiplexed interrupt */ 1013 + ret = rspi_request_irq(&pdev->dev, rspi->rx_irq, rspi_irq_mux, 1014 + "mux", rspi); 1015 + } else { 1016 + /* Multi-interrupt mode, only SPRI and SPTI are used */ 1017 + ret = rspi_request_irq(&pdev->dev, rspi->rx_irq, rspi_irq_rx, 1018 + "rx", rspi); 1019 + if (!ret) 1020 + ret = rspi_request_irq(&pdev->dev, rspi->tx_irq, 1021 + rspi_irq_tx, "tx", rspi); 1022 + } 1266 1023 if (ret < 0) { 1267 1024 dev_err(&pdev->dev, "request_irq error\n"); 1268 1025 goto error2; 1269 1026 } 1270 1027 1271 - rspi->irq = irq; 1272 1028 ret = rspi_request_dma(rspi, pdev); 1273 1029 if (ret < 0) { 1274 1030 dev_err(&pdev->dev, "rspi_request_dma failed.\n"); ··· 1310 1022 error3: 1311 1023 rspi_release_dma(rspi); 1312 1024 error2: 1313 - clk_disable(rspi->clk); 1025 + pm_runtime_disable(&pdev->dev); 1314 1026 error1: 1315 1027 spi_master_put(master); 1316 1028 1317 1029 return ret; 1318 1030 } 1319 1031 1320 - static struct spi_ops rspi_ops = { 1321 - .set_config_register = rspi_set_config_register, 1322 - .send_pio = rspi_send_pio, 1323 - .receive_pio = rspi_receive_pio, 1324 - }; 1325 - 1326 - static struct spi_ops qspi_ops = { 1327 - .set_config_register = qspi_set_config_register, 1328 - .send_pio = qspi_send_pio, 1329 - .receive_pio = qspi_receive_pio, 1330 - }; 1331 - 1332 1032 static struct platform_device_id spi_driver_ids[] = { 1333 1033 { "rspi", (kernel_ulong_t)&rspi_ops }, 1034 + { "rspi-rz", (kernel_ulong_t)&rspi_rz_ops }, 1334 1035 { "qspi", (kernel_ulong_t)&qspi_ops }, 1335 1036 {}, 1336 1037 }; ··· 1333 1056 .driver = { 1334 1057 .name = "renesas_spi", 1335 1058 .owner = THIS_MODULE, 1059 + .of_match_table = of_match_ptr(rspi_of_match), 1336 1060 }, 1337 1061 }; 1338 1062 module_platform_driver(rspi_driver);
+7 -11
drivers/spi/spi-s3c24xx.c
··· 122 122 { 123 123 struct s3c24xx_spi *hw = to_hw(spi); 124 124 struct s3c24xx_spi_devstate *cs = spi->controller_state; 125 - unsigned int bpw; 126 125 unsigned int hz; 127 126 unsigned int div; 128 127 unsigned long clk; 129 128 130 - bpw = t ? t->bits_per_word : spi->bits_per_word; 131 129 hz = t ? t->speed_hz : spi->max_speed_hz; 132 - 133 - if (!bpw) 134 - bpw = 8; 135 130 136 131 if (!hz) 137 132 hz = spi->max_speed_hz; 138 - 139 - if (bpw != 8) { 140 - dev_err(&spi->dev, "invalid bits-per-word (%d)\n", bpw); 141 - return -EINVAL; 142 - } 143 133 144 134 if (spi->mode != cs->mode) { 145 135 u8 spcon = SPCON_DEFAULT | S3C2410_SPCON_ENSCK; ··· 533 543 534 544 master->num_chipselect = hw->pdata->num_cs; 535 545 master->bus_num = pdata->bus_num; 546 + master->bits_per_word_mask = SPI_BPW_MASK(8); 536 547 537 548 /* setup the state for the bitbang driver */ 538 549 ··· 633 642 static int s3c24xx_spi_suspend(struct device *dev) 634 643 { 635 644 struct s3c24xx_spi *hw = dev_get_drvdata(dev); 645 + int ret; 646 + 647 + ret = spi_master_suspend(hw->master); 648 + if (ret) 649 + return ret; 636 650 637 651 if (hw->pdata && hw->pdata->gpio_setup) 638 652 hw->pdata->gpio_setup(hw->pdata, 0); ··· 651 655 struct s3c24xx_spi *hw = dev_get_drvdata(dev); 652 656 653 657 s3c24xx_spi_initialsetup(hw); 654 - return 0; 658 + return spi_master_resume(hw->master); 655 659 } 656 660 657 661 static const struct dev_pm_ops s3c24xx_spi_pmops = {
+4
include/linux/pm_runtime.h
··· 26 26 #ifdef CONFIG_PM 27 27 extern int pm_generic_runtime_suspend(struct device *dev); 28 28 extern int pm_generic_runtime_resume(struct device *dev); 29 + extern int pm_runtime_force_suspend(struct device *dev); 30 + extern int pm_runtime_force_resume(struct device *dev); 29 31 #else 30 32 static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } 31 33 static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } 34 + static inline int pm_runtime_force_suspend(struct device *dev) { return 0; } 35 + static inline int pm_runtime_force_resume(struct device *dev) { return 0; } 32 36 #endif 33 37 34 38 #ifdef CONFIG_PM_RUNTIME