/** * struct samsung_clk_provider - information about clock provider * @reg_base: virtual address for the register base * @dev: clock provider device needed for runtime PM * @lock: maintains exclusion between callbacks for a given clock-provider * @clk_data: holds clock related data like clk_hw* and number of clocks
*/ struct samsung_clk_provider { void __iomem *reg_base; struct device *dev;
spinlock_t lock; /* clk_data must be the last entry due to variable length 'hws' array */ struct clk_hw_onecell_data clk_data;
};
/** * struct samsung_clock_alias - information about mux clock * @id: platform specific id of the clock * @dev_name: name of the device to which this clock belongs * @alias: optional clock alias name to be assigned to this clock
*/ struct samsung_clock_alias { unsignedint id; constchar *dev_name; constchar *alias;
};
#define ALIAS(_id, dname, a) \
{ \
.id = _id, \
.dev_name = dname, \
.alias = a, \
}
#define MHZ (1000 * 1000)
/** * struct samsung_fixed_rate_clock - information about fixed-rate clock * @id: platform specific id of the clock * @name: name of this fixed-rate clock * @parent_name: optional parent clock name * @flags: optional fixed-rate clock flags * @fixed_rate: fixed clock rate of this clock
*/ struct samsung_fixed_rate_clock { unsignedint id; char *name; constchar *parent_name; unsignedlong flags; unsignedlong fixed_rate;
};
/** * struct samsung_mux_clock - information about mux clock * @id: platform specific id of the clock * @name: name of this mux clock * @parent_names: array of pointer to parent clock names * @num_parents: number of parents listed in @parent_names * @flags: optional flags for basic clock * @offset: offset of the register for configuring the mux * @shift: starting bit location of the mux control bit-field in @reg * @width: width of the mux control bit-field in @reg * @mux_flags: flags for mux-type clock
*/ struct samsung_mux_clock { unsignedint id; constchar *name; constchar *const *parent_names;
u8 num_parents; unsignedlong flags; unsignedlong offset;
u8 shift;
u8 width;
u8 mux_flags;
};
#define MUX(_id, cname, pnames, o, s, w) \
__MUX(_id, cname, pnames, o, s, w, CLK_SET_RATE_NO_REPARENT, 0)
#define MUX_F(_id, cname, pnames, o, s, w, f, mf) \
__MUX(_id, cname, pnames, o, s, w, (f) | CLK_SET_RATE_NO_REPARENT, mf)
/* Used by MUX clocks where reparenting on clock rate change is allowed. */ #define nMUX(_id, cname, pnames, o, s, w) \
__MUX(_id, cname, pnames, o, s, w, 0, 0)
#define nMUX_F(_id, cname, pnames, o, s, w, f, mf) \
__MUX(_id, cname, pnames, o, s, w, f, mf)
/** * struct samsung_div_clock - information about div clock * @id: platform specific id of the clock * @name: name of this div clock * @parent_name: name of the parent clock * @flags: optional flags for basic clock * @offset: offset of the register for configuring the div * @shift: starting bit location of the div control bit-field in @reg * @width: width of the bitfield * @div_flags: flags for div-type clock * @table: array of divider/value pairs ending with a div set to 0
*/ struct samsung_div_clock { unsignedint id; constchar *name; constchar *parent_name; unsignedlong flags; unsignedlong offset;
u8 shift;
u8 width;
u8 div_flags; struct clk_div_table *table;
};
#define DIV(_id, cname, pname, o, s, w) \
__DIV(_id, cname, pname, o, s, w, 0, 0, NULL)
#define DIV_F(_id, cname, pname, o, s, w, f, df) \
__DIV(_id, cname, pname, o, s, w, f, df, NULL)
#define DIV_T(_id, cname, pname, o, s, w, t) \
__DIV(_id, cname, pname, o, s, w, 0, 0, t)
/** * struct samsung_gate_clock - information about gate clock * @id: platform specific id of the clock * @name: name of this gate clock * @parent_name: name of the parent clock * @flags: optional flags for basic clock * @offset: offset of the register for configuring the gate * @bit_idx: bit index of the gate control bit-field in @reg * @gate_flags: flags for gate-type clock
*/ struct samsung_gate_clock { unsignedint id; constchar *name; constchar *parent_name; unsignedlong flags; unsignedlong offset;
u8 bit_idx;
u8 gate_flags;
};
/** * struct samsung_clk_reg_dump - register dump of clock controller registers * @offset: clock register offset from the controller base address * @value: the value to be register at offset
*/ struct samsung_clk_reg_dump {
u32 offset;
u32 value;
};
/** * struct samsung_pll_clock - information about pll clock * @id: platform specific id of the clock * @name: name of this pll clock * @parent_name: name of the parent clock * @flags: optional flags for basic clock * @con_offset: offset of the register for configuring the PLL * @lock_offset: offset of the register for locking the PLL * @type: type of PLL to be registered * @rate_table: array of PLL settings for possible PLL rates
*/ struct samsung_pll_clock { unsignedint id; constchar *name; constchar *parent_name; unsignedlong flags; int con_offset; int lock_offset; enum samsung_pll_type type; conststruct samsung_pll_rate_table *rate_table;
};
/** * struct samsung_cmu_info - all clocks information needed for CMU registration * @pll_clks: list of PLL clocks * @nr_pll_clks: count of clocks in @pll_clks * @mux_clks: list of mux clocks * @nr_mux_clks: count of clocks in @mux_clks * @div_clks: list of div clocks * @nr_div_clks: count of clocks in @div_clks * @gate_clks: list of gate clocks * @nr_gate_clks: count of clocks in @gate_clks * @fixed_clks: list of fixed clocks * @nr_fixed_clks: count clocks in @fixed_clks * @fixed_factor_clks: list of fixed factor clocks * @nr_fixed_factor_clks: count of clocks in @fixed_factor_clks * @nr_clk_ids: total number of clocks with IDs assigned * @cpu_clks: list of CPU clocks * @nr_cpu_clks: count of clocks in @cpu_clks * @clk_regs: list of clock registers * @nr_clk_regs: count of clock registers in @clk_regs * @suspend_regs: list of clock registers to set before suspend * @nr_suspend_regs: count of clock registers in @suspend_regs * @clk_name: name of the parent clock needed for CMU register access * @manual_plls: Enable manual control for PLL clocks
*/ struct samsung_cmu_info { conststruct samsung_pll_clock *pll_clks; unsignedint nr_pll_clks; conststruct samsung_mux_clock *mux_clks; unsignedint nr_mux_clks; conststruct samsung_div_clock *div_clks; unsignedint nr_div_clks; conststruct samsung_gate_clock *gate_clks; unsignedint nr_gate_clks; conststruct samsung_fixed_rate_clock *fixed_clks; unsignedint nr_fixed_clks; conststruct samsung_fixed_factor_clock *fixed_factor_clks; unsignedint nr_fixed_factor_clks; unsignedint nr_clk_ids; conststruct samsung_cpu_clock *cpu_clks; unsignedint nr_cpu_clks;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.