MIPS: Alchemy: DB1xxx: Explicitly set 50MHz clock for I2C/SPI units.
authorManuel Lauss <manuel.lauss@gmail.com>
Wed, 20 Aug 2014 19:36:32 +0000 (21:36 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 22 Sep 2014 11:35:47 +0000 (13:35 +0200)
Add an explicit call to set the desired rate to get the correct
clock routing for the PSC clocks.  It wasn't broken before, but
now it's less affected by bootloader changes.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/7554/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/alchemy/devboards/db1300.c
arch/mips/alchemy/devboards/db1550.c

index ef93ee3f6a2c03ad6f152edbdb201c8b7a36bc30..e476ae9472b91e8dde8e9e228c518419bf873053 100644 (file)
@@ -762,9 +762,10 @@ int __init db1300_dev_setup(void)
        __raw_writel(PSC_SEL_CLK_SERCLK,
            (void __iomem *)KSEG1ADDR(AU1300_PSC2_PHYS_ADDR) + PSC_SEL_OFFSET);
        wmb();
-       /* I2C uses internal 48MHz EXTCLK1 */
+       /* I2C driver wants 50MHz, get as close as possible */
        c = clk_get(NULL, "psc3_intclk");
        if (!IS_ERR(c)) {
+               clk_set_rate(c, 50000000);
                clk_prepare_enable(c);
                clk_put(c);
        }
index 7e89936f763e9a9c4e5a4c6572a416e6dcd8c547..0fd5177e35ab27bf2fa86dcbdf7e20c58073ddf0 100644 (file)
@@ -34,12 +34,9 @@ static void __init db1550_hw_setup(void)
        void __iomem *base;
        unsigned long v;
 
-       /* complete SPI setup: link psc0_intclk to a 48MHz source,
-        * and assign GPIO16 to PSC0_SYNC1 (SPI cs# line) as well as PSC1_SYNC
-        * for AC97 on PB1550.
+       /* complete pin setup: assign GPIO16 to PSC0_SYNC1 (SPI cs# line)
+        * as well as PSC1_SYNC for AC97 on PB1550.
         */
-       v = alchemy_rdsys(AU1000_SYS_CLKSRC);
-       alchemy_wrsys(v | 0x000001e0, AU1000_SYS_CLKSRC);
        v = alchemy_rdsys(AU1000_SYS_PINFUNC);
        alchemy_wrsys(v | 1 | SYS_PF_PSC1_S1, AU1000_SYS_PINFUNC);
 
@@ -586,11 +583,13 @@ int __init db1550_dev_setup(void)
 
        c = clk_get(NULL, "psc0_intclk");
        if (!IS_ERR(c)) {
+               clk_set_rate(c, 50000000);
                clk_prepare_enable(c);
                clk_put(c);
        }
        c = clk_get(NULL, "psc2_intclk");
        if (!IS_ERR(c)) {
+               clk_set_rate(c, db1550_spi_platdata.mainclk_hz);
                clk_prepare_enable(c);
                clk_put(c);
        }