Commit c02a505e authored by Manuel Lauss's avatar Manuel Lauss Committed by Ralf Baechle

MIPS: Alchemy: DB1xxx: Explicitly set 50MHz clock for I2C/SPI units.

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: default avatarManuel Lauss <manuel.lauss@gmail.com>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/7554/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 7ec32e49
...@@ -762,9 +762,10 @@ int __init db1300_dev_setup(void) ...@@ -762,9 +762,10 @@ int __init db1300_dev_setup(void)
__raw_writel(PSC_SEL_CLK_SERCLK, __raw_writel(PSC_SEL_CLK_SERCLK,
(void __iomem *)KSEG1ADDR(AU1300_PSC2_PHYS_ADDR) + PSC_SEL_OFFSET); (void __iomem *)KSEG1ADDR(AU1300_PSC2_PHYS_ADDR) + PSC_SEL_OFFSET);
wmb(); wmb();
/* I2C uses internal 48MHz EXTCLK1 */ /* I2C driver wants 50MHz, get as close as possible */
c = clk_get(NULL, "psc3_intclk"); c = clk_get(NULL, "psc3_intclk");
if (!IS_ERR(c)) { if (!IS_ERR(c)) {
clk_set_rate(c, 50000000);
clk_prepare_enable(c); clk_prepare_enable(c);
clk_put(c); clk_put(c);
} }
......
...@@ -34,12 +34,9 @@ static void __init db1550_hw_setup(void) ...@@ -34,12 +34,9 @@ static void __init db1550_hw_setup(void)
void __iomem *base; void __iomem *base;
unsigned long v; unsigned long v;
/* complete SPI setup: link psc0_intclk to a 48MHz source, /* complete pin setup: assign GPIO16 to PSC0_SYNC1 (SPI cs# line)
* and assign GPIO16 to PSC0_SYNC1 (SPI cs# line) as well as PSC1_SYNC * as well as PSC1_SYNC for AC97 on PB1550.
* for AC97 on PB1550.
*/ */
v = alchemy_rdsys(AU1000_SYS_CLKSRC);
alchemy_wrsys(v | 0x000001e0, AU1000_SYS_CLKSRC);
v = alchemy_rdsys(AU1000_SYS_PINFUNC); v = alchemy_rdsys(AU1000_SYS_PINFUNC);
alchemy_wrsys(v | 1 | SYS_PF_PSC1_S1, AU1000_SYS_PINFUNC); alchemy_wrsys(v | 1 | SYS_PF_PSC1_S1, AU1000_SYS_PINFUNC);
...@@ -586,11 +583,13 @@ int __init db1550_dev_setup(void) ...@@ -586,11 +583,13 @@ int __init db1550_dev_setup(void)
c = clk_get(NULL, "psc0_intclk"); c = clk_get(NULL, "psc0_intclk");
if (!IS_ERR(c)) { if (!IS_ERR(c)) {
clk_set_rate(c, 50000000);
clk_prepare_enable(c); clk_prepare_enable(c);
clk_put(c); clk_put(c);
} }
c = clk_get(NULL, "psc2_intclk"); c = clk_get(NULL, "psc2_intclk");
if (!IS_ERR(c)) { if (!IS_ERR(c)) {
clk_set_rate(c, db1550_spi_platdata.mainclk_hz);
clk_prepare_enable(c); clk_prepare_enable(c);
clk_put(c); clk_put(c);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment