11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2f30c2269544bffc7bf1b0d7c0abe5be1be83b8cbUwe Zeisberger * drivers/i2c/busses/i2c-ibm_iic.h 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Support for the IIC peripheral on IBM PPC 4xx 5217bcec4425cdc8fb90ce688eb4d5b5140713046Stefan Roese * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2003 Zultys Technologies. 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 9217bcec4425cdc8fb90ce688eb4d5b5140713046Stefan Roese * Based on original work by 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Ian DaSilva <idasilva@mvista.com> 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Armin Kuster <akuster@mvista.com> 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Matt Porter <mporter@mvista.com> 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright 2000-2003 MontaVista Software Inc. 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify it 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * under the terms of the GNU General Public License as published by the 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Free Software Foundation; either version 2 of the License, or (at your 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * option) any later version. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __I2C_IBM_IIC_H_ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __I2C_IBM_IIC_H_ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 25217bcec4425cdc8fb90ce688eb4d5b5140713046Stefan Roese#include <linux/i2c.h> 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct iic_regs { 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 mdbuf; 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 sbbuf; 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 lmadr; 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 hmadr; 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 cntl; 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mdcntl; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 sts; 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 extsts; 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 lsadr; 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 hsadr; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 clkdiv; 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 intmsk; 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 xfrcnt; 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 xtcntlss; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 directcntl; 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ibm_iic_private { 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct i2c_adapter adap; 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile struct iic_regs __iomem *vaddr; 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds wait_queue_head_t wq; 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int idx; 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int irq; 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int fast_mode; 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 clckdiv; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_CNTL register */ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_HMT 0x80 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_AMD 0x40 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_TCT_MASK 0x30 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_TCT_SHIFT 4 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_RPST 0x08 61217bcec4425cdc8fb90ce688eb4d5b5140713046Stefan Roese#define CNTL_CHT 0x04 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_RW 0x02 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CNTL_PT 0x01 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_MDCNTL register */ 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_FSDB 0x80 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_FMDB 0x40 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_EGC 0x20 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_FSM 0x10 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_ESM 0x08 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_EINT 0x04 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_EUBS 0x02 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MDCNTL_HSCL 0x01 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_STS register */ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_SSS 0x80 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_SLPR 0x40 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_MDBS 0x20 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_MDBF 0x10 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_SCMP 0x08 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_ERR 0x04 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_IRQA 0x02 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STS_PT 0x01 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_EXTSTS register */ 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_IRQP 0x80 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_BCS_MASK 0x70 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_BCS_FREE 0x40 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_IRQD 0x08 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_LA 0x04 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_ICT 0x02 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTSTS_XFRA 0x01 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_INTRMSK register */ 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIRC 0x80 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIRS 0x40 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIWC 0x20 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIWS 0x10 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIHE 0x08 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIIC 0x04 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EITA 0x02 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTRMSK_EIMTC 0x01 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_XFRCNT register */ 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XFRCNT_MTC_MASK 0x07 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_XTCNTLSS register */ 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XTCNTLSS_SRC 0x80 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XTCNTLSS_SRS 0x40 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XTCNTLSS_SWC 0x20 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XTCNTLSS_SWS 0x10 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XTCNTLSS_SRST 0x01 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IICx_DIRECTCNTL register */ 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIRCNTL_SDAC 0x08 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIRCNTL_SCC 0x04 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIRCNTL_MSDA 0x02 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIRCNTL_MSC 0x01 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Check if we really control the I2C bus and bus is free */ 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIRCTNL_FREE(v) (((v) & 0x0f) == 0x0f) 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __I2C_IBM_IIC_H_ */ 124