clk: ux500: move AB8500 sysclk over to PRCMU clk driver
Subsystems (2)
PATCH 1/3 clk: ux500: move AB8500 sysclk over to PRCMU clk driver
The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.
--- drivers/clk/ux500/abx500-clk.c | 8 -------- drivers/clk/ux500/u8500_of_clk.c | 3 +++ 2 files changed, 3 insertions(+), 8 deletions(-)
drivers/clk/ux500/abx500-clk.c +0 -8
@@ -15,7 +15,6 @@#include <linux/mfd/abx500/ab8500-sysctrl.h> #include <linux/clkdev.h> #include <linux/clk-provider.h> -#include <linux/mfd/dbx500-prcmu.h> #include "clk.h" /* Clock definitions for ab8500 */
@@ -39,13 +38,6 @@ static int ab8500_reg_clks(struct device *dev)if (ret)return ret; -/* ab8500_sysclk */ - clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); -clk_register_clkdev (clk,"sysclk" ,"ab8500-usb.0" ); -clk_register_clkdev (clk,"sysclk" ,"ab-iddet.0" ); -clk_register_clkdev (clk,"sysclk" ,"snd-soc-mop500.0" ); -clk_register_clkdev (clk,"sysclk" ,"shrm_bus" ); -/* ab8500_sysclk2 */ clk = clk_reg_sysctrl_gate(dev , "ab8500_sysclk2", "ab8500_sysclk", AB8500_SYSULPCLKCTRL1, AB8500_SYSULPCLKCTRL1_SYSCLKBUF2REQ,
drivers/clk/ux500/u8500_of_clk.c +3 -0
@@ -206,6 +206,9 @@ static void u8500_clk_init(struct device_node *np) clk =clk_reg_prcmu_gate ("timclk" ,NULL ,PRCMU_TIMCLK ,0 ); prcmu_clk[PRCMU_TIMCLK ] = clk; + clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); + prcmu_clk[PRCMU_SYSCLK ] = clk; + clk =clk_reg_prcmu_opp_volt_scalable ("sdmmcclk" ,NULL ,PRCMU_SDMMCCLK ,100000000 ,CLK_SET_RATE_GATE ); prcmu_clk[PRCMU_SDMMCCLK ] = clk;
Signature · 1 line
2.9.3
Quoted 2 lines · Linus Walleij
The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of
Right, this change makes sense to me!
Quoted 23 lines
the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.
Cc Ulf Hansson <[email protected]>Signed-off-by Linus Walleij <[email protected]>--- drivers/clk/ux500/abx500-clk.c | 8 -------- drivers/clk/ux500/u8500_of_clk.c | 3 +++ 2 files changed, 3 insertions(+), 8 deletions(-)drivers/clk/ux500/abx500-clk.c +0
-1@@ -15,7 +15,6 @@#include <linux/mfd/abx500/ab8500-sysctrl.h> #include <linux/clkdev.h> #include <linux/clk-provider.h> -#include <linux/mfd/dbx500-prcmu.h> #include "clk.h" /* Clock definitions for ab8500 */
drivers/clk/ux500/abx500-clk.c static int ab8500_reg_clks(struct device *dev) · line 47
Quoted 9 lines
drivers/clk/ux500/abx500-clk.c +0
-6@@ -39,13 +38,6 @@ static int ab8500_reg_clks(struct device *dev)if (ret)return ret; -/* ab8500_sysclk */ - clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); -clk_register_clkdev (clk,"sysclk" ,"ab8500-usb.0" ); -clk_register_clkdev (clk,"sysclk" ,"ab-iddet.0" ); -clk_register_clkdev (clk,"sysclk" ,"snd-soc-mop500.0" ); -clk_register_clkdev (clk,"sysclk" ,"shrm_bus" );
These lookups are removed in this change. Are there already existing name lookups already defined in the DTS?
Quoted 19 lines
drivers/clk/ux500/abx500-clk.c +0
-1-/* ab8500_sysclk2 */ clk = clk_reg_sysctrl_gate(dev , "ab8500_sysclk2", "ab8500_sysclk", AB8500_SYSULPCLKCTRL1, AB8500_SYSULPCLKCTRL1_SYSCLKBUF2REQ,drivers/clk/ux500/u8500_of_clk.c +3
-1@@ -206,6 +206,9 @@ static void u8500_clk_init(struct device_node *np) clk =clk_reg_prcmu_gate ("timclk" ,NULL ,PRCMU_TIMCLK ,0 ); prcmu_clk[PRCMU_TIMCLK ] = clk; + clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); + prcmu_clk[PRCMU_SYSCLK ] = clk; + clk =clk_reg_prcmu_opp_volt_scalable ("sdmmcclk" ,NULL ,PRCMU_SDMMCCLK ,100000000 ,CLK_SET_RATE_GATE ); prcmu_clk[PRCMU_SDMMCCLK ] = clk; --
Quoted 2 lines
2.9.3
Kind regards
Uffe
Quoted 9 lines · Ulf Hansson
drivers/clk/ux500/abx500-clk.c static int ab8500_reg_clks(struct device *dev) · line 47
Quoted 6 lines
drivers/clk/ux500/abx500-clk.c +0
-6-/* ab8500_sysclk */ - clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); -clk_register_clkdev (clk,"sysclk" ,"ab8500-usb.0" ); -clk_register_clkdev (clk,"sysclk" ,"ab-iddet.0" ); -clk_register_clkdev (clk,"sysclk" ,"snd-soc-mop500.0" ); -clk_register_clkdev (clk,"sysclk" ,"shrm_bus" );These lookups are removed in this change. Are there already existing name lookups already defined in the DTS?
The USB PHY and snd-soc-mop500 lookup are added in a DTS patch in a separate series.
The ID detection and SHRM drivers are not upstream, but can easily be bound in the device tree the day they are.
Yours,
Linus Walleij
Quoted 7 lines · Linus Walleij
The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.
Cc Ulf Hansson <[email protected]>Signed-off-by Linus Walleij <[email protected]>
Stephen, can pick this up once Rob acked the DT change?
Kind regards
Uffe
Quoted 48 lines
--- drivers/clk/ux500/abx500-clk.c | 8 -------- drivers/clk/ux500/u8500_of_clk.c | 3 +++ 2 files changed, 3 insertions(+), 8 deletions(-)drivers/clk/ux500/abx500-clk.c +0
-8@@ -15,7 +15,6 @@#include <linux/mfd/abx500/ab8500-sysctrl.h> #include <linux/clkdev.h> #include <linux/clk-provider.h> -#include <linux/mfd/dbx500-prcmu.h> #include "clk.h" /* Clock definitions for ab8500 */ @@ -39,13 +38,6 @@ static int ab8500_reg_clks(struct device *dev)if (ret)return ret; -/* ab8500_sysclk */ - clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); -clk_register_clkdev (clk,"sysclk" ,"ab8500-usb.0" ); -clk_register_clkdev (clk,"sysclk" ,"ab-iddet.0" ); -clk_register_clkdev (clk,"sysclk" ,"snd-soc-mop500.0" ); -clk_register_clkdev (clk,"sysclk" ,"shrm_bus" ); -/* ab8500_sysclk2 */ clk = clk_reg_sysctrl_gate(dev , "ab8500_sysclk2", "ab8500_sysclk", AB8500_SYSULPCLKCTRL1, AB8500_SYSULPCLKCTRL1_SYSCLKBUF2REQ,drivers/clk/ux500/u8500_of_clk.c +3
-1@@ -206,6 +206,9 @@ static void u8500_clk_init(struct device_node *np) clk =clk_reg_prcmu_gate ("timclk" ,NULL ,PRCMU_TIMCLK ,0 ); prcmu_clk[PRCMU_TIMCLK ] = clk; + clk =clk_reg_prcmu_gate ("ab8500_sysclk" ,NULL ,PRCMU_SYSCLK ,0 ); + prcmu_clk[PRCMU_SYSCLK ] = clk; + clk =clk_reg_prcmu_opp_volt_scalable ("sdmmcclk" ,NULL ,PRCMU_SDMMCCLK ,100000000 ,CLK_SET_RATE_GATE ); prcmu_clk[PRCMU_SDMMCCLK ] = clk; --2.9.3
Stephen Boyd
AppliedQuoted 8 lines · Linus Walleij
The AB8500 sysclk is just another PRCMU-controlled clock, there is no reason why it should be in the ABx500-controlled part of the clock implementation. Doing this and the corresponding device tree changes makes USB work on the Ux500 again.
Cc Ulf Hansson <[email protected]>Signed-off-by Linus Walleij <[email protected]>---
Applied to clk-ux500 and merged into clk-next
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project