Merge master.kernel.org:/home/rmk/linux-2.6-arm
[powerpc.git] / drivers / i2c / i2c-core.c
index 9011627..51ce268 100644 (file)
@@ -21,7 +21,6 @@
    All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
    SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com>                */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -103,7 +102,7 @@ static struct class i2c_adapter_class = {
        .release =      &i2c_adapter_class_dev_release,
 };
 
-static ssize_t show_adapter_name(struct device *dev, char *buf)
+static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct i2c_adapter *adap = dev_to_i2c_adapter(dev);
        return sprintf(buf, "%s\n", adap->name);
@@ -117,7 +116,7 @@ static void i2c_client_release(struct device *dev)
        complete(&client->released);
 }
 
-static ssize_t show_client_name(struct device *dev, char *buf)
+static ssize_t show_client_name(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct i2c_client *client = to_i2c_client(dev);
        return sprintf(buf, "%s\n", client->name);
@@ -239,7 +238,7 @@ int i2c_del_adapter(struct i2c_adapter *adap)
        }
 
        /* detach any active clients. This must be done first, because
-        * it can fail; in which case we give upp. */
+        * it can fail; in which case we give up. */
        list_for_each_safe(item, _n, &adap->clients) {
                client = list_entry(item, struct i2c_client, list);
 
@@ -612,27 +611,16 @@ int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
        struct i2c_adapter *adap=client->adapter;
        struct i2c_msg msg;
 
-       if (client->adapter->algo->master_xfer) {
-               msg.addr   = client->addr;
-               msg.flags = client->flags & I2C_M_TEN;
-               msg.len = count;
-               msg.buf = (char *)buf;
+       msg.addr = client->addr;
+       msg.flags = client->flags & I2C_M_TEN;
+       msg.len = count;
+       msg.buf = (char *)buf;
        
-               dev_dbg(&client->adapter->dev, "master_send: writing %d bytes.\n",
-                       count);
-       
-               down(&adap->bus_lock);
-               ret = adap->algo->master_xfer(adap,&msg,1);
-               up(&adap->bus_lock);
+       ret = i2c_transfer(adap, &msg, 1);
 
-               /* if everything went ok (i.e. 1 msg transmitted), return #bytes
-                * transmitted, else error code.
-                */
-               return (ret == 1 )? count : ret;
-       } else {
-               dev_err(&client->adapter->dev, "I2C level transfers not supported\n");
-               return -ENOSYS;
-       }
+       /* If everything went ok (i.e. 1 msg transmitted), return #bytes
+          transmitted, else error code. */
+       return (ret == 1) ? count : ret;
 }
 
 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
@@ -640,31 +628,18 @@ int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
        struct i2c_adapter *adap=client->adapter;
        struct i2c_msg msg;
        int ret;
-       if (client->adapter->algo->master_xfer) {
-               msg.addr   = client->addr;
-               msg.flags = client->flags & I2C_M_TEN;
-               msg.flags |= I2C_M_RD;
-               msg.len = count;
-               msg.buf = buf;
-
-               dev_dbg(&client->adapter->dev, "master_recv: reading %d bytes.\n",
-                       count);
-       
-               down(&adap->bus_lock);
-               ret = adap->algo->master_xfer(adap,&msg,1);
-               up(&adap->bus_lock);
-       
-               dev_dbg(&client->adapter->dev, "master_recv: return:%d (count:%d, addr:0x%02x)\n",
-                       ret, count, client->addr);
-       
-               /* if everything went ok (i.e. 1 msg transmitted), return #bytes
-               * transmitted, else error code.
-               */
-               return (ret == 1 )? count : ret;
-       } else {
-               dev_err(&client->adapter->dev, "I2C level transfers not supported\n");
-               return -ENOSYS;
-       }
+
+       msg.addr = client->addr;
+       msg.flags = client->flags & I2C_M_TEN;
+       msg.flags |= I2C_M_RD;
+       msg.len = count;
+       msg.buf = buf;
+
+       ret = i2c_transfer(adap, &msg, 1);
+
+       /* If everything went ok (i.e. 1 msg transmitted), return #bytes
+          transmitted, else error code. */
+       return (ret == 1) ? count : ret;
 }
 
 
@@ -742,18 +717,6 @@ int i2c_probe(struct i2c_adapter *adapter,
                                found = 1;
                        }
                }
-               for (i = 0;
-                    !found && (address_data->ignore_range[i] != I2C_CLIENT_END);
-                    i += 3) {
-                       if (((adap_id == address_data->ignore_range[i]) ||
-                           ((address_data->ignore_range[i]==ANY_I2C_BUS))) &&
-                           (addr >= address_data->ignore_range[i+1]) &&
-                           (addr <= address_data->ignore_range[i+2])) {
-                               dev_dbg(&adapter->dev, "found ignore_range parameter for adapter %d, "
-                                       "addr %04x\n", adap_id,addr);
-                               found = 1;
-                       }
-               }
                if (found) 
                        continue;
 
@@ -769,17 +732,6 @@ int i2c_probe(struct i2c_adapter *adapter,
                        }
                }
 
-               for (i = 0;
-                    !found && (address_data->normal_i2c_range[i] != I2C_CLIENT_END);
-                    i += 2) {
-                       if ((addr >= address_data->normal_i2c_range[i]) &&
-                           (addr <= address_data->normal_i2c_range[i+1])) {
-                               found = 1;
-                               dev_dbg(&adapter->dev, "found normal i2c_range entry for adapter %d, "
-                                       "addr %04x\n", adap_id,addr);
-                       }
-               }
-
                for (i = 0;
                     !found && (address_data->probe[i] != I2C_CLIENT_END);
                     i += 2) {
@@ -791,18 +743,6 @@ int i2c_probe(struct i2c_adapter *adapter,
                                        "addr %04x\n", adap_id,addr);
                        }
                }
-               for (i = 0;
-                    !found && (address_data->probe_range[i] != I2C_CLIENT_END);
-                    i += 3) {
-                       if (((adap_id == address_data->probe_range[i]) ||
-                          (address_data->probe_range[i] == ANY_I2C_BUS)) &&
-                          (addr >= address_data->probe_range[i+1]) &&
-                          (addr <= address_data->probe_range[i+2])) {
-                               found = 1;
-                               dev_dbg(&adapter->dev, "found probe_range parameter for adapter %d, "
-                                       "addr %04x\n", adap_id,addr);
-                       }
-               }
                if (!found) 
                        continue;