diff options
-rw-r--r-- | drivers/i2c/busses/i2c-bcm-iproc.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c index d3c89157b337..f9f2c2082151 100644 --- a/drivers/i2c/busses/i2c-bcm-iproc.c +++ b/drivers/i2c/busses/i2c-bcm-iproc.c | |||
@@ -160,14 +160,6 @@ static int bcm_iproc_i2c_xfer_single_msg(struct bcm_iproc_i2c_dev *iproc_i2c, | |||
160 | u32 val; | 160 | u32 val; |
161 | unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MESC); | 161 | unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MESC); |
162 | 162 | ||
163 | /* need to reserve one byte in the FIFO for the slave address */ | ||
164 | if (msg->len > M_TX_RX_FIFO_SIZE - 1) { | ||
165 | dev_err(iproc_i2c->device, | ||
166 | "only support data length up to %u bytes\n", | ||
167 | M_TX_RX_FIFO_SIZE - 1); | ||
168 | return -EOPNOTSUPP; | ||
169 | } | ||
170 | |||
171 | /* check if bus is busy */ | 163 | /* check if bus is busy */ |
172 | if (!!(readl(iproc_i2c->base + M_CMD_OFFSET) & | 164 | if (!!(readl(iproc_i2c->base + M_CMD_OFFSET) & |
173 | BIT(M_CMD_START_BUSY_SHIFT))) { | 165 | BIT(M_CMD_START_BUSY_SHIFT))) { |
@@ -287,6 +279,12 @@ static const struct i2c_algorithm bcm_iproc_algo = { | |||
287 | .functionality = bcm_iproc_i2c_functionality, | 279 | .functionality = bcm_iproc_i2c_functionality, |
288 | }; | 280 | }; |
289 | 281 | ||
282 | static struct i2c_adapter_quirks bcm_iproc_i2c_quirks = { | ||
283 | /* need to reserve one byte in the FIFO for the slave address */ | ||
284 | .max_read_len = M_TX_RX_FIFO_SIZE - 1, | ||
285 | .max_write_len = M_TX_RX_FIFO_SIZE - 1, | ||
286 | }; | ||
287 | |||
290 | static int bcm_iproc_i2c_cfg_speed(struct bcm_iproc_i2c_dev *iproc_i2c) | 288 | static int bcm_iproc_i2c_cfg_speed(struct bcm_iproc_i2c_dev *iproc_i2c) |
291 | { | 289 | { |
292 | unsigned int bus_speed; | 290 | unsigned int bus_speed; |
@@ -413,6 +411,7 @@ static int bcm_iproc_i2c_probe(struct platform_device *pdev) | |||
413 | i2c_set_adapdata(adap, iproc_i2c); | 411 | i2c_set_adapdata(adap, iproc_i2c); |
414 | strlcpy(adap->name, "Broadcom iProc I2C adapter", sizeof(adap->name)); | 412 | strlcpy(adap->name, "Broadcom iProc I2C adapter", sizeof(adap->name)); |
415 | adap->algo = &bcm_iproc_algo; | 413 | adap->algo = &bcm_iproc_algo; |
414 | adap->quirks = &bcm_iproc_i2c_quirks; | ||
416 | adap->dev.parent = &pdev->dev; | 415 | adap->dev.parent = &pdev->dev; |
417 | adap->dev.of_node = pdev->dev.of_node; | 416 | adap->dev.of_node = pdev->dev.of_node; |
418 | 417 | ||