spi:fix bug of initial clock division
authorLuowei <lw@rock-chips.com>
Thu, 18 Sep 2014 06:53:57 +0000 (14:53 +0800)
committerLuowei <lw@rock-chips.com>
Thu, 18 Sep 2014 06:53:57 +0000 (14:53 +0800)
drivers/spi/spi-rockchip-core.c
drivers/spi/spi-rockchip.c

index 63aacfd2f8be9e7e259eeba3fe6b927327a496a9..4626b9f00fda379ccafca0e9549d7d69fb962bdf 100755 (executable)
@@ -579,7 +579,12 @@ static void pump_transfers(unsigned long data)
        spi = message->spi;
 
        if (unlikely(!chip->clk_div))
+       {
                chip->clk_div = dws->max_freq / chip->speed_hz;
+               chip->clk_div = (chip->clk_div + 1) & 0xfffe;
+               chip->speed_hz = dws->max_freq / chip->clk_div;
+       }
+
 
        if (message->state == ERROR_STATE) {
                message->status = -EIO;
@@ -619,7 +624,6 @@ static void pump_transfers(unsigned long data)
        cr0 = chip->cr0;
 
        
-       DBG_SPI("%s:len=%d\n",__func__,dws->len);
 
        /* Handle per transfer options for bpw and speed */
        if (transfer->speed_hz) {
@@ -638,10 +642,11 @@ static void pump_transfers(unsigned long data)
                        clk_div = dws->max_freq / speed;
                        clk_div = (clk_div + 1) & 0xfffe;
 
-                       chip->speed_hz = speed;
+                       chip->speed_hz = dws->max_freq / clk_div;
                        chip->clk_div = clk_div;
                }
        }
+       DBG_SPI("%s:len=%d,clk_div=%d,speed_hz=%d\n",__func__,dws->len,chip->clk_div,chip->speed_hz);
        if (transfer->bits_per_word) {
                bits = transfer->bits_per_word;
 
index 6b04b8e0c2b6da884b55a2f28bbb27fd78dde8cf..257319be2dbe473ecd5552d34110c3b48fc3b26c 100755 (executable)
@@ -228,7 +228,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, sdd);
 
-       printk("%s:num_cs=%d,irq=%d,freq=%d ok\n",__func__, info->num_cs, irq, dws->max_freq);
+       printk("%s:num_cs=%d,bus_num=%d,irq=%d,freq=%d ok\n",__func__, info->num_cs, info->bus_num, irq, dws->max_freq);
        
        return 0;
 err_release_mem: