diff options
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/i2c-core-base.c | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index b6ca97f0322b..bb34a5d41133 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c | |||
@@ -1911,63 +1911,35 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) | |||
1911 | EXPORT_SYMBOL(i2c_transfer); | 1911 | EXPORT_SYMBOL(i2c_transfer); |
1912 | 1912 | ||
1913 | /** | 1913 | /** |
1914 | * i2c_master_send - issue a single I2C message in master transmit mode | 1914 | * i2c_transfer_buffer_flags - issue a single I2C message transferring data |
1915 | * to/from a buffer | ||
1915 | * @client: Handle to slave device | 1916 | * @client: Handle to slave device |
1916 | * @buf: Data that will be written to the slave | 1917 | * @buf: Where the data is stored |
1917 | * @count: How many bytes to write, must be less than 64k since msg.len is u16 | 1918 | * @count: How many bytes to transfer, must be less than 64k since msg.len is u16 |
1919 | * @flags: The flags to be used for the message, e.g. I2C_M_RD for reads | ||
1918 | * | 1920 | * |
1919 | * Returns negative errno, or else the number of bytes written. | 1921 | * Returns negative errno, or else the number of bytes transferred. |
1920 | */ | 1922 | */ |
1921 | int i2c_master_send(const struct i2c_client *client, const char *buf, int count) | 1923 | int i2c_transfer_buffer_flags(const struct i2c_client *client, char *buf, |
1924 | int count, u16 flags) | ||
1922 | { | 1925 | { |
1923 | int ret; | 1926 | int ret; |
1924 | struct i2c_adapter *adap = client->adapter; | 1927 | struct i2c_msg msg = { |
1925 | struct i2c_msg msg; | 1928 | .addr = client->addr, |
1926 | 1929 | .flags = flags | (client->flags & I2C_M_TEN), | |
1927 | msg.addr = client->addr; | 1930 | .len = count, |
1928 | msg.flags = client->flags & I2C_M_TEN; | 1931 | .buf = buf, |
1929 | msg.len = count; | 1932 | }; |
1930 | msg.buf = (char *)buf; | ||
1931 | |||
1932 | ret = i2c_transfer(adap, &msg, 1); | ||
1933 | |||
1934 | /* | ||
1935 | * If everything went ok (i.e. 1 msg transmitted), return #bytes | ||
1936 | * transmitted, else error code. | ||
1937 | */ | ||
1938 | return (ret == 1) ? count : ret; | ||
1939 | } | ||
1940 | EXPORT_SYMBOL(i2c_master_send); | ||
1941 | |||
1942 | /** | ||
1943 | * i2c_master_recv - issue a single I2C message in master receive mode | ||
1944 | * @client: Handle to slave device | ||
1945 | * @buf: Where to store data read from slave | ||
1946 | * @count: How many bytes to read, must be less than 64k since msg.len is u16 | ||
1947 | * | ||
1948 | * Returns negative errno, or else the number of bytes read. | ||
1949 | */ | ||
1950 | int i2c_master_recv(const struct i2c_client *client, char *buf, int count) | ||
1951 | { | ||
1952 | struct i2c_adapter *adap = client->adapter; | ||
1953 | struct i2c_msg msg; | ||
1954 | int ret; | ||
1955 | |||
1956 | msg.addr = client->addr; | ||
1957 | msg.flags = client->flags & I2C_M_TEN; | ||
1958 | msg.flags |= I2C_M_RD; | ||
1959 | msg.len = count; | ||
1960 | msg.buf = buf; | ||
1961 | 1933 | ||
1962 | ret = i2c_transfer(adap, &msg, 1); | 1934 | ret = i2c_transfer(client->adapter, &msg, 1); |
1963 | 1935 | ||
1964 | /* | 1936 | /* |
1965 | * If everything went ok (i.e. 1 msg received), return #bytes received, | 1937 | * If everything went ok (i.e. 1 msg transferred), return #bytes |
1966 | * else error code. | 1938 | * transferred, else error code. |
1967 | */ | 1939 | */ |
1968 | return (ret == 1) ? count : ret; | 1940 | return (ret == 1) ? count : ret; |
1969 | } | 1941 | } |
1970 | EXPORT_SYMBOL(i2c_master_recv); | 1942 | EXPORT_SYMBOL(i2c_transfer_buffer_flags); |
1971 | 1943 | ||
1972 | /* ---------------------------------------------------- | 1944 | /* ---------------------------------------------------- |
1973 | * the i2c address scanning function | 1945 | * the i2c address scanning function |