Move OMAP2+ over to use COMMON clock
Subsystems (18)
cover Move OMAP2+ over to use COMMON clock
Hi,
Series is based on latest clk-next(3.5-rc2) from Mike.
Boot/Test logs for the series can be found here
http://pastebin.com/u/rnayak
Changes/Fixes/Updates since RFC series
-1- Fixed issues with dpll abe rate on OMAP4
-2- Fixed boot crash on 2430SDP and 2420N800
-3- Fixed suspend on OMAP3, (unused clocks were not disabled) -4- clk_hw_omap and related defs now retained in plat/clock.h -5- Added missing 4460 clocks for OMAP4
-6- Fixed some drivers to use clk_prepare_enable and clk_disable_unprepare -7- Added .is_enabled hooks for all OMAP2/3/4 gate clocks
-8- Got rid of the late_init call
-9- Fixed the handling of omap_96m_alwon_fck_3630 clk for OMAP3
OMAP3 has suspend broken in mainline, so I tested it on an older kernel (3.4-rc4 using my RFC series)
Idle and OFF mode however seem to be broken for a long time, I wasn;t able to get it working even on 3.4 major. See my logs '3630 Beagle-Xm broken idle/off on 3.4' if I am doing anything wrong. I have CPUidle enabled in the kernel config.
This series retains the static clock declarations and also all data and code in mach-omap folders and does not move it as yet to drivers/clk.
Also the series moves over only OMAP2+ (OMAP2/3/4) to use COMMON clk and leaves OMAP1 still using OMAP clock framework.
The series does not break git-bisect at any point and to do so adds new data in completely different files and uses some ifdefferry in code too, and switches over in one patch to move from OMAP clock to COMMON clock. Then deletes all old data files and all the ifdeferrey around.
All of the new data for OMAP2/3/4 in the new COMMON clock format is autogenerated, OMAP4 by hacking the existing python scripts, and OMAP2/3 by converting the existing C99 structs to JSON format (Thanks to Paul Walmsley for this) and then having python to read the JSON format and generate the C99 structs back in the form COMMON clk expects.
The complete series can be found heregit://github.com/rrnayak/linux.git clk-next-omap-3.5-rc2
Special thanks to Jon Hunter for his help testing on the 2420-N800 device.
regards,
Rajendra
Mike Turquette (1):
ARM: omap4: cm: add bitfield width values
Rajendra Nayak (28):
clk: Add support for rate table based dividers
clk: Add CLK_IS_BASIC flag to identify basic clocks
ARM: omap: clk: convert all clk_enable to clk_prepare_enable
mmc: omap_hsmmc: use clk_prepare_enable and clk_disable_unprepare
hwrng: omap: use clk_prepare_enable and clk_disable_unprepare
mfd: omap-usb: use clk_prepare_enable and clk_disable_unprepare
ARM: omap: hwmod: get rid of all omap_clk_get_by_name usage
ARM: omap: clk: Nuke plat/clock.c & reuse struct clk as clk_hw_omap
ARM: omap: clk: Remove all direct dereferncing of struct clk
ARM: omap: hwmod: Fix up hwmod based clkdm accesses
ARM: omap4: clk: Convert to common clk
ARM: omap3: clk: Convert to common clk
ARM: omap2: clk: Convert to common clk
ARM: omap: clk: list all clk_hw_omap clks to enable/disable autoidle
ARM: omap: clk: Define a function to enable clocks at init
ARM: omap: clock: Get rid of unwanted clkdm assocations within clks
ARM: omap4: clk: Add 44xx data using common struct clk
ARM: omap3: clk: Add 3xxx data using common struct clk
ARM: omap2: clk: Add 24xx data using common struct clk
ARM: omap: clk: Switch to COMMON clk
ARM: omap: clk: Use plat/clock.c only for OMAP1
ARM: omap: hwmod: Cleanup !CONFIG_COMMON_CLK parts
ARM: omap4: clk: Cleanup !CONFIG_COMMON_CLK parts
ARM: omap3: clk: Cleanup !CONFIG_COMMON_CLK parts
ARM: omap2: clk: Cleanup !CONFIG_COMMON_CLK parts
ARM: omap4: clk: Delete old OMAP clock data
ARM: omap3: clk: Delete old OMAP clock data
ARM: omap2: clk: Delete old OMAP clock data
arch/arm/mach-imx/clk.h | 2 +- arch/arm/mach-omap2/Kconfig | 1 + arch/arm/mach-omap2/Makefile | 8 +- arch/arm/mach-omap2/board-apollon.c | 4 +- arch/arm/mach-omap2/board-h4.c | 6 +- arch/arm/mach-omap2/board-omap4panda.c | 2 +- arch/arm/mach-omap2/cclock2420_data.c | 2306 +++++++++++++++ arch/arm/mach-omap2/cclock2430_data.c | 2434 ++++++++++++++++ arch/arm/mach-omap2/cclock3xxx_data.c | 3981 ++++++++++++++++++++++++++ arch/arm/mach-omap2/cclock44xx_data.c | 2628 +++++++++++++++++ arch/arm/mach-omap2/clkt2xxx_apll.c | 35 +- arch/arm/mach-omap2/clkt2xxx_dpll.c | 8 +- arch/arm/mach-omap2/clkt2xxx_dpllcore.c | 11 +- arch/arm/mach-omap2/clkt2xxx_osc.c | 12 +- arch/arm/mach-omap2/clkt2xxx_sys.c | 6 +- arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 14 +- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 24 +- arch/arm/mach-omap2/clkt_clksel.c | 198 +- arch/arm/mach-omap2/clkt_dpll.c | 48 +- arch/arm/mach-omap2/clkt_iclk.c | 35 +- arch/arm/mach-omap2/clock.c | 334 +-- arch/arm/mach-omap2/clock.h | 98 +- arch/arm/mach-omap2/clock2420_data.c | 2009 ------------- arch/arm/mach-omap2/clock2430.c | 8 +- arch/arm/mach-omap2/clock2430_data.c | 2108 -------------- arch/arm/mach-omap2/clock2xxx.c | 1 + arch/arm/mach-omap2/clock2xxx.h | 37 +- arch/arm/mach-omap2/clock34xx.c | 51 +- arch/arm/mach-omap2/clock3517.c | 21 +- arch/arm/mach-omap2/clock36xx.c | 22 +- arch/arm/mach-omap2/clock36xx.h | 2 +- arch/arm/mach-omap2/clock3xxx.c | 14 +- arch/arm/mach-omap2/clock3xxx.h | 6 +- arch/arm/mach-omap2/clock3xxx_data.c | 3621 ----------------------- arch/arm/mach-omap2/clock44xx_data.c | 3455 ---------------------- arch/arm/mach-omap2/clock_common_data.c | 9 + arch/arm/mach-omap2/cm-regbits-24xx.h | 5 + arch/arm/mach-omap2/cm-regbits-34xx.h | 31 + arch/arm/mach-omap2/cm-regbits-44xx.h | 411 +++- arch/arm/mach-omap2/cm2xxx_3xxx.h | 1 + arch/arm/mach-omap2/display.c | 4 +- arch/arm/mach-omap2/dpll3xxx.c | 165 +- arch/arm/mach-omap2/dpll44xx.c | 20 +- arch/arm/mach-omap2/gpmc.c | 2 +- arch/arm/mach-omap2/io.c | 9 + arch/arm/mach-omap2/omap_hwmod.c | 83 +- arch/arm/mach-omap2/omap_phy_internal.c | 12 +- arch/arm/mach-omap2/pm.c | 2 +- arch/arm/mach-omap2/pm24xx.c | 8 +- arch/arm/mach-omap2/prm-regbits-24xx.h | 2 + arch/arm/mach-omap2/prm-regbits-34xx.h | 1 + arch/arm/mach-omap2/prm2xxx_3xxx.h | 1 + arch/arm/mach-omap2/scrm44xx.h | 2 + arch/arm/mach-omap2/usb-fs.c | 4 +- arch/arm/plat-omap/Makefile | 3 +- arch/arm/plat-omap/include/plat/clock.h | 89 + arch/arm/plat-omap/omap_device.c | 6 +- drivers/char/hw_random/omap-rng.c | 6 +- drivers/clk/clk-divider.c | 69 +- drivers/clk/clk-fixed-factor.c | 2 +- drivers/clk/clk-fixed-rate.c | 2 +- drivers/clk/clk-gate.c | 2 +- drivers/clk/clk-mux.c | 2 +- drivers/clk/spear/spear3xx_clock.c | 4 +- drivers/clk/spear/spear6xx_clock.c | 4 +- drivers/mfd/omap-usb-host.c | 28 +- drivers/mmc/host/omap_hsmmc.c | 14 +- include/linux/clk-private.h | 5 +- include/linux/clk-provider.h | 11 +- 69 files changed, 12555 insertions(+), 12014 deletions(-) create mode 100644 arch/arm/mach-omap2/cclock2420_data.c create mode 100644 arch/arm/mach-omap2/cclock2430_data.c create mode 100644 arch/arm/mach-omap2/cclock3xxx_data.c create mode 100644 arch/arm/mach-omap2/cclock44xx_data.c delete mode 100644 arch/arm/mach-omap2/clock2420_data.c delete mode 100644 arch/arm/mach-omap2/clock2430_data.c delete mode 100644 arch/arm/mach-omap2/clock3xxx_data.c delete mode 100644 arch/arm/mach-omap2/clock44xx_data.c
PATCH 1/29 clk: Add support for rate table based dividers
Some divider clks do not have any obvious relationship between the divider and the value programmed in the register. For instance, say a value of 1 could signify divide by 6 and a value of 2 could signify divide by 4 etc. Also there are dividers where not all values possible based on the bitfield width are valid. For instance a 3 bit wide bitfield can be used to program a value from 0 to 7. However its possible that only 0 to 4 are valid values.
All these cases need the platform code to pass a simple table of divider/value tuple, so the framework knows the exact value to be written based on the divider calculation and can also do better error checking.
This patch adds support for such rate table based dividers.
Also since this means adding a new parameter to the clk_register_divider(), update all existing users of it.
--- arch/arm/mach-imx/clk.h | 2 +- drivers/clk/clk-divider.c | 67 ++++++++++++++++++++++++++++++++++-- drivers/clk/spear/spear3xx_clock.c | 4 +- drivers/clk/spear/spear6xx_clock.c | 4 +- include/linux/clk-private.h | 3 +- include/linux/clk-provider.h | 10 +++++- 6 files changed, 80 insertions(+), 10 deletions(-)
arch/arm/mach-imx/clk.h +1 -1
@@ -56,7 +56,7 @@ static inline struct clk *imx_clk_divider(const char *name, const char *parent, void __iomem *reg, u8 shift, u8 width) { return clk_register_divider(NULL, name, parent, CLK_SET_RATE_PARENT, - reg, shift, width, 0, &imx_ccm_lock); + reg, shift, width, 0, , NULL, &imx_ccm_lock); } static inline struct clk *imx_clk_gate(const char *name, const char *parent,
drivers/clk/clk-divider.c +64 -3
126 lines not on this page · raw message
drivers/clk/spear/spear3xx_clock.c +2 -2
@@ -389,7 +389,7 @@ void __init spear3xx_clk_init(void) clk =clk_register_divider (NULL ,"ahb_clk" ,"pll1_clk" ,CLK_SET_RATE_PARENT ,CORE_CLK_CFG ,HCLK_RATIO_SHIFT , -HCLK_RATIO_MASK ,0 , &_lock); +HCLK_RATIO_MASK ,0 ,NULL , &_lock);clk_register_clkdev (clk,"ahb_clk" ,NULL ); clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk",
@@ -510,7 +510,7 @@ void __init spear3xx_clk_init(void) clk =clk_register_divider (NULL ,"apb_clk" ,"ahb_clk" ,CLK_SET_RATE_PARENT ,CORE_CLK_CFG ,PCLK_RATIO_SHIFT , -PCLK_RATIO_MASK ,0 , &_lock); +PCLK_RATIO_MASK ,0 ,NULL , &_lock);clk_register_clkdev (clk,"apb_clk" ,NULL ); clk = clk_register_gate(NULL, "amem_clk", "ahb_clk", 0, AMEM_CLK_CFG,
drivers/clk/spear/spear6xx_clock.c +2 -2
@@ -162,7 +162,7 @@ void __init spear6xx_clk_init(void) clk =clk_register_divider (NULL ,"ahb_clk" ,"pll1_clk" ,CLK_SET_RATE_PARENT ,CORE_CLK_CFG ,HCLK_RATIO_SHIFT , -HCLK_RATIO_MASK ,0 , &_lock); +HCLK_RATIO_MASK ,0 ,NULL , &_lock);clk_register_clkdev (clk,"ahb_clk" ,NULL ); clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk",
@@ -285,7 +285,7 @@ void __init spear6xx_clk_init(void) clk =clk_register_divider (NULL ,"apb_clk" ,"ahb_clk" ,CLK_SET_RATE_PARENT ,CORE_CLK_CFG ,PCLK_RATIO_SHIFT , -PCLK_RATIO_MASK ,0 , &_lock); +PCLK_RATIO_MASK ,0 ,NULL , &_lock);clk_register_clkdev (clk,"apb_clk" ,NULL ); clk = clk_register_gate(NULL, "dma_clk", "ahb_clk", 0, PERIP1_CLK_ENB,
include/linux/clk-private.h +2 -1
@@ -105,7 +105,7 @@ struct clk {#define DEFINE_CLK_DIVIDER (_name, _parent_name, _parent_ptr, \ _flags, _reg, _shift, _width, \ - _divider_flags, _lock) \ + _divider_flags, _table, _lock) \ static struct clk _name; \ static const char *_name##_parent_names[] = { \ _parent_name, \
@@ -121,6 +121,7 @@ struct clk { .shift = _shift, \ .width = _width, \ .flags = _divider_flags, \ + .table = _table, \ .lock = _lock, \ }; \ DEFINE_CLK(_name, clk_divider_ops, _flags, \
include/linux/clk-provider.h +9 -1
@@ -203,6 +203,11 @@ struct clk *clk_register_gate(struct device *dev, const char *name, void __iomem *reg, u8 bit_idx, u8 clk_gate_flags, spinlock_t *lock); +struct clk_div_table { +unsigned int val; +unsigned int div; +}; +/** * struct clk_divider - adjustable divider clock *
@@ -210,6 +215,7 @@ struct clk *clk_register_gate(struct device *dev, const char *name,* @reg: register containing the divider * @shift: shift to the divider bit field * @width: width of the divider bit field +* @table: array of value/divider pairs, last entry should have div = 0 * @lock: register lock * * Clock with an adjustable divider affecting its output frequency. Implements
@@ -229,6 +235,7 @@ struct clk_divider {u8 shift;u8 width;u8 flags; +const struct clk_div_table *table;spinlock_t *lock; };
@@ -239,7 +246,8 @@ extern const struct clk_ops clk_divider_ops;struct clk *clk_register_divider (struct device *dev,const char *name,const char *parent_name,unsigned long flags,void __iomem *reg,u8 shift,u8 width, -u8 clk_divider_flags,spinlock_t *lock); +u8 clk_divider_flags,const struct clk_div_table *table, +spinlock_t *lock);/** * struct clk_mux - multiplexer clock
Signature · 1 line
1.7.1
PATCH 1/29 clk: Add support for rate table based dividers
Quoted 9 lines · Rajendra Nayak
drivers/clk/clk-divider.c +1
-0@@ -32,30 +32,69 @@#define div_mask (d) ((1 << (d->width)) - 1)#define is_power_of_two (i) !(i & ~i) +static unsigned int _get_table_maxdiv (const struct clk_div_table *table)
drivers/clk/clk-divider.c line 45
Quoted 10 lines
drivers/clk/clk-divider.c +10
-0+{ +unsigned int maxdiv; +const struct clk_div_table *clkt; + +for (clkt = table; clkt->div; clkt++) +if (clkt->div > maxdiv) + maxdiv = clkt->div; +return maxdiv; +} +
Hi Rajendra,
During testing the compiler warns that maxdiv is uninitialized here.
Regards,
Mike
PATCH 1/29 clk: Add support for rate table based dividers
Quoted 23 lines · Mike Turquette
Quoted 9 lines · Rajendra Nayak
drivers/clk/clk-divider.c +1
-0@@ -32,30 +32,69 @@#define div_mask (d) ((1<< (d->width)) - 1)#define is_power_of_two (i) !(i& ~i) +static unsigned int _get_table_maxdiv (const struct clk_div_table *table)drivers/clk/clk-divider.c line 45
Quoted 10 lines
drivers/clk/clk-divider.c +10
-0+{ +unsigned int maxdiv; +const struct clk_div_table *clkt; + +for (clkt = table; clkt->div; clkt++) +if (clkt->div> maxdiv) + maxdiv = clkt->div; +return maxdiv; +} +Hi Rajendra,
Quoted 1 line
During testing the compiler warns that maxdiv is uninitialized here.
Thanks Mike, I'll fix that up.
Quoted 3 lines
Regards,
Mike
PATCH 2/29 clk: Add CLK_IS_BASIC flag to identify basic clocks
In reply to Rajendra NayakMost platforms end up using a mix of basic clock types and some which use clk_hw_foo struct for filling in custom platform information when the clocks don't fit into basic types supported.
In platform code, its useful to know if a clock is using a basic type or clk_hw_foo, which helps platforms know if they can safely use to_clk_hw_foo to derive the clk_hw_foo pointer from clk_hw.
Mark all basic clocks with a CLK_IS_BASIC flag.
--- drivers/clk/clk-divider.c | 2 +- drivers/clk/clk-fixed-factor.c | 2 +- drivers/clk/clk-fixed-rate.c | 2 +- drivers/clk/clk-gate.c | 2 +- drivers/clk/clk-mux.c | 2 +- include/linux/clk-private.h | 2 +- include/linux/clk-provider.h | 1 + 7 files changed, 7 insertions(+), 6 deletions(-)
drivers/clk/clk-divider.c +1 -1
@@ -266,7 +266,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, init.name = name; init.ops = &clk_divider_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ? &parent_name:NULL ); init.num_parents = (parent_name ?1 :0 );
drivers/clk/clk-fixed-factor.c +1 -1
@@ -82,7 +82,7 @@ struct clk *clk_register_fixed_factor(struct device *dev, const char *name, init.name = name; init.ops = &clk_fixed_factor_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = &parent_name; init.num_parents =1 ;
drivers/clk/clk-fixed-rate.c +1 -1
@@ -63,7 +63,7 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name, init.name = name; init.ops = &clk_fixed_rate_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ? &parent_name:NULL ); init.num_parents = (parent_name ?1 :0 );
drivers/clk/clk-gate.c +1 -1
@@ -130,7 +130,7 @@ struct clk *clk_register_gate(struct device *dev, const char *name, init.name = name; init.ops = &clk_gate_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ? &parent_name:NULL ); init.num_parents = (parent_name ?1 :0 );
drivers/clk/clk-mux.c +1 -1
@@ -106,7 +106,7 @@ struct clk *clk_register_mux(struct device *dev, const char *name, init.name = name; init.ops = &clk_mux_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = parent_names; init.num_parents = num_parents;
include/linux/clk-private.h +1 -1
@@ -64,7 +64,7 @@ struct clk { .parent_names = _parent_names, \ .num_parents = ARRAY_SIZE(_parent_names), \ .parents = _parents, \ - .flags = _flags, \ + .flags = _flags | CLK_IS_BASIC, \ } #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \
include/linux/clk-provider.h +1 -0
@@ -25,6 +25,7 @@#define CLK_SET_RATE_PARENT BIT(2)/* propagate rate change up one level */ #define CLK_IGNORE_UNUSED BIT(3)/* do not gate even if unused */ #define CLK_IS_ROOT BIT(4)/* root clk, has no parent */ +#define CLK_IS_BASIC BIT(5)/* Basic clk, can't do a to_clk_foo() */ struct clk_hw ;
Signature · 1 line
1.7.1
PATCH 2/29 clk: Add CLK_IS_BASIC flag to identify basic clocks
Hi Mike,
Quoted 4 lines · Rajendra Nayak
Most platforms end up using a mix of basic clock types and some which use
clk_hw_foostruct for filling in custom platform information when the clocks don't fit into basic types supported.
Quoted 8 lines
In platform code, its useful to know if a clock is using a basic type or
clk_hw_foo, which helps platforms know if they can safely useto_clk_hw_footo derive theclk_hw_foopointer fromclk_hw.Mark all basic clocks with a
CLK_IS_BASICflag.Signed-off-by Rajendra Nayak<[email protected]>
While you have already pulled all of my other patches touching the Common Clk framework, which were part of this series, this is one patch where there hasn't been any discussion. Do you have any thoughts on this patch?
See 'Patch 15/29: ARM: omap: clk: list all clk_hw_omap clks to enable/disable autoidle' how I use this to create a clk_hw_omap specific list to handle clock autoidle in OMAP.
regards,
Rajendra
Quoted 100 lines
--- drivers/clk/clk-divider.c | 2 +- drivers/clk/clk-fixed-factor.c | 2 +- drivers/clk/clk-fixed-rate.c | 2 +- drivers/clk/clk-gate.c | 2 +- drivers/clk/clk-mux.c | 2 +- include/linux/clk-private.h | 2 +- include/linux/clk-provider.h | 1 + 7 files changed, 7 insertions(+), 6 deletions(-)drivers/clk/clk-divider.c +1
-1@@ -266,7 +266,7 @@ struct clk *clk_register_divider(struct device *dev, const char *name, init.name = name; init.ops =&clk_divider_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ?&parent_name:NULL ); init.num_parents = (parent_name ?1 :0 );drivers/clk/clk-fixed-factor.c +1
-1@@ -82,7 +82,7 @@ struct clk *clk_register_fixed_factor(struct device *dev, const char *name, init.name = name; init.ops =&clk_fixed_factor_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names =&parent_name; init.num_parents =1 ;drivers/clk/clk-fixed-rate.c +1
-1@@ -63,7 +63,7 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name, init.name = name; init.ops =&clk_fixed_rate_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ?&parent_name:NULL ); init.num_parents = (parent_name ?1 :0 );drivers/clk/clk-gate.c +1
-1@@ -130,7 +130,7 @@ struct clk *clk_register_gate(struct device *dev, const char *name, init.name = name; init.ops =&clk_gate_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ?&parent_name:NULL ); init.num_parents = (parent_name ?1 :0 );drivers/clk/clk-mux.c +1
-1@@ -106,7 +106,7 @@ struct clk *clk_register_mux(struct device *dev, const char *name, init.name = name; init.ops =&clk_mux_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = parent_names; init.num_parents = num_parents;include/linux/clk-private.h +1
-1@@ -64,7 +64,7 @@ struct clk { .parent_names = _parent_names, \ .num_parents = ARRAY_SIZE(_parent_names), \ .parents = _parents, \ - .flags = _flags, \ + .flags = _flags | CLK_IS_BASIC, \ } #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \include/linux/clk-provider.h +1
-0@@ -25,6 +25,7 @@#define CLK_SET_RATE_PARENT BIT(2)/* propagate rate change up one level */ #define CLK_IGNORE_UNUSED BIT(3)/* do not gate even if unused */ #define CLK_IS_ROOT BIT(4)/* root clk, has no parent */ +#define CLK_IS_BASIC BIT(5)/* Basic clk, can't do a to_clk_foo() */ struct clk_hw ;
PATCH 2/29 clk: Add CLK_IS_BASIC flag to identify basic clocks
Quoted 19 lines · Rajendra Nayak
Hi Mike,
Quoted 5 lines · Rajendra Nayak
Most platforms end up using a mix of basic clock types and some which use
clk_hw_foostruct for filling in custom platform information when the clocks don't fit into basic types supported.Quoted 8 lines
In platform code, its useful to know if a clock is using a basic type or
clk_hw_foo, which helps platforms know if they can safely useto_clk_hw_footo derive theclk_hw_foopointer fromclk_hw.Mark all basic clocks with a
CLK_IS_BASICflag.Signed-off-by Rajendra Nayak<[email protected]>
Quoted 8 lines
While you have already pulled all of my other patches touching the Common Clk framework, which were part of this series, this is one patch where there hasn't been any discussion. Do you have any thoughts on this patch?
See 'Patch 15/29: ARM: omap: clk: list allclk_hw_omapclks to enable/disable autoidle' how I use this to create aclk_hw_omapspecific list to handle clock autoidle in OMAP.
Hi Rajendra,
I don't have any outstanding review comments for this patch and I've taken it into clk-next. Pull the latest and you'll find it there.
Thanks,
Mike
Quoted 116 lines
regards,
RajendraQuoted 112 lines
--- drivers/clk/clk-divider.c | 2 +- drivers/clk/clk-fixed-factor.c | 2 +- drivers/clk/clk-fixed-rate.c | 2 +- drivers/clk/clk-gate.c | 2 +- drivers/clk/clk-mux.c | 2 +- include/linux/clk-private.h | 2 +- include/linux/clk-provider.h | 1 + 7 files changed, 7 insertions(+), 6 deletions(-)drivers/clk/clk-divider.c +1
-1@@ -266,7 +266,7 @@ struct clk *clk_register_divider(struct device *dev,const char *name, init.name = name; init.ops =&clk_divider_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ?&parent_name:NULL );init.num_parents = (parent_name ? 1 : 0);drivers/clk/clk-fixed-factor.c +1
-1@@ -82,7 +82,7 @@ struct clk *clk_register_fixed_factor(struct device *dev, const char *name, init.name = name; init.ops =&clk_fixed_factor_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names =&parent_name;init.num_parents = 1;drivers/clk/clk-fixed-rate.c +1
-1@@ -63,7 +63,7 @@ struct clk *clk_register_fixed_rate(struct device *dev,const char *name, init.name = name; init.ops =&clk_fixed_rate_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ?&parent_name:NULL );init.num_parents = (parent_name ? 1 : 0);drivers/clk/clk-gate.c +1
-1@@ -130,7 +130,7 @@ struct clk *clk_register_gate(struct device *dev,const char *name, init.name = name; init.ops =&clk_gate_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = (parent_name ?&parent_name:NULL );init.num_parents = (parent_name ? 1 : 0);drivers/clk/clk-mux.c +1
-1@@ -106,7 +106,7 @@ struct clk *clk_register_mux(struct device *dev, constchar *name, init.name = name; init.ops =&clk_mux_ops; - init.flags = flags; + init.flags = flags |CLK_IS_BASIC ; init.parent_names = parent_names; init.num_parents = num_parents;include/linux/clk-private.h +1
-1@@ -64,7 +64,7 @@ struct clk { .parent_names = _parent_names, \ .num_parents = ARRAY_SIZE(_parent_names), \ .parents = _parents, \ - .flags = _flags, \ + .flags = _flags | CLK_IS_BASIC, \ } #define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \include/linux/clk-provider.h +0
-0@@ -25,6 +25,7 @@#define CLK_SET_RATE_PARENT BIT(2)/* propagate rate change up one level */
#define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ #define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ +#define CLK_IS_BASIC BIT(5) /* Basic clk, can't do a
to_clk_foo()*/struct
clk_hw;
PATCH 2/29 clk: Add CLK_IS_BASIC flag to identify basic clocks
Quoted 4 lines · Mike
Hi Rajendra,
I don't have any outstanding review comments for this patch and I've taken it into clk-next. Pull the latest and you'll find it there.
great, thanks Mike.
Quoted 3 lines
Thanks,
Mike
PATCH 3/29 ARM: omap4: cm: add bitfield width values
In reply to Rajendra NayakFrom: Mike Turquette <[email protected]>
The new common clk framework includes basic definitions for mux and divider clocks. These definitions depend on shift and width values instead of the pre-computed masks that the OMAP clk framework has traditionally used when accessing the register to control the mux or divisor.
To ease this transition the masks are left intact and the width field is simply added alongside the shift and mask data.
--- arch/arm/mach-omap2/cm-regbits-44xx.h | 411 +++++++++++++++++++++++++++------ 1 files changed, 335 insertions(+), 76 deletions(-)
arch/arm/mach-omap2/cm-regbits-44xx.h +335 -76
@@ -1,7 +1,7 @@/* * OMAP44xx Clock Management register bits * -* Copyright (C) 2009-2010 Texas Instruments, Inc. +* Copyright (C) 2009-2012 Texas Instruments, Inc. * Copyright (C) 2009-2010 Nokia Corporation * * Paul Walmsley (paul at pwsan.com)
@@ -24,6 +24,7 @@/* Used by CM_L3_1_DYNAMICDEP, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP */ #define OMAP4430_ABE_DYNDEP_SHIFT 3 +#define OMAP4430_ABE_DYNDEP_WIDTH 0x1#define OMAP4430_ABE_DYNDEP_MASK (1 << 3)/*
@@ -31,14 +32,17 @@* CM_MPU_STATICDEP, CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_ABE_STATDEP_SHIFT 3 +#define OMAP4430_ABE_STATDEP_WIDTH 0x1#define OMAP4430_ABE_STATDEP_MASK (1 << 3)/* Used by CM_L4CFG_DYNAMICDEP */ #define OMAP4430_ALWONCORE_DYNDEP_SHIFT 16 +#define OMAP4430_ALWONCORE_DYNDEP_WIDTH 0x1#define OMAP4430_ALWONCORE_DYNDEP_MASK (1 << 16)/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_ALWONCORE_STATDEP_SHIFT 16 +#define OMAP4430_ALWONCORE_STATDEP_WIDTH 0x1#define OMAP4430_ALWONCORE_STATDEP_MASK (1 << 16)/*
@@ -47,294 +51,367 @@* CM_AUTOIDLE_DPLL_PER, CM_AUTOIDLE_DPLL_UNIPRO, CM_AUTOIDLE_DPLL_USB */ #define OMAP4430_AUTO_DPLL_MODE_SHIFT 0 +#define OMAP4430_AUTO_DPLL_MODE_WIDTH 0x3#define OMAP4430_AUTO_DPLL_MODE_MASK (0x7 << 0)/* Used by CM_L4CFG_DYNAMICDEP */ #define OMAP4430_CEFUSE_DYNDEP_SHIFT 17 +#define OMAP4430_CEFUSE_DYNDEP_WIDTH 0x1#define OMAP4430_CEFUSE_DYNDEP_MASK (1 << 17)/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_CEFUSE_STATDEP_SHIFT 17 +#define OMAP4430_CEFUSE_STATDEP_WIDTH 0x1#define OMAP4430_CEFUSE_STATDEP_MASK (1 << 17)/* Used by CM1_ABE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_SHIFT 13 +#define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_MASK (1 << 13)/* Used by CM1_ABE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_SHIFT 12 +#define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_MASK (1 << 12)/* Used by CM_WKUP_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ABE_LP_CLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_ABE_LP_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ABE_LP_CLK_MASK (1 << 9)/* Used by CM1_ABE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ABE_SYSCLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_ABE_SYSCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ABE_SYSCLK_MASK (1 << 11)/* Used by CM1_ABE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ABE_X2_CLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_ABE_X2_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ABE_X2_CLK_MASK (1 << 8)/* Used by CM_MEMIF_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_MASK (1 << 11)/* Used by CM_MEMIF_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_SHIFT 12 +#define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_MASK (1 << 12)/* Used by CM_MEMIF_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_SHIFT 13 +#define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_MASK (1 << 13)/* Used by CM_CAM_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_MASK (1 << 9)/* Used by CM_ALWON_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_CORE_ALWON_32K_GFCLK_SHIFT 12 +#define OMAP4430_CLKACTIVITY_CORE_ALWON_32K_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_CORE_ALWON_32K_GFCLK_MASK (1 << 12)/* Used by CM_EMU_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_MASK (1 << 9)/* Used by CM_L4CFG_CLKSTCTRL */ #define OMAP4460_CLKACTIVITY_CORE_TS_GFCLK_SHIFT 9 +#define OMAP4460_CLKACTIVITY_CORE_TS_GFCLK_WIDTH 0x1#define OMAP4460_CLKACTIVITY_CORE_TS_GFCLK_MASK (1 << 9)/* Used by CM_CEFUSE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_MASK (1 << 9)/* Used by CM_MEMIF_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DLL_CLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_DLL_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DLL_CLK_MASK (1 << 9)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DMT10_GFCLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_DMT10_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DMT10_GFCLK_MASK (1 << 9)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DMT11_GFCLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_DMT11_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DMT11_GFCLK_MASK (1 << 10)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DMT2_GFCLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_DMT2_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DMT2_GFCLK_MASK (1 << 11)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DMT3_GFCLK_SHIFT 12 +#define OMAP4430_CLKACTIVITY_DMT3_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DMT3_GFCLK_MASK (1 << 12)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DMT4_GFCLK_SHIFT 13 +#define OMAP4430_CLKACTIVITY_DMT4_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DMT4_GFCLK_MASK (1 << 13)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DMT9_GFCLK_SHIFT 14 +#define OMAP4430_CLKACTIVITY_DMT9_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DMT9_GFCLK_MASK (1 << 14)/* Used by CM_DSS_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_MASK (1 << 10)/* Used by CM_DSS_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DSS_FCLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_DSS_FCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DSS_FCLK_MASK (1 << 9)/* Used by CM_DUCATI_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_DUCATI_GCLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_DUCATI_GCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_DUCATI_GCLK_MASK (1 << 8)/* Used by CM_EMU_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_MASK (1 << 8)/* Used by CM_CAM_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_FDIF_GFCLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_FDIF_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_FDIF_GFCLK_MASK (1 << 10)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_SHIFT 15 +#define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_MASK (1 << 15)/* Used by CM1_ABE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_MASK (1 << 10)/* Used by CM_DSS_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_MASK (1 << 11)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_SHIFT 20 +#define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_MASK (1 << 20)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_SHIFT 26 +#define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_MASK (1 << 26)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_SHIFT 21 +#define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_MASK (1 << 21)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_SHIFT 27 +#define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_MASK (1 << 27)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_SHIFT 13 +#define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_MASK (1 << 13)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_SHIFT 12 +#define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_MASK (1 << 12)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_SHIFT 28 +#define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_MASK (1 << 28)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_SHIFT 29 +#define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_MASK (1 << 29)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_MASK (1 << 11)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_SHIFT 16 +#define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_MASK (1 << 16)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_SHIFT 17 +#define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_MASK (1 << 17)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_SHIFT 18 +#define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_MASK (1 << 18)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_SHIFT 19 +#define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_MASK (1 << 19)/* Used by CM_CAM_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_ISS_GCLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_ISS_GCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_ISS_GCLK_MASK (1 << 8)/* Used by CM_IVAHD_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_MASK (1 << 8)/* Used by CM_D2D_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3X2_D2D_GICLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_L3X2_D2D_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3X2_D2D_GICLK_MASK (1 << 10)/* Used by CM_L3_1_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_1_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_1_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_1_GICLK_MASK (1 << 8)/* Used by CM_L3_2_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_2_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_2_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_2_GICLK_MASK (1 << 8)/* Used by CM_D2D_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_MASK (1 << 8)/* Used by CM_SDMA_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_MASK (1 << 8)/* Used by CM_DSS_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_MASK (1 << 8)/* Used by CM_MEMIF_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_MASK (1 << 8)/* Used by CM_GFX_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_MASK (1 << 8)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_MASK (1 << 8)/* Used by CM_L3INSTR_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_MASK (1 << 8)/* Used by CM_L4SEC_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_MASK (1 << 8)/* Used by CM_ALWON_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_AO_ICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L4_AO_ICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_AO_ICLK_MASK (1 << 8)/* Used by CM_CEFUSE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_MASK (1 << 8)/* Used by CM_L4CFG_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_MASK (1 << 8)/* Used by CM_D2D_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_MASK (1 << 9)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_MASK (1 << 9)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_PER_GICLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_L4_PER_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_PER_GICLK_MASK (1 << 8)/* Used by CM_L4SEC_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_MASK (1 << 9)/* Used by CM_WKUP_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_SHIFT 12 +#define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_MASK (1 << 12)/* Used by CM_MPU_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_MASK (1 << 8)/* Used by CM1_ABE_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_MASK (1 << 9)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_SHIFT 16 +#define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_MASK (1 << 16)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_SHIFT 17 +#define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_MASK (1 << 17)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_SHIFT 18 +#define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_MASK (1 << 18)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_SHIFT 19 +#define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_MASK (1 << 19)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_SHIFT 25 +#define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_MASK (1 << 25)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_SHIFT 20 +#define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_MASK (1 << 20)/* Used by CM_L4PER_CLKSTCTRL */
@@ -343,94 +420,114 @@/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_SHIFT 22 +#define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_MASK (1 << 22)/* Used by CM_L4PER_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_SHIFT 24 +#define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_MASK (1 << 24)/* Used by CM_MEMIF_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_MASK (1 << 10)/* Used by CM_GFX_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_SGX_GFCLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_SGX_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_SGX_GFCLK_MASK (1 << 9)/* Used by CM_ALWON_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_MASK (1 << 11)/* Used by CM_ALWON_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_MASK (1 << 10)/* Used by CM_ALWON_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_SHIFT 9 +#define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_MASK (1 << 9)/* Used by CM_WKUP_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_SYS_CLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_SYS_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_SYS_CLK_MASK (1 << 8)/* Used by CM_TESLA_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_SHIFT 8 +#define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_MASK (1 << 8)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_SHIFT 22 +#define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_MASK (1 << 22)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_SHIFT 23 +#define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_MASK (1 << 23)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_SHIFT 24 +#define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_MASK (1 << 24)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_UNIPRO_DPLL_CLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_UNIPRO_DPLL_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_UNIPRO_DPLL_CLK_MASK (1 << 10)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_USB_DPLL_CLK_SHIFT 14 +#define OMAP4430_CLKACTIVITY_USB_DPLL_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_USB_DPLL_CLK_MASK (1 << 14)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_SHIFT 15 +#define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_MASK (1 << 15)/* Used by CM_WKUP_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_USIM_GFCLK_SHIFT 10 +#define OMAP4430_CLKACTIVITY_USIM_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_USIM_GFCLK_MASK (1 << 10)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_SHIFT 30 +#define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_MASK (1 << 30)/* Used by CM_L3INIT_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_SHIFT 25 +#define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_MASK (1 << 25)/* Used by CM_WKUP_CLKSTCTRL */ #define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_SHIFT 11 +#define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_WIDTH 0x1#define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_MASK (1 << 11)/* Used by CM_WKUP_CLKSTCTRL */ #define OMAP4460_CLKACTIVITY_WKUP_TS_GFCLK_SHIFT 13 +#define OMAP4460_CLKACTIVITY_WKUP_TS_GFCLK_WIDTH 0x1#define OMAP4460_CLKACTIVITY_WKUP_TS_GFCLK_MASK (1 << 13)/* * Used by CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL, * CM1_ABE_TIMER7_CLKCTRL, CM1_ABE_TIMER8_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, -* CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_MMC6_CLKCTRL, CM_L4PER_DMTIMER10_CLKCTRL, +* CM_L3INIT_MMC2_CLKCTRL, CM_L4PER_DMTIMER10_CLKCTRL, * CM_L4PER_DMTIMER11_CLKCTRL, CM_L4PER_DMTIMER2_CLKCTRL, * CM_L4PER_DMTIMER3_CLKCTRL, CM_L4PER_DMTIMER4_CLKCTRL, -* CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL, -* CM_WKUP_TIMER1_CLKCTRL +* CM_L4PER_DMTIMER9_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL */ #define OMAP4430_CLKSEL_SHIFT 24 +#define OMAP4430_CLKSEL_WIDTH 0x1#define OMAP4430_CLKSEL_MASK (1 << 24)/*
@@ -438,50 +535,62 @@* CM_CLKSEL_DUCATI_ISS_ROOT, CM_CLKSEL_USB_60MHZ, CM_L4_WKUP_CLKSEL */ #define OMAP4430_CLKSEL_0_0_SHIFT 0 +#define OMAP4430_CLKSEL_0_0_WIDTH 0x1#define OMAP4430_CLKSEL_0_0_MASK (1 << 0)/* Renamed from CLKSEL Used by CM_BYPCLK_DPLL_IVA, CM_BYPCLK_DPLL_MPU */ #define OMAP4430_CLKSEL_0_1_SHIFT 0 +#define OMAP4430_CLKSEL_0_1_WIDTH 0x2#define OMAP4430_CLKSEL_0_1_MASK (0x3 << 0)/* Renamed from CLKSEL Used by CM_L3INIT_HSI_CLKCTRL */ #define OMAP4430_CLKSEL_24_25_SHIFT 24 +#define OMAP4430_CLKSEL_24_25_WIDTH 0x2#define OMAP4430_CLKSEL_24_25_MASK (0x3 << 24)/* Used by CM_L3INIT_USB_OTG_CLKCTRL */ #define OMAP4430_CLKSEL_60M_SHIFT 24 +#define OMAP4430_CLKSEL_60M_WIDTH 0x1#define OMAP4430_CLKSEL_60M_MASK (1 << 24)/* Used by CM_MPU_MPU_CLKCTRL */ #define OMAP4460_CLKSEL_ABE_DIV_MODE_SHIFT 25 +#define OMAP4460_CLKSEL_ABE_DIV_MODE_WIDTH 0x1#define OMAP4460_CLKSEL_ABE_DIV_MODE_MASK (1 << 25)/* Used by CM1_ABE_AESS_CLKCTRL */ #define OMAP4430_CLKSEL_AESS_FCLK_SHIFT 24 +#define OMAP4430_CLKSEL_AESS_FCLK_WIDTH 0x1#define OMAP4430_CLKSEL_AESS_FCLK_MASK (1 << 24)/* Used by CM_CLKSEL_CORE */ #define OMAP4430_CLKSEL_CORE_SHIFT 0 +#define OMAP4430_CLKSEL_CORE_WIDTH 0x1#define OMAP4430_CLKSEL_CORE_MASK (1 << 0)/* Renamed from CLKSEL_CORE Used by CM_SHADOW_FREQ_CONFIG2 */ #define OMAP4430_CLKSEL_CORE_1_1_SHIFT 1 +#define OMAP4430_CLKSEL_CORE_1_1_WIDTH 0x1#define OMAP4430_CLKSEL_CORE_1_1_MASK (1 << 1)/* Used by CM_WKUP_USIM_CLKCTRL */ #define OMAP4430_CLKSEL_DIV_SHIFT 24 +#define OMAP4430_CLKSEL_DIV_WIDTH 0x1#define OMAP4430_CLKSEL_DIV_MASK (1 << 24)/* Used by CM_MPU_MPU_CLKCTRL */ #define OMAP4460_CLKSEL_EMIF_DIV_MODE_SHIFT 24 +#define OMAP4460_CLKSEL_EMIF_DIV_MODE_WIDTH 0x1#define OMAP4460_CLKSEL_EMIF_DIV_MODE_MASK (1 << 24)/* Used by CM_CAM_FDIF_CLKCTRL */ #define OMAP4430_CLKSEL_FCLK_SHIFT 24 +#define OMAP4430_CLKSEL_FCLK_WIDTH 0x2#define OMAP4430_CLKSEL_FCLK_MASK (0x3 << 24)/* Used by CM_L4PER_MCBSP4_CLKCTRL */ #define OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT 25 +#define OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH 0x1#define OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK (1 << 25)/*
@@ -490,34 +599,42 @@* CM1_ABE_MCBSP3_CLKCTRL */ #define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_SHIFT 26 +#define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_WIDTH 0x2#define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_MASK (0x3 << 26)/* Used by CM_CLKSEL_CORE */ #define OMAP4430_CLKSEL_L3_SHIFT 4 +#define OMAP4430_CLKSEL_L3_WIDTH 0x1#define OMAP4430_CLKSEL_L3_MASK (1 << 4)/* Renamed from CLKSEL_L3 Used by CM_SHADOW_FREQ_CONFIG2 */ #define OMAP4430_CLKSEL_L3_SHADOW_SHIFT 2 +#define OMAP4430_CLKSEL_L3_SHADOW_WIDTH 0x1#define OMAP4430_CLKSEL_L3_SHADOW_MASK (1 << 2)/* Used by CM_CLKSEL_CORE */ #define OMAP4430_CLKSEL_L4_SHIFT 8 +#define OMAP4430_CLKSEL_L4_WIDTH 0x1#define OMAP4430_CLKSEL_L4_MASK (1 << 8)/* Used by CM_CLKSEL_ABE */ #define OMAP4430_CLKSEL_OPP_SHIFT 0 +#define OMAP4430_CLKSEL_OPP_WIDTH 0x2#define OMAP4430_CLKSEL_OPP_MASK (0x3 << 0)/* Used by CM_EMU_DEBUGSS_CLKCTRL */ #define OMAP4430_CLKSEL_PMD_STM_CLK_SHIFT 27 +#define OMAP4430_CLKSEL_PMD_STM_CLK_WIDTH 0x3#define OMAP4430_CLKSEL_PMD_STM_CLK_MASK (0x7 << 27)/* Used by CM_EMU_DEBUGSS_CLKCTRL */ #define OMAP4430_CLKSEL_PMD_TRACE_CLK_SHIFT 24 +#define OMAP4430_CLKSEL_PMD_TRACE_CLK_WIDTH 0x3#define OMAP4430_CLKSEL_PMD_TRACE_CLK_MASK (0x7 << 24)/* Used by CM_GFX_GFX_CLKCTRL */ #define OMAP4430_CLKSEL_SGX_FCLK_SHIFT 24 +#define OMAP4430_CLKSEL_SGX_FCLK_WIDTH 0x1#define OMAP4430_CLKSEL_SGX_FCLK_MASK (1 << 24)/*
@@ -525,18 +642,22 @@* CM1_ABE_MCBSP2_CLKCTRL, CM1_ABE_MCBSP3_CLKCTRL */ #define OMAP4430_CLKSEL_SOURCE_SHIFT 24 +#define OMAP4430_CLKSEL_SOURCE_WIDTH 0x2#define OMAP4430_CLKSEL_SOURCE_MASK (0x3 << 24)/* Renamed from CLKSEL_SOURCE Used by CM_L4PER_MCBSP4_CLKCTRL */ #define OMAP4430_CLKSEL_SOURCE_24_24_SHIFT 24 +#define OMAP4430_CLKSEL_SOURCE_24_24_WIDTH 0x1#define OMAP4430_CLKSEL_SOURCE_24_24_MASK (1 << 24)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_CLKSEL_UTMI_P1_SHIFT 24 +#define OMAP4430_CLKSEL_UTMI_P1_WIDTH 0x1#define OMAP4430_CLKSEL_UTMI_P1_MASK (1 << 24)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_CLKSEL_UTMI_P2_SHIFT 25 +#define OMAP4430_CLKSEL_UTMI_P2_WIDTH 0x1#define OMAP4430_CLKSEL_UTMI_P2_MASK (1 << 25)/*
@@ -549,30 +670,37 @@* CM_TESLA_CLKSTCTRL, CM_WKUP_CLKSTCTRL */ #define OMAP4430_CLKTRCTRL_SHIFT 0 +#define OMAP4430_CLKTRCTRL_WIDTH 0x2#define OMAP4430_CLKTRCTRL_MASK (0x3 << 0)/* Used by CM_EMU_OVERRIDE_DPLL_CORE */ #define OMAP4430_CORE_DPLL_EMU_DIV_SHIFT 0 +#define OMAP4430_CORE_DPLL_EMU_DIV_WIDTH 0x7#define OMAP4430_CORE_DPLL_EMU_DIV_MASK (0x7f << 0)/* Used by CM_EMU_OVERRIDE_DPLL_CORE */ #define OMAP4430_CORE_DPLL_EMU_MULT_SHIFT 8 +#define OMAP4430_CORE_DPLL_EMU_MULT_WIDTH 0xb#define OMAP4430_CORE_DPLL_EMU_MULT_MASK (0x7ff << 8)/* Used by REVISION_CM1, REVISION_CM2 */ #define OMAP4430_CUSTOM_SHIFT 6 +#define OMAP4430_CUSTOM_WIDTH 0x2#define OMAP4430_CUSTOM_MASK (0x3 << 6)/* Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */ #define OMAP4430_D2D_DYNDEP_SHIFT 18 +#define OMAP4430_D2D_DYNDEP_WIDTH 0x1#define OMAP4430_D2D_DYNDEP_MASK (1 << 18)/* Used by CM_MPU_STATICDEP */ #define OMAP4430_D2D_STATDEP_SHIFT 18 +#define OMAP4430_D2D_STATDEP_WIDTH 0x1#define OMAP4430_D2D_STATDEP_MASK (1 << 18)/* Used by CM_CLKSEL_DPLL_MPU */ #define OMAP4460_DCC_COUNT_MAX_SHIFT 24 +#define OMAP4460_DCC_COUNT_MAX_WIDTH 0x8#define OMAP4460_DCC_COUNT_MAX_MASK (0xff << 24)/* Used by CM_CLKSEL_DPLL_MPU */
@@ -586,22 +714,27 @@* CM_SSC_DELTAMSTEP_DPLL_UNIPRO, CM_SSC_DELTAMSTEP_DPLL_USB */ #define OMAP4430_DELTAMSTEP_SHIFT 0 +#define OMAP4430_DELTAMSTEP_WIDTH 0x14#define OMAP4430_DELTAMSTEP_MASK (0xfffff << 0)/* Renamed from DELTAMSTEP Used by CM_SSC_DELTAMSTEP_DPLL_USB */ #define OMAP4460_DELTAMSTEP_0_20_SHIFT 0 +#define OMAP4460_DELTAMSTEP_0_20_WIDTH 0x15#define OMAP4460_DELTAMSTEP_0_20_MASK (0x1fffff << 0)/* Used by CM_DLL_CTRL */ #define OMAP4430_DLL_OVERRIDE_SHIFT 0 +#define OMAP4430_DLL_OVERRIDE_WIDTH 0x1#define OMAP4430_DLL_OVERRIDE_MASK (1 << 0)/* Renamed from DLL_OVERRIDE Used by CM_SHADOW_FREQ_CONFIG1 */ #define OMAP4430_DLL_OVERRIDE_2_2_SHIFT 2 +#define OMAP4430_DLL_OVERRIDE_2_2_WIDTH 0x1#define OMAP4430_DLL_OVERRIDE_2_2_MASK (1 << 2)/* Used by CM_SHADOW_FREQ_CONFIG1 */ #define OMAP4430_DLL_RESET_SHIFT 3 +#define OMAP4430_DLL_RESET_WIDTH 0x1#define OMAP4430_DLL_RESET_MASK (1 << 3)/*
@@ -610,30 +743,37 @@* CM_CLKSEL_DPLL_UNIPRO, CM_CLKSEL_DPLL_USB */ #define OMAP4430_DPLL_BYP_CLKSEL_SHIFT 23 +#define OMAP4430_DPLL_BYP_CLKSEL_WIDTH 0x1#define OMAP4430_DPLL_BYP_CLKSEL_MASK (1 << 23)/* Used by CM_CLKDCOLDO_DPLL_USB */ #define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_SHIFT 8 +#define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_WIDTH 0x1#define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_MASK (1 << 8)/* Used by CM_CLKSEL_DPLL_CORE */ #define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_SHIFT 20 +#define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_WIDTH 0x1#define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_MASK (1 << 20)/* Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE, CM_DIV_M3_DPLL_PER */ #define OMAP4430_DPLL_CLKOUTHIF_DIV_SHIFT 0 +#define OMAP4430_DPLL_CLKOUTHIF_DIV_WIDTH 0x5#define OMAP4430_DPLL_CLKOUTHIF_DIV_MASK (0x1f << 0)/* Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE, CM_DIV_M3_DPLL_PER */ #define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_SHIFT 5 +#define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_WIDTH 0x1#define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_MASK (1 << 5)/* Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE, CM_DIV_M3_DPLL_PER */ #define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_SHIFT 8 +#define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_WIDTH 0x1#define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_MASK (1 << 8)/* Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO */ #define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_SHIFT 10 +#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_WIDTH 0x1#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK (1 << 10)/*
@@ -641,10 +781,12 @@* CM_DIV_M2_DPLL_MPU, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO */ #define OMAP4430_DPLL_CLKOUT_DIV_SHIFT 0 +#define OMAP4430_DPLL_CLKOUT_DIV_WIDTH 0x5#define OMAP4430_DPLL_CLKOUT_DIV_MASK (0x1f << 0)/* Renamed from DPLL_CLKOUT_DIV Used by CM_DIV_M2_DPLL_USB */ #define OMAP4430_DPLL_CLKOUT_DIV_0_6_SHIFT 0 +#define OMAP4430_DPLL_CLKOUT_DIV_0_6_WIDTH 0x7#define OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK (0x7f << 0)/*
@@ -652,10 +794,12 @@* CM_DIV_M2_DPLL_MPU, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO */ #define OMAP4430_DPLL_CLKOUT_DIVCHACK_SHIFT 5 +#define OMAP4430_DPLL_CLKOUT_DIVCHACK_WIDTH 0x1#define OMAP4430_DPLL_CLKOUT_DIVCHACK_MASK (1 << 5)/* Renamed from DPLL_CLKOUT_DIVCHACK Used by CM_DIV_M2_DPLL_USB */ #define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_SHIFT 7 +#define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_WIDTH 0x1#define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_MASK (1 << 7)/*
@@ -663,18 +807,22 @@* CM_DIV_M2_DPLL_MPU, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_USB */ #define OMAP4430_DPLL_CLKOUT_GATE_CTRL_SHIFT 8 +#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_WIDTH 0x1#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK (1 << 8)/* Used by CM_SHADOW_FREQ_CONFIG1 */ #define OMAP4430_DPLL_CORE_DPLL_EN_SHIFT 8 +#define OMAP4430_DPLL_CORE_DPLL_EN_WIDTH 0x3#define OMAP4430_DPLL_CORE_DPLL_EN_MASK (0x7 << 8)/* Used by CM_SHADOW_FREQ_CONFIG1 */ #define OMAP4430_DPLL_CORE_M2_DIV_SHIFT 11 +#define OMAP4430_DPLL_CORE_M2_DIV_WIDTH 0x5#define OMAP4430_DPLL_CORE_M2_DIV_MASK (0x1f << 11)/* Used by CM_SHADOW_FREQ_CONFIG2 */ #define OMAP4430_DPLL_CORE_M5_DIV_SHIFT 3 +#define OMAP4430_DPLL_CORE_M5_DIV_WIDTH 0x5#define OMAP4430_DPLL_CORE_M5_DIV_MASK (0x1f << 3)/*
@@ -683,10 +831,12 @@* CM_CLKSEL_DPLL_UNIPRO */ #define OMAP4430_DPLL_DIV_SHIFT 0 +#define OMAP4430_DPLL_DIV_WIDTH 0x7#define OMAP4430_DPLL_DIV_MASK (0x7f << 0)/* Renamed from DPLL_DIV Used by CM_CLKSEL_DPLL_USB */ #define OMAP4430_DPLL_DIV_0_7_SHIFT 0 +#define OMAP4430_DPLL_DIV_0_7_WIDTH 0x8#define OMAP4430_DPLL_DIV_0_7_MASK (0xff << 0)/*
@@ -694,10 +844,12 @@* CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER */ #define OMAP4430_DPLL_DRIFTGUARD_EN_SHIFT 8 +#define OMAP4430_DPLL_DRIFTGUARD_EN_WIDTH 0x1#define OMAP4430_DPLL_DRIFTGUARD_EN_MASK (1 << 8)/* Renamed from DPLL_DRIFTGUARD_EN Used by CM_CLKMODE_DPLL_UNIPRO */ #define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_SHIFT 3 +#define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_WIDTH 0x1#define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_MASK (1 << 3)/*
@@ -706,6 +858,7 @@* CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB */ #define OMAP4430_DPLL_EN_SHIFT 0 +#define OMAP4430_DPLL_EN_WIDTH 0x3#define OMAP4430_DPLL_EN_MASK (0x7 << 0)/*
@@ -714,6 +867,7 @@* CM_CLKMODE_DPLL_UNIPRO */ #define OMAP4430_DPLL_LPMODE_EN_SHIFT 10 +#define OMAP4430_DPLL_LPMODE_EN_WIDTH 0x1#define OMAP4430_DPLL_LPMODE_EN_MASK (1 << 10)/*
@@ -722,10 +876,12 @@* CM_CLKSEL_DPLL_UNIPRO */ #define OMAP4430_DPLL_MULT_SHIFT 8 +#define OMAP4430_DPLL_MULT_WIDTH 0xb#define OMAP4430_DPLL_MULT_MASK (0x7ff << 8)/* Renamed from DPLL_MULT Used by CM_CLKSEL_DPLL_USB */ #define OMAP4430_DPLL_MULT_USB_SHIFT 8 +#define OMAP4430_DPLL_MULT_USB_WIDTH 0xc#define OMAP4430_DPLL_MULT_USB_MASK (0xfff << 8)/*
@@ -734,10 +890,12 @@* CM_CLKMODE_DPLL_UNIPRO */ #define OMAP4430_DPLL_REGM4XEN_SHIFT 11 +#define OMAP4430_DPLL_REGM4XEN_WIDTH 0x1#define OMAP4430_DPLL_REGM4XEN_MASK (1 << 11)/* Used by CM_CLKSEL_DPLL_USB */ #define OMAP4430_DPLL_SD_DIV_SHIFT 24 +#define OMAP4430_DPLL_SD_DIV_WIDTH 0x8#define OMAP4430_DPLL_SD_DIV_MASK (0xff << 24)/*
@@ -746,6 +904,7 @@* CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB */ #define OMAP4430_DPLL_SSC_ACK_SHIFT 13 +#define OMAP4430_DPLL_SSC_ACK_WIDTH 0x1#define OMAP4430_DPLL_SSC_ACK_MASK (1 << 13)/*
@@ -754,6 +913,7 @@* CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB */ #define OMAP4430_DPLL_SSC_DOWNSPREAD_SHIFT 14 +#define OMAP4430_DPLL_SSC_DOWNSPREAD_WIDTH 0x1#define OMAP4430_DPLL_SSC_DOWNSPREAD_MASK (1 << 14)/*
@@ -762,42 +922,52 @@* CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB */ #define OMAP4430_DPLL_SSC_EN_SHIFT 12 +#define OMAP4430_DPLL_SSC_EN_WIDTH 0x1#define OMAP4430_DPLL_SSC_EN_MASK (1 << 12)/* Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_L4PER_DYNAMICDEP */ #define OMAP4430_DSS_DYNDEP_SHIFT 8 +#define OMAP4430_DSS_DYNDEP_WIDTH 0x1#define OMAP4430_DSS_DYNDEP_MASK (1 << 8)/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP */ #define OMAP4430_DSS_STATDEP_SHIFT 8 +#define OMAP4430_DSS_STATDEP_WIDTH 0x1#define OMAP4430_DSS_STATDEP_MASK (1 << 8)/* Used by CM_L3_2_DYNAMICDEP */ #define OMAP4430_DUCATI_DYNDEP_SHIFT 0 +#define OMAP4430_DUCATI_DYNDEP_WIDTH 0x1#define OMAP4430_DUCATI_DYNDEP_MASK (1 << 0)/* Used by CM_MPU_STATICDEP, CM_SDMA_STATICDEP */ #define OMAP4430_DUCATI_STATDEP_SHIFT 0 +#define OMAP4430_DUCATI_STATDEP_WIDTH 0x1#define OMAP4430_DUCATI_STATDEP_MASK (1 << 0)/* Used by CM_SHADOW_FREQ_CONFIG1 */ #define OMAP4430_FREQ_UPDATE_SHIFT 0 +#define OMAP4430_FREQ_UPDATE_WIDTH 0x1#define OMAP4430_FREQ_UPDATE_MASK (1 << 0)/* Used by REVISION_CM1, REVISION_CM2 */ #define OMAP4430_FUNC_SHIFT 16 +#define OMAP4430_FUNC_WIDTH 0xc#define OMAP4430_FUNC_MASK (0xfff << 16)/* Used by CM_L3_2_DYNAMICDEP */ #define OMAP4430_GFX_DYNDEP_SHIFT 10 +#define OMAP4430_GFX_DYNDEP_WIDTH 0x1#define OMAP4430_GFX_DYNDEP_MASK (1 << 10)/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */ #define OMAP4430_GFX_STATDEP_SHIFT 10 +#define OMAP4430_GFX_STATDEP_WIDTH 0x1#define OMAP4430_GFX_STATDEP_MASK (1 << 10)/* Used by CM_SHADOW_FREQ_CONFIG2 */ #define OMAP4430_GPMC_FREQ_UPDATE_SHIFT 0 +#define OMAP4430_GPMC_FREQ_UPDATE_WIDTH 0x1#define OMAP4430_GPMC_FREQ_UPDATE_MASK (1 << 0)/*
@@ -805,6 +975,7 @@* CM_DIV_M4_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT1_DIV_SHIFT 0 +#define OMAP4430_HSDIVIDER_CLKOUT1_DIV_WIDTH 0x5#define OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK (0x1f << 0)/*
@@ -812,6 +983,7 @@* CM_DIV_M4_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_SHIFT 5 +#define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_MASK (1 << 5)/*
@@ -819,6 +991,7 @@* CM_DIV_M4_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_SHIFT 8 +#define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_MASK (1 << 8)/*
@@ -826,6 +999,7 @@* CM_DIV_M4_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_SHIFT 12 +#define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_MASK (1 << 12)/*
@@ -833,6 +1007,7 @@* CM_DIV_M5_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT2_DIV_SHIFT 0 +#define OMAP4430_HSDIVIDER_CLKOUT2_DIV_WIDTH 0x5#define OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK (0x1f << 0)/*
@@ -840,6 +1015,7 @@* CM_DIV_M5_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_SHIFT 5 +#define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_MASK (1 << 5)/*
@@ -847,6 +1023,7 @@* CM_DIV_M5_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_SHIFT 8 +#define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_MASK (1 << 8)/*
@@ -854,38 +1031,47 @@* CM_DIV_M5_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_SHIFT 12 +#define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_MASK (1 << 12)/* Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT3_DIV_SHIFT 0 +#define OMAP4430_HSDIVIDER_CLKOUT3_DIV_WIDTH 0x5#define OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK (0x1f << 0)/* Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_SHIFT 5 +#define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_MASK (1 << 5)/* Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_SHIFT 8 +#define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_MASK (1 << 8)/* Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_SHIFT 12 +#define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_MASK (1 << 12)/* Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT4_DIV_SHIFT 0 +#define OMAP4430_HSDIVIDER_CLKOUT4_DIV_WIDTH 0x5#define OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK (0x1f << 0)/* Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_SHIFT 5 +#define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_MASK (1 << 5)/* Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_SHIFT 8 +#define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_MASK (1 << 8)/* Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_PER */ #define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_SHIFT 12 +#define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_WIDTH 0x1#define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_MASK (1 << 12)/*
@@ -893,53 +1079,48 @@* CM1_ABE_MCASP_CLKCTRL, CM1_ABE_MCBSP1_CLKCTRL, CM1_ABE_MCBSP2_CLKCTRL, * CM1_ABE_MCBSP3_CLKCTRL, CM1_ABE_PDM_CLKCTRL, CM1_ABE_SLIMBUS_CLKCTRL, * CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL, -* CM1_ABE_TIMER8_CLKCTRL, CM1_ABE_WDT3_CLKCTRL, CM_ALWON_MDMINTC_CLKCTRL, -* CM_ALWON_SR_CORE_CLKCTRL, CM_ALWON_SR_IVA_CLKCTRL, CM_ALWON_SR_MPU_CLKCTRL, -* CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL, -* CM_CM1_PROFILING_CLKCTRL, CM_CM2_PROFILING_CLKCTRL, -* CM_D2D_MODEM_ICR_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, CM_D2D_SAD2D_FW_CLKCTRL, -* CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, +* CM1_ABE_TIMER8_CLKCTRL, CM1_ABE_WDT3_CLKCTRL, CM_ALWON_SR_CORE_CLKCTRL, +* CM_ALWON_SR_IVA_CLKCTRL, CM_ALWON_SR_MPU_CLKCTRL, CM_CAM_FDIF_CLKCTRL, +* CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL, CM_CM1_PROFILING_CLKCTRL, +* CM_CM2_PROFILING_CLKCTRL, CM_D2D_MODEM_ICR_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, +* CM_D2D_SAD2D_FW_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, * CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL, -* CM_IVAHD_SL2_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL, -* CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, -* CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL, -* CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL, -* CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL, -* CM_L3INIT_USB_HOST_FS_CLKCTRL, CM_L3INIT_USB_OTG_CLKCTRL, -* CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_XHPI_CLKCTRL, CM_L3INSTR_L3_3_CLKCTRL, -* CM_L3INSTR_L3_INSTR_CLKCTRL, CM_L3INSTR_OCP_WP1_CLKCTRL, -* CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, CM_L3_2_L3_2_CLKCTRL, -* CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, CM_L4CFG_L4_CFG_CLKCTRL, -* CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, CM_L4PER_ADC_CLKCTRL, +* CM_IVAHD_SL2_CLKCTRL, CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, +* CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, +* CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_FS_CLKCTRL, +* CM_L3INIT_USB_OTG_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL, +* CM_L3INSTR_L3_3_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL, +* CM_L3INSTR_OCP_WP1_CLKCTRL, CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, +* CM_L3_2_L3_2_CLKCTRL, CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, +* CM_L4CFG_L4_CFG_CLKCTRL, CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, * CM_L4PER_DMTIMER10_CLKCTRL, CM_L4PER_DMTIMER11_CLKCTRL, * CM_L4PER_DMTIMER2_CLKCTRL, CM_L4PER_DMTIMER3_CLKCTRL, * CM_L4PER_DMTIMER4_CLKCTRL, CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_ELM_CLKCTRL, * CM_L4PER_GPIO2_CLKCTRL, CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, * CM_L4PER_GPIO5_CLKCTRL, CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_HDQ1W_CLKCTRL, -* CM_L4PER_HECC1_CLKCTRL, CM_L4PER_HECC2_CLKCTRL, CM_L4PER_I2C1_CLKCTRL, -* CM_L4PER_I2C2_CLKCTRL, CM_L4PER_I2C3_CLKCTRL, CM_L4PER_I2C4_CLKCTRL, -* CM_L4PER_I2C5_CLKCTRL, CM_L4PER_L4PER_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, -* CM_L4PER_MCASP3_CLKCTRL, CM_L4PER_MCBSP4_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, -* CM_L4PER_MCSPI2_CLKCTRL, CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, -* CM_L4PER_MGATE_CLKCTRL, CM_L4PER_MMCSD3_CLKCTRL, CM_L4PER_MMCSD4_CLKCTRL, -* CM_L4PER_MMCSD5_CLKCTRL, CM_L4PER_MSPROHG_CLKCTRL, -* CM_L4PER_SLIMBUS2_CLKCTRL, CM_L4PER_UART1_CLKCTRL, CM_L4PER_UART2_CLKCTRL, -* CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL, CM_L4SEC_AES1_CLKCTRL, -* CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL, +* CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL, CM_L4PER_I2C3_CLKCTRL, +* CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL, CM_L4PER_L4PER_CLKCTRL, +* CM_L4PER_MCBSP4_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL, +* CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MMCSD3_CLKCTRL, +* CM_L4PER_MMCSD4_CLKCTRL, CM_L4PER_MMCSD5_CLKCTRL, CM_L4PER_SLIMBUS2_CLKCTRL, +* CM_L4PER_UART1_CLKCTRL, CM_L4PER_UART2_CLKCTRL, CM_L4PER_UART3_CLKCTRL, +* CM_L4PER_UART4_CLKCTRL, CM_L4SEC_AES1_CLKCTRL, CM_L4SEC_AES2_CLKCTRL, +* CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL, * CM_L4SEC_PKAEIP29_CLKCTRL, CM_L4SEC_RNG_CLKCTRL, CM_L4SEC_SHA2MD51_CLKCTRL, * CM_MEMIF_DMM_CLKCTRL, CM_MEMIF_EMIF_1_CLKCTRL, CM_MEMIF_EMIF_2_CLKCTRL, -* CM_MEMIF_EMIF_FW_CLKCTRL, CM_MEMIF_EMIF_H1_CLKCTRL, -* CM_MEMIF_EMIF_H2_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, +* CM_MEMIF_EMIF_FW_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, * CM_TESLA_TESLA_CLKCTRL, CM_WKUP_GPIO1_CLKCTRL, CM_WKUP_KEYBOARD_CLKCTRL, -* CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_RTC_CLKCTRL, CM_WKUP_SARRAM_CLKCTRL, -* CM_WKUP_SYNCTIMER_CLKCTRL, CM_WKUP_TIMER12_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL, -* CM_WKUP_USIM_CLKCTRL, CM_WKUP_WDT1_CLKCTRL, CM_WKUP_WDT2_CLKCTRL +* CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_SARRAM_CLKCTRL, CM_WKUP_SYNCTIMER_CLKCTRL, +* CM_WKUP_TIMER12_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL, CM_WKUP_USIM_CLKCTRL, +* CM_WKUP_WDT1_CLKCTRL, CM_WKUP_WDT2_CLKCTRL */ #define OMAP4430_IDLEST_SHIFT 16 +#define OMAP4430_IDLEST_WIDTH 0x2#define OMAP4430_IDLEST_MASK (0x3 << 16)/* Used by CM_DUCATI_DYNAMICDEP, CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */ #define OMAP4430_ISS_DYNDEP_SHIFT 9 +#define OMAP4430_ISS_DYNDEP_WIDTH 0x1#define OMAP4430_ISS_DYNDEP_MASK (1 << 9)/*
@@ -947,10 +1128,12 @@* CM_TESLA_STATICDEP */ #define OMAP4430_ISS_STATDEP_SHIFT 9 +#define OMAP4430_ISS_STATDEP_WIDTH 0x1#define OMAP4430_ISS_STATDEP_MASK (1 << 9)/* Used by CM_L3_2_DYNAMICDEP, CM_TESLA_DYNAMICDEP */ #define OMAP4430_IVAHD_DYNDEP_SHIFT 2 +#define OMAP4430_IVAHD_DYNDEP_WIDTH 0x1#define OMAP4430_IVAHD_DYNDEP_MASK (1 << 2)/*
@@ -959,10 +1142,12 @@* CM_MPU_STATICDEP, CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_IVAHD_STATDEP_SHIFT 2 +#define OMAP4430_IVAHD_STATDEP_WIDTH 0x1#define OMAP4430_IVAHD_STATDEP_MASK (1 << 2)/* Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_L4PER_DYNAMICDEP */ #define OMAP4430_L3INIT_DYNDEP_SHIFT 7 +#define OMAP4430_L3INIT_DYNDEP_WIDTH 0x1#define OMAP4430_L3INIT_DYNDEP_MASK (1 << 7)/*
@@ -970,6 +1155,7 @@* CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_L3INIT_STATDEP_SHIFT 7 +#define OMAP4430_L3INIT_STATDEP_WIDTH 0x1#define OMAP4430_L3INIT_STATDEP_MASK (1 << 7)/*
@@ -977,6 +1163,7 @@* CM_L4CFG_DYNAMICDEP, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP */ #define OMAP4430_L3_1_DYNDEP_SHIFT 5 +#define OMAP4430_L3_1_DYNDEP_WIDTH 0x1#define OMAP4430_L3_1_DYNDEP_MASK (1 << 5)/*
@@ -986,6 +1173,7 @@* CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_L3_1_STATDEP_SHIFT 5 +#define OMAP4430_L3_1_STATDEP_WIDTH 0x1#define OMAP4430_L3_1_STATDEP_MASK (1 << 5)/*
@@ -995,6 +1183,7 @@* CM_L4SEC_DYNAMICDEP, CM_SDMA_DYNAMICDEP */ #define OMAP4430_L3_2_DYNDEP_SHIFT 6 +#define OMAP4430_L3_2_DYNDEP_WIDTH 0x1#define OMAP4430_L3_2_DYNDEP_MASK (1 << 6)/*
@@ -1004,10 +1193,12 @@* CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_L3_2_STATDEP_SHIFT 6 +#define OMAP4430_L3_2_STATDEP_WIDTH 0x1#define OMAP4430_L3_2_STATDEP_MASK (1 << 6)/* Used by CM_L3_1_DYNAMICDEP */ #define OMAP4430_L4CFG_DYNDEP_SHIFT 12 +#define OMAP4430_L4CFG_DYNDEP_WIDTH 0x1#define OMAP4430_L4CFG_DYNDEP_MASK (1 << 12)/*
@@ -1015,10 +1206,12 @@* CM_MPU_STATICDEP, CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_L4CFG_STATDEP_SHIFT 12 +#define OMAP4430_L4CFG_STATDEP_WIDTH 0x1#define OMAP4430_L4CFG_STATDEP_MASK (1 << 12)/* Used by CM_L3_2_DYNAMICDEP */ #define OMAP4430_L4PER_DYNDEP_SHIFT 13 +#define OMAP4430_L4PER_DYNDEP_WIDTH 0x1#define OMAP4430_L4PER_DYNDEP_MASK (1 << 13)/*
@@ -1026,10 +1219,12 @@* CM_L4SEC_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_L4PER_STATDEP_SHIFT 13 +#define OMAP4430_L4PER_STATDEP_WIDTH 0x1#define OMAP4430_L4PER_STATDEP_MASK (1 << 13)/* Used by CM_L3_2_DYNAMICDEP, CM_L4PER_DYNAMICDEP */ #define OMAP4430_L4SEC_DYNDEP_SHIFT 14 +#define OMAP4430_L4SEC_DYNDEP_WIDTH 0x1#define OMAP4430_L4SEC_DYNDEP_MASK (1 << 14)/*
@@ -1037,10 +1232,12 @@* CM_SDMA_STATICDEP */ #define OMAP4430_L4SEC_STATDEP_SHIFT 14 +#define OMAP4430_L4SEC_STATDEP_WIDTH 0x1#define OMAP4430_L4SEC_STATDEP_MASK (1 << 14)/* Used by CM_L4CFG_DYNAMICDEP */ #define OMAP4430_L4WKUP_DYNDEP_SHIFT 15 +#define OMAP4430_L4WKUP_DYNDEP_WIDTH 0x1#define OMAP4430_L4WKUP_DYNDEP_MASK (1 << 15)/*
@@ -1048,6 +1245,7 @@* CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_L4WKUP_STATDEP_SHIFT 15 +#define OMAP4430_L4WKUP_STATDEP_WIDTH 0x1#define OMAP4430_L4WKUP_STATDEP_MASK (1 << 15)/*
@@ -1055,6 +1253,7 @@* CM_MPU_DYNAMICDEP */ #define OMAP4430_MEMIF_DYNDEP_SHIFT 4 +#define OMAP4430_MEMIF_DYNDEP_WIDTH 0x1#define OMAP4430_MEMIF_DYNDEP_MASK (1 << 4)/*
@@ -1064,6 +1263,7 @@* CM_SDMA_STATICDEP, CM_TESLA_STATICDEP */ #define OMAP4430_MEMIF_STATDEP_SHIFT 4 +#define OMAP4430_MEMIF_STATDEP_WIDTH 0x1#define OMAP4430_MEMIF_STATDEP_MASK (1 << 4)/*
@@ -1073,6 +1273,7 @@* CM_SSC_MODFREQDIV_DPLL_UNIPRO, CM_SSC_MODFREQDIV_DPLL_USB */ #define OMAP4430_MODFREQDIV_EXPONENT_SHIFT 8 +#define OMAP4430_MODFREQDIV_EXPONENT_WIDTH 0x3#define OMAP4430_MODFREQDIV_EXPONENT_MASK (0x7 << 8)/*
@@ -1082,6 +1283,7 @@* CM_SSC_MODFREQDIV_DPLL_UNIPRO, CM_SSC_MODFREQDIV_DPLL_USB */ #define OMAP4430_MODFREQDIV_MANTISSA_SHIFT 0 +#define OMAP4430_MODFREQDIV_MANTISSA_WIDTH 0x7#define OMAP4430_MODFREQDIV_MANTISSA_MASK (0x7f << 0)/*
@@ -1089,69 +1291,68 @@* CM1_ABE_MCASP_CLKCTRL, CM1_ABE_MCBSP1_CLKCTRL, CM1_ABE_MCBSP2_CLKCTRL, * CM1_ABE_MCBSP3_CLKCTRL, CM1_ABE_PDM_CLKCTRL, CM1_ABE_SLIMBUS_CLKCTRL, * CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL, -* CM1_ABE_TIMER8_CLKCTRL, CM1_ABE_WDT3_CLKCTRL, CM_ALWON_MDMINTC_CLKCTRL, -* CM_ALWON_SR_CORE_CLKCTRL, CM_ALWON_SR_IVA_CLKCTRL, CM_ALWON_SR_MPU_CLKCTRL, -* CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL, -* CM_CM1_PROFILING_CLKCTRL, CM_CM2_PROFILING_CLKCTRL, -* CM_D2D_MODEM_ICR_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, CM_D2D_SAD2D_FW_CLKCTRL, -* CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, +* CM1_ABE_TIMER8_CLKCTRL, CM1_ABE_WDT3_CLKCTRL, CM_ALWON_SR_CORE_CLKCTRL, +* CM_ALWON_SR_IVA_CLKCTRL, CM_ALWON_SR_MPU_CLKCTRL, CM_CAM_FDIF_CLKCTRL, +* CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL, CM_CM1_PROFILING_CLKCTRL, +* CM_CM2_PROFILING_CLKCTRL, CM_D2D_MODEM_ICR_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, +* CM_D2D_SAD2D_FW_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, * CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL, -* CM_IVAHD_SL2_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL, -* CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, -* CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL, -* CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL, -* CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL, -* CM_L3INIT_USB_HOST_FS_CLKCTRL, CM_L3INIT_USB_OTG_CLKCTRL, -* CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_XHPI_CLKCTRL, CM_L3INSTR_L3_3_CLKCTRL, -* CM_L3INSTR_L3_INSTR_CLKCTRL, CM_L3INSTR_OCP_WP1_CLKCTRL, -* CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, CM_L3_2_L3_2_CLKCTRL, -* CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, CM_L4CFG_L4_CFG_CLKCTRL, -* CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, CM_L4PER_ADC_CLKCTRL, +* CM_IVAHD_SL2_CLKCTRL, CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, +* CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, +* CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_FS_CLKCTRL, +* CM_L3INIT_USB_OTG_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL, +* CM_L3INSTR_L3_3_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL, +* CM_L3INSTR_OCP_WP1_CLKCTRL, CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, +* CM_L3_2_L3_2_CLKCTRL, CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, +* CM_L4CFG_L4_CFG_CLKCTRL, CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, * CM_L4PER_DMTIMER10_CLKCTRL, CM_L4PER_DMTIMER11_CLKCTRL, * CM_L4PER_DMTIMER2_CLKCTRL, CM_L4PER_DMTIMER3_CLKCTRL, * CM_L4PER_DMTIMER4_CLKCTRL, CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_ELM_CLKCTRL, * CM_L4PER_GPIO2_CLKCTRL, CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, * CM_L4PER_GPIO5_CLKCTRL, CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_HDQ1W_CLKCTRL, -* CM_L4PER_HECC1_CLKCTRL, CM_L4PER_HECC2_CLKCTRL, CM_L4PER_I2C1_CLKCTRL, -* CM_L4PER_I2C2_CLKCTRL, CM_L4PER_I2C3_CLKCTRL, CM_L4PER_I2C4_CLKCTRL, -* CM_L4PER_I2C5_CLKCTRL, CM_L4PER_L4PER_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, -* CM_L4PER_MCASP3_CLKCTRL, CM_L4PER_MCBSP4_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, -* CM_L4PER_MCSPI2_CLKCTRL, CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, -* CM_L4PER_MGATE_CLKCTRL, CM_L4PER_MMCSD3_CLKCTRL, CM_L4PER_MMCSD4_CLKCTRL, -* CM_L4PER_MMCSD5_CLKCTRL, CM_L4PER_MSPROHG_CLKCTRL, -* CM_L4PER_SLIMBUS2_CLKCTRL, CM_L4PER_UART1_CLKCTRL, CM_L4PER_UART2_CLKCTRL, -* CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL, CM_L4SEC_AES1_CLKCTRL, -* CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL, +* CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL, CM_L4PER_I2C3_CLKCTRL, +* CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL, CM_L4PER_L4PER_CLKCTRL, +* CM_L4PER_MCBSP4_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL, +* CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MMCSD3_CLKCTRL, +* CM_L4PER_MMCSD4_CLKCTRL, CM_L4PER_MMCSD5_CLKCTRL, CM_L4PER_SLIMBUS2_CLKCTRL, +* CM_L4PER_UART1_CLKCTRL, CM_L4PER_UART2_CLKCTRL, CM_L4PER_UART3_CLKCTRL, +* CM_L4PER_UART4_CLKCTRL, CM_L4SEC_AES1_CLKCTRL, CM_L4SEC_AES2_CLKCTRL, +* CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL, * CM_L4SEC_PKAEIP29_CLKCTRL, CM_L4SEC_RNG_CLKCTRL, CM_L4SEC_SHA2MD51_CLKCTRL, * CM_MEMIF_DMM_CLKCTRL, CM_MEMIF_EMIF_1_CLKCTRL, CM_MEMIF_EMIF_2_CLKCTRL, -* CM_MEMIF_EMIF_FW_CLKCTRL, CM_MEMIF_EMIF_H1_CLKCTRL, -* CM_MEMIF_EMIF_H2_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, +* CM_MEMIF_EMIF_FW_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, * CM_TESLA_TESLA_CLKCTRL, CM_WKUP_GPIO1_CLKCTRL, CM_WKUP_KEYBOARD_CLKCTRL, -* CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_RTC_CLKCTRL, CM_WKUP_SARRAM_CLKCTRL, -* CM_WKUP_SYNCTIMER_CLKCTRL, CM_WKUP_TIMER12_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL, -* CM_WKUP_USIM_CLKCTRL, CM_WKUP_WDT1_CLKCTRL, CM_WKUP_WDT2_CLKCTRL +* CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_SARRAM_CLKCTRL, CM_WKUP_SYNCTIMER_CLKCTRL, +* CM_WKUP_TIMER12_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL, CM_WKUP_USIM_CLKCTRL, +* CM_WKUP_WDT1_CLKCTRL, CM_WKUP_WDT2_CLKCTRL */ #define OMAP4430_MODULEMODE_SHIFT 0 +#define OMAP4430_MODULEMODE_WIDTH 0x2#define OMAP4430_MODULEMODE_MASK (0x3 << 0)/* Used by CM_L4CFG_DYNAMICDEP */ #define OMAP4460_MPU_DYNDEP_SHIFT 19 +#define OMAP4460_MPU_DYNDEP_WIDTH 0x1#define OMAP4460_MPU_DYNDEP_MASK (1 << 19)/* Used by CM_DSS_DSS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_48MHZ_CLK_SHIFT 9 +#define OMAP4430_OPTFCLKEN_48MHZ_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_48MHZ_CLK_MASK (1 << 9)/* Used by CM_WKUP_BANDGAP_CLKCTRL */ #define OMAP4430_OPTFCLKEN_BGAP_32K_SHIFT 8 +#define OMAP4430_OPTFCLKEN_BGAP_32K_WIDTH 0x1#define OMAP4430_OPTFCLKEN_BGAP_32K_MASK (1 << 8)/* Used by CM_ALWON_USBPHY_CLKCTRL */ #define OMAP4430_OPTFCLKEN_CLK32K_SHIFT 8 +#define OMAP4430_OPTFCLKEN_CLK32K_WIDTH 0x1#define OMAP4430_OPTFCLKEN_CLK32K_MASK (1 << 8)/* Used by CM_CAM_ISS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_CTRLCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_CTRLCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_CTRLCLK_MASK (1 << 8)/*
@@ -1160,126 +1361,157 @@* CM_WKUP_GPIO1_CLKCTRL */ #define OMAP4430_OPTFCLKEN_DBCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_DBCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_DBCLK_MASK (1 << 8)/* Used by CM_MEMIF_DLL_CLKCTRL, CM_MEMIF_DLL_H_CLKCTRL */ #define OMAP4430_OPTFCLKEN_DLL_CLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_DLL_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_DLL_CLK_MASK (1 << 8)/* Used by CM_DSS_DSS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_DSSCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_DSSCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_DSSCLK_MASK (1 << 8)/* Used by CM_WKUP_USIM_CLKCTRL */ #define OMAP4430_OPTFCLKEN_FCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_FCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_FCLK_MASK (1 << 8)/* Used by CM1_ABE_SLIMBUS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_FCLK0_SHIFT 8 +#define OMAP4430_OPTFCLKEN_FCLK0_WIDTH 0x1#define OMAP4430_OPTFCLKEN_FCLK0_MASK (1 << 8)/* Used by CM1_ABE_SLIMBUS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_FCLK1_SHIFT 9 +#define OMAP4430_OPTFCLKEN_FCLK1_WIDTH 0x1#define OMAP4430_OPTFCLKEN_FCLK1_MASK (1 << 9)/* Used by CM1_ABE_SLIMBUS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_FCLK2_SHIFT 10 +#define OMAP4430_OPTFCLKEN_FCLK2_WIDTH 0x1#define OMAP4430_OPTFCLKEN_FCLK2_MASK (1 << 10)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_FUNC48MCLK_SHIFT 15 +#define OMAP4430_OPTFCLKEN_FUNC48MCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_FUNC48MCLK_MASK (1 << 15)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_SHIFT 13 +#define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_MASK (1 << 13)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_SHIFT 14 +#define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_MASK (1 << 14)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_SHIFT 11 +#define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_MASK (1 << 11)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_SHIFT 12 +#define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_MASK (1 << 12)/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */ #define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_MASK (1 << 8)/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */ #define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_SHIFT 9 +#define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_MASK (1 << 9)/* Used by CM_L3INIT_USBPHYOCP2SCP_CLKCTRL */ #define OMAP4430_OPTFCLKEN_PHY_48M_SHIFT 8 +#define OMAP4430_OPTFCLKEN_PHY_48M_WIDTH 0x1#define OMAP4430_OPTFCLKEN_PHY_48M_MASK (1 << 8)/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */ #define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_SHIFT 10 +#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_MASK (1 << 10)/* Renamed from OPTFCLKEN_SLIMBUS_CLK Used by CM1_ABE_SLIMBUS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_SHIFT 11 +#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_WIDTH 0x1#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_MASK (1 << 11)/* Used by CM_DSS_DSS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_SYS_CLK_SHIFT 10 +#define OMAP4430_OPTFCLKEN_SYS_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_SYS_CLK_MASK (1 << 10)/* Used by CM_WKUP_BANDGAP_CLKCTRL */ #define OMAP4460_OPTFCLKEN_TS_FCLK_SHIFT 8 +#define OMAP4460_OPTFCLKEN_TS_FCLK_WIDTH 0x1#define OMAP4460_OPTFCLKEN_TS_FCLK_MASK (1 << 8)/* Used by CM_DSS_DSS_CLKCTRL */ #define OMAP4430_OPTFCLKEN_TV_CLK_SHIFT 11 +#define OMAP4430_OPTFCLKEN_TV_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_TV_CLK_MASK (1 << 11)/* Used by CM_L3INIT_UNIPRO1_CLKCTRL */ #define OMAP4430_OPTFCLKEN_TXPHYCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_TXPHYCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_TXPHYCLK_MASK (1 << 8)/* Used by CM_L3INIT_USB_TLL_CLKCTRL */ #define OMAP4430_OPTFCLKEN_USB_CH0_CLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_USB_CH0_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_USB_CH0_CLK_MASK (1 << 8)/* Used by CM_L3INIT_USB_TLL_CLKCTRL */ #define OMAP4430_OPTFCLKEN_USB_CH1_CLK_SHIFT 9 +#define OMAP4430_OPTFCLKEN_USB_CH1_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_USB_CH1_CLK_MASK (1 << 9)/* Used by CM_L3INIT_USB_TLL_CLKCTRL */ #define OMAP4430_OPTFCLKEN_USB_CH2_CLK_SHIFT 10 +#define OMAP4430_OPTFCLKEN_USB_CH2_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_USB_CH2_CLK_MASK (1 << 10)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_MASK (1 << 8)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_SHIFT 9 +#define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_MASK (1 << 9)/* Used by CM_L3INIT_USB_HOST_CLKCTRL */ #define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_SHIFT 10 +#define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_MASK (1 << 10)/* Used by CM_L3INIT_USB_OTG_CLKCTRL */ #define OMAP4430_OPTFCLKEN_XCLK_SHIFT 8 +#define OMAP4430_OPTFCLKEN_XCLK_WIDTH 0x1#define OMAP4430_OPTFCLKEN_XCLK_MASK (1 << 8)/* Used by CM_EMU_OVERRIDE_DPLL_CORE */ #define OMAP4430_OVERRIDE_ENABLE_SHIFT 19 +#define OMAP4430_OVERRIDE_ENABLE_WIDTH 0x1#define OMAP4430_OVERRIDE_ENABLE_MASK (1 << 19)/* Used by CM_CLKSEL_ABE */ #define OMAP4430_PAD_CLKS_GATE_SHIFT 8 +#define OMAP4430_PAD_CLKS_GATE_WIDTH 0x1#define OMAP4430_PAD_CLKS_GATE_MASK (1 << 8)/* Used by CM_CORE_DVFS_CURRENT, CM_IVA_DVFS_CURRENT */ #define OMAP4430_PERF_CURRENT_SHIFT 0 +#define OMAP4430_PERF_CURRENT_WIDTH 0x8#define OMAP4430_PERF_CURRENT_MASK (0xff << 0)/*
@@ -1288,74 +1520,85 @@* CM_IVA_DVFS_PERF_TESLA */ #define OMAP4430_PERF_REQ_SHIFT 0 +#define OMAP4430_PERF_REQ_WIDTH 0x8#define OMAP4430_PERF_REQ_MASK (0xff << 0)/* Used by CM_RESTORE_ST */ #define OMAP4430_PHASE1_COMPLETED_SHIFT 0 +#define OMAP4430_PHASE1_COMPLETED_WIDTH 0x1#define OMAP4430_PHASE1_COMPLETED_MASK (1 << 0)/* Used by CM_RESTORE_ST */ #define OMAP4430_PHASE2A_COMPLETED_SHIFT 1 +#define OMAP4430_PHASE2A_COMPLETED_WIDTH 0x1#define OMAP4430_PHASE2A_COMPLETED_MASK (1 << 1)/* Used by CM_RESTORE_ST */ #define OMAP4430_PHASE2B_COMPLETED_SHIFT 2 +#define OMAP4430_PHASE2B_COMPLETED_WIDTH 0x1#define OMAP4430_PHASE2B_COMPLETED_MASK (1 << 2)/* Used by CM_EMU_DEBUGSS_CLKCTRL */ #define OMAP4430_PMD_STM_MUX_CTRL_SHIFT 20 +#define OMAP4430_PMD_STM_MUX_CTRL_WIDTH 0x2#define OMAP4430_PMD_STM_MUX_CTRL_MASK (0x3 << 20)/* Used by CM_EMU_DEBUGSS_CLKCTRL */ #define OMAP4430_PMD_TRACE_MUX_CTRL_SHIFT 22 +#define OMAP4430_PMD_TRACE_MUX_CTRL_WIDTH 0x2#define OMAP4430_PMD_TRACE_MUX_CTRL_MASK (0x3 << 22)/* Used by CM_DYN_DEP_PRESCAL */ #define OMAP4430_PRESCAL_SHIFT 0 +#define OMAP4430_PRESCAL_WIDTH 0x6#define OMAP4430_PRESCAL_MASK (0x3f << 0)/* Used by REVISION_CM1, REVISION_CM2 */ #define OMAP4430_R_RTL_SHIFT 11 +#define OMAP4430_R_RTL_WIDTH 0x5#define OMAP4430_R_RTL_MASK (0x1f << 11)/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL */ #define OMAP4430_SAR_MODE_SHIFT 4 +#define OMAP4430_SAR_MODE_WIDTH 0x1#define OMAP4430_SAR_MODE_MASK (1 << 4)/* Used by CM_SCALE_FCLK */ #define OMAP4430_SCALE_FCLK_SHIFT 0 +#define OMAP4430_SCALE_FCLK_WIDTH 0x1#define OMAP4430_SCALE_FCLK_MASK (1 << 0)/* Used by REVISION_CM1, REVISION_CM2 */ #define OMAP4430_SCHEME_SHIFT 30 +#define OMAP4430_SCHEME_WIDTH 0x2#define OMAP4430_SCHEME_MASK (0x3 << 30)/* Used by CM_L4CFG_DYNAMICDEP */ #define OMAP4430_SDMA_DYNDEP_SHIFT 11 +#define OMAP4430_SDMA_DYNDEP_WIDTH 0x1#define OMAP4430_SDMA_DYNDEP_MASK (1 << 11)/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */ #define OMAP4430_SDMA_STATDEP_SHIFT 11 +#define OMAP4430_SDMA_STATDEP_WIDTH 0x1#define OMAP4430_SDMA_STATDEP_MASK (1 << 11)/* Used by CM_CLKSEL_ABE */ #define OMAP4430_SLIMBUS_CLK_GATE_SHIFT 10 +#define OMAP4430_SLIMBUS_CLK_GATE_WIDTH 0x1#define OMAP4430_SLIMBUS_CLK_GATE_MASK (1 << 10)/* * Used by CM1_ABE_AESS_CLKCTRL, CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, -* CM_D2D_SAD2D_CLKCTRL, CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, -* CM_DUCATI_DUCATI_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL, -* CM_IVAHD_IVAHD_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL, +* CM_D2D_SAD2D_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, +* CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL, * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, -* CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL, -* CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL, * CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_FS_CLKCTRL, -* CM_L3INIT_USB_OTG_CLKCTRL, CM_L3INIT_XHPI_CLKCTRL, -* CM_L4SEC_CRYPTODMA_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, -* CM_TESLA_TESLA_CLKCTRL +* CM_L3INIT_USB_OTG_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL, CM_MPU_MPU_CLKCTRL, +* CM_SDMA_SDMA_CLKCTRL, CM_TESLA_TESLA_CLKCTRL */ #define OMAP4430_STBYST_SHIFT 18 +#define OMAP4430_STBYST_WIDTH 0x1#define OMAP4430_STBYST_MASK (1 << 18)/*
@@ -1364,10 +1607,12 @@* CM_IDLEST_DPLL_UNIPRO, CM_IDLEST_DPLL_USB */ #define OMAP4430_ST_DPLL_CLK_SHIFT 0 +#define OMAP4430_ST_DPLL_CLK_WIDTH 0x1#define OMAP4430_ST_DPLL_CLK_MASK (1 << 0)/* Used by CM_CLKDCOLDO_DPLL_USB */ #define OMAP4430_ST_DPLL_CLKDCOLDO_SHIFT 9 +#define OMAP4430_ST_DPLL_CLKDCOLDO_WIDTH 0x1#define OMAP4430_ST_DPLL_CLKDCOLDO_MASK (1 << 9)/*
@@ -1375,14 +1620,17 @@* CM_DIV_M2_DPLL_MPU, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_USB */ #define OMAP4430_ST_DPLL_CLKOUT_SHIFT 9 +#define OMAP4430_ST_DPLL_CLKOUT_WIDTH 0x1#define OMAP4430_ST_DPLL_CLKOUT_MASK (1 << 9)/* Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE, CM_DIV_M3_DPLL_PER */ #define OMAP4430_ST_DPLL_CLKOUTHIF_SHIFT 9 +#define OMAP4430_ST_DPLL_CLKOUTHIF_WIDTH 0x1#define OMAP4430_ST_DPLL_CLKOUTHIF_MASK (1 << 9)/* Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO */ #define OMAP4430_ST_DPLL_CLKOUTX2_SHIFT 11 +#define OMAP4430_ST_DPLL_CLKOUTX2_WIDTH 0x1#define OMAP4430_ST_DPLL_CLKOUTX2_MASK (1 << 11)/*
@@ -1390,6 +1638,7 @@* CM_DIV_M4_DPLL_PER */ #define OMAP4430_ST_HSDIVIDER_CLKOUT1_SHIFT 9 +#define OMAP4430_ST_HSDIVIDER_CLKOUT1_WIDTH 0x1#define OMAP4430_ST_HSDIVIDER_CLKOUT1_MASK (1 << 9)/*
@@ -1397,14 +1646,17 @@* CM_DIV_M5_DPLL_PER */ #define OMAP4430_ST_HSDIVIDER_CLKOUT2_SHIFT 9 +#define OMAP4430_ST_HSDIVIDER_CLKOUT2_WIDTH 0x1#define OMAP4430_ST_HSDIVIDER_CLKOUT2_MASK (1 << 9)/* Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER */ #define OMAP4430_ST_HSDIVIDER_CLKOUT3_SHIFT 9 +#define OMAP4430_ST_HSDIVIDER_CLKOUT3_WIDTH 0x1#define OMAP4430_ST_HSDIVIDER_CLKOUT3_MASK (1 << 9)/* Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_PER */ #define OMAP4430_ST_HSDIVIDER_CLKOUT4_SHIFT 9 +#define OMAP4430_ST_HSDIVIDER_CLKOUT4_WIDTH 0x1#define OMAP4430_ST_HSDIVIDER_CLKOUT4_MASK (1 << 9)/*
@@ -1413,18 +1665,22 @@* CM_IDLEST_DPLL_UNIPRO, CM_IDLEST_DPLL_USB */ #define OMAP4430_ST_MN_BYPASS_SHIFT 8 +#define OMAP4430_ST_MN_BYPASS_WIDTH 0x1#define OMAP4430_ST_MN_BYPASS_MASK (1 << 8)/* Used by CM_SYS_CLKSEL */ #define OMAP4430_SYS_CLKSEL_SHIFT 0 +#define OMAP4430_SYS_CLKSEL_WIDTH 0x3#define OMAP4430_SYS_CLKSEL_MASK (0x7 << 0)/* Used by CM_L4CFG_DYNAMICDEP */ #define OMAP4430_TESLA_DYNDEP_SHIFT 1 +#define OMAP4430_TESLA_DYNDEP_WIDTH 0x1#define OMAP4430_TESLA_DYNDEP_MASK (1 << 1)/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */ #define OMAP4430_TESLA_STATDEP_SHIFT 1 +#define OMAP4430_TESLA_STATDEP_WIDTH 0x1#define OMAP4430_TESLA_STATDEP_MASK (1 << 1)/*
@@ -1433,13 +1689,16 @@* CM_L4PER_DYNAMICDEP, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP */ #define OMAP4430_WINDOWSIZE_SHIFT 24 +#define OMAP4430_WINDOWSIZE_WIDTH 0x4#define OMAP4430_WINDOWSIZE_MASK (0xf << 24)/* Used by REVISION_CM1, REVISION_CM2 */ #define OMAP4430_X_MAJOR_SHIFT 8 +#define OMAP4430_X_MAJOR_WIDTH 0x3#define OMAP4430_X_MAJOR_MASK (0x7 << 8)/* Used by REVISION_CM1, REVISION_CM2 */ #define OMAP4430_Y_MINOR_SHIFT 0 +#define OMAP4430_Y_MINOR_WIDTH 0x6#define OMAP4430_Y_MINOR_MASK (0x3f << 0)#endif
Signature · 1 line
1.7.1
PATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
In reply to Rajendra NayakAs we move to Common clk framework use clk_prepare_enable() instead of clk_enable() and similarly clk_disable_unprepare() instead of clk_disable()
Based on initial changes from Mike turquette.
--- arch/arm/mach-omap2/board-apollon.c | 4 ++-- arch/arm/mach-omap2/board-h4.c | 6 +++--- arch/arm/mach-omap2/board-omap4panda.c | 2 +- arch/arm/mach-omap2/clock3xxx.c | 8 ++++---- arch/arm/mach-omap2/display.c | 4 ++-- arch/arm/mach-omap2/gpmc.c | 2 +- arch/arm/mach-omap2/omap_hwmod.c | 14 +++++++------- arch/arm/mach-omap2/omap_phy_internal.c | 12 ++++++------ arch/arm/mach-omap2/pm24xx.c | 4 ++-- arch/arm/mach-omap2/usb-fs.c | 4 ++-- 10 files changed, 30 insertions(+), 30 deletions(-)
arch/arm/mach-omap2/board-apollon.c +2 -2
@@ -205,7 +205,7 @@ static inline void __init apollon_init_smc91x(void)return ; } -clk_enable (gpmc_fck); +clk_prepare_enable (gpmc_fck); rate =clk_get_rate (gpmc_fck); eth_cs =APOLLON_ETH_CS ;
@@ -249,7 +249,7 @@ static inline void __init apollon_init_smc91x(void)gpmc_cs_free (APOLLON_ETH_CS ); } out: -clk_disable (gpmc_fck); +clk_disable_unprepare (gpmc_fck);clk_put (gpmc_fck); }
arch/arm/mach-omap2/board-h4.c +3 -3
@@ -267,9 +267,9 @@ static inline void __init h4_init_debug(void)return ; } -clk_enable (gpmc_fck); +clk_prepare_enable (gpmc_fck); rate =clk_get_rate (gpmc_fck); -clk_disable (gpmc_fck); +clk_disable_unprepare (gpmc_fck);clk_put (gpmc_fck);if (is_gpmc_muxed ())
@@ -313,7 +313,7 @@ static inline void __init h4_init_debug(void)gpmc_cs_free (eth_cs); out: -clk_disable (gpmc_fck); +clk_disable_unprepare (gpmc_fck);clk_put (gpmc_fck); }
arch/arm/mach-omap2/board-omap4panda.c +1 -1
@@ -172,7 +172,7 @@ static void __init omap4_ehci_init(void)return ; }clk_set_rate (phy_ref_clk,19200000 ); -clk_enable (phy_ref_clk); +clk_prepare_enable (phy_ref_clk);/* disable the power to the usb hub prior to init and reset phy+hub */ ret = gpio_request_array(panda_ehci_gpios,
arch/arm/mach-omap2/clock3xxx.c +4 -4
@@ -64,15 +64,15 @@ void __init omap3_clk_lock_dpll5(void) dpll5_clk =clk_get (NULL ,"dpll5_ck" );clk_set_rate (dpll5_clk,DPLL5_FREQ_FOR_USBHOST ); -clk_enable (dpll5_clk); +clk_prepare_enable (dpll5_clk);/* Program dpll5_m2_clk divider for no division */ dpll5_m2_clk =clk_get (NULL ,"dpll5_m2_ck" ); -clk_enable (dpll5_m2_clk); +clk_prepare_enable (dpll5_m2_clk);clk_set_rate (dpll5_m2_clk,DPLL5_FREQ_FOR_USBHOST ); -clk_disable (dpll5_m2_clk); -clk_disable (dpll5_clk); +clk_disable_unprepare (dpll5_m2_clk); +clk_disable_unprepare (dpll5_clk);return ; }
arch/arm/mach-omap2/display.c +2 -2
@@ -471,7 +471,7 @@ int omap_dss_reset(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++)if (oc->_clk) -clk_enable (oc->_clk); +clk_prepare_enable (oc->_clk);dispc_disable_outputs ();
@@ -498,7 +498,7 @@ int omap_dss_reset(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++)if (oc->_clk) -clk_disable (oc->_clk); +clk_disable_unprepare (oc->_clk); r = (c ==MAX_MODULE_SOFTRESET_WAIT ) ? -ETIMEDOUT :0 ;
arch/arm/mach-omap2/gpmc.c +1 -1
@@ -749,7 +749,7 @@ static int __init gpmc_init(void)BUG (); } -clk_enable (gpmc_l3_clk); +clk_prepare_enable (gpmc_l3_clk); l =gpmc_read_reg (GPMC_REVISION );printk (KERN_INFO "GPMC revision %d.%d\n" , (l >>4 ) &0x0f , l &0x0f );
arch/arm/mach-omap2/omap_hwmod.c +7 -7
@@ -693,7 +693,7 @@ static int _enable_clocks(struct omap_hwmod *oh)pr_debug ("omap_hwmod: %s: enabling clocks\n" , oh->name);if (oh->_clk) -clk_enable (oh->_clk); +clk_prepare_enable (oh->_clk); p = oh->slave_ports.next;
@@ -701,7 +701,7 @@ static int _enable_clocks(struct omap_hwmod *oh) os =_fetch_next_ocp_if (&p, &i);if (os->_clk && (os->flags &OCPIF_SWSUP_IDLE )) -clk_enable (os->_clk); +clk_prepare_enable (os->_clk); }/* The opt clocks are controlled by the device driver. */
@@ -724,7 +724,7 @@ static int _disable_clocks(struct omap_hwmod *oh)pr_debug ("omap_hwmod: %s: disabling clocks\n" , oh->name);if (oh->_clk) -clk_disable (oh->_clk); +clk_disable_unprepare (oh->_clk); p = oh->slave_ports.next;
@@ -732,7 +732,7 @@ static int _disable_clocks(struct omap_hwmod *oh) os =_fetch_next_ocp_if (&p, &i);if (os->_clk && (os->flags &OCPIF_SWSUP_IDLE )) -clk_disable (os->_clk); +clk_disable_unprepare (os->_clk); }/* The opt clocks are controlled by the device driver. */
@@ -751,7 +751,7 @@ static void _enable_optional_clocks(struct omap_hwmod *oh)if (oc->_clk) {pr_debug ("omap_hwmod: enable %s:%s\n" , oc->role, oc->_clk->name); -clk_enable (oc->_clk); +clk_prepare_enable (oc->_clk); } }
@@ -766,7 +766,7 @@ static void _disable_optional_clocks(struct omap_hwmod *oh)if (oc->_clk) {pr_debug ("omap_hwmod: disable %s:%s\n" , oc->role, oc->_clk->name); -clk_disable (oc->_clk); +clk_disable_unprepare (oc->_clk); } }
@@ -2095,7 +2095,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)/* XXX omap_iclk_deny_idle(c); */ }else {/* XXX omap_iclk_allow_idle(c); */ -clk_enable (os->_clk); +clk_prepare_enable (os->_clk); } }
arch/arm/mach-omap2/omap_phy_internal.c +6 -6
@@ -93,15 +93,15 @@ int omap4430_phy_set_clk(struct device *dev, int on)if (on && !state) {/* Enable the phy clocks */ -clk_enable (phyclk); -clk_enable (clk48m); -clk_enable (clk32k); +clk_prepare_enable (phyclk); +clk_prepare_enable (clk48m); +clk_prepare_enable (clk32k); state =1 ; }else if (state) {/* Disable the phy clocks */ -clk_disable (phyclk); -clk_disable (clk48m); -clk_disable (clk32k); +clk_disable_unprepare (phyclk); +clk_disable_unprepare (clk48m); +clk_disable_unprepare (clk32k); state =0 ; }return 0 ;
arch/arm/mach-omap2/pm24xx.c +2 -2
@@ -81,7 +81,7 @@ static int omap2_enter_full_retention(void)* oscillator itself it will be disabled if/when we enter retention * mode. */ -clk_disable (osc_ck); +clk_disable_unprepare (osc_ck);/* Clear old wake-up events */ /* REVISIT: These write to reserved bits? */
@@ -115,7 +115,7 @@ static int omap2_enter_full_retention(void) no_sleep:omap2_gpio_resume_after_idle (); -clk_enable (osc_ck); +clk_prepare_enable (osc_ck);/* clear CORE wake-up events */ omap2_prm_write_mod_reg (0xffffffff ,CORE_MOD ,PM_WKST1 );
arch/arm/mach-omap2/usb-fs.c +2 -2
@@ -344,7 +344,7 @@ void __init omap2_usbfs_init(struct omap_usb_config *pdata)if (IS_ERR (ick))return ; -clk_enable (ick); +clk_prepare_enable (ick); pdata->usb0_init = omap2_usb0_init; pdata->usb1_init = omap2_usb1_init; pdata->usb2_init = omap2_usb2_init;
@@ -352,7 +352,7 @@ void __init omap2_usbfs_init(struct omap_usb_config *pdata)ohci_device_init (pdata);otg_device_init (pdata);omap_otg_init (pdata); -clk_disable (ick); +clk_disable_unprepare (ick);clk_put (ick); }
Signature · 1 line
1.7.1
PATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
Quoted 7 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()Based on initial changes from Mike turquette.
Signed-off-by Rajendra Nayak <[email protected]>
Hi Rajendra,
This change looks good except for two questions I have below, related to calling prepare in an interrupt context. If those are non-issues then please add my:
(or my Reviewed-by... I can never remember which one is correct)
snip
Quoted 14 lines
arch/arm/mach-omap2/display.c +1
-1@@ -471,7 +471,7 @@ int omap_dss_reset(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++)if (oc->_clk) -clk_enable (oc->_clk); +clk_prepare_enable (oc->_clk);dispc_disable_outputs ();
arch/arm/mach-omap2/display.c int omap_dss_reset(struct omap_hwmod *oh) · line 504
Quoted 8 lines
arch/arm/mach-omap2/display.c +1
-1@@ -498,7 +498,7 @@ int omap_dss_reset(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++)if (oc->_clk) -clk_disable (oc->_clk); +clk_disable_unprepare (oc->_clk); r = (c ==MAX_MODULE_SOFTRESET_WAIT ) ? -ETIMEDOUT :0 ;
omap_dss_reset gets used by hwmod/omap_device, right? Does the reset path ever get called in an interrupt context? If so clk_prepare might sleep, which is bad.
snip
arch/arm/mach-omap2/omap_hwmod.c static int _enable_clocks(struct omap_hwmod *oh) · line 697
Quoted 11 lines
arch/arm/mach-omap2/omap_hwmod.c +1
-1@@ -693,7 +693,7 @@ static int _enable_clocks(struct omap_hwmod *oh)pr_debug ("omap_hwmod: %s: enabling clocks\n" , oh->name);if (oh->_clk) -clk_enable (oh->_clk); +clk_prepare_enable (oh->_clk);
The same question above applies to basically all of the hwmod function changes below. I don't know if runtime pm invokes these in an interrupt context or not, but it is something to think about.
Regards,
Mike
PATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
Quoted 41 lines · Mike Turquette
Quoted 7 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()Based on initial changes from Mike turquette.
Signed-off-by Rajendra Nayak<[email protected]>Hi Rajendra,
This change looks good except for two questions I have below, related to calling prepare in an interrupt context. If those are non-issues then please add my:
Acked-by Mike Turquette<[email protected]>(or my Reviewed-by... I can never remember which one is correct)
snip
Quoted 20 lines
arch/arm/mach-omap2/display.c +2
-2@@ -471,7 +471,7 @@ int omap_dss_reset(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i>0 ; i--, oc++)if (oc->_clk) -clk_enable (oc->_clk); +clk_prepare_enable (oc->_clk);dispc_disable_outputs ();@@ -498,7 +498,7 @@ int omap_dss_reset(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i>0 ; i--, oc++)if (oc->_clk) -clk_disable (oc->_clk); +clk_disable_unprepare (oc->_clk);
Quoted 6 lines
arch/arm/mach-omap2/display.c int omap_dss_reset(struct omap_hwmod *oh) · line 504
Quoted 2 lines
arch/arm/mach-omap2/display.c +0
-0r = (c ==MAX_MODULE_SOFTRESET_WAIT ) ? -ETIMEDOUT :0 ;
omap_dss_resetgets used by hwmod/omap_device, right? Does the reset path ever get called in an interrupt context? If soclk_preparemight sleep, which is bad.
right, I completely missed this. Will take a look at these and others too. thanks.
regards,
Rajendra
Quoted 21 lines
snip
arch/arm/mach-omap2/omap_hwmod.c static int _enable_clocks(struct omap_hwmod *oh) · line 697
Quoted 11 lines
arch/arm/mach-omap2/omap_hwmod.c +1
-1@@ -693,7 +693,7 @@ static int _enable_clocks(struct omap_hwmod *oh)pr_debug ("omap_hwmod: %s: enabling clocks\n" , oh->name);if (oh->_clk) -clk_enable (oh->_clk); +clk_prepare_enable (oh->_clk);The same question above applies to basically all of the hwmod function changes below. I don't know if runtime pm invokes these in an interrupt context or not, but it is something to think about.
Regards,
Mike
Tony Lindgren
maintainerPATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
Quoted 7 lines · Rajendra Nayak
Quoted 6 lines · Mike Turquette
Quoted 5 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()Based on initial changes from Mike turquette.
Sounds like these kind of patches should be a separate series to prepare for the common clk fwk conversion? It seems these could already get merged separately?
Tony
PATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
Quoted 7 lines · Tony Lindgren
Quoted 6 lines · Rajendra Nayak
Quoted 5 lines · Mike Turquette
Quoted 4 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()
Quoted 5 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Based on initial changes from Mike turquette.
Sounds like these kind of patches should be a separate series to prepare for the common clk fwk conversion? It seems these could already get merged separately?
yes, I will post them out separately as a preparatory series for CCF conversion.
I also have some to get rid of the omap_clk_get_by_name() usage and direct dereferencing of 'struct clk'.
Paul, are you ok to look at them as preparatory patches for CCF conversion too?
Quoted 2 lines
Tony
Paul Walmsley
maintainerPATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
Quoted 2 lines · Rajendra Nayak
Paul, are you ok to look at them as preparatory patches for CCF conversion too?
Yes. Also it looks like some of these patches should go through Mike since they add features to the CCF, so it's probably best to break those out into a separate series too.
- Paul
PATCH 4/29 ARM: omap: clk: use clk_prepare_enable and clk_disable_unprepare
Quoted 8 lines · Paul Walmsley
Quoted 2 lines · Rajendra Nayak
Paul, are you ok to look at them as preparatory patches for CCF conversion too?
Yes. Also it looks like some of these patches should go through Mike since they add features to the CCF, so it's probably best to break those out into a separate series too.
ok, thanks will do.
Quoted 2 lines
- Paul
PATCH 5/29 mmc: omap_hsmmc: use clk_prepare_enable and clk_disable_unprepare
In reply to Rajendra NayakAs we move to Common clk framework use clk_prepare_enable() instead of clk_enable() and similarly clk_disable_unprepare() instead of clk_disable()
--- drivers/mmc/host/omap_hsmmc.c | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-)
drivers/mmc/host/omap_hsmmc.c +7 -7
@@ -1097,7 +1097,7 @@ static int omap_hsmmc_switch_opcond(struct omap_hsmmc_host *host, int vdd)/* Disable the clocks */ pm_runtime_put_sync (host->dev);if (host->dbclk) -clk_disable (host->dbclk); +clk_disable_unprepare (host->dbclk);/* Turn the power off */ ret =mmc_slot (host).set_power (host->dev, host->slot_id,0 ,0 );
@@ -1108,7 +1108,7 @@ static int omap_hsmmc_switch_opcond(struct omap_hsmmc_host *host, int vdd) vdd);pm_runtime_get_sync (host->dev);if (host->dbclk) -clk_enable (host->dbclk); +clk_prepare_enable (host->dbclk);if (ret !=0 ) goto err;
@@ -1908,7 +1908,7 @@ static int __devinit omap_hsmmc_probe(struct platform_device *pdev)if (IS_ERR (host->dbclk)) {dev_warn (mmc_dev (host->mmc),"Failed to get debounce clk\n" ); host->dbclk =NULL ; - }else if (clk_enable (host->dbclk) !=0 ) { + }else if (clk_prepare_enable (host->dbclk) !=0 ) {dev_warn (mmc_dev (host->mmc),"Failed to enable debounce clk\n" );clk_put (host->dbclk); host->dbclk =NULL ;
@@ -2032,7 +2032,7 @@ err_irq:pm_runtime_disable (host->dev);clk_put (host->fclk);if (host->dbclk) { -clk_disable (host->dbclk); +clk_disable_unprepare (host->dbclk);clk_put (host->dbclk); } err1:
@@ -2067,7 +2067,7 @@ static int __devexit omap_hsmmc_remove(struct platform_device *pdev)pm_runtime_disable (host->dev);clk_put (host->fclk);if (host->dbclk) { -clk_disable (host->dbclk); +clk_disable_unprepare (host->dbclk);clk_put (host->dbclk); }
@@ -2125,7 +2125,7 @@ static int omap_hsmmc_suspend(struct device *dev) }if (host->dbclk) -clk_disable (host->dbclk); +clk_disable_unprepare (host->dbclk); err:pm_runtime_put_sync (host->dev);return ret;
@@ -2146,7 +2146,7 @@ static int omap_hsmmc_resume(struct device *dev)pm_runtime_get_sync (host->dev);if (host->dbclk) -clk_enable (host->dbclk); +clk_prepare_enable (host->dbclk);if (!(host->mmc->pm_flags &MMC_PM_KEEP_POWER ))omap_hsmmc_conf_bus_power (host);
Signature · 1 line
1.7.1
PATCH 6/29 hwrng: omap: use clk_prepare_enable and clk_disable_unprepare
In reply to Rajendra NayakAs we move to Common clk framework use clk_prepare_enable() instead of clk_enable() and similarly clk_disable_unprepare() instead of clk_disable()
--- drivers/char/hw_random/omap-rng.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/char/hw_random/omap-rng.c +3 -3
@@ -110,7 +110,7 @@ static int __devinit omap_rng_probe(struct platform_device *pdev) ret =PTR_ERR (rng_ick);return ret; }else -clk_enable (rng_ick); +clk_prepare_enable (rng_ick); } res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
@@ -138,7 +138,7 @@ err_register: rng_base =NULL ; err_ioremap:if (cpu_is_omap24xx ()) { -clk_disable (rng_ick); +clk_disable_unprepare (rng_ick);clk_put (rng_ick); }return ret;
@@ -151,7 +151,7 @@ static int __exit omap_rng_remove(struct platform_device *pdev)omap_rng_write_reg (RNG_MASK_REG ,0x0 );if (cpu_is_omap24xx ()) { -clk_disable (rng_ick); +clk_disable_unprepare (rng_ick);clk_put (rng_ick); }
Signature · 1 line
1.7.1
PATCH 7/29 mfd: omap-usb: use clk_prepare_enable and clk_disable_unprepare
In reply to Rajendra NayakAs we move to Common clk framework use clk_prepare_enable() instead of clk_enable() and similarly clk_disable_unprepare() instead of clk_disable()
--- drivers/mfd/omap-usb-host.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-)
drivers/mfd/omap-usb-host.c +14 -14
@@ -438,18 +438,18 @@ static int usbhs_runtime_resume(struct device *dev)spin_lock_irqsave (&omap->lock, flags);if (omap->ehci_logic_fck && !IS_ERR (omap->ehci_logic_fck)) -clk_enable (omap->ehci_logic_fck); +clk_prepare_enable (omap->ehci_logic_fck);if (is_ehci_tll_mode (pdata->port_mode[0 ])) { -clk_enable (omap->usbhost_p1_fck); -clk_enable (omap->usbtll_p1_fck); +clk_prepare_enable (omap->usbhost_p1_fck); +clk_prepare_enable (omap->usbtll_p1_fck); }if (is_ehci_tll_mode (pdata->port_mode[1 ])) { -clk_enable (omap->usbhost_p2_fck); -clk_enable (omap->usbtll_p2_fck); +clk_prepare_enable (omap->usbhost_p2_fck); +clk_prepare_enable (omap->usbtll_p2_fck); } -clk_enable (omap->utmi_p1_fck); -clk_enable (omap->utmi_p2_fck); +clk_prepare_enable (omap->utmi_p1_fck); +clk_prepare_enable (omap->utmi_p2_fck);spin_unlock_irqrestore (&omap->lock, flags);
@@ -472,18 +472,18 @@ static int usbhs_runtime_suspend(struct device *dev)spin_lock_irqsave (&omap->lock, flags);if (is_ehci_tll_mode (pdata->port_mode[0 ])) { -clk_disable (omap->usbhost_p1_fck); -clk_disable (omap->usbtll_p1_fck); +clk_disable_unprepare (omap->usbhost_p1_fck); +clk_disable_unprepare (omap->usbtll_p1_fck); }if (is_ehci_tll_mode (pdata->port_mode[1 ])) { -clk_disable (omap->usbhost_p2_fck); -clk_disable (omap->usbtll_p2_fck); +clk_disable_unprepare (omap->usbhost_p2_fck); +clk_disable_unprepare (omap->usbtll_p2_fck); } -clk_disable (omap->utmi_p2_fck); -clk_disable (omap->utmi_p1_fck); +clk_disable_unprepare (omap->utmi_p2_fck); +clk_disable_unprepare (omap->utmi_p1_fck);if (omap->ehci_logic_fck && !IS_ERR (omap->ehci_logic_fck)) -clk_disable (omap->ehci_logic_fck); +clk_disable_unprepare (omap->ehci_logic_fck);spin_unlock_irqrestore (&omap->lock, flags);
Signature · 1 line
1.7.1
PATCH 7/29 mfd: omap-usb: use clk_prepare_enable and clk_disable_unprepare
Hi Rajendra,
Quoted 9 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()Signed-off-by Rajendra Nayak <[email protected]>Cc Samuel Ortiz <[email protected]>--- drivers/mfd/omap-usb-host.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-)
Patch applied, many thanks.
Cheers,
Samuel.
Signature · 2 lines
Intel Open Source Technology Centre http://oss.intel.com/
PATCH 7/29 mfd: omap-usb: use clk_prepare_enable and clk_disable_unprepare
Hi Samuel,
Quoted 7 lines · Samuel Ortiz
Hi Rajendra,
Quoted 4 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()
Quoted 6 lines
Quoted 5 lines
Signed-off-by Rajendra Nayak<[email protected]>Cc Samuel Ortiz<[email protected]>--- drivers/mfd/omap-usb-host.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-)Patch applied, many thanks.
Sorry, I was asked to base these changes on top of work done by Keshava [1], to split the driver, which is still under review/not pulled.
I am waiting for those to settle to repost these changes. Can you please drop this one for now?
Sorry for the confusion.
regards,
Rajendra
[1] http://permalink.gmane.org/gmane.linux.ports.arm.omap/79306
Quoted 4 lines
Cheers,
Samuel.
PATCH 7/29 mfd: omap-usb: use clk_prepare_enable and clk_disable_unprepare
Hi Rajendra,
Quoted 15 lines · Rajendra Nayak
Hi Samuel,
Quoted 12 lines · Samuel Ortiz
Hi Rajendra,
Quoted 9 lines · Rajendra Nayak
As we move to Common clk framework use
clk_prepare_enable()instead ofclk_enable()and similarlyclk_disable_unprepare()instead ofclk_disable()Signed-off-by Rajendra Nayak<[email protected]>Cc Samuel Ortiz<[email protected]>--- drivers/mfd/omap-usb-host.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-)
Quoted 7 lines
Quoted 1 line
Patch applied, many thanks.
Sorry, I was asked to base these changes on top of work done by Keshava [1], to split the driver, which is still under review/not pulled.
I am waiting for those to settle to repost these changes. Can you please drop this one for now?
I just did, although I think Keshava could have based his work on top of yours, as he's rebasing his patchset at the moment.
Anyway, patch is removed now.
Cheers,
Samuel.
Signature · 2 lines
Intel Open Source Technology Centre http://oss.intel.com/
PATCH 8/29 ARM: omap: hwmod: get rid of all omap_clk_get_by_name usage
In reply to Rajendra NayakMoving to COMMON clk for OMAP would mean we no longer use internal lookup mechanism like omap_clk_get_by_name(). get rid of all its usage mostly from hwmod and omap_device code.
Also use IS_ERR_OR_NULL() for error checking.
Moving to clk_get() also means the respective platforms need the clkdev tables updated with an entry for all clocks used by hwmod to have clock name same as the alias.
Based on original changes from Mike Turquette.
--- arch/arm/mach-omap2/clock2420_data.c | 17 +++++++++++++++++ arch/arm/mach-omap2/clock2430_data.c | 21 +++++++++++++++++++++ arch/arm/mach-omap2/clock3xxx_data.c | 24 ++++++++++++++++++++++++ arch/arm/mach-omap2/clock44xx_data.c | 17 +++++++++++++++++ arch/arm/mach-omap2/omap_hwmod.c | 12 ++++++------ arch/arm/plat-omap/omap_device.c | 6 +++--- 6 files changed, 88 insertions(+), 9 deletions(-)
arch/arm/mach-omap2/clock2420_data.c +17 -0
@@ -1808,6 +1808,7 @@ static struct omap_clk omap2420_clks[] = {CLK (NULL ,"gfx_ick" , &gfx_ick,CK_242X ),/* DSS domain clocks */ CLK ("omapdss_dss" ,"ick" , &dss_ick,CK_242X ), +CLK (NULL ,"dss_ick" , &dss_ick,CK_242X ),CLK (NULL ,"dss1_fck" , &dss1_fck,CK_242X ),CLK (NULL ,"dss2_fck" , &dss2_fck,CK_242X ), CLK(NULL, "dss_54m_fck", &dss_54m_fck, CK_242X),
@@ -1847,12 +1848,16 @@ static struct omap_clk omap2420_clks[] = {CLK (NULL ,"gpt12_ick" , &gpt12_ick,CK_242X ),CLK (NULL ,"gpt12_fck" , &gpt12_fck,CK_242X ),CLK ("omap-mcbsp.1" ,"ick" , &mcbsp1_ick,CK_242X ), +CLK (NULL ,"mcbsp1_ick" , &mcbsp1_ick,CK_242X ),CLK (NULL ,"mcbsp1_fck" , &mcbsp1_fck,CK_242X ),CLK ("omap-mcbsp.2" ,"ick" , &mcbsp2_ick,CK_242X ), +CLK (NULL ,"mcbsp2_ick" , &mcbsp2_ick,CK_242X ),CLK (NULL ,"mcbsp2_fck" , &mcbsp2_fck,CK_242X ),CLK ("omap2_mcspi.1" ,"ick" , &mcspi1_ick,CK_242X ), +CLK (NULL ,"mcspi1_ick" , &mcspi1_ick,CK_242X ),CLK (NULL ,"mcspi1_fck" , &mcspi1_fck,CK_242X ),CLK ("omap2_mcspi.2" ,"ick" , &mcspi2_ick,CK_242X ), +CLK (NULL ,"mcspi2_ick" , &mcspi2_ick,CK_242X ),CLK (NULL ,"mcspi2_fck" , &mcspi2_fck,CK_242X ),CLK (NULL ,"uart1_ick" , &uart1_ick,CK_242X ), CLK(NULL, "uart1_fck", &uart1_fck, CK_242X),
@@ -1863,12 +1868,15 @@ static struct omap_clk omap2420_clks[] = {CLK (NULL ,"gpios_ick" , &gpios_ick,CK_242X ),CLK (NULL ,"gpios_fck" , &gpios_fck,CK_242X ),CLK ("omap_wdt" ,"ick" , &mpu_wdt_ick,CK_242X ), +CLK (NULL ,"mpu_wdt_ick" , &mpu_wdt_ick,CK_242X ),CLK (NULL ,"mpu_wdt_fck" , &mpu_wdt_fck,CK_242X ),CLK (NULL ,"sync_32k_ick" , &sync_32k_ick,CK_242X ),CLK (NULL ,"wdt1_ick" , &wdt1_ick,CK_242X ),CLK (NULL ,"omapctrl_ick" , &omapctrl_ick,CK_242X ),CLK ("omap24xxcam" ,"fck" , &cam_fck,CK_242X ), +CLK (NULL ,"cam_fck" , &cam_fck,CK_242X ),CLK ("omap24xxcam" ,"ick" , &cam_ick,CK_242X ), +CLK (NULL ,"cam_ick" , &cam_ick,CK_242X ),CLK (NULL ,"mailboxes_ick" , &mailboxes_ick,CK_242X ),CLK (NULL ,"wdt4_ick" , &wdt4_ick,CK_242X ), CLK(NULL, "wdt4_fck", &wdt4_fck, CK_242X),
@@ -1877,16 +1885,22 @@ static struct omap_clk omap2420_clks[] = {CLK (NULL ,"mspro_ick" , &mspro_ick,CK_242X ),CLK (NULL ,"mspro_fck" , &mspro_fck,CK_242X ),CLK ("mmci-omap.0" ,"ick" , &mmc_ick,CK_242X ), +CLK (NULL ,"mmc_ick" , &mmc_ick,CK_242X ),CLK ("mmci-omap.0" ,"fck" , &mmc_fck,CK_242X ), +CLK (NULL ,"mmc_fck" , &mmc_fck,CK_242X ),CLK (NULL ,"fac_ick" , &fac_ick,CK_242X ),CLK (NULL ,"fac_fck" , &fac_fck,CK_242X ),CLK (NULL ,"eac_ick" , &eac_ick,CK_242X ),CLK (NULL ,"eac_fck" , &eac_fck,CK_242X ),CLK ("omap_hdq.0" ,"ick" , &hdq_ick,CK_242X ), +CLK (NULL ,"hdq_ick" , &hdq_ick,CK_242X ),CLK ("omap_hdq.0" ,"fck" , &hdq_fck,CK_242X ), +CLK (NULL ,"hdq_fck" , &hdq_fck,CK_242X ),CLK ("omap_i2c.1" ,"ick" , &i2c1_ick,CK_242X ), +CLK (NULL ,"i2c1_ick" , &i2c1_ick,CK_242X ),CLK (NULL ,"i2c1_fck" , &i2c1_fck,CK_242X ),CLK ("omap_i2c.2" ,"ick" , &i2c2_ick,CK_242X ), +CLK (NULL ,"i2c2_ick" , &i2c2_ick,CK_242X ),CLK (NULL ,"i2c2_fck" , &i2c2_fck,CK_242X ),CLK (NULL ,"gpmc_fck" , &gpmc_fck,CK_242X ), CLK(NULL, "sdma_fck", &sdma_fck, CK_242X),
@@ -1896,8 +1910,11 @@ static struct omap_clk omap2420_clks[] = {CLK (NULL ,"vlynq_fck" , &vlynq_fck,CK_242X ),CLK (NULL ,"des_ick" , &des_ick,CK_242X ),CLK ("omap-sham" ,"ick" , &sha_ick,CK_242X ), +CLK (NULL ,"sha_ick" , &sha_ick,CK_242X ),CLK ("omap_rng" ,"ick" , &rng_ick,CK_242X ), +CLK (NULL ,"rng_ick" , &rng_ick,CK_242X ),CLK ("omap-aes" ,"ick" , &aes_ick,CK_242X ), +CLK (NULL ,"aes_ick" , &aes_ick,CK_242X ),CLK (NULL ,"pka_ick" , &pka_ick,CK_242X ),CLK (NULL ,"usb_fck" , &usb_fck,CK_242X ), CLK("musb-hdrc", "fck", &osc_ck, CK_242X),
arch/arm/mach-omap2/clock2430_data.c +21 -0
@@ -1897,6 +1897,7 @@ static struct omap_clk omap2430_clks[] = {CLK (NULL ,"mdm_osc_ck" , &mdm_osc_ck,CK_243X ),/* DSS domain clocks */ CLK ("omapdss_dss" ,"ick" , &dss_ick,CK_243X ), +CLK (NULL ,"dss_ick" , &dss_ick,CK_243X ),CLK (NULL ,"dss1_fck" , &dss1_fck,CK_243X ),CLK (NULL ,"dss2_fck" , &dss2_fck,CK_243X ), CLK(NULL, "dss_54m_fck", &dss_54m_fck, CK_243X),
@@ -1936,20 +1937,28 @@ static struct omap_clk omap2430_clks[] = {CLK (NULL ,"gpt12_ick" , &gpt12_ick,CK_243X ),CLK (NULL ,"gpt12_fck" , &gpt12_fck,CK_243X ),CLK ("omap-mcbsp.1" ,"ick" , &mcbsp1_ick,CK_243X ), +CLK (NULL ,"mcbsp1_ick" , &mcbsp1_ick,CK_243X ),CLK (NULL ,"mcbsp1_fck" , &mcbsp1_fck,CK_243X ),CLK ("omap-mcbsp.2" ,"ick" , &mcbsp2_ick,CK_243X ), +CLK (NULL ,"mcbsp2_ick" , &mcbsp2_ick,CK_243X ),CLK (NULL ,"mcbsp2_fck" , &mcbsp2_fck,CK_243X ),CLK ("omap-mcbsp.3" ,"ick" , &mcbsp3_ick,CK_243X ), +CLK (NULL ,"mcbsp3_ick" , &mcbsp3_ick,CK_243X ),CLK (NULL ,"mcbsp3_fck" , &mcbsp3_fck,CK_243X ),CLK ("omap-mcbsp.4" ,"ick" , &mcbsp4_ick,CK_243X ), +CLK (NULL ,"mcbsp4_ick" , &mcbsp4_ick,CK_243X ),CLK (NULL ,"mcbsp4_fck" , &mcbsp4_fck,CK_243X ),CLK ("omap-mcbsp.5" ,"ick" , &mcbsp5_ick,CK_243X ), +CLK (NULL ,"mcbsp5_ick" , &mcbsp5_ick,CK_243X ),CLK (NULL ,"mcbsp5_fck" , &mcbsp5_fck,CK_243X ),CLK ("omap2_mcspi.1" ,"ick" , &mcspi1_ick,CK_243X ), +CLK (NULL ,"mcspi1_ick" , &mcspi1_ick,CK_243X ),CLK (NULL ,"mcspi1_fck" , &mcspi1_fck,CK_243X ),CLK ("omap2_mcspi.2" ,"ick" , &mcspi2_ick,CK_243X ), +CLK (NULL ,"mcspi2_ick" , &mcspi2_ick,CK_243X ),CLK (NULL ,"mcspi2_fck" , &mcspi2_fck,CK_243X ),CLK ("omap2_mcspi.3" ,"ick" , &mcspi3_ick,CK_243X ), +CLK (NULL ,"mcspi3_ick" , &mcspi3_ick,CK_243X ),CLK (NULL ,"mcspi3_fck" , &mcspi3_fck,CK_243X ),CLK (NULL ,"uart1_ick" , &uart1_ick,CK_243X ), CLK(NULL, "uart1_fck", &uart1_fck, CK_243X),
@@ -1960,13 +1969,16 @@ static struct omap_clk omap2430_clks[] = {CLK (NULL ,"gpios_ick" , &gpios_ick,CK_243X ),CLK (NULL ,"gpios_fck" , &gpios_fck,CK_243X ),CLK ("omap_wdt" ,"ick" , &mpu_wdt_ick,CK_243X ), +CLK (NULL ,"mpu_wdt_ick" , &mpu_wdt_ick,CK_243X ),CLK (NULL ,"mpu_wdt_fck" , &mpu_wdt_fck,CK_243X ),CLK (NULL ,"sync_32k_ick" , &sync_32k_ick,CK_243X ),CLK (NULL ,"wdt1_ick" , &wdt1_ick,CK_243X ),CLK (NULL ,"omapctrl_ick" , &omapctrl_ick,CK_243X ),CLK (NULL ,"icr_ick" , &icr_ick,CK_243X ),CLK ("omap24xxcam" ,"fck" , &cam_fck,CK_243X ), +CLK (NULL ,"cam_fck" , &cam_fck,CK_243X ),CLK ("omap24xxcam" ,"ick" , &cam_ick,CK_243X ), +CLK (NULL ,"cam_ick" , &cam_ick,CK_243X ),CLK (NULL ,"mailboxes_ick" , &mailboxes_ick,CK_243X ),CLK (NULL ,"wdt4_ick" , &wdt4_ick,CK_243X ), CLK(NULL, "wdt4_fck", &wdt4_fck, CK_243X),
@@ -1975,10 +1987,14 @@ static struct omap_clk omap2430_clks[] = {CLK (NULL ,"fac_ick" , &fac_ick,CK_243X ),CLK (NULL ,"fac_fck" , &fac_fck,CK_243X ),CLK ("omap_hdq.0" ,"ick" , &hdq_ick,CK_243X ), +CLK (NULL ,"hdq_ick" , &hdq_ick,CK_243X ),CLK ("omap_hdq.1" ,"fck" , &hdq_fck,CK_243X ), +CLK (NULL ,"hdq_fck" , &hdq_fck,CK_243X ),CLK ("omap_i2c.1" ,"ick" , &i2c1_ick,CK_243X ), +CLK (NULL ,"i2c1_ick" , &i2c1_ick,CK_243X ),CLK (NULL ,"i2chs1_fck" , &i2chs1_fck,CK_243X ),CLK ("omap_i2c.2" ,"ick" , &i2c2_ick,CK_243X ), +CLK (NULL ,"i2c2_ick" , &i2c2_ick,CK_243X ),CLK (NULL ,"i2chs2_fck" , &i2chs2_fck,CK_243X ),CLK (NULL ,"gpmc_fck" , &gpmc_fck,CK_243X ), CLK(NULL, "sdma_fck", &sdma_fck, CK_243X),
@@ -1991,15 +2007,20 @@ static struct omap_clk omap2430_clks[] = {CLK (NULL ,"pka_ick" , &pka_ick,CK_243X ),CLK (NULL ,"usb_fck" , &usb_fck,CK_243X ),CLK ("musb-omap2430" ,"ick" , &usbhs_ick,CK_243X ), +CLK (NULL ,"usbhs_ick" , &usbhs_ick,CK_243X ),CLK ("omap_hsmmc.0" ,"ick" , &mmchs1_ick,CK_243X ), +CLK (NULL ,"mmchs1_ick" , &mmchs1_ick,CK_243X ),CLK (NULL ,"mmchs1_fck" , &mmchs1_fck,CK_243X ),CLK ("omap_hsmmc.1" ,"ick" , &mmchs2_ick,CK_243X ), +CLK (NULL ,"mmchs2_ick" , &mmchs2_ick,CK_243X ),CLK (NULL ,"mmchs2_fck" , &mmchs2_fck,CK_243X ),CLK (NULL ,"gpio5_ick" , &gpio5_ick,CK_243X ),CLK (NULL ,"gpio5_fck" , &gpio5_fck,CK_243X ),CLK (NULL ,"mdm_intc_ick" , &mdm_intc_ick,CK_243X ),CLK ("omap_hsmmc.0" ,"mmchsdb_fck" , &mmchsdb1_fck,CK_243X ), +CLK (NULL ,"mmchsdb1_fck" , &mmchsdb1_fck,CK_243X ),CLK ("omap_hsmmc.1" ,"mmchsdb_fck" , &mmchsdb2_fck,CK_243X ), +CLK (NULL ,"mmchsdb2_fck" , &mmchsdb2_fck,CK_243X ),CLK ("omap_timer.1" ,"32k_ck" , &func_32k_ck,CK_243X ),CLK ("omap_timer.2" ,"32k_ck" , &func_32k_ck,CK_243X ), CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X),
arch/arm/mach-omap2/clock3xxx_data.c +24 -0
@@ -3260,6 +3260,7 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"dpll4_x2_ck" , &dpll4_x2_ck,CK_3XXX ),CLK (NULL ,"omap_192m_alwon_fck" , &omap_192m_alwon_fck,CK_36XX ),CLK (NULL ,"omap_96m_alwon_fck" , &omap_96m_alwon_fck,CK_3XXX ), +CLK (NULL ,"omap_96m_alwon_fck_3630" , &omap_96m_alwon_fck_3630,CK_3XXX ),CLK (NULL ,"omap_96m_fck" , &omap_96m_fck,CK_3XXX ),CLK (NULL ,"cm_96m_fck" , &cm_96m_fck,CK_3XXX ), CLK(NULL, "omap_54m_fck", &omap_54m_fck, CK_3XXX),
@@ -3329,6 +3330,7 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"fshostusb_fck" , &fshostusb_fck,CK_3430ES1 ),CLK (NULL ,"core_12m_fck" , &core_12m_fck,CK_3XXX ),CLK ("omap_hdq.0" ,"fck" , &hdq_fck,CK_3XXX ), +CLK (NULL ,"hdq_fck" , &hdq_fck,CK_3XXX ),CLK (NULL ,"ssi_ssr_fck" , &ssi_ssr_fck_3430es1,CK_3430ES1 ),CLK (NULL ,"ssi_ssr_fck" , &ssi_ssr_fck_3430es2,CK_3430ES2PLUS |CK_36XX ), CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es1, CK_3430ES1),
@@ -3336,6 +3338,8 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"core_l3_ick" , &core_l3_ick,CK_3XXX ),CLK ("musb-omap2430" ,"ick" , &hsotgusb_ick_3430es1,CK_3430ES1 ),CLK ("musb-omap2430" ,"ick" , &hsotgusb_ick_3430es2,CK_3430ES2PLUS |CK_36XX ), +CLK (NULL ,"hsotgusb_ick" , &hsotgusb_ick_3430es1,CK_3430ES1 ), +CLK (NULL ,"hsotgusb_ick" , &hsotgusb_ick_3430es2,CK_3430ES2PLUS |CK_36XX ),CLK (NULL ,"sdrc_ick" , &sdrc_ick,CK_3XXX ),CLK (NULL ,"gpmc_fck" , &gpmc_fck,CK_3XXX ), CLK(NULL, "security_l3_ick", &security_l3_ick, CK_34XX | CK_36XX),
@@ -3344,27 +3348,40 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"usbtll_ick" , &usbtll_ick,CK_3430ES2PLUS |CK_AM35XX |CK_36XX ),CLK ("usbhs_omap" ,"usbtll_ick" , &usbtll_ick,CK_3430ES2PLUS |CK_AM35XX |CK_36XX ),CLK ("omap_hsmmc.2" ,"ick" , &mmchs3_ick,CK_3430ES2PLUS |CK_AM35XX |CK_36XX ), +CLK (NULL ,"mmchs3_ick" , &mmchs3_ick,CK_3430ES2PLUS |CK_AM35XX |CK_36XX ),CLK (NULL ,"icr_ick" , &icr_ick,CK_34XX |CK_36XX ),CLK ("omap-aes" ,"ick" , &aes2_ick,CK_34XX |CK_36XX ),CLK ("omap-sham" ,"ick" , &sha12_ick,CK_34XX |CK_36XX ),CLK (NULL ,"des2_ick" , &des2_ick,CK_34XX |CK_36XX ),CLK ("omap_hsmmc.1" ,"ick" , &mmchs2_ick,CK_3XXX ),CLK ("omap_hsmmc.0" ,"ick" , &mmchs1_ick,CK_3XXX ), +CLK (NULL ,"mmchs2_ick" , &mmchs2_ick,CK_3XXX ), +CLK (NULL ,"mmchs1_ick" , &mmchs1_ick,CK_3XXX ),CLK (NULL ,"mspro_ick" , &mspro_ick,CK_34XX |CK_36XX ),CLK ("omap_hdq.0" ,"ick" , &hdq_ick,CK_3XXX ), +CLK (NULL ,"hdq_ick" , &hdq_ick,CK_3XXX ),CLK ("omap2_mcspi.4" ,"ick" , &mcspi4_ick,CK_3XXX ),CLK ("omap2_mcspi.3" ,"ick" , &mcspi3_ick,CK_3XXX ),CLK ("omap2_mcspi.2" ,"ick" , &mcspi2_ick,CK_3XXX ),CLK ("omap2_mcspi.1" ,"ick" , &mcspi1_ick,CK_3XXX ), +CLK (NULL ,"mcspi4_ick" , &mcspi4_ick,CK_3XXX ), +CLK (NULL ,"mcspi3_ick" , &mcspi3_ick,CK_3XXX ), +CLK (NULL ,"mcspi2_ick" , &mcspi2_ick,CK_3XXX ), +CLK (NULL ,"mcspi1_ick" , &mcspi1_ick,CK_3XXX ),CLK ("omap_i2c.3" ,"ick" , &i2c3_ick,CK_3XXX ),CLK ("omap_i2c.2" ,"ick" , &i2c2_ick,CK_3XXX ),CLK ("omap_i2c.1" ,"ick" , &i2c1_ick,CK_3XXX ), +CLK (NULL ,"i2c3_ick" , &i2c3_ick,CK_3XXX ), +CLK (NULL ,"i2c2_ick" , &i2c2_ick,CK_3XXX ), +CLK (NULL ,"i2c1_ick" , &i2c1_ick,CK_3XXX ),CLK (NULL ,"uart2_ick" , &uart2_ick,CK_3XXX ),CLK (NULL ,"uart1_ick" , &uart1_ick,CK_3XXX ),CLK (NULL ,"gpt11_ick" , &gpt11_ick,CK_3XXX ),CLK (NULL ,"gpt10_ick" , &gpt10_ick,CK_3XXX ),CLK ("omap-mcbsp.5" ,"ick" , &mcbsp5_ick,CK_3XXX ),CLK ("omap-mcbsp.1" ,"ick" , &mcbsp1_ick,CK_3XXX ), +CLK (NULL ,"mcbsp5_ick" , &mcbsp5_ick,CK_3XXX ), +CLK (NULL ,"mcbsp1_ick" , &mcbsp1_ick,CK_3XXX ),CLK (NULL ,"fac_ick" , &fac_ick,CK_3430ES1 ),CLK (NULL ,"mailboxes_ick" , &mailboxes_ick,CK_34XX |CK_36XX ), CLK(NULL, "omapctrl_ick", &omapctrl_ick, CK_3XXX),
@@ -3383,7 +3400,9 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"dss_96m_fck" , &dss_96m_fck,CK_3XXX ),CLK (NULL ,"dss2_alwon_fck" , &dss2_alwon_fck,CK_3XXX ),CLK ("omapdss_dss" ,"ick" , &dss_ick_3430es1,CK_3430ES1 ), +CLK (NULL ,"dss_ick" , &dss_ick_3430es1,CK_3430ES1 ),CLK ("omapdss_dss" ,"ick" , &dss_ick_3430es2,CK_3430ES2PLUS |CK_AM35XX |CK_36XX ), +CLK (NULL ,"dss_ick" , &dss_ick_3430es2,CK_3430ES2PLUS |CK_AM35XX |CK_36XX ),CLK (NULL ,"cam_mclk" , &cam_mclk,CK_34XX |CK_36XX ),CLK (NULL ,"cam_ick" , &cam_ick,CK_34XX |CK_36XX ), CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX),
@@ -3408,6 +3427,7 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"wkup_l4_ick" , &wkup_l4_ick,CK_34XX |CK_36XX ),CLK (NULL ,"usim_ick" , &usim_ick,CK_3430ES2PLUS |CK_36XX ),CLK ("omap_wdt" ,"ick" , &wdt2_ick,CK_3XXX ), +CLK (NULL ,"wdt2_ick" , &wdt2_ick,CK_3XXX ),CLK (NULL ,"wdt1_ick" , &wdt1_ick,CK_3XXX ),CLK (NULL ,"gpio1_ick" , &gpio1_ick,CK_3XXX ), CLK(NULL, "omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX),
@@ -3456,6 +3476,9 @@ static struct omap_clk omap3xxx_clks[] = {CLK ("omap-mcbsp.2" ,"ick" , &mcbsp2_ick,CK_3XXX ),CLK ("omap-mcbsp.3" ,"ick" , &mcbsp3_ick,CK_3XXX ),CLK ("omap-mcbsp.4" ,"ick" , &mcbsp4_ick,CK_3XXX ), +CLK (NULL ,"mcbsp4_ick" , &mcbsp2_ick,CK_3XXX ), +CLK (NULL ,"mcbsp3_ick" , &mcbsp3_ick,CK_3XXX ), +CLK (NULL ,"mcbsp2_ick" , &mcbsp4_ick,CK_3XXX ),CLK (NULL ,"mcbsp2_fck" , &mcbsp2_fck,CK_3XXX ),CLK (NULL ,"mcbsp3_fck" , &mcbsp3_fck,CK_3XXX ), CLK(NULL, "mcbsp4_fck", &mcbsp4_fck, CK_3XXX),
@@ -3479,6 +3502,7 @@ static struct omap_clk omap3xxx_clks[] = {CLK ("vpfe-capture" ,"master" , &vpfe_ick,CK_AM35XX ),CLK ("vpfe-capture" ,"slave" , &vpfe_fck,CK_AM35XX ),CLK ("musb-am35x" ,"ick" , &hsotgusb_ick_am35xx,CK_AM35XX ), +CLK (NULL ,"hsotgusb_ick" , &hsotgusb_ick_am35xx,CK_AM35XX ),CLK ("musb-am35x" ,"fck" , &hsotgusb_fck_am35xx,CK_AM35XX ),CLK (NULL ,"hecc_ck" , &hecc_ck,CK_AM35XX ), CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX),
arch/arm/mach-omap2/clock44xx_data.c +17 -0
@@ -3223,6 +3223,7 @@ static struct omap_clk omap44xx_clks[] = {CLK (NULL ,"dss_tv_clk" , &dss_tv_clk,CK_443X ),CLK (NULL ,"dss_48mhz_clk" , &dss_48mhz_clk,CK_443X ),CLK (NULL ,"dss_dss_clk" , &dss_dss_clk,CK_443X ), +CLK (NULL ,"dss_fck" , &dss_fck,CK_443X ),CLK ("omapdss_dss" ,"ick" , &dss_fck,CK_443X ),CLK (NULL ,"efuse_ctrl_cust_fck" , &efuse_ctrl_cust_fck,CK_443X ), CLK(NULL, "emif1_fck", &emif1_fck, CK_443X),
@@ -3279,6 +3280,7 @@ static struct omap_clk omap44xx_clks[] = {CLK (NULL ,"ocp2scp_usb_phy_phy_48m" , &ocp2scp_usb_phy_phy_48m,CK_443X ),CLK (NULL ,"ocp2scp_usb_phy_ick" , &ocp2scp_usb_phy_ick,CK_443X ),CLK (NULL ,"ocp_wp_noc_ick" , &ocp_wp_noc_ick,CK_443X ), +CLK (NULL ,"rng_ick" , &rng_ick,CK_443X ),CLK ("omap_rng" ,"ick" , &rng_ick,CK_443X ),CLK (NULL ,"sha2md5_fck" , &sha2md5_fck,CK_443X ), CLK(NULL, "sl2if_ick", &sl2if_ick, CK_443X),
@@ -3295,20 +3297,32 @@ static struct omap_clk omap44xx_clks[] = {CLK (NULL ,"smartreflex_iva_fck" , &smartreflex_iva_fck,CK_443X ),CLK (NULL ,"smartreflex_mpu_fck" , &smartreflex_mpu_fck,CK_443X ),CLK (NULL ,"gpt1_fck" , &timer1_fck,CK_443X ), +CLK (NULL ,"timer1_fck" , &timer1_fck,CK_443X ),CLK (NULL ,"gpt10_fck" , &timer10_fck,CK_443X ), +CLK (NULL ,"timer10_fck" , &timer10_fck,CK_443X ),CLK (NULL ,"gpt11_fck" , &timer11_fck,CK_443X ), +CLK (NULL ,"timer11_fck" , &timer11_fck,CK_443X ),CLK (NULL ,"gpt2_fck" , &timer2_fck,CK_443X ), +CLK (NULL ,"timer2_fck" , &timer2_fck,CK_443X ),CLK (NULL ,"gpt3_fck" , &timer3_fck,CK_443X ), +CLK (NULL ,"timer3_fck" , &timer3_fck,CK_443X ),CLK (NULL ,"gpt4_fck" , &timer4_fck,CK_443X ), +CLK (NULL ,"timer4_fck" , &timer4_fck,CK_443X ),CLK (NULL ,"gpt5_fck" , &timer5_fck,CK_443X ), +CLK (NULL ,"timer5_fck" , &timer5_fck,CK_443X ),CLK (NULL ,"gpt6_fck" , &timer6_fck,CK_443X ), +CLK (NULL ,"timer6_fck" , &timer6_fck,CK_443X ),CLK (NULL ,"gpt7_fck" , &timer7_fck,CK_443X ), +CLK (NULL ,"timer7_fck" , &timer7_fck,CK_443X ),CLK (NULL ,"gpt8_fck" , &timer8_fck,CK_443X ), +CLK (NULL ,"timer8_fck" , &timer8_fck,CK_443X ),CLK (NULL ,"gpt9_fck" , &timer9_fck,CK_443X ), +CLK (NULL ,"timer9_fck" , &timer9_fck,CK_443X ),CLK (NULL ,"uart1_fck" , &uart1_fck,CK_443X ),CLK (NULL ,"uart2_fck" , &uart2_fck,CK_443X ),CLK (NULL ,"uart3_fck" , &uart3_fck,CK_443X ),CLK (NULL ,"uart4_fck" , &uart4_fck,CK_443X ), +CLK (NULL ,"usb_host_fs_fck" , &usb_host_fs_fck,CK_443X ),CLK ("usbhs_omap" ,"fs_fck" , &usb_host_fs_fck,CK_443X ),CLK (NULL ,"utmi_p1_gfclk" , &utmi_p1_gfclk,CK_443X ), CLK(NULL, "usb_host_hs_utmi_p1_clk", &usb_host_hs_utmi_p1_clk, CK_443X),
@@ -3320,14 +3334,17 @@ static struct omap_clk omap44xx_clks[] = {CLK (NULL ,"usb_host_hs_hsic60m_p2_clk" , &usb_host_hs_hsic60m_p2_clk,CK_443X ),CLK (NULL ,"usb_host_hs_hsic480m_p2_clk" , &usb_host_hs_hsic480m_p2_clk,CK_443X ),CLK (NULL ,"usb_host_hs_func48mclk" , &usb_host_hs_func48mclk,CK_443X ), +CLK (NULL ,"usb_host_hs_fck" , &usb_host_hs_fck,CK_443X ),CLK ("usbhs_omap" ,"hs_fck" , &usb_host_hs_fck,CK_443X ),CLK (NULL ,"otg_60m_gfclk" , &otg_60m_gfclk,CK_443X ),CLK (NULL ,"usb_otg_hs_xclk" , &usb_otg_hs_xclk,CK_443X ), +CLK (NULL ,"usb_otg_hs_ick" , &usb_otg_hs_ick,CK_443X ),CLK ("musb-omap2430" ,"ick" , &usb_otg_hs_ick,CK_443X ),CLK (NULL ,"usb_phy_cm_clk32k" , &usb_phy_cm_clk32k,CK_443X ),CLK (NULL ,"usb_tll_hs_usb_ch2_clk" , &usb_tll_hs_usb_ch2_clk,CK_443X ),CLK (NULL ,"usb_tll_hs_usb_ch0_clk" , &usb_tll_hs_usb_ch0_clk,CK_443X ),CLK (NULL ,"usb_tll_hs_usb_ch1_clk" , &usb_tll_hs_usb_ch1_clk,CK_443X ), +CLK (NULL ,"usb_tll_hs_ick" , &usb_tll_hs_ick,CK_443X ),CLK ("usbhs_omap" ,"usbtll_ick" , &usb_tll_hs_ick,CK_443X ),CLK (NULL ,"usim_ck" , &usim_ck,CK_443X ), CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
arch/arm/mach-omap2/omap_hwmod.c +6 -6
@@ -602,8 +602,8 @@ static int _init_main_clk(struct omap_hwmod *oh)if (!oh->main_clk)return 0 ; - oh->_clk =omap_clk_get_by_name (oh->main_clk); -if (!oh->_clk) { + oh->_clk =clk_get (NULL , oh->main_clk); +if (IS_ERR_OR_NULL (oh->_clk)) {pr_warning ("omap_hwmod: %s: cannot clk_get main_clk %s\n" , oh->name, oh->main_clk);return -EINVAL ;
@@ -638,8 +638,8 @@ static int _init_interface_clks(struct omap_hwmod *oh)if (!os->clk)continue ; - c =omap_clk_get_by_name (os->clk); -if (!c) { + c =clk_get (NULL , os->clk); +if (IS_ERR_OR_NULL (c)) {pr_warning ("omap_hwmod: %s: cannot clk_get interface_clk %s\n" , oh->name, os->clk); ret = -EINVAL ;
@@ -665,8 +665,8 @@ static int _init_opt_clks(struct omap_hwmod *oh)int ret =0 ;for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++) { - c =omap_clk_get_by_name (oc->clk); -if (!c) { + c =clk_get (NULL , oc->clk); +if (IS_ERR_OR_NULL (c)) {pr_warning ("omap_hwmod: %s: cannot clk_get opt_clk %s\n" , oh->name, oc->clk); ret = -EINVAL ;
arch/arm/plat-omap/omap_device.c +3 -3
@@ -266,10 +266,10 @@ static void _add_clkdev(struct omap_device *od, const char *clk_alias,return ; } - r =omap_clk_get_by_name (clk_name); -if (IS_ERR (r)) { + r =clk_get (NULL , clk_name); +if (IS_ERR_OR_NULL (r)) {dev_err (&od->pdev->dev, -"omap_clk_get_by_name for %s failed\n" , clk_name); +"clk_get for %s failed\n" , clk_name);return ; }
Signature · 1 line
1.7.1
PATCH 9/29 ARM: omap: clk: Nuke plat/clock.c & reuse struct clk as clk_hw_omap
In reply to Rajendra Nayakplat/clock.c which has most of usecounting/locking infrastructure will be used only for OMAP1 until that is moved to use COMMON clk.
reuse most of what plat/clock.h has while we move to common clk, and move most of what 'struct clk' was as 'struct clk_hw_omap' which will then be used to define platform specific parameters. All usecounting/locking related variables from 'struct clk' are dropped as they will not be used with 'struct clk_hw_omap'.
Based on the original changes from Mike Turquette.
--- arch/arm/plat-omap/clock.c | 2 + arch/arm/plat-omap/include/plat/clock.h | 69 +++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 0 deletions(-)
arch/arm/plat-omap/clock.c +2 -0
@@ -10,6 +10,7 @@* it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ +#ifndef CONFIG_COMMON_CLK #include <linux/kernel.h> #include <linux/init.h> #include <linux/list.h>
@@ -567,3 +568,4 @@ err_out:late_initcall (clk_debugfs_init);#endif /* defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) */ +#endif /* CONFIG_COMMON_CLK */
arch/arm/plat-omap/include/plat/clock.h +69 -0
91 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH 9/29 ARM: omap: clk: Nuke plat/clock.c & reuse struct clk as clk_hw_omap
Quoted 9 lines · Rajendra Nayak
plat/clock.cwhich has most of usecounting/locking infrastructure will be used only for OMAP1 until that is moved to use COMMON clk.reuse most of what
plat/clock.hhas while we move to common clk, and move most of what 'struct clk' was as 'structclk_hw_omap' which will then be used to define platform specific parameters. All usecounting/locking related variables from 'struct clk' are dropped as they will not be used with 'structclk_hw_omap'.
Quoted 3 lines
Based on the original changes from Mike Turquette.
Signed-off-by Rajendra Nayak <[email protected]>
Looks good to me Rajendra.
arch/arm/plat-omap/include/plat/clock.h struct dpll_data { · line 261
Quoted 2 lines
arch/arm/plat-omap/include/plat/clock.h +2
-0+unsigned long omap_fixed_divisor_recalc (struct clk_hw *hw, +unsigned long parent_rate);
Would be nice to get rid of this. I think only iva1_mpu_int_ifck from OMAP2 uses it. If so it would be nice to convert that clock over to the fixed factor type (if possible) and drop this bit of glue code. Probably something for the future though, no reason to block this patch on it.
Regards,
Mike
PATCH 10/29 ARM: omap: clk: Remove all direct dereferncing of struct clk
In reply to Rajendra NayakWhile we work on moving to COMMON clk, direct deferencing of struct clk wouldn't be possible anymore. Hence get rid of all such instances in the current clock code and use macros similar to the ones that are defined with COMMON clk.
--- arch/arm/mach-omap2/clkt2xxx_apll.c | 2 +- arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 4 +- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 18 +++--- arch/arm/mach-omap2/clkt_clksel.c | 84 ++++++++++++++++++-------- arch/arm/mach-omap2/clkt_dpll.c | 24 ++++--- arch/arm/mach-omap2/clock.c | 9 ++- arch/arm/mach-omap2/dpll3xxx.c | 45 ++++++++------ arch/arm/mach-omap2/omap_hwmod.c | 6 +- arch/arm/mach-omap2/pm.c | 2 +- arch/arm/plat-omap/include/plat/clock.h | 4 + 10 files changed, 125 insertions(+), 73 deletions(-)
arch/arm/mach-omap2/clkt2xxx_apll.c +1 -1
@@ -59,7 +59,7 @@ static int omap2_clk_apll_enable(struct clk *clk, u32 status_mask)omap2_cm_write_mod_reg (cval,PLL_MOD ,CM_CLKEN );omap2_cm_wait_idlest (cm_idlest_pll, status_mask, -OMAP24XX_CM_IDLEST_VAL , clk->name); +OMAP24XX_CM_IDLEST_VAL ,__clk_get_name (clk));/* * REVISIT: Should we return an error code if omap2_wait_clock_ready()
arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c +2 -2
@@ -75,7 +75,7 @@ long omap2_round_to_table_rate(struct clk *clk, unsigned long rate)for (ptr = rate_table; ptr->mpu_speed; ptr++) {if (!(ptr->flags & cpu_mask))continue ; -if (ptr->xtal_speed != sclk->rate) +if (ptr->xtal_speed !=__clk_get_rate (sclk))continue ; highest_rate = ptr->mpu_speed;
@@ -99,7 +99,7 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)if (!(prcm->flags & cpu_mask))continue ; -if (prcm->xtal_speed != sclk->rate) +if (prcm->xtal_speed !=__clk_get_rate (sclk))continue ;if (prcm->mpu_speed <= rate) {
arch/arm/mach-omap2/clkt34xx_dpll3m2.c +10 -8
@@ -56,6 +56,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)struct omap_sdrc_params *sdrc_cs0;struct omap_sdrc_params *sdrc_cs1;int ret; +unsigned long clkrate;if (!clk || !rate)return -EINVAL ;
@@ -64,11 +65,12 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)if (validrate != rate)return -EINVAL ; - sdrcrate = sdrc_ick_p->rate; -if (rate > clk->rate) - sdrcrate <<= ((rate / clk->rate) >>1 ); + sdrcrate =__clk_get_rate (sdrc_ick_p); + clkrate =__clk_get_rate (clk); +if (rate > clkrate) + sdrcrate <<= ((rate / clkrate) >>1 );else - sdrcrate >>= ((clk->rate / rate) >>1 ); + sdrcrate >>= ((clkrate / rate) >>1 ); ret =omap2_sdrc_get_params (sdrcrate, &sdrc_cs0, &sdrc_cs1);if (ret)
@@ -82,7 +84,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)/* * XXX This only needs to be done when the CPU frequency changes */ - _mpurate = arm_fck_p->rate /CYCLES_PER_MHZ ; + _mpurate =__clk_get_rate (arm_fck_p) /CYCLES_PER_MHZ ; c = (_mpurate <<SDRC_MPURATE_SCALE ) >>SDRC_MPURATE_BASE_SHIFT ; c +=1 ;/* for safety */ c *=SDRC_MPURATE_LOOPS ;
@@ -90,7 +92,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)if (c ==0 ) c =1 ; -pr_debug ("clock: changing CORE DPLL rate from %lu to %lu\n" , clk->rate, +pr_debug ("clock: changing CORE DPLL rate from %lu to %lu\n" , clkrate, validrate); pr_debug("clock: SDRC CS0 timing params used:" " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
@@ -104,14 +106,14 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)if (sdrc_cs1)omap3_configure_core_dpll ( - new_div, unlock_dll, c, rate > clk->rate, + new_div, unlock_dll, c, rate > clkrate, sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, sdrc_cs0->actim_ctrlb, sdrc_cs0->mr, sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla, sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);else omap3_configure_core_dpll ( - new_div, unlock_dll, c, rate > clk->rate, + new_div, unlock_dll, c, rate > clkrate, sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,0 ,0 ,0 ,0 );
arch/arm/mach-omap2/clkt_clksel.c +58 -26
213 lines not on this page · raw message
arch/arm/mach-omap2/clkt_dpll.c +14 -10
@@ -87,7 +87,7 @@ static int _dpll_test_fint(struct clk *clk, u8 n) dd = clk->dpll_data;/* DPLL divider must result in a valid jitter correction val */ - fint = clk->parent->rate / n; + fint =__clk_get_rate (__clk_get_parent (clk)) / n;if (cpu_is_omap24xx ()) {/* Should not be called for OMAP2, so warn if it is called */
@@ -252,16 +252,16 @@ u32 omap2_get_dpll_rate(struct clk *clk)if (cpu_is_omap24xx ()) {if (v ==OMAP2XXX_EN_DPLL_LPBYPASS || v ==OMAP2XXX_EN_DPLL_FRBYPASS ) -return dd->clk_bypass->rate; +return __clk_get_rate (dd->clk_bypass); }else if (cpu_is_omap34xx ()) {if (v ==OMAP3XXX_EN_DPLL_LPBYPASS || v ==OMAP3XXX_EN_DPLL_FRBYPASS ) -return dd->clk_bypass->rate; +return __clk_get_rate (dd->clk_bypass); }else if (cpu_is_omap44xx ()) {if (v ==OMAP4XXX_EN_DPLL_LPBYPASS || v ==OMAP4XXX_EN_DPLL_FRBYPASS || v ==OMAP4XXX_EN_DPLL_MNBYPASS ) -return dd->clk_bypass->rate; +return __clk_get_rate (dd->clk_bypass); } v =__raw_readl (dd->mult_div1_reg);
@@ -270,7 +270,7 @@ u32 omap2_get_dpll_rate(struct clk *clk) dpll_div = v & dd->div1_mask; dpll_div >>=__ffs (dd->div1_mask); - dpll_clk = (long long )dd->clk_ref->rate * dpll_mult; + dpll_clk = (long long )__clk_get_rate (dd->clk_ref) * dpll_mult;do_div (dpll_clk, dpll_div +1 );return dpll_clk;
@@ -296,16 +296,20 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)unsigned long scaled_rt_rp;unsigned long new_rate =0 ;struct dpll_data *dd; +unsigned long ref_rate; +const char *clk_name;if (!clk || !clk->dpll_data)return ~0 ; dd = clk->dpll_data; + ref_rate =__clk_get_rate (dd->clk_ref); + clk_name =__clk_get_name (clk);pr_debug ("clock: %s: starting DPLL round_rate, target rate %ld\n" , - clk->name, target_rate); + clk_name, target_rate); - scaled_rt_rp = target_rate / (dd->clk_ref->rate /DPLL_SCALE_FACTOR ); + scaled_rt_rp = target_rate / (ref_rate /DPLL_SCALE_FACTOR ); scaled_max_m = dd->max_multiplier *DPLL_SCALE_FACTOR ; dd->last_rounded_rate =0 ;
@@ -332,14 +336,14 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)break ; r =_dpll_test_mult (&m, n, &new_rate, target_rate, - dd->clk_ref->rate); + ref_rate);/* m can't be set low enough for this n - try with a larger n */ if (r ==DPLL_MULT_UNDERFLOW )continue ;pr_debug ("clock: %s: m = %d: n = %d: new_rate = %ld\n" , - clk->name, m, n, new_rate); + clk_name, m, n, new_rate);if (target_rate == new_rate) { dd->last_rounded_m = m;
@@ -350,7 +354,7 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate) }if (target_rate != new_rate) { -pr_debug ("clock: %s: cannot round to rate %ld\n" , clk->name, +pr_debug ("clock: %s: cannot round to rate %ld\n" , clk_name, target_rate);return ~0 ; }
arch/arm/mach-omap2/clock.c +6 -3
@@ -76,7 +76,7 @@ static void _omap2_module_wait_ready(struct clk *clk) clk->ops->find_idlest (clk, &idlest_reg, &idlest_bit, &idlest_val);omap2_cm_wait_idlest (idlest_reg, (1 << idlest_bit), idlest_val, - clk->name); +__clk_get_name (clk)); }/* Public functions */
@@ -92,18 +92,21 @@ static void _omap2_module_wait_ready(struct clk *clk)void omap2_init_clk_clkdm (struct clk *clk) {struct clockdomain *clkdm; +const char *clk_name;if (!clk->clkdm_name)return ; + clk_name =__clk_get_name (clk); + clkdm =clkdm_lookup (clk->clkdm_name);if (clkdm) {pr_debug ("clock: associated clk %s to clkdm %s\n" , - clk->name, clk->clkdm_name); + clk_name, clk->clkdm_name); clk->clkdm = clkdm; }else {pr_debug ("clock: could not associate clk %s to " -"clkdm %s\n" , clk->name, clk->clkdm_name); +"clkdm %s\n" , clk_name, clk->clkdm_name); } }
arch/arm/mach-omap2/dpll3xxx.c +26 -19
152 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod.c +3 -3
@@ -611,7 +611,7 @@ static int _init_main_clk(struct omap_hwmod *oh)if (!oh->_clk->clkdm)pr_warning ("omap_hwmod: %s: missing clockdomain for %s.\n" , - oh->main_clk, oh->_clk->name); + oh->name, oh->main_clk);return ret; }
@@ -750,7 +750,7 @@ static void _enable_optional_clocks(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++)if (oc->_clk) {pr_debug ("omap_hwmod: enable %s:%s\n" , oc->role, - oc->_clk->name); +__clk_get_name (oc->_clk));clk_prepare_enable (oc->_clk); } }
@@ -765,7 +765,7 @@ static void _disable_optional_clocks(struct omap_hwmod *oh)for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i >0 ; i--, oc++)if (oc->_clk) {pr_debug ("omap_hwmod: disable %s:%s\n" , oc->role, - oc->_clk->name); +__clk_get_name (oc->_clk));clk_disable_unprepare (oc->_clk); } }
arch/arm/mach-omap2/pm.c +1 -1
@@ -188,7 +188,7 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name, goto exit; } - freq = clk->rate; + freq =clk_get_rate (clk);clk_put (clk);rcu_read_lock ();
arch/arm/plat-omap/include/plat/clock.h +4 -0
@@ -27,6 +27,10 @@ struct module;struct clk ;struct clockdomain ; +#define __clk_get_name (clk) clk->name +#define __clk_get_parent (clk) clk->parent +#define __clk_get_rate (clk) clk->rate +/** * struct clkops - some clock function pointers * @enable: fn ptr that enables the current clock in hardware
Signature · 1 line
1.7.1
PATCH 11/29 ARM: omap: hwmod: Fix up hwmod based clkdm accesses
In reply to Rajendra Nayakhwmod uses deferencing the clk pointer to acccess the clkdm. With COMMON clk hwoever this will need to be deferenced through the clk_hw_omap pointer, so do the necessary changes.
--- arch/arm/mach-omap2/omap_hwmod.c | 63 ++++++++++++++++++++++++++++++++------ 1 files changed, 53 insertions(+), 10 deletions(-)
arch/arm/mach-omap2/omap_hwmod.c +53 -10
@@ -130,7 +130,11 @@#include <linux/kernel.h> #include <linux/errno.h> #include <linux/io.h> +#ifdef CONFIG_COMMON_CLK +#include <linux/clk-provider.h> +#else #include <linux/clk.h> +#endif #include <linux/delay.h> #include <linux/err.h> #include <linux/list.h>
@@ -539,6 +543,23 @@ static int _disable_wakeup(struct omap_hwmod *oh, u32 *v)return 0 ; } +struct clockdomain *_get_clkdm (struct omap_hwmod *oh) +{ +struct clk_hw_omap *clk; + +if (oh->clkdm) { +return oh->clkdm; + }else if (oh->_clk) { +#ifdef CONFIG_COMMON_CLK + clk =to_clk_hw_omap (__clk_get_hw (oh->_clk)); +return clk->clkdm; +#else +return oh->_clk->clkdm; +#endif + } +return NULL ; +} +/** * _add_initiator_dep: prevent @oh from smart-idling while @init_oh is active * @oh: struct omap_hwmod *
@@ -554,13 +575,18 @@ static int _disable_wakeup(struct omap_hwmod *oh, u32 *v)*/ static int _add_initiator_dep (struct omap_hwmod *oh,struct omap_hwmod *init_oh) { -if (!oh->_clk) +struct clockdomain *clkdm, *init_clkdm; + + clkdm =_get_clkdm (oh); + init_clkdm =_get_clkdm (init_oh); + +if (!clkdm || !init_clkdm)return -EINVAL ; -if (oh->_clk->clkdm && oh->_clk->clkdm->flags &CLKDM_NO_AUTODEPS ) +if (clkdm && clkdm->flags &CLKDM_NO_AUTODEPS )return 0 ; -return clkdm_add_sleepdep (oh->_clk->clkdm, init_oh->_clk->clkdm); +return clkdm_add_sleepdep (clkdm, init_clkdm); }/**
@@ -578,13 +604,18 @@ static int _add_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh)*/ static int _del_initiator_dep (struct omap_hwmod *oh,struct omap_hwmod *init_oh) { -if (!oh->_clk) +struct clockdomain *clkdm, *init_clkdm; + + clkdm =_get_clkdm (oh); + init_clkdm =_get_clkdm (init_oh); + +if (!clkdm || !init_clkdm)return -EINVAL ; -if (oh->_clk->clkdm && oh->_clk->clkdm->flags &CLKDM_NO_AUTODEPS ) +if (clkdm && clkdm->flags &CLKDM_NO_AUTODEPS )return 0 ; -return clkdm_del_sleepdep (oh->_clk->clkdm, init_oh->_clk->clkdm); +return clkdm_del_sleepdep (clkdm, init_clkdm); }/**
@@ -609,7 +640,7 @@ static int _init_main_clk(struct omap_hwmod *oh)return -EINVAL ; } -if (!oh->_clk->clkdm) +if (!_get_clkdm (oh))pr_warning ("omap_hwmod: %s: missing clockdomain for %s.\n" , oh->name, oh->main_clk);
@@ -2982,10 +3013,17 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh) {struct clk *c;struct omap_hwmod_ocp_if *oi; +struct clockdomain *clkdm; +#ifdef CONFIG_COMMON_CLK +struct clk_hw_omap *clk; +#endif if (!oh)return NULL ; +if (oh->clkdm) +return oh->clkdm->pwrdm.ptr; +if (oh->_clk) { c = oh->_clk; }else {
@@ -2995,11 +3033,16 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh) c = oi->_clk; } -if (!c->clkdm) +#ifdef CONFIG_COMMON_CLK + clk =to_clk_hw_omap (__clk_get_hw (c)); + clkdm = clk->clkdm; +#else + clkdm = c->clkdm; +#endif +if (!clkdm)return NULL ; -return c->clkdm->pwrdm.ptr; - +return clkdm->pwrdm.ptr; }/**
Signature · 1 line
1.7.1
PATCH 12/29 ARM: omap4: clk: Convert to common clk
In reply to Rajendra NayakConvert all OMAP4 specific platform files to use COMMON clk and keep all the changes under the CONFIG_COMMON_CLK macro check so it does not break any existing code. At a later point switch to COMMON clk and get rid of all old/legacy code.
This converts all apis which will be called directly from COMMON clk to take a struct clk_hw parameter, and all the internal platform apis to take a struct clk_hw_omap parameter.
Changes are based off the original patch from Mike Turquette.
--- arch/arm/mach-omap2/clkt_clksel.c | 144 +++++++++++++++++++++++++- arch/arm/mach-omap2/clkt_dpll.c | 54 ++++++++++- arch/arm/mach-omap2/clkt_iclk.c | 4 + arch/arm/mach-omap2/clock.c | 200 +++++++++++++++++++++++++++++++++++-- arch/arm/mach-omap2/clock.h | 60 +++++++++++- arch/arm/mach-omap2/dpll3xxx.c | 198 ++++++++++++++++++++++++++++++++++++- arch/arm/mach-omap2/dpll44xx.c | 37 +++++++ 7 files changed, 681 insertions(+), 16 deletions(-)
arch/arm/mach-omap2/clkt_clksel.c +139 -5
@@ -41,7 +41,11 @@#include <linux/kernel.h> #include <linux/errno.h> +#ifdef CONFIG_COMMON_CLK +#include <linux/clk-provider.h> +#else #include <linux/clk.h> +#endif #include <linux/io.h> #include <linux/bug.h>
@@ -60,11 +64,18 @@* the element associated with the supplied parent clock address. * Returns a pointer to the struct clksel on success or NULL on error. */ +#ifdef CONFIG_COMMON_CLK +static const struct clksel *_get_clksel_by_parent (struct clk_hw_omap *clk, +#elsestatic const struct clksel *_get_clksel_by_parent (struct clk *clk, +#endif struct clk *src_clk) {const struct clksel *clks; +if (!src_clk) +return NULL ; +for (clks = clk->clksel; clks->parent; clks++)if (clks->parent == src_clk)break ;/* Found the requested parent */
@@ -74,7 +85,11 @@ static const struct clksel *_get_clksel_by_parent(struct clk *clk,WARN (1 ,"clock: Could not find parent clock %s in clksel array " "of clock %s\n" ,__clk_get_name (src_clk), +#ifdef CONFIG_COMMON_CLK +__clk_get_name (clk->hw.clk)); +#else __clk_get_name(clk)); +#endif return NULL ; }
@@ -96,6 +111,7 @@ static const struct clksel *_get_clksel_by_parent(struct clk *clk,* success (in this latter case, the corresponding register bitfield * value is passed back in the variable pointed to by @field_val) */ +#ifndef CONFIG_COMMON_CLK static u8 _get_div_and_fieldval (struct clk *src_clk,struct clk *clk,u32 *field_val) {
@@ -138,6 +154,7 @@ static u8 _get_div_and_fieldval(struct clk *src_clk, struct clk *clk, return max_div; } +#endif /** * _write_clksel_reg() - program a clock's clksel register in hardware
@@ -152,7 +169,11 @@ static u8 _get_div_and_fieldval(struct clk *src_clk, struct clk *clk,* take into account any time the hardware might take to switch the * clock source. */ +#ifdef CONFIG_COMMON_CLK +static void _write_clksel_reg(struct clk_hw_omap *clk, u32 field_val) +#else static void _write_clksel_reg(struct clk *clk, u32 field_val) +#endif {u32 v;
@@ -175,13 +196,22 @@ static void _write_clksel_reg(struct clk *clk, u32 field_val)* before calling. Returns 0 on error or returns the actual integer divisor * upon success. */ +#ifdef CONFIG_COMMON_CLK +static u32 _clksel_to_divisor(struct clk_hw_omap *clk, u32 field_val) +#else static u32 _clksel_to_divisor(struct clk *clk, u32 field_val) +#endif {const struct clksel *clks;const struct clksel_rate *clkr;struct clk *parent; +#ifdef CONFIG_COMMON_CLK + parent =__clk_get_parent (clk->hw.clk); +#else parent =__clk_get_parent (clk); +#endif + clks =_get_clksel_by_parent (clk, parent);if (!clks)return 0 ;
@@ -198,7 +228,11 @@ static u32 _clksel_to_divisor(struct clk *clk, u32 field_val)/* This indicates a data error */ WARN (1 ,"clock: Could not find fieldval %d for clock %s parent " "%s\n" , field_val, +#ifdef CONFIG_COMMON_CLK +__clk_get_name (clk->hw.clk), +#else__clk_get_name (clk), +#endif__clk_get_name (parent));return 0 ; }
@@ -216,7 +250,11 @@ static u32 _clksel_to_divisor(struct clk *clk, u32 field_val)* register field value _before_ left-shifting (i.e., LSB is at bit * 0); or returns 0xFFFFFFFF (~0) upon error. */ +#ifdef CONFIG_COMMON_CLK +static u32 _divisor_to_clksel(struct clk_hw_omap *clk, u32 div) +#else static u32 _divisor_to_clksel(struct clk *clk, u32 div) +#endif {const struct clksel *clks;const struct clksel_rate *clkr;
@@ -225,7 +263,11 @@ static u32 _divisor_to_clksel(struct clk *clk, u32 div)/* should never happen */ WARN_ON (div ==0 ); +#ifdef CONFIG_COMMON_CLK + parent =__clk_get_parent (clk->hw.clk); +#else parent =__clk_get_parent (clk); +#endif clks =_get_clksel_by_parent (clk, parent);if (!clks)return ~0 ;
@@ -241,7 +283,11 @@ static u32 _divisor_to_clksel(struct clk *clk, u32 div)if (!clkr->div) {pr_err ("clock: Could not find divisor %d for clock %s parent " "%s\n" , div, +#ifdef CONFIG_COMMON_CLK +__clk_get_name (clk->hw.clk), +#else__clk_get_name (clk), +#endif__clk_get_name (parent));return ~0 ; }
@@ -257,7 +303,11 @@ static u32 _divisor_to_clksel(struct clk *clk, u32 div)* into the hardware, convert it into the actual divisor value, and * return it; or return 0 on error. */ +#ifdef CONFIG_COMMON_CLK +static u32 _read_divisor(struct clk_hw_omap *clk) +#else static u32 _read_divisor(struct clk *clk) +#endif {u32 v;
@@ -285,7 +335,12 @@ static u32 _read_divisor(struct clk *clk)* * Returns the rounded clock rate or returns 0xffffffff on error. */ +#ifdef CONFIG_COMMON_CLK +u32 omap2_clksel_round_rate_div (struct clk_hw_omap *clk, +unsigned long target_rate, +#elseu32 omap2_clksel_round_rate_div (struct clk *clk,unsigned long target_rate, +#endif u32 *new_div) {unsigned long test_rate;
@@ -296,9 +351,14 @@ u32 omap2_clksel_round_rate_div(struct clk *clk, unsigned long target_rate,unsigned long parent_rate;const char *clk_name; +#ifdef CONFIG_COMMON_CLK + parent =__clk_get_parent (clk->hw.clk); + clk_name =__clk_get_name (clk->hw.clk); +#else parent =__clk_get_parent (clk); - parent_rate =__clk_get_rate (parent); clk_name =__clk_get_name (clk); +#endif + parent_rate =__clk_get_rate (parent);if (!clk->clksel || !clk->clksel_mask)return ~0 ;
@@ -358,8 +418,14 @@ u32 omap2_clksel_round_rate_div(struct clk *clk, unsigned long target_rate,* to. Update @clk's .parent field with the appropriate clk ptr. No * return value. */ +#ifdef CONFIG_COMMON_CLK +u8 omap2_init_clksel_parent (struct clk_hw *hw) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else void omap2_init_clksel_parent (struct clk *clk) { +#endif const struct clksel *clks;const struct clksel_rate *clkr;u32 r, found =0 ;
@@ -367,10 +433,17 @@ void omap2_init_clksel_parent(struct clk *clk)const char *clk_name; if (!clk->clksel || !clk->clksel_mask) +#ifdef CONFIG_COMMON_CLK +return -EINVAL ; + + parent =__clk_get_parent (hw->clk); + clk_name =__clk_get_name (hw->clk); +#else return ; parent =__clk_get_parent (clk); clk_name =__clk_get_name (clk); +#endif r =__raw_readl (clk->clksel_reg) & clk->clksel_mask; r >>=__ffs (clk->clksel_mask);
@@ -389,9 +462,14 @@ void omap2_init_clksel_parent(struct clk *clk) ((parent) ?__clk_get_name (parent) : "NULL")); +#ifdef CONFIG_COMMON_CLK + }; +return r; +#else clk_reparent (clk, clks->parent); }; found =1 ; +#endif } } }
@@ -400,7 +478,11 @@ void omap2_init_clksel_parent(struct clk *clk)WARN (!found,"clock: %s: init parent: could not find regval %0x\n" , clk_name, r); +#ifdef CONFIG_COMMON_CLK +return -ENODEV ; +#else return ; +#endif }/**
@@ -412,6 +494,28 @@ void omap2_init_clksel_parent(struct clk *clk)* function. Returns the clock's current rate, based on its parent's rate * and its current divisor setting in the hardware. */ +#ifdef CONFIG_COMMON_CLK +unsigned long omap2_clksel_recalc (struct clk_hw *hw,unsigned long parent_rate) +{ +unsigned long rate; +u32 div =0 ; +struct clk_hw_omap *clk =to_clk_hw_omap (hw); + +if (!parent_rate) +return 0 ; + + div =_read_divisor (clk); +if (!div) + rate = parent_rate; +else + rate = parent_rate / div; + +pr_debug ("%s: recalc'd %s's rate to %lu (div %d)\n" , __func__, +__clk_get_name (hw->clk), rate, div); + +return rate; +} +#else unsigned long omap2_clksel_recalc (struct clk *clk) {unsigned long rate;
@@ -431,6 +535,7 @@ unsigned long omap2_clksel_recalc(struct clk *clk) return rate; } +#endif /** * omap2_clksel_round_rate() - find rounded rate for the given clock and rate
@@ -443,8 +548,15 @@ unsigned long omap2_clksel_recalc(struct clk *clk)* * Returns the rounded clock rate or returns 0xffffffff on error. */ +#ifdef CONFIG_COMMON_CLK +long omap2_clksel_round_rate (struct clk_hw *hw,unsigned long target_rate, +unsigned long *parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else long omap2_clksel_round_rate (struct clk *clk,unsigned long target_rate) { +#endif u32 new_div;return omap2_clksel_round_rate_div (clk, target_rate, &new_div);
@@ -465,8 +577,15 @@ long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate)* is changed, they will all be affected without any notification. * Returns -EINVAL upon error, or 0 upon success. */ +#ifdef CONFIG_COMMON_CLK +int omap2_clksel_set_rate (struct clk_hw *hw,unsigned long rate, +unsigned long parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else int omap2_clksel_set_rate (struct clk *clk,unsigned long rate) { +#endif u32 field_val, validrate, new_div =0 ;if (!clk->clksel || !clk->clksel_mask)
@@ -482,12 +601,16 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long rate)_write_clksel_reg (clk, field_val); - clk->rate =__clk_get_rate (__clk_get_parent (clk)) / new_div; - pr_debug("clock: %s: set rate to %ld\n", +#ifdef CONFIG_COMMON_CLK +__clk_get_name (hw->clk), + __clk_get_rate(hw->clk)); +#else __clk_get_name (clk), __clk_get_rate(clk)); + clk->rate =__clk_get_rate (__clk_get_parent (clk)) / new_div; +#endif return 0 ; }
@@ -511,6 +634,18 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long rate)* affected without any notification. Returns -EINVAL upon error, or * 0 upon success. */ +#ifdef CONFIG_COMMON_CLK +int omap2_clksel_set_parent (struct clk_hw *hw,u8 field_val) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); + +if (!clk->clksel || !clk->clksel_mask) +return -EINVAL ; + +_write_clksel_reg (clk, field_val); +return 0 ; +} +#else int omap2_clksel_set_parent (struct clk *clk,struct clk *new_parent) {u32 field_val =0 ;
@@ -522,7 +657,6 @@ int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent) parent_div =_get_div_and_fieldval (new_parent, clk, &field_val);if (!parent_div)return -EINVAL ; -_write_clksel_reg (clk, field_val);clk_reparent (clk, new_parent);
@@ -532,7 +666,6 @@ int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent)if (parent_div >0 )__clk_get_rate (clk) /= parent_div; - pr_debug("clock: %s: set parent to %s (new rate %ld)\n", __clk_get_name(clk), __clk_get_name(__clk_get_parent(clk)),
@@ -540,3 +673,4 @@ int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent) return 0; } +#endif
arch/arm/mach-omap2/clkt_dpll.c +53 -1
129 lines not on this page · raw message
arch/arm/mach-omap2/clkt_iclk.c +4 -0
@@ -11,7 +11,11 @@#undef DEBUG#include <linux/kernel.h> +#ifdef CONFIG_COMMON_CLK +#include <linux/clk-provider.h> +#else #include <linux/clk.h> +#endif #include <linux/io.h> #include <plat/clock.h>
arch/arm/mach-omap2/clock.c +192 -8
289 lines not on this page · raw message
arch/arm/mach-omap2/clock.h +59 -1
113 lines not on this page · raw message
arch/arm/mach-omap2/dpll3xxx.c +197 -1
408 lines not on this page · raw message
arch/arm/mach-omap2/dpll44xx.c +37 -0
@@ -23,7 +23,11 @@#include "cm-regbits-44xx.h" /* Supported only on OMAP4 */ +#ifdef CONFIG_COMMON_CLK +int omap4_dpllmx_gatectrl_read(struct clk_hw_omap *clk) +#else int omap4_dpllmx_gatectrl_read(struct clk *clk) +#endif {u32 v;u32 mask;
@@ -42,7 +46,11 @@ int omap4_dpllmx_gatectrl_read(struct clk *clk)return v; } +#ifdef CONFIG_COMMON_CLK +void omap4_dpllmx_allow_gatectrl(struct clk_hw_omap *clk) +#else void omap4_dpllmx_allow_gatectrl(struct clk *clk) +#endif {u32 v;u32 mask;
@@ -60,7 +68,11 @@ void omap4_dpllmx_allow_gatectrl(struct clk *clk)__raw_writel (v, clk->clksel_reg); } +#ifdef CONFIG_COMMON_CLK +void omap4_dpllmx_deny_gatectrl(struct clk_hw_omap *clk) +#else void omap4_dpllmx_deny_gatectrl(struct clk *clk) +#endif {u32 v;u32 mask;
@@ -78,10 +90,17 @@ void omap4_dpllmx_deny_gatectrl(struct clk *clk)__raw_writel (v, clk->clksel_reg); } +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_omap4_dpllmx = { + .allow_idle = omap4_dpllmx_allow_gatectrl, + .deny_idle = omap4_dpllmx_deny_gatectrl, +}; +#else const struct clkops clkops_omap4_dpllmx_ops = { .allow_idle = omap4_dpllmx_allow_gatectrl, .deny_idle = omap4_dpllmx_deny_gatectrl, }; +#endif /** * omap4_dpll_regm4xen_recalc - compute DPLL rate, considering REGM4XEN bit
@@ -92,8 +111,15 @@ const struct clkops clkops_omap4_dpllmx_ops = {* OMAP4 ABE DPLL. Returns the DPLL's output rate (before M-dividers) * upon success, or 0 upon error. */ +#ifdef CONFIG_COMMON_CLK +unsigned long omap4_dpll_regm4xen_recalc (struct clk_hw *hw, +unsigned long parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else unsigned long omap4_dpll_regm4xen_recalc (struct clk *clk) { +#endif u32 v;unsigned long rate;struct dpll_data *dd;
@@ -125,8 +151,15 @@ unsigned long omap4_dpll_regm4xen_recalc(struct clk *clk)* M-dividers) upon success, -EINVAL if @clk is null or not a DPLL, or * ~0 if an error occurred in omap2_dpll_round_rate(). */ +#ifdef CONFIG_COMMON_CLK +long omap4_dpll_regm4xen_round_rate (struct clk_hw *hw,unsigned long target_rate, +unsigned long *parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else long omap4_dpll_regm4xen_round_rate (struct clk *clk,unsigned long target_rate) { +#endif u32 v;struct dpll_data *dd;long r;
@@ -142,7 +175,11 @@ long omap4_dpll_regm4xen_round_rate(struct clk *clk, unsigned long target_rate)if (v) target_rate = target_rate /OMAP4430_REGM4XEN_MULT ; +#ifdef CONFIG_COMMON_CLK + r =omap2_dpll_round_rate (hw, target_rate,NULL ); +#else r =omap2_dpll_round_rate (clk, target_rate); +#endif if (r == ~0 )return r;
Signature · 1 line
1.7.1
PATCH 13/29 ARM: omap3: clk: Convert to common clk
In reply to Rajendra NayakConvert all OMAP3 specific platform files to use COMMON clk and keep all the chnages under the CONFIG_COMMON_CLK macro check so it does not break any existing code. At a later point switch to COMMON clk and get rid of all old/legacy code.
--- arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 13 ++++++++ arch/arm/mach-omap2/clkt_iclk.c | 15 +++++++++ arch/arm/mach-omap2/clock.h | 22 ++++++++++++- arch/arm/mach-omap2/clock34xx.c | 51 ++++++++++++++++++++++++++++++++ arch/arm/mach-omap2/clock3517.c | 31 +++++++++++++++++-- arch/arm/mach-omap2/clock36xx.c | 25 +++++++++++++-- arch/arm/mach-omap2/clock36xx.h | 4 ++ arch/arm/mach-omap2/clock3xxx.c | 10 +++++- arch/arm/mach-omap2/clock3xxx.h | 7 ++++ 9 files changed, 168 insertions(+), 10 deletions(-)
arch/arm/mach-omap2/clkt34xx_dpll3m2.c +13 -0
@@ -47,8 +47,15 @@* Program the DPLL M2 divider with the rounded target rate. Returns * -EINVAL upon error, or 0 upon success. */ +#ifdef CONFIG_COMMON_CLK +int omap3_core_dpll_m2_set_rate (struct clk_hw *hw,unsigned long rate, +unsigned long parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else int omap3_core_dpll_m2_set_rate (struct clk *clk,unsigned long rate) { +#endif u32 new_div =0 ;u32 unlock_dll =0 ;u32 c;
@@ -66,7 +73,11 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)return -EINVAL ; sdrcrate =__clk_get_rate (sdrc_ick_p); +#ifdef CONFIG_COMMON_CLK + clkrate =__clk_get_rate (hw->clk); +#else clkrate =__clk_get_rate (clk); +#endif if (rate > clkrate) sdrcrate <<= ((rate / clkrate) >>1 );else
@@ -117,7 +128,9 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate) sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, sdrc_cs0->actim_ctrlb, sdrc_cs0->mr, 0, 0, 0, 0); +#ifndef CONFIG_COMMON_CLK clk->rate = rate; +#endif return 0 ; }
arch/arm/mach-omap2/clkt_iclk.c +15 -0
@@ -29,7 +29,11 @@/* Private functions */ /* XXX */ +#ifdef CONFIG_COMMON_CLK +void omap2_clkt_iclk_allow_idle(struct clk_hw_omap *clk) +#else void omap2_clkt_iclk_allow_idle(struct clk *clk) +#endif {u32 v, r;
@@ -41,7 +45,11 @@ void omap2_clkt_iclk_allow_idle(struct clk *clk) }/* XXX */ +#ifdef CONFIG_COMMON_CLK +void omap2_clkt_iclk_deny_idle(struct clk_hw_omap *clk) +#else void omap2_clkt_iclk_deny_idle(struct clk *clk) +#endif {u32 v, r;
@@ -52,6 +60,12 @@ void omap2_clkt_iclk_deny_idle(struct clk *clk)__raw_writel (v, (__force void __iomem *)r); } +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_iclk = { + .allow_idle = omap2_clkt_iclk_allow_idle, + .deny_idle = omap2_clkt_iclk_deny_idle, +}; +#else /* Public data */ const struct clkops clkops_omap2_iclk_dflt_wait = {
@@ -83,4 +97,5 @@ const struct clkops clkops_omap2_mdmclk_dflt_wait = { .allow_idle = omap2_clkt_iclk_allow_idle, .deny_idle = omap2_clkt_iclk_deny_idle, }; +#endif
arch/arm/mach-omap2/clock.h +20 -2
@@ -124,8 +124,13 @@ int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent);#endif /* clkt_iclk.c public functions */ +#ifdef CONFIG_COMMON_CLK +extern void omap2_clkt_iclk_allow_idle (struct clk_hw_omap *clk); +extern void omap2_clkt_iclk_deny_idle (struct clk_hw_omap *clk); +#else extern void omap2_clkt_iclk_allow_idle (struct clk *clk);extern void omap2_clkt_iclk_deny_idle (struct clk *clk); +#endif #ifdef CONFIG_COMMON_CLK u8 omap2_init_dpll_parent (struct clk_hw *hw);
@@ -202,8 +207,20 @@ extern const struct clk_hw_omap_ops clkhwops_omap3_dpll;extern const struct clk_hw_omap_ops clkhwops_iclk_wait;extern const struct clk_hw_omap_ops clkhwops_wait;extern const struct clk_hw_omap_ops clkhwops_omap4_dpllmx; -#endif - +extern const struct clk_hw_omap_ops clkhwops_iclk; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_ssi_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait; +extern const struct clk_hw_omap_ops clkhwops_omap3430es2_hsotgusb_wait; +extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait; +extern const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait; +extern const struct clk_hw_omap_ops clkhwops_apll54; +extern const struct clk_hw_omap_ops clkhwops_apll96; +extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; +extern const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait; +#else extern const struct clkops clkops_omap2_iclk_dflt_wait;extern const struct clkops clkops_omap2_iclk_dflt;extern const struct clkops clkops_omap2_iclk_idle_only;
@@ -212,5 +229,6 @@ extern const struct clkops clkops_omap2xxx_dpll_ops;extern const struct clkops clkops_omap3_noncore_dpll_ops;extern const struct clkops clkops_omap3_core_dpll_ops;extern const struct clkops clkops_omap4_dpllmx_ops; +#endif /* CONFIG_COMMON_CLK */ #endif
arch/arm/mach-omap2/clock34xx.c +51 -0
108 lines not on this page · raw message
arch/arm/mach-omap2/clock3517.c +28 -3
@@ -49,7 +49,11 @@* in the enable register itsel at a bit offset of 4 from the enable * bit. A value of 1 indicates that clock is enabled. */ +#ifdef CONFIG_COMMON_CLK +static void am35xx_clk_find_idlest (struct clk_hw_omap *clk, +#elsestatic void am35xx_clk_find_idlest (struct clk *clk, +#endifvoid __iomem **idlest_reg,u8 *idlest_bit, u8 *idlest_val)
@@ -73,7 +77,11 @@ static void am35xx_clk_find_idlest(struct clk *clk,* associate this type of code with per-module data structures to * avoid this issue, and remove the casts. No return value. */ +#ifdef CONFIG_COMMON_CLK +static void am35xx_clk_find_companion (struct clk_hw_omap *clk,void __iomem **other_reg, +#elsestatic void am35xx_clk_find_companion (struct clk *clk,void __iomem **other_reg, +#endif u8 *other_bit) { *other_reg = (__force void __iomem *)(clk->enable_reg);
@@ -82,13 +90,19 @@ static void am35xx_clk_find_companion(struct clk *clk, void __iomem **other_reg,else *other_bit = clk->enable_bit -AM35XX_IPSS_ICK_FCK_OFFSET ; } - +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_am35xx_ipss_module_wait = { + .find_idlest = am35xx_clk_find_idlest, + .find_companion = am35xx_clk_find_companion, +}; +#else const struct clkops clkops_am35xx_ipss_module_wait = { .enable = omap2_dflt_clk_enable, .disable = omap2_dflt_clk_disable, .find_idlest = am35xx_clk_find_idlest, .find_companion = am35xx_clk_find_companion, }; +#endif /** * am35xx_clk_ipss_find_idlest - return CM_IDLEST info for IPSS
@@ -101,7 +115,11 @@ const struct clkops clkops_am35xx_ipss_module_wait = {* CM_{I,F}CLKEN bit. Pass back the correct info via @idlest_reg * and @idlest_bit. No return value. */ +#ifdef CONFIG_COMMON_CLK +static void am35xx_clk_ipss_find_idlest (struct clk_hw_omap *clk, +#elsestatic void am35xx_clk_ipss_find_idlest (struct clk *clk, +#endifvoid __iomem **idlest_reg,u8 *idlest_bit, u8 *idlest_val)
@@ -113,7 +131,14 @@ static void am35xx_clk_ipss_find_idlest(struct clk *clk, *idlest_bit =AM35XX_ST_IPSS_SHIFT ; *idlest_val =OMAP34XX_CM_IDLEST_VAL ; } - +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_am35xx_ipss_wait = { + .allow_idle = omap2_clkt_iclk_allow_idle, + .deny_idle = omap2_clkt_iclk_deny_idle, + .find_idlest = am35xx_clk_ipss_find_idlest, + .find_companion = omap2_clk_dflt_find_companion, +}; +#else const struct clkops clkops_am35xx_ipss_wait = { .enable = omap2_dflt_clk_enable, .disable = omap2_dflt_clk_disable,
@@ -122,5 +147,5 @@ const struct clkops clkops_am35xx_ipss_wait = { .allow_idle = omap2_clkt_iclk_allow_idle, .deny_idle = omap2_clkt_iclk_deny_idle, }; - +#endif
arch/arm/mach-omap2/clock36xx.c +21 -4
@@ -39,34 +39,51 @@* (Any other value different from the Read value) to the * corresponding CM_CLKSEL register will refresh the dividers. */ +#ifdef CONFIG_COMMON_CLK +int omap36xx_pwrdn_clk_enable_with_hsdiv_restore (struct clk_hw *clk) +{ +struct clk_hw_omap *parent; +struct clk_hw *parent_hw; +#else static int omap36xx_pwrdn_clk_enable_with_hsdiv_restore (struct clk *clk) { +struct clk *parent; +#endif u32 dummy_v, orig_v, clksel_shift;int ret;/* Clear PWRDN bit of HSDIVIDER */ ret =omap2_dflt_clk_enable (clk); +#ifdef CONFIG_COMMON_CLK + parent_hw =__clk_get_hw (__clk_get_parent (clk->clk)); + parent =to_clk_hw_omap (parent_hw); +#else + parent = clk->parent; +#endif +/* Restore the dividers */ if (!ret) { - clksel_shift =__ffs (clk->parent->clksel_mask); - orig_v =__raw_readl (clk->parent->clksel_reg); + clksel_shift =__ffs (parent->clksel_mask); + orig_v =__raw_readl (parent->clksel_reg); dummy_v = orig_v;/* Write any other value different from the Read value */ dummy_v ^= (1 << clksel_shift); -__raw_writel (dummy_v, clk->parent->clksel_reg); +__raw_writel (dummy_v, parent->clksel_reg);/* Write the original divider */ -__raw_writel (orig_v, clk->parent->clksel_reg); +__raw_writel (orig_v, parent->clksel_reg); }return ret; } +#ifndef CONFIG_COMMON_CLK const struct clkops clkops_omap36xx_pwrdn_with_hsdiv_wait_restore = { .enable = omap36xx_pwrdn_clk_enable_with_hsdiv_restore, .disable = omap2_dflt_clk_disable, .find_companion = omap2_clk_dflt_find_companion, .find_idlest = omap2_clk_dflt_find_idlest, }; +#endif
arch/arm/mach-omap2/clock36xx.h +4 -0
@@ -8,6 +8,10 @@#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK36XX_H#define __ARCH_ARM_MACH_OMAP2_CLOCK36XX_H +#ifdef CONFIG_COMMON_CLK +extern int omap36xx_pwrdn_clk_enable_with_hsdiv_restore (struct clk_hw *hw); +#else extern const struct clkops clkops_omap36xx_pwrdn_with_hsdiv_wait_restore; +#endif #endif
arch/arm/mach-omap2/clock3xxx.c +9 -1
@@ -40,8 +40,12 @@/* needed by omap3_core_dpll_m2_set_rate() */ struct clk *sdrc_ick_p, *arm_fck_p; - +#ifdef CONFIG_COMMON_CLK +int omap3_dpll4_set_rate (struct clk_hw *hw,unsigned long rate, + unsigned long parent_rate) +#else int omap3_dpll4_set_rate(struct clk *clk, unsigned long rate) +#endif {/* * According to the 12-5 CDP code from TI, "Limitation 2.5"
@@ -54,7 +58,11 @@ int omap3_dpll4_set_rate(struct clk *clk, unsigned long rate)return -EINVAL ; } +#ifdef CONFIG_COMMON_CLK +return omap3_noncore_dpll_set_rate (hw, rate, parent_rate); +#else return omap3_noncore_dpll_set_rate (clk, rate); +#endif }void __init omap3_clk_lock_dpll5 (void )
arch/arm/mach-omap2/clock3xxx.h +7 -0
@@ -9,8 +9,15 @@#define __ARCH_ARM_MACH_OMAP2_CLOCK3XXX_Hint omap3xxx_clk_init (void ); +#ifdef CONFIG_COMMON_CLK +int omap3_dpll4_set_rate (struct clk_hw *clk,unsigned long rate, +unsigned long parent_rate); +int omap3_core_dpll_m2_set_rate (struct clk_hw *clk,unsigned long rate, +unsigned long parent_rate); +#else int omap3_dpll4_set_rate (struct clk *clk,unsigned long rate);int omap3_core_dpll_m2_set_rate (struct clk *clk,unsigned long rate); +#endif void omap3_clk_lock_dpll5 (void );extern struct clk *sdrc_ick_p;
Signature · 1 line
1.7.1
PATCH 14/29 ARM: omap2: clk: Convert to common clk
In reply to Rajendra NayakConvert all OMAP2 specific platform files to use COMMON clk and keep all the chnages under the CONFIG_COMMON_CLK macro check so it does not break any existing code. At a later point switch to COMMON clk and get rid of all old/legacy code.
--- arch/arm/mach-omap2/clkt2xxx_apll.c | 51 ++++++++++++++++++++++++++ arch/arm/mach-omap2/clkt2xxx_dpll.c | 16 ++++++++- arch/arm/mach-omap2/clkt2xxx_dpllcore.c | 21 +++++++++++ arch/arm/mach-omap2/clkt2xxx_osc.c | 14 +++++++ arch/arm/mach-omap2/clkt2xxx_sys.c | 8 ++++- arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 18 +++++++++ arch/arm/mach-omap2/clock2430.c | 11 ++++++ arch/arm/mach-omap2/clock2xxx.c | 1 + arch/arm/mach-omap2/clock2xxx.h | 30 +++++++++++++++ arch/arm/mach-omap2/pm24xx.c | 8 ++++ 10 files changed, 176 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/clkt2xxx_apll.c +51 -0
@@ -43,8 +43,14 @@ void __iomem *cm_idlest_pll;/* Private functions */ /* Enable an APLL if off */ +#ifdef CONFIG_COMMON_CLK +static int omap2_clk_apll_enable (struct clk_hw *hw,u32 status_mask) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else static int omap2_clk_apll_enable (struct clk *clk,u32 status_mask) { +#endif u32 cval, apll_mask; apll_mask =EN_APLL_LOCKED << clk->enable_bit;
@@ -59,7 +65,11 @@ static int omap2_clk_apll_enable(struct clk *clk, u32 status_mask)omap2_cm_write_mod_reg (cval,PLL_MOD ,CM_CLKEN );omap2_cm_wait_idlest (cm_idlest_pll, status_mask, +#ifdef CONFIG_COMMON_CLK +OMAP24XX_CM_IDLEST_VAL ,__clk_get_name (hw->clk)); +#else OMAP24XX_CM_IDLEST_VAL, __clk_get_name(clk)); +#endif /* * REVISIT: Should we return an error code if omap2_wait_clock_ready()
@@ -68,39 +78,69 @@ static int omap2_clk_apll_enable(struct clk *clk, u32 status_mask) return 0; } +#ifdef CONFIG_COMMON_CLK +int omap2_clk_apll96_enable(struct clk_hw *clk) +#else static int omap2_clk_apll96_enable(struct clk *clk) +#endif { return omap2_clk_apll_enable(clk, OMAP24XX_ST_96M_APLL_MASK); } +#ifdef CONFIG_COMMON_CLK +int omap2_clk_apll54_enable(struct clk_hw *clk) +#else static int omap2_clk_apll54_enable(struct clk *clk) +#endif { return omap2_clk_apll_enable(clk, OMAP24XX_ST_54M_APLL_MASK); } +#ifdef CONFIG_COMMON_CLK +void _apll96_allow_idle(struct clk_hw_omap *clk) +#else static void _apll96_allow_idle(struct clk *clk) +#endif { omap2xxx_cm_set_apll96_auto_low_power_stop(); } +#ifdef CONFIG_COMMON_CLK +void _apll96_deny_idle(struct clk_hw_omap *clk) +#else static void _apll96_deny_idle(struct clk *clk) +#endif { omap2xxx_cm_set_apll96_disable_autoidle(); } +#ifdef CONFIG_COMMON_CLK +void _apll54_allow_idle(struct clk_hw_omap *clk) +#else static void _apll54_allow_idle(struct clk *clk) +#endif { omap2xxx_cm_set_apll54_auto_low_power_stop(); } +#ifdef CONFIG_COMMON_CLK +void _apll54_deny_idle(struct clk_hw_omap *clk) +#else static void _apll54_deny_idle(struct clk *clk) +#endif { omap2xxx_cm_set_apll54_disable_autoidle(); } /* Stop APLL */ +#ifdef CONFIG_COMMON_CLK +void omap2_clk_apll_disable(struct clk_hw *hw) +{ + struct clk_hw_omap *clk = to_clk_hw_omap(hw); +#else static void omap2_clk_apll_disable(struct clk *clk) { +#endif u32 cval; cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
@@ -109,7 +149,17 @@ static void omap2_clk_apll_disable(struct clk *clk) }/* Public data */ +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_apll54 = { + .allow_idle = _apll54_allow_idle, + .deny_idle = _apll54_deny_idle, +}; +const struct clk_hw_omap_ops clkhwops_apll96 = { + .allow_idle = _apll96_allow_idle, + .deny_idle = _apll96_deny_idle, +}; +#else const struct clkops clkops_apll96 = { .enable = omap2_clk_apll96_enable, .disable = omap2_clk_apll_disable,
@@ -123,6 +173,7 @@ const struct clkops clkops_apll54 = { .allow_idle = _apll54_allow_idle, .deny_idle = _apll54_deny_idle, }; +#endif /* Public functions */
arch/arm/mach-omap2/clkt2xxx_dpll.c +15 -1
@@ -31,7 +31,11 @@* REVISIT: DPLL can optionally enter low-power bypass by writing 0x1 * instead. Add some mechanism to optionally enter this mode. */ +#ifdef CONFIG_COMMON_CLK +void _allow_idle(struct clk_hw_omap *clk) +#else static void _allow_idle(struct clk *clk) +#endif {if (!clk || !clk->dpll_data)return ;
@@ -45,7 +49,11 @@ static void _allow_idle(struct clk *clk)* * Disable DPLL automatic idle control. No return value. */ +#ifdef CONFIG_COMMON_CLK +void _deny_idle(struct clk_hw_omap *clk) +#else static void _deny_idle(struct clk *clk) +#endif {if (!clk || !clk->dpll_data)return ;
@@ -55,9 +63,15 @@ static void _deny_idle(struct clk *clk)/* Public data */ - +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll = { + .allow_idle = _allow_idle, + .deny_idle = _deny_idle, +}; +#else const struct clkops clkops_omap2xxx_dpll_ops = { .allow_idle = _allow_idle, .deny_idle = _deny_idle, }; +#endif
arch/arm/mach-omap2/clkt2xxx_dpllcore.c +21 -0
@@ -47,7 +47,11 @@* struct clk *dpll_ck, which is a composite clock of dpll_ck and * core_ck. */ +#ifdef CONFIG_COMMON_CLK +unsigned long omap2xxx_clk_get_core_rate(struct clk_hw_omap *clk) +#else unsigned long omap2xxx_clk_get_core_rate(struct clk *clk) +#endif {long long core_clk;u32 v;
@@ -98,19 +102,36 @@ static long omap2_dpllcore_round_rate(unsigned long target_rate) } +#ifdef CONFIG_COMMON_CLK +unsigned long omap2_dpllcore_recalc (struct clk_hw *hw,unsigned long parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else unsigned long omap2_dpllcore_recalc (struct clk *clk) { +#endif return omap2xxx_clk_get_core_rate (clk); } +#ifdef CONFIG_COMMON_CLK +int omap2_reprogram_dpllcore (struct clk_hw *hw,unsigned long rate, +unsigned long parent_rate) +{ +struct clk_hw_omap *clk =to_clk_hw_omap (hw); +#else int omap2_reprogram_dpllcore (struct clk *clk,unsigned long rate) { +#endif u32 cur_rate, low, mult, div, valid_rate, done_rate;u32 bypass =0 ;struct prcm_config tmpset;const struct dpll_data *dd; +#ifdef CONFIG_COMMON_CLK + cur_rate =omap2xxx_clk_get_core_rate (to_clk_hw_omap (dclk_hw)); +#else cur_rate =omap2xxx_clk_get_core_rate (dclk); +#endif mult =omap2_cm_read_mod_reg (PLL_MOD ,CM_CLKSEL2 ); mult &=OMAP24XX_CORE_CLK_SRC_MASK ;
arch/arm/mach-omap2/clkt2xxx_osc.c +14 -0
@@ -37,7 +37,11 @@* clk_enable/clk_disable()-based usecounting for osc_ck should be * replaced with autoidle-based usecounting. */ +#ifdef CONFIG_COMMON_CLK +int omap2_enable_osc_ck(struct clk_hw *clk) +#else static int omap2_enable_osc_ck(struct clk *clk) +#endif {u32 pcc;
@@ -55,7 +59,11 @@ static int omap2_enable_osc_ck(struct clk *clk)* clk_enable/clk_disable()-based usecounting for osc_ck should be * replaced with autoidle-based usecounting. */ +#ifdef CONFIG_COMMON_CLK +void omap2_disable_osc_ck(struct clk_hw *clk) +#else static void omap2_disable_osc_ck(struct clk *clk) +#endif {u32 pcc;
@@ -64,12 +72,18 @@ static void omap2_disable_osc_ck(struct clk *clk)__raw_writel (pcc |OMAP_AUTOEXTCLKMODE_MASK , prcm_clksrc_ctrl); } +#ifndef CONFIG_COMMON_CLK const struct clkops clkops_oscck = { .enable = omap2_enable_osc_ck, .disable = omap2_disable_osc_ck, }; +#endif +#ifdef CONFIG_COMMON_CLK +unsigned long omap2_osc_clk_recalc(struct clk_hw *clk, unsigned long parent_rate) +#else unsigned long omap2_osc_clk_recalc(struct clk *clk) +#endif {return omap2xxx_get_apll_clkin () *omap2xxx_get_sysclkdiv (); }
arch/arm/mach-omap2/clkt2xxx_sys.c +7 -1
@@ -42,9 +42,15 @@ u32 omap2xxx_get_sysclkdiv(void)return div; } +#ifdef CONFIG_COMMON_CLK +unsigned long omap2xxx_sys_clk_recalc (struct clk_hw *clk,unsigned long parent_rate) +{ +return parent_rate /omap2xxx_get_sysclkdiv (); +} +#else unsigned long omap2xxx_sys_clk_recalc (struct clk *clk) {return clk->parent->rate /omap2xxx_get_sysclkdiv (); } - +#endif
arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c +18 -0
@@ -53,7 +53,11 @@ const struct prcm_config *rate_table;* * Set virt_prcm_set's rate to the mpu_speed field of the current PRCM set. */ +#ifdef CONFIG_COMMON_CLK +unsigned long omap2_table_mpu_recalc(struct clk_hw *clk, unsigned long parent_rate) +#else unsigned long omap2_table_mpu_recalc(struct clk *clk) +#endif {return curr_prcm_set->mpu_speed; }
@@ -65,7 +69,12 @@ unsigned long omap2_table_mpu_recalc(struct clk *clk)* Some might argue L3-DDR, others ARM, others IVA. This code is simple and * just uses the ARM rates. */ +#ifdef CONFIG_COMMON_CLK +long omap2_round_to_table_rate (struct clk_hw *hw,unsigned long rate, + unsigned long *parent_rate) +#else long omap2_round_to_table_rate(struct clk *clk, unsigned long rate) +#endif {const struct prcm_config *ptr;long highest_rate;
@@ -88,7 +97,12 @@ long omap2_round_to_table_rate(struct clk *clk, unsigned long rate) }/* Sets basic clocks based on the specified rate */ +#ifdef CONFIG_COMMON_CLK +int omap2_select_table_rate (struct clk_hw *hw,unsigned long rate, + unsigned long parent_rate) +#else int omap2_select_table_rate(struct clk *clk, unsigned long rate) +#endif {u32 cur_rate, done_rate, bypass =0 , tmp;const struct prcm_config *prcm;
@@ -115,7 +129,11 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate) } curr_prcm_set = prcm; +#ifdef CONFIG_COMMON_CLK + cur_rate =omap2xxx_clk_get_core_rate (to_clk_hw_omap (dclk_hw)); +#else cur_rate =omap2xxx_clk_get_core_rate (dclk); +#endif if (prcm->dpll_speed == cur_rate /2 ) {omap2xxx_sdrc_reprogram (CORE_CLK_SRC_DPLL ,1 );
arch/arm/mach-omap2/clock2430.c +11 -0
@@ -42,7 +42,11 @@* passes back the correct CM_IDLEST register address for I2CHS * modules. No return value. */ +#ifdef CONFIG_COMMON_CLK +static void omap2430_clk_i2chs_find_idlest (struct clk_hw_omap *clk, +#elsestatic void omap2430_clk_i2chs_find_idlest (struct clk *clk, +#endifvoid __iomem **idlest_reg,u8 *idlest_bit, u8 *idlest_val)
@@ -53,9 +57,16 @@ static void omap2430_clk_i2chs_find_idlest(struct clk *clk, }/* 2430 I2CHS has non-standard IDLEST register */ +#ifdef CONFIG_COMMON_CLK +const struct clk_hw_omap_ops clkhwops_omap2430_i2chs_wait = { + .find_idlest = omap2430_clk_i2chs_find_idlest, + .find_companion = omap2_clk_dflt_find_companion, +}; +#else const struct clkops clkops_omap2430_i2chs_wait = { .enable = omap2_dflt_clk_enable, .disable = omap2_dflt_clk_disable, .find_idlest = omap2430_clk_i2chs_find_idlest, .find_companion = omap2_clk_dflt_find_companion, }; +#endif
arch/arm/mach-omap2/clock2xxx.c +1 -0
@@ -31,6 +31,7 @@#include "cm-regbits-24xx.h" struct clk *vclk, *sclk, *dclk; +struct clk_hw *dclk_hw;/* * Omap24xx specific clock functions
arch/arm/mach-omap2/clock2xxx.h +30 -0
@@ -8,6 +8,20 @@#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK2XXX_H#define __ARCH_ARM_MACH_OMAP2_CLOCK2XXX_H +#ifdef CONFIG_COMMON_CLK +#include <linux/clk-provider.h> +#include "clock.h" + +unsigned long omap2_table_mpu_recalc (struct clk_hw *clk,unsigned long parent_rate); +int omap2_select_table_rate (struct clk_hw *hw,unsigned long rate,unsigned long parent_rate); +long omap2_round_to_table_rate (struct clk_hw *hw,unsigned long rate, +unsigned long *parent_rate); +unsigned long omap2xxx_sys_clk_recalc (struct clk_hw *clk,unsigned long parent_rate); +unsigned long omap2_osc_clk_recalc (struct clk_hw *clk,unsigned long parent_rate); +unsigned long omap2_dpllcore_recalc (struct clk_hw *hw,unsigned long parent_rate); +int omap2_reprogram_dpllcore (struct clk_hw *clk,unsigned long rate,unsigned long parent_rate); +unsigned long omap2xxx_clk_get_core_rate (struct clk_hw_omap *clk); +#else unsigned long omap2_table_mpu_recalc (struct clk *clk);int omap2_select_table_rate (struct clk *clk,unsigned long rate);long omap2_round_to_table_rate (struct clk *clk,unsigned long rate);
@@ -16,6 +30,7 @@ unsigned long omap2_osc_clk_recalc(struct clk *clk);unsigned long omap2_dpllcore_recalc (struct clk *clk);int omap2_reprogram_dpllcore (struct clk *clk,unsigned long rate);unsigned long omap2xxx_clk_get_core_rate (struct clk *clk); +#endif u32 omap2xxx_get_apll_clkin (void );u32 omap2xxx_get_sysclkdiv (void );void omap2xxx_clk_prepare_for_reboot (void );
@@ -36,9 +51,24 @@ extern void __iomem *prcm_clksrc_ctrl, *cm_idlest_pll;extern struct clk *dclk; +#ifdef CONFIG_COMMON_CLK +extern struct clk_hw *dclk_hw; +int omap2_enable_osc_ck (struct clk_hw *hw); +void omap2_disable_osc_ck (struct clk_hw *hw); +int omap2_clk_apll96_enable (struct clk_hw *hw); +int omap2_clk_apll54_enable (struct clk_hw *hw); +void _apll96_allow_idle (struct clk_hw_omap *hw); +void _apll96_deny_idle (struct clk_hw_omap *hw); +void _apll54_allow_idle (struct clk_hw_omap *hw); +void _apll54_deny_idle (struct clk_hw_omap *hw); +void omap2_clk_apll_disable (struct clk_hw *hw); +void _allow_idle (struct clk_hw_omap *hw); +void _deny_idle (struct clk_hw_omap *hw); +#else extern const struct clkops clkops_omap2430_i2chs_wait;extern const struct clkops clkops_oscck;extern const struct clkops clkops_apll96;extern const struct clkops clkops_apll54; +#endif #endif
arch/arm/mach-omap2/pm24xx.c +8 -0
@@ -25,7 +25,11 @@#include <linux/sysfs.h> #include <linux/module.h> #include <linux/delay.h> +#ifdef CONFIG_COMMON_CLK +#include <linux/clk-provider.h> +#else #include <linux/clk.h> +#endif #include <linux/irq.h> #include <linux/time.h> #include <linux/gpio.h>
@@ -202,7 +206,11 @@ static int omap2_can_sleep(void) {if (omap2_fclks_active ())return 0 ; +#ifdef CONFIG_COMMON_CLK +if (__clk_is_enabled (osc_ck)) +#else if (osc_ck->usecount > 1) +#endif return 0 ;if (omap_dma_running ())return 0 ;
Signature · 1 line
1.7.1
PATCH 15/29 ARM: omap: clk: list all clk_hw_omap clks to enable/disable autoidle
In reply to Rajendra NayakPlatforms can call omap2_init_clk_hw_omap_clocks() to register a clock using clk_hw_omap. omap2_clk_enable_autoidle_all() and omap2_clk_disable_autoidle_all() can then be used to run through all the clocks which support autoidle to enable/disable them.
--- arch/arm/mach-omap2/clock.c | 32 ++++++++++++++++++++++++++++++++ arch/arm/mach-omap2/clock.h | 3 +++ arch/arm/mach-omap2/io.c | 27 +++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/clock.c +32 -0
@@ -50,6 +50,7 @@ u16 cpu_mask;static bool clkdm_control = true;#ifdef CONFIG_COMMON_CLK +LIST_HEAD (clk_hw_omap_clocks);/* * Used for clocks that have the same value as the parent clock,
@@ -359,6 +360,37 @@ static int __init omap_clk_setup(char *str) }__setup ("mpurate=" , omap_clk_setup); +void omap2_init_clk_hw_omap_clocks (struct clk *clk) +{ +struct clk_hw_omap *c; + +if (__clk_get_flags (clk) &CLK_IS_BASIC ) +return ; + + c =to_clk_hw_omap (__clk_get_hw (clk)); +list_add (&c->node, &clk_hw_omap_clocks); +} + +int omap2_clk_enable_autoidle_all (void ) +{ +struct clk_hw_omap *c; + +list_for_each_entry (c, &clk_hw_omap_clocks, node) +if (c->ops && c->ops->allow_idle) + c->ops->allow_idle (c); +return 0 ; +} + +int omap2_clk_disable_autoidle_all (void ) +{ +struct clk_hw_omap *c; + +list_for_each_entry (c, &clk_hw_omap_clocks, node) +if (c->ops && c->ops->allow_idle) + c->ops->allow_idle (c); +return 0 ; +} +const struct clk_hw_omap_ops clkhwops_omap3_dpll = { .allow_idle = omap3_dpll_allow_idle, .deny_idle = omap3_dpll_deny_idle,
arch/arm/mach-omap2/clock.h +3 -0
@@ -175,6 +175,9 @@ void omap2_clk_dflt_find_companion(struct clk_hw_omap *clk, void __iomem **other u8 *other_bit);void omap2_clk_dflt_find_idlest (struct clk_hw_omap *clk,void __iomem **idlest_reg,u8 *idlest_bit,u8 *idlest_val); +void omap2_init_clk_hw_omap_clocks (struct clk *clk); +int omap2_clk_enable_autoidle_all (void ); +int omap2_clk_disable_autoidle_all (void );#else int omap2_dflt_clk_enable (struct clk *clk);void omap2_dflt_clk_disable (struct clk *clk);
arch/arm/mach-omap2/io.c +27 -0
@@ -356,6 +356,9 @@ void __init omap2420_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap2_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }#endif
@@ -378,6 +381,9 @@ void __init omap2430_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap2_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }#endif
@@ -439,6 +445,9 @@ void __init omap3_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }void __init omap3430_init_late (void )
@@ -446,6 +455,9 @@ void __init omap3430_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }void __init omap35xx_init_late (void )
@@ -453,6 +465,9 @@ void __init omap35xx_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }void __init omap3630_init_late (void )
@@ -460,6 +475,9 @@ void __init omap3630_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }void __init am35xx_init_late (void )
@@ -467,6 +485,9 @@ void __init am35xx_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }void __init ti81xx_init_late (void )
@@ -474,6 +495,9 @@ void __init ti81xx_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }#endif
@@ -497,6 +521,9 @@ void __init omap4430_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap4_pm_init (); +#ifdef CONFIG_COMMON_CLK +omap2_clk_enable_autoidle_all (); +#endif }#endif
Signature · 1 line
1.7.1
PATCH 16/29 ARM: omap: clk: Define a function to enable clocks at init
In reply to Rajendra NayakPlatform code can use omap2_clk_enable_init_clocks() to enable a list of clocks that are needed to be enabled at init.
--- arch/arm/mach-omap2/clock.c | 11 +++++++++++ arch/arm/mach-omap2/clock.h | 1 + 2 files changed, 12 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/clock.c +11 -0
@@ -391,6 +391,17 @@ int omap2_clk_disable_autoidle_all(void)return 0 ; } +void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks) +{ +struct clk *init_clk; +int i; + +for (i =0 ; i < num_clocks; i++) { + init_clk =clk_get (NULL , clk_names[i]); +clk_prepare_enable (init_clk); + } +} +const struct clk_hw_omap_ops clkhwops_omap3_dpll = { .allow_idle = omap3_dpll_allow_idle, .deny_idle = omap3_dpll_deny_idle,
arch/arm/mach-omap2/clock.h +1 -0
@@ -178,6 +178,7 @@ void omap2_clk_dflt_find_idlest(struct clk_hw_omap *clk, void __iomem **idlest_rvoid omap2_init_clk_hw_omap_clocks (struct clk *clk);int omap2_clk_enable_autoidle_all (void );int omap2_clk_disable_autoidle_all (void ); +void omap2_clk_enable_init_clocks (const char **clk_names,u8 num_clocks);#else int omap2_dflt_clk_enable (struct clk *clk);void omap2_dflt_clk_disable (struct clk *clk);
Signature · 1 line
1.7.1
PATCH 17/29 ARM: omap: clock: Get rid of unwanted clkdm assocations within clks
In reply to Rajendra Nayakclkdm assocations with clocks in the clock framework are useful only for 'gate' clocks which have enable/disable ops populated. Get rid of the clkdm_names populated in any other type of clocks.
--- arch/arm/mach-omap2/clock2420_data.c | 16 ------------ arch/arm/mach-omap2/clock2430_data.c | 15 ----------- arch/arm/mach-omap2/clock3xxx_data.c | 44 ---------------------------------- 3 files changed, 0 insertions(+), 75 deletions(-)
arch/arm/mach-omap2/clock2420_data.c +0 -16
@@ -56,14 +56,12 @@ static struct clk func_32k_ck = { .name = "func_32k_ck", .ops = &clkops_null, .rate = 32768, - .clkdm_name = "wkup_clkdm", };static struct clk secure_32k_ck = { .name ="secure_32k_ck" , .ops = &clkops_null, .rate =32768 , - .clkdm_name ="wkup_clkdm" , };/* Typical 12/13MHz in standalone mode, will be 26Mhz in chassis mode */
@@ -79,7 +77,6 @@ static struct clk sys_ck = { /* (*12, *13, 19.2, 26, 38.4)MHz */ .name = "sys_ck", /* ~ ref_clk also */ .ops = &clkops_null, .parent = &osc_ck, - .clkdm_name = "wkup_clkdm", .recalc = &omap2xxx_sys_clk_recalc, };
@@ -87,7 +84,6 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */ .name = "alt_ck", .ops = &clkops_null, .rate = 54000000, - .clkdm_name = "wkup_clkdm", };/* Optional external clock input for McBSP CLKS */
@@ -180,7 +176,6 @@ static struct clk func_54m_ck = { .name = "func_54m_ck", .ops = &clkops_null, .parent = &apll54_ck, /* can also be alt_clk */ - .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_54M_SOURCE_MASK,
@@ -192,7 +187,6 @@ static struct clk core_ck = { .name = "core_ck", .ops = &clkops_null, .parent = &dpll_ck, /* can also be 32k */ - .clkdm_name = "wkup_clkdm", .recalc = &followparent_recalc, };
@@ -200,7 +194,6 @@ static struct clk func_96m_ck = { .name = "func_96m_ck", .ops = &clkops_null, .parent = &apll96_ck, - .clkdm_name = "wkup_clkdm", .recalc = &followparent_recalc, };
@@ -226,7 +219,6 @@ static struct clk func_48m_ck = { .name = "func_48m_ck", .ops = &clkops_null, .parent = &apll96_ck, /* 96M or Alt */ - .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_48M_SOURCE_MASK,
@@ -241,7 +233,6 @@ static struct clk func_12m_ck = { .ops = &clkops_null, .parent = &func_48m_ck, .fixed_div = 4, - .clkdm_name = "wkup_clkdm", .recalc = &omap_fixed_divisor_recalc, };
@@ -323,7 +314,6 @@ static struct clk sys_clkout = { .name = "sys_clkout", .ops = &clkops_null, .parent = &sys_clkout_src, - .clkdm_name = "wkup_clkdm", .clksel_reg = OMAP2420_PRCM_CLKOUT_CTRL, .clksel_mask = OMAP24XX_CLKOUT_DIV_MASK, .clksel = sys_clkout_clksel,
@@ -359,7 +349,6 @@ static struct clk sys_clkout2 = { .name = "sys_clkout2", .ops = &clkops_null, .parent = &sys_clkout2_src, - .clkdm_name = "wkup_clkdm", .clksel_reg = OMAP2420_PRCM_CLKOUT_CTRL, .clksel_mask = OMAP2420_CLKOUT2_DIV_MASK, .clksel = sys_clkout2_clksel,
@@ -407,7 +396,6 @@ static struct clk mpu_ck = { /* Control cpu */ .name = "mpu_ck", .ops = &clkops_null, .parent = &core_ck, - .clkdm_name = "mpu_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL), .clksel_mask = OMAP24XX_CLKSEL_MPU_MASK,
@@ -541,7 +529,6 @@ static struct clk core_l3_ck = { /* Used for ick and fck, interconnect */ .name = "core_l3_ck", .ops = &clkops_null, .parent = &core_ck, - .clkdm_name = "core_l3_clkdm", .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_CLKSEL_L3_MASK, .clksel = core_l3_clksel,
@@ -597,7 +584,6 @@ static struct clk l4_ck = { /* used both as an ick and fck */ .name = "l4_ck", .ops = &clkops_null, .parent = &core_l3_ck, - .clkdm_name = "core_l4_clkdm", .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_CLKSEL_L4_MASK, .clksel = l4_clksel,
@@ -815,7 +801,6 @@ static struct clk wu_l4_ick = { .name = "wu_l4_ick", .ops = &clkops_null, .parent = &sys_ck, - .clkdm_name = "wkup_clkdm", .recalc = &followparent_recalc, };
@@ -1597,7 +1582,6 @@ static struct clk sdma_fck = { .name = "sdma_fck", .ops = &clkops_null, /* RMK: missing? */ .parent = &core_l3_ck, - .clkdm_name = "core_l3_clkdm", .recalc = &followparent_recalc, };
arch/arm/mach-omap2/clock2430_data.c +0 -15
@@ -55,14 +55,12 @@ static struct clk func_32k_ck = { .name = "func_32k_ck", .ops = &clkops_null, .rate = 32768, - .clkdm_name = "wkup_clkdm", };static struct clk secure_32k_ck = { .name ="secure_32k_ck" , .ops = &clkops_null, .rate =32768 , - .clkdm_name ="wkup_clkdm" , };/* Typical 12/13MHz in standalone mode, will be 26Mhz in chassis mode */
@@ -78,7 +76,6 @@ static struct clk sys_ck = { /* (*12, *13, 19.2, 26, 38.4)MHz */ .name = "sys_ck", /* ~ ref_clk also */ .ops = &clkops_null, .parent = &osc_ck, - .clkdm_name = "wkup_clkdm", .recalc = &omap2xxx_sys_clk_recalc, };
@@ -86,7 +83,6 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */ .name = "alt_ck", .ops = &clkops_null, .rate = 54000000, - .clkdm_name = "wkup_clkdm", };/* Optional external clock input for McBSP CLKS */
@@ -179,7 +175,6 @@ static struct clk func_54m_ck = { .name = "func_54m_ck", .ops = &clkops_null, .parent = &apll54_ck, /* can also be alt_clk */ - .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_54M_SOURCE_MASK,
@@ -191,7 +186,6 @@ static struct clk core_ck = { .name = "core_ck", .ops = &clkops_null, .parent = &dpll_ck, /* can also be 32k */ - .clkdm_name = "wkup_clkdm", .recalc = &followparent_recalc, };
@@ -216,7 +210,6 @@ static struct clk func_96m_ck = { .name = "func_96m_ck", .ops = &clkops_null, .parent = &apll96_ck, - .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP2430_96M_SOURCE_MASK,
@@ -246,7 +239,6 @@ static struct clk func_48m_ck = { .name = "func_48m_ck", .ops = &clkops_null, .parent = &apll96_ck, /* 96M or Alt */ - .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_48M_SOURCE_MASK,
@@ -261,7 +253,6 @@ static struct clk func_12m_ck = { .ops = &clkops_null, .parent = &func_48m_ck, .fixed_div = 4, - .clkdm_name = "wkup_clkdm", .recalc = &omap_fixed_divisor_recalc, };
@@ -343,7 +334,6 @@ static struct clk sys_clkout = { .name = "sys_clkout", .ops = &clkops_null, .parent = &sys_clkout_src, - .clkdm_name = "wkup_clkdm", .clksel_reg = OMAP2430_PRCM_CLKOUT_CTRL, .clksel_mask = OMAP24XX_CLKOUT_DIV_MASK, .clksel = sys_clkout_clksel,
@@ -388,7 +378,6 @@ static struct clk mpu_ck = { /* Control cpu */ .name = "mpu_ck", .ops = &clkops_null, .parent = &core_ck, - .clkdm_name = "mpu_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL), .clksel_mask = OMAP24XX_CLKSEL_MPU_MASK,
@@ -486,7 +475,6 @@ static struct clk core_l3_ck = { /* Used for ick and fck, interconnect */ .name = "core_l3_ck", .ops = &clkops_null, .parent = &core_ck, - .clkdm_name = "core_l3_clkdm", .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_CLKSEL_L3_MASK, .clksel = core_l3_clksel,
@@ -542,7 +530,6 @@ static struct clk l4_ck = { /* used both as an ick and fck */ .name = "l4_ck", .ops = &clkops_null, .parent = &core_l3_ck, - .clkdm_name = "core_l4_clkdm", .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_CLKSEL_L4_MASK, .clksel = l4_clksel,
@@ -802,7 +789,6 @@ static struct clk wu_l4_ick = { .name = "wu_l4_ick", .ops = &clkops_null, .parent = &sys_ck, - .clkdm_name = "wkup_clkdm", .recalc = &followparent_recalc, };
@@ -1634,7 +1620,6 @@ static struct clk sdma_fck = { .name = "sdma_fck", .ops = &clkops_null, /* RMK: missing? */ .parent = &core_l3_ck, - .clkdm_name = "core_l3_clkdm", .recalc = &followparent_recalc, };
arch/arm/mach-omap2/clock3xxx_data.c +0 -44
308 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH 18/29 ARM: omap4: clk: Add 44xx data using common struct clk
In reply to Rajendra NayakThis patch is output from updated omap hw data autogeneration scripts mostly contributed by Mike Turquette, with some later fixes from me. All data is added into a new cclock44xx_data.c file which will be switched with clock44xx_data.c file in a later patch.
--- arch/arm/mach-omap2/cclock44xx_data.c | 2628 +++++++++++++++++++++++++++++++ arch/arm/mach-omap2/clock.h | 1 + arch/arm/mach-omap2/clock_common_data.c | 14 + arch/arm/mach-omap2/scrm44xx.h | 2 + arch/arm/plat-omap/include/plat/clock.h | 16 + 5 files changed, 2661 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/cclock44xx_data.c
arch/arm/mach-omap2/cclock44xx_data.c new file +2628 -0
@@ -0,0 +1,2628 @@ +/* +* OMAP4 Clock data +* +* Copyright (C) 2009-2012 Texas Instruments, Inc. +* Copyright (C) 2009-2010 Nokia Corporation +* +* Paul Walmsley (paul at pwsan.com) +* Rajendra Nayak (rnayak at ti.com) +* Benoit Cousson (b-cousson at ti.com) +* Mike Turquette (mturquette at ti.com) +* +* This file is automatically generated from the OMAP hardware databases. +* We respectfully ask that any modifications to this file be coordinated +* with the public linux-omap at vger.kernel.org mailing list and the +* authors above to ensure that the autogeneration scripts are kept +* up-to-date with the file contents. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* XXX Some of the ES1 clocks have been removed/changed; once support +* is added for discriminating clocks by ES level, these should be added back +* in. +*/ + +#include <linux/kernel.h> +#include <linux/list.h> +#include <linux/clk-private.h> +#include <linux/clkdev.h> +#include <linux/io.h> + +#include <plat/hardware.h> +#include <plat/clkdev_omap.h> + +#include "iomap.h" +#include "clock.h" +#include "clock44xx.h" +#include "cm1_44xx.h" +#include "cm2_44xx.h" +#include "cm-regbits-44xx.h" +#include "prm44xx.h" +#include "prm-regbits-44xx.h" +#include "control.h" +#include "scrm44xx.h" + +/* OMAP4 modulemode control */ +#define OMAP4430_MODULEMODE_HWCTRL_SHIFT 0 +#define OMAP4430_MODULEMODE_SWCTRL_SHIFT 1 + +/*LIST_HEAD(clocks);*/ + +/* Root clocks */ + +DEFINE_CLK_FIXED_RATE (extalt_clkin_ck,CLK_IS_ROOT ,59000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (pad_clks_src_ck,CLK_IS_ROOT ,12000000 ,0x0 ); + +DEFINE_CLK_GATE (pad_clks_ck,"pad_clks_src_ck" , &pad_clks_src_ck,0x0 , +OMAP4430_CM_CLKSEL_ABE ,OMAP4430_PAD_CLKS_GATE_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_FIXED_RATE (pad_slimbus_core_clks_ck,CLK_IS_ROOT ,12000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (secure_32k_clk_src_ck,CLK_IS_ROOT ,32768 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (slimbus_src_clk,CLK_IS_ROOT ,12000000 ,0x0 ); + +DEFINE_CLK_GATE (slimbus_clk,"slimbus_src_clk" , &slimbus_src_clk,0x0 , +OMAP4430_CM_CLKSEL_ABE ,OMAP4430_SLIMBUS_CLK_GATE_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_FIXED_RATE (sys_32k_ck,CLK_IS_ROOT ,32768 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_12000000_ck,CLK_IS_ROOT ,12000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_13000000_ck,CLK_IS_ROOT ,13000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_16800000_ck,CLK_IS_ROOT ,16800000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_19200000_ck,CLK_IS_ROOT ,19200000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_26000000_ck,CLK_IS_ROOT ,26000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_27000000_ck,CLK_IS_ROOT ,27000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_38400000_ck,CLK_IS_ROOT ,38400000 ,0x0 ); + +static const struct clksel_rate div_1_0_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_4430 }, + { .div =0 }, +}; + +static const struct clksel_rate div_1_1_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_4430 }, + { .div =0 }, +}; + +static const struct clksel_rate div_1_2_rates[] = { + { .div =1 , .val =2 , .flags =RATE_IN_4430 }, + { .div =0 }, +}; + +static const char *sys_clkin_ck_parents[] = { +"virt_12000000_ck" , +"virt_13000000_ck" , +"virt_16800000_ck" , +"virt_19200000_ck" , +"virt_26000000_ck" , +"virt_27000000_ck" , +"virt_38400000_ck" , +}; + +DEFINE_CLK_MUX (sys_clkin_ck, + sys_clkin_ck_parents,NULL , +0x0 , +OMAP4430_CM_SYS_CLKSEL , +OMAP4430_SYS_CLKSEL_SHIFT , +OMAP4430_SYS_CLKSEL_WIDTH , +CLK_MUX_INDEX_ONE , +NULL ); + +DEFINE_CLK_FIXED_RATE (tie_low_clock_ck,CLK_IS_ROOT ,0 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (utmi_phy_clkout_ck,CLK_IS_ROOT ,60000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (xclk60mhsp1_ck,CLK_IS_ROOT ,60000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (xclk60mhsp2_ck,CLK_IS_ROOT ,60000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (xclk60motg_ck,CLK_IS_ROOT ,60000000 ,0x0 ); + +/* Module clocks and DPLL outputs */ + +static const char *abe_dpll_bypass_clk_mux_ck_parents[] = { +"sys_clkin_ck" , +"sys_32k_ck" , +}; + +DEFINE_CLK_MUX (abe_dpll_bypass_clk_mux_ck, + abe_dpll_bypass_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_L4_WKUP_CLKSEL , +OMAP4430_CLKSEL_SHIFT , +OMAP4430_CLKSEL_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (abe_dpll_refclk_mux_ck, + abe_dpll_bypass_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_ABE_PLL_REF_CLKSEL , +OMAP4430_CLKSEL_0_0_SHIFT , +OMAP4430_CLKSEL_0_0_WIDTH , +0x0 , +NULL ); + +/* DPLL_ABE */ +static struct dpll_data dpll_abe_dd = { + .mult_div1_reg =OMAP4430_CM_CLKSEL_DPLL_ABE , + .clk_bypass = &abe_dpll_bypass_clk_mux_ck, + .clk_ref = &abe_dpll_refclk_mux_ck, + .control_reg =OMAP4430_CM_CLKMODE_DPLL_ABE , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .autoidle_reg =OMAP4430_CM_AUTOIDLE_DPLL_ABE , + .idlest_reg =OMAP4430_CM_IDLEST_DPLL_ABE , + .mult_mask =OMAP4430_DPLL_MULT_MASK , + .div1_mask =OMAP4430_DPLL_DIV_MASK , + .enable_mask =OMAP4430_DPLL_EN_MASK , + .autoidle_mask =OMAP4430_AUTO_DPLL_MODE_MASK , + .idlest_mask =OMAP4430_ST_DPLL_CLK_MASK , + .max_multiplier =2047 , + .max_divider =128 , + .min_divider =1 , +}; + + +static const char *dpll_abe_ck_parents[] = { +"abe_dpll_refclk_mux_ck" , +}; + +static struct clk dpll_abe_ck; + +static const struct clk_ops dpll_abe_ck_ops = { + .enable = &omap3_noncore_dpll_enable, + .disable = &omap3_noncore_dpll_disable, + .recalc_rate = &omap4_dpll_regm4xen_recalc, + .round_rate = &omap4_dpll_regm4xen_round_rate, + .set_rate = &omap3_noncore_dpll_set_rate, + .get_parent = &omap2_init_dpll_parent, +}; + +static struct clk_hw_omap dpll_abe_ck_hw = { + .hw = { + .clk = &dpll_abe_ck, + }, + .dpll_data = &dpll_abe_dd, + .ops = &clkhwops_omap3_dpll, +}; + +DEFINE_STRUCT_CLK (dpll_abe_ck, dpll_abe_ck_parents, dpll_abe_ck_ops); + +static const char *dpll_abe_x2_ck_parents[] = { +"dpll_abe_ck" , +}; + +static struct clk dpll_abe_x2_ck; + +static const struct clk_ops dpll_abe_x2_ck_ops = { + .recalc_rate = &omap3_clkoutx2_recalc, +}; + +static struct clk_hw_omap dpll_abe_x2_ck_hw = { + .hw = { + .clk = &dpll_abe_x2_ck, + }, + .flags =CLOCK_CLKOUTX2 , + .clksel_reg =OMAP4430_CM_DIV_M2_DPLL_ABE , + .ops = &clkhwops_omap4_dpllmx, +}; + +DEFINE_STRUCT_CLK (dpll_abe_x2_ck, dpll_abe_x2_ck_parents, dpll_abe_x2_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_abe_m2x2_ck, +"dpll_abe_x2_ck" , + &dpll_abe_x2_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_ABE , +OMAP4430_DPLL_CLKOUT_DIV_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (abe_24m_fclk, +"dpll_abe_m2x2_ck" , + &dpll_abe_m2x2_ck, +0x0 , +1 ,8 ); + +DEFINE_CLK_DIVIDER (abe_clk, +"dpll_abe_m2x2_ck" , + &dpll_abe_m2x2_ck, +0x0 , +OMAP4430_CM_CLKSEL_ABE , +OMAP4430_CLKSEL_OPP_SHIFT , +OMAP4430_CLKSEL_OPP_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (aess_fclk, +"abe_clk" , + &abe_clk, +0x0 , +OMAP4430_CM1_ABE_AESS_CLKCTRL , +OMAP4430_CLKSEL_AESS_FCLK_SHIFT , +OMAP4430_CLKSEL_AESS_FCLK_WIDTH , +0x0 , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_abe_m3x2_ck, +"dpll_abe_x2_ck" , + &dpll_abe_x2_ck, +0x0 , +OMAP4430_CM_DIV_M3_DPLL_ABE , +OMAP4430_DPLL_CLKOUTHIF_DIV_SHIFT , +OMAP4430_DPLL_CLKOUTHIF_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static const char *core_hsd_byp_clk_mux_ck_parents[] = { +"sys_clkin_ck" , +"dpll_abe_m3x2_ck" , +}; + +DEFINE_CLK_MUX (core_hsd_byp_clk_mux_ck, + core_hsd_byp_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_CLKSEL_DPLL_CORE , +OMAP4430_DPLL_BYP_CLKSEL_SHIFT , +OMAP4430_DPLL_BYP_CLKSEL_WIDTH , +0x0 , +NULL ); + +/* DPLL_CORE */ +static struct dpll_data dpll_core_dd = { + .mult_div1_reg =OMAP4430_CM_CLKSEL_DPLL_CORE , + .clk_bypass = &core_hsd_byp_clk_mux_ck, + .clk_ref = &sys_clkin_ck, + .control_reg =OMAP4430_CM_CLKMODE_DPLL_CORE , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .autoidle_reg =OMAP4430_CM_AUTOIDLE_DPLL_CORE , + .idlest_reg =OMAP4430_CM_IDLEST_DPLL_CORE , + .mult_mask =OMAP4430_DPLL_MULT_MASK , + .div1_mask =OMAP4430_DPLL_DIV_MASK , + .enable_mask =OMAP4430_DPLL_EN_MASK , + .autoidle_mask =OMAP4430_AUTO_DPLL_MODE_MASK , + .idlest_mask =OMAP4430_ST_DPLL_CLK_MASK , + .max_multiplier =2047 , + .max_divider =128 , + .min_divider =1 , +}; + + +static const char *dpll_core_ck_parents[] = { +"sys_clkin_ck" , +}; + +static struct clk dpll_core_ck; + +static const struct clk_ops dpll_core_ck_ops = { + .recalc_rate = &omap3_dpll_recalc, + .get_parent = &omap2_init_dpll_parent, +}; + +static struct clk_hw_omap dpll_core_ck_hw = { + .hw = { + .clk = &dpll_core_ck, + }, + .dpll_data = &dpll_core_dd, + .ops = &clkhwops_omap3_dpll, +}; + +DEFINE_STRUCT_CLK (dpll_core_ck, dpll_core_ck_parents, dpll_core_ck_ops); + +static const char *dpll_core_x2_ck_parents[] = { +"dpll_core_ck" , +}; + +static struct clk dpll_core_x2_ck; + +static struct clk_hw_omap dpll_core_x2_ck_hw = { + .hw = { + .clk = &dpll_core_x2_ck, + }, +}; + +DEFINE_STRUCT_CLK (dpll_core_x2_ck, dpll_core_x2_ck_parents, dpll_abe_x2_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_core_m6x2_ck, +"dpll_core_x2_ck" , + &dpll_core_x2_ck, +0x0 , +OMAP4430_CM_DIV_M6_DPLL_CORE , +OMAP4430_HSDIVIDER_CLKOUT3_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT3_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_core_m2_ck, +"dpll_core_ck" , + &dpll_core_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_CORE , +OMAP4430_DPLL_CLKOUT_DIV_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (ddrphy_ck, +"dpll_core_m2_ck" , + &dpll_core_m2_ck, +0x0 , +1 ,2 ); + +DEFINE_CLK_DIVIDER (dpll_core_m5x2_ck, +"dpll_core_x2_ck" , + &dpll_core_x2_ck, +0x0 , +OMAP4430_CM_DIV_M5_DPLL_CORE , +OMAP4430_HSDIVIDER_CLKOUT2_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT2_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (div_core_ck, +"dpll_core_m5x2_ck" , + &dpll_core_m5x2_ck, +0x0 , +OMAP4430_CM_CLKSEL_CORE , +OMAP4430_CLKSEL_CORE_SHIFT , +OMAP4430_CLKSEL_CORE_WIDTH , +0x0 , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (div_iva_hs_clk, +"dpll_core_m5x2_ck" , + &dpll_core_m5x2_ck, +0x0 , +OMAP4430_CM_BYPCLK_DPLL_IVA , +OMAP4430_CLKSEL_0_1_SHIFT , +OMAP4430_CLKSEL_0_1_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (div_mpu_hs_clk, +"dpll_core_m5x2_ck" , + &dpll_core_m5x2_ck, +0x0 , +OMAP4430_CM_BYPCLK_DPLL_MPU , +OMAP4430_CLKSEL_0_1_SHIFT , +OMAP4430_CLKSEL_0_1_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_core_m4x2_ck, +"dpll_core_x2_ck" , + &dpll_core_x2_ck, +0x0 , +OMAP4430_CM_DIV_M4_DPLL_CORE , +OMAP4430_HSDIVIDER_CLKOUT1_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT1_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (dll_clk_div_ck, +"dpll_core_m4x2_ck" , + &dpll_core_m4x2_ck, +0x0 , +1 ,2 ); + +DEFINE_CLK_DIVIDER (dpll_abe_m2_ck, +"dpll_abe_ck" , + &dpll_abe_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_ABE , +OMAP4430_DPLL_CLKOUT_DIV_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_core_m3x2_ck, +"dpll_core_x2_ck" , + &dpll_core_x2_ck, +0x0 , +OMAP4430_CM_DIV_M3_DPLL_CORE , +OMAP4430_DPLL_CLKOUTHIF_DIV_SHIFT , +OMAP4430_DPLL_CLKOUTHIF_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_core_m7x2_ck, +"dpll_core_x2_ck" , + &dpll_core_x2_ck, +0x0 , +OMAP4430_CM_DIV_M7_DPLL_CORE , +OMAP4430_HSDIVIDER_CLKOUT4_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT4_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static const char *iva_hsd_byp_clk_mux_ck_parents[] = { +"sys_clkin_ck" , +"div_iva_hs_clk" , +}; + +DEFINE_CLK_MUX (iva_hsd_byp_clk_mux_ck, + iva_hsd_byp_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_CLKSEL_DPLL_IVA , +OMAP4430_DPLL_BYP_CLKSEL_SHIFT , +OMAP4430_DPLL_BYP_CLKSEL_WIDTH , +0x0 , +NULL ); + +/* DPLL_IVA */ +static struct dpll_data dpll_iva_dd = { + .mult_div1_reg =OMAP4430_CM_CLKSEL_DPLL_IVA , + .clk_bypass = &iva_hsd_byp_clk_mux_ck, + .clk_ref = &sys_clkin_ck, + .control_reg =OMAP4430_CM_CLKMODE_DPLL_IVA , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .autoidle_reg =OMAP4430_CM_AUTOIDLE_DPLL_IVA , + .idlest_reg =OMAP4430_CM_IDLEST_DPLL_IVA , + .mult_mask =OMAP4430_DPLL_MULT_MASK , + .div1_mask =OMAP4430_DPLL_DIV_MASK , + .enable_mask =OMAP4430_DPLL_EN_MASK , + .autoidle_mask =OMAP4430_AUTO_DPLL_MODE_MASK , + .idlest_mask =OMAP4430_ST_DPLL_CLK_MASK , + .max_multiplier =2047 , + .max_divider =128 , + .min_divider =1 , +}; + + +static struct clk dpll_iva_ck; + +static struct clk_hw_omap dpll_iva_ck_hw = { + .hw = { + .clk = &dpll_iva_ck, + }, + .dpll_data = &dpll_iva_dd, + .ops = &clkhwops_omap3_dpll, +}; + +DEFINE_STRUCT_CLK (dpll_iva_ck, dpll_core_ck_parents, dpll_abe_ck_ops); + +static const char *dpll_iva_x2_ck_parents[] = { +"dpll_iva_ck" , +}; + +static struct clk dpll_iva_x2_ck; + +static struct clk_hw_omap dpll_iva_x2_ck_hw = { + .hw = { + .clk = &dpll_iva_x2_ck, + }, +}; + +DEFINE_STRUCT_CLK (dpll_iva_x2_ck, dpll_iva_x2_ck_parents, dpll_abe_x2_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_iva_m4x2_ck, +"dpll_iva_x2_ck" , + &dpll_iva_x2_ck, +0x0 , +OMAP4430_CM_DIV_M4_DPLL_IVA , +OMAP4430_HSDIVIDER_CLKOUT1_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT1_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_iva_m5x2_ck, +"dpll_iva_x2_ck" , + &dpll_iva_x2_ck, +0x0 , +OMAP4430_CM_DIV_M5_DPLL_IVA , +OMAP4430_HSDIVIDER_CLKOUT2_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT2_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +/* DPLL_MPU */ +static struct dpll_data dpll_mpu_dd = { + .mult_div1_reg =OMAP4430_CM_CLKSEL_DPLL_MPU , + .clk_bypass = &div_mpu_hs_clk, + .clk_ref = &sys_clkin_ck, + .control_reg =OMAP4430_CM_CLKMODE_DPLL_MPU , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .autoidle_reg =OMAP4430_CM_AUTOIDLE_DPLL_MPU , + .idlest_reg =OMAP4430_CM_IDLEST_DPLL_MPU , + .mult_mask =OMAP4430_DPLL_MULT_MASK , + .div1_mask =OMAP4430_DPLL_DIV_MASK , + .enable_mask =OMAP4430_DPLL_EN_MASK , + .autoidle_mask =OMAP4430_AUTO_DPLL_MODE_MASK , + .idlest_mask =OMAP4430_ST_DPLL_CLK_MASK , + .max_multiplier =2047 , + .max_divider =128 , + .min_divider =1 , +}; + + +static struct clk dpll_mpu_ck; + +static struct clk_hw_omap dpll_mpu_ck_hw = { + .hw = { + .clk = &dpll_mpu_ck, + }, + .dpll_data = &dpll_mpu_dd, + .ops = &clkhwops_omap3_dpll, +}; + +DEFINE_STRUCT_CLK (dpll_mpu_ck, dpll_core_ck_parents, dpll_abe_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_mpu_m2_ck, +"dpll_mpu_ck" , + &dpll_mpu_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_MPU , +OMAP4430_DPLL_CLKOUT_DIV_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (per_hs_clk_div_ck, +"dpll_abe_m3x2_ck" , + &dpll_abe_m3x2_ck, +0x0 , +1 ,2 ); + +static const char *per_hsd_byp_clk_mux_ck_parents[] = { +"sys_clkin_ck" , +"per_hs_clk_div_ck" , +}; + +DEFINE_CLK_MUX (per_hsd_byp_clk_mux_ck, + per_hsd_byp_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_CLKSEL_DPLL_PER , +OMAP4430_DPLL_BYP_CLKSEL_SHIFT , +OMAP4430_DPLL_BYP_CLKSEL_WIDTH , +0x0 , +NULL ); + +/* DPLL_PER */ +static struct dpll_data dpll_per_dd = { + .mult_div1_reg =OMAP4430_CM_CLKSEL_DPLL_PER , + .clk_bypass = &per_hsd_byp_clk_mux_ck, + .clk_ref = &sys_clkin_ck, + .control_reg =OMAP4430_CM_CLKMODE_DPLL_PER , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .autoidle_reg =OMAP4430_CM_AUTOIDLE_DPLL_PER , + .idlest_reg =OMAP4430_CM_IDLEST_DPLL_PER , + .mult_mask =OMAP4430_DPLL_MULT_MASK , + .div1_mask =OMAP4430_DPLL_DIV_MASK , + .enable_mask =OMAP4430_DPLL_EN_MASK , + .autoidle_mask =OMAP4430_AUTO_DPLL_MODE_MASK , + .idlest_mask =OMAP4430_ST_DPLL_CLK_MASK , + .max_multiplier =2047 , + .max_divider =128 , + .min_divider =1 , +}; + + +static struct clk dpll_per_ck; + +static struct clk_hw_omap dpll_per_ck_hw = { + .hw = { + .clk = &dpll_per_ck, + }, + .dpll_data = &dpll_per_dd, + .ops = &clkhwops_omap3_dpll, +}; + +DEFINE_STRUCT_CLK (dpll_per_ck, dpll_core_ck_parents, dpll_abe_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_per_m2_ck, +"dpll_per_ck" , + &dpll_per_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_PER , +OMAP4430_DPLL_CLKOUT_DIV_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static const char *dpll_per_x2_ck_parents[] = { +"dpll_per_ck" , +}; + +static struct clk dpll_per_x2_ck; + +static struct clk_hw_omap dpll_per_x2_ck_hw = { + .hw = { + .clk = &dpll_per_x2_ck, + }, + .flags =CLOCK_CLKOUTX2 , + .clksel_reg =OMAP4430_CM_DIV_M2_DPLL_PER , + .ops = &clkhwops_omap4_dpllmx, +}; + +DEFINE_STRUCT_CLK (dpll_per_x2_ck, dpll_per_x2_ck_parents, dpll_abe_x2_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_per_m2x2_ck, +"dpll_per_x2_ck" , + &dpll_per_x2_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_PER , +OMAP4430_DPLL_CLKOUT_DIV_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_per_m3x2_ck, +"dpll_per_x2_ck" , + &dpll_per_x2_ck, +0x0 , +OMAP4430_CM_DIV_M3_DPLL_PER , +OMAP4430_DPLL_CLKOUTHIF_DIV_SHIFT , +OMAP4430_DPLL_CLKOUTHIF_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_per_m4x2_ck, +"dpll_per_x2_ck" , + &dpll_per_x2_ck, +0x0 , +OMAP4430_CM_DIV_M4_DPLL_PER , +OMAP4430_HSDIVIDER_CLKOUT1_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT1_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_per_m5x2_ck, +"dpll_per_x2_ck" , + &dpll_per_x2_ck, +0x0 , +OMAP4430_CM_DIV_M5_DPLL_PER , +OMAP4430_HSDIVIDER_CLKOUT2_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT2_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_per_m6x2_ck, +"dpll_per_x2_ck" , + &dpll_per_x2_ck, +0x0 , +OMAP4430_CM_DIV_M6_DPLL_PER , +OMAP4430_HSDIVIDER_CLKOUT3_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT3_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll_per_m7x2_ck, +"dpll_per_x2_ck" , + &dpll_per_x2_ck, +0x0 , +OMAP4430_CM_DIV_M7_DPLL_PER , +OMAP4430_HSDIVIDER_CLKOUT4_DIV_SHIFT , +OMAP4430_HSDIVIDER_CLKOUT4_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (usb_hs_clk_div_ck, +"dpll_abe_m3x2_ck" , + &dpll_abe_m3x2_ck, +0x0 , +1 ,3 ); + +/* DPLL_USB */ +static struct dpll_data dpll_usb_dd = { + .mult_div1_reg =OMAP4430_CM_CLKSEL_DPLL_USB , + .clk_bypass = &usb_hs_clk_div_ck, + .flags =DPLL_J_TYPE , + .clk_ref = &sys_clkin_ck, + .control_reg =OMAP4430_CM_CLKMODE_DPLL_USB , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .autoidle_reg =OMAP4430_CM_AUTOIDLE_DPLL_USB , + .idlest_reg =OMAP4430_CM_IDLEST_DPLL_USB , + .mult_mask =OMAP4430_DPLL_MULT_MASK , + .div1_mask =OMAP4430_DPLL_DIV_MASK , + .enable_mask =OMAP4430_DPLL_EN_MASK , + .autoidle_mask =OMAP4430_AUTO_DPLL_MODE_MASK , + .idlest_mask =OMAP4430_ST_DPLL_CLK_MASK , + .sddiv_mask =OMAP4430_DPLL_SD_DIV_MASK , + .max_multiplier =4095 , + .max_divider =256 , + .min_divider =1 , +}; + + +static struct clk dpll_usb_ck; + +static struct clk_hw_omap dpll_usb_ck_hw = { + .hw = { + .clk = &dpll_usb_ck, + }, + .dpll_data = &dpll_usb_dd, + .ops = &clkhwops_omap3_dpll, +}; + +DEFINE_STRUCT_CLK (dpll_usb_ck, dpll_core_ck_parents, dpll_abe_ck_ops); + +static const char *dpll_usb_clkdcoldo_ck_parents[] = { +"dpll_usb_ck" , +}; + +static struct clk dpll_usb_clkdcoldo_ck; + +static const struct clk_ops dpll_usb_clkdcoldo_ck_ops = { +}; + +static struct clk_hw_omap dpll_usb_clkdcoldo_ck_hw = { + .hw = { + .clk = &dpll_usb_clkdcoldo_ck, + }, + .clksel_reg =OMAP4430_CM_CLKDCOLDO_DPLL_USB , + .ops = &clkhwops_omap4_dpllmx, +}; + +DEFINE_STRUCT_CLK (dpll_usb_clkdcoldo_ck, dpll_usb_clkdcoldo_ck_parents, dpll_usb_clkdcoldo_ck_ops); + +DEFINE_CLK_DIVIDER (dpll_usb_m2_ck, +"dpll_usb_ck" , + &dpll_usb_ck, +0x0 , +OMAP4430_CM_DIV_M2_DPLL_USB , +OMAP4430_DPLL_CLKOUT_DIV_0_6_SHIFT , +OMAP4430_DPLL_CLKOUT_DIV_0_6_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static const char *ducati_clk_mux_ck_parents[] = { +"div_core_ck" , +"dpll_per_m6x2_ck" , +}; + +DEFINE_CLK_MUX (ducati_clk_mux_ck, + ducati_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_CLKSEL_DUCATI_ISS_ROOT , +OMAP4430_CLKSEL_0_0_SHIFT , +OMAP4430_CLKSEL_0_0_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (func_12m_fclk, +"dpll_per_m2x2_ck" , + &dpll_per_m2x2_ck, +0x0 , +1 ,16 ); + +DEFINE_CLK_FIXED_FACTOR (func_24m_clk, +"dpll_per_m2_ck" , + &dpll_per_m2_ck, +0x0 , +1 ,4 ); + +DEFINE_CLK_FIXED_FACTOR (func_24mc_fclk, +"dpll_per_m2x2_ck" , + &dpll_per_m2x2_ck, +0x0 , +1 ,8 ); + +static const struct clk_div_table func_48m_fclk_rates[] = { + { .div =4 , .val =0 }, + { .div =8 , .val =1 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (func_48m_fclk, +"dpll_per_m2x2_ck" , + &dpll_per_m2x2_ck, +0x0 , +OMAP4430_CM_SCALE_FCLK , +OMAP4430_SCALE_FCLK_SHIFT , +OMAP4430_SCALE_FCLK_WIDTH , +0x0 , + func_48m_fclk_rates, +NULL ); + +DEFINE_CLK_FIXED_FACTOR (func_48mc_fclk, +"dpll_per_m2x2_ck" , + &dpll_per_m2x2_ck, +0x0 , +1 ,4 ); + +static const struct clk_div_table func_64m_fclk_rates[] = { + { .div =2 , .val =0 }, + { .div =4 , .val =1 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (func_64m_fclk, +"dpll_per_m4x2_ck" , + &dpll_per_m4x2_ck, +0x0 , +OMAP4430_CM_SCALE_FCLK , +OMAP4430_SCALE_FCLK_SHIFT , +OMAP4430_SCALE_FCLK_WIDTH , +0x0 , + func_64m_fclk_rates, +NULL ); + +static const struct clk_div_table func_96m_fclk_rates[] = { + { .div =2 , .val =0 }, + { .div =4 , .val =1 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (func_96m_fclk, +"dpll_per_m2x2_ck" , + &dpll_per_m2x2_ck, +0x0 , +OMAP4430_CM_SCALE_FCLK , +OMAP4430_SCALE_FCLK_SHIFT , +OMAP4430_SCALE_FCLK_WIDTH , +0x0 , + func_96m_fclk_rates, +NULL ); + +static const struct clk_div_table init_60m_fclk_rates[] = { + { .div =1 , .val =0 }, + { .div =8 , .val =1 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (init_60m_fclk, +"dpll_usb_m2_ck" , + &dpll_usb_m2_ck, +0x0 , +OMAP4430_CM_CLKSEL_USB_60MHZ , +OMAP4430_CLKSEL_0_0_SHIFT , +OMAP4430_CLKSEL_0_0_WIDTH , +0x0 , + init_60m_fclk_rates, +NULL ); + +DEFINE_CLK_DIVIDER (l3_div_ck, +"div_core_ck" , + &div_core_ck, +0x0 , +OMAP4430_CM_CLKSEL_CORE , +OMAP4430_CLKSEL_L3_SHIFT , +OMAP4430_CLKSEL_L3_WIDTH , +0x0 , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (l4_div_ck, +"l3_div_ck" , + &l3_div_ck, +0x0 , +OMAP4430_CM_CLKSEL_CORE , +OMAP4430_CLKSEL_L4_SHIFT , +OMAP4430_CLKSEL_L4_WIDTH , +0x0 , +NULL , +NULL ); + +DEFINE_CLK_FIXED_FACTOR (lp_clk_div_ck, +"dpll_abe_m2x2_ck" , + &dpll_abe_m2x2_ck, +0x0 , +1 ,16 ); + +static const char *l4_wkup_clk_mux_ck_parents[] = { +"sys_clkin_ck" , +"lp_clk_div_ck" , +}; + +DEFINE_CLK_MUX (l4_wkup_clk_mux_ck, + l4_wkup_clk_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_L4_WKUP_CLKSEL , +OMAP4430_CLKSEL_0_0_SHIFT , +OMAP4430_CLKSEL_0_0_WIDTH , +0x0 , +NULL ); + +static const struct clk_div_table ocp_abe_iclk_rates[] = { + { .div =2 , .val =0 }, + { .div =1 , .val =1 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (ocp_abe_iclk, +"aess_fclk" , + &aess_fclk, +0x0 , +OMAP4430_CM1_ABE_AESS_CLKCTRL , +OMAP4430_CLKSEL_AESS_FCLK_SHIFT , +OMAP4430_CLKSEL_AESS_FCLK_WIDTH , +0x0 , + ocp_abe_iclk_rates, +NULL ); + +DEFINE_CLK_FIXED_FACTOR (per_abe_24m_fclk, +"dpll_abe_m2_ck" , + &dpll_abe_m2_ck, +0x0 , +1 ,4 ); + +DEFINE_CLK_DIVIDER (per_abe_nc_fclk, +"dpll_abe_m2_ck" , + &dpll_abe_m2_ck, +0x0 , +OMAP4430_CM_SCALE_FCLK , +OMAP4430_SCALE_FCLK_SHIFT , +OMAP4430_SCALE_FCLK_WIDTH , +0x0 , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (syc_clk_div_ck, +"sys_clkin_ck" , + &sys_clkin_ck, +0x0 , +OMAP4430_CM_ABE_DSS_SYS_CLKSEL , +OMAP4430_CLKSEL_0_0_SHIFT , +OMAP4430_CLKSEL_0_0_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk dbgclk_mux_ck; +DEFINE_STRUCT_CLK_HW_OMAP (dbgclk_mux_ck); +DEFINE_STRUCT_CLK (dbgclk_mux_ck, dpll_core_ck_parents, dpll_usb_clkdcoldo_ck_ops); + +/* Leaf clocks controlled by modules */ + +DEFINE_CLK_GATE (aes1_fck,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L4SEC_AES1_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (aes2_fck,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L4SEC_AES2_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (aess_fck,"aess_fclk" , &aess_fclk,0x0 , +OMAP4430_CM1_ABE_AESS_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (bandgap_fclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_WKUP_BANDGAP_CLKCTRL ,OMAP4430_OPTFCLKEN_BGAP_32K_SHIFT , +0x0 ,NULL ); + +static const struct clk_div_table div_ts_ck_rates[] = { + { .div =8 , .val =0 }, + { .div =16 , .val =1 }, + { .div =32 , .val =2 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (div_ts_ck, +"l4_wkup_clk_mux_ck" , + &l4_wkup_clk_mux_ck, +0x0 , +OMAP4430_CM_WKUP_BANDGAP_CLKCTRL , +OMAP4430_CLKSEL_24_25_SHIFT , +OMAP4430_CLKSEL_24_25_WIDTH , +0x0 , + div_ts_ck_rates, +NULL ); + +DEFINE_CLK_GATE (bandgap_ts_fclk,"div_ts_ck" , &div_ts_ck,0x0 , +OMAP4430_CM_WKUP_BANDGAP_CLKCTRL ,OMAP4460_OPTFCLKEN_TS_FCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (des3des_fck,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4SEC_DES3DES_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +static const char *dmic_sync_mux_ck_parents[] = { +"abe_24m_fclk" , +"syc_clk_div_ck" , +"func_24m_clk" , +}; + +DEFINE_CLK_MUX (dmic_sync_mux_ck, + dmic_sync_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM1_ABE_DMIC_CLKCTRL , +OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT , +OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH , +0x0 , +NULL ); + +static const struct clksel func_dmic_abe_gfclk_sel[] = { + { .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates }, + { .parent = &pad_clks_ck, .rates = div_1_1_rates }, + { .parent = &slimbus_clk, .rates = div_1_2_rates }, + { .parent =NULL }, +}; + +static const char *dmic_fck_parents[] = { +"dmic_sync_mux_ck" , +"pad_clks_ck" , +"slimbus_clk" , +}; + +/* Merged func_dmic_abe_gfclk into dmic */ +static struct clk dmic_fck; + +static const struct clk_ops dmic_fck_ops = { + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, + .init = &omap2_init_clk_clkdm, +}; + +static struct clk_hw_omap dmic_fck_hw = { + .hw = { + .clk = &dmic_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_DMIC_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = func_dmic_abe_gfclk_sel, + .clksel_reg =OMAP4430_CM1_ABE_DMIC_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SOURCE_MASK , +}; + +DEFINE_STRUCT_CLK (dmic_fck, dmic_fck_parents, dmic_fck_ops); + +DEFINE_CLK_GATE (dsp_fck,"dpll_iva_m4x2_ck" , &dpll_iva_m4x2_ck,0x0 , +OMAP4430_CM_TESLA_TESLA_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (dss_sys_clk,"syc_clk_div_ck" , &syc_clk_div_ck,0x0 , +OMAP4430_CM_DSS_DSS_CLKCTRL ,OMAP4430_OPTFCLKEN_SYS_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (dss_tv_clk,"extalt_clkin_ck" , &extalt_clkin_ck,0x0 , +OMAP4430_CM_DSS_DSS_CLKCTRL ,OMAP4430_OPTFCLKEN_TV_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (dss_dss_clk,"dpll_per_m5x2_ck" , &dpll_per_m5x2_ck,0x0 , +OMAP4430_CM_DSS_DSS_CLKCTRL ,OMAP4430_OPTFCLKEN_DSSCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (dss_48mhz_clk,"func_48mc_fclk" , &func_48mc_fclk,0x0 , +OMAP4430_CM_DSS_DSS_CLKCTRL ,OMAP4430_OPTFCLKEN_48MHZ_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (dss_fck,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_DSS_DSS_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (efuse_ctrl_cust_fck,"sys_clkin_ck" , &sys_clkin_ck,0x0 , +OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (emif1_fck,"ddrphy_ck" , &ddrphy_ck,0x0 , +OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (emif2_fck,"ddrphy_ck" , &ddrphy_ck,0x0 , +OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_DIVIDER (fdif_fck, +"dpll_per_m4x2_ck" , + &dpll_per_m4x2_ck, +0x0 , +OMAP4430_CM_CAM_FDIF_CLKCTRL , +OMAP4430_CLKSEL_FCLK_SHIFT , +OMAP4430_CLKSEL_FCLK_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +DEFINE_CLK_GATE (fpka_fck,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio1_dbclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_WKUP_GPIO1_CLKCTRL ,OMAP4430_OPTFCLKEN_DBCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio1_ick,"l4_wkup_clk_mux_ck" , &l4_wkup_clk_mux_ck,0x0 , +OMAP4430_CM_WKUP_GPIO1_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio2_dbclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_L4PER_GPIO2_CLKCTRL ,OMAP4430_OPTFCLKEN_DBCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio2_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4PER_GPIO2_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio3_dbclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_L4PER_GPIO3_CLKCTRL ,OMAP4430_OPTFCLKEN_DBCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio3_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4PER_GPIO3_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio4_dbclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_L4PER_GPIO4_CLKCTRL ,OMAP4430_OPTFCLKEN_DBCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio4_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4PER_GPIO4_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio5_dbclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_L4PER_GPIO5_CLKCTRL ,OMAP4430_OPTFCLKEN_DBCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio5_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4PER_GPIO5_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio6_dbclk,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_L4PER_GPIO6_CLKCTRL ,OMAP4430_OPTFCLKEN_DBCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpio6_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4PER_GPIO6_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (gpmc_ick,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L3_2_GPMC_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +static const struct clksel sgx_clk_mux_sel[] = { + { .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates }, + { .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates }, + { .parent =NULL }, +}; + +static const char *gpu_fck_parents[] = { +"dpll_core_m7x2_ck" , +"dpll_per_m7x2_ck" , +}; + +/* Merged sgx_clk_mux into gpu */ +static struct clk gpu_fck; + +static struct clk_hw_omap gpu_fck_hw = { + .hw = { + .clk = &gpu_fck, + }, + .clkdm_name ="l3_gfx_clkdm" , + .enable_reg =OMAP4430_CM_GFX_GFX_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = sgx_clk_mux_sel, + .clksel_reg =OMAP4430_CM_GFX_GFX_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SGX_FCLK_MASK , +}; + +DEFINE_STRUCT_CLK (gpu_fck, gpu_fck_parents, dmic_fck_ops); + +DEFINE_CLK_GATE (hdq1w_fck,"func_12m_fclk" , &func_12m_fclk,0x0 , +OMAP4430_CM_L4PER_HDQ1W_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_DIVIDER (hsi_fck, +"dpll_per_m2x2_ck" , + &dpll_per_m2x2_ck, +0x0 , +OMAP4430_CM_L3INIT_HSI_CLKCTRL , +OMAP4430_CLKSEL_24_25_SHIFT , +OMAP4430_CLKSEL_24_25_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +DEFINE_CLK_GATE (i2c1_fck,"func_96m_fclk" , &func_96m_fclk,0x0 , +OMAP4430_CM_L4PER_I2C1_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (i2c2_fck,"func_96m_fclk" , &func_96m_fclk,0x0 , +OMAP4430_CM_L4PER_I2C2_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (i2c3_fck,"func_96m_fclk" , &func_96m_fclk,0x0 , +OMAP4430_CM_L4PER_I2C3_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (i2c4_fck,"func_96m_fclk" , &func_96m_fclk,0x0 , +OMAP4430_CM_L4PER_I2C4_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (ipu_fck,"ducati_clk_mux_ck" , &ducati_clk_mux_ck,0x0 , +OMAP4430_CM_DUCATI_DUCATI_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (iss_ctrlclk,"func_96m_fclk" , &func_96m_fclk,0x0 , +OMAP4430_CM_CAM_ISS_CLKCTRL ,OMAP4430_OPTFCLKEN_CTRLCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (iss_fck,"ducati_clk_mux_ck" , &ducati_clk_mux_ck,0x0 , +OMAP4430_CM_CAM_ISS_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (iva_fck,"dpll_iva_m5x2_ck" , &dpll_iva_m5x2_ck,0x0 , +OMAP4430_CM_IVAHD_IVAHD_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (kbd_fck,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (l3_instr_ick,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (l3_main_3_ick,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L3INSTR_L3_3_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_MUX (mcasp_sync_mux_ck, + dmic_sync_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM1_ABE_MCASP_CLKCTRL , +OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT , +OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH , +0x0 , +NULL ); + +static const struct clksel func_mcasp_abe_gfclk_sel[] = { + { .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates }, + { .parent = &pad_clks_ck, .rates = div_1_1_rates }, + { .parent = &slimbus_clk, .rates = div_1_2_rates }, + { .parent =NULL }, +}; + +static const char *mcasp_fck_parents[] = { +"mcasp_sync_mux_ck" , +"pad_clks_ck" , +"slimbus_clk" , +}; + +/* Merged func_mcasp_abe_gfclk into mcasp */ +static struct clk mcasp_fck; + +static struct clk_hw_omap mcasp_fck_hw = { + .hw = { + .clk = &mcasp_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_MCASP_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = func_mcasp_abe_gfclk_sel, + .clksel_reg =OMAP4430_CM1_ABE_MCASP_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SOURCE_MASK , +}; + +DEFINE_STRUCT_CLK (mcasp_fck, mcasp_fck_parents, dmic_fck_ops); + +DEFINE_CLK_MUX (mcbsp1_sync_mux_ck, + dmic_sync_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM1_ABE_MCBSP1_CLKCTRL , +OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT , +OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH , +0x0 , +NULL ); + +static const struct clksel func_mcbsp1_gfclk_sel[] = { + { .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates }, + { .parent = &pad_clks_ck, .rates = div_1_1_rates }, + { .parent = &slimbus_clk, .rates = div_1_2_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp1_fck_parents[] = { +"mcbsp1_sync_mux_ck" , +"pad_clks_ck" , +"slimbus_clk" , +}; + +/* Merged func_mcbsp1_gfclk into mcbsp1 */ +static struct clk mcbsp1_fck; + +static struct clk_hw_omap mcbsp1_fck_hw = { + .hw = { + .clk = &mcbsp1_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_MCBSP1_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = func_mcbsp1_gfclk_sel, + .clksel_reg =OMAP4430_CM1_ABE_MCBSP1_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SOURCE_MASK , +}; + +DEFINE_STRUCT_CLK (mcbsp1_fck, mcbsp1_fck_parents, dmic_fck_ops); + +DEFINE_CLK_MUX (mcbsp2_sync_mux_ck, + dmic_sync_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM1_ABE_MCBSP2_CLKCTRL , +OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT , +OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH , +0x0 , +NULL ); + +static const struct clksel func_mcbsp2_gfclk_sel[] = { + { .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates }, + { .parent = &pad_clks_ck, .rates = div_1_1_rates }, + { .parent = &slimbus_clk, .rates = div_1_2_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp2_fck_parents[] = { +"mcbsp2_sync_mux_ck" , +"pad_clks_ck" , +"slimbus_clk" , +}; + +/* Merged func_mcbsp2_gfclk into mcbsp2 */ +static struct clk mcbsp2_fck; + +static struct clk_hw_omap mcbsp2_fck_hw = { + .hw = { + .clk = &mcbsp2_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_MCBSP2_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = func_mcbsp2_gfclk_sel, + .clksel_reg =OMAP4430_CM1_ABE_MCBSP2_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SOURCE_MASK , +}; + +DEFINE_STRUCT_CLK (mcbsp2_fck, mcbsp2_fck_parents, dmic_fck_ops); + +DEFINE_CLK_MUX (mcbsp3_sync_mux_ck, + dmic_sync_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM1_ABE_MCBSP3_CLKCTRL , +OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT , +OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH , +0x0 , +NULL ); + +static const struct clksel func_mcbsp3_gfclk_sel[] = { + { .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates }, + { .parent = &pad_clks_ck, .rates = div_1_1_rates }, + { .parent = &slimbus_clk, .rates = div_1_2_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp3_fck_parents[] = { +"mcbsp3_sync_mux_ck" , +"pad_clks_ck" , +"slimbus_clk" , +}; + +/* Merged func_mcbsp3_gfclk into mcbsp3 */ +static struct clk mcbsp3_fck; + +static struct clk_hw_omap mcbsp3_fck_hw = { + .hw = { + .clk = &mcbsp3_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_MCBSP3_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = func_mcbsp3_gfclk_sel, + .clksel_reg =OMAP4430_CM1_ABE_MCBSP3_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SOURCE_MASK , +}; + +DEFINE_STRUCT_CLK (mcbsp3_fck, mcbsp3_fck_parents, dmic_fck_ops); + +static const char *mcbsp4_sync_mux_ck_parents[] = { +"func_96m_fclk" , +"per_abe_nc_fclk" , +}; + +DEFINE_CLK_MUX (mcbsp4_sync_mux_ck, + mcbsp4_sync_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_L4PER_MCBSP4_CLKCTRL , +OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT , +OMAP4430_CLKSEL_INTERNAL_SOURCE_WIDTH , +0x0 , +NULL ); + +static const struct clksel per_mcbsp4_gfclk_sel[] = { + { .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates }, + { .parent = &pad_clks_ck, .rates = div_1_1_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp4_fck_parents[] = { +"mcbsp4_sync_mux_ck" , +"pad_clks_ck" , +}; + +/* Merged per_mcbsp4_gfclk into mcbsp4 */ +static struct clk mcbsp4_fck; + +static struct clk_hw_omap mcbsp4_fck_hw = { + .hw = { + .clk = &mcbsp4_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_MCBSP4_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = per_mcbsp4_gfclk_sel, + .clksel_reg =OMAP4430_CM_L4PER_MCBSP4_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_SOURCE_24_24_MASK , +}; + +DEFINE_STRUCT_CLK (mcbsp4_fck, mcbsp4_fck_parents, dmic_fck_ops); + +DEFINE_CLK_GATE (mcpdm_fck,"pad_clks_ck" , &pad_clks_ck,0x0 , +OMAP4430_CM1_ABE_PDM_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (mcspi1_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MCSPI1_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (mcspi2_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MCSPI2_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (mcspi3_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MCSPI3_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (mcspi4_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MCSPI4_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +static const struct clksel hsmmc1_fclk_sel[] = { + { .parent = &func_64m_fclk, .rates = div_1_0_rates }, + { .parent = &func_96m_fclk, .rates = div_1_1_rates }, + { .parent =NULL }, +}; + +static const char *mmc1_fck_parents[] = { +"func_64m_fclk" , +"func_96m_fclk" , +}; + +/* Merged hsmmc1_fclk into mmc1 */ +static struct clk mmc1_fck; + +static struct clk_hw_omap mmc1_fck_hw = { + .hw = { + .clk = &mmc1_fck, + }, + .clkdm_name ="l3_init_clkdm" , + .enable_reg =OMAP4430_CM_L3INIT_MMC1_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = hsmmc1_fclk_sel, + .clksel_reg =OMAP4430_CM_L3INIT_MMC1_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (mmc1_fck, mmc1_fck_parents, dmic_fck_ops); + +/* Merged hsmmc2_fclk into mmc2 */ +static struct clk mmc2_fck; + +static struct clk_hw_omap mmc2_fck_hw = { + .hw = { + .clk = &mmc2_fck, + }, + .clkdm_name ="l3_init_clkdm" , + .enable_reg =OMAP4430_CM_L3INIT_MMC2_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = hsmmc1_fclk_sel, + .clksel_reg =OMAP4430_CM_L3INIT_MMC2_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (mmc2_fck, mmc1_fck_parents, dmic_fck_ops); + +DEFINE_CLK_GATE (mmc3_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MMCSD3_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (mmc4_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MMCSD4_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (mmc5_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_MMCSD5_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (ocp2scp_usb_phy_phy_48m,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL ,OMAP4430_OPTFCLKEN_PHY_48M_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (ocp2scp_usb_phy_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (ocp_wp_noc_ick,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (rng_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4SEC_RNG_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (sha2md5_fck,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (sl2if_ick,"dpll_iva_m5x2_ck" , &dpll_iva_m5x2_ck,0x0 , +OMAP4430_CM_IVAHD_SL2_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus1_fclk_1,"func_24m_clk" , &func_24m_clk,0x0 , +OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL ,OMAP4430_OPTFCLKEN_FCLK1_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus1_fclk_0,"abe_24m_fclk" , &abe_24m_fclk,0x0 , +OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL ,OMAP4430_OPTFCLKEN_FCLK0_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus1_fclk_2,"pad_clks_ck" , &pad_clks_ck,0x0 , +OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL ,OMAP4430_OPTFCLKEN_FCLK2_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus1_slimbus_clk,"slimbus_clk" , &slimbus_clk,0x0 , +OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL ,OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus1_fck,"ocp_abe_iclk" , &ocp_abe_iclk,0x0 , +OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus2_fclk_1,"per_abe_24m_fclk" , &per_abe_24m_fclk,0x0 , +OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL ,OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus2_fclk_0,"func_24mc_fclk" , &func_24mc_fclk,0x0 , +OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL ,OMAP4430_OPTFCLKEN_PER24MC_GFCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus2_slimbus_clk,"pad_slimbus_core_clks_ck" , &pad_slimbus_core_clks_ck,0x0 , +OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL ,OMAP4430_OPTFCLKEN_SLIMBUS_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (slimbus2_fck,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (smartreflex_core_fck,"l4_wkup_clk_mux_ck" , &l4_wkup_clk_mux_ck,0x0 , +OMAP4430_CM_ALWON_SR_CORE_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (smartreflex_iva_fck,"l4_wkup_clk_mux_ck" , &l4_wkup_clk_mux_ck,0x0 , +OMAP4430_CM_ALWON_SR_IVA_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (smartreflex_mpu_fck,"l4_wkup_clk_mux_ck" , &l4_wkup_clk_mux_ck,0x0 , +OMAP4430_CM_ALWON_SR_MPU_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +static const struct clksel dmt1_clk_mux_sel[] = { + { .parent = &sys_clkin_ck, .rates = div_1_0_rates }, + { .parent = &sys_32k_ck, .rates = div_1_1_rates }, + { .parent =NULL }, +}; + +/* Merged dmt1_clk_mux into timer1 */ +static struct clk timer1_fck; + +static struct clk_hw_omap timer1_fck_hw = { + .hw = { + .clk = &timer1_fck, + }, + .clkdm_name ="l4_wkup_clkdm" , + .enable_reg =OMAP4430_CM_WKUP_TIMER1_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_WKUP_TIMER1_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer1_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +/* Merged cm2_dm10_mux into timer10 */ +static struct clk timer10_fck; + +static struct clk_hw_omap timer10_fck_hw = { + .hw = { + .clk = &timer10_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer10_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +/* Merged cm2_dm11_mux into timer11 */ +static struct clk timer11_fck; + +static struct clk_hw_omap timer11_fck_hw = { + .hw = { + .clk = &timer11_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer11_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +/* Merged cm2_dm2_mux into timer2 */ +static struct clk timer2_fck; + +static struct clk_hw_omap timer2_fck_hw = { + .hw = { + .clk = &timer2_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer2_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +/* Merged cm2_dm3_mux into timer3 */ +static struct clk timer3_fck; + +static struct clk_hw_omap timer3_fck_hw = { + .hw = { + .clk = &timer3_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer3_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +/* Merged cm2_dm4_mux into timer4 */ +static struct clk timer4_fck; + +static struct clk_hw_omap timer4_fck_hw = { + .hw = { + .clk = &timer4_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer4_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +static const struct clksel timer5_sync_mux_sel[] = { + { .parent = &syc_clk_div_ck, .rates = div_1_0_rates }, + { .parent = &sys_32k_ck, .rates = div_1_1_rates }, + { .parent =NULL }, +}; + +static const char *timer5_fck_parents[] = { +"syc_clk_div_ck" , +"sys_32k_ck" , +}; + +/* Merged timer5_sync_mux into timer5 */ +static struct clk timer5_fck; + +static struct clk_hw_omap timer5_fck_hw = { + .hw = { + .clk = &timer5_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_TIMER5_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = timer5_sync_mux_sel, + .clksel_reg =OMAP4430_CM1_ABE_TIMER5_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer5_fck, timer5_fck_parents, dmic_fck_ops); + +/* Merged timer6_sync_mux into timer6 */ +static struct clk timer6_fck; + +static struct clk_hw_omap timer6_fck_hw = { + .hw = { + .clk = &timer6_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_TIMER6_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = timer5_sync_mux_sel, + .clksel_reg =OMAP4430_CM1_ABE_TIMER6_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer6_fck, timer5_fck_parents, dmic_fck_ops); + +/* Merged timer7_sync_mux into timer7 */ +static struct clk timer7_fck; + +static struct clk_hw_omap timer7_fck_hw = { + .hw = { + .clk = &timer7_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_TIMER7_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = timer5_sync_mux_sel, + .clksel_reg =OMAP4430_CM1_ABE_TIMER7_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer7_fck, timer5_fck_parents, dmic_fck_ops); + +/* Merged timer8_sync_mux into timer8 */ +static struct clk timer8_fck; + +static struct clk_hw_omap timer8_fck_hw = { + .hw = { + .clk = &timer8_fck, + }, + .clkdm_name ="abe_clkdm" , + .enable_reg =OMAP4430_CM1_ABE_TIMER8_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = timer5_sync_mux_sel, + .clksel_reg =OMAP4430_CM1_ABE_TIMER8_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer8_fck, timer5_fck_parents, dmic_fck_ops); + +/* Merged cm2_dm9_mux into timer9 */ +static struct clk timer9_fck; + +static struct clk_hw_omap timer9_fck_hw = { + .hw = { + .clk = &timer9_fck, + }, + .clkdm_name ="l4_per_clkdm" , + .enable_reg =OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL , + .enable_bit =OMAP4430_MODULEMODE_SWCTRL_SHIFT , + .clksel = dmt1_clk_mux_sel, + .clksel_reg =OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL , + .clksel_mask =OMAP4430_CLKSEL_MASK , +}; + +DEFINE_STRUCT_CLK (timer9_fck, abe_dpll_bypass_clk_mux_ck_parents, dmic_fck_ops); + +DEFINE_CLK_GATE (uart1_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_UART1_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (uart2_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_UART2_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (uart3_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_UART3_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (uart4_fck,"func_48m_fclk" , &func_48m_fclk,0x0 , +OMAP4430_CM_L4PER_UART4_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_fs_fck,"func_48mc_fclk" , &func_48mc_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +static const char *utmi_p1_gfclk_parents[] = { +"init_60m_fclk" , +"xclk60mhsp1_ck" , +}; + +DEFINE_CLK_MUX (utmi_p1_gfclk, + utmi_p1_gfclk_parents,NULL , +0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL , +OMAP4430_CLKSEL_UTMI_P1_SHIFT , +OMAP4430_CLKSEL_UTMI_P1_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_GATE (usb_host_hs_utmi_p1_clk,"utmi_p1_gfclk" , &utmi_p1_gfclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_UTMI_P1_CLK_SHIFT , +0x0 ,NULL ); + +static const char *utmi_p2_gfclk_parents[] = { +"init_60m_fclk" , +"xclk60mhsp2_ck" , +}; + +DEFINE_CLK_MUX (utmi_p2_gfclk, + utmi_p2_gfclk_parents,NULL , +0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL , +OMAP4430_CLKSEL_UTMI_P2_SHIFT , +OMAP4430_CLKSEL_UTMI_P2_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_GATE (usb_host_hs_utmi_p2_clk,"utmi_p2_gfclk" , &utmi_p2_gfclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_UTMI_P2_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_utmi_p3_clk,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_UTMI_P3_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_hsic480m_p1_clk,"dpll_usb_m2_ck" , &dpll_usb_m2_ck,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_hsic60m_p1_clk,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_hsic60m_p2_clk,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_hsic480m_p2_clk,"dpll_usb_m2_ck" , &dpll_usb_m2_ck,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_func48mclk,"func_48mc_fclk" , &func_48mc_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_OPTFCLKEN_FUNC48MCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_host_hs_fck,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +static const char *otg_60m_gfclk_parents[] = { +"utmi_phy_clkout_ck" , +"xclk60motg_ck" , +}; + +DEFINE_CLK_MUX (otg_60m_gfclk, + otg_60m_gfclk_parents,NULL , +0x0 , +OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL , +OMAP4430_CLKSEL_60M_SHIFT , +OMAP4430_CLKSEL_60M_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_GATE (usb_otg_hs_xclk,"otg_60m_gfclk" , &otg_60m_gfclk,0x0 , +OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL ,OMAP4430_OPTFCLKEN_XCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_otg_hs_ick,"l3_div_ck" , &l3_div_ck,0x0 , +OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_phy_cm_clk32k,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_ALWON_USBPHY_CLKCTRL ,OMAP4430_OPTFCLKEN_CLK32K_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_tll_hs_usb_ch2_clk,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL ,OMAP4430_OPTFCLKEN_USB_CH2_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_tll_hs_usb_ch0_clk,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL ,OMAP4430_OPTFCLKEN_USB_CH0_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_tll_hs_usb_ch1_clk,"init_60m_fclk" , &init_60m_fclk,0x0 , +OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL ,OMAP4430_OPTFCLKEN_USB_CH1_CLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usb_tll_hs_ick,"l4_div_ck" , &l4_div_ck,0x0 , +OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +static const struct clk_div_table usim_ck_rates[] = { + { .div =14 , .val =0 }, + { .div =18 , .val =1 }, + { .div =0 }, +}; +DEFINE_CLK_DIVIDER (usim_ck, +"dpll_per_m4x2_ck" , + &dpll_per_m4x2_ck, +0x0 , +OMAP4430_CM_WKUP_USIM_CLKCTRL , +OMAP4430_CLKSEL_DIV_SHIFT , +OMAP4430_CLKSEL_DIV_WIDTH , +0x0 , + usim_ck_rates, +NULL ); + +DEFINE_CLK_GATE (usim_fclk,"usim_ck" , &usim_ck,0x0 , +OMAP4430_CM_WKUP_USIM_CLKCTRL ,OMAP4430_OPTFCLKEN_FCLK_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (usim_fck,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_WKUP_USIM_CLKCTRL ,OMAP4430_MODULEMODE_HWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (wd_timer2_fck,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM_WKUP_WDT2_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +DEFINE_CLK_GATE (wd_timer3_fck,"sys_32k_ck" , &sys_32k_ck,0x0 , +OMAP4430_CM1_ABE_WDT3_CLKCTRL ,OMAP4430_MODULEMODE_SWCTRL_SHIFT , +0x0 ,NULL ); + +/* Remaining optional clocks */ +static const char *pmd_stm_clock_mux_ck_parents[] = { +"sys_clkin_ck" , +"dpll_core_m6x2_ck" , +"tie_low_clock_ck" , +}; + +DEFINE_CLK_MUX (pmd_stm_clock_mux_ck, + pmd_stm_clock_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_EMU_DEBUGSS_CLKCTRL , +OMAP4430_PMD_STM_MUX_CTRL_SHIFT , +OMAP4430_PMD_STM_MUX_CTRL_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (pmd_trace_clk_mux_ck, + pmd_stm_clock_mux_ck_parents,NULL , +0x0 , +OMAP4430_CM_EMU_DEBUGSS_CLKCTRL , +OMAP4430_PMD_TRACE_MUX_CTRL_SHIFT , +OMAP4430_PMD_TRACE_MUX_CTRL_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_DIVIDER (stm_clk_div_ck, +"pmd_stm_clock_mux_ck" , + &pmd_stm_clock_mux_ck, +0x0 , +OMAP4430_CM_EMU_DEBUGSS_CLKCTRL , +OMAP4430_CLKSEL_PMD_STM_CLK_SHIFT , +OMAP4430_CLKSEL_PMD_STM_CLK_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (trace_clk_div_ck, +"pmd_trace_clk_mux_ck" , + &pmd_trace_clk_mux_ck, +0x0 , +OMAP4430_CM_EMU_DEBUGSS_CLKCTRL , +OMAP4430_CLKSEL_PMD_TRACE_CLK_SHIFT , +OMAP4430_CLKSEL_PMD_TRACE_CLK_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +/* SCRM aux clk nodes */ + +static const struct clksel auxclk_src_sel[] = { + { .parent = &sys_clkin_ck, .rates = div_1_0_rates }, + { .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates }, + { .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates }, + { .parent =NULL }, +}; + +static const char *auxclk_src_ck_parents[] = { +"sys_clkin_ck" , +"dpll_core_m3x2_ck" , +"dpll_per_m3x2_ck" , +}; + +static const struct clk_ops auxclk_src_ck_ops = { + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .get_parent = &omap2_init_clksel_parent, +}; + +static struct clk auxclk0_src_ck; + +static struct clk_hw_omap auxclk0_src_ck_hw = { + .hw = { + .clk = &auxclk0_src_ck, + }, + .clksel = auxclk_src_sel, + .clksel_reg =OMAP4_SCRM_AUXCLK0 , + .clksel_mask =OMAP4_SRCSELECT_MASK , + .enable_reg =OMAP4_SCRM_AUXCLK0 , + .enable_bit =OMAP4_ENABLE_SHIFT , +}; + +DEFINE_STRUCT_CLK (auxclk0_src_ck, auxclk_src_ck_parents, auxclk_src_ck_ops); + +DEFINE_CLK_DIVIDER (auxclk0_ck, +"auxclk0_src_ck" , + &auxclk0_src_ck, +0x0 , +OMAP4_SCRM_AUXCLK0 , +OMAP4_CLKDIV_SHIFT , +OMAP4_CLKDIV_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk auxclk1_src_ck; + +static struct clk_hw_omap auxclk1_src_ck_hw = { + .hw = { + .clk = &auxclk1_src_ck, + }, + .clksel = auxclk_src_sel, + .clksel_reg =OMAP4_SCRM_AUXCLK1 , + .clksel_mask =OMAP4_SRCSELECT_MASK , + .enable_reg =OMAP4_SCRM_AUXCLK1 , + .enable_bit =OMAP4_ENABLE_SHIFT , +}; + +DEFINE_STRUCT_CLK (auxclk1_src_ck, auxclk_src_ck_parents, auxclk_src_ck_ops); + +DEFINE_CLK_DIVIDER (auxclk1_ck, +"auxclk1_src_ck" , + &auxclk1_src_ck, +0x0 , +OMAP4_SCRM_AUXCLK1 , +OMAP4_CLKDIV_SHIFT , +OMAP4_CLKDIV_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk auxclk2_src_ck; + +static struct clk_hw_omap auxclk2_src_ck_hw = { + .hw = { + .clk = &auxclk2_src_ck, + }, + .clksel = auxclk_src_sel, + .clksel_reg =OMAP4_SCRM_AUXCLK2 , + .clksel_mask =OMAP4_SRCSELECT_MASK , + .enable_reg =OMAP4_SCRM_AUXCLK2 , + .enable_bit =OMAP4_ENABLE_SHIFT , +}; + +DEFINE_STRUCT_CLK (auxclk2_src_ck, auxclk_src_ck_parents, auxclk_src_ck_ops); + +DEFINE_CLK_DIVIDER (auxclk2_ck, +"auxclk2_src_ck" , + &auxclk2_src_ck, +0x0 , +OMAP4_SCRM_AUXCLK2 , +OMAP4_CLKDIV_SHIFT , +OMAP4_CLKDIV_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk auxclk3_src_ck; + +static struct clk_hw_omap auxclk3_src_ck_hw = { + .hw = { + .clk = &auxclk3_src_ck, + }, + .clksel = auxclk_src_sel, + .clksel_reg =OMAP4_SCRM_AUXCLK3 , + .clksel_mask =OMAP4_SRCSELECT_MASK , + .enable_reg =OMAP4_SCRM_AUXCLK3 , + .enable_bit =OMAP4_ENABLE_SHIFT , +}; + +DEFINE_STRUCT_CLK (auxclk3_src_ck, auxclk_src_ck_parents, auxclk_src_ck_ops); + +DEFINE_CLK_DIVIDER (auxclk3_ck, +"auxclk3_src_ck" , + &auxclk3_src_ck, +0x0 , +OMAP4_SCRM_AUXCLK3 , +OMAP4_CLKDIV_SHIFT , +OMAP4_CLKDIV_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk auxclk4_src_ck; + +static struct clk_hw_omap auxclk4_src_ck_hw = { + .hw = { + .clk = &auxclk4_src_ck, + }, + .clksel = auxclk_src_sel, + .clksel_reg =OMAP4_SCRM_AUXCLK4 , + .clksel_mask =OMAP4_SRCSELECT_MASK , + .enable_reg =OMAP4_SCRM_AUXCLK4 , + .enable_bit =OMAP4_ENABLE_SHIFT , +}; + +DEFINE_STRUCT_CLK (auxclk4_src_ck, auxclk_src_ck_parents, auxclk_src_ck_ops); + +DEFINE_CLK_DIVIDER (auxclk4_ck, +"auxclk4_src_ck" , + &auxclk4_src_ck, +0x0 , +OMAP4_SCRM_AUXCLK4 , +OMAP4_CLKDIV_SHIFT , +OMAP4_CLKDIV_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk auxclk5_src_ck; + +static struct clk_hw_omap auxclk5_src_ck_hw = { + .hw = { + .clk = &auxclk5_src_ck, + }, + .clksel = auxclk_src_sel, + .clksel_reg =OMAP4_SCRM_AUXCLK5 , + .clksel_mask =OMAP4_SRCSELECT_MASK , + .enable_reg =OMAP4_SCRM_AUXCLK5 , + .enable_bit =OMAP4_ENABLE_SHIFT , +}; + +DEFINE_STRUCT_CLK (auxclk5_src_ck, auxclk_src_ck_parents, auxclk_src_ck_ops); + +DEFINE_CLK_DIVIDER (auxclk5_ck, +"auxclk5_src_ck" , + &auxclk5_src_ck, +0x0 , +OMAP4_SCRM_AUXCLK5 , +OMAP4_CLKDIV_SHIFT , +OMAP4_CLKDIV_WIDTH , +0x0 , +NULL , +NULL ); + +static const char *auxclkreq_ck_parents[] = { +"auxclk0_ck" , +"auxclk1_ck" , +"auxclk2_ck" , +"auxclk3_ck" , +"auxclk4_ck" , +"auxclk5_ck" , +}; + +DEFINE_CLK_MUX (auxclkreq0_ck, + auxclkreq_ck_parents,NULL , +0x0 , +OMAP4_SCRM_AUXCLKREQ0 , +OMAP4_MAPPING_SHIFT , +OMAP4_MAPPING_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (auxclkreq1_ck, + auxclkreq_ck_parents,NULL , +0x0 , +OMAP4_SCRM_AUXCLKREQ1 , +OMAP4_MAPPING_SHIFT , +OMAP4_MAPPING_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (auxclkreq2_ck, + auxclkreq_ck_parents,NULL , +0x0 , +OMAP4_SCRM_AUXCLKREQ2 , +OMAP4_MAPPING_SHIFT , +OMAP4_MAPPING_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (auxclkreq3_ck, + auxclkreq_ck_parents,NULL , +0x0 , +OMAP4_SCRM_AUXCLKREQ3 , +OMAP4_MAPPING_SHIFT , +OMAP4_MAPPING_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (auxclkreq4_ck, + auxclkreq_ck_parents,NULL , +0x0 , +OMAP4_SCRM_AUXCLKREQ4 , +OMAP4_MAPPING_SHIFT , +OMAP4_MAPPING_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_MUX (auxclkreq5_ck, + auxclkreq_ck_parents,NULL , +0x0 , +OMAP4_SCRM_AUXCLKREQ5 , +OMAP4_MAPPING_SHIFT , +OMAP4_MAPPING_WIDTH , +0x0 , +NULL ); + +/* +* clkdev +*/ + +static struct omap_clk omap44xx_clks[] = { +CLK (NULL ,"extalt_clkin_ck" , &extalt_clkin_ck,CK_443X ), +CLK (NULL ,"pad_clks_src_ck" , &pad_clks_src_ck,CK_443X ), +CLK (NULL ,"pad_clks_ck" , &pad_clks_ck,CK_443X ), +CLK (NULL ,"pad_slimbus_core_clks_ck" , &pad_slimbus_core_clks_ck,CK_443X ), +CLK (NULL ,"secure_32k_clk_src_ck" , &secure_32k_clk_src_ck,CK_443X ), +CLK (NULL ,"slimbus_src_clk" , &slimbus_src_clk,CK_443X ), +CLK (NULL ,"slimbus_clk" , &slimbus_clk,CK_443X ), +CLK (NULL ,"sys_32k_ck" , &sys_32k_ck,CK_443X ), +CLK (NULL ,"virt_12000000_ck" , &virt_12000000_ck,CK_443X ), +CLK (NULL ,"virt_13000000_ck" , &virt_13000000_ck,CK_443X ), +CLK (NULL ,"virt_16800000_ck" , &virt_16800000_ck,CK_443X ), +CLK (NULL ,"virt_19200000_ck" , &virt_19200000_ck,CK_443X ), +CLK (NULL ,"virt_26000000_ck" , &virt_26000000_ck,CK_443X ), +CLK (NULL ,"virt_27000000_ck" , &virt_27000000_ck,CK_443X ), +CLK (NULL ,"virt_38400000_ck" , &virt_38400000_ck,CK_443X ), +CLK (NULL ,"sys_clkin_ck" , &sys_clkin_ck,CK_443X ), +CLK (NULL ,"tie_low_clock_ck" , &tie_low_clock_ck,CK_443X ), +CLK (NULL ,"utmi_phy_clkout_ck" , &utmi_phy_clkout_ck,CK_443X ), +CLK (NULL ,"xclk60mhsp1_ck" , &xclk60mhsp1_ck,CK_443X ), +CLK (NULL ,"xclk60mhsp2_ck" , &xclk60mhsp2_ck,CK_443X ), +CLK (NULL ,"xclk60motg_ck" , &xclk60motg_ck,CK_443X ), +CLK (NULL ,"abe_dpll_bypass_clk_mux_ck" , &abe_dpll_bypass_clk_mux_ck,CK_443X ), +CLK (NULL ,"abe_dpll_refclk_mux_ck" , &abe_dpll_refclk_mux_ck,CK_443X ), +CLK (NULL ,"dpll_abe_ck" , &dpll_abe_ck,CK_443X ), +CLK (NULL ,"dpll_abe_x2_ck" , &dpll_abe_x2_ck,CK_443X ), +CLK (NULL ,"dpll_abe_m2x2_ck" , &dpll_abe_m2x2_ck,CK_443X ), +CLK (NULL ,"abe_24m_fclk" , &abe_24m_fclk,CK_443X ), +CLK (NULL ,"abe_clk" , &abe_clk,CK_443X ), +CLK (NULL ,"aess_fclk" , &aess_fclk,CK_443X ), +CLK (NULL ,"dpll_abe_m3x2_ck" , &dpll_abe_m3x2_ck,CK_443X ), +CLK (NULL ,"core_hsd_byp_clk_mux_ck" , &core_hsd_byp_clk_mux_ck,CK_443X ), +CLK (NULL ,"dpll_core_ck" , &dpll_core_ck,CK_443X ), +CLK (NULL ,"dpll_core_x2_ck" , &dpll_core_x2_ck,CK_443X ), +CLK (NULL ,"dpll_core_m6x2_ck" , &dpll_core_m6x2_ck,CK_443X ), +CLK (NULL ,"dbgclk_mux_ck" , &dbgclk_mux_ck,CK_443X ), +CLK (NULL ,"dpll_core_m2_ck" , &dpll_core_m2_ck,CK_443X ), +CLK (NULL ,"ddrphy_ck" , &ddrphy_ck,CK_443X ), +CLK (NULL ,"dpll_core_m5x2_ck" , &dpll_core_m5x2_ck,CK_443X ), +CLK (NULL ,"div_core_ck" , &div_core_ck,CK_443X ), +CLK (NULL ,"div_iva_hs_clk" , &div_iva_hs_clk,CK_443X ), +CLK (NULL ,"div_mpu_hs_clk" , &div_mpu_hs_clk,CK_443X ), +CLK (NULL ,"dpll_core_m4x2_ck" , &dpll_core_m4x2_ck,CK_443X ), +CLK (NULL ,"dll_clk_div_ck" , &dll_clk_div_ck,CK_443X ), +CLK (NULL ,"dpll_abe_m2_ck" , &dpll_abe_m2_ck,CK_443X ), +CLK (NULL ,"dpll_core_m3x2_ck" , &dpll_core_m3x2_ck,CK_443X ), +CLK (NULL ,"dpll_core_m7x2_ck" , &dpll_core_m7x2_ck,CK_443X ), +CLK (NULL ,"iva_hsd_byp_clk_mux_ck" , &iva_hsd_byp_clk_mux_ck,CK_443X ), +CLK (NULL ,"dpll_iva_ck" , &dpll_iva_ck,CK_443X ), +CLK (NULL ,"dpll_iva_x2_ck" , &dpll_iva_x2_ck,CK_443X ), +CLK (NULL ,"dpll_iva_m4x2_ck" , &dpll_iva_m4x2_ck,CK_443X ), +CLK (NULL ,"dpll_iva_m5x2_ck" , &dpll_iva_m5x2_ck,CK_443X ), +CLK (NULL ,"dpll_mpu_ck" , &dpll_mpu_ck,CK_443X ), +CLK (NULL ,"dpll_mpu_m2_ck" , &dpll_mpu_m2_ck,CK_443X ), +CLK (NULL ,"per_hs_clk_div_ck" , &per_hs_clk_div_ck,CK_443X ), +CLK (NULL ,"per_hsd_byp_clk_mux_ck" , &per_hsd_byp_clk_mux_ck,CK_443X ), +CLK (NULL ,"dpll_per_ck" , &dpll_per_ck,CK_443X ), +CLK (NULL ,"dpll_per_m2_ck" , &dpll_per_m2_ck,CK_443X ), +CLK (NULL ,"dpll_per_x2_ck" , &dpll_per_x2_ck,CK_443X ), +CLK (NULL ,"dpll_per_m2x2_ck" , &dpll_per_m2x2_ck,CK_443X ), +CLK (NULL ,"dpll_per_m3x2_ck" , &dpll_per_m3x2_ck,CK_443X ), +CLK (NULL ,"dpll_per_m4x2_ck" , &dpll_per_m4x2_ck,CK_443X ), +CLK (NULL ,"dpll_per_m5x2_ck" , &dpll_per_m5x2_ck,CK_443X ), +CLK (NULL ,"dpll_per_m6x2_ck" , &dpll_per_m6x2_ck,CK_443X ), +CLK (NULL ,"dpll_per_m7x2_ck" , &dpll_per_m7x2_ck,CK_443X ), +CLK (NULL ,"usb_hs_clk_div_ck" , &usb_hs_clk_div_ck,CK_443X ), +CLK (NULL ,"dpll_usb_ck" , &dpll_usb_ck,CK_443X ), +CLK (NULL ,"dpll_usb_clkdcoldo_ck" , &dpll_usb_clkdcoldo_ck,CK_443X ), +CLK (NULL ,"dpll_usb_m2_ck" , &dpll_usb_m2_ck,CK_443X ), +CLK (NULL ,"ducati_clk_mux_ck" , &ducati_clk_mux_ck,CK_443X ), +CLK (NULL ,"func_12m_fclk" , &func_12m_fclk,CK_443X ), +CLK (NULL ,"func_24m_clk" , &func_24m_clk,CK_443X ), +CLK (NULL ,"func_24mc_fclk" , &func_24mc_fclk,CK_443X ), +CLK (NULL ,"func_48m_fclk" , &func_48m_fclk,CK_443X ), +CLK (NULL ,"func_48mc_fclk" , &func_48mc_fclk,CK_443X ), +CLK (NULL ,"func_64m_fclk" , &func_64m_fclk,CK_443X ), +CLK (NULL ,"func_96m_fclk" , &func_96m_fclk,CK_443X ), +CLK (NULL ,"init_60m_fclk" , &init_60m_fclk,CK_443X ), +CLK (NULL ,"l3_div_ck" , &l3_div_ck,CK_443X ), +CLK (NULL ,"l4_div_ck" , &l4_div_ck,CK_443X ), +CLK (NULL ,"lp_clk_div_ck" , &lp_clk_div_ck,CK_443X ), +CLK (NULL ,"l4_wkup_clk_mux_ck" , &l4_wkup_clk_mux_ck,CK_443X ), +CLK (NULL ,"ocp_abe_iclk" , &ocp_abe_iclk,CK_443X ), +CLK (NULL ,"per_abe_24m_fclk" , &per_abe_24m_fclk,CK_443X ), +CLK (NULL ,"per_abe_nc_fclk" , &per_abe_nc_fclk,CK_443X ), +CLK (NULL ,"syc_clk_div_ck" , &syc_clk_div_ck,CK_443X ), +CLK (NULL ,"aes1_fck" , &aes1_fck,CK_443X ), +CLK (NULL ,"aes2_fck" , &aes2_fck,CK_443X ), +CLK (NULL ,"aess_fck" , &aess_fck,CK_443X ), +CLK (NULL ,"bandgap_fclk" , &bandgap_fclk,CK_443X ), +CLK (NULL ,"div_ts_ck" , &div_ts_ck,CK_446X ), +CLK (NULL ,"bandgap_ts_fclk" , &bandgap_ts_fclk,CK_446X ), +CLK (NULL ,"des3des_fck" , &des3des_fck,CK_443X ), +CLK (NULL ,"dmic_sync_mux_ck" , &dmic_sync_mux_ck,CK_443X ), +CLK (NULL ,"dmic_fck" , &dmic_fck,CK_443X ), +CLK (NULL ,"dsp_fck" , &dsp_fck,CK_443X ), +CLK (NULL ,"dss_sys_clk" , &dss_sys_clk,CK_443X ), +CLK (NULL ,"dss_tv_clk" , &dss_tv_clk,CK_443X ), +CLK (NULL ,"dss_dss_clk" , &dss_dss_clk,CK_443X ), +CLK (NULL ,"dss_48mhz_clk" , &dss_48mhz_clk,CK_443X ), +CLK (NULL ,"dss_fck" , &dss_fck,CK_443X ), +CLK ("omapdss_dss" ,"ick" , &dss_fck,CK_443X ), +CLK (NULL ,"efuse_ctrl_cust_fck" , &efuse_ctrl_cust_fck,CK_443X ), +CLK (NULL ,"emif1_fck" , &emif1_fck,CK_443X ), +CLK (NULL ,"emif2_fck" , &emif2_fck,CK_443X ), +CLK (NULL ,"fdif_fck" , &fdif_fck,CK_443X ), +CLK (NULL ,"fpka_fck" , &fpka_fck,CK_443X ), +CLK (NULL ,"gpio1_dbclk" , &gpio1_dbclk,CK_443X ), +CLK (NULL ,"gpio1_ick" , &gpio1_ick,CK_443X ), +CLK (NULL ,"gpio2_dbclk" , &gpio2_dbclk,CK_443X ), +CLK (NULL ,"gpio2_ick" , &gpio2_ick,CK_443X ), +CLK (NULL ,"gpio3_dbclk" , &gpio3_dbclk,CK_443X ), +CLK (NULL ,"gpio3_ick" , &gpio3_ick,CK_443X ), +CLK (NULL ,"gpio4_dbclk" , &gpio4_dbclk,CK_443X ), +CLK (NULL ,"gpio4_ick" , &gpio4_ick,CK_443X ), +CLK (NULL ,"gpio5_dbclk" , &gpio5_dbclk,CK_443X ), +CLK (NULL ,"gpio5_ick" , &gpio5_ick,CK_443X ), +CLK (NULL ,"gpio6_dbclk" , &gpio6_dbclk,CK_443X ), +CLK (NULL ,"gpio6_ick" , &gpio6_ick,CK_443X ), +CLK (NULL ,"gpmc_ick" , &gpmc_ick,CK_443X ), +CLK (NULL ,"gpu_fck" , &gpu_fck,CK_443X ), +CLK (NULL ,"hdq1w_fck" , &hdq1w_fck,CK_443X ), +CLK (NULL ,"hsi_fck" , &hsi_fck,CK_443X ), +CLK (NULL ,"i2c1_fck" , &i2c1_fck,CK_443X ), +CLK (NULL ,"i2c2_fck" , &i2c2_fck,CK_443X ), +CLK (NULL ,"i2c3_fck" , &i2c3_fck,CK_443X ), +CLK (NULL ,"i2c4_fck" , &i2c4_fck,CK_443X ), +CLK (NULL ,"ipu_fck" , &ipu_fck,CK_443X ), +CLK (NULL ,"iss_ctrlclk" , &iss_ctrlclk,CK_443X ), +CLK (NULL ,"iss_fck" , &iss_fck,CK_443X ), +CLK (NULL ,"iva_fck" , &iva_fck,CK_443X ), +CLK (NULL ,"kbd_fck" , &kbd_fck,CK_443X ), +CLK (NULL ,"l3_instr_ick" , &l3_instr_ick,CK_443X ), +CLK (NULL ,"l3_main_3_ick" , &l3_main_3_ick,CK_443X ), +CLK (NULL ,"mcasp_sync_mux_ck" , &mcasp_sync_mux_ck,CK_443X ), +CLK (NULL ,"mcasp_fck" , &mcasp_fck,CK_443X ), +CLK (NULL ,"mcbsp1_sync_mux_ck" , &mcbsp1_sync_mux_ck,CK_443X ), +CLK (NULL ,"mcbsp1_fck" , &mcbsp1_fck,CK_443X ), +CLK (NULL ,"mcbsp2_sync_mux_ck" , &mcbsp2_sync_mux_ck,CK_443X ), +CLK (NULL ,"mcbsp2_fck" , &mcbsp2_fck,CK_443X ), +CLK (NULL ,"mcbsp3_sync_mux_ck" , &mcbsp3_sync_mux_ck,CK_443X ), +CLK (NULL ,"mcbsp3_fck" , &mcbsp3_fck,CK_443X ), +CLK (NULL ,"mcbsp4_sync_mux_ck" , &mcbsp4_sync_mux_ck,CK_443X ), +CLK (NULL ,"mcbsp4_fck" , &mcbsp4_fck,CK_443X ), +CLK (NULL ,"mcpdm_fck" , &mcpdm_fck,CK_443X ), +CLK (NULL ,"mcspi1_fck" , &mcspi1_fck,CK_443X ), +CLK (NULL ,"mcspi2_fck" , &mcspi2_fck,CK_443X ), +CLK (NULL ,"mcspi3_fck" , &mcspi3_fck,CK_443X ), +CLK (NULL ,"mcspi4_fck" , &mcspi4_fck,CK_443X ), +CLK (NULL ,"mmc1_fck" , &mmc1_fck,CK_443X ), +CLK (NULL ,"mmc2_fck" , &mmc2_fck,CK_443X ), +CLK (NULL ,"mmc3_fck" , &mmc3_fck,CK_443X ), +CLK (NULL ,"mmc4_fck" , &mmc4_fck,CK_443X ), +CLK (NULL ,"mmc5_fck" , &mmc5_fck,CK_443X ), +CLK (NULL ,"ocp2scp_usb_phy_phy_48m" , &ocp2scp_usb_phy_phy_48m,CK_443X ), +CLK (NULL ,"ocp2scp_usb_phy_ick" , &ocp2scp_usb_phy_ick,CK_443X ), +CLK (NULL ,"ocp_wp_noc_ick" , &ocp_wp_noc_ick,CK_443X ), +CLK (NULL ,"rng_ick" , &rng_ick,CK_443X ), +CLK ("omap_rng" ,"ick" , &rng_ick,CK_443X ), +CLK (NULL ,"sha2md5_fck" , &sha2md5_fck,CK_443X ), +CLK (NULL ,"sl2if_ick" , &sl2if_ick,CK_443X ), +CLK (NULL ,"slimbus1_fclk_1" , &slimbus1_fclk_1,CK_443X ), +CLK (NULL ,"slimbus1_fclk_0" , &slimbus1_fclk_0,CK_443X ), +CLK (NULL ,"slimbus1_fclk_2" , &slimbus1_fclk_2,CK_443X ), +CLK (NULL ,"slimbus1_slimbus_clk" , &slimbus1_slimbus_clk,CK_443X ), +CLK (NULL ,"slimbus1_fck" , &slimbus1_fck,CK_443X ), +CLK (NULL ,"slimbus2_fclk_1" , &slimbus2_fclk_1,CK_443X ), +CLK (NULL ,"slimbus2_fclk_0" , &slimbus2_fclk_0,CK_443X ), +CLK (NULL ,"slimbus2_slimbus_clk" , &slimbus2_slimbus_clk,CK_443X ), +CLK (NULL ,"slimbus2_fck" , &slimbus2_fck,CK_443X ), +CLK (NULL ,"smartreflex_core_fck" , &smartreflex_core_fck,CK_443X ), +CLK (NULL ,"smartreflex_iva_fck" , &smartreflex_iva_fck,CK_443X ), +CLK (NULL ,"smartreflex_mpu_fck" , &smartreflex_mpu_fck,CK_443X ), +CLK (NULL ,"gpt1_fck" , &timer1_fck,CK_443X ), +CLK (NULL ,"timer1_fck" , &timer1_fck,CK_443X ), +CLK (NULL ,"gpt10_fck" , &timer10_fck,CK_443X ), +CLK (NULL ,"timer10_fck" , &timer10_fck,CK_443X ), +CLK (NULL ,"gpt11_fck" , &timer11_fck,CK_443X ), +CLK (NULL ,"timer11_fck" , &timer11_fck,CK_443X ), +CLK (NULL ,"gpt2_fck" , &timer2_fck,CK_443X ), +CLK (NULL ,"timer2_fck" , &timer2_fck,CK_443X ), +CLK (NULL ,"gpt3_fck" , &timer3_fck,CK_443X ), +CLK (NULL ,"timer3_fck" , &timer3_fck,CK_443X ), +CLK (NULL ,"gpt4_fck" , &timer4_fck,CK_443X ), +CLK (NULL ,"timer4_fck" , &timer4_fck,CK_443X ), +CLK (NULL ,"gpt5_fck" , &timer5_fck,CK_443X ), +CLK (NULL ,"timer5_fck" , &timer5_fck,CK_443X ), +CLK (NULL ,"gpt6_fck" , &timer6_fck,CK_443X ), +CLK (NULL ,"timer6_fck" , &timer6_fck,CK_443X ), +CLK (NULL ,"gpt7_fck" , &timer7_fck,CK_443X ), +CLK (NULL ,"timer7_fck" , &timer7_fck,CK_443X ), +CLK (NULL ,"gpt8_fck" , &timer8_fck,CK_443X ), +CLK (NULL ,"timer8_fck" , &timer8_fck,CK_443X ), +CLK (NULL ,"gpt9_fck" , &timer9_fck,CK_443X ), +CLK (NULL ,"timer9_fck" , &timer9_fck,CK_443X ), +CLK (NULL ,"uart1_fck" , &uart1_fck,CK_443X ), +CLK (NULL ,"uart2_fck" , &uart2_fck,CK_443X ), +CLK (NULL ,"uart3_fck" , &uart3_fck,CK_443X ), +CLK (NULL ,"uart4_fck" , &uart4_fck,CK_443X ), +CLK (NULL ,"usb_host_fs_fck" , &usb_host_fs_fck,CK_443X ), +CLK ("usbhs_omap" ,"fs_fck" , &usb_host_fs_fck,CK_443X ), +CLK (NULL ,"utmi_p1_gfclk" , &utmi_p1_gfclk,CK_443X ), +CLK (NULL ,"usb_host_hs_utmi_p1_clk" , &usb_host_hs_utmi_p1_clk,CK_443X ), +CLK (NULL ,"utmi_p2_gfclk" , &utmi_p2_gfclk,CK_443X ), +CLK (NULL ,"usb_host_hs_utmi_p2_clk" , &usb_host_hs_utmi_p2_clk,CK_443X ), +CLK (NULL ,"usb_host_hs_utmi_p3_clk" , &usb_host_hs_utmi_p3_clk,CK_443X ), +CLK (NULL ,"usb_host_hs_hsic480m_p1_clk" , &usb_host_hs_hsic480m_p1_clk,CK_443X ), +CLK (NULL ,"usb_host_hs_hsic60m_p1_clk" , &usb_host_hs_hsic60m_p1_clk,CK_443X ), +CLK (NULL ,"usb_host_hs_hsic60m_p2_clk" , &usb_host_hs_hsic60m_p2_clk,CK_443X ), +CLK (NULL ,"usb_host_hs_hsic480m_p2_clk" , &usb_host_hs_hsic480m_p2_clk,CK_443X ), +CLK (NULL ,"usb_host_hs_func48mclk" , &usb_host_hs_func48mclk,CK_443X ), +CLK (NULL ,"usb_host_hs_fck" , &usb_host_hs_fck,CK_443X ), +CLK ("usbhs_omap" ,"hs_fck" , &usb_host_hs_fck,CK_443X ), +CLK (NULL ,"otg_60m_gfclk" , &otg_60m_gfclk,CK_443X ), +CLK (NULL ,"usb_otg_hs_xclk" , &usb_otg_hs_xclk,CK_443X ), +CLK (NULL ,"usb_otg_hs_ick" , &usb_otg_hs_ick,CK_443X ), +CLK ("musb-omap2430" ,"ick" , &usb_otg_hs_ick,CK_443X ), +CLK (NULL ,"usb_phy_cm_clk32k" , &usb_phy_cm_clk32k,CK_443X ), +CLK (NULL ,"usb_tll_hs_usb_ch2_clk" , &usb_tll_hs_usb_ch2_clk,CK_443X ), +CLK (NULL ,"usb_tll_hs_usb_ch0_clk" , &usb_tll_hs_usb_ch0_clk,CK_443X ), +CLK (NULL ,"usb_tll_hs_usb_ch1_clk" , &usb_tll_hs_usb_ch1_clk,CK_443X ), +CLK (NULL ,"usb_tll_hs_ick" , &usb_tll_hs_ick,CK_443X ), +CLK ("usbhs_omap" ,"usbtll_ick" , &usb_tll_hs_ick,CK_443X ), +CLK (NULL ,"usim_ck" , &usim_ck,CK_443X ), +CLK (NULL ,"usim_fclk" , &usim_fclk,CK_443X ), +CLK (NULL ,"usim_fck" , &usim_fck,CK_443X ), +CLK (NULL ,"wd_timer2_fck" , &wd_timer2_fck,CK_443X ), +CLK (NULL ,"wd_timer3_fck" , &wd_timer3_fck,CK_443X ), +CLK (NULL ,"pmd_stm_clock_mux_ck" , &pmd_stm_clock_mux_ck,CK_443X ), +CLK (NULL ,"pmd_trace_clk_mux_ck" , &pmd_trace_clk_mux_ck,CK_443X ), +CLK (NULL ,"stm_clk_div_ck" , &stm_clk_div_ck,CK_443X ), +CLK (NULL ,"trace_clk_div_ck" , &trace_clk_div_ck,CK_443X ), +CLK (NULL ,"auxclk0_src_ck" , &auxclk0_src_ck,CK_443X ), +CLK (NULL ,"auxclk0_ck" , &auxclk0_ck,CK_443X ), +CLK (NULL ,"auxclkreq0_ck" , &auxclkreq0_ck,CK_443X ), +CLK (NULL ,"auxclk1_src_ck" , &auxclk1_src_ck,CK_443X ), +CLK (NULL ,"auxclk1_ck" , &auxclk1_ck,CK_443X ), +CLK (NULL ,"auxclkreq1_ck" , &auxclkreq1_ck,CK_443X ), +CLK (NULL ,"auxclk2_src_ck" , &auxclk2_src_ck,CK_443X ), +CLK (NULL ,"auxclk2_ck" , &auxclk2_ck,CK_443X ), +CLK (NULL ,"auxclkreq2_ck" , &auxclkreq2_ck,CK_443X ), +CLK (NULL ,"auxclk3_src_ck" , &auxclk3_src_ck,CK_443X ), +CLK (NULL ,"auxclk3_ck" , &auxclk3_ck,CK_443X ), +CLK (NULL ,"auxclkreq3_ck" , &auxclkreq3_ck,CK_443X ), +CLK (NULL ,"auxclk4_src_ck" , &auxclk4_src_ck,CK_443X ), +CLK (NULL ,"auxclk4_ck" , &auxclk4_ck,CK_443X ), +CLK (NULL ,"auxclkreq4_ck" , &auxclkreq4_ck,CK_443X ), +CLK (NULL ,"auxclk5_src_ck" , &auxclk5_src_ck,CK_443X ), +CLK (NULL ,"auxclk5_ck" , &auxclk5_ck,CK_443X ), +CLK (NULL ,"auxclkreq5_ck" , &auxclkreq5_ck,CK_443X ), +CLK (NULL ,"gpmc_ck" , &dummy_ck,CK_443X ), +CLK ("omap_i2c.1" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_i2c.2" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_i2c.3" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_i2c.4" ,"ick" , &dummy_ck,CK_443X ), +CLK (NULL ,"mailboxes_ick" , &dummy_ck,CK_443X ), +CLK ("omap_hsmmc.0" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_hsmmc.1" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_hsmmc.2" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_hsmmc.3" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_hsmmc.4" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap-mcbsp.1" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap-mcbsp.2" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap-mcbsp.3" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap-mcbsp.4" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap2_mcspi.1" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap2_mcspi.2" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap2_mcspi.3" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap2_mcspi.4" ,"ick" , &dummy_ck,CK_443X ), +CLK (NULL ,"uart1_ick" , &dummy_ck,CK_443X ), +CLK (NULL ,"uart2_ick" , &dummy_ck,CK_443X ), +CLK (NULL ,"uart3_ick" , &dummy_ck,CK_443X ), +CLK (NULL ,"uart4_ick" , &dummy_ck,CK_443X ), +CLK ("usbhs_omap" ,"usbhost_ick" , &dummy_ck,CK_443X ), +CLK ("usbhs_omap" ,"usbtll_fck" , &dummy_ck,CK_443X ), +CLK ("omap_wdt" ,"ick" , &dummy_ck,CK_443X ), +CLK ("omap_timer.1" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.2" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.3" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.4" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.5" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.6" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.7" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.8" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.9" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.10" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.11" ,"32k_ck" , &sys_32k_ck,CK_443X ), +CLK ("omap_timer.1" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.2" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.3" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.4" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.9" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.10" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.11" ,"sys_ck" , &sys_clkin_ck,CK_443X ), +CLK ("omap_timer.5" ,"sys_ck" , &syc_clk_div_ck,CK_443X ), +CLK ("omap_timer.6" ,"sys_ck" , &syc_clk_div_ck,CK_443X ), +CLK ("omap_timer.7" ,"sys_ck" , &syc_clk_div_ck,CK_443X ), +CLK ("omap_timer.8" ,"sys_ck" , &syc_clk_div_ck,CK_443X ), +}; + +static const char *enable_init_clks[] = { +"emif1_fck" , +"emif2_fck" , +"gpmc_ick" , +"l3_instr_ick" , +"l3_main_3_ick" , +"ocp_wp_noc_ick" , +}; + +int __init omap4xxx_clk_init (void ) +{ +u32 cpu_clkflg; +struct omap_clk *c; + +if (cpu_is_omap443x ()) { + cpu_mask =RATE_IN_4430 ; + cpu_clkflg =CK_443X ; + }else if (cpu_is_omap446x ()) { + cpu_mask =RATE_IN_4460 |RATE_IN_4430 ; + cpu_clkflg =CK_446X |CK_443X ; + }else { +return 0 ; + } + +for (c = omap44xx_clks; c < omap44xx_clks +ARRAY_SIZE (omap44xx_clks); + c++) + { +if (c->cpu & cpu_clkflg) { +clkdev_add (&c->lk); +if (!__clk_init (NULL , c->lk.clk)) +omap2_init_clk_hw_omap_clocks (c->lk.clk); + } + } + +omap2_clk_disable_autoidle_all (); + +omap2_clk_enable_init_clocks (enable_init_clks, +ARRAY_SIZE (enable_init_clks)); + +return 0 ; +}
arch/arm/mach-omap2/clock.h +1 -0
@@ -205,6 +205,7 @@ extern const struct clksel_rate gpt_32k_rates[];extern const struct clksel_rate gpt_sys_rates[];extern const struct clksel_rate gfx_l3_rates[];extern const struct clksel_rate dsp_ick_rates[]; +extern struct clk dummy_ck;#ifdef CONFIG_COMMON_CLK extern const struct clk_hw_omap_ops clkhwops_omap3_dpll;
arch/arm/mach-omap2/clock_common_data.c +14 -0
@@ -43,3 +43,17 @@ const struct clksel_rate dsp_ick_rates[] = { { .div = 3, .val = 3, .flags = RATE_IN_243X }, { .div = 0 }, }; + +#ifdef CONFIG_COMMON_CLK + +#include <linux/clk-private.h> + +static struct clk_ops dummy_ck_ops = {}; + +struct clk dummy_ck = { + .name ="dummy_clk" , + .ops = &dummy_ck_ops, + .flags =CLK_IS_BASIC , +}; + +#endif
arch/arm/mach-omap2/scrm44xx.h +2 -0
@@ -127,12 +127,14 @@/* AUXCLKREQ0 */ #define OMAP4_MAPPING_SHIFT 2#define OMAP4_MAPPING_MASK (0x7 << 2) +#define OMAP4_MAPPING_WIDTH 3#define OMAP4_ACCURACY_SHIFT 1#define OMAP4_ACCURACY_MASK (1 << 1)/* AUXCLK0 */ #define OMAP4_CLKDIV_SHIFT 16#define OMAP4_CLKDIV_MASK (0xf << 16) +#define OMAP4_CLKDIV_WIDTH 4#define OMAP4_DISABLECLK_SHIFT 9#define OMAP4_DISABLECLK_MASK (1 << 9)#define OMAP4_ENABLE_SHIFT 8
arch/arm/plat-omap/include/plat/clock.h +16 -0
@@ -21,6 +21,22 @@struct clockdomain ;#define to_clk_hw_omap (_hw) container_of(_hw, struct clk_hw_omap, hw) +#define DEFINE_STRUCT_CLK (_name, _parent_array_name, _clkops_name) \ + static struct clk _name = { \ + .name = #_name, \ + .hw = &_name##_hw.hw, \ + .parent_names = _parent_array_name, \ + .num_parents = ARRAY_SIZE(_parent_array_name), \ + .ops = &_clkops_name, \ + }; + +#define DEFINE_STRUCT_CLK_HW_OMAP (_name) \ + static struct clk_hw_omap _name##_hw = { \ + .hw = { \ + .clk = &_name, \ + }, \ + }; +#else struct module ;
Signature · 1 line
1.7.1
PATCH 19/29 ARM: omap3: clk: Add 3xxx data using common struct clk
In reply to Rajendra NayakThe patch is the output from a python script which converts from the old OMAP clk format to COMMON clk format using a JSON parser in between which was developed by Paul Walmsley.
--- arch/arm/mach-omap2/cclock3xxx_data.c | 3981 ++++++++++++++++++++++++++++++++ arch/arm/mach-omap2/cm-regbits-34xx.h | 31 + arch/arm/mach-omap2/cm2xxx_3xxx.h | 1 + arch/arm/mach-omap2/prm-regbits-34xx.h | 1 + arch/arm/mach-omap2/prm2xxx_3xxx.h | 1 + 5 files changed, 4015 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/cclock3xxx_data.c
arch/arm/mach-omap2/cclock3xxx_data.c new file +3981 -0
@@ -0,0 +1,3981 @@ +/* +* OMAP3 clock data +* +* Copyright (C) 2007-2012 Texas Instruments, Inc. +* Copyright (C) 2007-2011 Nokia Corporation +* +* Written by Paul Walmsley +* Updated to COMMON clk data format by Rajendra Nayak <[email protected]> +* With many device clock fixes by Kevin Hilman and Jouni H??gander +* DPLL bypass clock support added by Roman Tereshonkov +* +*/ + +/* +* Virtual clocks are introduced as convenient tools. +* They are sources for other clocks and not supposed +* to be requested from drivers directly. +*/ + +#include <linux/kernel.h> +#include <linux/clk.h> +#include <linux/clk-private.h> +#include <linux/list.h> +#include <linux/io.h> + +#include <plat/hardware.h> +#include <plat/clkdev_omap.h> + +#include "iomap.h" +#include "clock.h" +#include "clock3xxx.h" +#include "clock34xx.h" +#include "clock36xx.h" +#include "clock3517.h" +#include "cm2xxx_3xxx.h" +#include "cm-regbits-34xx.h" +#include "prm2xxx_3xxx.h" +#include "prm-regbits-34xx.h" +#include "control.h" + +/* +* clocks +*/ + +#define OMAP_CM_REGADDR OMAP34XX_CM_REGADDR + +/* Maximum DPLL multiplier, divider values for OMAP3 */ +#define OMAP3_MAX_DPLL_MULT 2047 +#define OMAP3630_MAX_JTYPE_DPLL_MULT 4095 +#define OMAP3_MAX_DPLL_DIV 128 + +DEFINE_CLK_FIXED_RATE (dummy_apb_pclk,CLK_IS_ROOT ,0x0 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (mcbsp_clks,CLK_IS_ROOT ,0x0 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (omap_32k_fck,CLK_IS_ROOT ,32768 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (pclk_ck,CLK_IS_ROOT ,27000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (rmii_ck,CLK_IS_ROOT ,50000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (secure_32k_fck,CLK_IS_ROOT ,32768 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (sys_altclk,CLK_IS_ROOT ,0x0 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_12m_ck,CLK_IS_ROOT ,12000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_13m_ck,CLK_IS_ROOT ,13000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_16_8m_ck,CLK_IS_ROOT ,16800000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_19_2m_ck,CLK_IS_ROOT ,19200000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_26m_ck,CLK_IS_ROOT ,26000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (virt_38_4m_ck,CLK_IS_ROOT ,38400000 ,0x0 ); + +static const char *osc_sys_ck_parent_names[] = { +"virt_12m_ck" , +"virt_13m_ck" , +"virt_19_2m_ck" , +"virt_26m_ck" , +"virt_38_4m_ck" , +"virt_16_8m_ck" , +}; + +DEFINE_CLK_MUX (osc_sys_ck, + osc_sys_ck_parent_names,NULL , +0x0 , +OMAP3430_PRM_CLKSEL , +OMAP3430_SYS_CLKIN_SEL_SHIFT , +OMAP3430_SYS_CLKIN_SEL_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_DIVIDER (sys_ck, +"osc_sys_ck" , + &osc_sys_ck, +0x0 , +OMAP3430_PRM_CLKSRC_CTRL , +OMAP_SYSCLKDIV_SHIFT , +OMAP_SYSCLKDIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct dpll_data dpll3_dd = { + .mult_div1_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), + .mult_mask =OMAP3430_CORE_DPLL_MULT_MASK , + .div1_mask =OMAP3430_CORE_DPLL_DIV_MASK , + .clk_bypass = &sys_ck, + .clk_ref = &sys_ck, + .freqsel_mask =OMAP3430_CORE_DPLL_FREQSEL_MASK , + .control_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_mask =OMAP3430_EN_CORE_DPLL_MASK , + .auto_recal_bit =OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT , + .recal_en_bit =OMAP3430_CORE_DPLL_RECAL_EN_SHIFT , + .recal_st_bit =OMAP3430_CORE_DPLL_ST_SHIFT , + .autoidle_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_AUTOIDLE ), + .autoidle_mask =OMAP3430_AUTO_CORE_DPLL_MASK , + .idlest_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_IDLEST ), + .idlest_mask =OMAP3430_ST_CORE_CLK_MASK , + .max_multiplier =OMAP3_MAX_DPLL_MULT , + .min_divider =1 , + .max_divider =OMAP3_MAX_DPLL_DIV , +}; + +static struct clk dpll3_ck; + +static const char *dpll3_ck_parent_names[] = { +"sys_ck" , +}; + +static const struct clk_ops dpll3_ck_ops = { + .init = &omap2_init_clk_clkdm, + .get_parent = &omap2_init_dpll_parent, + .recalc_rate = &omap3_dpll_recalc, + .round_rate = &omap2_dpll_round_rate, +}; + +static struct clk_hw_omap dpll3_ck_hw = { + .hw = { + .clk = &dpll3_ck, + }, + .ops = &clkhwops_omap3_dpll, + .dpll_data = &dpll3_dd, + .clkdm_name ="dpll3_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll3_ck, dpll3_ck_parent_names, dpll3_ck_ops); + +DEFINE_CLK_DIVIDER (dpll3_m2_ck, +"dpll3_ck" , + &dpll3_ck, +0x0 , +OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), +OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT , +OMAP3430_CORE_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk core_ck; + +static const char *core_ck_parent_names[] = { +"dpll3_m2_ck" , +}; + +static const struct clk_ops core_ck_ops = { +}; + +DEFINE_STRUCT_CLK_HW_OMAP (core_ck); +DEFINE_STRUCT_CLK (core_ck, core_ck_parent_names, core_ck_ops); + +DEFINE_CLK_DIVIDER (l3_ick, +"core_ck" , + &core_ck, +0x0 , +OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL ), +OMAP3430_CLKSEL_L3_SHIFT , +OMAP3430_CLKSEL_L3_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (l4_ick, +"l3_ick" , + &l3_ick, +0x0 , +OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL ), +OMAP3430_CLKSEL_L4_SHIFT , +OMAP3430_CLKSEL_L4_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk security_l4_ick2; + +static const char *security_l4_ick2_parent_names[] = { +"l4_ick" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (security_l4_ick2); +DEFINE_STRUCT_CLK (security_l4_ick2, security_l4_ick2_parent_names, core_ck_ops); + +static struct clk aes1_ick; + +static const char *aes1_ick_parent_names[] = { +"security_l4_ick2" , +}; + +static const struct clk_ops aes1_ick_ops = { + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, +}; + +static struct clk_hw_omap aes1_ick_hw = { + .hw = { + .clk = &aes1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP3430_EN_AES1_SHIFT , +}; + +DEFINE_STRUCT_CLK (aes1_ick, aes1_ick_parent_names, aes1_ick_ops); + +static struct clk core_l4_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (core_l4_ick); +DEFINE_STRUCT_CLK (core_l4_ick, security_l4_ick2_parent_names, core_ck_ops); + +static struct clk aes2_ick; + +static const char *aes2_ick_parent_names[] = { +"core_l4_ick" , +}; + +static const struct clk_ops aes2_ick_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, +}; + +static struct clk_hw_omap aes2_ick_hw = { + .hw = { + .clk = &aes2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_AES2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (aes2_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk dpll1_fck; + +static struct dpll_data dpll1_dd = { + .mult_div1_reg =OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_CLKSEL1_PLL ), + .mult_mask =OMAP3430_MPU_DPLL_MULT_MASK , + .div1_mask =OMAP3430_MPU_DPLL_DIV_MASK , + .clk_bypass = &dpll1_fck, + .clk_ref = &sys_ck, + .freqsel_mask =OMAP3430_MPU_DPLL_FREQSEL_MASK , + .control_reg =OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_CLKEN_PLL ), + .enable_mask =OMAP3430_EN_MPU_DPLL_MASK , + .modes = (1 <<DPLL_LOW_POWER_BYPASS ) | (1 <<DPLL_LOCKED ), + .auto_recal_bit =OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT , + .recal_en_bit =OMAP3430_MPU_DPLL_RECAL_EN_SHIFT , + .recal_st_bit =OMAP3430_MPU_DPLL_ST_SHIFT , + .autoidle_reg =OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_AUTOIDLE_PLL ), + .autoidle_mask =OMAP3430_AUTO_MPU_DPLL_MASK , + .idlest_reg =OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_IDLEST_PLL ), + .idlest_mask =OMAP3430_ST_MPU_CLK_MASK , + .max_multiplier =OMAP3_MAX_DPLL_MULT , + .min_divider =1 , + .max_divider =OMAP3_MAX_DPLL_DIV , +}; + +static struct clk dpll1_ck; + +static const struct clk_ops dpll1_ck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap3_noncore_dpll_enable, + .disable = &omap3_noncore_dpll_disable, + .get_parent = &omap2_init_dpll_parent, + .recalc_rate = &omap3_dpll_recalc, + .set_rate = &omap3_noncore_dpll_set_rate, + .round_rate = &omap2_dpll_round_rate, +}; + +static struct clk_hw_omap dpll1_ck_hw = { + .hw = { + .clk = &dpll1_ck, + }, + .ops = &clkhwops_omap3_dpll, + .dpll_data = &dpll1_dd, + .clkdm_name ="dpll1_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll1_ck, dpll3_ck_parent_names, dpll1_ck_ops); + +DEFINE_CLK_FIXED_FACTOR (dpll1_x2_ck, +"dpll1_ck" , + &dpll1_ck, +0x0 , +2 ,1 ); + +DEFINE_CLK_DIVIDER (dpll1_x2m2_ck, +"dpll1_x2_ck" , + &dpll1_x2_ck, +0x0 , +OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_CLKSEL2_PLL ), +OMAP3430_MPU_DPLL_CLKOUT_DIV_SHIFT , +OMAP3430_MPU_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk mpu_ck; + +static const char *mpu_ck_parent_names[] = { +"dpll1_x2m2_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (mpu_ck); +DEFINE_STRUCT_CLK (mpu_ck, mpu_ck_parent_names, core_ck_ops); + +DEFINE_CLK_DIVIDER (arm_fck, +"mpu_ck" , + &mpu_ck, +0x0 , +OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_IDLEST_PLL ), +OMAP3430_ST_MPU_CLK_SHIFT , +OMAP3430_ST_MPU_CLK_WIDTH , +0x0 , +NULL , +NULL ); + +static struct clk cam_ick; + +static struct clk_hw_omap cam_ick_hw = { + .hw = { + .clk = &cam_ick, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_CAM_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_CAM_SHIFT , + .clkdm_name ="cam_clkdm" , +}; + +DEFINE_STRUCT_CLK (cam_ick, security_l4_ick2_parent_names, aes2_ick_ops); + +/* DPLL4 */ +/* Supplies 96MHz, 54Mhz TV DAC, DSS fclk, CAM sensor clock, emul trace clk */ +/* Type: DPLL */ +static struct dpll_data dpll4_dd; + +static struct dpll_data dpll4_dd_34xx__initdata = { + .mult_div1_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL2 ), + .mult_mask =OMAP3430_PERIPH_DPLL_MULT_MASK , + .div1_mask =OMAP3430_PERIPH_DPLL_DIV_MASK , + .clk_bypass = &sys_ck, + .clk_ref = &sys_ck, + .freqsel_mask =OMAP3430_PERIPH_DPLL_FREQSEL_MASK , + .control_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_mask =OMAP3430_EN_PERIPH_DPLL_MASK , + .modes = (1 <<DPLL_LOW_POWER_STOP ) | (1 <<DPLL_LOCKED ), + .auto_recal_bit =OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT , + .recal_en_bit =OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT , + .recal_st_bit =OMAP3430_PERIPH_DPLL_ST_SHIFT , + .autoidle_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_AUTOIDLE ), + .autoidle_mask =OMAP3430_AUTO_PERIPH_DPLL_MASK , + .idlest_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_IDLEST ), + .idlest_mask =OMAP3430_ST_PERIPH_CLK_MASK , + .max_multiplier =OMAP3_MAX_DPLL_MULT , + .min_divider =1 , + .max_divider =OMAP3_MAX_DPLL_DIV , +}; + +static struct dpll_data dpll4_dd_3630__initdata = { + .mult_div1_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL2 ), + .mult_mask =OMAP3630_PERIPH_DPLL_MULT_MASK , + .div1_mask =OMAP3430_PERIPH_DPLL_DIV_MASK , + .clk_bypass = &sys_ck, + .clk_ref = &sys_ck, + .control_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_mask =OMAP3430_EN_PERIPH_DPLL_MASK , + .modes = (1 <<DPLL_LOW_POWER_STOP ) | (1 <<DPLL_LOCKED ), + .auto_recal_bit =OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT , + .recal_en_bit =OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT , + .recal_st_bit =OMAP3430_PERIPH_DPLL_ST_SHIFT , + .autoidle_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_AUTOIDLE ), + .autoidle_mask =OMAP3430_AUTO_PERIPH_DPLL_MASK , + .idlest_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_IDLEST ), + .idlest_mask =OMAP3430_ST_PERIPH_CLK_MASK , + .dco_mask =OMAP3630_PERIPH_DPLL_DCO_SEL_MASK , + .sddiv_mask =OMAP3630_PERIPH_DPLL_SD_DIV_MASK , + .max_multiplier =OMAP3630_MAX_JTYPE_DPLL_MULT , + .min_divider =1 , + .max_divider =OMAP3_MAX_DPLL_DIV , + .flags =DPLL_J_TYPE +}; + +static struct clk dpll4_ck; + +static const struct clk_ops dpll4_ck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap3_noncore_dpll_enable, + .disable = &omap3_noncore_dpll_disable, + .get_parent = &omap2_init_dpll_parent, + .recalc_rate = &omap3_dpll_recalc, + .set_rate = &omap3_dpll4_set_rate, + .round_rate = &omap2_dpll_round_rate, +}; + +static struct clk_hw_omap dpll4_ck_hw = { + .hw = { + .clk = &dpll4_ck, + }, + .dpll_data = &dpll4_dd, + .ops = &clkhwops_omap3_dpll, + .clkdm_name ="dpll4_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll4_ck, dpll3_ck_parent_names, dpll4_ck_ops); + +DEFINE_CLK_DIVIDER (dpll4_m5_ck, +"dpll4_ck" , + &dpll4_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_CAM_MOD ,CM_CLKSEL ), +OMAP3430_CLKSEL_CAM_SHIFT , +OMAP3630_CLKSEL_CAM_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll4_m5x2_ck; + +static const char *dpll4_m5x2_ck_parent_names[] = { +"dpll4_m5_ck" , +}; + +static const struct clk_ops dpll4_m5x2_ck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap3_clkoutx2_recalc, +}; + +static const struct clk_ops dpll4_m5x2_ck_3630_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap36xx_pwrdn_clk_enable_with_hsdiv_restore, + .disable = &omap2_dflt_clk_disable, + .recalc_rate = &omap3_clkoutx2_recalc, +}; + +static struct clk_hw_omap dpll4_m5x2_ck_hw = { + .hw = { + .clk = &dpll4_m5x2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP3430_PWRDN_CAM_SHIFT , + .flags =INVERT_ENABLE , + .clkdm_name ="dpll4_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names, dpll4_m5x2_ck_ops); + +static struct clk dpll4_m5x2_ck_3630 = { + .name ="dpll4_m5x2_ck" , + .hw = &dpll4_m5x2_ck_hw.hw, + .parent_names = dpll4_m5x2_ck_parent_names, + .num_parents =ARRAY_SIZE (dpll4_m5x2_ck_parent_names), + .ops = &dpll4_m5x2_ck_3630_ops, +}; + +static struct clk cam_mclk; + +static const char *cam_mclk_parent_names[] = { +"dpll4_m5x2_ck" , +}; + +static struct clk_hw_omap cam_mclk_hw = { + .hw = { + .clk = &cam_mclk, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_CAM_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_CAM_SHIFT , + .clkdm_name ="cam_clkdm" , +}; + +DEFINE_STRUCT_CLK (cam_mclk, cam_mclk_parent_names, aes2_ick_ops); + +static const struct clksel_rate clkout2_src_core_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel_rate clkout2_src_sys_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel_rate clkout2_src_96m_rates[] = { + { .div =1 , .val =2 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +DEFINE_CLK_DIVIDER (dpll4_m2_ck, +"dpll4_ck" , + &dpll4_ck, +0x0 , +OMAP_CM_REGADDR (PLL_MOD ,OMAP3430_CM_CLKSEL3 ), +OMAP3430_DIV_96M_SHIFT , +OMAP3630_DIV_96M_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll4_m2x2_ck; + +static const char *dpll4_m2x2_ck_parent_names[] = { +"dpll4_m2_ck" , +}; + +static struct clk_hw_omap dpll4_m2x2_ck_hw = { + .hw = { + .clk = &dpll4_m2x2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP3430_PWRDN_96M_SHIFT , + .flags =INVERT_ENABLE , + .clkdm_name ="dpll4_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll4_m2x2_ck, dpll4_m2x2_ck_parent_names, dpll4_m5x2_ck_ops); + +static struct clk dpll4_m2x2_ck_3630 = { + .name ="dpll4_m2x2_ck" , + .hw = &dpll4_m2x2_ck_hw.hw, + .parent_names = dpll4_m2x2_ck_parent_names, + .num_parents =ARRAY_SIZE (dpll4_m2x2_ck_parent_names), + .ops = &dpll4_m5x2_ck_3630_ops, +}; + +static struct clk omap_96m_alwon_fck; + +static const char *omap_96m_alwon_fck_parent_names[] = { +"dpll4_m2x2_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (omap_96m_alwon_fck); +DEFINE_STRUCT_CLK (omap_96m_alwon_fck, omap_96m_alwon_fck_parent_names, core_ck_ops); + +static struct clk cm_96m_fck; + +static const char *cm_96m_fck_parent_names[] = { +"omap_96m_alwon_fck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (cm_96m_fck); +DEFINE_STRUCT_CLK (cm_96m_fck, cm_96m_fck_parent_names, core_ck_ops); + +static const struct clksel_rate clkout2_src_54m_rates[] = { + { .div =1 , .val =3 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +DEFINE_CLK_DIVIDER (dpll4_m3_ck, +"dpll4_ck" , + &dpll4_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_CLKSEL ), +OMAP3430_CLKSEL_TV_SHIFT , +OMAP3630_CLKSEL_TV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll4_m3x2_ck; + +static const char *dpll4_m3x2_ck_parent_names[] = { +"dpll4_m3_ck" , +}; + +static struct clk_hw_omap dpll4_m3x2_ck_hw = { + .hw = { + .clk = &dpll4_m3x2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP3430_PWRDN_TV_SHIFT , + .flags =INVERT_ENABLE , + .clkdm_name ="dpll4_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll4_m3x2_ck, dpll4_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); + +static struct clk dpll4_m3x2_ck_3630 = { + .name ="dpll4_m3x2_ck" , + .hw = &dpll4_m3x2_ck_hw.hw, + .parent_names = dpll4_m3x2_ck_parent_names, + .num_parents =ARRAY_SIZE (dpll4_m3x2_ck_parent_names), + .ops = &dpll4_m5x2_ck_3630_ops, +}; + +static const char *omap_54m_fck_parent_names[] = { +"dpll4_m3x2_ck" , +"sys_altclk" , +}; + +DEFINE_CLK_MUX (omap_54m_fck, + omap_54m_fck_parent_names,NULL , +0x0 , +OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), +OMAP3430_SOURCE_54M_SHIFT , +OMAP3430_SOURCE_54M_WIDTH , +0x0 , +NULL ); + +static const struct clksel clkout2_src_clksel[] = { + { .parent = &core_ck, .rates = clkout2_src_core_rates }, + { .parent = &sys_ck, .rates = clkout2_src_sys_rates }, + { .parent = &cm_96m_fck, .rates = clkout2_src_96m_rates }, + { .parent = &omap_54m_fck, .rates = clkout2_src_54m_rates }, + { .parent =NULL }, +}; + +static const char *clkout2_src_ck_parent_names[] = { +"core_ck" , +"sys_ck" , +"cm_96m_fck" , +"omap_54m_fck" , +}; + +static struct clk clkout2_src_ck; + +static const struct clk_ops clkout2_src_ck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, +}; + +static struct clk_hw_omap clkout2_src_ck_hw = { + .hw = { + .clk = &clkout2_src_ck, + }, + .clksel = clkout2_src_clksel, + .clksel_reg =OMAP3430_CM_CLKOUT_CTRL , + .clksel_mask =OMAP3430_CLKOUT2SOURCE_MASK , + .enable_reg =OMAP3430_CM_CLKOUT_CTRL , + .enable_bit =OMAP3430_CLKOUT2_EN_SHIFT , + .clkdm_name ="core_clkdm" , +}; + +DEFINE_STRUCT_CLK (clkout2_src_ck, clkout2_src_ck_parent_names, clkout2_src_ck_ops); + +static const struct clksel_rate omap_48m_cm96m_rates[] = { + { .div =2 , .val =0 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel_rate omap_48m_alt_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel omap_48m_clksel[] = { + { .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates }, + { .parent = &sys_altclk, .rates = omap_48m_alt_rates }, + { .parent =NULL }, +}; + +static const char *omap_48m_fck_parent_names[] = { +"cm_96m_fck" , +"sys_altclk" , +}; + +static struct clk omap_48m_fck; + +static const struct clk_ops omap_48m_fck_ops = { + .recalc_rate = &omap2_clksel_recalc, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, +}; + +static struct clk_hw_omap omap_48m_fck_hw = { + .hw = { + .clk = &omap_48m_fck, + }, + .clksel = omap_48m_clksel, + .clksel_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP3430_SOURCE_48M_MASK , +}; + +DEFINE_STRUCT_CLK (omap_48m_fck, omap_48m_fck_parent_names, omap_48m_fck_ops); + +DEFINE_CLK_FIXED_FACTOR (omap_12m_fck, +"omap_48m_fck" , + &omap_48m_fck, +0x0 , +1 ,4 ); + +static struct clk core_12m_fck; + +static const char *core_12m_fck_parent_names[] = { +"omap_12m_fck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (core_12m_fck); +DEFINE_STRUCT_CLK (core_12m_fck, core_12m_fck_parent_names, core_ck_ops); + +static struct clk core_48m_fck; + +static const char *core_48m_fck_parent_names[] = { +"omap_48m_fck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (core_48m_fck); +DEFINE_STRUCT_CLK (core_48m_fck, core_48m_fck_parent_names, core_ck_ops); + +static const char *omap_96m_fck_parent_names[] = { +"cm_96m_fck" , +"sys_ck" , +}; + +DEFINE_CLK_MUX (omap_96m_fck, + omap_96m_fck_parent_names,NULL , +0x0 , +OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), +OMAP3430_SOURCE_96M_SHIFT , +OMAP3430_SOURCE_96M_WIDTH , +0x0 , +NULL ); + +static struct clk core_96m_fck; + +static const char *core_96m_fck_parent_names[] = { +"omap_96m_fck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (core_96m_fck); +DEFINE_STRUCT_CLK (core_96m_fck, core_96m_fck_parent_names, core_ck_ops); + +static struct clk core_l3_ick; + +static const char *core_l3_ick_parent_names[] = { +"l3_ick" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (core_l3_ick); +DEFINE_STRUCT_CLK (core_l3_ick, core_l3_ick_parent_names, core_ck_ops); + +DEFINE_CLK_FIXED_FACTOR (dpll3_m2x2_ck, +"dpll3_m2_ck" , + &dpll3_m2_ck, +0x0 , +2 ,1 ); + +static struct clk corex2_fck; + +static const char *corex2_fck_parent_names[] = { +"dpll3_m2x2_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (corex2_fck); +DEFINE_STRUCT_CLK (corex2_fck, corex2_fck_parent_names, core_ck_ops); + +static struct clk cpefuse_fck; + +static struct clk_hw_omap cpefuse_fck_hw = { + .hw = { + .clk = &cpefuse_fck, + }, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP3430ES2_CM_FCLKEN3 ), + .enable_bit =OMAP3430ES2_EN_CPEFUSE_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (cpefuse_fck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk csi2_96m_fck; + +static const char *csi2_96m_fck_parent_names[] = { +"core_96m_fck" , +}; + +static struct clk_hw_omap csi2_96m_fck_hw = { + .hw = { + .clk = &csi2_96m_fck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_CAM_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_CSI2_SHIFT , + .clkdm_name ="cam_clkdm" , +}; + +DEFINE_STRUCT_CLK (csi2_96m_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk d2d_26m_fck; + +static struct clk_hw_omap d2d_26m_fck_hw = { + .hw = { + .clk = &d2d_26m_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430ES1_EN_D2D_SHIFT , + .clkdm_name ="d2d_clkdm" , +}; + +DEFINE_STRUCT_CLK (d2d_26m_fck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk des1_ick; + +static struct clk_hw_omap des1_ick_hw = { + .hw = { + .clk = &des1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP3430_EN_DES1_SHIFT , +}; + +DEFINE_STRUCT_CLK (des1_ick, aes1_ick_parent_names, aes1_ick_ops); + +static struct clk des2_ick; + +static struct clk_hw_omap des2_ick_hw = { + .hw = { + .clk = &des2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_DES2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (des2_ick, aes2_ick_parent_names, aes2_ick_ops); + +DEFINE_CLK_DIVIDER (dpll1_fck, +"core_ck" , + &core_ck, +0x0 , +OMAP_CM_REGADDR (MPU_MOD ,OMAP3430_CM_CLKSEL1_PLL ), +OMAP3430_MPU_CLK_SRC_SHIFT , +OMAP3430_MPU_CLK_SRC_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll2_fck; + +static struct dpll_data dpll2_dd = { + .mult_div1_reg =OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,OMAP3430_CM_CLKSEL1_PLL ), + .mult_mask =OMAP3430_IVA2_DPLL_MULT_MASK , + .div1_mask =OMAP3430_IVA2_DPLL_DIV_MASK , + .clk_bypass = &dpll2_fck, + .clk_ref = &sys_ck, + .freqsel_mask =OMAP3430_IVA2_DPLL_FREQSEL_MASK , + .control_reg =OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,OMAP3430_CM_CLKEN_PLL ), + .enable_mask =OMAP3430_EN_IVA2_DPLL_MASK , + .modes = (1 <<DPLL_LOW_POWER_STOP ) | (1 <<DPLL_LOCKED ) | (1 <<DPLL_LOW_POWER_BYPASS ), + .auto_recal_bit =OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT , + .recal_en_bit =OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT , + .recal_st_bit =OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT , + .autoidle_reg =OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,OMAP3430_CM_AUTOIDLE_PLL ), + .autoidle_mask =OMAP3430_AUTO_IVA2_DPLL_MASK , + .idlest_reg =OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,OMAP3430_CM_IDLEST_PLL ), + .idlest_mask =OMAP3430_ST_IVA2_CLK_MASK , + .max_multiplier =OMAP3_MAX_DPLL_MULT , + .min_divider =1 , + .max_divider =OMAP3_MAX_DPLL_DIV , +}; + +static struct clk dpll2_ck; + +static struct clk_hw_omap dpll2_ck_hw = { + .hw = { + .clk = &dpll2_ck, + }, + .ops = &clkhwops_omap3_dpll, + .dpll_data = &dpll2_dd, + .clkdm_name ="dpll2_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll2_ck, dpll3_ck_parent_names, dpll1_ck_ops); + +DEFINE_CLK_DIVIDER (dpll2_fck, +"core_ck" , + &core_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,OMAP3430_CM_CLKSEL1_PLL ), +OMAP3430_IVA2_CLK_SRC_SHIFT , +OMAP3430_IVA2_CLK_SRC_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll2_m2_ck, +"dpll2_ck" , + &dpll2_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,OMAP3430_CM_CLKSEL2_PLL ), +OMAP3430_IVA2_DPLL_CLKOUT_DIV_SHIFT , +OMAP3430_IVA2_DPLL_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (dpll3_m3_ck, +"dpll3_ck" , + &dpll3_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_EMU_MOD ,CM_CLKSEL1 ), +OMAP3430_DIV_DPLL3_SHIFT , +OMAP3430_DIV_DPLL3_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll3_m3x2_ck; + +static const char *dpll3_m3x2_ck_parent_names[] = { +"dpll3_m3_ck" , +}; + +static struct clk_hw_omap dpll3_m3x2_ck_hw = { + .hw = { + .clk = &dpll3_m3x2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP3430_PWRDN_EMU_CORE_SHIFT , + .flags =INVERT_ENABLE , + .clkdm_name ="dpll3_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll3_m3x2_ck, dpll3_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); + +static struct clk dpll3_m3x2_ck_3630 = { + .name ="dpll3_m3x2_ck" , + .hw = &dpll3_m3x2_ck_hw.hw, + .parent_names = dpll3_m3x2_ck_parent_names, + .num_parents =ARRAY_SIZE (dpll3_m3x2_ck_parent_names), + .ops = &dpll4_m5x2_ck_3630_ops, +}; + +DEFINE_CLK_FIXED_FACTOR (dpll3_x2_ck, +"dpll3_ck" , + &dpll3_ck, +0x0 , +2 ,1 ); + +DEFINE_CLK_DIVIDER (dpll4_m4_ck, +"dpll4_ck" , + &dpll4_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_CLKSEL ), +OMAP3430_CLKSEL_DSS1_SHIFT , +OMAP3630_CLKSEL_DSS1_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll4_m4x2_ck; + +static const char *dpll4_m4x2_ck_parent_names[] = { +"dpll4_m4_ck" , +}; + +static struct clk_hw_omap dpll4_m4x2_ck_hw = { + .hw = { + .clk = &dpll4_m4x2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP3430_PWRDN_DSS1_SHIFT , + .flags =INVERT_ENABLE , + .clkdm_name ="dpll4_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll4_m4x2_ck, dpll4_m4x2_ck_parent_names, dpll4_m5x2_ck_ops); + +static struct clk dpll4_m4x2_ck_3630 = { + .name ="dpll4_m4x2_ck" , + .hw = &dpll4_m4x2_ck_hw.hw, + .parent_names = dpll4_m4x2_ck_parent_names, + .num_parents =ARRAY_SIZE (dpll4_m4x2_ck_parent_names), + .ops = &dpll4_m5x2_ck_3630_ops, +}; + +DEFINE_CLK_DIVIDER (dpll4_m6_ck, +"dpll4_ck" , + &dpll4_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_EMU_MOD ,CM_CLKSEL1 ), +OMAP3430_DIV_DPLL4_SHIFT , +OMAP3630_DIV_DPLL4_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dpll4_m6x2_ck; + +static const char *dpll4_m6x2_ck_parent_names[] = { +"dpll4_m6_ck" , +}; + +static struct clk_hw_omap dpll4_m6x2_ck_hw = { + .hw = { + .clk = &dpll4_m6x2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP3430_PWRDN_EMU_PERIPH_SHIFT , + .flags =INVERT_ENABLE , + .clkdm_name ="dpll4_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll4_m6x2_ck, dpll4_m6x2_ck_parent_names, dpll4_m5x2_ck_ops); + +static struct clk dpll4_m6x2_ck_3630 = { + .name ="dpll4_m6x2_ck" , + .hw = &dpll4_m6x2_ck_hw.hw, + .parent_names = dpll4_m6x2_ck_parent_names, + .num_parents =ARRAY_SIZE (dpll4_m6x2_ck_parent_names), + .ops = &dpll4_m5x2_ck_3630_ops, +}; + +DEFINE_CLK_FIXED_FACTOR (dpll4_x2_ck, +"dpll4_ck" , + &dpll4_ck, +0x0 , +2 ,1 ); + +static struct dpll_data dpll5_dd = { + .mult_div1_reg =OMAP_CM_REGADDR (PLL_MOD ,OMAP3430ES2_CM_CLKSEL4 ), + .mult_mask =OMAP3430ES2_PERIPH2_DPLL_MULT_MASK , + .div1_mask =OMAP3430ES2_PERIPH2_DPLL_DIV_MASK , + .clk_bypass = &sys_ck, + .clk_ref = &sys_ck, + .freqsel_mask =OMAP3430ES2_PERIPH2_DPLL_FREQSEL_MASK , + .control_reg =OMAP_CM_REGADDR (PLL_MOD ,OMAP3430ES2_CM_CLKEN2 ), + .enable_mask =OMAP3430ES2_EN_PERIPH2_DPLL_MASK , + .modes = (1 <<DPLL_LOW_POWER_STOP ) | (1 <<DPLL_LOCKED ), + .auto_recal_bit =OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT , + .recal_en_bit =OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT , + .recal_st_bit =OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT , + .autoidle_reg =OMAP_CM_REGADDR (PLL_MOD ,OMAP3430ES2_CM_AUTOIDLE2_PLL ), + .autoidle_mask =OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK , + .idlest_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_IDLEST2 ), + .idlest_mask =OMAP3430ES2_ST_PERIPH2_CLK_MASK , + .max_multiplier =OMAP3_MAX_DPLL_MULT , + .min_divider =1 , + .max_divider =OMAP3_MAX_DPLL_DIV , +}; + +static struct clk dpll5_ck; + +static struct clk_hw_omap dpll5_ck_hw = { + .hw = { + .clk = &dpll5_ck, + }, + .ops = &clkhwops_omap3_dpll, + .dpll_data = &dpll5_dd, + .clkdm_name ="dpll5_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll5_ck, dpll3_ck_parent_names, dpll1_ck_ops); + +DEFINE_CLK_DIVIDER (dpll5_m2_ck, +"dpll5_ck" , + &dpll5_ck, +0x0 , +OMAP_CM_REGADDR (PLL_MOD ,OMAP3430ES2_CM_CLKSEL5 ), +OMAP3430ES2_DIV_120M_SHIFT , +OMAP3430ES2_DIV_120M_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk dss1_alwon_fck_3430es1; + +static const char *dss1_alwon_fck_3430es1_parent_names[] = { +"dpll4_m4x2_ck" , +}; + +static struct clk_hw_omap dss1_alwon_fck_3430es1_hw = { + .hw = { + .clk = &dss1_alwon_fck_3430es1, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_DSS1_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss1_alwon_fck_3430es1, dss1_alwon_fck_3430es1_parent_names, aes2_ick_ops); + +static struct clk dss1_alwon_fck_3430es2; + +static struct clk_hw_omap dss1_alwon_fck_3430es2_hw = { + .hw = { + .clk = &dss1_alwon_fck_3430es2, + }, + .ops = &clkhwops_omap3430es2_dss_usbhost_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_DSS1_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss1_alwon_fck_3430es2, dss1_alwon_fck_3430es1_parent_names, aes2_ick_ops); + +static struct clk dss2_alwon_fck; + +static struct clk_hw_omap dss2_alwon_fck_hw = { + .hw = { + .clk = &dss2_alwon_fck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_DSS2_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss2_alwon_fck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk dss_96m_fck; + +static struct clk_hw_omap dss_96m_fck_hw = { + .hw = { + .clk = &dss_96m_fck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_TV_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss_96m_fck, core_96m_fck_parent_names, aes2_ick_ops); + +static struct clk dss_ick_3430es1; + +static struct clk_hw_omap dss_ick_3430es1_hw = { + .hw = { + .clk = &dss_ick_3430es1, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss_ick_3430es1, security_l4_ick2_parent_names, aes2_ick_ops); + +static struct clk dss_ick_3430es2; + +static struct clk_hw_omap dss_ick_3430es2_hw = { + .hw = { + .clk = &dss_ick_3430es2, + }, + .ops = &clkhwops_omap3430es2_iclk_dss_usbhost_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss_ick_3430es2, security_l4_ick2_parent_names, aes2_ick_ops); + +static struct clk dss_tv_fck; + +static const char *dss_tv_fck_parent_names[] = { +"omap_54m_fck" , +}; + +static struct clk_hw_omap dss_tv_fck_hw = { + .hw = { + .clk = &dss_tv_fck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_DSS_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_TV_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss_tv_fck, dss_tv_fck_parent_names, aes2_ick_ops); + +static struct clk emac_fck; + +static const char *emac_fck_parent_names[] = { +"rmii_ck" , +}; + +static struct clk_hw_omap emac_fck_hw = { + .hw = { + .clk = &emac_fck, + }, + .enable_reg =OMAP343X_CTRL_REGADDR (AM35XX_CONTROL_IPSS_CLK_CTRL ), + .enable_bit =AM35XX_CPGMAC_FCLK_SHIFT , +}; + +DEFINE_STRUCT_CLK (emac_fck, emac_fck_parent_names, aes1_ick_ops); + +static struct clk ipss_ick; + +static const char *ipss_ick_parent_names[] = { +"core_l3_ick" , +}; + +static struct clk_hw_omap ipss_ick_hw = { + .hw = { + .clk = &ipss_ick, + }, + .ops = &clkhwops_am35xx_ipss_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =AM35XX_EN_IPSS_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (ipss_ick, ipss_ick_parent_names, aes2_ick_ops); + +static struct clk emac_ick; + +static const char *emac_ick_parent_names[] = { +"ipss_ick" , +}; + +static struct clk_hw_omap emac_ick_hw = { + .hw = { + .clk = &emac_ick, + }, + .ops = &clkhwops_am35xx_ipss_module_wait, + .enable_reg =OMAP343X_CTRL_REGADDR (AM35XX_CONTROL_IPSS_CLK_CTRL ), + .enable_bit =AM35XX_CPGMAC_VBUSP_CLK_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (emac_ick, emac_ick_parent_names, aes2_ick_ops); + +static struct clk emu_core_alwon_ck; + +static const char *emu_core_alwon_ck_parent_names[] = { +"dpll3_m3x2_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (emu_core_alwon_ck); +DEFINE_STRUCT_CLK (emu_core_alwon_ck, emu_core_alwon_ck_parent_names, core_ck_ops); + +static struct clk emu_mpu_alwon_ck; + +static const char *emu_mpu_alwon_ck_parent_names[] = { +"mpu_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (emu_mpu_alwon_ck); +DEFINE_STRUCT_CLK (emu_mpu_alwon_ck, emu_mpu_alwon_ck_parent_names, core_ck_ops); + +static struct clk emu_per_alwon_ck; + +static const char *emu_per_alwon_ck_parent_names[] = { +"dpll4_m6x2_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (emu_per_alwon_ck); +DEFINE_STRUCT_CLK (emu_per_alwon_ck, emu_per_alwon_ck_parent_names, core_ck_ops); + +static const char *emu_src_ck_parent_names[] = { +"sys_ck" , +"emu_core_alwon_ck" , +"emu_per_alwon_ck" , +"emu_mpu_alwon_ck" , +}; + +DEFINE_CLK_MUX (emu_src_ck, + emu_src_ck_parent_names,NULL , +0x0 , +OMAP_CM_REGADDR (OMAP3430_EMU_MOD ,CM_CLKSEL1 ), +OMAP3430_MUX_CTRL_SHIFT , +OMAP3430_MUX_CTRL_WIDTH , +0x0 , +NULL ); + +DEFINE_CLK_DIVIDER (atclk_fck, +"emu_src_ck" , + &emu_src_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_EMU_MOD ,CM_CLKSEL1 ), +OMAP3430_CLKSEL_ATCLK_SHIFT , +OMAP3430_CLKSEL_ATCLK_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk fac_ick; + +static struct clk_hw_omap fac_ick_hw = { + .hw = { + .clk = &fac_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430ES1_EN_FAC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (fac_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk fshostusb_fck; + +static const char *fshostusb_fck_parent_names[] = { +"core_48m_fck" , +}; + +static struct clk_hw_omap fshostusb_fck_hw = { + .hw = { + .clk = &fshostusb_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430ES1_EN_FSHOSTUSB_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (fshostusb_fck, fshostusb_fck_parent_names, aes2_ick_ops); + +static struct clk gfx_l3_ck; + +static struct clk_hw_omap gfx_l3_ck_hw = { + .hw = { + .clk = &gfx_l3_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_ICLKEN ), + .enable_bit =OMAP_EN_GFX_SHIFT , +}; + +DEFINE_STRUCT_CLK (gfx_l3_ck, core_l3_ick_parent_names, aes1_ick_ops); + +DEFINE_CLK_DIVIDER (gfx_l3_fck, +"l3_ick" , + &l3_ick, +0x0 , +OMAP_CM_REGADDR (GFX_MOD ,CM_CLKSEL ), +OMAP_CLKSEL_GFX_SHIFT , +OMAP_CLKSEL_GFX_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk gfx_cg1_ck; + +static const char *gfx_cg1_ck_parent_names[] = { +"gfx_l3_fck" , +}; + +static struct clk_hw_omap gfx_cg1_ck_hw = { + .hw = { + .clk = &gfx_cg1_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430ES1_EN_2D_SHIFT , + .clkdm_name ="gfx_3430es1_clkdm" , +}; + +DEFINE_STRUCT_CLK (gfx_cg1_ck, gfx_cg1_ck_parent_names, aes2_ick_ops); + +static struct clk gfx_cg2_ck; + +static struct clk_hw_omap gfx_cg2_ck_hw = { + .hw = { + .clk = &gfx_cg2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430ES1_EN_3D_SHIFT , + .clkdm_name ="gfx_3430es1_clkdm" , +}; + +DEFINE_STRUCT_CLK (gfx_cg2_ck, gfx_cg1_ck_parent_names, aes2_ick_ops); + +static struct clk gfx_l3_ick; + +static const char *gfx_l3_ick_parent_names[] = { +"gfx_l3_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (gfx_l3_ick); +DEFINE_STRUCT_CLK (gfx_l3_ick, gfx_l3_ick_parent_names, core_ck_ops); + +static struct clk wkup_32k_fck; + +static const char *wkup_32k_fck_parent_names[] = { +"omap_32k_fck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (wkup_32k_fck); +DEFINE_STRUCT_CLK (wkup_32k_fck, wkup_32k_fck_parent_names, core_ck_ops); + +static struct clk gpio1_dbck; + +static const char *gpio1_dbck_parent_names[] = { +"wkup_32k_fck" , +}; + +static struct clk_hw_omap gpio1_dbck_hw = { + .hw = { + .clk = &gpio1_dbck, + }, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPIO1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio1_dbck, gpio1_dbck_parent_names, aes2_ick_ops); + +static struct clk wkup_l4_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (wkup_l4_ick); +DEFINE_STRUCT_CLK (wkup_l4_ick, dpll3_ck_parent_names, core_ck_ops); + +static struct clk gpio1_ick; + +static const char *gpio1_ick_parent_names[] = { +"wkup_l4_ick" , +}; + +static struct clk_hw_omap gpio1_ick_hw = { + .hw = { + .clk = &gpio1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPIO1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio1_ick, gpio1_ick_parent_names, aes2_ick_ops); + +static struct clk per_32k_alwon_fck; + +DEFINE_STRUCT_CLK_HW_OMAP (per_32k_alwon_fck); +DEFINE_STRUCT_CLK (per_32k_alwon_fck, wkup_32k_fck_parent_names, core_ck_ops); + +static struct clk gpio2_dbck; + +static const char *gpio2_dbck_parent_names[] = { +"per_32k_alwon_fck" , +}; + +static struct clk_hw_omap gpio2_dbck_hw = { + .hw = { + .clk = &gpio2_dbck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPIO2_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio2_dbck, gpio2_dbck_parent_names, aes2_ick_ops); + +static struct clk per_l4_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (per_l4_ick); +DEFINE_STRUCT_CLK (per_l4_ick, security_l4_ick2_parent_names, core_ck_ops); + +static struct clk gpio2_ick; + +static const char *gpio2_ick_parent_names[] = { +"per_l4_ick" , +}; + +static struct clk_hw_omap gpio2_ick_hw = { + .hw = { + .clk = &gpio2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPIO2_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio2_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpio3_dbck; + +static struct clk_hw_omap gpio3_dbck_hw = { + .hw = { + .clk = &gpio3_dbck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPIO3_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio3_dbck, gpio2_dbck_parent_names, aes2_ick_ops); + +static struct clk gpio3_ick; + +static struct clk_hw_omap gpio3_ick_hw = { + .hw = { + .clk = &gpio3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPIO3_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio3_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpio4_dbck; + +static struct clk_hw_omap gpio4_dbck_hw = { + .hw = { + .clk = &gpio4_dbck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPIO4_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio4_dbck, gpio2_dbck_parent_names, aes2_ick_ops); + +static struct clk gpio4_ick; + +static struct clk_hw_omap gpio4_ick_hw = { + .hw = { + .clk = &gpio4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPIO4_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio4_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpio5_dbck; + +static struct clk_hw_omap gpio5_dbck_hw = { + .hw = { + .clk = &gpio5_dbck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPIO5_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio5_dbck, gpio2_dbck_parent_names, aes2_ick_ops); + +static struct clk gpio5_ick; + +static struct clk_hw_omap gpio5_ick_hw = { + .hw = { + .clk = &gpio5_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPIO5_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio5_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpio6_dbck; + +static struct clk_hw_omap gpio6_dbck_hw = { + .hw = { + .clk = &gpio6_dbck, + }, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPIO6_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio6_dbck, gpio2_dbck_parent_names, aes2_ick_ops); + +static struct clk gpio6_ick; + +static struct clk_hw_omap gpio6_ick_hw = { + .hw = { + .clk = &gpio6_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPIO6_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpio6_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpmc_fck; + +static struct clk_hw_omap gpmc_fck_hw = { + .hw = { + .clk = &gpmc_fck, + }, + .flags =ENABLE_ON_INIT , +}; + +DEFINE_STRUCT_CLK (gpmc_fck, ipss_ick_parent_names, core_ck_ops); + +static const struct clksel omap343x_gpt_clksel[] = { + { .parent = &omap_32k_fck, .rates = gpt_32k_rates }, + { .parent = &sys_ck, .rates = gpt_sys_rates }, + { .parent =NULL }, +}; + +static const char *gpt10_fck_parent_names[] = { +"omap_32k_fck" , +"sys_ck" , +}; + +static struct clk gpt10_fck; + +static struct clk_hw_omap gpt10_fck_hw = { + .hw = { + .clk = &gpt10_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT10_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_GPT10_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt10_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt10_ick; + +static struct clk_hw_omap gpt10_ick_hw = { + .hw = { + .clk = &gpt10_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_GPT10_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt10_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt11_fck; + +static struct clk_hw_omap gpt11_fck_hw = { + .hw = { + .clk = &gpt11_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT11_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_GPT11_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt11_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt11_ick; + +static struct clk_hw_omap gpt11_ick_hw = { + .hw = { + .clk = &gpt11_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_GPT11_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt11_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt12_fck; + +static const char *gpt12_fck_parent_names[] = { +"secure_32k_fck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (gpt12_fck); +DEFINE_STRUCT_CLK (gpt12_fck, gpt12_fck_parent_names, core_ck_ops); + +static struct clk gpt12_ick; + +static struct clk_hw_omap gpt12_ick_hw = { + .hw = { + .clk = &gpt12_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT12_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt12_ick, gpio1_ick_parent_names, aes2_ick_ops); + +static struct clk gpt1_fck; + +static struct clk_hw_omap gpt1_fck_hw = { + .hw = { + .clk = &gpt1_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT1_MASK , + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt1_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt1_ick; + +static struct clk_hw_omap gpt1_ick_hw = { + .hw = { + .clk = &gpt1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt1_ick, gpio1_ick_parent_names, aes2_ick_ops); + +static struct clk gpt2_fck; + +static struct clk_hw_omap gpt2_fck_hw = { + .hw = { + .clk = &gpt2_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT2_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT2_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt2_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt2_ick; + +static struct clk_hw_omap gpt2_ick_hw = { + .hw = { + .clk = &gpt2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT2_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt2_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt3_fck; + +static struct clk_hw_omap gpt3_fck_hw = { + .hw = { + .clk = &gpt3_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT3_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT3_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt3_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt3_ick; + +static struct clk_hw_omap gpt3_ick_hw = { + .hw = { + .clk = &gpt3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT3_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt3_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt4_fck; + +static struct clk_hw_omap gpt4_fck_hw = { + .hw = { + .clk = &gpt4_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT4_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT4_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt4_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt4_ick; + +static struct clk_hw_omap gpt4_ick_hw = { + .hw = { + .clk = &gpt4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT4_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt4_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt5_fck; + +static struct clk_hw_omap gpt5_fck_hw = { + .hw = { + .clk = &gpt5_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT5_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT5_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt5_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt5_ick; + +static struct clk_hw_omap gpt5_ick_hw = { + .hw = { + .clk = &gpt5_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT5_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt5_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt6_fck; + +static struct clk_hw_omap gpt6_fck_hw = { + .hw = { + .clk = &gpt6_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT6_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT6_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt6_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt6_ick; + +static struct clk_hw_omap gpt6_ick_hw = { + .hw = { + .clk = &gpt6_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT6_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt6_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt7_fck; + +static struct clk_hw_omap gpt7_fck_hw = { + .hw = { + .clk = &gpt7_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT7_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT7_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt7_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt7_ick; + +static struct clk_hw_omap gpt7_ick_hw = { + .hw = { + .clk = &gpt7_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT7_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt7_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt8_fck; + +static struct clk_hw_omap gpt8_fck_hw = { + .hw = { + .clk = &gpt8_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT8_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT8_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt8_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt8_ick; + +static struct clk_hw_omap gpt8_ick_hw = { + .hw = { + .clk = &gpt8_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT8_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt8_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk gpt9_fck; + +static struct clk_hw_omap gpt9_fck_hw = { + .hw = { + .clk = &gpt9_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap343x_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430_CLKSEL_GPT9_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_GPT9_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt9_fck, gpt10_fck_parent_names, clkout2_src_ck_ops); + +static struct clk gpt9_ick; + +static struct clk_hw_omap gpt9_ick_hw = { + .hw = { + .clk = &gpt9_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_GPT9_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt9_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk hdq_fck; + +static const char *hdq_fck_parent_names[] = { +"core_12m_fck" , +}; + +static struct clk_hw_omap hdq_fck_hw = { + .hw = { + .clk = &hdq_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_HDQ_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (hdq_fck, hdq_fck_parent_names, aes2_ick_ops); + +static struct clk hdq_ick; + +static struct clk_hw_omap hdq_ick_hw = { + .hw = { + .clk = &hdq_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_HDQ_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (hdq_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk hecc_ck; + +static struct clk_hw_omap hecc_ck_hw = { + .hw = { + .clk = &hecc_ck, + }, + .ops = &clkhwops_am35xx_ipss_module_wait, + .enable_reg =OMAP343X_CTRL_REGADDR (AM35XX_CONTROL_IPSS_CLK_CTRL ), + .enable_bit =AM35XX_HECC_VBUSP_CLK_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (hecc_ck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk hsotgusb_fck_am35xx; + +static struct clk_hw_omap hsotgusb_fck_am35xx_hw = { + .hw = { + .clk = &hsotgusb_fck_am35xx, + }, + .enable_reg =OMAP343X_CTRL_REGADDR (AM35XX_CONTROL_IPSS_CLK_CTRL ), + .enable_bit =AM35XX_USBOTG_FCLK_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (hsotgusb_fck_am35xx, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk hsotgusb_ick_3430es1; + +static struct clk_hw_omap hsotgusb_ick_3430es1_hw = { + .hw = { + .clk = &hsotgusb_ick_3430es1, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_HSOTGUSB_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (hsotgusb_ick_3430es1, ipss_ick_parent_names, aes2_ick_ops); + +static struct clk hsotgusb_ick_3430es2; + +static struct clk_hw_omap hsotgusb_ick_3430es2_hw = { + .hw = { + .clk = &hsotgusb_ick_3430es2, + }, + .ops = &clkhwops_omap3430es2_iclk_hsotgusb_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_HSOTGUSB_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (hsotgusb_ick_3430es2, ipss_ick_parent_names, aes2_ick_ops); + +static struct clk hsotgusb_ick_am35xx; + +static struct clk_hw_omap hsotgusb_ick_am35xx_hw = { + .hw = { + .clk = &hsotgusb_ick_am35xx, + }, + .ops = &clkhwops_am35xx_ipss_module_wait, + .enable_reg =OMAP343X_CTRL_REGADDR (AM35XX_CONTROL_IPSS_CLK_CTRL ), + .enable_bit =AM35XX_USBOTG_VBUSP_CLK_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (hsotgusb_ick_am35xx, emac_ick_parent_names, aes2_ick_ops); + +static struct clk i2c1_fck; + +static struct clk_hw_omap i2c1_fck_hw = { + .hw = { + .clk = &i2c1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_I2C1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c1_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk i2c1_ick; + +static struct clk_hw_omap i2c1_ick_hw = { + .hw = { + .clk = &i2c1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_I2C1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c1_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk i2c2_fck; + +static struct clk_hw_omap i2c2_fck_hw = { + .hw = { + .clk = &i2c2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_I2C2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c2_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk i2c2_ick; + +static struct clk_hw_omap i2c2_ick_hw = { + .hw = { + .clk = &i2c2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_I2C2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c2_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk i2c3_fck; + +static struct clk_hw_omap i2c3_fck_hw = { + .hw = { + .clk = &i2c3_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_I2C3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c3_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk i2c3_ick; + +static struct clk_hw_omap i2c3_ick_hw = { + .hw = { + .clk = &i2c3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_I2C3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c3_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk icr_ick; + +static struct clk_hw_omap icr_ick_hw = { + .hw = { + .clk = &icr_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_ICR_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (icr_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk iva2_ck; + +static const char *iva2_ck_parent_names[] = { +"dpll2_m2_ck" , +}; + +static struct clk_hw_omap iva2_ck_hw = { + .hw = { + .clk = &iva2_ck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_IVA2_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT , + .clkdm_name ="iva2_clkdm" , +}; + +DEFINE_STRUCT_CLK (iva2_ck, iva2_ck_parent_names, aes2_ick_ops); + +static struct clk mad2d_ick; + +static struct clk_hw_omap mad2d_ick_hw = { + .hw = { + .clk = &mad2d_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN3 ), + .enable_bit =OMAP3430_EN_MAD2D_SHIFT , + .clkdm_name ="d2d_clkdm" , +}; + +DEFINE_STRUCT_CLK (mad2d_ick, core_l3_ick_parent_names, aes2_ick_ops); + +static struct clk mailboxes_ick; + +static struct clk_hw_omap mailboxes_ick_hw = { + .hw = { + .clk = &mailboxes_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MAILBOXES_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mailboxes_ick, aes2_ick_parent_names, aes2_ick_ops); + +static const struct clksel_rate common_mcbsp_96m_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel_rate common_mcbsp_mcbsp_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel mcbsp_15_clksel[] = { + { .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates }, + { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp1_fck_parent_names[] = { +"core_96m_fck" , +"mcbsp_clks" , +}; + +static struct clk mcbsp1_fck; + +static struct clk_hw_omap mcbsp1_fck_hw = { + .hw = { + .clk = &mcbsp1_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_15_clksel, + .clksel_reg =OMAP343X_CTRL_REGADDR (OMAP2_CONTROL_DEVCONF0 ), + .clksel_mask =OMAP2_MCBSP1_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MCBSP1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp1_fck, mcbsp1_fck_parent_names, clkout2_src_ck_ops); + +static struct clk mcbsp1_ick; + +static struct clk_hw_omap mcbsp1_ick_hw = { + .hw = { + .clk = &mcbsp1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MCBSP1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp1_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk per_96m_fck; + +DEFINE_STRUCT_CLK_HW_OMAP (per_96m_fck); +DEFINE_STRUCT_CLK (per_96m_fck, cm_96m_fck_parent_names, core_ck_ops); + +static const struct clksel mcbsp_234_clksel[] = { + { .parent = &per_96m_fck, .rates = common_mcbsp_96m_rates }, + { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp2_fck_parent_names[] = { +"per_96m_fck" , +"mcbsp_clks" , +}; + +static struct clk mcbsp2_fck; + +static struct clk_hw_omap mcbsp2_fck_hw = { + .hw = { + .clk = &mcbsp2_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_234_clksel, + .clksel_reg =OMAP343X_CTRL_REGADDR (OMAP2_CONTROL_DEVCONF0 ), + .clksel_mask =OMAP2_MCBSP2_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_MCBSP2_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp2_fck, mcbsp2_fck_parent_names, clkout2_src_ck_ops); + +static struct clk mcbsp2_ick; + +static struct clk_hw_omap mcbsp2_ick_hw = { + .hw = { + .clk = &mcbsp2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_MCBSP2_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp2_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk mcbsp3_fck; + +static struct clk_hw_omap mcbsp3_fck_hw = { + .hw = { + .clk = &mcbsp3_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_234_clksel, + .clksel_reg =OMAP343X_CTRL_REGADDR (OMAP343X_CONTROL_DEVCONF1 ), + .clksel_mask =OMAP2_MCBSP3_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_MCBSP3_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp3_fck, mcbsp2_fck_parent_names, clkout2_src_ck_ops); + +static struct clk mcbsp3_ick; + +static struct clk_hw_omap mcbsp3_ick_hw = { + .hw = { + .clk = &mcbsp3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_MCBSP3_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp3_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk mcbsp4_fck; + +static struct clk_hw_omap mcbsp4_fck_hw = { + .hw = { + .clk = &mcbsp4_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_234_clksel, + .clksel_reg =OMAP343X_CTRL_REGADDR (OMAP343X_CONTROL_DEVCONF1 ), + .clksel_mask =OMAP2_MCBSP4_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_MCBSP4_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp4_fck, mcbsp2_fck_parent_names, clkout2_src_ck_ops); + +static struct clk mcbsp4_ick; + +static struct clk_hw_omap mcbsp4_ick_hw = { + .hw = { + .clk = &mcbsp4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430_PER_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_MCBSP4_SHIFT , + .clkdm_name ="per_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp4_ick, gpio2_ick_parent_names, aes2_ick_ops); + +static struct clk mcbsp5_fck; + +static struct clk_hw_omap mcbsp5_fck_hw = { + .hw = { + .clk = &mcbsp5_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_15_clksel, + .clksel_reg =OMAP343X_CTRL_REGADDR (OMAP343X_CONTROL_DEVCONF1 ), + .clksel_mask =OMAP2_MCBSP5_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MCBSP5_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp5_fck, mcbsp1_fck_parent_names, clkout2_src_ck_ops); + +static struct clk mcbsp5_ick; + +static struct clk_hw_omap mcbsp5_ick_hw = { + .hw = { + .clk = &mcbsp5_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MCBSP5_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp5_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mcspi1_fck; + +static struct clk_hw_omap mcspi1_fck_hw = { + .hw = { + .clk = &mcspi1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi1_fck, fshostusb_fck_parent_names, aes2_ick_ops); + +static struct clk mcspi1_ick; + +static struct clk_hw_omap mcspi1_ick_hw = { + .hw = { + .clk = &mcspi1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi1_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mcspi2_fck; + +static struct clk_hw_omap mcspi2_fck_hw = { + .hw = { + .clk = &mcspi2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi2_fck, fshostusb_fck_parent_names, aes2_ick_ops); + +static struct clk mcspi2_ick; + +static struct clk_hw_omap mcspi2_ick_hw = { + .hw = { + .clk = &mcspi2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi2_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mcspi3_fck; + +static struct clk_hw_omap mcspi3_fck_hw = { + .hw = { + .clk = &mcspi3_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi3_fck, fshostusb_fck_parent_names, aes2_ick_ops); + +static struct clk mcspi3_ick; + +static struct clk_hw_omap mcspi3_ick_hw = { + .hw = { + .clk = &mcspi3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi3_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mcspi4_fck; + +static struct clk_hw_omap mcspi4_fck_hw = { + .hw = { + .clk = &mcspi4_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI4_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi4_fck, fshostusb_fck_parent_names, aes2_ick_ops); + +static struct clk mcspi4_ick; + +static struct clk_hw_omap mcspi4_ick_hw = { + .hw = { + .clk = &mcspi4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MCSPI4_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi4_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mmchs1_fck; + +static struct clk_hw_omap mmchs1_fck_hw = { + .hw = { + .clk = &mmchs1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MMC1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmchs1_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk mmchs1_ick; + +static struct clk_hw_omap mmchs1_ick_hw = { + .hw = { + .clk = &mmchs1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MMC1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmchs1_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mmchs2_fck; + +static struct clk_hw_omap mmchs2_fck_hw = { + .hw = { + .clk = &mmchs2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MMC2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmchs2_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk mmchs2_ick; + +static struct clk_hw_omap mmchs2_ick_hw = { + .hw = { + .clk = &mmchs2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MMC2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmchs2_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk mmchs3_fck; + +static struct clk_hw_omap mmchs3_fck_hw = { + .hw = { + .clk = &mmchs3_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430ES2_EN_MMC3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmchs3_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk mmchs3_ick; + +static struct clk_hw_omap mmchs3_ick_hw = { + .hw = { + .clk = &mmchs3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430ES2_EN_MMC3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmchs3_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk modem_fck; + +static struct clk_hw_omap modem_fck_hw = { + .hw = { + .clk = &modem_fck, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MODEM_SHIFT , + .clkdm_name ="d2d_clkdm" , +}; + +DEFINE_STRUCT_CLK (modem_fck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk mspro_fck; + +static struct clk_hw_omap mspro_fck_hw = { + .hw = { + .clk = &mspro_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP3430_EN_MSPRO_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mspro_fck, csi2_96m_fck_parent_names, aes2_ick_ops); + +static struct clk mspro_ick; + +static struct clk_hw_omap mspro_ick_hw = { + .hw = { + .clk = &mspro_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_MSPRO_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mspro_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk omap_192m_alwon_fck; + +DEFINE_STRUCT_CLK_HW_OMAP (omap_192m_alwon_fck); +DEFINE_STRUCT_CLK (omap_192m_alwon_fck, omap_96m_alwon_fck_parent_names, core_ck_ops); + +static struct clk omap_32ksync_ick; + +static struct clk_hw_omap omap_32ksync_ick_hw = { + .hw = { + .clk = &omap_32ksync_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430_EN_32KSYNC_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (omap_32ksync_ick, gpio1_ick_parent_names, aes2_ick_ops); + +static const struct clksel_rate omap_96m_alwon_fck_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_36XX }, + { .div =2 , .val =2 , .flags =RATE_IN_36XX }, + { .div =0 } +}; + +static const struct clksel omap_96m_alwon_fck_clksel[] = { + { .parent = &omap_192m_alwon_fck, .rates = omap_96m_alwon_fck_rates }, + { .parent =NULL } +}; + +static struct clk omap_96m_alwon_fck_3630; + +static const char *omap_96m_alwon_fck_3630_parent_names[] = { +"omap_192m_alwon_fck" , +}; + +static const struct clk_ops omap_96m_alwon_fck_3630_ops = { + .set_rate = &omap2_clksel_set_rate, + .recalc_rate = &omap2_clksel_recalc, + .round_rate = &omap2_clksel_round_rate, +}; + +static struct clk_hw_omap omap_96m_alwon_fck_3630_hw = { + .hw = { + .clk = &omap_96m_alwon_fck_3630, + }, + .clksel = omap_96m_alwon_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3630_CLKSEL_96M_MASK , +}; + +static struct clk omap_96m_alwon_fck_3630 = { + .name ="omap_96m_alwon_fck" , + .hw = &omap_96m_alwon_fck_3630_hw.hw, + .parent_names = omap_96m_alwon_fck_3630_parent_names, + .num_parents =ARRAY_SIZE (omap_96m_alwon_fck_3630_parent_names), + .ops = &omap_96m_alwon_fck_3630_ops, +}; + +static struct clk omapctrl_ick; + +static struct clk_hw_omap omapctrl_ick_hw = { + .hw = { + .clk = &omapctrl_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_OMAPCTRL_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (omapctrl_ick, aes2_ick_parent_names, aes2_ick_ops); + +DEFINE_CLK_DIVIDER (pclk_fck, +"emu_src_ck" , + &emu_src_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_EMU_MOD ,CM_CLKSEL1 ), +OMAP3430_CLKSEL_PCLK_SHIFT , +OMAP3430_CLKSEL_PCLK_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (pclkx2_fck, +"emu_src_ck" , + &emu_src_ck, +0x0 , +OMAP_CM_REGADDR (OMAP3430_EMU_MOD ,CM_CLKSEL1 ), +OMAP3430_CLKSEL_PCLKX2_SHIFT , +OMAP3430_CLKSEL_PCLKX2_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk per_48m_fck; + +DEFINE_STRUCT_CLK_HW_OMAP (per_48m_fck); +DEFINE_STRUCT_CLK (per_48m_fck, core_48m_fck_parent_names, core_ck_ops); + +static struct clk security_l3_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (security_l3_ick); +DEFINE_STRUCT_CLK (security_l3_ick, core_l3_ick_parent_names, core_ck_ops); + +static struct clk pka_ick; + +static const char *pka_ick_parent_names[] = { +"security_l3_ick" , +}; + +static struct clk_hw_omap pka_ick_hw = { + .hw = { + .clk = &pka_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP3430_EN_PKA_SHIFT , +}; + +DEFINE_STRUCT_CLK (pka_ick, pka_ick_parent_names, aes1_ick_ops); + +DEFINE_CLK_DIVIDER (rm_ick, +"l4_ick" , + &l4_ick, +0x0 , +OMAP_CM_REGADDR (WKUP_MOD ,CM_CLKSEL ), +OMAP3430_CLKSEL_RM_SHIFT , +OMAP3430_CLKSEL_RM_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk rng_ick; + +static struct clk_hw_omap rng_ick_hw = { + .hw = { + .clk = &rng_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP3430_EN_RNG_SHIFT , +}; + +DEFINE_STRUCT_CLK (rng_ick, aes1_ick_parent_names, aes1_ick_ops); + +static struct clk sad2d_ick; + +static struct clk_hw_omap sad2d_ick_hw = { + .hw = { + .clk = &sad2d_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_SAD2D_SHIFT , + .clkdm_name ="d2d_clkdm" , +}; + +DEFINE_STRUCT_CLK (sad2d_ick, core_l3_ick_parent_names, aes2_ick_ops); + +static struct clk sdrc_ick; + +static struct clk_hw_omap sdrc_ick_hw = { + .hw = { + .clk = &sdrc_ick, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_SDRC_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (sdrc_ick, ipss_ick_parent_names, aes2_ick_ops); + +static const struct clksel_rate sgx_core_rates[] = { + { .div =2 , .val =5 , .flags =RATE_IN_36XX }, + { .div =3 , .val =0 , .flags =RATE_IN_3XXX }, + { .div =4 , .val =1 , .flags =RATE_IN_3XXX }, + { .div =6 , .val =2 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel_rate sgx_96m_rates[] = { + { .div =1 , .val =3 , .flags =RATE_IN_3XXX }, + { .div =0 } +}; + +static const struct clksel_rate sgx_192m_rates[] = { + { .div =1 , .val =4 , .flags =RATE_IN_36XX }, + { .div =0 } +}; + +static const struct clksel_rate sgx_corex2_rates[] = { + { .div =3 , .val =6 , .flags =RATE_IN_36XX }, + { .div =5 , .val =7 , .flags =RATE_IN_36XX }, + { .div =0 } +}; + +static const struct clksel sgx_clksel[] = { + { .parent = &core_ck, .rates = sgx_core_rates }, + { .parent = &cm_96m_fck, .rates = sgx_96m_rates }, + { .parent = &omap_192m_alwon_fck, .rates = sgx_192m_rates }, + { .parent = &corex2_fck, .rates = sgx_corex2_rates }, + { .parent =NULL }, +}; + +static const char *sgx_fck_parent_names[] = { +"core_ck" , +"cm_96m_fck" , +"omap_192m_alwon_fck" , +"corex2_fck" , +}; + +static struct clk sgx_fck; + +static const struct clk_ops sgx_fck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .set_rate = &omap2_clksel_set_rate, + .round_rate = &omap2_clksel_round_rate, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, +}; + +static struct clk_hw_omap sgx_fck_hw = { + .hw = { + .clk = &sgx_fck, + }, + .ops = &clkhwops_wait, + .clksel = sgx_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP3430ES2_SGX_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP3430ES2_CLKSEL_SGX_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP3430ES2_SGX_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430ES2_CM_FCLKEN_SGX_EN_SGX_SHIFT , + .clkdm_name ="sgx_clkdm" , +}; + +DEFINE_STRUCT_CLK (sgx_fck, sgx_fck_parent_names, sgx_fck_ops); + +static struct clk sgx_ick; + +static struct clk_hw_omap sgx_ick_hw = { + .hw = { + .clk = &sgx_ick, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP3430ES2_SGX_MOD ,CM_ICLKEN ), + .enable_bit =OMAP3430ES2_CM_ICLKEN_SGX_EN_SGX_SHIFT , + .clkdm_name ="sgx_clkdm" , +}; + +DEFINE_STRUCT_CLK (sgx_ick, core_l3_ick_parent_names, aes2_ick_ops); + +static struct clk sha11_ick; + +static struct clk_hw_omap sha11_ick_hw = { + .hw = { + .clk = &sha11_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP3430_EN_SHA11_SHIFT , +}; + +DEFINE_STRUCT_CLK (sha11_ick, aes1_ick_parent_names, aes1_ick_ops); + +static struct clk sha12_ick; + +static struct clk_hw_omap sha12_ick_hw = { + .hw = { + .clk = &sha12_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_SHA12_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (sha12_ick, aes2_ick_parent_names, aes2_ick_ops); + +static struct clk sr1_fck; + +static struct clk_hw_omap sr1_fck_hw = { + .hw = { + .clk = &sr1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_SR1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (sr1_fck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk sr2_fck; + +static struct clk_hw_omap sr2_fck_hw = { + .hw = { + .clk = &sr2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP3430_EN_SR2_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (sr2_fck, dpll3_ck_parent_names, aes2_ick_ops); + +static struct clk sr_l4_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (sr_l4_ick); +DEFINE_STRUCT_CLK (sr_l4_ick, security_l4_ick2_parent_names, core_ck_ops); + +static struct clk ssi_l4_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (ssi_l4_ick); +DEFINE_STRUCT_CLK (ssi_l4_ick, security_l4_ick2_parent_names, core_ck_ops); + +static struct clk ssi_ick_3430es1; + +static const char *ssi_ick_3430es1_parent_names[] = { +"ssi_l4_ick" , +}; + +static struct clk_hw_omap ssi_ick_3430es1_hw = { + .hw = { + .clk = &ssi_ick_3430es1, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP3430_EN_SSI_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; +
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.7.1
Part of the diff is not shown here. View the raw message.
PATCH 20/29 ARM: omap2: clk: Add 24xx data using common struct clk
In reply to Rajendra NayakThe patch is the output from a python script which converts from the old OMAP clk format to COMMON clk format using a JSON parser in between which was developed by Paul Walmsley.
--- arch/arm/mach-omap2/cclock2420_data.c | 2306 ++++++++++++++++++++++++++++++ arch/arm/mach-omap2/cclock2430_data.c | 2434 ++++++++++++++++++++++++++++++++ arch/arm/mach-omap2/cm-regbits-24xx.h | 5 + arch/arm/mach-omap2/prm-regbits-24xx.h | 2 + 4 files changed, 4747 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/cclock2420_data.c create mode 100644 arch/arm/mach-omap2/cclock2430_data.c
arch/arm/mach-omap2/cclock2420_data.c new file +2306 -0
@@ -0,0 +1,2306 @@ +/* +* OMAP2420 clock data +* +* Copyright (C) 2005-2012 Texas Instruments, Inc. +* Copyright (C) 2004-2011 Nokia Corporation +* +* Contacts: +* Richard Woodruff <[email protected]> +* Paul Walmsley +* Updated to COMMON clk format by Rajendra Nayak <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/io.h> +#include <linux/clk.h> +#include <linux/clk-private.h> +#include <linux/list.h> + +#include <plat/hardware.h> +#include <plat/clkdev_omap.h> + +#include "iomap.h" +#include "clock.h" +#include "clock2xxx.h" +#include "opp2xxx.h" +#include "cm2xxx_3xxx.h" +#include "prm2xxx_3xxx.h" +#include "prm-regbits-24xx.h" +#include "cm-regbits-24xx.h" +#include "sdrc.h" +#include "control.h" + +#define OMAP_CM_REGADDR OMAP2420_CM_REGADDR + +/* +* 2420 clock tree. +* +* NOTE:In many cases here we are assigning a 'default' parent. In +* many cases the parent is selectable. The set parent calls will +* also switch sources. +* +* Several sources are given initial rates which may be wrong, this will +* be fixed up in the init func. +* +* Things are broadly separated below by clock domains. It is +* noteworthy that most peripherals have dependencies on multiple clock +* domains. Many get their interface clocks from the L4 domain, but get +* functional clocks from fixed sources or other core domain derived +* clocks. +*/ + +DEFINE_CLK_FIXED_RATE (alt_ck,CLK_IS_ROOT ,54000000 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (func_32k_ck,CLK_IS_ROOT ,32768 ,0x0 ); + +DEFINE_CLK_FIXED_RATE (mcbsp_clks,CLK_IS_ROOT ,0x0 ,0x0 ); + +static struct clk osc_ck; + +static const struct clk_ops osc_ck_ops = { + .recalc_rate = &omap2_osc_clk_recalc, +}; + +static struct clk_hw_omap osc_ck_hw = { + .hw = { + .clk = &osc_ck, + }, +}; + +static struct clk osc_ck = { + .name ="osc_ck" , + .ops = &osc_ck_ops, + .hw = &osc_ck_hw.hw, + .flags =CLK_IS_ROOT , +}; + +DEFINE_CLK_FIXED_RATE (secure_32k_ck,CLK_IS_ROOT ,32768 ,0x0 ); + +static struct clk sys_ck; + +static const char *sys_ck_parent_names[] = { +"osc_ck" , +}; + +static const struct clk_ops sys_ck_ops = { + .recalc_rate = &omap2xxx_sys_clk_recalc, +}; + +DEFINE_STRUCT_CLK_HW_OMAP (sys_ck); +DEFINE_STRUCT_CLK (sys_ck, sys_ck_parent_names, sys_ck_ops); + +static struct dpll_data dpll_dd = { + .mult_div1_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), + .mult_mask =OMAP24XX_DPLL_MULT_MASK , + .div1_mask =OMAP24XX_DPLL_DIV_MASK , + .clk_bypass = &sys_ck, + .clk_ref = &sys_ck, + .control_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_mask =OMAP24XX_EN_DPLL_MASK , + .max_multiplier =1023 , + .min_divider =1 , + .max_divider =16 , +}; + +static struct clk dpll_ck; + +static const char *dpll_ck_parent_names[] = { +"sys_ck" , +}; + +static const struct clk_ops dpll_ck_ops = { + .init = &omap2_init_clk_clkdm, + .get_parent = &omap2_init_dpll_parent, + .recalc_rate = &omap2_dpllcore_recalc, + .round_rate = &omap2_dpll_round_rate, + .set_rate = &omap2_reprogram_dpllcore, +}; + +static struct clk_hw_omap dpll_ck_hw = { + .hw = { + .clk = &dpll_ck, + }, + .ops = &clkhwops_omap2xxx_dpll, + .dpll_data = &dpll_dd, + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (dpll_ck, dpll_ck_parent_names, dpll_ck_ops); + +static struct clk core_ck; + +static const char *core_ck_parent_names[] = { +"dpll_ck" , +}; + +static const struct clk_ops core_ck_ops = { +}; + +DEFINE_STRUCT_CLK_HW_OMAP (core_ck); +DEFINE_STRUCT_CLK (core_ck, core_ck_parent_names, core_ck_ops); + +DEFINE_CLK_DIVIDER (core_l3_ck, +"core_ck" , + &core_ck, +0x0 , +OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), +OMAP24XX_CLKSEL_L3_SHIFT , +OMAP24XX_CLKSEL_L3_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +DEFINE_CLK_DIVIDER (l4_ck, +"core_l3_ck" , + &core_l3_ck, +0x0 , +OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), +OMAP24XX_CLKSEL_L4_SHIFT , +OMAP24XX_CLKSEL_L4_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk aes_ick; + +static const char *aes_ick_parent_names[] = { +"l4_ck" , +}; + +static const struct clk_ops aes_ick_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, +}; + +static struct clk_hw_omap aes_ick_hw = { + .hw = { + .clk = &aes_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_ICLKEN4 ), + .enable_bit =OMAP24XX_EN_AES_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (aes_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk apll54_ck; + +static const struct clk_ops apll54_ck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_clk_apll54_enable, + .disable = &omap2_clk_apll_disable, +}; + +static struct clk_hw_omap apll54_ck_hw = { + .hw = { + .clk = &apll54_ck, + }, + .ops = &clkhwops_apll54, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP24XX_EN_54M_PLL_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (apll54_ck, dpll_ck_parent_names, apll54_ck_ops); + +static struct clk apll96_ck; + +static const struct clk_ops apll96_ck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_clk_apll96_enable, + .disable = &omap2_clk_apll_disable, +}; + +static struct clk_hw_omap apll96_ck_hw = { + .hw = { + .clk = &apll96_ck, + }, + .ops = &clkhwops_apll96, + .enable_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKEN ), + .enable_bit =OMAP24XX_EN_96M_PLL_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (apll96_ck, dpll_ck_parent_names, apll96_ck_ops); + +static struct clk func_96m_ck; + +static const char *func_96m_ck_parent_names[] = { +"apll96_ck" , +}; + +DEFINE_STRUCT_CLK_HW_OMAP (func_96m_ck); +DEFINE_STRUCT_CLK (func_96m_ck, func_96m_ck_parent_names, core_ck_ops); + +static struct clk cam_fck; + +static const char *cam_fck_parent_names[] = { +"func_96m_ck" , +}; + +static struct clk_hw_omap cam_fck_hw = { + .hw = { + .clk = &cam_fck, + }, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_CAM_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (cam_fck, cam_fck_parent_names, aes_ick_ops); + +static struct clk cam_ick; + +static struct clk_hw_omap cam_ick_hw = { + .hw = { + .clk = &cam_ick, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_CAM_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (cam_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk des_ick; + +static struct clk_hw_omap des_ick_hw = { + .hw = { + .clk = &des_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_ICLKEN4 ), + .enable_bit =OMAP24XX_EN_DES_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (des_ick, aes_ick_parent_names, aes_ick_ops); + +static const struct clksel_rate dsp_fck_core_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =2 , .val =2 , .flags =RATE_IN_24XX }, + { .div =3 , .val =3 , .flags =RATE_IN_24XX }, + { .div =4 , .val =4 , .flags =RATE_IN_24XX }, + { .div =6 , .val =6 , .flags =RATE_IN_242X }, + { .div =8 , .val =8 , .flags =RATE_IN_242X }, + { .div =12 , .val =12 , .flags =RATE_IN_242X }, + { .div =0 } +}; + +static const struct clksel dsp_fck_clksel[] = { + { .parent = &core_ck, .rates = dsp_fck_core_rates }, + { .parent =NULL }, +}; + +static const char *dsp_fck_parent_names[] = { +"core_ck" , +}; + +static struct clk dsp_fck; + +static const struct clk_ops dsp_fck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .set_rate = &omap2_clksel_set_rate, + .round_rate = &omap2_clksel_round_rate, +}; + +static struct clk_hw_omap dsp_fck_hw = { + .hw = { + .clk = &dsp_fck, + }, + .ops = &clkhwops_wait, + .clksel = dsp_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP24XX_CLKSEL_DSP_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT , + .clkdm_name ="dsp_clkdm" , +}; + +DEFINE_STRUCT_CLK (dsp_fck, dsp_fck_parent_names, dsp_fck_ops); + +static const struct clksel dsp_ick_clksel[] = { + { .parent = &dsp_fck, .rates = dsp_ick_rates }, + { .parent =NULL }, +}; + +static const char *dsp_ick_parent_names[] = { +"dsp_fck" , +}; + +static struct clk dsp_ick; + +static struct clk_hw_omap dsp_ick_hw = { + .hw = { + .clk = &dsp_ick, + }, + .ops = &clkhwops_iclk_wait, + .clksel = dsp_ick_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP24XX_CLKSEL_DSP_IF_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP2420_EN_DSP_IPI_SHIFT , + .clkdm_name ="dsp_clkdm" , +}; + +DEFINE_STRUCT_CLK (dsp_ick, dsp_ick_parent_names, dsp_fck_ops); + +static const struct clksel_rate dss1_fck_sys_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate dss1_fck_core_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =2 , .val =2 , .flags =RATE_IN_24XX }, + { .div =3 , .val =3 , .flags =RATE_IN_24XX }, + { .div =4 , .val =4 , .flags =RATE_IN_24XX }, + { .div =5 , .val =5 , .flags =RATE_IN_24XX }, + { .div =6 , .val =6 , .flags =RATE_IN_24XX }, + { .div =8 , .val =8 , .flags =RATE_IN_24XX }, + { .div =9 , .val =9 , .flags =RATE_IN_24XX }, + { .div =12 , .val =12 , .flags =RATE_IN_24XX }, + { .div =16 , .val =16 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel dss1_fck_clksel[] = { + { .parent = &sys_ck, .rates = dss1_fck_sys_rates }, + { .parent = &core_ck, .rates = dss1_fck_core_rates }, + { .parent =NULL }, +}; + +static const char *dss1_fck_parent_names[] = { +"sys_ck" , +"core_ck" , +}; + +static struct clk dss1_fck; + +static const struct clk_ops dss1_fck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, +}; + +static struct clk_hw_omap dss1_fck_hw = { + .hw = { + .clk = &dss1_fck, + }, + .clksel = dss1_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_CLKSEL_DSS1_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_DSS1_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss1_fck, dss1_fck_parent_names, dss1_fck_ops); + +static const struct clksel_rate dss2_fck_sys_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate dss2_fck_48m_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate func_48m_apll96_rates[] = { + { .div =2 , .val =0 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate func_48m_alt_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel func_48m_clksel[] = { + { .parent = &apll96_ck, .rates = func_48m_apll96_rates }, + { .parent = &alt_ck, .rates = func_48m_alt_rates }, + { .parent =NULL }, +}; + +static const char *func_48m_ck_parent_names[] = { +"apll96_ck" , +"alt_ck" , +}; + +static struct clk func_48m_ck; + +static const struct clk_ops func_48m_ck_ops = { + .recalc_rate = &omap2_clksel_recalc, + .set_rate = &omap2_clksel_set_rate, + .round_rate = &omap2_clksel_round_rate, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, +}; + +static struct clk_hw_omap func_48m_ck_hw = { + .hw = { + .clk = &func_48m_ck, + }, + .clksel = func_48m_clksel, + .clksel_reg =OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_48M_SOURCE_MASK , +}; + +DEFINE_STRUCT_CLK (func_48m_ck, func_48m_ck_parent_names, func_48m_ck_ops); + +static const struct clksel dss2_fck_clksel[] = { + { .parent = &sys_ck, .rates = dss2_fck_sys_rates }, + { .parent = &func_48m_ck, .rates = dss2_fck_48m_rates }, + { .parent =NULL }, +}; + +static const char *dss2_fck_parent_names[] = { +"sys_ck" , +"func_48m_ck" , +}; + +static struct clk dss2_fck; + +static struct clk_hw_omap dss2_fck_hw = { + .hw = { + .clk = &dss2_fck, + }, + .clksel = dss2_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_CLKSEL_DSS2_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_DSS2_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss2_fck, dss2_fck_parent_names, dss1_fck_ops); + +static const char *func_54m_ck_parent_names[] = { +"apll54_ck" , +"alt_ck" , +}; + +DEFINE_CLK_MUX (func_54m_ck, + func_54m_ck_parent_names,NULL , +0x0 , +OMAP_CM_REGADDR (PLL_MOD ,CM_CLKSEL1 ), +OMAP24XX_54M_SOURCE_SHIFT , +OMAP24XX_54M_SOURCE_WIDTH , +0x0 , +NULL ); + +static struct clk dss_54m_fck; + +static const char *dss_54m_fck_parent_names[] = { +"func_54m_ck" , +}; + +static struct clk_hw_omap dss_54m_fck_hw = { + .hw = { + .clk = &dss_54m_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_TV_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss_54m_fck, dss_54m_fck_parent_names, aes_ick_ops); + +static struct clk dss_ick; + +static struct clk_hw_omap dss_ick_hw = { + .hw = { + .clk = &dss_ick, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_DSS1_SHIFT , + .clkdm_name ="dss_clkdm" , +}; + +DEFINE_STRUCT_CLK (dss_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk eac_fck; + +static struct clk_hw_omap eac_fck_hw = { + .hw = { + .clk = &eac_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP2420_EN_EAC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (eac_fck, cam_fck_parent_names, aes_ick_ops); + +static struct clk eac_ick; + +static struct clk_hw_omap eac_ick_hw = { + .hw = { + .clk = &eac_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP2420_EN_EAC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (eac_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk emul_ck; + +static struct clk_hw_omap emul_ck_hw = { + .hw = { + .clk = &emul_ck, + }, + .enable_reg =OMAP2420_PRCM_CLKEMUL_CTRL , + .enable_bit =OMAP24XX_EMULATION_EN_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (emul_ck, dss_54m_fck_parent_names, aes_ick_ops); + +DEFINE_CLK_FIXED_FACTOR (func_12m_ck, +"func_48m_ck" , + &func_48m_ck, +0x0 , +1 ,4 ); + +static struct clk fac_fck; + +static const char *fac_fck_parent_names[] = { +"func_12m_ck" , +}; + +static struct clk_hw_omap fac_fck_hw = { + .hw = { + .clk = &fac_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_FAC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (fac_fck, fac_fck_parent_names, aes_ick_ops); + +static struct clk fac_ick; + +static struct clk_hw_omap fac_ick_hw = { + .hw = { + .clk = &fac_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_FAC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (fac_ick, aes_ick_parent_names, aes_ick_ops); + +static const struct clksel gfx_fck_clksel[] = { + { .parent = &core_l3_ck, .rates = gfx_l3_rates }, + { .parent =NULL }, +}; + +static const char *gfx_2d_fck_parent_names[] = { +"core_l3_ck" , +}; + +static struct clk gfx_2d_fck; + +static struct clk_hw_omap gfx_2d_fck_hw = { + .hw = { + .clk = &gfx_2d_fck, + }, + .ops = &clkhwops_wait, + .clksel = gfx_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP_CLKSEL_GFX_MASK , + .enable_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_FCLKEN ), + .enable_bit =OMAP24XX_EN_2D_SHIFT , + .clkdm_name ="gfx_clkdm" , +}; + +DEFINE_STRUCT_CLK (gfx_2d_fck, gfx_2d_fck_parent_names, dsp_fck_ops); + +static struct clk gfx_3d_fck; + +static struct clk_hw_omap gfx_3d_fck_hw = { + .hw = { + .clk = &gfx_3d_fck, + }, + .ops = &clkhwops_wait, + .clksel = gfx_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP_CLKSEL_GFX_MASK , + .enable_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_FCLKEN ), + .enable_bit =OMAP24XX_EN_3D_SHIFT , + .clkdm_name ="gfx_clkdm" , +}; + +DEFINE_STRUCT_CLK (gfx_3d_fck, gfx_2d_fck_parent_names, dsp_fck_ops); + +static struct clk gfx_ick; + +static const char *gfx_ick_parent_names[] = { +"core_l3_ck" , +}; + +static struct clk_hw_omap gfx_ick_hw = { + .hw = { + .clk = &gfx_ick, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (GFX_MOD ,CM_ICLKEN ), + .enable_bit =OMAP_EN_GFX_SHIFT , + .clkdm_name ="gfx_clkdm" , +}; + +DEFINE_STRUCT_CLK (gfx_ick, gfx_ick_parent_names, aes_ick_ops); + +static struct clk gpios_fck; + +static const char *gpios_fck_parent_names[] = { +"func_32k_ck" , +}; + +static struct clk_hw_omap gpios_fck_hw = { + .hw = { + .clk = &gpios_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP24XX_EN_GPIOS_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpios_fck, gpios_fck_parent_names, aes_ick_ops); + +static struct clk wu_l4_ick; + +DEFINE_STRUCT_CLK_HW_OMAP (wu_l4_ick); +DEFINE_STRUCT_CLK (wu_l4_ick, dpll_ck_parent_names, core_ck_ops); + +static struct clk gpios_ick; + +static const char *gpios_ick_parent_names[] = { +"wu_l4_ick" , +}; + +static struct clk_hw_omap gpios_ick_hw = { + .hw = { + .clk = &gpios_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP24XX_EN_GPIOS_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpios_ick, gpios_ick_parent_names, aes_ick_ops); + +static struct clk gpmc_fck; + +static const struct clk_ops gpmc_fck_ops = { + .init = &omap2_init_clk_clkdm, +}; + +static struct clk_hw_omap gpmc_fck_hw = { + .hw = { + .clk = &gpmc_fck, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN3 ), + .enable_bit =OMAP24XX_AUTO_GPMC_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpmc_fck, gfx_ick_parent_names, gpmc_fck_ops); + +static const struct clksel_rate gpt_alt_rates[] = { + { .div =1 , .val =2 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel omap24xx_gpt_clksel[] = { + { .parent = &func_32k_ck, .rates = gpt_32k_rates }, + { .parent = &sys_ck, .rates = gpt_sys_rates }, + { .parent = &alt_ck, .rates = gpt_alt_rates }, + { .parent =NULL }, +}; + +static const char *gpt10_fck_parent_names[] = { +"func_32k_ck" , +"sys_ck" , +"alt_ck" , +}; + +static struct clk gpt10_fck; + +static struct clk_hw_omap gpt10_fck_hw = { + .hw = { + .clk = &gpt10_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT10_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT10_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt10_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt10_ick; + +static struct clk_hw_omap gpt10_ick_hw = { + .hw = { + .clk = &gpt10_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT10_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt10_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt11_fck; + +static struct clk_hw_omap gpt11_fck_hw = { + .hw = { + .clk = &gpt11_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT11_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT11_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt11_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt11_ick; + +static struct clk_hw_omap gpt11_ick_hw = { + .hw = { + .clk = &gpt11_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT11_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt11_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt12_fck; + +static struct clk_hw_omap gpt12_fck_hw = { + .hw = { + .clk = &gpt12_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT12_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT12_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt12_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt12_ick; + +static struct clk_hw_omap gpt12_ick_hw = { + .hw = { + .clk = &gpt12_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT12_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt12_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt1_fck; + +static const struct clk_ops gpt1_fck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap2_clksel_recalc, + .set_rate = &omap2_clksel_set_rate, + .round_rate = &omap2_clksel_round_rate, + .get_parent = &omap2_init_clksel_parent, + .set_parent = &omap2_clksel_set_parent, +}; + +static struct clk_hw_omap gpt1_fck_hw = { + .hw = { + .clk = &gpt1_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT1_MASK , + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP24XX_EN_GPT1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt1_fck, gpt10_fck_parent_names, gpt1_fck_ops); + +static struct clk gpt1_ick; + +static struct clk_hw_omap gpt1_ick_hw = { + .hw = { + .clk = &gpt1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP24XX_EN_GPT1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt1_ick, gpios_ick_parent_names, aes_ick_ops); + +static struct clk gpt2_fck; + +static struct clk_hw_omap gpt2_fck_hw = { + .hw = { + .clk = &gpt2_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT2_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt2_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt2_ick; + +static struct clk_hw_omap gpt2_ick_hw = { + .hw = { + .clk = &gpt2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt2_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt3_fck; + +static struct clk_hw_omap gpt3_fck_hw = { + .hw = { + .clk = &gpt3_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT3_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt3_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt3_ick; + +static struct clk_hw_omap gpt3_ick_hw = { + .hw = { + .clk = &gpt3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt3_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt4_fck; + +static struct clk_hw_omap gpt4_fck_hw = { + .hw = { + .clk = &gpt4_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT4_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT4_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt4_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt4_ick; + +static struct clk_hw_omap gpt4_ick_hw = { + .hw = { + .clk = &gpt4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT4_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt4_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt5_fck; + +static struct clk_hw_omap gpt5_fck_hw = { + .hw = { + .clk = &gpt5_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT5_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT5_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt5_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt5_ick; + +static struct clk_hw_omap gpt5_ick_hw = { + .hw = { + .clk = &gpt5_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT5_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt5_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt6_fck; + +static struct clk_hw_omap gpt6_fck_hw = { + .hw = { + .clk = &gpt6_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT6_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT6_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt6_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt6_ick; + +static struct clk_hw_omap gpt6_ick_hw = { + .hw = { + .clk = &gpt6_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT6_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt6_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt7_fck; + +static struct clk_hw_omap gpt7_fck_hw = { + .hw = { + .clk = &gpt7_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT7_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT7_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt7_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt7_ick; + +static struct clk_hw_omap gpt7_ick_hw = { + .hw = { + .clk = &gpt7_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT7_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt7_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt8_fck; + +static struct clk_hw_omap gpt8_fck_hw = { + .hw = { + .clk = &gpt8_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT8_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT8_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt8_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt8_ick; + +static struct clk_hw_omap gpt8_ick_hw = { + .hw = { + .clk = &gpt8_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT8_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt8_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk gpt9_fck; + +static struct clk_hw_omap gpt9_fck_hw = { + .hw = { + .clk = &gpt9_fck, + }, + .ops = &clkhwops_wait, + .clksel = omap24xx_gpt_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL2 ), + .clksel_mask =OMAP24XX_CLKSEL_GPT9_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT9_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt9_fck, gpt10_fck_parent_names, dss1_fck_ops); + +static struct clk gpt9_ick; + +static struct clk_hw_omap gpt9_ick_hw = { + .hw = { + .clk = &gpt9_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_GPT9_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (gpt9_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk hdq_fck; + +static struct clk_hw_omap hdq_fck_hw = { + .hw = { + .clk = &hdq_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_HDQ_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (hdq_fck, fac_fck_parent_names, aes_ick_ops); + +static struct clk hdq_ick; + +static struct clk_hw_omap hdq_ick_hw = { + .hw = { + .clk = &hdq_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_HDQ_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (hdq_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk i2c1_fck; + +static struct clk_hw_omap i2c1_fck_hw = { + .hw = { + .clk = &i2c1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP2420_EN_I2C1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c1_fck, fac_fck_parent_names, aes_ick_ops); + +static struct clk i2c1_ick; + +static struct clk_hw_omap i2c1_ick_hw = { + .hw = { + .clk = &i2c1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP2420_EN_I2C1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c1_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk i2c2_fck; + +static struct clk_hw_omap i2c2_fck_hw = { + .hw = { + .clk = &i2c2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP2420_EN_I2C2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c2_fck, fac_fck_parent_names, aes_ick_ops); + +static struct clk i2c2_ick; + +static struct clk_hw_omap i2c2_ick_hw = { + .hw = { + .clk = &i2c2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP2420_EN_I2C2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (i2c2_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk iva1_ifck; + +static struct clk_hw_omap iva1_ifck_hw = { + .hw = { + .clk = &iva1_ifck, + }, + .ops = &clkhwops_wait, + .clksel = dsp_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_CLKSEL ), + .clksel_mask =OMAP2420_CLKSEL_IVA_MASK , + .enable_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP2420_EN_IVA_COP_SHIFT , + .clkdm_name ="iva1_clkdm" , +}; + +DEFINE_STRUCT_CLK (iva1_ifck, dsp_fck_parent_names, dsp_fck_ops); + +static struct clk iva1_mpu_int_ifck; + +static const char *iva1_mpu_int_ifck_parent_names[] = { +"iva1_ifck" , +}; + +static const struct clk_ops iva1_mpu_int_ifck_ops = { + .init = &omap2_init_clk_clkdm, + .enable = &omap2_dflt_clk_enable, + .disable = &omap2_dflt_clk_disable, + .is_enabled = &omap2_dflt_clk_is_enabled, + .recalc_rate = &omap_fixed_divisor_recalc, +}; + +static struct clk_hw_omap iva1_mpu_int_ifck_hw = { + .hw = { + .clk = &iva1_mpu_int_ifck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP2420_EN_IVA_MPU_SHIFT , + .clkdm_name ="iva1_clkdm" , + .fixed_div =2 , +}; + +DEFINE_STRUCT_CLK (iva1_mpu_int_ifck, iva1_mpu_int_ifck_parent_names, iva1_mpu_int_ifck_ops); + +static struct clk mailboxes_ick; + +static struct clk_hw_omap mailboxes_ick_hw = { + .hw = { + .clk = &mailboxes_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_MAILBOXES_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mailboxes_ick, aes_ick_parent_names, aes_ick_ops); + +static const struct clksel_rate common_mcbsp_96m_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate common_mcbsp_mcbsp_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel mcbsp_fck_clksel[] = { + { .parent = &func_96m_ck, .rates = common_mcbsp_96m_rates }, + { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates }, + { .parent =NULL }, +}; + +static const char *mcbsp1_fck_parent_names[] = { +"func_96m_ck" , +"mcbsp_clks" , +}; + +static struct clk mcbsp1_fck; + +static struct clk_hw_omap mcbsp1_fck_hw = { + .hw = { + .clk = &mcbsp1_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_fck_clksel, + .clksel_reg =OMAP242X_CTRL_REGADDR (OMAP2_CONTROL_DEVCONF0 ), + .clksel_mask =OMAP2_MCBSP1_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_MCBSP1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp1_fck, mcbsp1_fck_parent_names, dss1_fck_ops); + +static struct clk mcbsp1_ick; + +static struct clk_hw_omap mcbsp1_ick_hw = { + .hw = { + .clk = &mcbsp1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_MCBSP1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp1_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk mcbsp2_fck; + +static struct clk_hw_omap mcbsp2_fck_hw = { + .hw = { + .clk = &mcbsp2_fck, + }, + .ops = &clkhwops_wait, + .clksel = mcbsp_fck_clksel, + .clksel_reg =OMAP242X_CTRL_REGADDR (OMAP2_CONTROL_DEVCONF0 ), + .clksel_mask =OMAP2_MCBSP2_CLKS_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_MCBSP2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp2_fck, mcbsp1_fck_parent_names, dss1_fck_ops); + +static struct clk mcbsp2_ick; + +static struct clk_hw_omap mcbsp2_ick_hw = { + .hw = { + .clk = &mcbsp2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_MCBSP2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcbsp2_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk mcspi1_fck; + +static const char *mcspi1_fck_parent_names[] = { +"func_48m_ck" , +}; + +static struct clk_hw_omap mcspi1_fck_hw = { + .hw = { + .clk = &mcspi1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_MCSPI1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi1_fck, mcspi1_fck_parent_names, aes_ick_ops); + +static struct clk mcspi1_ick; + +static struct clk_hw_omap mcspi1_ick_hw = { + .hw = { + .clk = &mcspi1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_MCSPI1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi1_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk mcspi2_fck; + +static struct clk_hw_omap mcspi2_fck_hw = { + .hw = { + .clk = &mcspi2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_MCSPI2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi2_fck, mcspi1_fck_parent_names, aes_ick_ops); + +static struct clk mcspi2_ick; + +static struct clk_hw_omap mcspi2_ick_hw = { + .hw = { + .clk = &mcspi2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_MCSPI2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mcspi2_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk mmc_fck; + +static struct clk_hw_omap mmc_fck_hw = { + .hw = { + .clk = &mmc_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP2420_EN_MMC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmc_fck, cam_fck_parent_names, aes_ick_ops); + +static struct clk mmc_ick; + +static struct clk_hw_omap mmc_ick_hw = { + .hw = { + .clk = &mmc_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP2420_EN_MMC_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mmc_ick, aes_ick_parent_names, aes_ick_ops); + +DEFINE_CLK_DIVIDER (mpu_ck, +"core_ck" , + &core_ck, +0x0 , +OMAP_CM_REGADDR (MPU_MOD ,CM_CLKSEL ), +OMAP24XX_CLKSEL_MPU_SHIFT , +OMAP24XX_CLKSEL_MPU_WIDTH , +CLK_DIVIDER_ONE_BASED , +NULL , +NULL ); + +static struct clk mpu_wdt_fck; + +static struct clk_hw_omap mpu_wdt_fck_hw = { + .hw = { + .clk = &mpu_wdt_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ), + .enable_bit =OMAP24XX_EN_MPU_WDT_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (mpu_wdt_fck, gpios_fck_parent_names, aes_ick_ops); + +static struct clk mpu_wdt_ick; + +static struct clk_hw_omap mpu_wdt_ick_hw = { + .hw = { + .clk = &mpu_wdt_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP24XX_EN_MPU_WDT_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (mpu_wdt_ick, gpios_ick_parent_names, aes_ick_ops); + +static struct clk mspro_fck; + +static struct clk_hw_omap mspro_fck_hw = { + .hw = { + .clk = &mspro_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_MSPRO_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mspro_fck, cam_fck_parent_names, aes_ick_ops); + +static struct clk mspro_ick; + +static struct clk_hw_omap mspro_ick_hw = { + .hw = { + .clk = &mspro_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_MSPRO_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (mspro_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk omapctrl_ick; + +static struct clk_hw_omap omapctrl_ick_hw = { + .hw = { + .clk = &omapctrl_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP24XX_EN_OMAPCTRL_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (omapctrl_ick, gpios_ick_parent_names, aes_ick_ops); + +static struct clk pka_ick; + +static struct clk_hw_omap pka_ick_hw = { + .hw = { + .clk = &pka_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_ICLKEN4 ), + .enable_bit =OMAP24XX_EN_PKA_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (pka_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk rng_ick; + +static struct clk_hw_omap rng_ick_hw = { + .hw = { + .clk = &rng_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_ICLKEN4 ), + .enable_bit =OMAP24XX_EN_RNG_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (rng_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk sdma_fck; + +DEFINE_STRUCT_CLK_HW_OMAP (sdma_fck); +DEFINE_STRUCT_CLK (sdma_fck, gfx_ick_parent_names, core_ck_ops); + +static struct clk sdma_ick; + +static struct clk_hw_omap sdma_ick_hw = { + .hw = { + .clk = &sdma_ick, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN3 ), + .enable_bit =OMAP24XX_AUTO_SDMA_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (sdma_ick, gfx_ick_parent_names, gpmc_fck_ops); + +static struct clk sdrc_ick; + +static struct clk_hw_omap sdrc_ick_hw = { + .hw = { + .clk = &sdrc_ick, + }, + .ops = &clkhwops_iclk, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN3 ), + .enable_bit =OMAP24XX_AUTO_SDRC_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (sdrc_ick, gfx_ick_parent_names, gpmc_fck_ops); + +static struct clk sha_ick; + +static struct clk_hw_omap sha_ick_hw = { + .hw = { + .clk = &sha_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_ICLKEN4 ), + .enable_bit =OMAP24XX_EN_SHA_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (sha_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk ssi_l4_ick; + +static struct clk_hw_omap ssi_l4_ick_hw = { + .hw = { + .clk = &ssi_l4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP24XX_EN_SSI_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (ssi_l4_ick, aes_ick_parent_names, aes_ick_ops); + +static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =2 , .val =2 , .flags =RATE_IN_24XX }, + { .div =3 , .val =3 , .flags =RATE_IN_24XX }, + { .div =4 , .val =4 , .flags =RATE_IN_24XX }, + { .div =6 , .val =6 , .flags =RATE_IN_242X }, + { .div =8 , .val =8 , .flags =RATE_IN_242X }, + { .div =0 } +}; + +static const struct clksel ssi_ssr_sst_fck_clksel[] = { + { .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates }, + { .parent =NULL }, +}; + +static const char *ssi_ssr_sst_fck_parent_names[] = { +"core_ck" , +}; + +static struct clk ssi_ssr_sst_fck; + +static struct clk_hw_omap ssi_ssr_sst_fck_hw = { + .hw = { + .clk = &ssi_ssr_sst_fck, + }, + .ops = &clkhwops_wait, + .clksel = ssi_ssr_sst_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_CLKSEL_SSI_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_FCLKEN2 ), + .enable_bit =OMAP24XX_EN_SSI_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (ssi_ssr_sst_fck, ssi_ssr_sst_fck_parent_names, dsp_fck_ops); + +static struct clk sync_32k_ick; + +static struct clk_hw_omap sync_32k_ick_hw = { + .hw = { + .clk = &sync_32k_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP24XX_EN_32KSYNC_SHIFT , + .flags =ENABLE_ON_INIT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (sync_32k_ick, gpios_ick_parent_names, aes_ick_ops); + +static const struct clksel_rate common_clkout_src_core_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate common_clkout_src_sys_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate common_clkout_src_96m_rates[] = { + { .div =1 , .val =2 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel_rate common_clkout_src_54m_rates[] = { + { .div =1 , .val =3 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel common_clkout_src_clksel[] = { + { .parent = &core_ck, .rates = common_clkout_src_core_rates }, + { .parent = &sys_ck, .rates = common_clkout_src_sys_rates }, + { .parent = &func_96m_ck, .rates = common_clkout_src_96m_rates }, + { .parent = &func_54m_ck, .rates = common_clkout_src_54m_rates }, + { .parent =NULL }, +}; + +static const char *sys_clkout_src_parent_names[] = { +"core_ck" , +"sys_ck" , +"func_96m_ck" , +"func_54m_ck" , +}; + +static struct clk sys_clkout_src; + +static struct clk_hw_omap sys_clkout_src_hw = { + .hw = { + .clk = &sys_clkout_src, + }, + .clksel = common_clkout_src_clksel, + .clksel_reg =OMAP2420_PRCM_CLKOUT_CTRL , + .clksel_mask =OMAP24XX_CLKOUT_SOURCE_MASK , + .enable_reg =OMAP2420_PRCM_CLKOUT_CTRL , + .enable_bit =OMAP24XX_CLKOUT_EN_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (sys_clkout_src, sys_clkout_src_parent_names, gpt1_fck_ops); + +DEFINE_CLK_DIVIDER (sys_clkout, +"sys_clkout_src" , + &sys_clkout_src, +0x0 , +OMAP2420_PRCM_CLKOUT_CTRL , +OMAP24XX_CLKOUT_DIV_SHIFT , +OMAP24XX_CLKOUT_DIV_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +static struct clk sys_clkout2_src; + +static struct clk_hw_omap sys_clkout2_src_hw = { + .hw = { + .clk = &sys_clkout2_src, + }, + .clksel = common_clkout_src_clksel, + .clksel_reg =OMAP2420_PRCM_CLKOUT_CTRL , + .clksel_mask =OMAP2420_CLKOUT2_SOURCE_MASK , + .enable_reg =OMAP2420_PRCM_CLKOUT_CTRL , + .enable_bit =OMAP2420_CLKOUT2_EN_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (sys_clkout2_src, sys_clkout_src_parent_names, gpt1_fck_ops); + +DEFINE_CLK_DIVIDER (sys_clkout2, +"sys_clkout2_src" , + &sys_clkout2_src, +0x0 , +OMAP2420_PRCM_CLKOUT_CTRL , +OMAP2420_CLKOUT2_DIV_SHIFT , +OMAP2420_CLKOUT2_DIV_WIDTH , +CLK_DIVIDER_POWER_OF_TWO , +NULL , +NULL ); + +static struct clk uart1_fck; + +static struct clk_hw_omap uart1_fck_hw = { + .hw = { + .clk = &uart1_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_UART1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (uart1_fck, mcspi1_fck_parent_names, aes_ick_ops); + +static struct clk uart1_ick; + +static struct clk_hw_omap uart1_ick_hw = { + .hw = { + .clk = &uart1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_UART1_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (uart1_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk uart2_fck; + +static struct clk_hw_omap uart2_fck_hw = { + .hw = { + .clk = &uart2_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_UART2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (uart2_fck, mcspi1_fck_parent_names, aes_ick_ops); + +static struct clk uart2_ick; + +static struct clk_hw_omap uart2_ick_hw = { + .hw = { + .clk = &uart2_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_UART2_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (uart2_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk uart3_fck; + +static struct clk_hw_omap uart3_fck_hw = { + .hw = { + .clk = &uart3_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_FCLKEN2 ), + .enable_bit =OMAP24XX_EN_UART3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (uart3_fck, mcspi1_fck_parent_names, aes_ick_ops); + +static struct clk uart3_ick; + +static struct clk_hw_omap uart3_ick_hw = { + .hw = { + .clk = &uart3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP24XX_EN_UART3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (uart3_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk usb_fck; + +static struct clk_hw_omap usb_fck_hw = { + .hw = { + .clk = &usb_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,OMAP24XX_CM_FCLKEN2 ), + .enable_bit =OMAP24XX_EN_USB_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (usb_fck, mcspi1_fck_parent_names, aes_ick_ops); + +static const struct clksel_rate usb_l4_ick_core_l3_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX }, + { .div =2 , .val =2 , .flags =RATE_IN_24XX }, + { .div =4 , .val =4 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel usb_l4_ick_clksel[] = { + { .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates }, + { .parent =NULL }, +}; + +static const char *usb_l4_ick_parent_names[] = { +"core_l3_ck" , +}; + +static struct clk usb_l4_ick; + +static struct clk_hw_omap usb_l4_ick_hw = { + .hw = { + .clk = &usb_l4_ick, + }, + .ops = &clkhwops_iclk_wait, + .clksel = usb_l4_ick_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_CLKSEL_USB_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP24XX_EN_USB_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (usb_l4_ick, usb_l4_ick_parent_names, dsp_fck_ops); + +static struct clk virt_prcm_set; + +static const char *virt_prcm_set_parent_names[] = { +"mpu_ck" , +}; + +static const struct clk_ops virt_prcm_set_ops = { + .recalc_rate = &omap2_table_mpu_recalc, + .set_rate = &omap2_select_table_rate, + .round_rate = &omap2_round_to_table_rate, +}; + +DEFINE_STRUCT_CLK_HW_OMAP (virt_prcm_set); +DEFINE_STRUCT_CLK (virt_prcm_set, virt_prcm_set_parent_names, virt_prcm_set_ops); + +static const struct clksel_rate vlynq_fck_96m_rates[] = { + { .div =1 , .val =0 , .flags =RATE_IN_242X }, + { .div =0 } +}; + +static const struct clksel_rate vlynq_fck_core_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_242X }, + { .div =2 , .val =2 , .flags =RATE_IN_242X }, + { .div =3 , .val =3 , .flags =RATE_IN_242X }, + { .div =4 , .val =4 , .flags =RATE_IN_242X }, + { .div =6 , .val =6 , .flags =RATE_IN_242X }, + { .div =8 , .val =8 , .flags =RATE_IN_242X }, + { .div =9 , .val =9 , .flags =RATE_IN_242X }, + { .div =12 , .val =12 , .flags =RATE_IN_242X }, + { .div =16 , .val =16 , .flags =RATE_IN_242X }, + { .div =18 , .val =18 , .flags =RATE_IN_242X }, + { .div =0 } +}; + +static const struct clksel vlynq_fck_clksel[] = { + { .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates }, + { .parent = &core_ck, .rates = vlynq_fck_core_rates }, + { .parent =NULL }, +}; + +static const char *vlynq_fck_parent_names[] = { +"func_96m_ck" , +"core_ck" , +}; + +static struct clk vlynq_fck; + +static struct clk_hw_omap vlynq_fck_hw = { + .hw = { + .clk = &vlynq_fck, + }, + .ops = &clkhwops_wait, + .clksel = vlynq_fck_clksel, + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP2420_CLKSEL_VLYNQ_MASK , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP2420_EN_VLYNQ_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (vlynq_fck, vlynq_fck_parent_names, dss1_fck_ops); + +static struct clk vlynq_ick; + +static struct clk_hw_omap vlynq_ick_hw = { + .hw = { + .clk = &vlynq_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP2420_EN_VLYNQ_SHIFT , + .clkdm_name ="core_l3_clkdm" , +}; + +DEFINE_STRUCT_CLK (vlynq_ick, gfx_ick_parent_names, aes_ick_ops); + +static struct clk wdt1_ick; + +static struct clk_hw_omap wdt1_ick_hw = { + .hw = { + .clk = &wdt1_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), + .enable_bit =OMAP24XX_EN_WDT1_SHIFT , + .clkdm_name ="wkup_clkdm" , +}; + +DEFINE_STRUCT_CLK (wdt1_ick, gpios_ick_parent_names, aes_ick_ops); + +static struct clk wdt1_osc_ck; + +DEFINE_STRUCT_CLK_HW_OMAP (wdt1_osc_ck); +DEFINE_STRUCT_CLK (wdt1_osc_ck, sys_ck_parent_names, core_ck_ops); + +static struct clk wdt3_fck; + +static struct clk_hw_omap wdt3_fck_hw = { + .hw = { + .clk = &wdt3_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP2420_EN_WDT3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (wdt3_fck, gpios_fck_parent_names, aes_ick_ops); + +static struct clk wdt3_ick; + +static struct clk_hw_omap wdt3_ick_hw = { + .hw = { + .clk = &wdt3_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP2420_EN_WDT3_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (wdt3_ick, aes_ick_parent_names, aes_ick_ops); + +static struct clk wdt4_fck; + +static struct clk_hw_omap wdt4_fck_hw = { + .hw = { + .clk = &wdt4_fck, + }, + .ops = &clkhwops_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), + .enable_bit =OMAP24XX_EN_WDT4_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (wdt4_fck, gpios_fck_parent_names, aes_ick_ops); + +static struct clk wdt4_ick; + +static struct clk_hw_omap wdt4_ick_hw = { + .hw = { + .clk = &wdt4_ick, + }, + .ops = &clkhwops_iclk_wait, + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN1 ), + .enable_bit =OMAP24XX_EN_WDT4_SHIFT , + .clkdm_name ="core_l4_clkdm" , +}; + +DEFINE_STRUCT_CLK (wdt4_ick, aes_ick_parent_names, aes_ick_ops); + +/* +* clkdev integration +*/ + +static struct omap_clk omap2420_clks[] = { +/* external root sources */ +CLK (NULL ,"func_32k_ck" , &func_32k_ck,CK_242X ), +CLK (NULL ,"secure_32k_ck" , &secure_32k_ck,CK_242X ), +CLK (NULL ,"osc_ck" , &osc_ck,CK_242X ), +CLK (NULL ,"sys_ck" , &sys_ck,CK_242X ), +CLK (NULL ,"alt_ck" , &alt_ck,CK_242X ), +CLK ("omap-mcbsp.1" ,"pad_fck" , &mcbsp_clks,CK_242X ), +CLK ("omap-mcbsp.2" ,"pad_fck" , &mcbsp_clks,CK_242X ), +CLK (NULL ,"mcbsp_clks" , &mcbsp_clks,CK_242X ), +/* internal analog sources */ +CLK (NULL ,"dpll_ck" , &dpll_ck,CK_242X ), +CLK (NULL ,"apll96_ck" , &apll96_ck,CK_242X ), +CLK (NULL ,"apll54_ck" , &apll54_ck,CK_242X ), +/* internal prcm root sources */ +CLK (NULL ,"func_54m_ck" , &func_54m_ck,CK_242X ), +CLK (NULL ,"core_ck" , &core_ck,CK_242X ), +CLK ("omap-mcbsp.1" ,"prcm_fck" , &func_96m_ck,CK_242X ), +CLK ("omap-mcbsp.2" ,"prcm_fck" , &func_96m_ck,CK_242X ), +CLK (NULL ,"func_96m_ck" , &func_96m_ck,CK_242X ), +CLK (NULL ,"func_48m_ck" , &func_48m_ck,CK_242X ), +CLK (NULL ,"func_12m_ck" , &func_12m_ck,CK_242X ), +CLK (NULL ,"ck_wdt1_osc" , &wdt1_osc_ck,CK_242X ), +CLK (NULL ,"sys_clkout_src" , &sys_clkout_src,CK_242X ), +CLK (NULL ,"sys_clkout" , &sys_clkout,CK_242X ), +CLK (NULL ,"sys_clkout2_src" , &sys_clkout2_src,CK_242X ), +CLK (NULL ,"sys_clkout2" , &sys_clkout2,CK_242X ), +CLK (NULL ,"emul_ck" , &emul_ck,CK_242X ), +/* mpu domain clocks */ +CLK (NULL ,"mpu_ck" , &mpu_ck,CK_242X ), +/* dsp domain clocks */ +CLK (NULL ,"dsp_fck" , &dsp_fck,CK_242X ), +CLK (NULL ,"dsp_ick" , &dsp_ick,CK_242X ), +CLK (NULL ,"iva1_ifck" , &iva1_ifck,CK_242X ), +CLK (NULL ,"iva1_mpu_int_ifck" , &iva1_mpu_int_ifck,CK_242X ), +/* GFX domain clocks */ +CLK (NULL ,"gfx_3d_fck" , &gfx_3d_fck,CK_242X ), +CLK (NULL ,"gfx_2d_fck" , &gfx_2d_fck,CK_242X ), +CLK (NULL ,"gfx_ick" , &gfx_ick,CK_242X ), +/* DSS domain clocks */ +CLK ("omapdss_dss" ,"ick" , &dss_ick,CK_242X ), +CLK (NULL ,"dss_ick" , &dss_ick,CK_242X ), +CLK (NULL ,"dss1_fck" , &dss1_fck,CK_242X ), +CLK (NULL ,"dss2_fck" , &dss2_fck,CK_242X ), +CLK (NULL ,"dss_54m_fck" , &dss_54m_fck,CK_242X ), +/* L3 domain clocks */ +CLK (NULL ,"core_l3_ck" , &core_l3_ck,CK_242X ), +CLK (NULL ,"ssi_fck" , &ssi_ssr_sst_fck,CK_242X ), +CLK (NULL ,"usb_l4_ick" , &usb_l4_ick,CK_242X ), +/* L4 domain clocks */ +CLK (NULL ,"l4_ck" , &l4_ck,CK_242X ), +CLK (NULL ,"ssi_l4_ick" , &ssi_l4_ick,CK_242X ), +CLK (NULL ,"wu_l4_ick" , &wu_l4_ick,CK_242X ), +/* virtual meta-group clock */ +CLK (NULL ,"virt_prcm_set" , &virt_prcm_set,CK_242X ), +/* general l4 interface ck, multi-parent functional clk */ +CLK (NULL ,"gpt1_ick" , &gpt1_ick,CK_242X ), +CLK (NULL ,"gpt1_fck" , &gpt1_fck,CK_242X ), +CLK (NULL ,"gpt2_ick" , &gpt2_ick,CK_242X ), +CLK (NULL ,"gpt2_fck" , &gpt2_fck,CK_242X ), +CLK (NULL ,"gpt3_ick" , &gpt3_ick,CK_242X ), +CLK (NULL ,"gpt3_fck" , &gpt3_fck,CK_242X ), +CLK (NULL ,"gpt4_ick" , &gpt4_ick,CK_242X ), +CLK (NULL ,"gpt4_fck" , &gpt4_fck,CK_242X ), +CLK (NULL ,"gpt5_ick" , &gpt5_ick,CK_242X ), +CLK (NULL ,"gpt5_fck" , &gpt5_fck,CK_242X ), +CLK (NULL ,"gpt6_ick" , &gpt6_ick,CK_242X ), +CLK (NULL ,"gpt6_fck" , &gpt6_fck,CK_242X ), +CLK (NULL ,"gpt7_ick" , &gpt7_ick,CK_242X ), +CLK (NULL ,"gpt7_fck" , &gpt7_fck,CK_242X ), +CLK (NULL ,"gpt8_ick" , &gpt8_ick,CK_242X ), +CLK (NULL ,"gpt8_fck" , &gpt8_fck,CK_242X ), +CLK (NULL ,"gpt9_ick" , &gpt9_ick,CK_242X ), +CLK (NULL ,"gpt9_fck" , &gpt9_fck,CK_242X ), +CLK (NULL ,"gpt10_ick" , &gpt10_ick,CK_242X ), +CLK (NULL ,"gpt10_fck" , &gpt10_fck,CK_242X ), +CLK (NULL ,"gpt11_ick" , &gpt11_ick,CK_242X ), +CLK (NULL ,"gpt11_fck" , &gpt11_fck,CK_242X ), +CLK (NULL ,"gpt12_ick" , &gpt12_ick,CK_242X ), +CLK (NULL ,"gpt12_fck" , &gpt12_fck,CK_242X ), +CLK ("omap-mcbsp.1" ,"ick" , &mcbsp1_ick,CK_242X ), +CLK (NULL ,"mcbsp1_ick" , &mcbsp1_ick,CK_242X ), +CLK (NULL ,"mcbsp1_fck" , &mcbsp1_fck,CK_242X ), +CLK ("omap-mcbsp.2" ,"ick" , &mcbsp2_ick,CK_242X ), +CLK (NULL ,"mcbsp2_ick" , &mcbsp2_ick,CK_242X ), +CLK (NULL ,"mcbsp2_fck" , &mcbsp2_fck,CK_242X ), +CLK ("omap2_mcspi.1" ,"ick" , &mcspi1_ick,CK_242X ), +CLK (NULL ,"mcspi1_ick" , &mcspi1_ick,CK_242X ), +CLK (NULL ,"mcspi1_fck" , &mcspi1_fck,CK_242X ), +CLK ("omap2_mcspi.2" ,"ick" , &mcspi2_ick,CK_242X ), +CLK (NULL ,"mcspi2_ick" , &mcspi2_ick,CK_242X ), +CLK (NULL ,"mcspi2_fck" , &mcspi2_fck,CK_242X ), +CLK (NULL ,"uart1_ick" , &uart1_ick,CK_242X ), +CLK (NULL ,"uart1_fck" , &uart1_fck,CK_242X ), +CLK (NULL ,"uart2_ick" , &uart2_ick,CK_242X ), +CLK (NULL ,"uart2_fck" , &uart2_fck,CK_242X ), +CLK (NULL ,"uart3_ick" , &uart3_ick,CK_242X ), +CLK (NULL ,"uart3_fck" , &uart3_fck,CK_242X ), +CLK (NULL ,"gpios_ick" , &gpios_ick,CK_242X ), +CLK (NULL ,"gpios_fck" , &gpios_fck,CK_242X ), +CLK ("omap_wdt" ,"ick" , &mpu_wdt_ick,CK_242X ), +CLK (NULL ,"mpu_wdt_ick" , &mpu_wdt_ick,CK_242X ), +CLK (NULL ,"mpu_wdt_fck" , &mpu_wdt_fck,CK_242X ), +CLK (NULL ,"sync_32k_ick" , &sync_32k_ick,CK_242X ), +CLK (NULL ,"wdt1_ick" , &wdt1_ick,CK_242X ), +CLK (NULL ,"omapctrl_ick" , &omapctrl_ick,CK_242X ), +CLK ("omap24xxcam" ,"fck" , &cam_fck,CK_242X ), +CLK (NULL ,"cam_fck" , &cam_fck,CK_242X ), +CLK ("omap24xxcam" ,"ick" , &cam_ick,CK_242X ), +CLK (NULL ,"cam_ick" , &cam_ick,CK_242X ), +CLK (NULL ,"mailboxes_ick" , &mailboxes_ick,CK_242X ), +CLK (NULL ,"wdt4_ick" , &wdt4_ick,CK_242X ), +CLK (NULL ,"wdt4_fck" , &wdt4_fck,CK_242X ), +CLK (NULL ,"wdt3_ick" , &wdt3_ick,CK_242X ), +CLK (NULL ,"wdt3_fck" , &wdt3_fck,CK_242X ), +CLK (NULL ,"mspro_ick" , &mspro_ick,CK_242X ), +CLK (NULL ,"mspro_fck" , &mspro_fck,CK_242X ), +CLK ("mmci-omap.0" ,"ick" , &mmc_ick,CK_242X ), +CLK (NULL ,"mmc_ick" , &mmc_ick,CK_242X ), +CLK ("mmci-omap.0" ,"fck" , &mmc_fck,CK_242X ), +CLK (NULL ,"mmc_fck" , &mmc_fck,CK_242X ), +CLK (NULL ,"fac_ick" , &fac_ick,CK_242X ), +CLK (NULL ,"fac_fck" , &fac_fck,CK_242X ), +CLK (NULL ,"eac_ick" , &eac_ick,CK_242X ), +CLK (NULL ,"eac_fck" , &eac_fck,CK_242X ), +CLK ("omap_hdq.0" ,"ick" , &hdq_ick,CK_242X ), +CLK (NULL ,"hdq_ick" , &hdq_ick,CK_242X ), +CLK ("omap_hdq.0" ,"fck" , &hdq_fck,CK_242X ), +CLK (NULL ,"hdq_fck" , &hdq_fck,CK_242X ), +CLK ("omap_i2c.1" ,"ick" , &i2c1_ick,CK_242X ), +CLK (NULL ,"i2c1_ick" , &i2c1_ick,CK_242X ), +CLK (NULL ,"i2c1_fck" , &i2c1_fck,CK_242X ), +CLK ("omap_i2c.2" ,"ick" , &i2c2_ick,CK_242X ), +CLK (NULL ,"i2c2_ick" , &i2c2_ick,CK_242X ), +CLK (NULL ,"i2c2_fck" , &i2c2_fck,CK_242X ), +CLK (NULL ,"gpmc_fck" , &gpmc_fck,CK_242X ), +CLK (NULL ,"sdma_fck" , &sdma_fck,CK_242X ), +CLK (NULL ,"sdma_ick" , &sdma_ick,CK_242X ), +CLK (NULL ,"sdrc_ick" , &sdrc_ick,CK_242X ), +CLK (NULL ,"vlynq_ick" , &vlynq_ick,CK_242X ), +CLK (NULL ,"vlynq_fck" , &vlynq_fck,CK_242X ), +CLK (NULL ,"des_ick" , &des_ick,CK_242X ), +CLK ("omap-sham" ,"ick" , &sha_ick,CK_242X ), +CLK (NULL ,"sha_ick" , &sha_ick,CK_242X ), +CLK ("omap_rng" ,"ick" , &rng_ick,CK_242X ), +CLK (NULL ,"rng_ick" , &rng_ick,CK_242X ), +CLK ("omap-aes" ,"ick" , &aes_ick,CK_242X ), +CLK (NULL ,"aes_ick" , &aes_ick,CK_242X ), +CLK (NULL ,"pka_ick" , &pka_ick,CK_242X ), +CLK (NULL ,"usb_fck" , &usb_fck,CK_242X ), +CLK ("musb-hdrc" ,"fck" , &osc_ck,CK_242X ), +CLK ("omap_timer.1" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.2" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.3" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.4" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.5" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.6" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.7" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.8" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.9" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.10" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.11" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.12" ,"32k_ck" , &func_32k_ck,CK_243X ), +CLK ("omap_timer.1" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.2" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.3" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.4" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.5" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.6" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.7" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.8" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.9" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.10" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.11" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.12" ,"sys_ck" , &sys_ck,CK_243X ), +CLK ("omap_timer.1" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.2" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.3" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.4" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.5" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.6" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.7" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.8" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.9" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.10" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.11" ,"alt_ck" , &alt_ck,CK_243X ), +CLK ("omap_timer.12" ,"alt_ck" , &alt_ck,CK_243X ), +}; + +static const char *enable_init_clks[] = { +"apll96_ck" , +"apll54_ck" , +"sync_32k_ick" , +"omapctrl_ick" , +"gpmc_fck" , +"sdrc_ick" , +}; + +/* +* init code +*/ + +int __init omap2420_clk_init (void ) +{ +const struct prcm_config *prcm; +struct omap_clk *c; +unsigned long clkrate; + + prcm_clksrc_ctrl =OMAP2420_PRCM_CLKSRC_CTRL ; + cm_idlest_pll =OMAP_CM_REGADDR (PLL_MOD ,CM_IDLEST ); + cpu_mask =RATE_IN_242X ; + rate_table = omap2420_rate_table; + clkrate =omap2xxx_clk_get_core_rate (&dpll_ck_hw); +for (prcm = rate_table; prcm->mpu_speed; prcm++) { +if (!(prcm->flags & cpu_mask)) +continue ; +if (prcm->xtal_speed != sys_ck.rate) +continue ; +if (prcm->dpll_speed <= clkrate) +break ; + } + + curr_prcm_set = prcm; + +/* Check the MPU rate set by bootloader */ +for (c = omap2420_clks; c < omap2420_clks +ARRAY_SIZE (omap2420_clks); + c++) { +clkdev_add (&c->lk); +if (!__clk_init (NULL , c->lk.clk)) +omap2_init_clk_hw_omap_clocks (c->lk.clk); + } + +omap2_clk_disable_autoidle_all (); + +omap2_clk_enable_init_clocks (enable_init_clks, +ARRAY_SIZE (enable_init_clks)); + +pr_info ("Clocking rate (Crystal/DPLL/MPU): %ld.%01ld/%ld/%ld MHz\n" , + (clk_get_rate (&sys_ck) /1000000 ), + (clk_get_rate (&sys_ck) /100000 ) %10 , + (clk_get_rate (&dpll_ck) /1000000 ), + (clk_get_rate (&mpu_ck) /1000000 )) ; + +/* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */ + vclk =clk_get (NULL ,"virt_prcm_set" ); + sclk =clk_get (NULL ,"sys_ck" ); + dclk =clk_get (NULL ,"dpll_ck" ); + dclk_hw =__clk_get_hw (dclk); + +return 0 ; +}
arch/arm/mach-omap2/cclock2430_data.c new file +2434 -0
694 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.7.1
Part of the diff is not shown here. View the raw message.
PATCH 21/29 ARM: omap: clk: Switch to COMMON clk
In reply to Rajendra NayakSelect COMMON_CLK for ARCH_OMAP2 and switch
over to using new data files for OMAP2/3/4.
The older data files which get removed in subsequent patches.
--- arch/arm/mach-omap2/Kconfig | 1 + arch/arm/mach-omap2/Makefile | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-)
arch/arm/mach-omap2/Kconfig +1 -0
@@ -18,6 +18,7 @@ config ARCH_OMAP2PLUS_TYPICAL select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4 select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4 select HIGHMEM + select COMMON_CLK help Compile a kernel suitable for booting most boards
arch/arm/mach-omap2/Makefile +4 -4
@@ -137,14 +137,14 @@ obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_apll.o clkt2xxx_osc.o obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o clkt_iclk.o -obj-$(CONFIG_SOC_OMAP2420) += clock2420_data.o -obj-$(CONFIG_SOC_OMAP2430) += clock2430.o clock2430_data.o +obj-$(CONFIG_SOC_OMAP2420) += cclock2420_data.o +obj-$(CONFIG_SOC_OMAP2430) += clock2430.o cclock2430_data.o obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o obj-$(CONFIG_ARCH_OMAP3) += clock34xx.o clkt34xx_dpll3m2.o obj-$(CONFIG_ARCH_OMAP3) += clock3517.o clock36xx.o -obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o clock3xxx_data.o +obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o cclock3xxx_data.o obj-$(CONFIG_ARCH_OMAP3) += clkt_iclk.o -obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o +obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) cclock44xx_data.o obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o dpll44xx.o # OMAP2 clock rate set data (old "OPP" data)
Signature · 1 line
1.7.1
PATCH 22/29 ARM: omap: clk: Use plat/clock.c only for OMAP1
In reply to Rajendra Nayak--- arch/arm/plat-omap/Makefile | 3 ++- arch/arm/plat-omap/clock.c | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-)
arch/arm/plat-omap/Makefile +2 -1
@@ -3,12 +3,13 @@ # # Common support -obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ +obj-y := common.o sram.o devices.o dma.o mux.o \ usb.o fb.o counter_32k.o obj-m := obj-n := obj- := +obj-$(CONFIG_ARCH_OMAP1) += clock.o # omap_device support (OMAP2+ only at the moment) obj-$(CONFIG_ARCH_OMAP2) += omap_device.o obj-$(CONFIG_ARCH_OMAP3) += omap_device.o
arch/arm/plat-omap/clock.c +0 -2
@@ -10,7 +10,6 @@* it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#ifndef CONFIG_COMMON_CLK #include <linux/kernel.h> #include <linux/init.h> #include <linux/list.h>
@@ -568,4 +567,3 @@ err_out:late_initcall (clk_debugfs_init);#endif /* defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) */ -#endif /* CONFIG_COMMON_CLK */
Signature · 1 line
1.7.1
PATCH 23/29 ARM: omap: hwmod: Cleanup !CONFIG_COMMON_CLK parts
In reply to Rajendra NayakClean all #ifdef's added as part of fixing the clkdm accesses from hwmod.
--- arch/arm/mach-omap2/omap_hwmod.c | 14 -------------- 1 files changed, 0 insertions(+), 14 deletions(-)
arch/arm/mach-omap2/omap_hwmod.c +0 -14
@@ -130,11 +130,7 @@#include <linux/kernel.h> #include <linux/errno.h> #include <linux/io.h> -#ifdef CONFIG_COMMON_CLK #include <linux/clk-provider.h> -#else -#include <linux/clk.h> -#endif #include <linux/delay.h> #include <linux/err.h> #include <linux/list.h>
@@ -550,12 +546,8 @@ struct clockdomain *_get_clkdm(struct omap_hwmod *oh)if (oh->clkdm) {return oh->clkdm; }else if (oh->_clk) { -#ifdef CONFIG_COMMON_CLK clk =to_clk_hw_omap (__clk_get_hw (oh->_clk));return clk->clkdm; -#else -return oh->_clk->clkdm; -#endif }return NULL ; }
@@ -3014,9 +3006,7 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)struct clk *c;struct omap_hwmod_ocp_if *oi;struct clockdomain *clkdm; -#ifdef CONFIG_COMMON_CLK struct clk_hw_omap *clk; -#endif if (!oh)return NULL ;
@@ -3033,12 +3023,8 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh) c = oi->_clk; } -#ifdef CONFIG_COMMON_CLK clk =to_clk_hw_omap (__clk_get_hw (c)); clkdm = clk->clkdm; -#else - clkdm = c->clkdm; -#endif if (!clkdm)return NULL ;
Signature · 1 line
1.7.1
PATCH 24/29 ARM: omap4: clk: Cleanup !CONFIG_COMMON_CLK parts
In reply to Rajendra NayakClean all #ifdef's added to OMAP4 clock code to make it COMMON clk ready, now that CONFIG_COMMON_CLK is enabled.
--- arch/arm/mach-omap2/clkt_clksel.c | 204 --------------------- arch/arm/mach-omap2/clkt_dpll.c | 50 ----- arch/arm/mach-omap2/clkt_iclk.c | 46 ----- arch/arm/mach-omap2/clock.c | 300 ------------------------------- arch/arm/mach-omap2/clock.h | 45 ----- arch/arm/mach-omap2/clock_common_data.c | 7 +- arch/arm/mach-omap2/dpll3xxx.c | 212 +--------------------- arch/arm/mach-omap2/dpll44xx.c | 33 ---- arch/arm/mach-omap2/io.c | 18 -- 9 files changed, 3 insertions(+), 912 deletions(-)
arch/arm/mach-omap2/clkt_clksel.c +0 -204
@@ -41,11 +41,7 @@#include <linux/kernel.h> #include <linux/errno.h> -#ifdef CONFIG_COMMON_CLK #include <linux/clk-provider.h> -#else -#include <linux/clk.h> -#endif #include <linux/io.h> #include <linux/bug.h>
@@ -64,11 +60,7 @@* the element associated with the supplied parent clock address. * Returns a pointer to the struct clksel on success or NULL on error. */ -#ifdef CONFIG_COMMON_CLK static const struct clksel *_get_clksel_by_parent (struct clk_hw_omap *clk, -#else -static const struct clksel *_get_clksel_by_parent (struct clk *clk, -#endifstruct clk *src_clk) {const struct clksel *clks;
@@ -85,11 +77,7 @@ static const struct clksel *_get_clksel_by_parent(struct clk *clk,WARN (1 ,"clock: Could not find parent clock %s in clksel array " "of clock %s\n" ,__clk_get_name (src_clk), -#ifdef CONFIG_COMMON_CLK__clk_get_name (clk->hw.clk)); -#else - __clk_get_name(clk)); -#endif return NULL ; }
@@ -97,66 +85,6 @@ static const struct clksel *_get_clksel_by_parent(struct clk *clk, }/** -* _get_div_and_fieldval() - find the new clksel divisor and field value to use -* @src_clk: planned new parent struct clk * -* @clk: struct clk * that is being reparented -* @field_val: pointer to a u32 to contain the register data for the divisor -* -* Given an intended new parent struct clk * @src_clk, and the struct -* clk * @clk to the clock that is being reparented, find the -* appropriate rate divisor for the new clock (returned as the return -* value), and the corresponding register bitfield data to program to -* reach that divisor (returned in the u32 pointed to by @field_val). -* Returns 0 on error, or returns the newly-selected divisor upon -* success (in this latter case, the corresponding register bitfield -* value is passed back in the variable pointed to by @field_val) -*/ -#ifndef CONFIG_COMMON_CLK -static u8 _get_div_and_fieldval (struct clk *src_clk,struct clk *clk, -u32 *field_val) -{ -const struct clksel *clks; -const struct clksel_rate *clkr, *max_clkr =NULL ; -u8 max_div =0 ; - - clks =_get_clksel_by_parent (clk, src_clk); -if (!clks) -return 0 ; - -/* -* Find the highest divisor (e.g., the one resulting in the -* lowest rate) to use as the default. This should avoid -* clock rates that are too high for the device. XXX A better -* solution here would be to try to determine if there is a -* divisor matching the original clock rate before the parent -* switch, and if it cannot be found, to fall back to the -* highest divisor. -*/ -for (clkr = clks->rates; clkr->div; clkr++) { -if (!(clkr->flags & cpu_mask)) -continue ; - -if (clkr->div > max_div) { - max_div = clkr->div; - max_clkr = clkr; - } - } - -if (max_div ==0 ) { -/* This indicates an error in the clksel data */ -WARN (1 ,"clock: Could not find divisor for clock %s parent %s" -"\n" ,__clk_get_name (clk), -__clk_get_name (__clk_get_parent (src_clk))); -return 0 ; - } - - *field_val = max_clkr->val; - -return max_div; -} -#endif - -/** * _write_clksel_reg() - program a clock's clksel register in hardware * @clk: struct clk * to program * @v: clksel bitfield value to program (with LSB at bit 0)
@@ -169,11 +97,7 @@ static u8 _get_div_and_fieldval(struct clk *src_clk, struct clk *clk,* take into account any time the hardware might take to switch the * clock source. */ -#ifdef CONFIG_COMMON_CLK static void _write_clksel_reg (struct clk_hw_omap *clk,u32 field_val) -#else -static void _write_clksel_reg(struct clk *clk, u32 field_val) -#endif {u32 v;
@@ -196,21 +120,13 @@ static void _write_clksel_reg(struct clk *clk, u32 field_val)* before calling. Returns 0 on error or returns the actual integer divisor * upon success. */ -#ifdef CONFIG_COMMON_CLK static u32 _clksel_to_divisor (struct clk_hw_omap *clk,u32 field_val) -#else -static u32 _clksel_to_divisor(struct clk *clk, u32 field_val) -#endif {const struct clksel *clks;const struct clksel_rate *clkr;struct clk *parent; -#ifdef CONFIG_COMMON_CLK parent =__clk_get_parent (clk->hw.clk); -#else - parent =__clk_get_parent (clk); -#endif clks =_get_clksel_by_parent (clk, parent);if (!clks)
@@ -228,11 +144,7 @@ static u32 _clksel_to_divisor(struct clk *clk, u32 field_val)/* This indicates a data error */ WARN (1 ,"clock: Could not find fieldval %d for clock %s parent " "%s\n" , field_val, -#ifdef CONFIG_COMMON_CLK__clk_get_name (clk->hw.clk), -#else -__clk_get_name (clk), -#endif__clk_get_name (parent));return 0 ; }
@@ -250,11 +162,7 @@ static u32 _clksel_to_divisor(struct clk *clk, u32 field_val)* register field value _before_ left-shifting (i.e., LSB is at bit * 0); or returns 0xFFFFFFFF (~0) upon error. */ -#ifdef CONFIG_COMMON_CLK static u32 _divisor_to_clksel (struct clk_hw_omap *clk,u32 div) -#else -static u32 _divisor_to_clksel(struct clk *clk, u32 div) -#endif {const struct clksel *clks;const struct clksel_rate *clkr;
@@ -263,11 +171,7 @@ static u32 _divisor_to_clksel(struct clk *clk, u32 div)/* should never happen */ WARN_ON (div ==0 ); -#ifdef CONFIG_COMMON_CLK parent =__clk_get_parent (clk->hw.clk); -#else - parent =__clk_get_parent (clk); -#endif clks =_get_clksel_by_parent (clk, parent);if (!clks)return ~0 ;
@@ -283,11 +187,7 @@ static u32 _divisor_to_clksel(struct clk *clk, u32 div)if (!clkr->div) {pr_err ("clock: Could not find divisor %d for clock %s parent " "%s\n" , div, -#ifdef CONFIG_COMMON_CLK__clk_get_name (clk->hw.clk), -#else -__clk_get_name (clk), -#endif__clk_get_name (parent));return ~0 ; }
@@ -303,11 +203,7 @@ static u32 _divisor_to_clksel(struct clk *clk, u32 div)* into the hardware, convert it into the actual divisor value, and * return it; or return 0 on error. */ -#ifdef CONFIG_COMMON_CLK static u32 _read_divisor (struct clk_hw_omap *clk) -#else -static u32 _read_divisor(struct clk *clk) -#endif {u32 v;
@@ -335,12 +231,8 @@ static u32 _read_divisor(struct clk *clk)* * Returns the rounded clock rate or returns 0xffffffff on error. */ -#ifdef CONFIG_COMMON_CLK u32 omap2_clksel_round_rate_div (struct clk_hw_omap *clk,unsigned long target_rate, -#else -u32 omap2_clksel_round_rate_div (struct clk *clk,unsigned long target_rate, -#endifu32 *new_div) {unsigned long test_rate;
@@ -351,13 +243,8 @@ u32 omap2_clksel_round_rate_div(struct clk *clk, unsigned long target_rate,unsigned long parent_rate;const char *clk_name; -#ifdef CONFIG_COMMON_CLK parent =__clk_get_parent (clk->hw.clk); clk_name =__clk_get_name (clk->hw.clk); -#else - parent =__clk_get_parent (clk); - clk_name =__clk_get_name (clk); -#endif parent_rate =__clk_get_rate (parent);if (!clk->clksel || !clk->clksel_mask)
@@ -418,14 +305,9 @@ u32 omap2_clksel_round_rate_div(struct clk *clk, unsigned long target_rate,* to. Update @clk's .parent field with the appropriate clk ptr. No * return value. */ -#ifdef CONFIG_COMMON_CLK u8 omap2_init_clksel_parent (struct clk_hw *hw) {struct clk_hw_omap *clk =to_clk_hw_omap (hw); -#else -void omap2_init_clksel_parent (struct clk *clk) -{ -#endif const struct clksel *clks;const struct clksel_rate *clkr;u32 r, found =0 ;
@@ -433,17 +315,10 @@ void omap2_init_clksel_parent(struct clk *clk)const char *clk_name;if (!clk->clksel || !clk->clksel_mask) -#ifdef CONFIG_COMMON_CLK return -EINVAL ; parent =__clk_get_parent (hw->clk); clk_name =__clk_get_name (hw->clk); -#else -return ; - - parent =__clk_get_parent (clk); - clk_name =__clk_get_name (clk); -#endif r =__raw_readl (clk->clksel_reg) & clk->clksel_mask; r >>=__ffs (clk->clksel_mask);
@@ -462,14 +337,8 @@ void omap2_init_clksel_parent(struct clk *clk) ((parent) ?__clk_get_name (parent) : "NULL")); -#ifdef CONFIG_COMMON_CLK };return r; -#else -clk_reparent (clk, clks->parent); - }; - found =1 ; -#endif } } }
@@ -478,11 +347,7 @@ void omap2_init_clksel_parent(struct clk *clk)WARN (!found,"clock: %s: init parent: could not find regval %0x\n" , clk_name, r); -#ifdef CONFIG_COMMON_CLK return -ENODEV ; -#else -return ; -#endif }/**
@@ -494,7 +359,6 @@ void omap2_init_clksel_parent(struct clk *clk)* function. Returns the clock's current rate, based on its parent's rate * and its current divisor setting in the hardware. */ -#ifdef CONFIG_COMMON_CLK unsigned long omap2_clksel_recalc (struct clk_hw *hw,unsigned long parent_rate) {unsigned long rate;
@@ -515,27 +379,6 @@ unsigned long omap2_clksel_recalc(struct clk_hw *hw, unsigned long parent_rate)return rate; } -#else -unsigned long omap2_clksel_recalc (struct clk *clk) -{ -unsigned long rate; -u32 div =0 ; -struct clk *parent; - - div =_read_divisor (clk); -if (div ==0 ) -return __clk_get_rate (clk); - - parent =__clk_get_parent (clk); - rate =__clk_get_rate (parent) / div; - -pr_debug ("clock: %s: recalc'd rate is %ld (div %d)\n" , -__clk_get_name (clk), - rate, div); - -return rate; -} -#endif /** * omap2_clksel_round_rate() - find rounded rate for the given clock and rate
@@ -548,15 +391,10 @@ unsigned long omap2_clksel_recalc(struct clk *clk)* * Returns the rounded clock rate or returns 0xffffffff on error. */ -#ifdef CONFIG_COMMON_CLK long omap2_clksel_round_rate (struct clk_hw *hw,unsigned long target_rate,unsigned long *parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw); -#else -long omap2_clksel_round_rate (struct clk *clk,unsigned long target_rate) -{ -#endif u32 new_div;return omap2_clksel_round_rate_div (clk, target_rate, &new_div);
@@ -577,15 +415,10 @@ long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate)* is changed, they will all be affected without any notification. * Returns -EINVAL upon error, or 0 upon success. */ -#ifdef CONFIG_COMMON_CLK int omap2_clksel_set_rate (struct clk_hw *hw,unsigned long rate,unsigned long parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw); -#else -int omap2_clksel_set_rate (struct clk *clk,unsigned long rate) -{ -#endif u32 field_val, validrate, new_div =0 ;if (!clk->clksel || !clk->clksel_mask)
@@ -602,15 +435,8 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long rate)_write_clksel_reg (clk, field_val);pr_debug ("clock: %s: set rate to %ld\n" , -#ifdef CONFIG_COMMON_CLK __clk_get_name (hw->clk),__clk_get_rate (hw->clk)); -#else -__clk_get_name (clk), - __clk_get_rate(clk)); - - clk->rate =__clk_get_rate (__clk_get_parent (clk)) / new_div; -#endif return 0 ; }
@@ -634,7 +460,6 @@ int omap2_clksel_set_rate(struct clk *clk, unsigned long rate)* affected without any notification. Returns -EINVAL upon error, or * 0 upon success. */ -#ifdef CONFIG_COMMON_CLK int omap2_clksel_set_parent (struct clk_hw *hw,u8 field_val) {struct clk_hw_omap *clk =to_clk_hw_omap (hw);
@@ -645,32 +470,3 @@ int omap2_clksel_set_parent(struct clk_hw *hw, u8 field_val)_write_clksel_reg (clk, field_val);return 0 ; } -#else -int omap2_clksel_set_parent (struct clk *clk,struct clk *new_parent) -{ -u32 field_val =0 ; -u32 parent_div; - -if (!clk->clksel || !clk->clksel_mask) -return -EINVAL ; - - parent_div =_get_div_and_fieldval (new_parent, clk, &field_val); -if (!parent_div) -return -EINVAL ; -_write_clksel_reg (clk, field_val); - -clk_reparent (clk, new_parent); - -/* CLKSEL clocks follow their parents' rates, divided by a divisor */ - clk->rate =__clk_get_rate (new_parent); - -if (parent_div >0 ) -__clk_get_rate (clk) /= parent_div; -pr_debug ("clock: %s: set parent to %s (new rate %ld)\n" , -__clk_get_name (clk), -__clk_get_name (__clk_get_parent (clk)), -__clk_get_rate (clk)); - -return 0 ; -} -#endif
arch/arm/mach-omap2/clkt_dpll.c +0 -50
128 lines not on this page · raw message
arch/arm/mach-omap2/clkt_iclk.c +0 -46
75 lines not on this page · raw message
arch/arm/mach-omap2/clock.c +0 -300
384 lines not on this page · raw message
arch/arm/mach-omap2/clock.h +0 -45
93 lines not on this page · raw message
arch/arm/mach-omap2/clock_common_data.c +1 -6
@@ -16,6 +16,7 @@* OMAP3xxx clock definition files. */ +#include <linux/clk-private.h> #include "clock.h" /* clksel_rate data common to 24xx/343x */
@@ -44,10 +45,6 @@ const struct clksel_rate dsp_ick_rates[] = { { .div = 0 }, }; -#ifdef CONFIG_COMMON_CLK - -#include <linux/clk-private.h> -static struct clk_ops dummy_ck_ops = {};struct clk dummy_ck = {
@@ -55,5 +52,3 @@ struct clk dummy_ck = { .ops = &dummy_ck_ops, .flags = CLK_IS_BASIC, }; - -#endif
arch/arm/mach-omap2/dpll3xxx.c +2 -210
412 lines not on this page · raw message
arch/arm/mach-omap2/dpll44xx.c +0 -33
@@ -23,11 +23,7 @@#include "cm-regbits-44xx.h" /* Supported only on OMAP4 */ -#ifdef CONFIG_COMMON_CLK int omap4_dpllmx_gatectrl_read (struct clk_hw_omap *clk) -#else -int omap4_dpllmx_gatectrl_read(struct clk *clk) -#endif {u32 v;u32 mask;
@@ -46,11 +42,7 @@ int omap4_dpllmx_gatectrl_read(struct clk *clk)return v; } -#ifdef CONFIG_COMMON_CLK void omap4_dpllmx_allow_gatectrl (struct clk_hw_omap *clk) -#else -void omap4_dpllmx_allow_gatectrl(struct clk *clk) -#endif {u32 v;u32 mask;
@@ -68,11 +60,7 @@ void omap4_dpllmx_allow_gatectrl(struct clk *clk)__raw_writel (v, clk->clksel_reg); } -#ifdef CONFIG_COMMON_CLK void omap4_dpllmx_deny_gatectrl (struct clk_hw_omap *clk) -#else -void omap4_dpllmx_deny_gatectrl(struct clk *clk) -#endif {u32 v;u32 mask;
@@ -90,17 +78,10 @@ void omap4_dpllmx_deny_gatectrl(struct clk *clk)__raw_writel (v, clk->clksel_reg); } -#ifdef CONFIG_COMMON_CLK const struct clk_hw_omap_ops clkhwops_omap4_dpllmx = { .allow_idle = omap4_dpllmx_allow_gatectrl, .deny_idle = omap4_dpllmx_deny_gatectrl, }; -#else -const struct clkops clkops_omap4_dpllmx_ops = { - .allow_idle = omap4_dpllmx_allow_gatectrl, - .deny_idle = omap4_dpllmx_deny_gatectrl, -}; -#endif /** * omap4_dpll_regm4xen_recalc - compute DPLL rate, considering REGM4XEN bit
@@ -111,15 +92,10 @@ const struct clkops clkops_omap4_dpllmx_ops = {* OMAP4 ABE DPLL. Returns the DPLL's output rate (before M-dividers) * upon success, or 0 upon error. */ -#ifdef CONFIG_COMMON_CLK unsigned long omap4_dpll_regm4xen_recalc (struct clk_hw *hw,unsigned long parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw); -#else -unsigned long omap4_dpll_regm4xen_recalc (struct clk *clk) -{ -#endif u32 v;unsigned long rate;struct dpll_data *dd;
@@ -151,15 +127,10 @@ unsigned long omap4_dpll_regm4xen_recalc(struct clk *clk)* M-dividers) upon success, -EINVAL if @clk is null or not a DPLL, or * ~0 if an error occurred in omap2_dpll_round_rate(). */ -#ifdef CONFIG_COMMON_CLK long omap4_dpll_regm4xen_round_rate (struct clk_hw *hw,unsigned long target_rate,unsigned long *parent_rate) {struct clk_hw_omap *clk =to_clk_hw_omap (hw); -#else -long omap4_dpll_regm4xen_round_rate (struct clk *clk,unsigned long target_rate) -{ -#endif u32 v;struct dpll_data *dd;long r;
@@ -175,11 +146,7 @@ long omap4_dpll_regm4xen_round_rate(struct clk *clk, unsigned long target_rate)if (v) target_rate = target_rate /OMAP4430_REGM4XEN_MULT ; -#ifdef CONFIG_COMMON_CLK r =omap2_dpll_round_rate (hw, target_rate,NULL ); -#else - r =omap2_dpll_round_rate (clk, target_rate); -#endif if (r == ~0 )return r;
arch/arm/mach-omap2/io.c +0 -18
@@ -356,9 +356,7 @@ void __init omap2420_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap2_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all(); -#endif }#endif
@@ -381,9 +379,7 @@ void __init omap2430_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap2_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all(); -#endif }#endif
@@ -445,9 +441,7 @@ void __init omap3_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all (); -#endif }void __init omap3430_init_late (void )
@@ -455,9 +449,7 @@ void __init omap3430_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all (); -#endif }void __init omap35xx_init_late (void )
@@ -465,9 +457,7 @@ void __init omap35xx_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all (); -#endif }void __init omap3630_init_late (void )
@@ -475,9 +465,7 @@ void __init omap3630_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all (); -#endif }void __init am35xx_init_late (void )
@@ -485,9 +473,7 @@ void __init am35xx_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all (); -#endif }void __init ti81xx_init_late (void )
@@ -495,9 +481,7 @@ void __init ti81xx_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap3_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all(); -#endif }#endif
@@ -521,9 +505,7 @@ void __init omap4430_init_late(void)omap_mux_late_init ();omap2_common_pm_late_init ();omap4_pm_init (); -#ifdef CONFIG_COMMON_CLK omap2_clk_enable_autoidle_all(); -#endif }#endif
Signature · 1 line
1.7.1