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/s3c64xx', 'spi/topic/ti-qspi' and 'spi/topic/txx9' into spi-next

+53 -80
+31 -15
drivers/spi/spi-s3c64xx.c
··· 32 32 #define MAX_SPI_PORTS 6 33 33 #define S3C64XX_SPI_QUIRK_POLL (1 << 0) 34 34 #define S3C64XX_SPI_QUIRK_CS_AUTO (1 << 1) 35 + #define AUTOSUSPEND_TIMEOUT 2000 35 36 36 37 /* Registers and bit-fields */ 37 38 ··· 683 682 684 683 /* Only BPW and Speed may change across transfers */ 685 684 bpw = xfer->bits_per_word; 686 - speed = xfer->speed_hz ? : spi->max_speed_hz; 685 + speed = xfer->speed_hz; 687 686 688 687 if (bpw != sdd->cur_bpw || speed != sdd->cur_speed) { 689 688 sdd->cur_bpw = bpw; ··· 860 859 } 861 860 } 862 861 863 - pm_runtime_put(&sdd->pdev->dev); 862 + pm_runtime_mark_last_busy(&sdd->pdev->dev); 863 + pm_runtime_put_autosuspend(&sdd->pdev->dev); 864 864 if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) 865 865 writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd->regs + S3C64XX_SPI_SLAVE_SEL); 866 866 return 0; 867 867 868 868 setup_exit: 869 - pm_runtime_put(&sdd->pdev->dev); 869 + pm_runtime_mark_last_busy(&sdd->pdev->dev); 870 + pm_runtime_put_autosuspend(&sdd->pdev->dev); 870 871 /* setup() returns with device de-selected */ 871 872 if (!(sdd->port_conf->quirks & S3C64XX_SPI_QUIRK_CS_AUTO)) 872 873 writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd->regs + S3C64XX_SPI_SLAVE_SEL); ··· 1165 1162 goto err2; 1166 1163 } 1167 1164 1165 + pm_runtime_set_autosuspend_delay(&pdev->dev, AUTOSUSPEND_TIMEOUT); 1166 + pm_runtime_use_autosuspend(&pdev->dev); 1167 + pm_runtime_set_active(&pdev->dev); 1168 + pm_runtime_enable(&pdev->dev); 1169 + pm_runtime_get_sync(&pdev->dev); 1170 + 1168 1171 /* Setup Deufult Mode */ 1169 1172 s3c64xx_spi_hwinit(sdd, sdd->port_id); 1170 1173 ··· 1189 1180 S3C64XX_SPI_INT_TX_OVERRUN_EN | S3C64XX_SPI_INT_TX_UNDERRUN_EN, 1190 1181 sdd->regs + S3C64XX_SPI_INT_EN); 1191 1182 1192 - pm_runtime_set_active(&pdev->dev); 1193 - pm_runtime_enable(&pdev->dev); 1194 - 1195 1183 ret = devm_spi_register_master(&pdev->dev, master); 1196 1184 if (ret != 0) { 1197 1185 dev_err(&pdev->dev, "cannot register SPI master: %d\n", ret); ··· 1201 1195 mem_res, (FIFO_LVL_MASK(sdd) >> 1) + 1, 1202 1196 sdd->rx_dma.dmach, sdd->tx_dma.dmach); 1203 1197 1198 + pm_runtime_mark_last_busy(&pdev->dev); 1199 + pm_runtime_put_autosuspend(&pdev->dev); 1200 + 1204 1201 return 0; 1205 1202 1206 1203 err3: 1204 + pm_runtime_put_noidle(&pdev->dev); 1205 + pm_runtime_disable(&pdev->dev); 1206 + pm_runtime_set_suspended(&pdev->dev); 1207 + 1207 1208 clk_disable_unprepare(sdd->src_clk); 1208 1209 err2: 1209 1210 clk_disable_unprepare(sdd->clk); ··· 1225 1212 struct spi_master *master = spi_master_get(platform_get_drvdata(pdev)); 1226 1213 struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); 1227 1214 1228 - pm_runtime_disable(&pdev->dev); 1215 + pm_runtime_get_sync(&pdev->dev); 1229 1216 1230 1217 writel(0, sdd->regs + S3C64XX_SPI_INT_EN); 1231 1218 1232 1219 clk_disable_unprepare(sdd->src_clk); 1233 1220 1234 1221 clk_disable_unprepare(sdd->clk); 1222 + 1223 + pm_runtime_put_noidle(&pdev->dev); 1224 + pm_runtime_disable(&pdev->dev); 1225 + pm_runtime_set_suspended(&pdev->dev); 1235 1226 1236 1227 return 0; 1237 1228 } ··· 1250 1233 if (ret) 1251 1234 return ret; 1252 1235 1253 - if (!pm_runtime_suspended(dev)) { 1254 - clk_disable_unprepare(sdd->clk); 1255 - clk_disable_unprepare(sdd->src_clk); 1256 - } 1236 + ret = pm_runtime_force_suspend(dev); 1237 + if (ret < 0) 1238 + return ret; 1257 1239 1258 1240 sdd->cur_speed = 0; /* Output Clock is stopped */ 1259 1241 ··· 1264 1248 struct spi_master *master = dev_get_drvdata(dev); 1265 1249 struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); 1266 1250 struct s3c64xx_spi_info *sci = sdd->cntrlr_info; 1251 + int ret; 1267 1252 1268 1253 if (sci->cfg_gpio) 1269 1254 sci->cfg_gpio(); 1270 1255 1271 - if (!pm_runtime_suspended(dev)) { 1272 - clk_prepare_enable(sdd->src_clk); 1273 - clk_prepare_enable(sdd->clk); 1274 - } 1256 + ret = pm_runtime_force_resume(dev); 1257 + if (ret < 0) 1258 + return ret; 1275 1259 1276 1260 s3c64xx_spi_hwinit(sdd, sdd->port_id); 1277 1261
+21 -64
drivers/spi/spi-ti-qspi.c
··· 39 39 }; 40 40 41 41 struct ti_qspi { 42 - struct completion transfer_complete; 43 - 44 42 /* list synchronization */ 45 43 struct mutex list_lock; 46 44 ··· 60 62 61 63 #define QSPI_PID (0x0) 62 64 #define QSPI_SYSCONFIG (0x10) 63 - #define QSPI_INTR_STATUS_RAW_SET (0x20) 64 - #define QSPI_INTR_STATUS_ENABLED_CLEAR (0x24) 65 - #define QSPI_INTR_ENABLE_SET_REG (0x28) 66 - #define QSPI_INTR_ENABLE_CLEAR_REG (0x2c) 67 65 #define QSPI_SPI_CLOCK_CNTRL_REG (0x40) 68 66 #define QSPI_SPI_DC_REG (0x44) 69 67 #define QSPI_SPI_CMD_REG (0x48) ··· 91 97 #define QSPI_RD_DUAL (3 << 16) 92 98 #define QSPI_RD_QUAD (7 << 16) 93 99 #define QSPI_INVAL (4 << 16) 94 - #define QSPI_WC_CMD_INT_EN (1 << 14) 95 100 #define QSPI_FLEN(n) ((n - 1) << 0) 96 101 #define QSPI_WLEN_MAX_BITS 128 97 102 #define QSPI_WLEN_MAX_BYTES 16 ··· 98 105 /* STATUS REGISTER */ 99 106 #define BUSY 0x01 100 107 #define WC 0x02 101 - 102 - /* INTERRUPT REGISTER */ 103 - #define QSPI_WC_INT_EN (1 << 1) 104 - #define QSPI_WC_INT_DISABLE (1 << 1) 105 108 106 109 /* Device Control */ 107 110 #define QSPI_DD(m, n) (m << (3 + n * 8)) ··· 206 217 return stat & BUSY; 207 218 } 208 219 220 + static inline int ti_qspi_poll_wc(struct ti_qspi *qspi) 221 + { 222 + u32 stat; 223 + unsigned long timeout = jiffies + QSPI_COMPLETION_TIMEOUT; 224 + 225 + do { 226 + stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); 227 + if (stat & WC) 228 + return 0; 229 + cpu_relax(); 230 + } while (time_after(timeout, jiffies)); 231 + 232 + stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); 233 + if (stat & WC) 234 + return 0; 235 + return -ETIMEDOUT; 236 + } 237 + 209 238 static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t) 210 239 { 211 240 int wlen, count, xfer_len; ··· 282 275 } 283 276 284 277 ti_qspi_write(qspi, cmd, QSPI_SPI_CMD_REG); 285 - if (!wait_for_completion_timeout(&qspi->transfer_complete, 286 - QSPI_COMPLETION_TIMEOUT)) { 278 + if (ti_qspi_poll_wc(qspi)) { 287 279 dev_err(qspi->dev, "write timed out\n"); 288 280 return -ETIMEDOUT; 289 281 } ··· 321 315 return -EBUSY; 322 316 323 317 ti_qspi_write(qspi, cmd, QSPI_SPI_CMD_REG); 324 - if (!wait_for_completion_timeout(&qspi->transfer_complete, 325 - QSPI_COMPLETION_TIMEOUT)) { 318 + if (ti_qspi_poll_wc(qspi)) { 326 319 dev_err(qspi->dev, "read timed out\n"); 327 320 return -ETIMEDOUT; 328 321 } ··· 393 388 qspi->cmd = 0; 394 389 qspi->cmd |= QSPI_EN_CS(spi->chip_select); 395 390 qspi->cmd |= QSPI_FLEN(frame_length); 396 - qspi->cmd |= QSPI_WC_CMD_INT_EN; 397 391 398 - ti_qspi_write(qspi, QSPI_WC_INT_EN, QSPI_INTR_ENABLE_SET_REG); 399 392 ti_qspi_write(qspi, qspi->dc, QSPI_SPI_DC_REG); 400 393 401 394 mutex_lock(&qspi->list_lock); ··· 418 415 spi_finalize_current_message(master); 419 416 420 417 return status; 421 - } 422 - 423 - static irqreturn_t ti_qspi_isr(int irq, void *dev_id) 424 - { 425 - struct ti_qspi *qspi = dev_id; 426 - u16 int_stat; 427 - u32 stat; 428 - 429 - irqreturn_t ret = IRQ_HANDLED; 430 - 431 - int_stat = ti_qspi_read(qspi, QSPI_INTR_STATUS_ENABLED_CLEAR); 432 - stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); 433 - 434 - if (!int_stat) { 435 - dev_dbg(qspi->dev, "No IRQ triggered\n"); 436 - ret = IRQ_NONE; 437 - goto out; 438 - } 439 - 440 - ti_qspi_write(qspi, QSPI_WC_INT_DISABLE, 441 - QSPI_INTR_STATUS_ENABLED_CLEAR); 442 - if (stat & WC) 443 - complete(&qspi->transfer_complete); 444 - out: 445 - return ret; 446 418 } 447 419 448 420 static int ti_qspi_runtime_resume(struct device *dev) ··· 528 550 } 529 551 } 530 552 531 - ret = devm_request_irq(&pdev->dev, irq, ti_qspi_isr, 0, 532 - dev_name(&pdev->dev), qspi); 533 - if (ret < 0) { 534 - dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n", 535 - irq); 536 - goto free_master; 537 - } 538 - 539 553 qspi->fclk = devm_clk_get(&pdev->dev, "fck"); 540 554 if (IS_ERR(qspi->fclk)) { 541 555 ret = PTR_ERR(qspi->fclk); 542 556 dev_err(&pdev->dev, "could not get clk: %d\n", ret); 543 557 } 544 - 545 - init_completion(&qspi->transfer_complete); 546 558 547 559 pm_runtime_use_autosuspend(&pdev->dev); 548 560 pm_runtime_set_autosuspend_delay(&pdev->dev, QSPI_AUTOSUSPEND_TIMEOUT); ··· 554 586 555 587 static int ti_qspi_remove(struct platform_device *pdev) 556 588 { 557 - struct ti_qspi *qspi = platform_get_drvdata(pdev); 558 - int ret; 559 - 560 - ret = pm_runtime_get_sync(qspi->dev); 561 - if (ret < 0) { 562 - dev_err(qspi->dev, "pm_runtime_get_sync() failed\n"); 563 - return ret; 564 - } 565 - 566 - ti_qspi_write(qspi, QSPI_WC_INT_DISABLE, QSPI_INTR_ENABLE_CLEAR_REG); 567 - 568 - pm_runtime_put(qspi->dev); 589 + pm_runtime_put_sync(&pdev->dev); 569 590 pm_runtime_disable(&pdev->dev); 570 591 571 592 return 0;
+1 -1
drivers/spi/spi-txx9.c
··· 181 181 u32 data; 182 182 unsigned int len = t->len; 183 183 unsigned int wsize; 184 - u32 speed_hz = t->speed_hz ? : spi->max_speed_hz; 184 + u32 speed_hz = t->speed_hz; 185 185 u8 bits_per_word = t->bits_per_word; 186 186 187 187 wsize = bits_per_word >> 3; /* in bytes */