18
18
#include <linux/pm_runtime.h>
19
19
#include <linux/slab.h>
20
20
#include <linux/spi/spi.h>
21
- #include <linux/spi/spi_bitbang.h>
22
21
#include <linux/types.h>
23
22
#include <linux/of.h>
24
23
#include <linux/of_device.h>
@@ -86,7 +85,7 @@ struct spi_imx_devtype_data {
86
85
};
87
86
88
87
struct spi_imx_data {
89
- struct spi_bitbang bitbang ;
88
+ struct spi_controller * controller ;
90
89
struct device * dev ;
91
90
92
91
struct completion xfer_done ;
@@ -580,7 +579,7 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,
580
579
* the SPI communication as the device on the other end would consider
581
580
* the change of SCLK polarity as a clock tick already.
582
581
*
583
- * Because spi_imx->spi_bus_clk is only set in bitbang prepare_message
582
+ * Because spi_imx->spi_bus_clk is only set in prepare_message
584
583
* callback, iterate over all the transfers in spi_message, find the
585
584
* one with lowest bus frequency, and use that bus frequency for the
586
585
* delay calculation. In case all transfers have speed_hz == 0, then
@@ -1261,7 +1260,7 @@ static int spi_imx_setupxfer(struct spi_device *spi,
1261
1260
spi_imx -> dynamic_burst = 0 ;
1262
1261
}
1263
1262
1264
- if (spi_imx_can_dma (spi_imx -> bitbang . master , spi , t ))
1263
+ if (spi_imx_can_dma (spi_imx -> controller , spi , t ))
1265
1264
spi_imx -> usedma = true;
1266
1265
else
1267
1266
spi_imx -> usedma = false;
@@ -1282,7 +1281,7 @@ static int spi_imx_setupxfer(struct spi_device *spi,
1282
1281
1283
1282
static void spi_imx_sdma_exit (struct spi_imx_data * spi_imx )
1284
1283
{
1285
- struct spi_controller * controller = spi_imx -> bitbang . master ;
1284
+ struct spi_controller * controller = spi_imx -> controller ;
1286
1285
1287
1286
if (controller -> dma_rx ) {
1288
1287
dma_release_channel (controller -> dma_rx );
@@ -1324,7 +1323,7 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
1324
1323
init_completion (& spi_imx -> dma_tx_completion );
1325
1324
controller -> can_dma = spi_imx_can_dma ;
1326
1325
controller -> max_dma_len = MAX_SDMA_BD_BYTES ;
1327
- spi_imx -> bitbang . master -> flags = SPI_CONTROLLER_MUST_RX |
1326
+ spi_imx -> controller -> flags = SPI_CONTROLLER_MUST_RX |
1328
1327
SPI_CONTROLLER_MUST_TX ;
1329
1328
1330
1329
return 0 ;
@@ -1367,7 +1366,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
1367
1366
struct dma_async_tx_descriptor * desc_tx , * desc_rx ;
1368
1367
unsigned long transfer_timeout ;
1369
1368
unsigned long timeout ;
1370
- struct spi_controller * controller = spi_imx -> bitbang . master ;
1369
+ struct spi_controller * controller = spi_imx -> controller ;
1371
1370
struct sg_table * tx = & transfer -> tx_sg , * rx = & transfer -> rx_sg ;
1372
1371
struct scatterlist * last_sg = sg_last (rx -> sgl , rx -> nents );
1373
1372
unsigned int bytes_per_word , i ;
@@ -1450,7 +1449,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
1450
1449
return - ETIMEDOUT ;
1451
1450
}
1452
1451
1453
- return transfer -> len ;
1452
+ return 0 ;
1454
1453
/* fallback to pio */
1455
1454
dma_failure_no_start :
1456
1455
transfer -> error |= SPI_TRANS_FAIL_NO_START ;
@@ -1486,14 +1485,14 @@ static int spi_imx_pio_transfer(struct spi_device *spi,
1486
1485
return - ETIMEDOUT ;
1487
1486
}
1488
1487
1489
- return transfer -> len ;
1488
+ return 0 ;
1490
1489
}
1491
1490
1492
1491
static int spi_imx_pio_transfer_slave (struct spi_device * spi ,
1493
1492
struct spi_transfer * transfer )
1494
1493
{
1495
1494
struct spi_imx_data * spi_imx = spi_controller_get_devdata (spi -> controller );
1496
- int ret = transfer -> len ;
1495
+ int ret = 0 ;
1497
1496
1498
1497
if (is_imx53_ecspi (spi_imx ) &&
1499
1498
transfer -> len > MX53_MAX_TRANSFER_BYTES ) {
@@ -1533,11 +1532,13 @@ static int spi_imx_pio_transfer_slave(struct spi_device *spi,
1533
1532
return ret ;
1534
1533
}
1535
1534
1536
- static int spi_imx_transfer (struct spi_device * spi ,
1535
+ static int spi_imx_transfer_one (struct spi_controller * controller ,
1536
+ struct spi_device * spi ,
1537
1537
struct spi_transfer * transfer )
1538
1538
{
1539
1539
struct spi_imx_data * spi_imx = spi_controller_get_devdata (spi -> controller );
1540
1540
1541
+ spi_imx_setupxfer (spi , transfer );
1541
1542
transfer -> effective_speed_hz = spi_imx -> spi_bus_clk ;
1542
1543
1543
1544
/* flush rxfifo before transfer */
@@ -1642,7 +1643,7 @@ static int spi_imx_probe(struct platform_device *pdev)
1642
1643
controller -> use_gpio_descriptors = true;
1643
1644
1644
1645
spi_imx = spi_controller_get_devdata (controller );
1645
- spi_imx -> bitbang . master = controller ;
1646
+ spi_imx -> controller = controller ;
1646
1647
spi_imx -> dev = & pdev -> dev ;
1647
1648
spi_imx -> slave_mode = slave_mode ;
1648
1649
@@ -1659,20 +1660,20 @@ static int spi_imx_probe(struct platform_device *pdev)
1659
1660
else
1660
1661
controller -> num_chipselect = 3 ;
1661
1662
1662
- spi_imx -> bitbang . setup_transfer = spi_imx_setupxfer ;
1663
- spi_imx -> bitbang . txrx_bufs = spi_imx_transfer ;
1664
- spi_imx -> bitbang . master -> setup = spi_imx_setup ;
1665
- spi_imx -> bitbang . master -> cleanup = spi_imx_cleanup ;
1666
- spi_imx -> bitbang . master -> prepare_message = spi_imx_prepare_message ;
1667
- spi_imx -> bitbang . master -> unprepare_message = spi_imx_unprepare_message ;
1668
- spi_imx -> bitbang . master -> slave_abort = spi_imx_slave_abort ;
1669
- spi_imx -> bitbang . master -> mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_NO_CS ;
1663
+ spi_imx -> controller -> transfer_one = spi_imx_transfer_one ;
1664
+ spi_imx -> controller -> setup = spi_imx_setup ;
1665
+ spi_imx -> controller -> cleanup = spi_imx_cleanup ;
1666
+ spi_imx -> controller -> prepare_message = spi_imx_prepare_message ;
1667
+ spi_imx -> controller -> unprepare_message = spi_imx_unprepare_message ;
1668
+ spi_imx -> controller -> slave_abort = spi_imx_slave_abort ;
1669
+ spi_imx -> controller -> mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_NO_CS ;
1670
+
1670
1671
if (is_imx35_cspi (spi_imx ) || is_imx51_ecspi (spi_imx ) ||
1671
1672
is_imx53_ecspi (spi_imx ))
1672
- spi_imx -> bitbang . master -> mode_bits |= SPI_LOOP | SPI_READY ;
1673
+ spi_imx -> controller -> mode_bits |= SPI_LOOP | SPI_READY ;
1673
1674
1674
1675
if (is_imx51_ecspi (spi_imx ) || is_imx53_ecspi (spi_imx ))
1675
- spi_imx -> bitbang . master -> mode_bits |= SPI_RX_CPHA_FLIP ;
1676
+ spi_imx -> controller -> mode_bits |= SPI_RX_CPHA_FLIP ;
1676
1677
1677
1678
if (is_imx51_ecspi (spi_imx ) &&
1678
1679
device_property_read_u32 (& pdev -> dev , "cs-gpios" , NULL ))
@@ -1681,7 +1682,7 @@ static int spi_imx_probe(struct platform_device *pdev)
1681
1682
* setting the burst length to the word size. This is
1682
1683
* considerably faster than manually controlling the CS.
1683
1684
*/
1684
- spi_imx -> bitbang . master -> mode_bits |= SPI_CS_WORD ;
1685
+ spi_imx -> controller -> mode_bits |= SPI_CS_WORD ;
1685
1686
1686
1687
spi_imx -> spi_drctl = spi_drctl ;
1687
1688
@@ -1754,18 +1755,18 @@ static int spi_imx_probe(struct platform_device *pdev)
1754
1755
spi_imx -> devtype_data -> intctrl (spi_imx , 0 );
1755
1756
1756
1757
controller -> dev .of_node = pdev -> dev .of_node ;
1757
- ret = spi_bitbang_start ( & spi_imx -> bitbang );
1758
+ ret = spi_register_controller ( controller );
1758
1759
if (ret ) {
1759
- dev_err_probe (& pdev -> dev , ret , "bitbang start failed\n" );
1760
- goto out_bitbang_start ;
1760
+ dev_err_probe (& pdev -> dev , ret , "register controller failed\n" );
1761
+ goto out_register_controller ;
1761
1762
}
1762
1763
1763
1764
pm_runtime_mark_last_busy (spi_imx -> dev );
1764
1765
pm_runtime_put_autosuspend (spi_imx -> dev );
1765
1766
1766
1767
return ret ;
1767
1768
1768
- out_bitbang_start :
1769
+ out_register_controller :
1769
1770
if (spi_imx -> devtype_data -> has_dmamode )
1770
1771
spi_imx_sdma_exit (spi_imx );
1771
1772
out_runtime_pm_put :
@@ -1788,7 +1789,7 @@ static int spi_imx_remove(struct platform_device *pdev)
1788
1789
struct spi_imx_data * spi_imx = spi_controller_get_devdata (controller );
1789
1790
int ret ;
1790
1791
1791
- spi_bitbang_stop ( & spi_imx -> bitbang );
1792
+ spi_unregister_controller ( controller );
1792
1793
1793
1794
ret = pm_runtime_resume_and_get (spi_imx -> dev );
1794
1795
if (ret < 0 ) {
@@ -1803,7 +1804,6 @@ static int spi_imx_remove(struct platform_device *pdev)
1803
1804
pm_runtime_disable (spi_imx -> dev );
1804
1805
1805
1806
spi_imx_sdma_exit (spi_imx );
1806
- spi_controller_put (controller );
1807
1807
1808
1808
return 0 ;
1809
1809
}
0 commit comments