Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'i2c/for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull i2c updates from Wolfram Sang:
"I2C has not so much stuff this time. Mostly driver enablement for new
SoCs, some driver bugfixes, and some cleanups"

* 'i2c/for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (35 commits)
MAINTAINERS: add maintainer for Renesas RIIC driver
i2c: sh_mobile: Remove dummy runtime PM callbacks
i2c: uniphier-f: fix race condition when IRQ is cleared
i2c: uniphier-f: fix occasional timeout error
i2c: uniphier-f: make driver robust against concurrency
i2c: i2c-qcom-geni: Simplify irq handler
i2c: i2c-qcom-geni: Simplify tx/rx functions
i2c: designware: Set IRQF_NO_SUSPEND flag for all BYT and CHT controllers
i2c: mux: mlxcpld: simplify code to reach the adapter
i2c: mux: ltc4306: simplify code to reach the adapter
i2c: mux: pca954x: simplify code to reach the adapter
i2c: core: remove level of indentation in i2c_transfer
i2c: core: remove outdated DEBUG output
i2c: zx2967: use core to detect 'no zero length' quirk
i2c: tegra: use core to detect 'no zero length' quirk
i2c: qup: use core to detect 'no zero length' quirk
i2c: omap: use core to detect 'no zero length' quirk
i2c: Convert to using %pOFn instead of device_node.name
i2c: brcmstb: Allow enabling the driver on DSL SoCs
eeprom: at24: fix unexpected timeout under high load
...

+450 -320
+6 -1
Documentation/devicetree/bindings/i2c/i2c-designware.txt
··· 3 3 Required properties : 4 4 5 5 - compatible : should be "snps,designware-i2c" 6 + or "mscc,ocelot-i2c" with "snps,designware-i2c" for fallback 6 7 - reg : Offset and length of the register set for the device 7 8 - interrupts : <IRQ> where IRQ is the interrupt number. 8 9 ··· 12 11 - clock-frequency : desired I2C bus clock frequency in Hz. 13 12 14 13 Optional properties : 14 + - reg : for "mscc,ocelot-i2c", a second register set to configure the SDA hold 15 + time, named ICPU_CFG:TWI_DELAY in the datasheet. 16 + 15 17 - i2c-sda-hold-time-ns : should contain the SDA hold time in nanoseconds. 16 - This option is only supported in hardware blocks version 1.11a or newer. 18 + This option is only supported in hardware blocks version 1.11a or newer and 19 + on Microsemi SoCs ("mscc,ocelot-i2c" compatible). 17 20 18 21 - i2c-scl-falling-time-ns : should contain the SCL falling time in nanoseconds. 19 22 This value which is by default 300ns is used to compute the tLOW period.
+2
Documentation/devicetree/bindings/i2c/i2c-rcar.txt
··· 3 3 Required properties: 4 4 - compatible: 5 5 "renesas,i2c-r8a7743" if the device is a part of a R8A7743 SoC. 6 + "renesas,i2c-r8a7744" if the device is a part of a R8A7744 SoC. 6 7 "renesas,i2c-r8a7745" if the device is a part of a R8A7745 SoC. 8 + "renesas,i2c-r8a77470" if the device is a part of a R8A77470 SoC. 7 9 "renesas,i2c-r8a774a1" if the device is a part of a R8A774A1 SoC. 8 10 "renesas,i2c-r8a7778" if the device is a part of a R8A7778 SoC. 9 11 "renesas,i2c-r8a7779" if the device is a part of a R8A7779 SoC.
+1
Documentation/devicetree/bindings/i2c/i2c-sh_mobile.txt
··· 5 5 - "renesas,iic-r8a73a4" (R-Mobile APE6) 6 6 - "renesas,iic-r8a7740" (R-Mobile A1) 7 7 - "renesas,iic-r8a7743" (RZ/G1M) 8 + - "renesas,iic-r8a7744" (RZ/G1N) 8 9 - "renesas,iic-r8a7745" (RZ/G1E) 9 10 - "renesas,iic-r8a774a1" (RZ/G2M) 10 11 - "renesas,iic-r8a7790" (R-Car H2)
+6
MAINTAINERS
··· 12548 12548 F: drivers/i2c/busses/i2c-rcar.c 12549 12549 F: drivers/i2c/busses/i2c-sh_mobile.c 12550 12550 12551 + RENESAS RIIC DRIVER 12552 + M: Chris Brandt <chris.brandt@renesas.com> 12553 + S: Supported 12554 + F: Documentation/devicetree/bindings/i2c/i2c-riic.txt 12555 + F: drivers/i2c/busses/i2c-riic.c 12556 + 12551 12557 RENESAS USB PHY DRIVER 12552 12558 M: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> 12553 12559 L: linux-renesas-soc@vger.kernel.org
+4 -3
drivers/i2c/busses/Kconfig
··· 432 432 If you do not need KONA I2C interface, say N. 433 433 434 434 config I2C_BRCMSTB 435 - tristate "BRCM Settop I2C controller" 436 - depends on ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST 435 + tristate "BRCM Settop/DSL I2C controller" 436 + depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_63XX || \ 437 + COMPILE_TEST 437 438 default y 438 439 help 439 440 If you say yes to this option, support will be included for the 440 - I2C interface on the Broadcom Settop SoCs. 441 + I2C interface on the Broadcom Settop/DSL SoCs. 441 442 442 443 If you do not need I2C interface, say N. 443 444
+128 -77
drivers/i2c/busses/i2c-aspeed.c
··· 82 82 #define ASPEED_I2CD_INTR_RX_DONE BIT(2) 83 83 #define ASPEED_I2CD_INTR_TX_NAK BIT(1) 84 84 #define ASPEED_I2CD_INTR_TX_ACK BIT(0) 85 + #define ASPEED_I2CD_INTR_MASTER_ERRORS \ 86 + (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \ 87 + ASPEED_I2CD_INTR_SCL_TIMEOUT | \ 88 + ASPEED_I2CD_INTR_ABNORMAL | \ 89 + ASPEED_I2CD_INTR_ARBIT_LOSS) 85 90 #define ASPEED_I2CD_INTR_ALL \ 86 91 (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \ 87 92 ASPEED_I2CD_INTR_BUS_RECOVER_DONE | \ ··· 142 137 /* Synchronizes I/O mem access to base. */ 143 138 spinlock_t lock; 144 139 struct completion cmd_complete; 145 - u32 (*get_clk_reg_val)(u32 divisor); 140 + u32 (*get_clk_reg_val)(struct device *dev, 141 + u32 divisor); 146 142 unsigned long parent_clk_frequency; 147 143 u32 bus_frequency; 148 144 /* Transaction state. */ ··· 233 227 } 234 228 235 229 #if IS_ENABLED(CONFIG_I2C_SLAVE) 236 - static bool aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus) 230 + static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status) 237 231 { 238 - u32 command, irq_status, status_ack = 0; 232 + u32 command, irq_handled = 0; 239 233 struct i2c_client *slave = bus->slave; 240 - bool irq_handled = true; 241 234 u8 value; 242 235 243 - if (!slave) { 244 - irq_handled = false; 245 - goto out; 246 - } 236 + if (!slave) 237 + return 0; 247 238 248 239 command = readl(bus->base + ASPEED_I2C_CMD_REG); 249 - irq_status = readl(bus->base + ASPEED_I2C_INTR_STS_REG); 250 240 251 241 /* Slave was requested, restart state machine. */ 252 242 if (irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH) { 253 - status_ack |= ASPEED_I2CD_INTR_SLAVE_MATCH; 243 + irq_handled |= ASPEED_I2CD_INTR_SLAVE_MATCH; 254 244 bus->slave_state = ASPEED_I2C_SLAVE_START; 255 245 } 256 246 257 247 /* Slave is not currently active, irq was for someone else. */ 258 - if (bus->slave_state == ASPEED_I2C_SLAVE_STOP) { 259 - irq_handled = false; 260 - goto out; 261 - } 248 + if (bus->slave_state == ASPEED_I2C_SLAVE_STOP) 249 + return irq_handled; 262 250 263 251 dev_dbg(bus->dev, "slave irq status 0x%08x, cmd 0x%08x\n", 264 252 irq_status, command); ··· 269 269 bus->slave_state = 270 270 ASPEED_I2C_SLAVE_WRITE_REQUESTED; 271 271 } 272 - status_ack |= ASPEED_I2CD_INTR_RX_DONE; 272 + irq_handled |= ASPEED_I2CD_INTR_RX_DONE; 273 273 } 274 274 275 275 /* Slave was asked to stop. */ 276 276 if (irq_status & ASPEED_I2CD_INTR_NORMAL_STOP) { 277 - status_ack |= ASPEED_I2CD_INTR_NORMAL_STOP; 277 + irq_handled |= ASPEED_I2CD_INTR_NORMAL_STOP; 278 278 bus->slave_state = ASPEED_I2C_SLAVE_STOP; 279 279 } 280 280 if (irq_status & ASPEED_I2CD_INTR_TX_NAK) { 281 - status_ack |= ASPEED_I2CD_INTR_TX_NAK; 281 + irq_handled |= ASPEED_I2CD_INTR_TX_NAK; 282 282 bus->slave_state = ASPEED_I2C_SLAVE_STOP; 283 283 } 284 + if (irq_status & ASPEED_I2CD_INTR_TX_ACK) 285 + irq_handled |= ASPEED_I2CD_INTR_TX_ACK; 284 286 285 287 switch (bus->slave_state) { 286 288 case ASPEED_I2C_SLAVE_READ_REQUESTED: 287 289 if (irq_status & ASPEED_I2CD_INTR_TX_ACK) 288 290 dev_err(bus->dev, "Unexpected ACK on read request.\n"); 289 291 bus->slave_state = ASPEED_I2C_SLAVE_READ_PROCESSED; 290 - 291 292 i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value); 292 293 writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG); 293 294 writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG); 294 295 break; 295 296 case ASPEED_I2C_SLAVE_READ_PROCESSED: 296 - status_ack |= ASPEED_I2CD_INTR_TX_ACK; 297 297 if (!(irq_status & ASPEED_I2CD_INTR_TX_ACK)) 298 298 dev_err(bus->dev, 299 299 "Expected ACK after processed read.\n"); ··· 317 317 break; 318 318 } 319 319 320 - if (status_ack != irq_status) 321 - dev_err(bus->dev, 322 - "irq handled != irq. expected %x, but was %x\n", 323 - irq_status, status_ack); 324 - writel(status_ack, bus->base + ASPEED_I2C_INTR_STS_REG); 325 - 326 - out: 327 320 return irq_handled; 328 321 } 329 322 #endif /* CONFIG_I2C_SLAVE */ ··· 373 380 return 0; 374 381 } 375 382 376 - static bool aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus) 383 + static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status) 377 384 { 378 - u32 irq_status, status_ack = 0, command = 0; 385 + u32 irq_handled = 0, command = 0; 379 386 struct i2c_msg *msg; 380 387 u8 recv_byte; 381 388 int ret; 382 389 383 - irq_status = readl(bus->base + ASPEED_I2C_INTR_STS_REG); 384 - /* Ack all interrupt bits. */ 385 - writel(irq_status, bus->base + ASPEED_I2C_INTR_STS_REG); 386 - 387 390 if (irq_status & ASPEED_I2CD_INTR_BUS_RECOVER_DONE) { 388 391 bus->master_state = ASPEED_I2C_MASTER_INACTIVE; 389 - status_ack |= ASPEED_I2CD_INTR_BUS_RECOVER_DONE; 392 + irq_handled |= ASPEED_I2CD_INTR_BUS_RECOVER_DONE; 390 393 goto out_complete; 394 + } else { 395 + /* Master is not currently active, irq was for someone else. */ 396 + if (bus->master_state == ASPEED_I2C_MASTER_INACTIVE) 397 + goto out_no_complete; 391 398 } 392 399 393 400 /* ··· 396 403 * INACTIVE state. 397 404 */ 398 405 ret = aspeed_i2c_is_irq_error(irq_status); 399 - if (ret < 0) { 406 + if (ret) { 400 407 dev_dbg(bus->dev, "received error interrupt: 0x%08x\n", 401 408 irq_status); 402 409 bus->cmd_err = ret; 403 410 bus->master_state = ASPEED_I2C_MASTER_INACTIVE; 411 + irq_handled |= (irq_status & ASPEED_I2CD_INTR_MASTER_ERRORS); 404 412 goto out_complete; 405 413 } 406 414 407 415 /* We are in an invalid state; reset bus to a known state. */ 408 416 if (!bus->msgs) { 409 - dev_err(bus->dev, "bus in unknown state\n"); 417 + dev_err(bus->dev, "bus in unknown state. irq_status: 0x%x\n", 418 + irq_status); 410 419 bus->cmd_err = -EIO; 411 - if (bus->master_state != ASPEED_I2C_MASTER_STOP) 420 + if (bus->master_state != ASPEED_I2C_MASTER_STOP && 421 + bus->master_state != ASPEED_I2C_MASTER_INACTIVE) 412 422 aspeed_i2c_do_stop(bus); 413 423 goto out_no_complete; 414 424 } ··· 424 428 */ 425 429 if (bus->master_state == ASPEED_I2C_MASTER_START) { 426 430 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) { 431 + if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_NAK))) { 432 + bus->cmd_err = -ENXIO; 433 + bus->master_state = ASPEED_I2C_MASTER_INACTIVE; 434 + goto out_complete; 435 + } 427 436 pr_devel("no slave present at %02x\n", msg->addr); 428 - status_ack |= ASPEED_I2CD_INTR_TX_NAK; 437 + irq_handled |= ASPEED_I2CD_INTR_TX_NAK; 429 438 bus->cmd_err = -ENXIO; 430 439 aspeed_i2c_do_stop(bus); 431 440 goto out_no_complete; 432 441 } 433 - status_ack |= ASPEED_I2CD_INTR_TX_ACK; 442 + irq_handled |= ASPEED_I2CD_INTR_TX_ACK; 434 443 if (msg->len == 0) { /* SMBUS_QUICK */ 435 444 aspeed_i2c_do_stop(bus); 436 445 goto out_no_complete; ··· 450 449 case ASPEED_I2C_MASTER_TX: 451 450 if (unlikely(irq_status & ASPEED_I2CD_INTR_TX_NAK)) { 452 451 dev_dbg(bus->dev, "slave NACKed TX\n"); 453 - status_ack |= ASPEED_I2CD_INTR_TX_NAK; 452 + irq_handled |= ASPEED_I2CD_INTR_TX_NAK; 454 453 goto error_and_stop; 455 454 } else if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) { 456 455 dev_err(bus->dev, "slave failed to ACK TX\n"); 457 456 goto error_and_stop; 458 457 } 459 - status_ack |= ASPEED_I2CD_INTR_TX_ACK; 460 - /* fallthrough intended */ 458 + irq_handled |= ASPEED_I2CD_INTR_TX_ACK; 459 + /* fall through */ 461 460 case ASPEED_I2C_MASTER_TX_FIRST: 462 461 if (bus->buf_index < msg->len) { 463 462 bus->master_state = ASPEED_I2C_MASTER_TX; ··· 473 472 /* RX may not have completed yet (only address cycle) */ 474 473 if (!(irq_status & ASPEED_I2CD_INTR_RX_DONE)) 475 474 goto out_no_complete; 476 - /* fallthrough intended */ 475 + /* fall through */ 477 476 case ASPEED_I2C_MASTER_RX: 478 477 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_RX_DONE))) { 479 478 dev_err(bus->dev, "master failed to RX\n"); 480 479 goto error_and_stop; 481 480 } 482 - status_ack |= ASPEED_I2CD_INTR_RX_DONE; 481 + irq_handled |= ASPEED_I2CD_INTR_RX_DONE; 483 482 484 483 recv_byte = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8; 485 484 msg->buf[bus->buf_index++] = recv_byte; ··· 507 506 goto out_no_complete; 508 507 case ASPEED_I2C_MASTER_STOP: 509 508 if (unlikely(!(irq_status & ASPEED_I2CD_INTR_NORMAL_STOP))) { 510 - dev_err(bus->dev, "master failed to STOP\n"); 509 + dev_err(bus->dev, 510 + "master failed to STOP. irq_status:0x%x\n", 511 + irq_status); 511 512 bus->cmd_err = -EIO; 512 513 /* Do not STOP as we have already tried. */ 513 514 } else { 514 - status_ack |= ASPEED_I2CD_INTR_NORMAL_STOP; 515 + irq_handled |= ASPEED_I2CD_INTR_NORMAL_STOP; 515 516 } 516 517 517 518 bus->master_state = ASPEED_I2C_MASTER_INACTIVE; ··· 543 540 bus->master_xfer_result = bus->msgs_index + 1; 544 541 complete(&bus->cmd_complete); 545 542 out_no_complete: 546 - if (irq_status != status_ack) 547 - dev_err(bus->dev, 548 - "irq handled != irq. expected 0x%08x, but was 0x%08x\n", 549 - irq_status, status_ack); 550 - return !!irq_status; 543 + return irq_handled; 551 544 } 552 545 553 546 static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id) 554 547 { 555 548 struct aspeed_i2c_bus *bus = dev_id; 556 - bool ret; 549 + u32 irq_received, irq_remaining, irq_handled; 557 550 558 551 spin_lock(&bus->lock); 552 + irq_received = readl(bus->base + ASPEED_I2C_INTR_STS_REG); 553 + /* Ack all interrupts except for Rx done */ 554 + writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE, 555 + bus->base + ASPEED_I2C_INTR_STS_REG); 556 + irq_remaining = irq_received; 559 557 560 558 #if IS_ENABLED(CONFIG_I2C_SLAVE) 561 - if (aspeed_i2c_slave_irq(bus)) { 562 - dev_dbg(bus->dev, "irq handled by slave.\n"); 563 - ret = true; 564 - goto out; 559 + /* 560 + * In most cases, interrupt bits will be set one by one, although 561 + * multiple interrupt bits could be set at the same time. It's also 562 + * possible that master interrupt bits could be set along with slave 563 + * interrupt bits. Each case needs to be handled using corresponding 564 + * handlers depending on the current state. 565 + */ 566 + if (bus->master_state != ASPEED_I2C_MASTER_INACTIVE) { 567 + irq_handled = aspeed_i2c_master_irq(bus, irq_remaining); 568 + irq_remaining &= ~irq_handled; 569 + if (irq_remaining) 570 + irq_handled |= aspeed_i2c_slave_irq(bus, irq_remaining); 571 + } else { 572 + irq_handled = aspeed_i2c_slave_irq(bus, irq_remaining); 573 + irq_remaining &= ~irq_handled; 574 + if (irq_remaining) 575 + irq_handled |= aspeed_i2c_master_irq(bus, 576 + irq_remaining); 565 577 } 578 + #else 579 + irq_handled = aspeed_i2c_master_irq(bus, irq_remaining); 566 580 #endif /* CONFIG_I2C_SLAVE */ 567 581 568 - ret = aspeed_i2c_master_irq(bus); 582 + irq_remaining &= ~irq_handled; 583 + if (irq_remaining) 584 + dev_err(bus->dev, 585 + "irq handled != irq. expected 0x%08x, but was 0x%08x\n", 586 + irq_received, irq_handled); 569 587 570 - out: 588 + /* Ack Rx done */ 589 + if (irq_received & ASPEED_I2CD_INTR_RX_DONE) 590 + writel(ASPEED_I2CD_INTR_RX_DONE, 591 + bus->base + ASPEED_I2C_INTR_STS_REG); 571 592 spin_unlock(&bus->lock); 572 - return ret ? IRQ_HANDLED : IRQ_NONE; 593 + return irq_remaining ? IRQ_NONE : IRQ_HANDLED; 573 594 } 574 595 575 596 static int aspeed_i2c_master_xfer(struct i2c_adapter *adap, ··· 711 684 #endif /* CONFIG_I2C_SLAVE */ 712 685 }; 713 686 714 - static u32 aspeed_i2c_get_clk_reg_val(u32 clk_high_low_max, u32 divisor) 687 + static u32 aspeed_i2c_get_clk_reg_val(struct device *dev, 688 + u32 clk_high_low_mask, 689 + u32 divisor) 715 690 { 716 - u32 base_clk, clk_high, clk_low, tmp; 691 + u32 base_clk_divisor, clk_high_low_max, clk_high, clk_low, tmp; 692 + 693 + /* 694 + * SCL_high and SCL_low represent a value 1 greater than what is stored 695 + * since a zero divider is meaningless. Thus, the max value each can 696 + * store is every bit set + 1. Since SCL_high and SCL_low are added 697 + * together (see below), the max value of both is the max value of one 698 + * them times two. 699 + */ 700 + clk_high_low_max = (clk_high_low_mask + 1) * 2; 717 701 718 702 /* 719 703 * The actual clock frequency of SCL is: 720 704 * SCL_freq = APB_freq / (base_freq * (SCL_high + SCL_low)) 721 705 * = APB_freq / divisor 722 706 * where base_freq is a programmable clock divider; its value is 723 - * base_freq = 1 << base_clk 707 + * base_freq = 1 << base_clk_divisor 724 708 * SCL_high is the number of base_freq clock cycles that SCL stays high 725 709 * and SCL_low is the number of base_freq clock cycles that SCL stays 726 710 * low for a period of SCL. ··· 741 703 * SCL_low = clk_low + 1 742 704 * Thus, 743 705 * SCL_freq = APB_freq / 744 - * ((1 << base_clk) * (clk_high + 1 + clk_low + 1)) 706 + * ((1 << base_clk_divisor) * (clk_high + 1 + clk_low + 1)) 745 707 * The documentation recommends clk_high >= clk_high_max / 2 and 746 708 * clk_low >= clk_low_max / 2 - 1 when possible; this last constraint 747 709 * gives us the following solution: 748 710 */ 749 - base_clk = divisor > clk_high_low_max ? 711 + base_clk_divisor = divisor > clk_high_low_max ? 750 712 ilog2((divisor - 1) / clk_high_low_max) + 1 : 0; 751 - tmp = (divisor + (1 << base_clk) - 1) >> base_clk; 752 - clk_low = tmp / 2; 753 - clk_high = tmp - clk_low; 754 713 755 - if (clk_high) 756 - clk_high--; 714 + if (base_clk_divisor > ASPEED_I2CD_TIME_BASE_DIVISOR_MASK) { 715 + base_clk_divisor = ASPEED_I2CD_TIME_BASE_DIVISOR_MASK; 716 + clk_low = clk_high_low_mask; 717 + clk_high = clk_high_low_mask; 718 + dev_err(dev, 719 + "clamping clock divider: divider requested, %u, is greater than largest possible divider, %u.\n", 720 + divisor, (1 << base_clk_divisor) * clk_high_low_max); 721 + } else { 722 + tmp = (divisor + (1 << base_clk_divisor) - 1) 723 + >> base_clk_divisor; 724 + clk_low = tmp / 2; 725 + clk_high = tmp - clk_low; 757 726 758 - if (clk_low) 759 - clk_low--; 727 + if (clk_high) 728 + clk_high--; 729 + 730 + if (clk_low) 731 + clk_low--; 732 + } 760 733 761 734 762 735 return ((clk_high << ASPEED_I2CD_TIME_SCL_HIGH_SHIFT) 763 736 & ASPEED_I2CD_TIME_SCL_HIGH_MASK) 764 737 | ((clk_low << ASPEED_I2CD_TIME_SCL_LOW_SHIFT) 765 738 & ASPEED_I2CD_TIME_SCL_LOW_MASK) 766 - | (base_clk & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK); 739 + | (base_clk_divisor 740 + & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK); 767 741 } 768 742 769 - static u32 aspeed_i2c_24xx_get_clk_reg_val(u32 divisor) 743 + static u32 aspeed_i2c_24xx_get_clk_reg_val(struct device *dev, u32 divisor) 770 744 { 771 745 /* 772 746 * clk_high and clk_low are each 3 bits wide, so each can hold a max 773 747 * value of 8 giving a clk_high_low_max of 16. 774 748 */ 775 - return aspeed_i2c_get_clk_reg_val(16, divisor); 749 + return aspeed_i2c_get_clk_reg_val(dev, GENMASK(2, 0), divisor); 776 750 } 777 751 778 - static u32 aspeed_i2c_25xx_get_clk_reg_val(u32 divisor) 752 + static u32 aspeed_i2c_25xx_get_clk_reg_val(struct device *dev, u32 divisor) 779 753 { 780 754 /* 781 755 * clk_high and clk_low are each 4 bits wide, so each can hold a max 782 756 * value of 16 giving a clk_high_low_max of 32. 783 757 */ 784 - return aspeed_i2c_get_clk_reg_val(32, divisor); 758 + return aspeed_i2c_get_clk_reg_val(dev, GENMASK(3, 0), divisor); 785 759 } 786 760 787 761 /* precondition: bus.lock has been acquired. */ ··· 806 756 clk_reg_val &= (ASPEED_I2CD_TIME_TBUF_MASK | 807 757 ASPEED_I2CD_TIME_THDSTA_MASK | 808 758 ASPEED_I2CD_TIME_TACST_MASK); 809 - clk_reg_val |= bus->get_clk_reg_val(divisor); 759 + clk_reg_val |= bus->get_clk_reg_val(bus->dev, divisor); 810 760 writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1); 811 761 writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2); 812 762 ··· 922 872 if (!match) 923 873 bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val; 924 874 else 925 - bus->get_clk_reg_val = (u32 (*)(u32))match->data; 875 + bus->get_clk_reg_val = (u32 (*)(struct device *, u32)) 876 + match->data; 926 877 927 878 /* Initialize the I2C adapter */ 928 879 spin_lock_init(&bus->lock);
+1 -1
drivers/i2c/busses/i2c-designware-baytrail.c
··· 164 164 dev_info(dev->dev, "I2C bus managed by PUNIT\n"); 165 165 dev->acquire_lock = baytrail_i2c_acquire; 166 166 dev->release_lock = baytrail_i2c_release; 167 - dev->pm_disabled = true; 167 + dev->shared_with_punit = true; 168 168 169 169 pm_qos_add_request(&dev->pm_qos, PM_QOS_CPU_DMA_LATENCY, 170 170 PM_QOS_DEFAULT_VALUE);
+2
drivers/i2c/busses/i2c-designware-common.c
··· 201 201 dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n", 202 202 dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK, 203 203 dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT); 204 + } else if (dev->set_sda_hold_time) { 205 + dev->set_sda_hold_time(dev); 204 206 } else if (dev->sda_hold_time) { 205 207 dev_warn(dev->dev, 206 208 "Hardware too old to adjust SDA hold time.\n");
+7 -2
drivers/i2c/busses/i2c-designware-core.h
··· 212 212 * @pm_qos: pm_qos_request used while holding a hardware lock on the bus 213 213 * @acquire_lock: function to acquire a hardware lock on the bus 214 214 * @release_lock: function to release a hardware lock on the bus 215 - * @pm_disabled: true if power-management should be disabled for this i2c-bus 215 + * @shared_with_punit: true if this bus is shared with the SoCs PUNIT 216 216 * @disable: function to disable the controller 217 217 * @disable_int: function to disable all interrupts 218 218 * @init: function to initialize the I2C hardware ··· 225 225 struct dw_i2c_dev { 226 226 struct device *dev; 227 227 void __iomem *base; 228 + void __iomem *ext; 228 229 struct completion cmd_complete; 229 230 struct clk *clk; 230 231 struct reset_control *rst; ··· 266 265 struct pm_qos_request pm_qos; 267 266 int (*acquire_lock)(struct dw_i2c_dev *dev); 268 267 void (*release_lock)(struct dw_i2c_dev *dev); 269 - bool pm_disabled; 268 + bool shared_with_punit; 270 269 void (*disable)(struct dw_i2c_dev *dev); 271 270 void (*disable_int)(struct dw_i2c_dev *dev); 272 271 int (*init)(struct dw_i2c_dev *dev); 272 + int (*set_sda_hold_time)(struct dw_i2c_dev *dev); 273 273 int mode; 274 274 struct i2c_bus_recovery_info rinfo; 275 275 }; ··· 278 276 #define ACCESS_SWAP 0x00000001 279 277 #define ACCESS_16BIT 0x00000002 280 278 #define ACCESS_INTR_MASK 0x00000004 279 + #define ACCESS_NO_IRQ_SUSPEND 0x00000008 281 280 282 281 #define MODEL_CHERRYTRAIL 0x00000100 282 + #define MODEL_MSCC_OCELOT 0x00000200 283 + #define MODEL_MASK 0x00000f00 283 284 284 285 u32 dw_readl(struct dw_i2c_dev *dev, int offset); 285 286 void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset);
+1 -1
drivers/i2c/busses/i2c-designware-master.c
··· 709 709 adap->dev.parent = dev->dev; 710 710 i2c_set_adapdata(adap, dev); 711 711 712 - if (dev->pm_disabled) { 712 + if (dev->flags & ACCESS_NO_IRQ_SUSPEND) { 713 713 irq_flags = IRQF_NO_SUSPEND; 714 714 } else { 715 715 irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND;
+56 -34
drivers/i2c/busses/i2c-designware-platdrv.c
··· 85 85 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); 86 86 struct i2c_timings *t = &dev->timings; 87 87 u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0; 88 - acpi_handle handle = ACPI_HANDLE(&pdev->dev); 89 - const struct acpi_device_id *id; 90 - struct acpi_device *adev; 91 - const char *uid; 92 88 93 89 dev->adapter.nr = -1; 94 90 dev->tx_fifo_depth = 32; ··· 115 119 break; 116 120 } 117 121 118 - id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev); 119 - if (id && id->driver_data) 120 - dev->flags |= (u32)id->driver_data; 121 - 122 - if (acpi_bus_get_device(handle, &adev)) 123 - return -ENODEV; 124 - 125 - /* 126 - * Cherrytrail I2C7 gets used for the PMIC which gets accessed 127 - * through ACPI opregions during late suspend / early resume 128 - * disable pm for it. 129 - */ 130 - uid = adev->pnp.unique_id; 131 - if ((dev->flags & MODEL_CHERRYTRAIL) && !strcmp(uid, "7")) 132 - dev->pm_disabled = true; 133 - 134 122 return 0; 135 123 } 136 124 ··· 123 143 { "INT33C3", 0 }, 124 144 { "INT3432", 0 }, 125 145 { "INT3433", 0 }, 126 - { "80860F41", 0 }, 127 - { "808622C1", MODEL_CHERRYTRAIL }, 146 + { "80860F41", ACCESS_NO_IRQ_SUSPEND }, 147 + { "808622C1", ACCESS_NO_IRQ_SUSPEND | MODEL_CHERRYTRAIL }, 128 148 { "AMD0010", ACCESS_INTR_MASK }, 129 149 { "AMDI0010", ACCESS_INTR_MASK }, 130 150 { "AMDI0510", 0 }, ··· 136 156 MODULE_DEVICE_TABLE(acpi, dw_i2c_acpi_match); 137 157 #else 138 158 static inline int dw_i2c_acpi_configure(struct platform_device *pdev) 159 + { 160 + return -ENODEV; 161 + } 162 + #endif 163 + 164 + #ifdef CONFIG_OF 165 + #define MSCC_ICPU_CFG_TWI_DELAY 0x0 166 + #define MSCC_ICPU_CFG_TWI_DELAY_ENABLE BIT(0) 167 + #define MSCC_ICPU_CFG_TWI_SPIKE_FILTER 0x4 168 + 169 + static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev) 170 + { 171 + writel((dev->sda_hold_time << 1) | MSCC_ICPU_CFG_TWI_DELAY_ENABLE, 172 + dev->ext + MSCC_ICPU_CFG_TWI_DELAY); 173 + 174 + return 0; 175 + } 176 + 177 + static int dw_i2c_of_configure(struct platform_device *pdev) 178 + { 179 + struct dw_i2c_dev *dev = platform_get_drvdata(pdev); 180 + struct resource *mem; 181 + 182 + switch (dev->flags & MODEL_MASK) { 183 + case MODEL_MSCC_OCELOT: 184 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 1); 185 + dev->ext = devm_ioremap_resource(&pdev->dev, mem); 186 + if (!IS_ERR(dev->ext)) 187 + dev->set_sda_hold_time = mscc_twi_set_sda_hold_time; 188 + break; 189 + default: 190 + break; 191 + } 192 + 193 + return 0; 194 + } 195 + 196 + static const struct of_device_id dw_i2c_of_match[] = { 197 + { .compatible = "snps,designware-i2c", }, 198 + { .compatible = "mscc,ocelot-i2c", .data = (void *)MODEL_MSCC_OCELOT }, 199 + {}, 200 + }; 201 + MODULE_DEVICE_TABLE(of, dw_i2c_of_match); 202 + #else 203 + static inline int dw_i2c_of_configure(struct platform_device *pdev) 139 204 { 140 205 return -ENODEV; 141 206 } ··· 246 221 { 247 222 pm_runtime_disable(dev->dev); 248 223 249 - if (dev->pm_disabled) 224 + if (dev->shared_with_punit) 250 225 pm_runtime_put_noidle(dev->dev); 251 226 } 252 227 ··· 316 291 else 317 292 t->bus_freq_hz = 400000; 318 293 294 + dev->flags |= (uintptr_t)device_get_match_data(&pdev->dev); 295 + 296 + if (pdev->dev.of_node) 297 + dw_i2c_of_configure(pdev); 298 + 319 299 if (has_acpi_companion(&pdev->dev)) 320 300 dw_i2c_acpi_configure(pdev); 321 301 ··· 378 348 pm_runtime_use_autosuspend(&pdev->dev); 379 349 pm_runtime_set_active(&pdev->dev); 380 350 381 - if (dev->pm_disabled) 351 + if (dev->shared_with_punit) 382 352 pm_runtime_get_noresume(&pdev->dev); 383 353 384 354 pm_runtime_enable(&pdev->dev); ··· 423 393 return 0; 424 394 } 425 395 426 - #ifdef CONFIG_OF 427 - static const struct of_device_id dw_i2c_of_match[] = { 428 - { .compatible = "snps,designware-i2c", }, 429 - {}, 430 - }; 431 - MODULE_DEVICE_TABLE(of, dw_i2c_of_match); 432 - #endif 433 - 434 396 #ifdef CONFIG_PM_SLEEP 435 397 static int dw_i2c_plat_prepare(struct device *dev) 436 398 { ··· 456 434 { 457 435 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); 458 436 459 - if (i_dev->pm_disabled) 437 + if (i_dev->shared_with_punit) 460 438 return 0; 461 439 462 440 i_dev->disable(i_dev); ··· 469 447 { 470 448 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); 471 449 472 - if (!i_dev->pm_disabled) 450 + if (!i_dev->shared_with_punit) 473 451 i2c_dw_prepare_clk(i_dev, true); 474 452 475 453 i_dev->init(i_dev);
+58 -10
drivers/i2c/busses/i2c-mt65xx.c
··· 441 441 u16 control_reg; 442 442 u16 restart_flag = 0; 443 443 u32 reg_4g_mode; 444 + u8 *dma_rd_buf = NULL; 445 + u8 *dma_wr_buf = NULL; 444 446 dma_addr_t rpaddr = 0; 445 447 dma_addr_t wpaddr = 0; 446 448 int ret; ··· 502 500 if (i2c->op == I2C_MASTER_RD) { 503 501 writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG); 504 502 writel(I2C_DMA_CON_RX, i2c->pdmabase + OFFSET_CON); 505 - rpaddr = dma_map_single(i2c->dev, msgs->buf, 506 - msgs->len, DMA_FROM_DEVICE); 507 - if (dma_mapping_error(i2c->dev, rpaddr)) 503 + 504 + dma_rd_buf = i2c_get_dma_safe_msg_buf(msgs, 0); 505 + if (!dma_rd_buf) 508 506 return -ENOMEM; 507 + 508 + rpaddr = dma_map_single(i2c->dev, dma_rd_buf, 509 + msgs->len, DMA_FROM_DEVICE); 510 + if (dma_mapping_error(i2c->dev, rpaddr)) { 511 + i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, false); 512 + 513 + return -ENOMEM; 514 + } 509 515 510 516 if (i2c->dev_comp->support_33bits) { 511 517 reg_4g_mode = mtk_i2c_set_4g_mode(rpaddr); ··· 525 515 } else if (i2c->op == I2C_MASTER_WR) { 526 516 writel(I2C_DMA_INT_FLAG_NONE, i2c->pdmabase + OFFSET_INT_FLAG); 527 517 writel(I2C_DMA_CON_TX, i2c->pdmabase + OFFSET_CON); 528 - wpaddr = dma_map_single(i2c->dev, msgs->buf, 529 - msgs->len, DMA_TO_DEVICE); 530 - if (dma_mapping_error(i2c->dev, wpaddr)) 518 + 519 + dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 0); 520 + if (!dma_wr_buf) 531 521 return -ENOMEM; 522 + 523 + wpaddr = dma_map_single(i2c->dev, dma_wr_buf, 524 + msgs->len, DMA_TO_DEVICE); 525 + if (dma_mapping_error(i2c->dev, wpaddr)) { 526 + i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false); 527 + 528 + return -ENOMEM; 529 + } 532 530 533 531 if (i2c->dev_comp->support_33bits) { 534 532 reg_4g_mode = mtk_i2c_set_4g_mode(wpaddr); ··· 548 530 } else { 549 531 writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_INT_FLAG); 550 532 writel(I2C_DMA_CLR_FLAG, i2c->pdmabase + OFFSET_CON); 551 - wpaddr = dma_map_single(i2c->dev, msgs->buf, 552 - msgs->len, DMA_TO_DEVICE); 553 - if (dma_mapping_error(i2c->dev, wpaddr)) 533 + 534 + dma_wr_buf = i2c_get_dma_safe_msg_buf(msgs, 0); 535 + if (!dma_wr_buf) 554 536 return -ENOMEM; 555 - rpaddr = dma_map_single(i2c->dev, (msgs + 1)->buf, 537 + 538 + wpaddr = dma_map_single(i2c->dev, dma_wr_buf, 539 + msgs->len, DMA_TO_DEVICE); 540 + if (dma_mapping_error(i2c->dev, wpaddr)) { 541 + i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false); 542 + 543 + return -ENOMEM; 544 + } 545 + 546 + dma_rd_buf = i2c_get_dma_safe_msg_buf((msgs + 1), 0); 547 + if (!dma_rd_buf) { 548 + dma_unmap_single(i2c->dev, wpaddr, 549 + msgs->len, DMA_TO_DEVICE); 550 + 551 + i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false); 552 + 553 + return -ENOMEM; 554 + } 555 + 556 + rpaddr = dma_map_single(i2c->dev, dma_rd_buf, 556 557 (msgs + 1)->len, 557 558 DMA_FROM_DEVICE); 558 559 if (dma_mapping_error(i2c->dev, rpaddr)) { 559 560 dma_unmap_single(i2c->dev, wpaddr, 560 561 msgs->len, DMA_TO_DEVICE); 562 + 563 + i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, false); 564 + i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), false); 565 + 561 566 return -ENOMEM; 562 567 } 563 568 ··· 619 578 if (i2c->op == I2C_MASTER_WR) { 620 579 dma_unmap_single(i2c->dev, wpaddr, 621 580 msgs->len, DMA_TO_DEVICE); 581 + 582 + i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true); 622 583 } else if (i2c->op == I2C_MASTER_RD) { 623 584 dma_unmap_single(i2c->dev, rpaddr, 624 585 msgs->len, DMA_FROM_DEVICE); 586 + 587 + i2c_put_dma_safe_msg_buf(dma_rd_buf, msgs, true); 625 588 } else { 626 589 dma_unmap_single(i2c->dev, wpaddr, msgs->len, 627 590 DMA_TO_DEVICE); 628 591 dma_unmap_single(i2c->dev, rpaddr, (msgs + 1)->len, 629 592 DMA_FROM_DEVICE); 593 + 594 + i2c_put_dma_safe_msg_buf(dma_wr_buf, msgs, true); 595 + i2c_put_dma_safe_msg_buf(dma_rd_buf, (msgs + 1), true); 630 596 } 631 597 632 598 if (ret == 0) {
+5 -3
drivers/i2c/busses/i2c-omap.c
··· 661 661 dev_dbg(omap->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n", 662 662 msg->addr, msg->len, msg->flags, stop); 663 663 664 - if (msg->len == 0) 665 - return -EINVAL; 666 - 667 664 omap->receiver = !!(msg->flags & I2C_M_RD); 668 665 omap_i2c_resize_fifo(omap, msg->len, omap->receiver); 669 666 ··· 1176 1179 .functionality = omap_i2c_func, 1177 1180 }; 1178 1181 1182 + static const struct i2c_adapter_quirks omap_i2c_quirks = { 1183 + .flags = I2C_AQ_NO_ZERO_LEN, 1184 + }; 1185 + 1179 1186 #ifdef CONFIG_OF 1180 1187 static struct omap_i2c_bus_platform_data omap2420_pdata = { 1181 1188 .rev = OMAP_I2C_IP_VERSION_1, ··· 1454 1453 adap->class = I2C_CLASS_DEPRECATED; 1455 1454 strlcpy(adap->name, "OMAP I2C adapter", sizeof(adap->name)); 1456 1455 adap->algo = &omap_i2c_algo; 1456 + adap->quirks = &omap_i2c_quirks; 1457 1457 adap->dev.parent = &pdev->dev; 1458 1458 adap->dev.of_node = pdev->dev.of_node; 1459 1459 adap->bus_recovery_info = &omap_i2c_bus_recovery_info;
+9 -8
drivers/i2c/busses/i2c-powermac.c
··· 388 388 static int i2c_powermac_probe(struct platform_device *dev) 389 389 { 390 390 struct pmac_i2c_bus *bus = dev_get_platdata(&dev->dev); 391 - struct device_node *parent = NULL; 391 + struct device_node *parent; 392 392 struct i2c_adapter *adapter; 393 - const char *basename; 394 393 int rc; 395 394 396 395 if (bus == NULL) ··· 406 407 parent = of_get_parent(pmac_i2c_get_controller(bus)); 407 408 if (parent == NULL) 408 409 return -EINVAL; 409 - basename = parent->name; 410 + snprintf(adapter->name, sizeof(adapter->name), "%pOFn %d", 411 + parent, 412 + pmac_i2c_get_channel(bus)); 413 + of_node_put(parent); 410 414 break; 411 415 case pmac_i2c_bus_pmu: 412 - basename = "pmu"; 416 + snprintf(adapter->name, sizeof(adapter->name), "pmu %d", 417 + pmac_i2c_get_channel(bus)); 413 418 break; 414 419 case pmac_i2c_bus_smu: 415 420 /* This is not what we used to do but I'm fixing drivers at 416 421 * the same time as this change 417 422 */ 418 - basename = "smu"; 423 + snprintf(adapter->name, sizeof(adapter->name), "smu %d", 424 + pmac_i2c_get_channel(bus)); 419 425 break; 420 426 default: 421 427 return -EINVAL; 422 428 } 423 - snprintf(adapter->name, sizeof(adapter->name), "%s %d", basename, 424 - pmac_i2c_get_channel(bus)); 425 - of_node_put(parent); 426 429 427 430 platform_set_drvdata(dev, adapter); 428 431 adapter->algo = &i2c_powermac_algorithm;
+62 -81
drivers/i2c/busses/i2c-qcom-geni.c
··· 201 201 static irqreturn_t geni_i2c_irq(int irq, void *dev) 202 202 { 203 203 struct geni_i2c_dev *gi2c = dev; 204 - int j; 204 + void __iomem *base = gi2c->se.base; 205 + int j, p; 205 206 u32 m_stat; 206 207 u32 rx_st; 207 208 u32 dm_tx_st; 208 209 u32 dm_rx_st; 209 210 u32 dma; 211 + u32 val; 210 212 struct i2c_msg *cur; 211 213 unsigned long flags; 212 214 213 215 spin_lock_irqsave(&gi2c->lock, flags); 214 - m_stat = readl_relaxed(gi2c->se.base + SE_GENI_M_IRQ_STATUS); 215 - rx_st = readl_relaxed(gi2c->se.base + SE_GENI_RX_FIFO_STATUS); 216 - dm_tx_st = readl_relaxed(gi2c->se.base + SE_DMA_TX_IRQ_STAT); 217 - dm_rx_st = readl_relaxed(gi2c->se.base + SE_DMA_RX_IRQ_STAT); 218 - dma = readl_relaxed(gi2c->se.base + SE_GENI_DMA_MODE_EN); 216 + m_stat = readl_relaxed(base + SE_GENI_M_IRQ_STATUS); 217 + rx_st = readl_relaxed(base + SE_GENI_RX_FIFO_STATUS); 218 + dm_tx_st = readl_relaxed(base + SE_DMA_TX_IRQ_STAT); 219 + dm_rx_st = readl_relaxed(base + SE_DMA_RX_IRQ_STAT); 220 + dma = readl_relaxed(base + SE_GENI_DMA_MODE_EN); 219 221 cur = gi2c->cur; 220 222 221 223 if (!cur || ··· 240 238 241 239 /* Disable the TX Watermark interrupt to stop TX */ 242 240 if (!dma) 243 - writel_relaxed(0, gi2c->se.base + 244 - SE_GENI_TX_WATERMARK_REG); 245 - goto irqret; 246 - } 247 - 248 - if (dma) { 241 + writel_relaxed(0, base + SE_GENI_TX_WATERMARK_REG); 242 + } else if (dma) { 249 243 dev_dbg(gi2c->se.dev, "i2c dma tx:0x%x, dma rx:0x%x\n", 250 244 dm_tx_st, dm_rx_st); 251 - goto irqret; 252 - } 253 - 254 - if (cur->flags & I2C_M_RD && 255 - m_stat & (M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN)) { 245 + } else if (cur->flags & I2C_M_RD && 246 + m_stat & (M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN)) { 256 247 u32 rxcnt = rx_st & RX_FIFO_WC_MSK; 257 248 258 249 for (j = 0; j < rxcnt; j++) { 259 - u32 val; 260 - int p = 0; 261 - 262 - val = readl_relaxed(gi2c->se.base + SE_GENI_RX_FIFOn); 250 + p = 0; 251 + val = readl_relaxed(base + SE_GENI_RX_FIFOn); 263 252 while (gi2c->cur_rd < cur->len && p < sizeof(val)) { 264 253 cur->buf[gi2c->cur_rd++] = val & 0xff; 265 254 val >>= 8; ··· 263 270 m_stat & M_TX_FIFO_WATERMARK_EN) { 264 271 for (j = 0; j < gi2c->tx_wm; j++) { 265 272 u32 temp; 266 - u32 val = 0; 267 - int p = 0; 268 273 274 + val = 0; 275 + p = 0; 269 276 while (gi2c->cur_wr < cur->len && p < sizeof(val)) { 270 277 temp = cur->buf[gi2c->cur_wr++]; 271 278 val |= temp << (p * 8); 272 279 p++; 273 280 } 274 - writel_relaxed(val, gi2c->se.base + SE_GENI_TX_FIFOn); 281 + writel_relaxed(val, base + SE_GENI_TX_FIFOn); 275 282 /* TX Complete, Disable the TX Watermark interrupt */ 276 283 if (gi2c->cur_wr == cur->len) { 277 - writel_relaxed(0, gi2c->se.base + 278 - SE_GENI_TX_WATERMARK_REG); 284 + writel_relaxed(0, base + SE_GENI_TX_WATERMARK_REG); 279 285 break; 280 286 } 281 287 } 282 288 } 283 - irqret: 284 - if (m_stat) 285 - writel_relaxed(m_stat, gi2c->se.base + SE_GENI_M_IRQ_CLEAR); 286 289 287 - if (dma) { 288 - if (dm_tx_st) 289 - writel_relaxed(dm_tx_st, gi2c->se.base + 290 - SE_DMA_TX_IRQ_CLR); 291 - if (dm_rx_st) 292 - writel_relaxed(dm_rx_st, gi2c->se.base + 293 - SE_DMA_RX_IRQ_CLR); 294 - } 290 + if (m_stat) 291 + writel_relaxed(m_stat, base + SE_GENI_M_IRQ_CLEAR); 292 + 293 + if (dma && dm_tx_st) 294 + writel_relaxed(dm_tx_st, base + SE_DMA_TX_IRQ_CLR); 295 + if (dma && dm_rx_st) 296 + writel_relaxed(dm_rx_st, base + SE_DMA_RX_IRQ_CLR); 297 + 295 298 /* if this is err with done-bit not set, handle that through timeout. */ 296 - if (m_stat & M_CMD_DONE_EN || m_stat & M_CMD_ABORT_EN) 297 - complete(&gi2c->done); 298 - else if (dm_tx_st & TX_DMA_DONE || dm_tx_st & TX_RESET_DONE) 299 - complete(&gi2c->done); 300 - else if (dm_rx_st & RX_DMA_DONE || dm_rx_st & RX_RESET_DONE) 299 + if (m_stat & M_CMD_DONE_EN || m_stat & M_CMD_ABORT_EN || 300 + dm_tx_st & TX_DMA_DONE || dm_tx_st & TX_RESET_DONE || 301 + dm_rx_st & RX_DMA_DONE || dm_rx_st & RX_RESET_DONE) 301 302 complete(&gi2c->done); 302 303 303 304 spin_unlock_irqrestore(&gi2c->lock, flags); 305 + 304 306 return IRQ_HANDLED; 305 307 } 306 308 ··· 353 365 u32 m_param) 354 366 { 355 367 dma_addr_t rx_dma; 356 - enum geni_se_xfer_mode mode; 357 - unsigned long time_left = XFER_TIMEOUT; 368 + unsigned long time_left; 358 369 void *dma_buf; 370 + struct geni_se *se = &gi2c->se; 371 + size_t len = msg->len; 359 372 360 - gi2c->cur = msg; 361 - mode = GENI_SE_FIFO; 362 373 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); 363 374 if (dma_buf) 364 - mode = GENI_SE_DMA; 375 + geni_se_select_mode(se, GENI_SE_DMA); 376 + else 377 + geni_se_select_mode(se, GENI_SE_FIFO); 365 378 366 - geni_se_select_mode(&gi2c->se, mode); 367 - writel_relaxed(msg->len, gi2c->se.base + SE_I2C_RX_TRANS_LEN); 368 - geni_se_setup_m_cmd(&gi2c->se, I2C_READ, m_param); 369 - if (mode == GENI_SE_DMA) { 370 - int ret; 379 + writel_relaxed(len, se->base + SE_I2C_RX_TRANS_LEN); 380 + geni_se_setup_m_cmd(se, I2C_READ, m_param); 371 381 372 - ret = geni_se_rx_dma_prep(&gi2c->se, dma_buf, msg->len, 373 - &rx_dma); 374 - if (ret) { 375 - mode = GENI_SE_FIFO; 376 - geni_se_select_mode(&gi2c->se, mode); 377 - i2c_put_dma_safe_msg_buf(dma_buf, msg, false); 378 - } 382 + if (dma_buf && geni_se_rx_dma_prep(se, dma_buf, len, &rx_dma)) { 383 + geni_se_select_mode(se, GENI_SE_FIFO); 384 + i2c_put_dma_safe_msg_buf(dma_buf, msg, false); 385 + dma_buf = NULL; 379 386 } 380 387 381 388 time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT); ··· 378 395 geni_i2c_abort_xfer(gi2c); 379 396 380 397 gi2c->cur_rd = 0; 381 - if (mode == GENI_SE_DMA) { 398 + if (dma_buf) { 382 399 if (gi2c->err) 383 400 geni_i2c_rx_fsm_rst(gi2c); 384 - geni_se_rx_dma_unprep(&gi2c->se, rx_dma, msg->len); 401 + geni_se_rx_dma_unprep(se, rx_dma, len); 385 402 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err); 386 403 } 404 + 387 405 return gi2c->err; 388 406 } 389 407 ··· 392 408 u32 m_param) 393 409 { 394 410 dma_addr_t tx_dma; 395 - enum geni_se_xfer_mode mode; 396 411 unsigned long time_left; 397 412 void *dma_buf; 413 + struct geni_se *se = &gi2c->se; 414 + size_t len = msg->len; 398 415 399 - gi2c->cur = msg; 400 - mode = GENI_SE_FIFO; 401 416 dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); 402 417 if (dma_buf) 403 - mode = GENI_SE_DMA; 418 + geni_se_select_mode(se, GENI_SE_DMA); 419 + else 420 + geni_se_select_mode(se, GENI_SE_FIFO); 404 421 405 - geni_se_select_mode(&gi2c->se, mode); 406 - writel_relaxed(msg->len, gi2c->se.base + SE_I2C_TX_TRANS_LEN); 407 - geni_se_setup_m_cmd(&gi2c->se, I2C_WRITE, m_param); 408 - if (mode == GENI_SE_DMA) { 409 - int ret; 422 + writel_relaxed(len, se->base + SE_I2C_TX_TRANS_LEN); 423 + geni_se_setup_m_cmd(se, I2C_WRITE, m_param); 410 424 411 - ret = geni_se_tx_dma_prep(&gi2c->se, dma_buf, msg->len, 412 - &tx_dma); 413 - if (ret) { 414 - mode = GENI_SE_FIFO; 415 - geni_se_select_mode(&gi2c->se, mode); 416 - i2c_put_dma_safe_msg_buf(dma_buf, msg, false); 417 - } 425 + if (dma_buf && geni_se_tx_dma_prep(se, dma_buf, len, &tx_dma)) { 426 + geni_se_select_mode(se, GENI_SE_FIFO); 427 + i2c_put_dma_safe_msg_buf(dma_buf, msg, false); 428 + dma_buf = NULL; 418 429 } 419 430 420 - if (mode == GENI_SE_FIFO) /* Get FIFO IRQ */ 421 - writel_relaxed(1, gi2c->se.base + SE_GENI_TX_WATERMARK_REG); 431 + if (!dma_buf) /* Get FIFO IRQ */ 432 + writel_relaxed(1, se->base + SE_GENI_TX_WATERMARK_REG); 422 433 423 434 time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT); 424 435 if (!time_left) 425 436 geni_i2c_abort_xfer(gi2c); 426 437 427 438 gi2c->cur_wr = 0; 428 - if (mode == GENI_SE_DMA) { 439 + if (dma_buf) { 429 440 if (gi2c->err) 430 441 geni_i2c_tx_fsm_rst(gi2c); 431 - geni_se_tx_dma_unprep(&gi2c->se, tx_dma, msg->len); 442 + geni_se_tx_dma_unprep(se, tx_dma, len); 432 443 i2c_put_dma_safe_msg_buf(dma_buf, msg, !gi2c->err); 433 444 } 445 + 434 446 return gi2c->err; 435 447 } 436 448 ··· 454 474 455 475 m_param |= ((msgs[i].addr << SLV_ADDR_SHFT) & SLV_ADDR_MSK); 456 476 477 + gi2c->cur = &msgs[i]; 457 478 if (msgs[i].flags & I2C_M_RD) 458 479 ret = geni_i2c_rx_one_msg(gi2c, &msgs[i], m_param); 459 480 else
+6 -8
drivers/i2c/busses/i2c-qup.c
··· 1088 1088 writel(I2C_MINI_CORE | I2C_N_VAL, qup->base + QUP_CONFIG); 1089 1089 1090 1090 for (idx = 0; idx < num; idx++) { 1091 - if (msgs[idx].len == 0) { 1092 - ret = -EINVAL; 1093 - goto out; 1094 - } 1095 - 1096 1091 if (qup_i2c_poll_state_i2c_master(qup)) { 1097 1092 ret = -EIO; 1098 1093 goto out; ··· 1515 1520 1516 1521 /* All i2c_msgs should be transferred using either dma or cpu */ 1517 1522 for (idx = 0; idx < num; idx++) { 1518 - if (msgs[idx].len == 0) 1519 - return -EINVAL; 1520 - 1521 1523 if (msgs[idx].flags & I2C_M_RD) 1522 1524 max_rx_len = max_t(unsigned int, max_rx_len, 1523 1525 msgs[idx].len); ··· 1628 1636 * which limits the possible read to 256 (QUP_READ_LIMIT) bytes. 1629 1637 */ 1630 1638 static const struct i2c_adapter_quirks qup_i2c_quirks = { 1639 + .flags = I2C_AQ_NO_ZERO_LEN, 1631 1640 .max_read_len = QUP_READ_LIMIT, 1641 + }; 1642 + 1643 + static const struct i2c_adapter_quirks qup_i2c_quirks_v2 = { 1644 + .flags = I2C_AQ_NO_ZERO_LEN, 1632 1645 }; 1633 1646 1634 1647 static void qup_i2c_enable_clocks(struct qup_i2c_dev *qup) ··· 1698 1701 is_qup_v1 = true; 1699 1702 } else { 1700 1703 qup->adap.algo = &qup_i2c_algo_v2; 1704 + qup->adap.quirks = &qup_i2c_quirks_v2; 1701 1705 is_qup_v1 = false; 1702 1706 if (acpi_match_device(qup_i2c_acpi_match, qup->dev)) 1703 1707 goto nodma;
-18
drivers/i2c/busses/i2c-sh_mobile.c
··· 947 947 return 0; 948 948 } 949 949 950 - static int sh_mobile_i2c_runtime_nop(struct device *dev) 951 - { 952 - /* Runtime PM callback shared between ->runtime_suspend() 953 - * and ->runtime_resume(). Simply returns success. 954 - * 955 - * This driver re-initializes all registers after 956 - * pm_runtime_get_sync() anyway so there is no need 957 - * to save and restore registers here. 958 - */ 959 - return 0; 960 - } 961 - 962 - static const struct dev_pm_ops sh_mobile_i2c_dev_pm_ops = { 963 - .runtime_suspend = sh_mobile_i2c_runtime_nop, 964 - .runtime_resume = sh_mobile_i2c_runtime_nop, 965 - }; 966 - 967 950 static struct platform_driver sh_mobile_i2c_driver = { 968 951 .driver = { 969 952 .name = "i2c-sh_mobile", 970 - .pm = &sh_mobile_i2c_dev_pm_ops, 971 953 .of_match_table = sh_mobile_i2c_dt_ids, 972 954 }, 973 955 .probe = sh_mobile_i2c_probe,
+1 -1
drivers/i2c/busses/i2c-synquacer.c
··· 404 404 if (i2c->state == STATE_READ) 405 405 goto prepare_read; 406 406 407 - /* fallthru */ 407 + /* fall through */ 408 408 409 409 case STATE_WRITE: 410 410 if (bsr & SYNQUACER_I2C_BSR_LRB) {
+1 -3
drivers/i2c/busses/i2c-tegra.c
··· 684 684 685 685 tegra_i2c_flush_fifos(i2c_dev); 686 686 687 - if (msg->len == 0) 688 - return -EINVAL; 689 - 690 687 i2c_dev->msg_buf = msg->buf; 691 688 i2c_dev->msg_buf_remaining = msg->len; 692 689 i2c_dev->msg_err = I2C_ERR_NONE; ··· 828 831 829 832 /* payload size is only 12 bit */ 830 833 static const struct i2c_adapter_quirks tegra_i2c_quirks = { 834 + .flags = I2C_AQ_NO_ZERO_LEN, 831 835 .max_read_len = 4096, 832 836 .max_write_len = 4096, 833 837 };
+46 -13
drivers/i2c/busses/i2c-uniphier-f.c
··· 98 98 unsigned int flags; 99 99 unsigned int busy_cnt; 100 100 unsigned int clk_cycle; 101 + spinlock_t lock; /* IRQ synchronization */ 101 102 }; 102 103 103 104 static void uniphier_fi2c_fill_txfifo(struct uniphier_fi2c_priv *priv, ··· 143 142 writel(priv->enabled_irqs, priv->membase + UNIPHIER_FI2C_IE); 144 143 } 145 144 146 - static void uniphier_fi2c_clear_irqs(struct uniphier_fi2c_priv *priv) 145 + static void uniphier_fi2c_clear_irqs(struct uniphier_fi2c_priv *priv, 146 + u32 mask) 147 147 { 148 - writel(-1, priv->membase + UNIPHIER_FI2C_IC); 148 + writel(mask, priv->membase + UNIPHIER_FI2C_IC); 149 149 } 150 150 151 151 static void uniphier_fi2c_stop(struct uniphier_fi2c_priv *priv) ··· 164 162 struct uniphier_fi2c_priv *priv = dev_id; 165 163 u32 irq_status; 166 164 165 + spin_lock(&priv->lock); 166 + 167 167 irq_status = readl(priv->membase + UNIPHIER_FI2C_INT); 168 + irq_status &= priv->enabled_irqs; 168 169 169 170 dev_dbg(&priv->adap.dev, 170 171 "interrupt: enabled_irqs=%04x, irq_status=%04x\n", 171 172 priv->enabled_irqs, irq_status); 173 + 174 + uniphier_fi2c_clear_irqs(priv, irq_status); 172 175 173 176 if (irq_status & UNIPHIER_FI2C_INT_STOP) 174 177 goto complete; ··· 237 230 goto handled; 238 231 } 239 232 233 + spin_unlock(&priv->lock); 234 + 240 235 return IRQ_NONE; 241 236 242 237 data_done: ··· 253 244 } 254 245 255 246 handled: 256 - uniphier_fi2c_clear_irqs(priv); 247 + spin_unlock(&priv->lock); 257 248 258 249 return IRQ_HANDLED; 259 250 } ··· 261 252 static void uniphier_fi2c_tx_init(struct uniphier_fi2c_priv *priv, u16 addr) 262 253 { 263 254 priv->enabled_irqs |= UNIPHIER_FI2C_INT_TE; 255 + uniphier_fi2c_set_irqs(priv); 256 + 264 257 /* do not use TX byte counter */ 265 258 writel(0, priv->membase + UNIPHIER_FI2C_TBC); 266 259 /* set slave address */ ··· 295 284 priv->enabled_irqs |= UNIPHIER_FI2C_INT_RF; 296 285 } 297 286 287 + uniphier_fi2c_set_irqs(priv); 288 + 298 289 /* set slave address with RD bit */ 299 290 writel(UNIPHIER_FI2C_DTTX_CMD | UNIPHIER_FI2C_DTTX_RD | addr << 1, 300 291 priv->membase + UNIPHIER_FI2C_DTTX); ··· 320 307 } 321 308 322 309 static int uniphier_fi2c_master_xfer_one(struct i2c_adapter *adap, 323 - struct i2c_msg *msg, bool stop) 310 + struct i2c_msg *msg, bool repeat, 311 + bool stop) 324 312 { 325 313 struct uniphier_fi2c_priv *priv = i2c_get_adapdata(adap); 326 314 bool is_read = msg->flags & I2C_M_RD; 327 - unsigned long time_left; 315 + unsigned long time_left, flags; 328 316 329 - dev_dbg(&adap->dev, "%s: addr=0x%02x, len=%d, stop=%d\n", 330 - is_read ? "receive" : "transmit", msg->addr, msg->len, stop); 317 + dev_dbg(&adap->dev, "%s: addr=0x%02x, len=%d, repeat=%d, stop=%d\n", 318 + is_read ? "receive" : "transmit", msg->addr, msg->len, 319 + repeat, stop); 331 320 332 321 priv->len = msg->len; 333 322 priv->buf = msg->buf; ··· 341 326 priv->flags |= UNIPHIER_FI2C_STOP; 342 327 343 328 reinit_completion(&priv->comp); 344 - uniphier_fi2c_clear_irqs(priv); 329 + uniphier_fi2c_clear_irqs(priv, U32_MAX); 345 330 writel(UNIPHIER_FI2C_RST_TBRST | UNIPHIER_FI2C_RST_RBRST, 346 331 priv->membase + UNIPHIER_FI2C_RST); /* reset TX/RX FIFO */ 332 + 333 + spin_lock_irqsave(&priv->lock, flags); 347 334 348 335 if (is_read) 349 336 uniphier_fi2c_rx_init(priv, msg->addr); 350 337 else 351 338 uniphier_fi2c_tx_init(priv, msg->addr); 352 339 353 - uniphier_fi2c_set_irqs(priv); 354 - 355 340 dev_dbg(&adap->dev, "start condition\n"); 356 - writel(UNIPHIER_FI2C_CR_MST | UNIPHIER_FI2C_CR_STA, 357 - priv->membase + UNIPHIER_FI2C_CR); 341 + /* 342 + * For a repeated START condition, writing a slave address to the FIFO 343 + * kicks the controller. So, the UNIPHIER_FI2C_CR register should be 344 + * written only for a non-repeated START condition. 345 + */ 346 + if (!repeat) 347 + writel(UNIPHIER_FI2C_CR_MST | UNIPHIER_FI2C_CR_STA, 348 + priv->membase + UNIPHIER_FI2C_CR); 349 + 350 + spin_unlock_irqrestore(&priv->lock, flags); 358 351 359 352 time_left = wait_for_completion_timeout(&priv->comp, adap->timeout); 353 + 354 + spin_lock_irqsave(&priv->lock, flags); 355 + priv->enabled_irqs = 0; 356 + uniphier_fi2c_set_irqs(priv); 357 + spin_unlock_irqrestore(&priv->lock, flags); 358 + 360 359 if (!time_left) { 361 360 dev_err(&adap->dev, "transaction timeout.\n"); 362 361 uniphier_fi2c_recover(priv); ··· 423 394 struct i2c_msg *msgs, int num) 424 395 { 425 396 struct i2c_msg *msg, *emsg = msgs + num; 397 + bool repeat = false; 426 398 int ret; 427 399 428 400 ret = uniphier_fi2c_check_bus_busy(adap); ··· 434 404 /* Emit STOP if it is the last message or I2C_M_STOP is set. */ 435 405 bool stop = (msg + 1 == emsg) || (msg->flags & I2C_M_STOP); 436 406 437 - ret = uniphier_fi2c_master_xfer_one(adap, msg, stop); 407 + ret = uniphier_fi2c_master_xfer_one(adap, msg, repeat, stop); 438 408 if (ret) 439 409 return ret; 410 + 411 + repeat = !stop; 440 412 } 441 413 442 414 return num; ··· 561 529 562 530 priv->clk_cycle = clk_rate / bus_speed; 563 531 init_completion(&priv->comp); 532 + spin_lock_init(&priv->lock); 564 533 priv->adap.owner = THIS_MODULE; 565 534 priv->adap.algo = &uniphier_fi2c_algo; 566 535 priv->adap.dev.parent = dev;
+5 -3
drivers/i2c/busses/i2c-zx2967.c
··· 281 281 int ret; 282 282 int i; 283 283 284 - if (msg->len == 0) 285 - return -EINVAL; 286 - 287 284 zx2967_i2c_flush_fifos(i2c); 288 285 289 286 i2c->cur_trans = msg->buf; ··· 495 498 .functionality = zx2967_i2c_func, 496 499 }; 497 500 501 + static const struct i2c_adapter_quirks zx2967_i2c_quirks = { 502 + .flags = I2C_AQ_NO_ZERO_LEN, 503 + }; 504 + 498 505 static const struct of_device_id zx2967_i2c_of_match[] = { 499 506 { .compatible = "zte,zx296718-i2c", }, 500 507 { }, ··· 569 568 strlcpy(i2c->adap.name, "zx2967 i2c adapter", 570 569 sizeof(i2c->adap.name)); 571 570 i2c->adap.algo = &zx2967_i2c_algo; 571 + i2c->adap.quirks = &zx2967_i2c_quirks; 572 572 i2c->adap.nr = pdev->id; 573 573 i2c->adap.dev.parent = &pdev->dev; 574 574 i2c->adap.dev.of_node = pdev->dev.of_node;
+16 -27
drivers/i2c/i2c-core-base.c
··· 1922 1922 { 1923 1923 int ret; 1924 1924 1925 + if (!adap->algo->master_xfer) { 1926 + dev_dbg(&adap->dev, "I2C level transfers not supported\n"); 1927 + return -EOPNOTSUPP; 1928 + } 1929 + 1925 1930 /* REVISIT the fault reporting model here is weak: 1926 1931 * 1927 1932 * - When we get an error after receiving N bytes from a slave, ··· 1943 1938 * one (discarding status on the second message) or errno 1944 1939 * (discarding status on the first one). 1945 1940 */ 1946 - 1947 - if (adap->algo->master_xfer) { 1948 - #ifdef DEBUG 1949 - for (ret = 0; ret < num; ret++) { 1950 - dev_dbg(&adap->dev, 1951 - "master_xfer[%d] %c, addr=0x%02x, len=%d%s\n", 1952 - ret, (msgs[ret].flags & I2C_M_RD) ? 'R' : 'W', 1953 - msgs[ret].addr, msgs[ret].len, 1954 - (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : ""); 1955 - } 1956 - #endif 1957 - 1958 - if (in_atomic() || irqs_disabled()) { 1959 - ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT); 1960 - if (!ret) 1961 - /* I2C activity is ongoing. */ 1962 - return -EAGAIN; 1963 - } else { 1964 - i2c_lock_bus(adap, I2C_LOCK_SEGMENT); 1965 - } 1966 - 1967 - ret = __i2c_transfer(adap, msgs, num); 1968 - i2c_unlock_bus(adap, I2C_LOCK_SEGMENT); 1969 - 1970 - return ret; 1941 + if (in_atomic() || irqs_disabled()) { 1942 + ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT); 1943 + if (!ret) 1944 + /* I2C activity is ongoing. */ 1945 + return -EAGAIN; 1971 1946 } else { 1972 - dev_dbg(&adap->dev, "I2C level transfers not supported\n"); 1973 - return -EOPNOTSUPP; 1947 + i2c_lock_bus(adap, I2C_LOCK_SEGMENT); 1974 1948 } 1949 + 1950 + ret = __i2c_transfer(adap, msgs, num); 1951 + i2c_unlock_bus(adap, I2C_LOCK_SEGMENT); 1952 + 1953 + return ret; 1975 1954 } 1976 1955 EXPORT_SYMBOL(i2c_transfer); 1977 1956
+2 -2
drivers/i2c/muxes/i2c-mux-gpmux.c
··· 120 120 121 121 ret = of_property_read_u32(child, "reg", &chan); 122 122 if (ret < 0) { 123 - dev_err(dev, "no reg property for node '%s'\n", 124 - child->name); 123 + dev_err(dev, "no reg property for node '%pOFn'\n", 124 + child); 125 125 goto err_children; 126 126 } 127 127
+1 -1
drivers/i2c/muxes/i2c-mux-ltc4306.c
··· 208 208 209 209 static int ltc4306_probe(struct i2c_client *client) 210 210 { 211 - struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 211 + struct i2c_adapter *adap = client->adapter; 212 212 const struct chip_desc *chip; 213 213 struct i2c_mux_core *muxc; 214 214 struct ltc4306 *data;
+1 -1
drivers/i2c/muxes/i2c-mux-mlxcpld.c
··· 132 132 static int mlxcpld_mux_probe(struct i2c_client *client, 133 133 const struct i2c_device_id *id) 134 134 { 135 - struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 135 + struct i2c_adapter *adap = client->adapter; 136 136 struct mlxcpld_mux_plat_data *pdata = dev_get_platdata(&client->dev); 137 137 struct i2c_mux_core *muxc; 138 138 int num, force;
+1 -1
drivers/i2c/muxes/i2c-mux-pca954x.c
··· 347 347 static int pca954x_probe(struct i2c_client *client, 348 348 const struct i2c_device_id *id) 349 349 { 350 - struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 350 + struct i2c_adapter *adap = client->adapter; 351 351 struct pca954x_platform_data *pdata = dev_get_platdata(&client->dev); 352 352 struct device *dev = &client->dev; 353 353 struct device_node *np = dev->of_node;
+22 -21
drivers/misc/eeprom/at24.c
··· 106 106 module_param_named(write_timeout, at24_write_timeout, uint, 0); 107 107 MODULE_PARM_DESC(at24_write_timeout, "Time (in ms) to try writes (default 25)"); 108 108 109 - /* 110 - * Both reads and writes fail if the previous write didn't complete yet. This 111 - * macro loops a few times waiting at least long enough for one entire page 112 - * write to work while making sure that at least one iteration is run before 113 - * checking the break condition. 114 - * 115 - * It takes two parameters: a variable in which the future timeout in jiffies 116 - * will be stored and a temporary variable holding the time of the last 117 - * iteration of processing the request. Both should be unsigned integers 118 - * holding at least 32 bits. 119 - */ 120 - #define at24_loop_until_timeout(tout, op_time) \ 121 - for (tout = jiffies + msecs_to_jiffies(at24_write_timeout), \ 122 - op_time = 0; \ 123 - op_time ? time_before(op_time, tout) : true; \ 124 - usleep_range(1000, 1500), op_time = jiffies) 125 - 126 109 struct at24_chip_data { 127 110 /* 128 111 * these fields mirror their equivalents in ··· 291 308 /* adjust offset for mac and serial read ops */ 292 309 offset += at24->offset_adj; 293 310 294 - at24_loop_until_timeout(timeout, read_time) { 311 + timeout = jiffies + msecs_to_jiffies(at24_write_timeout); 312 + do { 313 + /* 314 + * The timestamp shall be taken before the actual operation 315 + * to avoid a premature timeout in case of high CPU load. 316 + */ 317 + read_time = jiffies; 318 + 295 319 ret = regmap_bulk_read(regmap, offset, buf, count); 296 320 dev_dbg(&client->dev, "read %zu@%d --> %d (%ld)\n", 297 321 count, offset, ret, jiffies); 298 322 if (!ret) 299 323 return count; 300 - } 324 + 325 + usleep_range(1000, 1500); 326 + } while (time_before(read_time, timeout)); 301 327 302 328 return -ETIMEDOUT; 303 329 } ··· 350 358 regmap = at24_client->regmap; 351 359 client = at24_client->client; 352 360 count = at24_adjust_write_count(at24, offset, count); 361 + timeout = jiffies + msecs_to_jiffies(at24_write_timeout); 353 362 354 - at24_loop_until_timeout(timeout, write_time) { 363 + do { 364 + /* 365 + * The timestamp shall be taken before the actual operation 366 + * to avoid a premature timeout in case of high CPU load. 367 + */ 368 + write_time = jiffies; 369 + 355 370 ret = regmap_bulk_write(regmap, offset, buf, count); 356 371 dev_dbg(&client->dev, "write %zu@%d --> %d (%ld)\n", 357 372 count, offset, ret, jiffies); 358 373 if (!ret) 359 374 return count; 360 - } 375 + 376 + usleep_range(1000, 1500); 377 + } while (time_before(write_time, timeout)); 361 378 362 379 return -ETIMEDOUT; 363 380 }