summaryrefslogtreecommitdiff
path: root/drivers/i2c/i2c-atr.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c/i2c-atr.c')
-rw-r--r--drivers/i2c/i2c-atr.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c
index 19422df0fe37..01b1ba6a1b5a 100644
--- a/drivers/i2c/i2c-atr.c
+++ b/drivers/i2c/i2c-atr.c
@@ -394,6 +394,9 @@ static int i2c_atr_map_msgs(struct i2c_atr_chan *chan, struct i2c_msg *msgs,
c2a = i2c_atr_get_mapping_by_addr(chan, msgs[i].addr);
if (!c2a) {
+ if (atr->flags & I2C_ATR_F_PASSTHROUGH)
+ continue;
+
dev_err(atr->dev, "client 0x%02x not mapped!\n",
msgs[i].addr);
@@ -486,13 +489,13 @@ static int i2c_atr_smbus_xfer(struct i2c_adapter *adap, u16 addr,
c2a = i2c_atr_get_mapping_by_addr(chan, addr);
- if (!c2a) {
+ if (!c2a && !(atr->flags & I2C_ATR_F_PASSTHROUGH)) {
dev_err(atr->dev, "client 0x%02x not mapped!\n", addr);
mutex_unlock(&chan->alias_pairs_lock);
return -ENXIO;
}
- alias = c2a->alias;
+ alias = c2a ? c2a->alias : addr;
mutex_unlock(&chan->alias_pairs_lock);