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

Merge tag 'spi-v3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi

Pull spi fixes from Mark Brown:
"A smattering of driver specific fixes here, including a bunch for a
long standing common pattern in the error handling paths, and a fix
for an embarrassing thinko in the new devm master registration code"

* tag 'spi-v3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
spi/pxa2xx: Restore private register bits.
spi/qspi: Fix qspi remove path.
spi/qspi: cleanup pm_runtime error check.
spi/qspi: set correct platform drvdata in ti_qspi_probe()
spi/pxa2xx: add new ACPI IDs
spi: core: invert success test in devm_spi_register_master
spi: spi-mxs: fix reference leak to master in mxs_spi_remove()
spi: bcm63xx: fix reference leak to master in bcm63xx_spi_remove()
spi: txx9: fix reference leak to master in txx9spi_remove()
spi: mpc512x: fix reference leak to master in mpc512x_psc_spi_do_remove()
spi: rspi: use platform drvdata correctly in rspi_remove()
spi: bcm2835: fix reference leak to master in bcm2835_spi_remove()

+31 -12
+1 -1
drivers/spi/spi-bcm2835.c
··· 377 377 378 378 static int bcm2835_spi_remove(struct platform_device *pdev) 379 379 { 380 - struct spi_master *master = spi_master_get(platform_get_drvdata(pdev)); 380 + struct spi_master *master = platform_get_drvdata(pdev); 381 381 struct bcm2835_spi *bs = spi_master_get_devdata(master); 382 382 383 383 free_irq(bs->irq, master);
+1 -1
drivers/spi/spi-bcm63xx.c
··· 435 435 436 436 static int bcm63xx_spi_remove(struct platform_device *pdev) 437 437 { 438 - struct spi_master *master = spi_master_get(platform_get_drvdata(pdev)); 438 + struct spi_master *master = platform_get_drvdata(pdev); 439 439 struct bcm63xx_spi *bs = spi_master_get_devdata(master); 440 440 441 441 /* reset spi block */
+1 -1
drivers/spi/spi-mpc512x-psc.c
··· 557 557 558 558 static int mpc512x_psc_spi_do_remove(struct device *dev) 559 559 { 560 - struct spi_master *master = spi_master_get(dev_get_drvdata(dev)); 560 + struct spi_master *master = dev_get_drvdata(dev); 561 561 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master); 562 562 563 563 clk_disable_unprepare(mps->clk_mclk);
+1 -1
drivers/spi/spi-mxs.c
··· 565 565 struct mxs_spi *spi; 566 566 struct mxs_ssp *ssp; 567 567 568 - master = spi_master_get(platform_get_drvdata(pdev)); 568 + master = platform_get_drvdata(pdev); 569 569 spi = spi_master_get_devdata(master); 570 570 ssp = &spi->ssp; 571 571
+5
drivers/spi/spi-pxa2xx.c
··· 1073 1073 static struct acpi_device_id pxa2xx_spi_acpi_match[] = { 1074 1074 { "INT33C0", 0 }, 1075 1075 { "INT33C1", 0 }, 1076 + { "INT3430", 0 }, 1077 + { "INT3431", 0 }, 1076 1078 { "80860F0E", 0 }, 1077 1079 { }, 1078 1080 }; ··· 1292 1290 1293 1291 /* Enable the SSP clock */ 1294 1292 clk_prepare_enable(ssp->clk); 1293 + 1294 + /* Restore LPSS private register bits */ 1295 + lpss_ssp_setup(drv_data); 1295 1296 1296 1297 /* Start the queue running */ 1297 1298 status = spi_master_resume(drv_data->master);
+1 -2
drivers/spi/spi-rspi.c
··· 885 885 886 886 static int rspi_remove(struct platform_device *pdev) 887 887 { 888 - struct rspi_data *rspi = spi_master_get(platform_get_drvdata(pdev)); 888 + struct rspi_data *rspi = platform_get_drvdata(pdev); 889 889 890 890 spi_unregister_master(rspi->master); 891 891 rspi_release_dma(rspi); 892 892 free_irq(platform_get_irq(pdev, 0), rspi); 893 893 clk_put(rspi->clk); 894 894 iounmap(rspi->addr); 895 - spi_master_put(rspi->master); 896 895 897 896 return 0; 898 897 }
+19 -4
drivers/spi/spi-ti-qspi.c
··· 161 161 qspi->spi_max_frequency, clk_div); 162 162 163 163 ret = pm_runtime_get_sync(qspi->dev); 164 - if (ret) { 164 + if (ret < 0) { 165 165 dev_err(qspi->dev, "pm_runtime_get_sync() failed\n"); 166 166 return ret; 167 167 } ··· 459 459 if (!of_property_read_u32(np, "num-cs", &num_cs)) 460 460 master->num_chipselect = num_cs; 461 461 462 - platform_set_drvdata(pdev, master); 463 - 464 462 qspi = spi_master_get_devdata(master); 465 463 qspi->master = master; 466 464 qspi->dev = &pdev->dev; 465 + platform_set_drvdata(pdev, qspi); 467 466 468 467 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 469 468 ··· 516 517 517 518 static int ti_qspi_remove(struct platform_device *pdev) 518 519 { 519 - struct ti_qspi *qspi = platform_get_drvdata(pdev); 520 + struct spi_master *master; 521 + struct ti_qspi *qspi; 522 + int ret; 523 + 524 + master = platform_get_drvdata(pdev); 525 + qspi = spi_master_get_devdata(master); 526 + 527 + ret = pm_runtime_get_sync(qspi->dev); 528 + if (ret < 0) { 529 + dev_err(qspi->dev, "pm_runtime_get_sync() failed\n"); 530 + return ret; 531 + } 520 532 521 533 ti_qspi_write(qspi, QSPI_WC_INT_DISABLE, QSPI_INTR_ENABLE_CLEAR_REG); 534 + 535 + pm_runtime_put(qspi->dev); 536 + pm_runtime_disable(&pdev->dev); 537 + 538 + spi_unregister_master(master); 522 539 523 540 return 0; 524 541 }
+1 -1
drivers/spi/spi-txx9.c
··· 425 425 426 426 static int txx9spi_remove(struct platform_device *dev) 427 427 { 428 - struct spi_master *master = spi_master_get(platform_get_drvdata(dev)); 428 + struct spi_master *master = platform_get_drvdata(dev); 429 429 struct txx9spi *c = spi_master_get_devdata(master); 430 430 431 431 destroy_workqueue(c->workqueue);
+1 -1
drivers/spi/spi.c
··· 1415 1415 return -ENOMEM; 1416 1416 1417 1417 ret = spi_register_master(master); 1418 - if (ret != 0) { 1418 + if (!ret) { 1419 1419 *ptr = master; 1420 1420 devres_add(dev, ptr); 1421 1421 } else {