commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=c3028c1ca58c0dcfd646ab69cca3473703fcda44
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

clk_get() might sleep so we can't use it in softirq context.
We can get system clk1 at probe process.

Signed-off-by: Scott Jiang <[email protected]>
---
 drivers/spi/spi-bfin6xx.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/spi/spi-bfin6xx.c b/drivers/spi/spi-bfin6xx.c
index 25b99a0..d75a698 100644
--- a/drivers/spi/spi-bfin6xx.c
+++ b/drivers/spi/spi-bfin6xx.c
@@ -114,10 +114,10 @@ static void bfin_spi_disable(struct bfin_spi_master *drv_data)
 	bfin_write_and(&drv_data->regs->control, ~SPI_CTL_EN);
 }
 
+static unsigned long sclk;
 /* Caculate the SPI_CLOCK register value based on input HZ */
 static u32 hz_to_spi_clock(u32 speed_hz)
 {
-	u_long sclk = get_sclk1();
 	u32 spi_clock = sclk / speed_hz;
 
 	if (spi_clock)
@@ -813,6 +813,12 @@ static int bfin_spi_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}
 
+	sclk = get_sclk1();
+	if (!sclk) {
+		dev_err(dev, "can not get sclk1\n");
+		return -ENXIO;
+	}
+
 	/* get register base and tx/rx dma */
 	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!mem) {
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to