⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c-keywest.h

📁 IXP425 平台下嵌入式LINUX的I2Cz总线的驱动程序
💻 H
字号:
#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__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -