#ifndef __I2C_KEYWEST_H__
#define __I2C_KEYWEST_H__

/* The Tumbler audio equalizer can be really slow sometimes */
#define POLL_TIMEOUT		(2*HZ)

/* Register indices */
typedef enum {
	reg_mode = 0,
	reg_control,
	reg_status,
	reg_isr,
	reg_ier,
	reg_addr,
	reg_subaddr,
	reg_data
} reg_t;


/* Mode register */
#define KW_I2C_MODE_100KHZ	0x00
#define KW_I2C_MODE_50KHZ	0x01
#define KW_I2C_MODE_25KHZ	0x02
#define KW_I2C_MODE_DUMB	0x00
#define KW_I2C_MODE_STANDARD	0x04
#define KW_I2C_MODE_STANDARDSUB	0x08
#define KW_I2C_MODE_COMBINED	0x0C
#define KW_I2C_MODE_MODE_MASK	0x0C
#define KW_I2C_MODE_CHAN_MASK	0xF0

/* Control register */
#define KW_I2C_CTL_AAK		0x01
#define KW_I2C_CTL_XADDR	0x02
#define KW_I2C_CTL_STOP		0x04
#define KW_I2C_CTL_START	0x08

/* Status register */
#define KW_I2C_STAT_BUSY	0x01
#define KW_I2C_STAT_LAST_AAK	0x02
#define KW_I2C_STAT_LAST_RW	0x04
#define KW_I2C_STAT_SDA		0x08
#define KW_I2C_STAT_SCL		0x10

/* IER & ISR registers */
#define KW_I2C_IRQ_DATA		0x01
#define KW_I2C_IRQ_ADDR		0x02
#define KW_I2C_IRQ_STOP		0x04
#define KW_I2C_IRQ_START	0x08
#define KW_I2C_IRQ_MASK		0x0F

/* Physical interface */
struct keywest_iface
{
	unsigned long		base;
	unsigned		bsteps;
	int			irq;
	struct semaphore	sem;
	spinlock_t		lock;
	struct keywest_chan*	channels;
	unsigned		chan_count;
	u8			cur_mode;
	char			read_write;
	u8*			data;
	unsigned		datalen;
	int			state;
	int			result;
	int			stopretry;
	struct timer_list	timeout_timer;
	struct completion	complete;
	struct keywest_iface*	next;
};

enum {
	state_idle,
	state_addr,
	state_read,
	state_write,
	state_stop,
	state_dead
};

/* Channel on an interface */
struct keywest_chan
{
	struct i2c_adapter	adapter;
	struct keywest_iface*	iface;
	unsigned		chan_no;
};

/* Register access */

static inline u8 __read_reg(struct keywest_iface *iface, reg_t reg)
{
	return in_8(((volatile u8 *)iface->base)
		+ (((unsigned)reg) << iface->bsteps));
}

static inline void __write_reg(struct keywest_iface *iface, reg_t reg, u8 val)
{
	out_8(((volatile u8 *)iface->base)
		+ (((unsigned)reg) << iface->bsteps), val);
	(void)__read_reg(iface, reg);
	udelay(10);
}

#define write_reg(reg, val)	__write_reg(iface, reg, val) 
#define read_reg(reg)		__read_reg(iface, reg) 



#endif /* __I2C_KEYWEST_H__ */
