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

📄 i2c-acorn.c

📁 i2c 在linux下的驱动设计
💻 C
字号:
/* *  linux/drivers/acorn/char/i2c.c * *  Copyright (C) 2000 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * *  ARM IOC/IOMD i2c driver. * *  On Acorn machines, the following i2c devices are on the bus: *	- PCF8583 real time clock & static RAM */#include <linux/init.h>#include <linux/i2c.h>#include <linux/i2c-algo-bit.h>#include <asm/hardware.h>#include <asm/io.h>#include <asm/hardware/ioc.h>#include <asm/system.h>#define FORCE_ONES	0xdc#define SCL		0x02#define SDA		0x01/* * We must preserve all non-i2c output bits in IOC_CONTROL. * Note also that we need to preserve the value of SCL and * SDA outputs as well (which may be different from the * values read back from IOC_CONTROL). */static u_int force_ones;static void ioc_setscl(void *data, int state){	u_int ioc_control = ioc_readb(IOC_CONTROL) & ~(SCL | SDA);	u_int ones = force_ones;	if (state)		ones |= SCL;	else		ones &= ~SCL;	force_ones = ones; 	ioc_writeb(ioc_control | ones, IOC_CONTROL);}static void ioc_setsda(void *data, int state){	u_int ioc_control = ioc_readb(IOC_CONTROL) & ~(SCL | SDA);	u_int ones = force_ones;	if (state)		ones |= SDA;	else		ones &= ~SDA;	force_ones = ones; 	ioc_writeb(ioc_control | ones, IOC_CONTROL);}static int ioc_getscl(void *data){	return (ioc_readb(IOC_CONTROL) & SCL) != 0;}static int ioc_getsda(void *data){	return (ioc_readb(IOC_CONTROL) & SDA) != 0;}static struct i2c_algo_bit_data ioc_data = {	.setsda		= ioc_setsda,	.setscl		= ioc_setscl,	.getsda		= ioc_getsda,	.getscl		= ioc_getscl,	.udelay		= 80,	.timeout	= 100};static struct i2c_adapter ioc_ops = {	.id			= I2C_HW_B_IOC,	.algo_data		= &ioc_data,};static int __init i2c_ioc_init(void){	force_ones = FORCE_ONES | SCL | SDA;	return i2c_bit_add_bus(&ioc_ops);}__initcall(i2c_ioc_init);

⌨️ 快捷键说明

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