diff options
author | Tom Rini <trini@konsulko.com> | 2019-08-02 13:29:46 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2019-08-02 13:29:46 -0400 |
commit | 898c40c0d6f9e53dafcfdf6f870190faef6e088b (patch) | |
tree | 91f677f5973789885f16869c1c82d45fa987bd35 /include | |
parent | 7298d82d91940e7b4fb464a9d52c7051ddde2298 (diff) | |
parent | 4f895988adc021d96c02cbcbb7b899c57ecbae4a (diff) | |
download | u-boot-898c40c0d6f9e53dafcfdf6f870190faef6e088b.tar.gz |
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-clkWIP/02Aug2019
- Port more CCF code to work with i.MX8 devices.
Diffstat (limited to 'include')
-rw-r--r-- | include/clk.h | 9 | ||||
-rw-r--r-- | include/linux/clk-provider.h | 58 | ||||
-rw-r--r-- | include/sandbox-clk.h | 1 |
3 files changed, 68 insertions, 0 deletions
diff --git a/include/clk.h b/include/clk.h index f8f56d9cf0..2ebc905e04 100644 --- a/include/clk.h +++ b/include/clk.h @@ -356,4 +356,13 @@ static inline bool clk_valid(struct clk *clk) * @return zero on success, or -ENOENT on error */ int clk_get_by_id(ulong id, struct clk **clkp); + +/** + * clk_dev_binded() - Check whether the clk has a device binded + * + * @clk A pointer to the clk + * + * @return true on binded, or false on no + */ +bool clk_dev_binded(struct clk *clk); #endif diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 43a25e9c6a..02ff1a311a 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -8,6 +8,7 @@ */ #ifndef __LINUX_CLK_PROVIDER_H #define __LINUX_CLK_PROVIDER_H +#include <clk-uclass.h> static inline void clk_dm(ulong id, struct clk *clk) { @@ -66,6 +67,29 @@ struct clk_mux { }; #define to_clk_mux(_clk) container_of(_clk, struct clk_mux, clk) +extern const struct clk_ops clk_mux_ops; +u8 clk_mux_get_parent(struct clk *clk); + +struct clk_gate { + struct clk clk; + void __iomem *reg; + u8 bit_idx; + u8 flags; +#if CONFIG_IS_ENABLED(SANDBOX_CLK_CCF) + u32 io_gate_val; +#endif +}; + +#define to_clk_gate(_clk) container_of(_clk, struct clk_gate, clk) + +#define CLK_GATE_SET_TO_DISABLE BIT(0) +#define CLK_GATE_HIWORD_MASK BIT(1) + +extern const struct clk_ops clk_gate_ops; +struct clk *clk_register_gate(struct device *dev, const char *name, + const char *parent_name, unsigned long flags, + void __iomem *reg, u8 bit_idx, + u8 clk_gate_flags, spinlock_t *lock); struct clk_div_table { unsigned int val; @@ -94,6 +118,11 @@ struct clk_divider { #define CLK_DIVIDER_ROUND_CLOSEST BIT(4) #define CLK_DIVIDER_READ_ONLY BIT(5) #define CLK_DIVIDER_MAX_AT_ZERO BIT(6) +extern const struct clk_ops clk_divider_ops; +unsigned long divider_recalc_rate(struct clk *hw, unsigned long parent_rate, + unsigned int val, + const struct clk_div_table *table, + unsigned long flags, unsigned long width); struct clk_fixed_factor { struct clk clk; @@ -104,6 +133,35 @@ struct clk_fixed_factor { #define to_clk_fixed_factor(_clk) container_of(_clk, struct clk_fixed_factor,\ clk) +struct clk_fixed_rate { + struct clk clk; + unsigned long fixed_rate; +}; + +#define to_clk_fixed_rate(dev) ((struct clk_fixed_rate *)dev_get_platdata(dev)) + +struct clk_composite { + struct clk clk; + struct clk_ops ops; + + struct clk *mux; + struct clk *rate; + struct clk *gate; + + const struct clk_ops *mux_ops; + const struct clk_ops *rate_ops; + const struct clk_ops *gate_ops; +}; + +#define to_clk_composite(_clk) container_of(_clk, struct clk_composite, clk) + +struct clk *clk_register_composite(struct device *dev, const char *name, + const char * const *parent_names, int num_parents, + struct clk *mux_clk, const struct clk_ops *mux_ops, + struct clk *rate_clk, const struct clk_ops *rate_ops, + struct clk *gate_clk, const struct clk_ops *gate_ops, + unsigned long flags); + int clk_register(struct clk *clk, const char *drv_name, const char *name, const char *parent_name); diff --git a/include/sandbox-clk.h b/include/sandbox-clk.h index 37c9838f76..f449de1364 100644 --- a/include/sandbox-clk.h +++ b/include/sandbox-clk.h @@ -19,6 +19,7 @@ enum { SANDBOX_CLK_ECSPI1, SANDBOX_CLK_USDHC1_SEL, SANDBOX_CLK_USDHC2_SEL, + SANDBOX_CLK_I2C, }; enum sandbox_pllv3_type { |