aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorWolfram Sang <wsa@the-dreams.de>2018-10-11 17:07:30 -0400
committerWolfram Sang <wsa@the-dreams.de>2018-10-11 17:07:30 -0400
commit90fb814b6c025da45f71db1703cffe3fe87f575c (patch)
tree5fd739d407654df6f9d6e82900a45e027dd8b9f0 /drivers/i2c
parentb30f2f65568f840e5ca522d98ba2ad73b8f59cde (diff)
parent0238df646e6224016a45505d2c111a24669ebe21 (diff)
Merge tag 'v4.19-rc7' into i2c/for-4.20
This is the 4.19-rc7 release
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-designware-master.c4
-rw-r--r--drivers/i2c/busses/i2c-isch.c2
-rw-r--r--drivers/i2c/busses/i2c-qcom-geni.c22
-rw-r--r--drivers/i2c/busses/i2c-scmi.c1
4 files changed, 23 insertions, 6 deletions
diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
index 2a630ac35ba2..8d1bc44d2530 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -34,11 +34,11 @@ static void i2c_dw_configure_fifo_master(struct dw_i2c_dev *dev)
34 34
35static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev) 35static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
36{ 36{
37 u32 ic_clk = i2c_dw_clk_rate(dev);
38 const char *mode_str, *fp_str = ""; 37 const char *mode_str, *fp_str = "";
39 u32 comp_param1; 38 u32 comp_param1;
40 u32 sda_falling_time, scl_falling_time; 39 u32 sda_falling_time, scl_falling_time;
41 struct i2c_timings *t = &dev->timings; 40 struct i2c_timings *t = &dev->timings;
41 u32 ic_clk;
42 int ret; 42 int ret;
43 43
44 ret = i2c_dw_acquire_lock(dev); 44 ret = i2c_dw_acquire_lock(dev);
@@ -53,6 +53,7 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
53 53
54 /* Calculate SCL timing parameters for standard mode if not set */ 54 /* Calculate SCL timing parameters for standard mode if not set */
55 if (!dev->ss_hcnt || !dev->ss_lcnt) { 55 if (!dev->ss_hcnt || !dev->ss_lcnt) {
56 ic_clk = i2c_dw_clk_rate(dev);
56 dev->ss_hcnt = 57 dev->ss_hcnt =
57 i2c_dw_scl_hcnt(ic_clk, 58 i2c_dw_scl_hcnt(ic_clk,
58 4000, /* tHD;STA = tHIGH = 4.0 us */ 59 4000, /* tHD;STA = tHIGH = 4.0 us */
@@ -89,6 +90,7 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
89 * needed also in high speed mode. 90 * needed also in high speed mode.
90 */ 91 */
91 if (!dev->fs_hcnt || !dev->fs_lcnt) { 92 if (!dev->fs_hcnt || !dev->fs_lcnt) {
93 ic_clk = i2c_dw_clk_rate(dev);
92 dev->fs_hcnt = 94 dev->fs_hcnt =
93 i2c_dw_scl_hcnt(ic_clk, 95 i2c_dw_scl_hcnt(ic_clk,
94 600, /* tHD;STA = tHIGH = 0.6 us */ 96 600, /* tHD;STA = tHIGH = 0.6 us */
diff --git a/drivers/i2c/busses/i2c-isch.c b/drivers/i2c/busses/i2c-isch.c
index 0cf1379f4e80..5c754bf659e2 100644
--- a/drivers/i2c/busses/i2c-isch.c
+++ b/drivers/i2c/busses/i2c-isch.c
@@ -164,7 +164,7 @@ static s32 sch_access(struct i2c_adapter *adap, u16 addr,
164 * run ~75 kHz instead which should do no harm. 164 * run ~75 kHz instead which should do no harm.
165 */ 165 */
166 dev_notice(&sch_adapter.dev, 166 dev_notice(&sch_adapter.dev,
167 "Clock divider unitialized. Setting defaults\n"); 167 "Clock divider uninitialized. Setting defaults\n");
168 outw(backbone_speed / (4 * 100), SMBHSTCLK); 168 outw(backbone_speed / (4 * 100), SMBHSTCLK);
169 } 169 }
170 170
diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index 36732eb688a4..9f2eb02481d3 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -367,20 +367,26 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
367 dma_addr_t rx_dma; 367 dma_addr_t rx_dma;
368 enum geni_se_xfer_mode mode; 368 enum geni_se_xfer_mode mode;
369 unsigned long time_left = XFER_TIMEOUT; 369 unsigned long time_left = XFER_TIMEOUT;
370 void *dma_buf;
370 371
371 gi2c->cur = msg; 372 gi2c->cur = msg;
372 mode = msg->len > 32 ? GENI_SE_DMA : GENI_SE_FIFO; 373 mode = GENI_SE_FIFO;
374 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
375 if (dma_buf)
376 mode = GENI_SE_DMA;
377
373 geni_se_select_mode(&gi2c->se, mode); 378 geni_se_select_mode(&gi2c->se, mode);
374 writel_relaxed(msg->len, gi2c->se.base + SE_I2C_RX_TRANS_LEN); 379 writel_relaxed(msg->len, gi2c->se.base + SE_I2C_RX_TRANS_LEN);
375 geni_se_setup_m_cmd(&gi2c->se, I2C_READ, m_param); 380 geni_se_setup_m_cmd(&gi2c->se, I2C_READ, m_param);
376 if (mode == GENI_SE_DMA) { 381 if (mode == GENI_SE_DMA) {
377 int ret; 382 int ret;
378 383
379 ret = geni_se_rx_dma_prep(&gi2c->se, msg->buf, msg->len, 384 ret = geni_se_rx_dma_prep(&gi2c->se, dma_buf, msg->len,
380 &rx_dma); 385 &rx_dma);
381 if (ret) { 386 if (ret) {
382 mode = GENI_SE_FIFO; 387 mode = GENI_SE_FIFO;
383 geni_se_select_mode(&gi2c->se, mode); 388 geni_se_select_mode(&gi2c->se, mode);
389 i2c_put_dma_safe_msg_buf(dma_buf, msg, false);
384 } 390 }
385 } 391 }
386 392
@@ -393,6 +399,7 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
393 if (gi2c->err) 399 if (gi2c->err)
394 geni_i2c_rx_fsm_rst(gi2c); 400 geni_i2c_rx_fsm_rst(gi2c);
395 geni_se_rx_dma_unprep(&gi2c->se, rx_dma, msg->len); 401 geni_se_rx_dma_unprep(&gi2c->se, rx_dma, msg->len);
402 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err);
396 } 403 }
397 return gi2c->err; 404 return gi2c->err;
398} 405}
@@ -403,20 +410,26 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
403 dma_addr_t tx_dma; 410 dma_addr_t tx_dma;
404 enum geni_se_xfer_mode mode; 411 enum geni_se_xfer_mode mode;
405 unsigned long time_left; 412 unsigned long time_left;
413 void *dma_buf;
406 414
407 gi2c->cur = msg; 415 gi2c->cur = msg;
408 mode = msg->len > 32 ? GENI_SE_DMA : GENI_SE_FIFO; 416 mode = GENI_SE_FIFO;
417 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
418 if (dma_buf)
419 mode = GENI_SE_DMA;
420
409 geni_se_select_mode(&gi2c->se, mode); 421 geni_se_select_mode(&gi2c->se, mode);
410 writel_relaxed(msg->len, gi2c->se.base + SE_I2C_TX_TRANS_LEN); 422 writel_relaxed(msg->len, gi2c->se.base + SE_I2C_TX_TRANS_LEN);
411 geni_se_setup_m_cmd(&gi2c->se, I2C_WRITE, m_param); 423 geni_se_setup_m_cmd(&gi2c->se, I2C_WRITE, m_param);
412 if (mode == GENI_SE_DMA) { 424 if (mode == GENI_SE_DMA) {
413 int ret; 425 int ret;
414 426
415 ret = geni_se_tx_dma_prep(&gi2c->se, msg->buf, msg->len, 427 ret = geni_se_tx_dma_prep(&gi2c->se, dma_buf, msg->len,
416 &tx_dma); 428 &tx_dma);
417 if (ret) { 429 if (ret) {
418 mode = GENI_SE_FIFO; 430 mode = GENI_SE_FIFO;
419 geni_se_select_mode(&gi2c->se, mode); 431 geni_se_select_mode(&gi2c->se, mode);
432 i2c_put_dma_safe_msg_buf(dma_buf, msg, false);
420 } 433 }
421 } 434 }
422 435
@@ -432,6 +445,7 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
432 if (gi2c->err) 445 if (gi2c->err)
433 geni_i2c_tx_fsm_rst(gi2c); 446 geni_i2c_tx_fsm_rst(gi2c);
434 geni_se_tx_dma_unprep(&gi2c->se, tx_dma, msg->len); 447 geni_se_tx_dma_unprep(&gi2c->se, tx_dma, msg->len);
448 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err);
435 } 449 }
436 return gi2c->err; 450 return gi2c->err;
437} 451}
diff --git a/drivers/i2c/busses/i2c-scmi.c b/drivers/i2c/busses/i2c-scmi.c
index a01389b85f13..7e9a2bbf5ddc 100644
--- a/drivers/i2c/busses/i2c-scmi.c
+++ b/drivers/i2c/busses/i2c-scmi.c
@@ -152,6 +152,7 @@ acpi_smbus_cmi_access(struct i2c_adapter *adap, u16 addr, unsigned short flags,
152 mt_params[3].type = ACPI_TYPE_INTEGER; 152 mt_params[3].type = ACPI_TYPE_INTEGER;
153 mt_params[3].integer.value = len; 153 mt_params[3].integer.value = len;
154 mt_params[4].type = ACPI_TYPE_BUFFER; 154 mt_params[4].type = ACPI_TYPE_BUFFER;
155 mt_params[4].buffer.length = len;
155 mt_params[4].buffer.pointer = data->block + 1; 156 mt_params[4].buffer.pointer = data->block + 1;
156 } 157 }
157 break; 158 break;