aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesper Nilsson <jesper.nilsson@axis.com>2008-01-17 14:50:47 +0100
committerJesper Nilsson <jesper.nilsson@axis.com>2008-02-08 11:06:29 +0100
commite5d5cf2442038b8ad3e0f90b00e5acdd18d5fa98 (patch)
tree5f1307e1a0a2081c22d941264828559a6c3a2e2c
parent3d6c03fc223e6ed3b7cb4cf850a7da4a376d02d3 (diff)
CRIS v10: Fix bugs in i2c_init and i2c_readreg
- Set the variable first to zero after first setup, so we can stop multiple calls to i2c_init from trying to setup i2c. - The last byte read by the master in an i2c transfer needs to be NACKed, not ACKed. - Also, remove useless CVS log and CVS id tags.
-rw-r--r--arch/cris/arch-v10/drivers/i2c.c81
1 files changed, 3 insertions, 78 deletions
diff --git a/arch/cris/arch-v10/drivers/i2c.c b/arch/cris/arch-v10/drivers/i2c.c
index aca81ddaf60..d6d22067d0c 100644
--- a/arch/cris/arch-v10/drivers/i2c.c
+++ b/arch/cris/arch-v10/drivers/i2c.c
@@ -6,85 +6,9 @@
*! kernel modules (i2c_writereg/readreg) and from userspace using
*! ioctl()'s
*!
-*! Nov 30 1998 Torbjorn Eliasson Initial version.
-*! Bjorn Wesen Elinux kernel version.
-*! Jan 14 2000 Johan Adolfsson Fixed PB shadow register stuff -
-*! don't use PB_I2C if DS1302 uses same bits,
-*! use PB.
-*! $Log: i2c.c,v $
-*! Revision 1.13 2005/03/07 13:13:07 starvik
-*! Added spinlocks to protect states etc
-*!
-*! Revision 1.12 2005/01/05 06:11:22 starvik
-*! No need to do local_irq_disable after local_irq_save.
-*!
-*! Revision 1.11 2004/12/13 12:21:52 starvik
-*! Added I/O and DMA allocators from Linux 2.4
-*!
-*! Revision 1.9 2004/08/24 06:49:14 starvik
-*! Whitespace cleanup
-*!
-*! Revision 1.8 2004/06/08 08:48:26 starvik
-*! Removed unused code
-*!
-*! Revision 1.7 2004/05/28 09:26:59 starvik
-*! Modified I2C initialization to work in 2.6.
-*!
-*! Revision 1.6 2004/05/14 07:58:03 starvik
-*! Merge of changes from 2.4
-*!
-*! Revision 1.4 2002/12/11 13:13:57 starvik
-*! Added arch/ to v10 specific includes
-*! Added fix from Linux 2.4 in serial.c (flush_to_flip_buffer)
-*!
-*! Revision 1.3 2002/11/20 11:56:11 starvik
-*! Merge of Linux 2.5.48
-*!
-*! Revision 1.2 2002/11/18 13:16:06 starvik
-*! Linux 2.5 port of latest 2.4 drivers
-*!
-*! Revision 1.9 2002/10/31 15:32:26 starvik
-*! Update Port B register and shadow even when running with hardware support
-*! to avoid glitches when reading bits
-*! Never set direction to out in i2c_inbyte
-*! Removed incorrect clock toggling at end of i2c_inbyte
-*!
-*! Revision 1.8 2002/08/13 06:31:53 starvik
-*! Made SDA and SCL line configurable
-*! Modified i2c_inbyte to work with PCF8563
-*!
-*! Revision 1.7 2001/04/04 13:11:36 markusl
-*! Updated according to review remarks
-*!
-*! Revision 1.6 2001/03/19 12:43:00 markusl
-*! Made some symbols unstatic (used by the eeprom driver)
-*!
-*! Revision 1.5 2001/02/27 13:52:48 bjornw
-*! malloc.h -> slab.h
-*!
-*! Revision 1.4 2001/02/15 07:17:40 starvik
-*! Corrected usage if port_pb_i2c_shadow
-*!
-*! Revision 1.3 2001/01/26 17:55:13 bjornw
-*! * Made I2C_USES_PB_NOT_PB_I2C a CONFIG option instead of assigning it
-*! magically. Config.in needs to set it for the options that need it, like
-*! Dallas 1302 support. Actually, it should be default since it screws up
-*! the PB bits even if you don't use I2C..
-*! * Include linux/config.h to get the above
-*!
-*! Revision 1.2 2001/01/18 15:49:30 bjornw
-*! 2.4 port of I2C including some cleanups (untested of course)
-*!
-*! Revision 1.1 2001/01/18 15:35:25 bjornw
-*! Verbatim copy of the Etrax i2c driver, 2.0 elinux version
-*!
-*!
-*! ---------------------------------------------------------------------------
-*!
-*! (C) Copyright 1999-2002 Axis Communications AB, LUND, SWEDEN
+*! (C) Copyright 1999-2007 Axis Communications AB, LUND, SWEDEN
*!
*!***************************************************************************/
-/* $Id: i2c.c,v 1.13 2005/03/07 13:13:07 starvik Exp $ */
/****************** INCLUDE FILES SECTION ***********************************/
@@ -622,7 +546,7 @@ i2c_readreg(unsigned char theSlave, unsigned char theReg)
* last received byte needs to be nacked
* instead of acked
*/
- i2c_sendack();
+ i2c_sendnack();
/*
* end sequence
*/
@@ -708,6 +632,7 @@ i2c_init(void)
if (!first) {
return res;
}
+ first = 0;
/* Setup and enable the Port B I2C interface */