Remove redundancy from i2c-core.c
PATCH 1/1 Remove redundancy from i2c-core.c
Call i2c_transfer() from i2c_master_send() and i2c_master_recv() to avoid the redundant code that was in all three functions. It also removes unnecessary debug statements as suggested by Jean Delvare.
This is important for the non-blocking interfaces because they will have to handle a non-blocking interface in this area. Having it in one place greatly simplifies the changes.
Signed-off-by Corey Minyard <[email protected]>
drivers/i2c/i2c-core.c +22 -44
@@ -612,27 +612,17 @@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); - -/* 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 ; - } + 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; }int i2c_master_recv (struct i2c_client *client,char *buf ,int count)
@@ -640,31 +630,19 @@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; }