linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / linux / i2c.h
index eb0628a..63f1d63 100644 (file)
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               */
 /* ------------------------------------------------------------------------- */
 
-/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and
    Frodo Looijaard <frodol@dds.nl> */
 
 #ifndef _LINUX_I2C_H
 #define _LINUX_I2C_H
 
-#include <linux/types.h>
-#ifdef __KERNEL__ 
 #include <linux/module.h>
+#include <linux/types.h>
 #include <linux/i2c-id.h>
 #include <linux/mod_devicetable.h>
 #include <linux/device.h>      /* for struct device */
 #include <linux/sched.h>       /* for completion */
-#include <linux/mutex.h>
+#include <asm/semaphore.h>
 
 /* --- For i2c-isa ---------------------------------------------------- */
 
@@ -97,13 +96,13 @@ extern s32 i2c_smbus_write_word_data(struct i2c_client * client,
                                      u8 command, u16 value);
 extern s32 i2c_smbus_write_block_data(struct i2c_client * client,
                                      u8 command, u8 length,
-                                     const u8 *values);
+                                     u8 *values);
 /* Returns the number of read bytes */
 extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client,
                                         u8 command, u8 *values);
 extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client,
                                          u8 command, u8 length,
-                                         const u8 *values);
+                                         u8 *values);
 
 /*
  * A driver is capable of handling one or more physical devices present on
@@ -193,8 +192,6 @@ struct i2c_algorithm {
           to NULL. If an adapter algorithm can do SMBus access, set 
           smbus_xfer. If set to NULL, the SMBus protocol is simulated
           using common I2C messages */
-       /* master_xfer should return the number of messages successfully
-          processed, or a negative value on error */
        int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs, 
                           int num);
        int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, 
@@ -228,8 +225,8 @@ struct i2c_adapter {
        int (*client_unregister)(struct i2c_client *);
 
        /* data fields that are valid for all devices   */
-       struct mutex bus_lock;
-       struct mutex clist_lock;
+       struct semaphore bus_lock;
+       struct semaphore clist_lock;
 
        int timeout;
        int retries;
@@ -357,7 +354,6 @@ static inline int i2c_adapter_id(struct i2c_adapter *adap)
 {
        return adap->nr;
 }
-#endif /* __KERNEL__ */
 
 /*
  * I2C Message - used for pure i2c transaction, also from /dev interface
@@ -473,7 +469,6 @@ union i2c_smbus_data {
 #define I2C_SMBUS      0x0720  /* SMBus-level access */
 
 /* ----- I2C-DEV: char device interface stuff ------------------------- */
-#ifdef __KERNEL__
 
 #define I2C_MAJOR      89              /* Device major number          */
 
@@ -651,5 +646,5 @@ static unsigned short *forces[] = { force, force_##chip1,           \
                                    force_##chip6, force_##chip7,       \
                                    force_##chip8, NULL };              \
 I2C_CLIENT_INSMOD_COMMON
-#endif /* __KERNEL__ */
+
 #endif /* _LINUX_I2C_H */