0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __CLK_DAVINCI_PSC_H__
0009 #define __CLK_DAVINCI_PSC_H__
0010
0011 #include <linux/clk-provider.h>
0012 #include <linux/types.h>
0013
0014
0015 #define LPSC_ALWAYS_ENABLED BIT(0)
0016 #define LPSC_SET_RATE_PARENT BIT(1)
0017 #define LPSC_FORCE BIT(2)
0018 #define LPSC_LOCAL_RESET BIT(3)
0019
0020 struct davinci_lpsc_clkdev_info {
0021 const char *con_id;
0022 const char *dev_id;
0023 };
0024
0025 #define LPSC_CLKDEV(c, d) { \
0026 .con_id = (c), \
0027 .dev_id = (d) \
0028 }
0029
0030 #define LPSC_CLKDEV1(n, c, d) \
0031 static const struct davinci_lpsc_clkdev_info n[] __initconst = { \
0032 LPSC_CLKDEV((c), (d)), \
0033 { } \
0034 }
0035
0036 #define LPSC_CLKDEV2(n, c1, d1, c2, d2) \
0037 static const struct davinci_lpsc_clkdev_info n[] __initconst = { \
0038 LPSC_CLKDEV((c1), (d1)), \
0039 LPSC_CLKDEV((c2), (d2)), \
0040 { } \
0041 }
0042
0043 #define LPSC_CLKDEV3(n, c1, d1, c2, d2, c3, d3) \
0044 static const struct davinci_lpsc_clkdev_info n[] __initconst = { \
0045 LPSC_CLKDEV((c1), (d1)), \
0046 LPSC_CLKDEV((c2), (d2)), \
0047 LPSC_CLKDEV((c3), (d3)), \
0048 { } \
0049 }
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060 struct davinci_lpsc_clk_info {
0061 const char *name;
0062 const char *parent;
0063 const struct davinci_lpsc_clkdev_info *cdevs;
0064 u32 md;
0065 u32 pd;
0066 unsigned long flags;
0067 };
0068
0069 #define LPSC(m, d, n, p, c, f) \
0070 { \
0071 .name = #n, \
0072 .parent = #p, \
0073 .cdevs = (c), \
0074 .md = (m), \
0075 .pd = (d), \
0076 .flags = (f), \
0077 }
0078
0079 int davinci_psc_register_clocks(struct device *dev,
0080 const struct davinci_lpsc_clk_info *info,
0081 u8 num_clks,
0082 void __iomem *base);
0083
0084 int of_davinci_psc_clk_init(struct device *dev,
0085 const struct davinci_lpsc_clk_info *info,
0086 u8 num_clks,
0087 void __iomem *base);
0088
0089
0090
0091 struct davinci_psc_init_data {
0092 struct clk_bulk_data *parent_clks;
0093 int num_parent_clks;
0094 int (*psc_init)(struct device *dev, void __iomem *base);
0095 };
0096
0097 #ifdef CONFIG_ARCH_DAVINCI_DA830
0098 extern const struct davinci_psc_init_data da830_psc0_init_data;
0099 extern const struct davinci_psc_init_data da830_psc1_init_data;
0100 #endif
0101 #ifdef CONFIG_ARCH_DAVINCI_DA850
0102 extern const struct davinci_psc_init_data da850_psc0_init_data;
0103 extern const struct davinci_psc_init_data da850_psc1_init_data;
0104 extern const struct davinci_psc_init_data of_da850_psc0_init_data;
0105 extern const struct davinci_psc_init_data of_da850_psc1_init_data;
0106 #endif
0107 #ifdef CONFIG_ARCH_DAVINCI_DM355
0108 extern const struct davinci_psc_init_data dm355_psc_init_data;
0109 #endif
0110 #ifdef CONFIG_ARCH_DAVINCI_DM365
0111 extern const struct davinci_psc_init_data dm365_psc_init_data;
0112 #endif
0113 #ifdef CONFIG_ARCH_DAVINCI_DM644x
0114 extern const struct davinci_psc_init_data dm644x_psc_init_data;
0115 #endif
0116 #ifdef CONFIG_ARCH_DAVINCI_DM646x
0117 extern const struct davinci_psc_init_data dm646x_psc_init_data;
0118 #endif
0119
0120 #endif