4 #include <linux/kernel.h>
5 #include <linux/module.h>
6 #include <linux/wakelock.h>
8 #include <linux/init.h>
9 #include <linux/time.h>
10 #include <linux/interrupt.h>
11 #include <linux/delay.h>
12 #include <linux/errno.h>
13 #include <linux/err.h>
14 #include <linux/platform_device.h>
15 #include <linux/clk.h>
16 #include <linux/cpufreq.h>
17 #include <linux/slab.h>
20 #include <mach/board.h>
21 #include <mach/iomux.h>
25 #define i2c_dbg(dev, format, arg...) \
26 dev_printk(KERN_INFO , dev , format , ## arg)
28 #define i2c_dbg(dev, format, arg...)
31 #define i2c_writel writel_relaxed
32 #define i2c_readl readl_relaxed
34 #define I2C_WAIT_TIMEOUT 200 //100ms
36 #define rk30_set_bit(p, v, b) (((p) & ~(1 << (b))) | ((v) << (b)))
37 #define rk30_get_bit(p, b) (((p) & (1 << (b))) >> (b))
39 #define rk30_set_bits(p, v, b, m) (((p) & ~(m)) | ((v) << (b)))
40 #define rk30_get_bits(p, b, m) (((p) & (m)) >> (b))
42 #define rk30_ceil(x, y) \
43 ({ unsigned long __x = (x), __y = (y); (__x + __y - 1) / __y; })
45 #define GRF_I2C_CON_BASE (RK30_GRF_BASE + GRF_SOC_CON1)
46 #define I2C_ADAP_SEL_BIT(nr) ((nr) + 11)
47 #define I2C_ADAP_SEL_MASK(nr) ((nr) + 27)
57 wait_queue_head_t wait;
58 unsigned int suspended:1;
65 unsigned int tx_setup;
68 enum rk30_i2c_state state;
69 unsigned long clkrate;
72 void __iomem *con_base;
75 struct resource *ioarea;
76 struct i2c_adapter adap;
78 unsigned long scl_rate;
79 unsigned long i2c_rate;
84 struct wake_lock idlelock[5];
85 int is_div_from_arm[5];
87 #ifdef CONFIG_CPU_FREQ
88 struct notifier_block freq_transition;
91 void (*i2c_init_hw)(struct rk30_i2c *, unsigned long scl_rate);
92 void (*i2c_set_clk)(struct rk30_i2c *, unsigned long);
93 irqreturn_t (*i2c_irq)(int, void *);
95 void i2c_adap_sel(struct rk30_i2c *i2c, int nr, int adap_type);
96 int i2c_add_rk29_adapter(struct i2c_adapter *);
97 int i2c_add_rk30_adapter(struct i2c_adapter *);