/* ------------------------------------------------------------------------- */1/* i2c-iop3xx.h algorithm driver definitions private to i2c-iop3xx.c */2/* ------------------------------------------------------------------------- */3/* Copyright (C) 2003 Peter Milne, D-TACQ Solutions Ltd4* <Peter dot Milne at D hyphen TACQ dot com>56This program is free software; you can redistribute it and/or modify7it under the terms of the GNU General Public License as published by8the Free Software Foundation, version 2.910This program is distributed in the hope that it will be useful,11but WITHOUT ANY WARRANTY; without even the implied warranty of12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13GNU General Public License for more details.1415You should have received a copy of the GNU General Public License16along with this program; if not, write to the Free Software17Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */18/* ------------------------------------------------------------------------- */192021#ifndef I2C_IOP3XX_H22#define I2C_IOP3XX_H 12324/*25* iop321 hardware bit definitions26*/27#define IOP3XX_ICR_FAST_MODE 0x8000 /* 1=400kBps, 0=100kBps */28#define IOP3XX_ICR_UNIT_RESET 0x4000 /* 1=RESET */29#define IOP3XX_ICR_SAD_IE 0x2000 /* 1=Slave Detect Interrupt Enable */30#define IOP3XX_ICR_ALD_IE 0x1000 /* 1=Arb Loss Detect Interrupt Enable */31#define IOP3XX_ICR_SSD_IE 0x0800 /* 1=Slave STOP Detect Interrupt Enable */32#define IOP3XX_ICR_BERR_IE 0x0400 /* 1=Bus Error Interrupt Enable */33#define IOP3XX_ICR_RXFULL_IE 0x0200 /* 1=Receive Full Interrupt Enable */34#define IOP3XX_ICR_TXEMPTY_IE 0x0100 /* 1=Transmit Empty Interrupt Enable */35#define IOP3XX_ICR_GCD 0x0080 /* 1=General Call Disable */36/*37* IOP3XX_ICR_GCD: 1 disables response as slave. "This bit must be set38* when sending a master mode general call message from the I2C unit"39*/40#define IOP3XX_ICR_UE 0x0040 /* 1=Unit Enable */41/*42* "NOTE: To avoid I2C bus integrity problems,43* the user needs to ensure that the GPIO Output Data Register -44* GPOD bits associated with an I2C port are cleared prior to setting45* the enable bit for that I2C serial port.46* The user prepares to enable I2C port 0 and47* I2C port 1 by clearing GPOD bits 7:6 and GPOD bits 5:4, respectively.48*/49#define IOP3XX_ICR_SCLEN 0x0020 /* 1=SCL enable for master mode */50#define IOP3XX_ICR_MABORT 0x0010 /* 1=Send a STOP with no data51* NB TBYTE must be clear */52#define IOP3XX_ICR_TBYTE 0x0008 /* 1=Send/Receive a byte. i2c clears */53#define IOP3XX_ICR_NACK 0x0004 /* 1=reply with NACK */54#define IOP3XX_ICR_MSTOP 0x0002 /* 1=send a STOP after next data byte */55#define IOP3XX_ICR_MSTART 0x0001 /* 1=initiate a START */565758#define IOP3XX_ISR_BERRD 0x0400 /* 1=BUS ERROR Detected */59#define IOP3XX_ISR_SAD 0x0200 /* 1=Slave ADdress Detected */60#define IOP3XX_ISR_GCAD 0x0100 /* 1=General Call Address Detected */61#define IOP3XX_ISR_RXFULL 0x0080 /* 1=Receive Full */62#define IOP3XX_ISR_TXEMPTY 0x0040 /* 1=Transmit Empty */63#define IOP3XX_ISR_ALD 0x0020 /* 1=Arbitration Loss Detected */64#define IOP3XX_ISR_SSD 0x0010 /* 1=Slave STOP Detected */65#define IOP3XX_ISR_BBUSY 0x0008 /* 1=Bus BUSY */66#define IOP3XX_ISR_UNITBUSY 0x0004 /* 1=Unit Busy */67#define IOP3XX_ISR_NACK 0x0002 /* 1=Unit Rx or Tx a NACK */68#define IOP3XX_ISR_RXREAD 0x0001 /* 1=READ 0=WRITE (R/W bit of slave addr */6970#define IOP3XX_ISR_CLEARBITS 0x07f07172#define IOP3XX_ISAR_SAMASK 0x007f7374#define IOP3XX_IDBR_MASK 0x00ff7576#define IOP3XX_IBMR_SCL 0x000277#define IOP3XX_IBMR_SDA 0x00017879#define IOP3XX_GPOD_I2C0 0x00c0 /* clear these bits to enable ch0 */80#define IOP3XX_GPOD_I2C1 0x0030 /* clear these bits to enable ch1 */8182#define MYSAR 0 /* default slave address */8384#define I2C_ERR 32185#define I2C_ERR_BERR (I2C_ERR+0)86#define I2C_ERR_ALD (I2C_ERR+1)878889#define CR_OFFSET 090#define SR_OFFSET 0x491#define SAR_OFFSET 0x892#define DBR_OFFSET 0xc93#define CCR_OFFSET 0x1094#define BMR_OFFSET 0x149596#define IOP3XX_I2C_IO_SIZE 0x189798struct i2c_algo_iop3xx_data {99void __iomem *ioaddr;100wait_queue_head_t waitq;101spinlock_t lock;102u32 SR_enabled, SR_received;103int id;104};105106#endif /* I2C_IOP3XX_H */107108109