@@ -119,8 +119,7 @@ static int pca_address(struct i2c_algo_pca_data *adap,
int sta = pca_get_con(adap);
int addr = i2c_8bit_addr_from_msg(msg);
- DEB2("=== SLAVE ADDRESS %#04x+%c=%#04x\n",
- msg->addr, msg->flags & I2C_M_RD ? 'R' : 'W', addr);
+ DEB2("=== SLAVE ADDRESS %#04x+%s=%#04x\n", msg->addr, i2c_str_read_write(msg), addr);
pca_outw(adap, I2C_PCA_DAT, addr);
@@ -316,8 +316,7 @@ static int pcf_xfer(struct i2c_adapter *i2c_adap,
pmsg = &msgs[i];
DEB2(printk(KERN_DEBUG "i2c-algo-pcf.o: Doing %s %d bytes to 0x%02x - %d of %d messages\n",
- pmsg->flags & I2C_M_RD ? "read" : "write",
- pmsg->len, pmsg->addr, i + 1, num);)
+ i2c_str_read_write(pmsg), pmsg->len, pmsg->addr, i + 1, num);)
ret = pcf_doAddress(adap, pmsg);
@@ -523,8 +523,7 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
* writing the corresponding bit into the Control Register.
*/
- dev_dbg(dev->dev, "transfer: %s %zu bytes.\n",
- (dev->msg->flags & I2C_M_RD) ? "read" : "write", dev->buf_len);
+ dev_dbg(dev->dev, "transfer: %s %zu bytes.\n", i2c_str_read_write(dev->msg), dev->buf_len);
reinit_completion(&dev->cmd_complete);
dev->transfer_status = 0;
@@ -744,8 +744,7 @@ static int exynos5_i2c_xfer_msg(struct exynos5_i2c *i2c,
if (ret < 0) {
exynos5_i2c_reset(i2c);
if (ret == -ETIMEDOUT)
- dev_warn(i2c->dev, "%s timeout\n",
- (msgs->flags & I2C_M_RD) ? "rx" : "tx");
+ dev_warn(i2c->dev, "%s timeout\n", i2c_str_read_write(msgs));
}
/* Return the state as in interrupt routine */
@@ -332,8 +332,7 @@ static int hix5hd2_i2c_xfer_msg(struct hix5hd2_i2c_priv *priv,
if (timeout == 0) {
priv->state = HIX5I2C_STAT_RW_ERR;
priv->err = -ETIMEDOUT;
- dev_warn(priv->dev, "%s timeout=%d\n",
- msgs->flags & I2C_M_RD ? "rx" : "tx",
+ dev_warn(priv->dev, "%s timeout=%d\n", i2c_str_read_write(msgs),
priv->adap.timeout);
}
ret = priv->state;
@@ -950,9 +950,8 @@ static irqreturn_t img_i2c_isr(int irq, void *dev_id)
INT_FIFO_EMPTY |
INT_FIFO_FULL))) {
dev_crit(i2c->adap.dev.parent,
- "fatal: clock low timeout occurred %s addr 0x%02x\n",
- (i2c->msg.flags & I2C_M_RD) ? "reading" : "writing",
- i2c->msg.addr);
+ "fatal: clock low timeout occurred when %s addr 0x%02x\n",
+ i2c_str_read_write(&i2c->msg), i2c->msg.addr);
hret = ISR_FATAL(EIO);
goto out;
}
@@ -409,8 +409,7 @@ static irqreturn_t sh_mobile_i2c_isr(int irq, void *dev_id)
pd->sr |= sr; /* remember state */
dev_dbg(pd->dev, "i2c_isr 0x%02x 0x%02x %s %d %d!\n", sr, pd->sr,
- (pd->msg->flags & I2C_M_RD) ? "read" : "write",
- pd->pos, pd->msg->len);
+ i2c_str_read_write(pd->msg), pd->pos, pd->msg->len);
/* Kick off TxDMA after preface was done */
if (pd->dma_direction == DMA_TO_DEVICE && pd->pos == 0)
@@ -71,10 +71,8 @@ static int usb_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
pmsg = &msgs[i];
- dev_dbg(&adapter->dev,
- " %d: %s (flags %d) %d bytes to 0x%02x\n",
- i, pmsg->flags & I2C_M_RD ? "read" : "write",
- pmsg->flags, pmsg->len, pmsg->addr);
+ dev_dbg(&adapter->dev, " %d: %s (flags %d) %d bytes to 0x%02x\n",
+ i, i2c_str_read_write(pmsg), pmsg->flags, pmsg->len, pmsg->addr);
/* and directly send the message */
if (pmsg->flags & I2C_M_RD) {
@@ -278,10 +278,8 @@ static int vprbrd_i2c_xfer(struct i2c_adapter *i2c, struct i2c_msg *msgs,
for (i = 0 ; i < num ; i++) {
pmsg = &msgs[i];
- dev_dbg(&i2c->dev,
- " %d: %s (flags %d) %d bytes to 0x%02x\n",
- i, pmsg->flags & I2C_M_RD ? "read" : "write",
- pmsg->flags, pmsg->len, pmsg->addr);
+ dev_dbg(&i2c->dev, " %d: %s (flags %d) %d bytes to 0x%02x\n",
+ i, i2c_str_read_write(pmsg), pmsg->flags, pmsg->len, pmsg->addr);
mutex_lock(&vb->lock);
/* directly send the message */
@@ -2004,8 +2004,7 @@ module_exit(i2c_exit);
static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg)
{
dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n",
- err_msg, msg->addr, msg->len,
- msg->flags & I2C_M_RD ? "read" : "write");
+ err_msg, msg->addr, msg->len, i2c_str_read_write(msg));
return -EOPNOTSUPP;
}
@@ -20,7 +20,9 @@
#include <linux/rtmutex.h>
#include <linux/irqdomain.h> /* for Host Notify IRQ */
#include <linux/of.h> /* for struct device_node */
+#include <linux/string_helpers.h> /* for str_read_write() */
#include <linux/swab.h> /* for swab16 */
+
#include <uapi/linux/i2c.h>
extern struct bus_type i2c_bus_type;
@@ -934,6 +936,11 @@ static inline u8 i2c_8bit_addr_from_msg(const struct i2c_msg *msg)
return (msg->addr << 1) | (msg->flags & I2C_M_RD ? 1 : 0);
}
+static inline const char *i2c_str_read_write(const struct i2c_msg *msg)
+{
+ return str_read_write(msg->flags & I2C_M_RD);
+}
+
u8 *i2c_get_dma_safe_msg_buf(struct i2c_msg *msg, unsigned int threshold);
void i2c_put_dma_safe_msg_buf(u8 *buf, struct i2c_msg *msg, bool xferred);
str_read_write() returns a string literal "read" or "write" based on the value. It also allows to unify usage of a such in the kernel. For i2c case introduce a wrapper that takes struct i2c_msg as parameter. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- v2: fixed typo in exynos5 (LKP) drivers/i2c/algos/i2c-algo-pca.c | 3 +-- drivers/i2c/algos/i2c-algo-pcf.c | 3 +-- drivers/i2c/busses/i2c-at91-master.c | 3 +-- drivers/i2c/busses/i2c-exynos5.c | 3 +-- drivers/i2c/busses/i2c-hix5hd2.c | 3 +-- drivers/i2c/busses/i2c-img-scb.c | 5 ++--- drivers/i2c/busses/i2c-sh_mobile.c | 3 +-- drivers/i2c/busses/i2c-tiny-usb.c | 6 ++---- drivers/i2c/busses/i2c-viperboard.c | 6 ++---- drivers/i2c/i2c-core-base.c | 3 +-- include/linux/i2c.h | 7 +++++++ 11 files changed, 20 insertions(+), 25 deletions(-)