clock.h 1.8 KB
Newer Older
1 2 3 4 5
#ifndef __ASM_SH_CLOCK_H
#define __ASM_SH_CLOCK_H

#include <linux/list.h>
#include <linux/seq_file.h>
P
Paul Mundt 已提交
6
#include <linux/clk.h>
7
#include <linux/err.h>
8 9 10 11 12 13 14

struct clk;

struct clk_ops {
	void (*init)(struct clk *clk);
	void (*enable)(struct clk *clk);
	void (*disable)(struct clk *clk);
15
	unsigned long (*recalc)(struct clk *clk);
16
	int (*set_rate)(struct clk *clk, unsigned long rate, int algo_id);
17
	int (*set_parent)(struct clk *clk, struct clk *parent);
18
	long (*round_rate)(struct clk *clk, unsigned long rate);
19 20 21 22 23
};

struct clk {
	struct list_head	node;
	const char		*name;
P
Paul Mundt 已提交
24
	int			id;
25 26 27 28 29
	struct module		*owner;

	struct clk		*parent;
	struct clk_ops		*ops;

30 31 32
	struct list_head	children;
	struct list_head	sibling;	/* node for children */

33
	int			usecount;
34 35 36

	unsigned long		rate;
	unsigned long		flags;
M
Magnus Damm 已提交
37
	unsigned long		arch_flags;
38 39
};

40
#define CLK_ENABLE_ON_INIT	(1 << 0)
41 42 43

/* Should be defined by processor-specific code */
void arch_init_clk_ops(struct clk_ops **, int type);
P
Paul Mundt 已提交
44
int __init arch_clk_init(void);
45 46 47

/* arch/sh/kernel/cpu/clock.c */
int clk_init(void);
48 49 50
unsigned long followparent_recalc(struct clk *);
void recalculate_root_clocks(void);
void propagate_rate(struct clk *);
51 52 53 54
void clk_recalc_rate(struct clk *);
int clk_register(struct clk *);
void clk_unregister(struct clk *);

55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
/* the exported API, in addition to clk_set_rate */
/**
 * clk_set_rate_ex - set the clock rate for a clock source, with additional parameter
 * @clk: clock source
 * @rate: desired clock rate in Hz
 * @algo_id: algorithm id to be passed down to ops->set_rate
 *
 * Returns success (0) or negative errno.
 */
int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id);

enum clk_sh_algo_id {
	NO_CHANGE = 0,

	IUS_N1_N1,
	IUS_322,
	IUS_522,
	IUS_N11,

	SB_N1,

	SB3_N1,
	SB3_32,
	SB3_43,
	SB3_54,

	BP_N1,

	IP_N1,
};
85

86
#endif /* __ASM_SH_CLOCK_H */