30
30
#include <linux/delay.h>
31
31
#include <linux/gpio.h>
32
32
#include <linux/slab.h>
33
+ #include <linux/clk.h>
33
34
34
35
#include <asm/io.h>
35
36
#include <asm/irq.h>
@@ -114,6 +115,9 @@ struct driver_data {
114
115
u32 clear_sr ;
115
116
u32 mask_sr ;
116
117
118
+ /* Maximun clock rate */
119
+ unsigned long max_clk_rate ;
120
+
117
121
/* Message Transfer pump */
118
122
struct tasklet_struct pump_transfers ;
119
123
@@ -891,9 +895,12 @@ static int set_dma_burst_and_threshold(struct chip_data *chip,
891
895
return retval ;
892
896
}
893
897
894
- static unsigned int ssp_get_clk_div (struct ssp_device * ssp , int rate )
898
+ static unsigned int ssp_get_clk_div (struct driver_data * drv_data , int rate )
895
899
{
896
- unsigned long ssp_clk = clk_get_rate (ssp -> clk );
900
+ unsigned long ssp_clk = drv_data -> max_clk_rate ;
901
+ const struct ssp_device * ssp = drv_data -> ssp ;
902
+
903
+ rate = min_t (int , ssp_clk , rate );
897
904
898
905
if (ssp -> type == PXA25x_SSP || ssp -> type == CE4100_SSP )
899
906
return ((ssp_clk / (2 * rate ) - 1 ) & 0xff ) << 8 ;
@@ -908,7 +915,6 @@ static void pump_transfers(unsigned long data)
908
915
struct spi_transfer * transfer = NULL ;
909
916
struct spi_transfer * previous = NULL ;
910
917
struct chip_data * chip = NULL ;
911
- struct ssp_device * ssp = drv_data -> ssp ;
912
918
void __iomem * reg = drv_data -> ioaddr ;
913
919
u32 clk_div = 0 ;
914
920
u8 bits = 0 ;
@@ -1005,7 +1011,7 @@ static void pump_transfers(unsigned long data)
1005
1011
if (transfer -> bits_per_word )
1006
1012
bits = transfer -> bits_per_word ;
1007
1013
1008
- clk_div = ssp_get_clk_div (ssp , speed );
1014
+ clk_div = ssp_get_clk_div (drv_data , speed );
1009
1015
1010
1016
if (bits <= 8 ) {
1011
1017
drv_data -> n_bytes = 1 ;
@@ -1214,7 +1220,6 @@ static int setup(struct spi_device *spi)
1214
1220
struct pxa2xx_spi_chip * chip_info = NULL ;
1215
1221
struct chip_data * chip ;
1216
1222
struct driver_data * drv_data = spi_master_get_devdata (spi -> master );
1217
- struct ssp_device * ssp = drv_data -> ssp ;
1218
1223
unsigned int clk_div ;
1219
1224
uint tx_thres = TX_THRESH_DFLT ;
1220
1225
uint rx_thres = RX_THRESH_DFLT ;
@@ -1296,7 +1301,7 @@ static int setup(struct spi_device *spi)
1296
1301
}
1297
1302
}
1298
1303
1299
- clk_div = ssp_get_clk_div (ssp , spi -> max_speed_hz );
1304
+ clk_div = ssp_get_clk_div (drv_data , spi -> max_speed_hz );
1300
1305
chip -> speed_hz = spi -> max_speed_hz ;
1301
1306
1302
1307
chip -> cr0 = clk_div
@@ -1312,12 +1317,12 @@ static int setup(struct spi_device *spi)
1312
1317
/* NOTE: PXA25x_SSP _could_ use external clocking ... */
1313
1318
if (!pxa25x_ssp_comp (drv_data ))
1314
1319
dev_dbg (& spi -> dev , "%ld Hz actual, %s\n" ,
1315
- clk_get_rate ( ssp -> clk )
1320
+ drv_data -> max_clk_rate
1316
1321
/ (1 + ((chip -> cr0 & SSCR0_SCR (0xfff )) >> 8 )),
1317
1322
chip -> enable_dma ? "DMA" : "PIO" );
1318
1323
else
1319
1324
dev_dbg (& spi -> dev , "%ld Hz actual, %s\n" ,
1320
- clk_get_rate ( ssp -> clk ) / 2
1325
+ drv_data -> max_clk_rate / 2
1321
1326
/ (1 + ((chip -> cr0 & SSCR0_SCR (0x0ff )) >> 8 )),
1322
1327
chip -> enable_dma ? "DMA" : "PIO" );
1323
1328
@@ -1470,7 +1475,9 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
1470
1475
}
1471
1476
1472
1477
/* Enable SOC clock */
1473
- clk_enable (ssp -> clk );
1478
+ clk_prepare_enable (ssp -> clk );
1479
+
1480
+ drv_data -> max_clk_rate = clk_get_rate (ssp -> clk );
1474
1481
1475
1482
/* Load default SSP configuration */
1476
1483
write_SSCR0 (0 , drv_data -> ioaddr );
@@ -1499,7 +1506,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
1499
1506
return status ;
1500
1507
1501
1508
out_error_clock_enabled :
1502
- clk_disable (ssp -> clk );
1509
+ clk_disable_unprepare (ssp -> clk );
1503
1510
1504
1511
out_error_dma_alloc :
1505
1512
if (drv_data -> tx_channel != -1 )
@@ -1527,7 +1534,7 @@ static int pxa2xx_spi_remove(struct platform_device *pdev)
1527
1534
1528
1535
/* Disable the SSP at the peripheral and SOC level */
1529
1536
write_SSCR0 (0 , drv_data -> ioaddr );
1530
- clk_disable (ssp -> clk );
1537
+ clk_disable_unprepare (ssp -> clk );
1531
1538
1532
1539
/* Release DMA */
1533
1540
if (drv_data -> master_info -> enable_dma ) {
@@ -1571,7 +1578,7 @@ static int pxa2xx_spi_suspend(struct device *dev)
1571
1578
if (status != 0 )
1572
1579
return status ;
1573
1580
write_SSCR0 (0 , drv_data -> ioaddr );
1574
- clk_disable (ssp -> clk );
1581
+ clk_disable_unprepare (ssp -> clk );
1575
1582
1576
1583
return 0 ;
1577
1584
}
@@ -1590,7 +1597,7 @@ static int pxa2xx_spi_resume(struct device *dev)
1590
1597
DRCMR_MAPVLD | drv_data -> tx_channel ;
1591
1598
1592
1599
/* Enable the SSP clock */
1593
- clk_enable (ssp -> clk );
1600
+ clk_prepare_enable (ssp -> clk );
1594
1601
1595
1602
/* Start the queue running */
1596
1603
status = spi_master_resume (drv_data -> master );
0 commit comments