diff options
| author | Wolfram Sang <wsa@the-dreams.de> | 2018-10-11 17:07:30 -0400 |
|---|---|---|
| committer | Wolfram Sang <wsa@the-dreams.de> | 2018-10-11 17:07:30 -0400 |
| commit | 90fb814b6c025da45f71db1703cffe3fe87f575c (patch) | |
| tree | 5fd739d407654df6f9d6e82900a45e027dd8b9f0 /drivers/i2c | |
| parent | b30f2f65568f840e5ca522d98ba2ad73b8f59cde (diff) | |
| parent | 0238df646e6224016a45505d2c111a24669ebe21 (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.c | 4 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-isch.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-qcom-geni.c | 22 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-scmi.c | 1 |
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 | ||
| 35 | static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev) | 35 | static 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; |
