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

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

Pull i2c updates from Wolfram Sang:
- new drivers: Kontron PLD, Wondermedia VT
- mv64xxx driver gained sun4i support and a bigger cleanup
- duplicate driver 'intel-mid' removed
- added generic device tree binding for sda holding time (and
designware driver already uses it)
- we tried to allow driver probing with only device tree and no i2c
ids, but I had to revert it because of side effects. Needs some
rethinking.
- driver bugfixes, cleanups...

* 'i2c/for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (34 commits)
i2c-designware: use div_u64 to fix link
i2c: Kontron PLD i2c bus driver
i2c: iop3xxx: fix build failure after waitqueue changes
i2c-designware: make SDA hold time configurable
i2c: mv64xxx: Set bus frequency to 100kHz if clock-frequency is not provided
i2c: imx: allow autoloading on dt ids
i2c: mv64xxx: Fix transfer error code
i2c: i801: SMBus patch for Intel Coleto Creek DeviceIDs
i2c: omap: correct usage of the interrupt enable register
i2c-pxa: prepare clock before use
Revert "i2c: core: make it possible to match a pure device tree driver"
i2c: nomadik: allocate adapter number dynamically
i2c: nomadik: support elder Nomadiks
i2c: mv64xxx: Add Allwinner sun4i compatible
i2c: mv64xxx: make the registers offset configurable
i2c: mv64xxx: Add macros to access parts of registers
i2c: vt8500: Add support for I2C bus on Wondermedia SoCs
i2c: designware: fix race between subsequent xfers
i2c: bfin-twi: Read and write the FIFO in loop
i2c: core: make it possible to match a pure device tree driver
...

+1268 -1398
+15
Documentation/devicetree/bindings/i2c/i2c-designware.txt
··· 10 10 11 11 - clock-frequency : desired I2C bus clock frequency in Hz. 12 12 13 + Optional properties : 14 + - i2c-sda-hold-time-ns : should contain the SDA hold time in nanoseconds. 15 + This option is only supported in hardware blocks version 1.11a or newer. 16 + 13 17 Example : 14 18 15 19 i2c@f0000 { ··· 23 19 reg = <0xf0000 0x1000>; 24 20 interrupts = <11>; 25 21 clock-frequency = <400000>; 22 + }; 23 + 24 + i2c@1120000 { 25 + #address-cells = <1>; 26 + #size-cells = <0>; 27 + compatible = "snps,designware-i2c"; 28 + reg = <0x1120000 0x1000>; 29 + interrupt-parent = <&ictl>; 30 + interrupts = <12 1>; 31 + clock-frequency = <400000>; 32 + i2c-sda-hold-time-ns = <300>; 26 33 };
+5 -1
Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
··· 6 6 - reg : Offset and length of the register set for the device 7 7 - compatible : Should be "marvell,mv64xxx-i2c" 8 8 - interrupts : The interrupt number 9 - - clock-frequency : Desired I2C bus clock frequency in Hz. 9 + 10 + Optional properties : 11 + 12 + - clock-frequency : Desired I2C bus clock frequency in Hz. If not set the 13 + default frequency is 100kHz 10 14 11 15 Examples: 12 16
+24
Documentation/devicetree/bindings/i2c/i2c-vt8500.txt
··· 1 + * Wondermedia I2C Controller 2 + 3 + Required properties : 4 + 5 + - compatible : should be "wm,wm8505-i2c" 6 + - reg : Offset and length of the register set for the device 7 + - interrupts : <IRQ> where IRQ is the interrupt number 8 + - clocks : phandle to the I2C clock source 9 + 10 + Optional properties : 11 + 12 + - clock-frequency : desired I2C bus clock frequency in Hz. 13 + Valid values are 100000 and 400000. 14 + Default to 100000 if not specified, or invalid value. 15 + 16 + Example : 17 + 18 + i2c_0: i2c@d8280000 { 19 + compatible = "wm,wm8505-i2c"; 20 + reg = <0xd8280000 0x1000>; 21 + interrupts = <19>; 22 + clocks = <&clki2c0>; 23 + clock-frequency = <400000>; 24 + };
+1
Documentation/i2c/busses/i2c-i801
··· 24 24 * Intel Lynx Point-LP (PCH) 25 25 * Intel Avoton (SOC) 26 26 * Intel Wellsburg (PCH) 27 + * Intel Coleto Creek (PCH) 27 28 Datasheets: Publicly available at the Intel website 28 29 29 30 On Intel Patsburg and later chipsets, both the normal host SMBus controller
+1
MAINTAINERS
··· 1301 1301 F: arch/arm/mach-vt8500/ 1302 1302 F: drivers/clocksource/vt8500_timer.c 1303 1303 F: drivers/gpio/gpio-vt8500.c 1304 + F: drivers/i2c/busses/i2c-wmt.c 1304 1305 F: drivers/mmc/host/wmt-sdmmc.c 1305 1306 F: drivers/pwm/pwm-vt8500.c 1306 1307 F: drivers/rtc/rtc-vt8500.c
+5 -5
arch/arc/boot/dts/abilis_tb100_dvk.dts
··· 45 45 }; 46 46 47 47 i2c0: i2c@FF120000 { 48 - sda-hold-time = <432>; 48 + i2c-sda-hold-time-ns = <432>; 49 49 }; 50 50 i2c1: i2c@FF121000 { 51 - sda-hold-time = <432>; 51 + i2c-sda-hold-time-ns = <432>; 52 52 }; 53 53 i2c2: i2c@FF122000 { 54 - sda-hold-time = <432>; 54 + i2c-sda-hold-time-ns = <432>; 55 55 }; 56 56 i2c3: i2c@FF123000 { 57 - sda-hold-time = <432>; 57 + i2c-sda-hold-time-ns = <432>; 58 58 }; 59 59 i2c4: i2c@FF124000 { 60 - sda-hold-time = <432>; 60 + i2c-sda-hold-time-ns = <432>; 61 61 }; 62 62 63 63 leds {
+5 -5
arch/arc/boot/dts/abilis_tb101_dvk.dts
··· 45 45 }; 46 46 47 47 i2c0: i2c@FF120000 { 48 - sda-hold-time = <432>; 48 + i2c-sda-hold-time-ns = <432>; 49 49 }; 50 50 i2c1: i2c@FF121000 { 51 - sda-hold-time = <432>; 51 + i2c-sda-hold-time-ns = <432>; 52 52 }; 53 53 i2c2: i2c@FF122000 { 54 - sda-hold-time = <432>; 54 + i2c-sda-hold-time-ns = <432>; 55 55 }; 56 56 i2c3: i2c@FF123000 { 57 - sda-hold-time = <432>; 57 + i2c-sda-hold-time-ns = <432>; 58 58 }; 59 59 i2c4: i2c@FF124000 { 60 - sda-hold-time = <432>; 60 + i2c-sda-hold-time-ns = <432>; 61 61 }; 62 62 63 63 leds {
+23 -11
drivers/i2c/busses/Kconfig
··· 108 108 Lynx Point-LP (PCH) 109 109 Avoton (SOC) 110 110 Wellsburg (PCH) 111 + Coleto Creek (PCH) 111 112 112 113 This driver can also be built as a module. If so, the module 113 114 will be called i2c-i801. ··· 476 475 This driver can also be built as a module. If so, the module 477 476 will be called i2c-imx. 478 477 479 - config I2C_INTEL_MID 480 - tristate "Intel Moorestown/Medfield Platform I2C controller" 481 - depends on PCI 482 - help 483 - Say Y here if you have an Intel Moorestown/Medfield platform I2C 484 - controller. 485 - 486 - This support is also available as a module. If so, the module 487 - will be called i2c-intel-mid. 488 - 489 478 config I2C_IOP3XX 490 479 tristate "Intel IOPx3xx and IXP4xx on-chip I2C interface" 491 480 depends on ARCH_IOP32X || ARCH_IOP33X || ARCH_IXP4XX || ARCH_IOP13XX ··· 485 494 486 495 This driver can also be built as a module. If so, the module 487 496 will be called i2c-iop3xx. 497 + 498 + config I2C_KEMPLD 499 + tristate "Kontron COM I2C Controller" 500 + depends on MFD_KEMPLD 501 + help 502 + This enables support for the I2C bus interface on some Kontron ETX 503 + and COMexpress (ETXexpress) modules. 504 + 505 + This driver can also be built as a module. If so, the module 506 + will be called i2c-kempld. 488 507 489 508 config I2C_MPC 490 509 tristate "MPC107/824x/85xx/512x/52xx/83xx/86xx" ··· 509 508 510 509 config I2C_MV64XXX 511 510 tristate "Marvell mv64xxx I2C Controller" 512 - depends on (MV64X60 || PLAT_ORION) 511 + depends on (MV64X60 || PLAT_ORION || ARCH_SUNXI) 513 512 help 514 513 If you say yes to this option, support will be included for the 515 514 built-in I2C interface on the Marvell 64xxx line of host bridges. 515 + This driver is also used for Allwinner SoCs I2C controllers. 516 516 517 517 This driver can also be built as a module. If so, the module 518 518 will be called i2c-mv64xxx. ··· 726 724 727 725 This driver can also be built as a module. If so, the module 728 726 will be called i2c-versatile. 727 + 728 + config I2C_WMT 729 + tristate "Wondermedia WM8xxx SoC I2C bus support" 730 + depends on ARCH_VT8500 731 + help 732 + Say yes if you want to support the I2C bus on Wondermedia 8xxx-series 733 + SoCs. 734 + 735 + This driver can also be built as a module. If so, the module will be 736 + called i2c-wmt. 729 737 730 738 config I2C_OCTEON 731 739 tristate "Cavium OCTEON I2C bus support"
+2 -1
drivers/i2c/busses/Makefile
··· 46 46 obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o 47 47 obj-$(CONFIG_I2C_IBM_IIC) += i2c-ibm_iic.o 48 48 obj-$(CONFIG_I2C_IMX) += i2c-imx.o 49 - obj-$(CONFIG_I2C_INTEL_MID) += i2c-intel-mid.o 50 49 obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o 50 + obj-$(CONFIG_I2C_KEMPLD) += i2c-kempld.o 51 51 obj-$(CONFIG_I2C_MPC) += i2c-mpc.o 52 52 obj-$(CONFIG_I2C_MV64XXX) += i2c-mv64xxx.o 53 53 obj-$(CONFIG_I2C_MXS) += i2c-mxs.o ··· 71 71 obj-$(CONFIG_I2C_STU300) += i2c-stu300.o 72 72 obj-$(CONFIG_I2C_TEGRA) += i2c-tegra.o 73 73 obj-$(CONFIG_I2C_VERSATILE) += i2c-versatile.o 74 + obj-$(CONFIG_I2C_WMT) += i2c-wmt.o 74 75 obj-$(CONFIG_I2C_OCTEON) += i2c-octeon.o 75 76 obj-$(CONFIG_I2C_XILINX) += i2c-xiic.o 76 77 obj-$(CONFIG_I2C_XLR) += i2c-xlr.o
+27 -20
drivers/i2c/busses/i2c-bfin-twi.c
··· 39 39 unsigned short mast_stat = read_MASTER_STAT(iface); 40 40 41 41 if (twi_int_status & XMTSERV) { 42 + if (iface->writeNum <= 0) { 43 + /* start receive immediately after complete sending in 44 + * combine mode. 45 + */ 46 + if (iface->cur_mode == TWI_I2C_MODE_COMBINED) 47 + write_MASTER_CTL(iface, 48 + read_MASTER_CTL(iface) | MDIR); 49 + else if (iface->manual_stop) 50 + write_MASTER_CTL(iface, 51 + read_MASTER_CTL(iface) | STOP); 52 + else if (iface->cur_mode == TWI_I2C_MODE_REPEAT && 53 + iface->cur_msg + 1 < iface->msg_num) { 54 + if (iface->pmsg[iface->cur_msg + 1].flags & 55 + I2C_M_RD) 56 + write_MASTER_CTL(iface, 57 + read_MASTER_CTL(iface) | 58 + MDIR); 59 + else 60 + write_MASTER_CTL(iface, 61 + read_MASTER_CTL(iface) & 62 + ~MDIR); 63 + } 64 + } 42 65 /* Transmit next data */ 43 - if (iface->writeNum > 0) { 66 + while (iface->writeNum > 0 && 67 + (read_FIFO_STAT(iface) & XMTSTAT) != XMT_FULL) { 44 68 SSYNC(); 45 69 write_XMT_DATA8(iface, *(iface->transPtr++)); 46 70 iface->writeNum--; 47 71 } 48 - /* start receive immediately after complete sending in 49 - * combine mode. 50 - */ 51 - else if (iface->cur_mode == TWI_I2C_MODE_COMBINED) 52 - write_MASTER_CTL(iface, 53 - read_MASTER_CTL(iface) | MDIR); 54 - else if (iface->manual_stop) 55 - write_MASTER_CTL(iface, 56 - read_MASTER_CTL(iface) | STOP); 57 - else if (iface->cur_mode == TWI_I2C_MODE_REPEAT && 58 - iface->cur_msg + 1 < iface->msg_num) { 59 - if (iface->pmsg[iface->cur_msg + 1].flags & I2C_M_RD) 60 - write_MASTER_CTL(iface, 61 - read_MASTER_CTL(iface) | MDIR); 62 - else 63 - write_MASTER_CTL(iface, 64 - read_MASTER_CTL(iface) & ~MDIR); 65 - } 66 72 } 67 73 if (twi_int_status & RCVSERV) { 68 - if (iface->readNum > 0) { 74 + while (iface->readNum > 0 && 75 + (read_FIFO_STAT(iface) & RCVSTAT)) { 69 76 /* Receive next data */ 70 77 *(iface->transPtr) = read_RCV_DATA8(iface); 71 78 if (iface->cur_mode == TWI_I2C_MODE_COMBINED) {
+2 -2
drivers/i2c/busses/i2c-cpm.c
··· 654 654 655 655 cpm->ofdev = ofdev; 656 656 657 - dev_set_drvdata(&ofdev->dev, cpm); 657 + platform_set_drvdata(ofdev, cpm); 658 658 659 659 cpm->adap = cpm_ops; 660 660 i2c_set_adapdata(&cpm->adap, cpm); ··· 697 697 698 698 static int cpm_i2c_remove(struct platform_device *ofdev) 699 699 { 700 - struct cpm_i2c *cpm = dev_get_drvdata(&ofdev->dev); 700 + struct cpm_i2c *cpm = platform_get_drvdata(ofdev); 701 701 702 702 i2c_del_adapter(&cpm->adap); 703 703
+1 -7
drivers/i2c/busses/i2c-davinci.c
··· 646 646 struct resource *mem, *irq; 647 647 int r; 648 648 649 - /* NOTE: driver uses the static register mapping */ 650 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 651 - if (!mem) { 652 - dev_err(&pdev->dev, "no mem resource?\n"); 653 - return -ENODEV; 654 - } 655 - 656 649 irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 657 650 if (!irq) { 658 651 dev_err(&pdev->dev, "no irq resource?\n"); ··· 690 697 return -ENODEV; 691 698 clk_prepare_enable(dev->clk); 692 699 700 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 693 701 dev->base = devm_ioremap_resource(&pdev->dev, mem); 694 702 if (IS_ERR(dev->base)) { 695 703 r = PTR_ERR(dev->base);
+25 -5
drivers/i2c/busses/i2c-designware-core.c
··· 67 67 #define DW_IC_STATUS 0x70 68 68 #define DW_IC_TXFLR 0x74 69 69 #define DW_IC_RXFLR 0x78 70 + #define DW_IC_SDA_HOLD 0x7c 70 71 #define DW_IC_TX_ABRT_SOURCE 0x80 71 72 #define DW_IC_ENABLE_STATUS 0x9c 72 73 #define DW_IC_COMP_PARAM_1 0xf4 74 + #define DW_IC_COMP_VERSION 0xf8 75 + #define DW_IC_SDA_HOLD_MIN_VERS 0x3131312A 73 76 #define DW_IC_COMP_TYPE 0xfc 74 77 #define DW_IC_COMP_TYPE_VALUE 0x44570140 75 78 ··· 335 332 dw_writel(dev, lcnt, DW_IC_FS_SCL_LCNT); 336 333 dev_dbg(dev->dev, "Fast-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt); 337 334 335 + /* Configure SDA Hold Time if required */ 336 + if (dev->sda_hold_time) { 337 + reg = dw_readl(dev, DW_IC_COMP_VERSION); 338 + if (reg >= DW_IC_SDA_HOLD_MIN_VERS) 339 + dw_writel(dev, dev->sda_hold_time, DW_IC_SDA_HOLD); 340 + else 341 + dev_warn(dev->dev, 342 + "Hardware too old to adjust SDA hold time."); 343 + } 344 + 338 345 /* Configure Tx/Rx FIFO threshold levels */ 339 346 dw_writel(dev, dev->tx_fifo_depth - 1, DW_IC_TX_TL); 340 347 dw_writel(dev, 0, DW_IC_RX_TL); ··· 593 580 i2c_dw_xfer_init(dev); 594 581 595 582 /* wait for tx to complete */ 596 - ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete, HZ); 583 + ret = wait_for_completion_timeout(&dev->cmd_complete, HZ); 597 584 if (ret == 0) { 598 585 dev_err(dev->dev, "controller timed out\n"); 586 + /* i2c_dw_init implicitly disables the adapter */ 599 587 i2c_dw_init(dev); 600 588 ret = -ETIMEDOUT; 601 589 goto done; 602 - } else if (ret < 0) 603 - goto done; 590 + } 591 + 592 + /* 593 + * We must disable the adapter before unlocking the &dev->lock mutex 594 + * below. Otherwise the hardware might continue generating interrupts 595 + * which in turn causes a race condition with the following transfer. 596 + * Needs some more investigation if the additional interrupts are 597 + * a hardware bug or this driver doesn't handle them correctly yet. 598 + */ 599 + __i2c_dw_enable(dev, false); 604 600 605 601 if (dev->msg_err) { 606 602 ret = dev->msg_err; ··· 618 596 619 597 /* no error */ 620 598 if (likely(!dev->cmd_err)) { 621 - /* Disable the adapter */ 622 - __i2c_dw_enable(dev, false); 623 599 ret = num; 624 600 goto done; 625 601 }
+1
drivers/i2c/busses/i2c-designware-core.h
··· 90 90 unsigned int tx_fifo_depth; 91 91 unsigned int rx_fifo_depth; 92 92 int rx_outstanding; 93 + u32 sda_hold_time; 93 94 }; 94 95 95 96 #define ACCESS_SWAP 0x00000001
+12 -7
drivers/i2c/busses/i2c-designware-platdrv.c
··· 34 34 #include <linux/sched.h> 35 35 #include <linux/err.h> 36 36 #include <linux/interrupt.h> 37 + #include <linux/of.h> 37 38 #include <linux/of_i2c.h> 38 39 #include <linux/platform_device.h> 39 40 #include <linux/pm.h> ··· 88 87 struct resource *mem; 89 88 int irq, r; 90 89 91 - /* NOTE: driver uses the static register mapping */ 92 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 93 - if (!mem) { 94 - dev_err(&pdev->dev, "no mem resource?\n"); 95 - return -EINVAL; 96 - } 97 - 98 90 irq = platform_get_irq(pdev, 0); 99 91 if (irq < 0) { 100 92 dev_err(&pdev->dev, "no irq resource?\n"); ··· 98 104 if (!dev) 99 105 return -ENOMEM; 100 106 107 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 101 108 dev->base = devm_ioremap_resource(&pdev->dev, mem); 102 109 if (IS_ERR(dev->base)) 103 110 return PTR_ERR(dev->base); ··· 115 120 if (IS_ERR(dev->clk)) 116 121 return PTR_ERR(dev->clk); 117 122 clk_prepare_enable(dev->clk); 123 + 124 + if (pdev->dev.of_node) { 125 + u32 ht = 0; 126 + u32 ic_clk = dev->get_clk_rate_khz(dev); 127 + 128 + of_property_read_u32(pdev->dev.of_node, 129 + "i2c-sda-hold-time-ns", &ht); 130 + dev->sda_hold_time = div_u64((u64)ic_clk * ht + 500000, 131 + 1000000); 132 + } 118 133 119 134 dev->functionality = 120 135 I2C_FUNC_I2C |
+3
drivers/i2c/busses/i2c-i801.c
··· 58 58 Wellsburg (PCH) MS 0x8d7d 32 hard yes yes yes 59 59 Wellsburg (PCH) MS 0x8d7e 32 hard yes yes yes 60 60 Wellsburg (PCH) MS 0x8d7f 32 hard yes yes yes 61 + Coleto Creek (PCH) 0x23b0 32 hard yes yes yes 61 62 62 63 Features supported by this driver: 63 64 Software PEC no ··· 170 169 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS 0x1e22 171 170 #define PCI_DEVICE_ID_INTEL_AVOTON_SMBUS 0x1f3c 172 171 #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330 172 + #define PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS 0x23b0 173 173 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30 174 174 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22 175 175 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS 0x8d22 ··· 819 817 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0) }, 820 818 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1) }, 821 819 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2) }, 820 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS) }, 822 821 { 0, } 823 822 }; 824 823
+2 -2
drivers/i2c/busses/i2c-ibm_iic.c
··· 705 705 return -ENOMEM; 706 706 } 707 707 708 - dev_set_drvdata(&ofdev->dev, dev); 708 + platform_set_drvdata(ofdev, dev); 709 709 710 710 dev->vaddr = of_iomap(np, 0); 711 711 if (dev->vaddr == NULL) { ··· 782 782 */ 783 783 static int iic_remove(struct platform_device *ofdev) 784 784 { 785 - struct ibm_iic_private *dev = dev_get_drvdata(&ofdev->dev); 785 + struct ibm_iic_private *dev = platform_get_drvdata(ofdev); 786 786 787 787 i2c_del_adapter(&dev->adap); 788 788
+2 -13
drivers/i2c/busses/i2c-imx.c
··· 51 51 #include <linux/of.h> 52 52 #include <linux/of_device.h> 53 53 #include <linux/of_i2c.h> 54 - #include <linux/pinctrl/consumer.h> 55 54 #include <linux/platform_data/i2c-imx.h> 56 55 57 56 /** Defines ******************************************************************** ··· 147 148 { .compatible = "fsl,imx21-i2c", .data = &imx_i2c_devtype[IMX21_I2C], }, 148 149 { /* sentinel */ } 149 150 }; 151 + MODULE_DEVICE_TABLE(of, i2c_imx_dt_ids); 150 152 151 153 static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx) 152 154 { ··· 493 493 struct imx_i2c_struct *i2c_imx; 494 494 struct resource *res; 495 495 struct imxi2c_platform_data *pdata = pdev->dev.platform_data; 496 - struct pinctrl *pinctrl; 497 496 void __iomem *base; 498 497 int irq, ret; 499 498 u32 bitrate; 500 499 501 500 dev_dbg(&pdev->dev, "<%s>\n", __func__); 502 501 503 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 504 - if (!res) { 505 - dev_err(&pdev->dev, "can't get device resources\n"); 506 - return -ENOENT; 507 - } 508 502 irq = platform_get_irq(pdev, 0); 509 503 if (irq < 0) { 510 504 dev_err(&pdev->dev, "can't get irq number\n"); 511 505 return -ENOENT; 512 506 } 513 507 508 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 514 509 base = devm_ioremap_resource(&pdev->dev, res); 515 510 if (IS_ERR(base)) 516 511 return PTR_ERR(base); ··· 529 534 i2c_imx->adapter.nr = pdev->id; 530 535 i2c_imx->adapter.dev.of_node = pdev->dev.of_node; 531 536 i2c_imx->base = base; 532 - 533 - pinctrl = devm_pinctrl_get_select_default(&pdev->dev); 534 - if (IS_ERR(pinctrl)) { 535 - dev_err(&pdev->dev, "can't get/select pinctrl\n"); 536 - return PTR_ERR(pinctrl); 537 - } 538 537 539 538 /* Get I2C clock */ 540 539 i2c_imx->clk = devm_clk_get(&pdev->dev, NULL);
-1121
drivers/i2c/busses/i2c-intel-mid.c
··· 1 - /* 2 - * Support for Moorestown/Medfield I2C chip 3 - * 4 - * Copyright (c) 2009 Intel Corporation. 5 - * Copyright (c) 2009 Synopsys. Inc. 6 - * 7 - * This program is free software; you can redistribute it and/or modify it 8 - * under the terms and conditions of the GNU General Public License, version 9 - * 2, as published by the Free Software Foundation. 10 - * 11 - * This program is distributed in the hope it will be useful, but WITHOUT ANY 12 - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 13 - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 14 - * details. 15 - * 16 - * You should have received a copy of the GNU General Public License along 17 - * with this program; if not, write to the Free Software Foundation, Inc., 51 18 - * Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 19 - * 20 - */ 21 - 22 - #include <linux/module.h> 23 - #include <linux/kernel.h> 24 - #include <linux/err.h> 25 - #include <linux/slab.h> 26 - #include <linux/stat.h> 27 - #include <linux/delay.h> 28 - #include <linux/i2c.h> 29 - #include <linux/init.h> 30 - #include <linux/pci.h> 31 - #include <linux/interrupt.h> 32 - #include <linux/pm_runtime.h> 33 - #include <linux/io.h> 34 - 35 - #define DRIVER_NAME "i2c-intel-mid" 36 - #define VERSION "Version 0.5ac2" 37 - #define PLATFORM "Moorestown/Medfield" 38 - 39 - /* Tables use: 0 Moorestown, 1 Medfield */ 40 - #define NUM_PLATFORMS 2 41 - enum platform_enum { 42 - MOORESTOWN = 0, 43 - MEDFIELD = 1, 44 - }; 45 - 46 - enum mid_i2c_status { 47 - STATUS_IDLE = 0, 48 - STATUS_READ_START, 49 - STATUS_READ_IN_PROGRESS, 50 - STATUS_READ_SUCCESS, 51 - STATUS_WRITE_START, 52 - STATUS_WRITE_SUCCESS, 53 - STATUS_XFER_ABORT, 54 - STATUS_STANDBY 55 - }; 56 - 57 - /** 58 - * struct intel_mid_i2c_private - per device I²C context 59 - * @adap: core i2c layer adapter information 60 - * @dev: device reference for power management 61 - * @base: register base 62 - * @speed: speed mode for this port 63 - * @complete: completion object for transaction wait 64 - * @abort: reason for last abort 65 - * @rx_buf: pointer into working receive buffer 66 - * @rx_buf_len: receive buffer length 67 - * @status: adapter state machine 68 - * @msg: the message we are currently processing 69 - * @platform: the MID device type we are part of 70 - * @lock: transaction serialization 71 - * 72 - * We allocate one of these per device we discover, it holds the core 73 - * i2c layer objects and the data we need to track privately. 74 - */ 75 - struct intel_mid_i2c_private { 76 - struct i2c_adapter adap; 77 - struct device *dev; 78 - void __iomem *base; 79 - int speed; 80 - struct completion complete; 81 - int abort; 82 - u8 *rx_buf; 83 - int rx_buf_len; 84 - enum mid_i2c_status status; 85 - struct i2c_msg *msg; 86 - enum platform_enum platform; 87 - struct mutex lock; 88 - }; 89 - 90 - #define NUM_SPEEDS 3 91 - 92 - #define ACTIVE 0 93 - #define STANDBY 1 94 - 95 - 96 - /* Control register */ 97 - #define IC_CON 0x00 98 - #define SLV_DIS (1 << 6) /* Disable slave mode */ 99 - #define RESTART (1 << 5) /* Send a Restart condition */ 100 - #define ADDR_10BIT (1 << 4) /* 10-bit addressing */ 101 - #define STANDARD_MODE (1 << 1) /* standard mode */ 102 - #define FAST_MODE (2 << 1) /* fast mode */ 103 - #define HIGH_MODE (3 << 1) /* high speed mode */ 104 - #define MASTER_EN (1 << 0) /* Master mode */ 105 - 106 - /* Target address register */ 107 - #define IC_TAR 0x04 108 - #define IC_TAR_10BIT_ADDR (1 << 12) /* 10-bit addressing */ 109 - #define IC_TAR_SPECIAL (1 << 11) /* Perform special I2C cmd */ 110 - #define IC_TAR_GC_OR_START (1 << 10) /* 0: Gerneral Call Address */ 111 - /* 1: START BYTE */ 112 - /* Slave Address Register */ 113 - #define IC_SAR 0x08 /* Not used in Master mode */ 114 - 115 - /* High Speed Master Mode Code Address Register */ 116 - #define IC_HS_MADDR 0x0c 117 - 118 - /* Rx/Tx Data Buffer and Command Register */ 119 - #define IC_DATA_CMD 0x10 120 - #define IC_RD (1 << 8) /* 1: Read 0: Write */ 121 - 122 - /* Standard Speed Clock SCL High Count Register */ 123 - #define IC_SS_SCL_HCNT 0x14 124 - 125 - /* Standard Speed Clock SCL Low Count Register */ 126 - #define IC_SS_SCL_LCNT 0x18 127 - 128 - /* Fast Speed Clock SCL High Count Register */ 129 - #define IC_FS_SCL_HCNT 0x1c 130 - 131 - /* Fast Spedd Clock SCL Low Count Register */ 132 - #define IC_FS_SCL_LCNT 0x20 133 - 134 - /* High Speed Clock SCL High Count Register */ 135 - #define IC_HS_SCL_HCNT 0x24 136 - 137 - /* High Speed Clock SCL Low Count Register */ 138 - #define IC_HS_SCL_LCNT 0x28 139 - 140 - /* Interrupt Status Register */ 141 - #define IC_INTR_STAT 0x2c /* Read only */ 142 - #define R_GEN_CALL (1 << 11) 143 - #define R_START_DET (1 << 10) 144 - #define R_STOP_DET (1 << 9) 145 - #define R_ACTIVITY (1 << 8) 146 - #define R_RX_DONE (1 << 7) 147 - #define R_TX_ABRT (1 << 6) 148 - #define R_RD_REQ (1 << 5) 149 - #define R_TX_EMPTY (1 << 4) 150 - #define R_TX_OVER (1 << 3) 151 - #define R_RX_FULL (1 << 2) 152 - #define R_RX_OVER (1 << 1) 153 - #define R_RX_UNDER (1 << 0) 154 - 155 - /* Interrupt Mask Register */ 156 - #define IC_INTR_MASK 0x30 /* Read and Write */ 157 - #define M_GEN_CALL (1 << 11) 158 - #define M_START_DET (1 << 10) 159 - #define M_STOP_DET (1 << 9) 160 - #define M_ACTIVITY (1 << 8) 161 - #define M_RX_DONE (1 << 7) 162 - #define M_TX_ABRT (1 << 6) 163 - #define M_RD_REQ (1 << 5) 164 - #define M_TX_EMPTY (1 << 4) 165 - #define M_TX_OVER (1 << 3) 166 - #define M_RX_FULL (1 << 2) 167 - #define M_RX_OVER (1 << 1) 168 - #define M_RX_UNDER (1 << 0) 169 - 170 - /* Raw Interrupt Status Register */ 171 - #define IC_RAW_INTR_STAT 0x34 /* Read Only */ 172 - #define GEN_CALL (1 << 11) /* General call */ 173 - #define START_DET (1 << 10) /* (RE)START occurred */ 174 - #define STOP_DET (1 << 9) /* STOP occurred */ 175 - #define ACTIVITY (1 << 8) /* Bus busy */ 176 - #define RX_DONE (1 << 7) /* Not used in Master mode */ 177 - #define TX_ABRT (1 << 6) /* Transmit Abort */ 178 - #define RD_REQ (1 << 5) /* Not used in Master mode */ 179 - #define TX_EMPTY (1 << 4) /* TX FIFO <= threshold */ 180 - #define TX_OVER (1 << 3) /* TX FIFO overflow */ 181 - #define RX_FULL (1 << 2) /* RX FIFO >= threshold */ 182 - #define RX_OVER (1 << 1) /* RX FIFO overflow */ 183 - #define RX_UNDER (1 << 0) /* RX FIFO empty */ 184 - 185 - /* Receive FIFO Threshold Register */ 186 - #define IC_RX_TL 0x38 187 - 188 - /* Transmit FIFO Treshold Register */ 189 - #define IC_TX_TL 0x3c 190 - 191 - /* Clear Combined and Individual Interrupt Register */ 192 - #define IC_CLR_INTR 0x40 193 - #define CLR_INTR (1 << 0) 194 - 195 - /* Clear RX_UNDER Interrupt Register */ 196 - #define IC_CLR_RX_UNDER 0x44 197 - #define CLR_RX_UNDER (1 << 0) 198 - 199 - /* Clear RX_OVER Interrupt Register */ 200 - #define IC_CLR_RX_OVER 0x48 201 - #define CLR_RX_OVER (1 << 0) 202 - 203 - /* Clear TX_OVER Interrupt Register */ 204 - #define IC_CLR_TX_OVER 0x4c 205 - #define CLR_TX_OVER (1 << 0) 206 - 207 - #define IC_CLR_RD_REQ 0x50 208 - 209 - /* Clear TX_ABRT Interrupt Register */ 210 - #define IC_CLR_TX_ABRT 0x54 211 - #define CLR_TX_ABRT (1 << 0) 212 - #define IC_CLR_RX_DONE 0x58 213 - 214 - /* Clear ACTIVITY Interrupt Register */ 215 - #define IC_CLR_ACTIVITY 0x5c 216 - #define CLR_ACTIVITY (1 << 0) 217 - 218 - /* Clear STOP_DET Interrupt Register */ 219 - #define IC_CLR_STOP_DET 0x60 220 - #define CLR_STOP_DET (1 << 0) 221 - 222 - /* Clear START_DET Interrupt Register */ 223 - #define IC_CLR_START_DET 0x64 224 - #define CLR_START_DET (1 << 0) 225 - 226 - /* Clear GEN_CALL Interrupt Register */ 227 - #define IC_CLR_GEN_CALL 0x68 228 - #define CLR_GEN_CALL (1 << 0) 229 - 230 - /* Enable Register */ 231 - #define IC_ENABLE 0x6c 232 - #define ENABLE (1 << 0) 233 - 234 - /* Status Register */ 235 - #define IC_STATUS 0x70 /* Read Only */ 236 - #define STAT_SLV_ACTIVITY (1 << 6) /* Slave not in idle */ 237 - #define STAT_MST_ACTIVITY (1 << 5) /* Master not in idle */ 238 - #define STAT_RFF (1 << 4) /* RX FIFO Full */ 239 - #define STAT_RFNE (1 << 3) /* RX FIFO Not Empty */ 240 - #define STAT_TFE (1 << 2) /* TX FIFO Empty */ 241 - #define STAT_TFNF (1 << 1) /* TX FIFO Not Full */ 242 - #define STAT_ACTIVITY (1 << 0) /* Activity Status */ 243 - 244 - /* Transmit FIFO Level Register */ 245 - #define IC_TXFLR 0x74 /* Read Only */ 246 - #define TXFLR (1 << 0) /* TX FIFO level */ 247 - 248 - /* Receive FIFO Level Register */ 249 - #define IC_RXFLR 0x78 /* Read Only */ 250 - #define RXFLR (1 << 0) /* RX FIFO level */ 251 - 252 - /* Transmit Abort Source Register */ 253 - #define IC_TX_ABRT_SOURCE 0x80 254 - #define ABRT_SLVRD_INTX (1 << 15) 255 - #define ABRT_SLV_ARBLOST (1 << 14) 256 - #define ABRT_SLVFLUSH_TXFIFO (1 << 13) 257 - #define ARB_LOST (1 << 12) 258 - #define ABRT_MASTER_DIS (1 << 11) 259 - #define ABRT_10B_RD_NORSTRT (1 << 10) 260 - #define ABRT_SBYTE_NORSTRT (1 << 9) 261 - #define ABRT_HS_NORSTRT (1 << 8) 262 - #define ABRT_SBYTE_ACKDET (1 << 7) 263 - #define ABRT_HS_ACKDET (1 << 6) 264 - #define ABRT_GCALL_READ (1 << 5) 265 - #define ABRT_GCALL_NOACK (1 << 4) 266 - #define ABRT_TXDATA_NOACK (1 << 3) 267 - #define ABRT_10ADDR2_NOACK (1 << 2) 268 - #define ABRT_10ADDR1_NOACK (1 << 1) 269 - #define ABRT_7B_ADDR_NOACK (1 << 0) 270 - 271 - /* Enable Status Register */ 272 - #define IC_ENABLE_STATUS 0x9c 273 - #define IC_EN (1 << 0) /* I2C in an enabled state */ 274 - 275 - /* Component Parameter Register 1*/ 276 - #define IC_COMP_PARAM_1 0xf4 277 - #define APB_DATA_WIDTH (0x3 << 0) 278 - 279 - /* added by xiaolin --begin */ 280 - #define SS_MIN_SCL_HIGH 4000 281 - #define SS_MIN_SCL_LOW 4700 282 - #define FS_MIN_SCL_HIGH 600 283 - #define FS_MIN_SCL_LOW 1300 284 - #define HS_MIN_SCL_HIGH_100PF 60 285 - #define HS_MIN_SCL_LOW_100PF 120 286 - 287 - #define STANDARD 0 288 - #define FAST 1 289 - #define HIGH 2 290 - 291 - #define NUM_SPEEDS 3 292 - 293 - static int speed_mode[6] = { 294 - FAST, 295 - FAST, 296 - FAST, 297 - STANDARD, 298 - FAST, 299 - FAST 300 - }; 301 - 302 - static int ctl_num = 6; 303 - module_param_array(speed_mode, int, &ctl_num, S_IRUGO); 304 - MODULE_PARM_DESC(speed_mode, "Set the speed of the i2c interface (0-2)"); 305 - 306 - /** 307 - * intel_mid_i2c_disable - Disable I2C controller 308 - * @adap: struct pointer to i2c_adapter 309 - * 310 - * Return Value: 311 - * 0 success 312 - * -EBUSY if device is busy 313 - * -ETIMEDOUT if i2c cannot be disabled within the given time 314 - * 315 - * I2C bus state should be checked prior to disabling the hardware. If bus is 316 - * not in idle state, an errno is returned. Write "0" to IC_ENABLE to disable 317 - * I2C controller. 318 - */ 319 - static int intel_mid_i2c_disable(struct i2c_adapter *adap) 320 - { 321 - struct intel_mid_i2c_private *i2c = i2c_get_adapdata(adap); 322 - int err = 0; 323 - int count = 0; 324 - int ret1, ret2; 325 - static const u16 delay[NUM_SPEEDS] = {100, 25, 3}; 326 - 327 - /* Set IC_ENABLE to 0 */ 328 - writel(0, i2c->base + IC_ENABLE); 329 - 330 - /* Check if device is busy */ 331 - dev_dbg(&adap->dev, "mrst i2c disable\n"); 332 - while ((ret1 = readl(i2c->base + IC_ENABLE_STATUS) & 0x1) 333 - || (ret2 = readl(i2c->base + IC_STATUS) & 0x1)) { 334 - udelay(delay[i2c->speed]); 335 - writel(0, i2c->base + IC_ENABLE); 336 - dev_dbg(&adap->dev, "i2c is busy, count is %d speed %d\n", 337 - count, i2c->speed); 338 - if (count++ > 10) { 339 - err = -ETIMEDOUT; 340 - break; 341 - } 342 - } 343 - 344 - /* Clear all interrupts */ 345 - readl(i2c->base + IC_CLR_INTR); 346 - readl(i2c->base + IC_CLR_STOP_DET); 347 - readl(i2c->base + IC_CLR_START_DET); 348 - readl(i2c->base + IC_CLR_ACTIVITY); 349 - readl(i2c->base + IC_CLR_TX_ABRT); 350 - readl(i2c->base + IC_CLR_RX_OVER); 351 - readl(i2c->base + IC_CLR_RX_UNDER); 352 - readl(i2c->base + IC_CLR_TX_OVER); 353 - readl(i2c->base + IC_CLR_RX_DONE); 354 - readl(i2c->base + IC_CLR_GEN_CALL); 355 - 356 - /* Disable all interupts */ 357 - writel(0x0000, i2c->base + IC_INTR_MASK); 358 - 359 - return err; 360 - } 361 - 362 - /** 363 - * intel_mid_i2c_hwinit - Initialize the I2C hardware registers 364 - * @dev: pci device struct pointer 365 - * 366 - * This function will be called in intel_mid_i2c_probe() before device 367 - * registration. 368 - * 369 - * Return Values: 370 - * 0 success 371 - * -EBUSY i2c cannot be disabled 372 - * -ETIMEDOUT i2c cannot be disabled 373 - * -EFAULT If APB data width is not 32-bit wide 374 - * 375 - * I2C should be disabled prior to other register operation. If failed, an 376 - * errno is returned. Mask and Clear all interrpts, this should be done at 377 - * first. Set common registers which will not be modified during normal 378 - * transfers, including: control register, FIFO threshold and clock freq. 379 - * Check APB data width at last. 380 - */ 381 - static int intel_mid_i2c_hwinit(struct intel_mid_i2c_private *i2c) 382 - { 383 - int err; 384 - 385 - static const u16 hcnt[NUM_PLATFORMS][NUM_SPEEDS] = { 386 - { 0x75, 0x15, 0x07 }, 387 - { 0x04c, 0x10, 0x06 } 388 - }; 389 - static const u16 lcnt[NUM_PLATFORMS][NUM_SPEEDS] = { 390 - { 0x7C, 0x21, 0x0E }, 391 - { 0x053, 0x19, 0x0F } 392 - }; 393 - 394 - /* Disable i2c first */ 395 - err = intel_mid_i2c_disable(&i2c->adap); 396 - if (err) 397 - return err; 398 - 399 - /* 400 - * Setup clock frequency and speed mode 401 - * Enable restart condition, 402 - * enable master FSM, disable slave FSM, 403 - * use target address when initiating transfer 404 - */ 405 - 406 - writel((i2c->speed + 1) << 1 | SLV_DIS | RESTART | MASTER_EN, 407 - i2c->base + IC_CON); 408 - writel(hcnt[i2c->platform][i2c->speed], 409 - i2c->base + (IC_SS_SCL_HCNT + (i2c->speed << 3))); 410 - writel(lcnt[i2c->platform][i2c->speed], 411 - i2c->base + (IC_SS_SCL_LCNT + (i2c->speed << 3))); 412 - 413 - /* Set tranmit & receive FIFO threshold to zero */ 414 - writel(0x0, i2c->base + IC_RX_TL); 415 - writel(0x0, i2c->base + IC_TX_TL); 416 - 417 - return 0; 418 - } 419 - 420 - /** 421 - * intel_mid_i2c_func - Return the supported three I2C operations. 422 - * @adapter: i2c_adapter struct pointer 423 - */ 424 - static u32 intel_mid_i2c_func(struct i2c_adapter *adapter) 425 - { 426 - return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL; 427 - } 428 - 429 - /** 430 - * intel_mid_i2c_address_neq - To check if the addresses for different i2c messages 431 - * are equal. 432 - * @p1: first i2c_msg 433 - * @p2: second i2c_msg 434 - * 435 - * Return Values: 436 - * 0 if addresses are equal 437 - * 1 if not equal 438 - * 439 - * Within a single transfer, the I2C client may need to send its address more 440 - * than once. So a check if the addresses match is needed. 441 - */ 442 - static inline bool intel_mid_i2c_address_neq(const struct i2c_msg *p1, 443 - const struct i2c_msg *p2) 444 - { 445 - if (p1->addr != p2->addr) 446 - return 1; 447 - if ((p1->flags ^ p2->flags) & I2C_M_TEN) 448 - return 1; 449 - return 0; 450 - } 451 - 452 - /** 453 - * intel_mid_i2c_abort - To handle transfer abortions and print error messages. 454 - * @adap: i2c_adapter struct pointer 455 - * 456 - * By reading register IC_TX_ABRT_SOURCE, various transfer errors can be 457 - * distingushed. At present, no circumstances have been found out that 458 - * multiple errors would be occurred simutaneously, so we simply use the 459 - * register value directly. 460 - * 461 - * At last the error bits are cleared. (Note clear ABRT_SBYTE_NORSTRT bit need 462 - * a few extra steps) 463 - */ 464 - static void intel_mid_i2c_abort(struct intel_mid_i2c_private *i2c) 465 - { 466 - /* Read about source register */ 467 - int abort = i2c->abort; 468 - struct i2c_adapter *adap = &i2c->adap; 469 - 470 - /* Single transfer error check: 471 - * According to databook, TX/RX FIFOs would be flushed when 472 - * the abort interrupt occurred. 473 - */ 474 - if (abort & ABRT_MASTER_DIS) 475 - dev_err(&adap->dev, 476 - "initiate master operation with master mode disabled.\n"); 477 - if (abort & ABRT_10B_RD_NORSTRT) 478 - dev_err(&adap->dev, 479 - "RESTART disabled and master sent READ cmd in 10-bit addressing.\n"); 480 - 481 - if (abort & ABRT_SBYTE_NORSTRT) { 482 - dev_err(&adap->dev, 483 - "RESTART disabled and user is trying to send START byte.\n"); 484 - writel(~ABRT_SBYTE_NORSTRT, i2c->base + IC_TX_ABRT_SOURCE); 485 - writel(RESTART, i2c->base + IC_CON); 486 - writel(~IC_TAR_SPECIAL, i2c->base + IC_TAR); 487 - } 488 - 489 - if (abort & ABRT_SBYTE_ACKDET) 490 - dev_err(&adap->dev, 491 - "START byte was not acknowledged.\n"); 492 - if (abort & ABRT_TXDATA_NOACK) 493 - dev_dbg(&adap->dev, 494 - "No acknowledgement received from slave.\n"); 495 - if (abort & ABRT_10ADDR2_NOACK) 496 - dev_dbg(&adap->dev, 497 - "The 2nd address byte of the 10-bit address was not acknowledged.\n"); 498 - if (abort & ABRT_10ADDR1_NOACK) 499 - dev_dbg(&adap->dev, 500 - "The 1st address byte of 10-bit address was not acknowledged.\n"); 501 - if (abort & ABRT_7B_ADDR_NOACK) 502 - dev_dbg(&adap->dev, 503 - "I2C slave device not acknowledged.\n"); 504 - 505 - /* Clear TX_ABRT bit */ 506 - readl(i2c->base + IC_CLR_TX_ABRT); 507 - i2c->status = STATUS_XFER_ABORT; 508 - } 509 - 510 - /** 511 - * xfer_read - Internal function to implement master read transfer. 512 - * @adap: i2c_adapter struct pointer 513 - * @buf: buffer in i2c_msg 514 - * @length: number of bytes to be read 515 - * 516 - * Return Values: 517 - * 0 if the read transfer succeeds 518 - * -ETIMEDOUT if cannot read the "raw" interrupt register 519 - * -EINVAL if a transfer abort occurred 520 - * 521 - * For every byte, a "READ" command will be loaded into IC_DATA_CMD prior to 522 - * data transfer. The actual "read" operation will be performed if an RX_FULL 523 - * interrupt occurred. 524 - * 525 - * Note there may be two interrupt signals captured, one should read 526 - * IC_RAW_INTR_STAT to separate between errors and actual data. 527 - */ 528 - static int xfer_read(struct i2c_adapter *adap, unsigned char *buf, int length) 529 - { 530 - struct intel_mid_i2c_private *i2c = i2c_get_adapdata(adap); 531 - int i = length; 532 - int err; 533 - 534 - if (length >= 256) { 535 - dev_err(&adap->dev, 536 - "I2C FIFO cannot support larger than 256 bytes\n"); 537 - return -EMSGSIZE; 538 - } 539 - 540 - INIT_COMPLETION(i2c->complete); 541 - 542 - readl(i2c->base + IC_CLR_INTR); 543 - writel(0x0044, i2c->base + IC_INTR_MASK); 544 - 545 - i2c->status = STATUS_READ_START; 546 - 547 - while (i--) 548 - writel(IC_RD, i2c->base + IC_DATA_CMD); 549 - 550 - i2c->status = STATUS_READ_START; 551 - err = wait_for_completion_interruptible_timeout(&i2c->complete, HZ); 552 - if (!err) { 553 - dev_err(&adap->dev, "Timeout for ACK from I2C slave device\n"); 554 - intel_mid_i2c_hwinit(i2c); 555 - return -ETIMEDOUT; 556 - } 557 - if (i2c->status == STATUS_READ_SUCCESS) 558 - return 0; 559 - else 560 - return -EIO; 561 - } 562 - 563 - /** 564 - * xfer_write - Internal function to implement master write transfer. 565 - * @adap: i2c_adapter struct pointer 566 - * @buf: buffer in i2c_msg 567 - * @length: number of bytes to be read 568 - * 569 - * Return Values: 570 - * 0 if the read transfer succeeds 571 - * -ETIMEDOUT if we cannot read the "raw" interrupt register 572 - * -EINVAL if a transfer abort occurred 573 - * 574 - * For every byte, a "WRITE" command will be loaded into IC_DATA_CMD prior to 575 - * data transfer. The actual "write" operation will be performed when the 576 - * RX_FULL interrupt signal occurs. 577 - * 578 - * Note there may be two interrupt signals captured, one should read 579 - * IC_RAW_INTR_STAT to separate between errors and actual data. 580 - */ 581 - static int xfer_write(struct i2c_adapter *adap, 582 - unsigned char *buf, int length) 583 - { 584 - struct intel_mid_i2c_private *i2c = i2c_get_adapdata(adap); 585 - int i, err; 586 - 587 - if (length >= 256) { 588 - dev_err(&adap->dev, 589 - "I2C FIFO cannot support larger than 256 bytes\n"); 590 - return -EMSGSIZE; 591 - } 592 - 593 - INIT_COMPLETION(i2c->complete); 594 - 595 - readl(i2c->base + IC_CLR_INTR); 596 - writel(0x0050, i2c->base + IC_INTR_MASK); 597 - 598 - i2c->status = STATUS_WRITE_START; 599 - for (i = 0; i < length; i++) 600 - writel((u16)(*(buf + i)), i2c->base + IC_DATA_CMD); 601 - 602 - i2c->status = STATUS_WRITE_START; 603 - err = wait_for_completion_interruptible_timeout(&i2c->complete, HZ); 604 - if (!err) { 605 - dev_err(&adap->dev, "Timeout for ACK from I2C slave device\n"); 606 - intel_mid_i2c_hwinit(i2c); 607 - return -ETIMEDOUT; 608 - } else { 609 - if (i2c->status == STATUS_WRITE_SUCCESS) 610 - return 0; 611 - else 612 - return -EIO; 613 - } 614 - } 615 - 616 - static int intel_mid_i2c_setup(struct i2c_adapter *adap, struct i2c_msg *pmsg) 617 - { 618 - struct intel_mid_i2c_private *i2c = i2c_get_adapdata(adap); 619 - int err; 620 - u32 reg; 621 - u32 bit_mask; 622 - u32 mode; 623 - 624 - /* Disable device first */ 625 - err = intel_mid_i2c_disable(adap); 626 - if (err) { 627 - dev_err(&adap->dev, 628 - "Cannot disable i2c controller, timeout\n"); 629 - return err; 630 - } 631 - 632 - mode = (1 + i2c->speed) << 1; 633 - /* set the speed mode */ 634 - reg = readl(i2c->base + IC_CON); 635 - if ((reg & 0x06) != mode) { 636 - dev_dbg(&adap->dev, "set mode %d\n", i2c->speed); 637 - writel((reg & ~0x6) | mode, i2c->base + IC_CON); 638 - } 639 - 640 - reg = readl(i2c->base + IC_CON); 641 - /* use 7-bit addressing */ 642 - if (pmsg->flags & I2C_M_TEN) { 643 - if ((reg & ADDR_10BIT) != ADDR_10BIT) { 644 - dev_dbg(&adap->dev, "set i2c 10 bit address mode\n"); 645 - writel(reg | ADDR_10BIT, i2c->base + IC_CON); 646 - } 647 - } else { 648 - if ((reg & ADDR_10BIT) != 0x0) { 649 - dev_dbg(&adap->dev, "set i2c 7 bit address mode\n"); 650 - writel(reg & ~ADDR_10BIT, i2c->base + IC_CON); 651 - } 652 - } 653 - /* enable restart conditions */ 654 - reg = readl(i2c->base + IC_CON); 655 - if ((reg & RESTART) != RESTART) { 656 - dev_dbg(&adap->dev, "enable restart conditions\n"); 657 - writel(reg | RESTART, i2c->base + IC_CON); 658 - } 659 - 660 - /* enable master FSM */ 661 - reg = readl(i2c->base + IC_CON); 662 - dev_dbg(&adap->dev, "ic_con reg is 0x%x\n", reg); 663 - writel(reg | MASTER_EN, i2c->base + IC_CON); 664 - if ((reg & SLV_DIS) != SLV_DIS) { 665 - dev_dbg(&adap->dev, "enable master FSM\n"); 666 - writel(reg | SLV_DIS, i2c->base + IC_CON); 667 - dev_dbg(&adap->dev, "ic_con reg is 0x%x\n", reg); 668 - } 669 - 670 - /* use target address when initiating transfer */ 671 - reg = readl(i2c->base + IC_TAR); 672 - bit_mask = IC_TAR_SPECIAL | IC_TAR_GC_OR_START; 673 - 674 - if ((reg & bit_mask) != 0x0) { 675 - dev_dbg(&adap->dev, 676 - "WR: use target address when intiating transfer, i2c_tx_target\n"); 677 - writel(reg & ~bit_mask, i2c->base + IC_TAR); 678 - } 679 - 680 - /* set target address to the I2C slave address */ 681 - dev_dbg(&adap->dev, 682 - "set target address to the I2C slave address, addr is %x\n", 683 - pmsg->addr); 684 - writel(pmsg->addr | (pmsg->flags & I2C_M_TEN ? IC_TAR_10BIT_ADDR : 0), 685 - i2c->base + IC_TAR); 686 - 687 - /* Enable I2C controller */ 688 - writel(ENABLE, i2c->base + IC_ENABLE); 689 - 690 - return 0; 691 - } 692 - 693 - /** 694 - * intel_mid_i2c_xfer - Main master transfer routine. 695 - * @adap: i2c_adapter struct pointer 696 - * @pmsg: i2c_msg struct pointer 697 - * @num: number of i2c_msg 698 - * 699 - * Return Values: 700 - * + number of messages transferred 701 - * -ETIMEDOUT If cannot disable I2C controller or read IC_STATUS 702 - * -EINVAL If the address in i2c_msg is invalid 703 - * 704 - * This function will be registered in i2c-core and exposed to external 705 - * I2C clients. 706 - * 1. Disable I2C controller 707 - * 2. Unmask three interrupts: RX_FULL, TX_EMPTY, TX_ABRT 708 - * 3. Check if address in i2c_msg is valid 709 - * 4. Enable I2C controller 710 - * 5. Perform real transfer (call xfer_read or xfer_write) 711 - * 6. Wait until the current transfer is finished (check bus state) 712 - * 7. Mask and clear all interrupts 713 - */ 714 - static int intel_mid_i2c_xfer(struct i2c_adapter *adap, 715 - struct i2c_msg *pmsg, 716 - int num) 717 - { 718 - struct intel_mid_i2c_private *i2c = i2c_get_adapdata(adap); 719 - int i, err = 0; 720 - 721 - /* if number of messages equal 0*/ 722 - if (num == 0) 723 - return 0; 724 - 725 - pm_runtime_get(i2c->dev); 726 - 727 - mutex_lock(&i2c->lock); 728 - dev_dbg(&adap->dev, "intel_mid_i2c_xfer, process %d msg(s)\n", num); 729 - dev_dbg(&adap->dev, "slave address is %x\n", pmsg->addr); 730 - 731 - 732 - if (i2c->status != STATUS_IDLE) { 733 - dev_err(&adap->dev, "Adapter %d in transfer/standby\n", 734 - adap->nr); 735 - mutex_unlock(&i2c->lock); 736 - pm_runtime_put(i2c->dev); 737 - return -1; 738 - } 739 - 740 - 741 - for (i = 1; i < num; i++) { 742 - /* Message address equal? */ 743 - if (unlikely(intel_mid_i2c_address_neq(&pmsg[0], &pmsg[i]))) { 744 - dev_err(&adap->dev, "Invalid address in msg[%d]\n", i); 745 - mutex_unlock(&i2c->lock); 746 - pm_runtime_put(i2c->dev); 747 - return -EINVAL; 748 - } 749 - } 750 - 751 - if (intel_mid_i2c_setup(adap, pmsg)) { 752 - mutex_unlock(&i2c->lock); 753 - pm_runtime_put(i2c->dev); 754 - return -EINVAL; 755 - } 756 - 757 - for (i = 0; i < num; i++) { 758 - i2c->msg = pmsg; 759 - i2c->status = STATUS_IDLE; 760 - /* Read or Write */ 761 - if (pmsg->flags & I2C_M_RD) { 762 - dev_dbg(&adap->dev, "I2C_M_RD\n"); 763 - err = xfer_read(adap, pmsg->buf, pmsg->len); 764 - } else { 765 - dev_dbg(&adap->dev, "I2C_M_WR\n"); 766 - err = xfer_write(adap, pmsg->buf, pmsg->len); 767 - } 768 - if (err < 0) 769 - break; 770 - dev_dbg(&adap->dev, "msg[%d] transfer complete\n", i); 771 - pmsg++; /* next message */ 772 - } 773 - 774 - /* Mask interrupts */ 775 - writel(0x0000, i2c->base + IC_INTR_MASK); 776 - /* Clear all interrupts */ 777 - readl(i2c->base + IC_CLR_INTR); 778 - 779 - i2c->status = STATUS_IDLE; 780 - mutex_unlock(&i2c->lock); 781 - pm_runtime_put(i2c->dev); 782 - 783 - return err; 784 - } 785 - 786 - static int intel_mid_i2c_runtime_suspend(struct device *dev) 787 - { 788 - struct pci_dev *pdev = to_pci_dev(dev); 789 - struct intel_mid_i2c_private *i2c = pci_get_drvdata(pdev); 790 - struct i2c_adapter *adap = to_i2c_adapter(dev); 791 - int err; 792 - 793 - if (i2c->status != STATUS_IDLE) 794 - return -1; 795 - 796 - intel_mid_i2c_disable(adap); 797 - 798 - err = pci_save_state(pdev); 799 - if (err) { 800 - dev_err(dev, "pci_save_state failed\n"); 801 - return err; 802 - } 803 - 804 - err = pci_set_power_state(pdev, PCI_D3hot); 805 - if (err) { 806 - dev_err(dev, "pci_set_power_state failed\n"); 807 - return err; 808 - } 809 - i2c->status = STATUS_STANDBY; 810 - 811 - return 0; 812 - } 813 - 814 - static int intel_mid_i2c_runtime_resume(struct device *dev) 815 - { 816 - struct pci_dev *pdev = to_pci_dev(dev); 817 - struct intel_mid_i2c_private *i2c = pci_get_drvdata(pdev); 818 - int err; 819 - 820 - if (i2c->status != STATUS_STANDBY) 821 - return 0; 822 - 823 - pci_set_power_state(pdev, PCI_D0); 824 - pci_restore_state(pdev); 825 - err = pci_enable_device(pdev); 826 - if (err) { 827 - dev_err(dev, "pci_enable_device failed\n"); 828 - return err; 829 - } 830 - 831 - i2c->status = STATUS_IDLE; 832 - 833 - intel_mid_i2c_hwinit(i2c); 834 - return err; 835 - } 836 - 837 - static void i2c_isr_read(struct intel_mid_i2c_private *i2c) 838 - { 839 - struct i2c_msg *msg = i2c->msg; 840 - int rx_num; 841 - u32 len; 842 - u8 *buf; 843 - 844 - if (!(msg->flags & I2C_M_RD)) 845 - return; 846 - 847 - if (i2c->status != STATUS_READ_IN_PROGRESS) { 848 - len = msg->len; 849 - buf = msg->buf; 850 - } else { 851 - len = i2c->rx_buf_len; 852 - buf = i2c->rx_buf; 853 - } 854 - 855 - rx_num = readl(i2c->base + IC_RXFLR); 856 - 857 - for (; len > 0 && rx_num > 0; len--, rx_num--) 858 - *buf++ = readl(i2c->base + IC_DATA_CMD); 859 - 860 - if (len > 0) { 861 - i2c->status = STATUS_READ_IN_PROGRESS; 862 - i2c->rx_buf_len = len; 863 - i2c->rx_buf = buf; 864 - } else 865 - i2c->status = STATUS_READ_SUCCESS; 866 - 867 - return; 868 - } 869 - 870 - static irqreturn_t intel_mid_i2c_isr(int this_irq, void *dev) 871 - { 872 - struct intel_mid_i2c_private *i2c = dev; 873 - u32 stat = readl(i2c->base + IC_INTR_STAT); 874 - 875 - if (!stat) 876 - return IRQ_NONE; 877 - 878 - dev_dbg(&i2c->adap.dev, "%s, stat = 0x%x\n", __func__, stat); 879 - stat &= 0x54; 880 - 881 - if (i2c->status != STATUS_WRITE_START && 882 - i2c->status != STATUS_READ_START && 883 - i2c->status != STATUS_READ_IN_PROGRESS) 884 - goto err; 885 - 886 - if (stat & TX_ABRT) 887 - i2c->abort = readl(i2c->base + IC_TX_ABRT_SOURCE); 888 - 889 - readl(i2c->base + IC_CLR_INTR); 890 - 891 - if (stat & TX_ABRT) { 892 - intel_mid_i2c_abort(i2c); 893 - goto exit; 894 - } 895 - 896 - if (stat & RX_FULL) { 897 - i2c_isr_read(i2c); 898 - goto exit; 899 - } 900 - 901 - if (stat & TX_EMPTY) { 902 - if (readl(i2c->base + IC_STATUS) & 0x4) 903 - i2c->status = STATUS_WRITE_SUCCESS; 904 - } 905 - 906 - exit: 907 - if (i2c->status == STATUS_READ_SUCCESS || 908 - i2c->status == STATUS_WRITE_SUCCESS || 909 - i2c->status == STATUS_XFER_ABORT) { 910 - /* Clear all interrupts */ 911 - readl(i2c->base + IC_CLR_INTR); 912 - /* Mask interrupts */ 913 - writel(0, i2c->base + IC_INTR_MASK); 914 - complete(&i2c->complete); 915 - } 916 - err: 917 - return IRQ_HANDLED; 918 - } 919 - 920 - static struct i2c_algorithm intel_mid_i2c_algorithm = { 921 - .master_xfer = intel_mid_i2c_xfer, 922 - .functionality = intel_mid_i2c_func, 923 - }; 924 - 925 - 926 - static const struct dev_pm_ops intel_mid_i2c_pm_ops = { 927 - .runtime_suspend = intel_mid_i2c_runtime_suspend, 928 - .runtime_resume = intel_mid_i2c_runtime_resume, 929 - }; 930 - 931 - /** 932 - * intel_mid_i2c_probe - I2C controller initialization routine 933 - * @dev: pci device 934 - * @id: device id 935 - * 936 - * Return Values: 937 - * 0 success 938 - * -ENODEV If cannot allocate pci resource 939 - * -ENOMEM If the register base remapping failed, or 940 - * if kzalloc failed 941 - * 942 - * Initialization steps: 943 - * 1. Request for PCI resource 944 - * 2. Remap the start address of PCI resource to register base 945 - * 3. Request for device memory region 946 - * 4. Fill in the struct members of intel_mid_i2c_private 947 - * 5. Call intel_mid_i2c_hwinit() for hardware initialization 948 - * 6. Register I2C adapter in i2c-core 949 - */ 950 - static int intel_mid_i2c_probe(struct pci_dev *dev, 951 - const struct pci_device_id *id) 952 - { 953 - struct intel_mid_i2c_private *mrst; 954 - unsigned long start, len; 955 - int err, busnum; 956 - void __iomem *base = NULL; 957 - 958 - dev_dbg(&dev->dev, "Get into probe function for I2C\n"); 959 - err = pci_enable_device(dev); 960 - if (err) { 961 - dev_err(&dev->dev, "Failed to enable I2C PCI device (%d)\n", 962 - err); 963 - goto exit; 964 - } 965 - 966 - /* Determine the address of the I2C area */ 967 - start = pci_resource_start(dev, 0); 968 - len = pci_resource_len(dev, 0); 969 - if (!start || len == 0) { 970 - dev_err(&dev->dev, "base address not set\n"); 971 - err = -ENODEV; 972 - goto exit; 973 - } 974 - dev_dbg(&dev->dev, "%s i2c resource start 0x%lx, len=%ld\n", 975 - PLATFORM, start, len); 976 - 977 - err = pci_request_region(dev, 0, DRIVER_NAME); 978 - if (err) { 979 - dev_err(&dev->dev, "failed to request I2C region " 980 - "0x%lx-0x%lx\n", start, 981 - (unsigned long)pci_resource_end(dev, 0)); 982 - goto exit; 983 - } 984 - 985 - base = ioremap_nocache(start, len); 986 - if (!base) { 987 - dev_err(&dev->dev, "I/O memory remapping failed\n"); 988 - err = -ENOMEM; 989 - goto fail0; 990 - } 991 - 992 - /* Allocate the per-device data structure, intel_mid_i2c_private */ 993 - mrst = kzalloc(sizeof(struct intel_mid_i2c_private), GFP_KERNEL); 994 - if (mrst == NULL) { 995 - dev_err(&dev->dev, "can't allocate interface\n"); 996 - err = -ENOMEM; 997 - goto fail1; 998 - } 999 - 1000 - /* Initialize struct members */ 1001 - snprintf(mrst->adap.name, sizeof(mrst->adap.name), 1002 - "Intel MID I2C at %lx", start); 1003 - mrst->adap.owner = THIS_MODULE; 1004 - mrst->adap.algo = &intel_mid_i2c_algorithm; 1005 - mrst->adap.dev.parent = &dev->dev; 1006 - mrst->dev = &dev->dev; 1007 - mrst->base = base; 1008 - mrst->speed = STANDARD; 1009 - mrst->abort = 0; 1010 - mrst->rx_buf_len = 0; 1011 - mrst->status = STATUS_IDLE; 1012 - 1013 - pci_set_drvdata(dev, mrst); 1014 - i2c_set_adapdata(&mrst->adap, mrst); 1015 - 1016 - mrst->adap.nr = busnum = id->driver_data; 1017 - if (dev->device <= 0x0804) 1018 - mrst->platform = MOORESTOWN; 1019 - else 1020 - mrst->platform = MEDFIELD; 1021 - 1022 - dev_dbg(&dev->dev, "I2C%d\n", busnum); 1023 - 1024 - if (ctl_num > busnum) { 1025 - if (speed_mode[busnum] < 0 || speed_mode[busnum] >= NUM_SPEEDS) 1026 - dev_warn(&dev->dev, "invalid speed %d ignored.\n", 1027 - speed_mode[busnum]); 1028 - else 1029 - mrst->speed = speed_mode[busnum]; 1030 - } 1031 - 1032 - /* Initialize i2c controller */ 1033 - err = intel_mid_i2c_hwinit(mrst); 1034 - if (err < 0) { 1035 - dev_err(&dev->dev, "I2C interface initialization failed\n"); 1036 - goto fail2; 1037 - } 1038 - 1039 - mutex_init(&mrst->lock); 1040 - init_completion(&mrst->complete); 1041 - 1042 - /* Clear all interrupts */ 1043 - readl(mrst->base + IC_CLR_INTR); 1044 - writel(0x0000, mrst->base + IC_INTR_MASK); 1045 - 1046 - err = request_irq(dev->irq, intel_mid_i2c_isr, IRQF_SHARED, 1047 - mrst->adap.name, mrst); 1048 - if (err) { 1049 - dev_err(&dev->dev, "Failed to request IRQ for I2C controller: " 1050 - "%s", mrst->adap.name); 1051 - goto fail2; 1052 - } 1053 - 1054 - /* Adapter registration */ 1055 - err = i2c_add_numbered_adapter(&mrst->adap); 1056 - if (err) { 1057 - dev_err(&dev->dev, "Adapter %s registration failed\n", 1058 - mrst->adap.name); 1059 - goto fail3; 1060 - } 1061 - 1062 - dev_dbg(&dev->dev, "%s I2C bus %d driver bind success.\n", 1063 - (mrst->platform == MOORESTOWN) ? "Moorestown" : "Medfield", 1064 - busnum); 1065 - 1066 - pm_runtime_enable(&dev->dev); 1067 - return 0; 1068 - 1069 - fail3: 1070 - free_irq(dev->irq, mrst); 1071 - fail2: 1072 - kfree(mrst); 1073 - fail1: 1074 - iounmap(base); 1075 - fail0: 1076 - pci_release_region(dev, 0); 1077 - exit: 1078 - return err; 1079 - } 1080 - 1081 - static void intel_mid_i2c_remove(struct pci_dev *dev) 1082 - { 1083 - struct intel_mid_i2c_private *mrst = pci_get_drvdata(dev); 1084 - intel_mid_i2c_disable(&mrst->adap); 1085 - i2c_del_adapter(&mrst->adap); 1086 - 1087 - free_irq(dev->irq, mrst); 1088 - iounmap(mrst->base); 1089 - kfree(mrst); 1090 - pci_release_region(dev, 0); 1091 - } 1092 - 1093 - static DEFINE_PCI_DEVICE_TABLE(intel_mid_i2c_ids) = { 1094 - /* Moorestown */ 1095 - { PCI_VDEVICE(INTEL, 0x0802), 0 }, 1096 - { PCI_VDEVICE(INTEL, 0x0803), 1 }, 1097 - { PCI_VDEVICE(INTEL, 0x0804), 2 }, 1098 - /* Medfield */ 1099 - { PCI_VDEVICE(INTEL, 0x0817), 3,}, 1100 - { PCI_VDEVICE(INTEL, 0x0818), 4 }, 1101 - { PCI_VDEVICE(INTEL, 0x0819), 5 }, 1102 - { PCI_VDEVICE(INTEL, 0x082C), 0 }, 1103 - { PCI_VDEVICE(INTEL, 0x082D), 1 }, 1104 - { PCI_VDEVICE(INTEL, 0x082E), 2 }, 1105 - { 0,} 1106 - }; 1107 - MODULE_DEVICE_TABLE(pci, intel_mid_i2c_ids); 1108 - 1109 - static struct pci_driver intel_mid_i2c_driver = { 1110 - .name = DRIVER_NAME, 1111 - .id_table = intel_mid_i2c_ids, 1112 - .probe = intel_mid_i2c_probe, 1113 - .remove = intel_mid_i2c_remove, 1114 - }; 1115 - 1116 - module_pci_driver(intel_mid_i2c_driver); 1117 - 1118 - MODULE_AUTHOR("Ba Zheng <zheng.ba@intel.com>"); 1119 - MODULE_DESCRIPTION("I2C driver for Moorestown Platform"); 1120 - MODULE_LICENSE("GPL"); 1121 - MODULE_VERSION(VERSION);
+1 -1
drivers/i2c/busses/i2c-iop3xx.c
··· 176 176 interrupted = wait_event_interruptible_timeout ( 177 177 iop3xx_adap->waitq, 178 178 (done = compare( sr = iop3xx_i2c_get_srstat(iop3xx_adap) ,flags )), 179 - 1 * HZ; 179 + 1 * HZ 180 180 ); 181 181 if ((rc = iop3xx_i2c_error(sr)) < 0) { 182 182 *status = sr;
+410
drivers/i2c/busses/i2c-kempld.c
··· 1 + /* 2 + * I2C bus driver for Kontron COM modules 3 + * 4 + * Copyright (c) 2010-2013 Kontron Europe GmbH 5 + * Author: Michael Brunner <michael.brunner@kontron.com> 6 + * 7 + * The driver is based on the i2c-ocores driver by Peter Korsgaard. 8 + * 9 + * This program is free software; you can redistribute it and/or modify 10 + * it under the terms of the GNU General Public License 2 as published 11 + * by the Free Software Foundation. 12 + * 13 + * This program is distributed in the hope that it will be useful, 14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 + * GNU General Public License for more details. 17 + */ 18 + 19 + #include <linux/module.h> 20 + #include <linux/platform_device.h> 21 + #include <linux/i2c.h> 22 + #include <linux/delay.h> 23 + #include <linux/mfd/kempld.h> 24 + 25 + #define KEMPLD_I2C_PRELOW 0x0b 26 + #define KEMPLD_I2C_PREHIGH 0x0c 27 + #define KEMPLD_I2C_DATA 0x0e 28 + 29 + #define KEMPLD_I2C_CTRL 0x0d 30 + #define I2C_CTRL_IEN 0x40 31 + #define I2C_CTRL_EN 0x80 32 + 33 + #define KEMPLD_I2C_STAT 0x0f 34 + #define I2C_STAT_IF 0x01 35 + #define I2C_STAT_TIP 0x02 36 + #define I2C_STAT_ARBLOST 0x20 37 + #define I2C_STAT_BUSY 0x40 38 + #define I2C_STAT_NACK 0x80 39 + 40 + #define KEMPLD_I2C_CMD 0x0f 41 + #define I2C_CMD_START 0x91 42 + #define I2C_CMD_STOP 0x41 43 + #define I2C_CMD_READ 0x21 44 + #define I2C_CMD_WRITE 0x11 45 + #define I2C_CMD_READ_ACK 0x21 46 + #define I2C_CMD_READ_NACK 0x29 47 + #define I2C_CMD_IACK 0x01 48 + 49 + #define KEMPLD_I2C_FREQ_MAX 2700 /* 2.7 mHz */ 50 + #define KEMPLD_I2C_FREQ_STD 100 /* 100 kHz */ 51 + 52 + enum { 53 + STATE_DONE = 0, 54 + STATE_INIT, 55 + STATE_ADDR, 56 + STATE_ADDR10, 57 + STATE_START, 58 + STATE_WRITE, 59 + STATE_READ, 60 + STATE_ERROR, 61 + }; 62 + 63 + struct kempld_i2c_data { 64 + struct device *dev; 65 + struct kempld_device_data *pld; 66 + struct i2c_adapter adap; 67 + struct i2c_msg *msg; 68 + int pos; 69 + int nmsgs; 70 + int state; 71 + bool was_active; 72 + }; 73 + 74 + static unsigned int bus_frequency = KEMPLD_I2C_FREQ_STD; 75 + module_param(bus_frequency, uint, 0); 76 + MODULE_PARM_DESC(bus_frequency, "Set I2C bus frequency in kHz (default=" 77 + __MODULE_STRING(KEMPLD_I2C_FREQ_STD)")"); 78 + 79 + static int i2c_bus = -1; 80 + module_param(i2c_bus, int, 0); 81 + MODULE_PARM_DESC(i2c_bus, "Set I2C bus number (default=-1 for dynamic assignment)"); 82 + 83 + static bool i2c_gpio_mux; 84 + module_param(i2c_gpio_mux, bool, 0); 85 + MODULE_PARM_DESC(i2c_gpio_mux, "Enable I2C port on GPIO out (default=false)"); 86 + 87 + /* 88 + * kempld_get_mutex must be called prior to calling this function. 89 + */ 90 + static int kempld_i2c_process(struct kempld_i2c_data *i2c) 91 + { 92 + struct kempld_device_data *pld = i2c->pld; 93 + u8 stat = kempld_read8(pld, KEMPLD_I2C_STAT); 94 + struct i2c_msg *msg = i2c->msg; 95 + u8 addr; 96 + 97 + /* Ready? */ 98 + if (stat & I2C_STAT_TIP) 99 + return -EBUSY; 100 + 101 + if (i2c->state == STATE_DONE || i2c->state == STATE_ERROR) { 102 + /* Stop has been sent */ 103 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_IACK); 104 + if (i2c->state == STATE_ERROR) 105 + return -EIO; 106 + return 0; 107 + } 108 + 109 + /* Error? */ 110 + if (stat & I2C_STAT_ARBLOST) { 111 + i2c->state = STATE_ERROR; 112 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_STOP); 113 + return -EAGAIN; 114 + } 115 + 116 + if (i2c->state == STATE_INIT) { 117 + if (stat & I2C_STAT_BUSY) 118 + return -EBUSY; 119 + 120 + i2c->state = STATE_ADDR; 121 + } 122 + 123 + if (i2c->state == STATE_ADDR) { 124 + /* 10 bit address? */ 125 + if (i2c->msg->flags & I2C_M_TEN) { 126 + addr = 0xf0 | ((i2c->msg->addr >> 7) & 0x6); 127 + i2c->state = STATE_ADDR10; 128 + } else { 129 + addr = (i2c->msg->addr << 1); 130 + i2c->state = STATE_START; 131 + } 132 + 133 + /* Set read bit if necessary */ 134 + addr |= (i2c->msg->flags & I2C_M_RD) ? 1 : 0; 135 + 136 + kempld_write8(pld, KEMPLD_I2C_DATA, addr); 137 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_START); 138 + 139 + return 0; 140 + } 141 + 142 + /* Second part of 10 bit addressing */ 143 + if (i2c->state == STATE_ADDR10) { 144 + kempld_write8(pld, KEMPLD_I2C_DATA, i2c->msg->addr & 0xff); 145 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_WRITE); 146 + 147 + i2c->state = STATE_START; 148 + return 0; 149 + } 150 + 151 + if (i2c->state == STATE_START || i2c->state == STATE_WRITE) { 152 + i2c->state = (msg->flags & I2C_M_RD) ? STATE_READ : STATE_WRITE; 153 + 154 + if (stat & I2C_STAT_NACK) { 155 + i2c->state = STATE_ERROR; 156 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_STOP); 157 + return -ENXIO; 158 + } 159 + } else { 160 + msg->buf[i2c->pos++] = kempld_read8(pld, KEMPLD_I2C_DATA); 161 + } 162 + 163 + if (i2c->pos >= msg->len) { 164 + i2c->nmsgs--; 165 + i2c->msg++; 166 + i2c->pos = 0; 167 + msg = i2c->msg; 168 + 169 + if (i2c->nmsgs) { 170 + if (!(msg->flags & I2C_M_NOSTART)) { 171 + i2c->state = STATE_ADDR; 172 + return 0; 173 + } else { 174 + i2c->state = (msg->flags & I2C_M_RD) 175 + ? STATE_READ : STATE_WRITE; 176 + } 177 + } else { 178 + i2c->state = STATE_DONE; 179 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_STOP); 180 + return 0; 181 + } 182 + } 183 + 184 + if (i2c->state == STATE_READ) { 185 + kempld_write8(pld, KEMPLD_I2C_CMD, i2c->pos == (msg->len - 1) ? 186 + I2C_CMD_READ_NACK : I2C_CMD_READ_ACK); 187 + } else { 188 + kempld_write8(pld, KEMPLD_I2C_DATA, msg->buf[i2c->pos++]); 189 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_WRITE); 190 + } 191 + 192 + return 0; 193 + } 194 + 195 + static int kempld_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, 196 + int num) 197 + { 198 + struct kempld_i2c_data *i2c = i2c_get_adapdata(adap); 199 + struct kempld_device_data *pld = i2c->pld; 200 + unsigned long timeout = jiffies + HZ; 201 + int ret; 202 + 203 + i2c->msg = msgs; 204 + i2c->pos = 0; 205 + i2c->nmsgs = num; 206 + i2c->state = STATE_INIT; 207 + 208 + /* Handle the transfer */ 209 + while (time_before(jiffies, timeout)) { 210 + kempld_get_mutex(pld); 211 + ret = kempld_i2c_process(i2c); 212 + kempld_release_mutex(pld); 213 + 214 + if (i2c->state == STATE_DONE || i2c->state == STATE_ERROR) 215 + return (i2c->state == STATE_DONE) ? num : ret; 216 + 217 + if (ret == 0) 218 + timeout = jiffies + HZ; 219 + 220 + usleep_range(5, 15); 221 + } 222 + 223 + i2c->state = STATE_ERROR; 224 + 225 + return -ETIMEDOUT; 226 + } 227 + 228 + /* 229 + * kempld_get_mutex must be called prior to calling this function. 230 + */ 231 + static void kempld_i2c_device_init(struct kempld_i2c_data *i2c) 232 + { 233 + struct kempld_device_data *pld = i2c->pld; 234 + u16 prescale_corr; 235 + long prescale; 236 + u8 ctrl; 237 + u8 stat; 238 + u8 cfg; 239 + 240 + /* Make sure the device is disabled */ 241 + ctrl = kempld_read8(pld, KEMPLD_I2C_CTRL); 242 + ctrl &= ~(I2C_CTRL_EN | I2C_CTRL_IEN); 243 + kempld_write8(pld, KEMPLD_I2C_CTRL, ctrl); 244 + 245 + if (bus_frequency > KEMPLD_I2C_FREQ_MAX) 246 + bus_frequency = KEMPLD_I2C_FREQ_MAX; 247 + 248 + if (pld->info.spec_major == 1) 249 + prescale = pld->pld_clock / bus_frequency * 5 - 1000; 250 + else 251 + prescale = pld->pld_clock / bus_frequency * 4 - 3000; 252 + 253 + if (prescale < 0) 254 + prescale = 0; 255 + 256 + /* Round to the best matching value */ 257 + prescale_corr = prescale / 1000; 258 + if (prescale % 1000 >= 500) 259 + prescale_corr++; 260 + 261 + kempld_write8(pld, KEMPLD_I2C_PRELOW, prescale_corr & 0xff); 262 + kempld_write8(pld, KEMPLD_I2C_PREHIGH, prescale_corr >> 8); 263 + 264 + /* Activate I2C bus output on GPIO pins */ 265 + cfg = kempld_read8(pld, KEMPLD_CFG); 266 + if (i2c_gpio_mux) 267 + cfg |= KEMPLD_CFG_GPIO_I2C_MUX; 268 + else 269 + cfg &= ~KEMPLD_CFG_GPIO_I2C_MUX; 270 + kempld_write8(pld, KEMPLD_CFG, cfg); 271 + 272 + /* Enable the device */ 273 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_IACK); 274 + ctrl |= I2C_CTRL_EN; 275 + kempld_write8(pld, KEMPLD_I2C_CTRL, ctrl); 276 + 277 + stat = kempld_read8(pld, KEMPLD_I2C_STAT); 278 + if (stat & I2C_STAT_BUSY) 279 + kempld_write8(pld, KEMPLD_I2C_CMD, I2C_CMD_STOP); 280 + } 281 + 282 + static u32 kempld_i2c_func(struct i2c_adapter *adap) 283 + { 284 + return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL; 285 + } 286 + 287 + static const struct i2c_algorithm kempld_i2c_algorithm = { 288 + .master_xfer = kempld_i2c_xfer, 289 + .functionality = kempld_i2c_func, 290 + }; 291 + 292 + static struct i2c_adapter kempld_i2c_adapter = { 293 + .owner = THIS_MODULE, 294 + .name = "i2c-kempld", 295 + .class = I2C_CLASS_HWMON | I2C_CLASS_SPD, 296 + .algo = &kempld_i2c_algorithm, 297 + }; 298 + 299 + static int kempld_i2c_probe(struct platform_device *pdev) 300 + { 301 + struct kempld_device_data *pld = dev_get_drvdata(pdev->dev.parent); 302 + struct kempld_i2c_data *i2c; 303 + int ret; 304 + u8 ctrl; 305 + 306 + i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL); 307 + if (!i2c) 308 + return -ENOMEM; 309 + 310 + i2c->pld = pld; 311 + i2c->dev = &pdev->dev; 312 + i2c->adap = kempld_i2c_adapter; 313 + i2c->adap.dev.parent = i2c->dev; 314 + i2c_set_adapdata(&i2c->adap, i2c); 315 + platform_set_drvdata(pdev, i2c); 316 + 317 + kempld_get_mutex(pld); 318 + ctrl = kempld_read8(pld, KEMPLD_I2C_CTRL); 319 + 320 + if (ctrl & I2C_CTRL_EN) 321 + i2c->was_active = true; 322 + 323 + kempld_i2c_device_init(i2c); 324 + kempld_release_mutex(pld); 325 + 326 + /* Add I2C adapter to I2C tree */ 327 + if (i2c_bus >= -1) 328 + i2c->adap.nr = i2c_bus; 329 + ret = i2c_add_numbered_adapter(&i2c->adap); 330 + if (ret) 331 + return ret; 332 + 333 + dev_info(i2c->dev, "I2C bus initialized at %dkHz\n", 334 + bus_frequency); 335 + 336 + return 0; 337 + } 338 + 339 + static int kempld_i2c_remove(struct platform_device *pdev) 340 + { 341 + struct kempld_i2c_data *i2c = platform_get_drvdata(pdev); 342 + struct kempld_device_data *pld = i2c->pld; 343 + u8 ctrl; 344 + 345 + kempld_get_mutex(pld); 346 + /* 347 + * Disable I2C logic if it was not activated before the 348 + * driver loaded 349 + */ 350 + if (!i2c->was_active) { 351 + ctrl = kempld_read8(pld, KEMPLD_I2C_CTRL); 352 + ctrl &= ~I2C_CTRL_EN; 353 + kempld_write8(pld, KEMPLD_I2C_CTRL, ctrl); 354 + } 355 + kempld_release_mutex(pld); 356 + 357 + i2c_del_adapter(&i2c->adap); 358 + 359 + return 0; 360 + } 361 + 362 + #ifdef CONFIG_PM 363 + static int kempld_i2c_suspend(struct platform_device *pdev, pm_message_t state) 364 + { 365 + struct kempld_i2c_data *i2c = platform_get_drvdata(pdev); 366 + struct kempld_device_data *pld = i2c->pld; 367 + u8 ctrl; 368 + 369 + kempld_get_mutex(pld); 370 + ctrl = kempld_read8(pld, KEMPLD_I2C_CTRL); 371 + ctrl &= ~I2C_CTRL_EN; 372 + kempld_write8(pld, KEMPLD_I2C_CTRL, ctrl); 373 + kempld_release_mutex(pld); 374 + 375 + return 0; 376 + } 377 + 378 + static int kempld_i2c_resume(struct platform_device *pdev) 379 + { 380 + struct kempld_i2c_data *i2c = platform_get_drvdata(pdev); 381 + struct kempld_device_data *pld = i2c->pld; 382 + 383 + kempld_get_mutex(pld); 384 + kempld_i2c_device_init(i2c); 385 + kempld_release_mutex(pld); 386 + 387 + return 0; 388 + } 389 + #else 390 + #define kempld_i2c_suspend NULL 391 + #define kempld_i2c_resume NULL 392 + #endif 393 + 394 + static struct platform_driver kempld_i2c_driver = { 395 + .driver = { 396 + .name = "kempld-i2c", 397 + .owner = THIS_MODULE, 398 + }, 399 + .probe = kempld_i2c_probe, 400 + .remove = kempld_i2c_remove, 401 + .suspend = kempld_i2c_suspend, 402 + .resume = kempld_i2c_resume, 403 + }; 404 + 405 + module_platform_driver(kempld_i2c_driver); 406 + 407 + MODULE_DESCRIPTION("KEM PLD I2C Driver"); 408 + MODULE_AUTHOR("Michael Brunner <michael.brunner@kontron.com>"); 409 + MODULE_LICENSE("GPL"); 410 + MODULE_ALIAS("platform:kempld_i2c");
+2 -2
drivers/i2c/busses/i2c-mpc.c
··· 679 679 } 680 680 dev_info(i2c->dev, "timeout %u us\n", mpc_ops.timeout * 1000000 / HZ); 681 681 682 - dev_set_drvdata(&op->dev, i2c); 682 + platform_set_drvdata(op, i2c); 683 683 684 684 i2c->adap = mpc_ops; 685 685 i2c_set_adapdata(&i2c->adap, i2c); ··· 707 707 708 708 static int fsl_i2c_remove(struct platform_device *op) 709 709 { 710 - struct mpc_i2c *i2c = dev_get_drvdata(&op->dev); 710 + struct mpc_i2c *i2c = platform_get_drvdata(op); 711 711 712 712 i2c_del_adapter(&i2c->adap); 713 713
+161 -160
drivers/i2c/busses/i2c-mv64xxx.c
··· 19 19 #include <linux/platform_device.h> 20 20 #include <linux/io.h> 21 21 #include <linux/of.h> 22 + #include <linux/of_device.h> 22 23 #include <linux/of_irq.h> 23 24 #include <linux/of_i2c.h> 24 25 #include <linux/clk.h> 25 26 #include <linux/err.h> 26 27 27 - /* Register defines */ 28 - #define MV64XXX_I2C_REG_SLAVE_ADDR 0x00 29 - #define MV64XXX_I2C_REG_DATA 0x04 30 - #define MV64XXX_I2C_REG_CONTROL 0x08 31 - #define MV64XXX_I2C_REG_STATUS 0x0c 32 - #define MV64XXX_I2C_REG_BAUD 0x0c 33 - #define MV64XXX_I2C_REG_EXT_SLAVE_ADDR 0x10 34 - #define MV64XXX_I2C_REG_SOFT_RESET 0x1c 28 + #define MV64XXX_I2C_ADDR_ADDR(val) ((val & 0x7f) << 1) 29 + #define MV64XXX_I2C_BAUD_DIV_N(val) (val & 0x7) 30 + #define MV64XXX_I2C_BAUD_DIV_M(val) ((val & 0xf) << 3) 35 31 36 32 #define MV64XXX_I2C_REG_CONTROL_ACK 0x00000004 37 33 #define MV64XXX_I2C_REG_CONTROL_IFLG 0x00000008 ··· 81 85 MV64XXX_I2C_ACTION_SEND_STOP, 82 86 }; 83 87 88 + struct mv64xxx_i2c_regs { 89 + u8 addr; 90 + u8 ext_addr; 91 + u8 data; 92 + u8 control; 93 + u8 status; 94 + u8 clock; 95 + u8 soft_reset; 96 + }; 97 + 84 98 struct mv64xxx_i2c_data { 99 + struct i2c_msg *msgs; 100 + int num_msgs; 85 101 int irq; 86 102 u32 state; 87 103 u32 action; 88 104 u32 aborting; 89 105 u32 cntl_bits; 90 106 void __iomem *reg_base; 91 - u32 reg_base_p; 92 - u32 reg_size; 107 + struct mv64xxx_i2c_regs reg_offsets; 93 108 u32 addr1; 94 109 u32 addr2; 95 110 u32 bytes_left; ··· 119 112 struct i2c_adapter adapter; 120 113 }; 121 114 115 + static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_mv64xxx = { 116 + .addr = 0x00, 117 + .ext_addr = 0x10, 118 + .data = 0x04, 119 + .control = 0x08, 120 + .status = 0x0c, 121 + .clock = 0x0c, 122 + .soft_reset = 0x1c, 123 + }; 124 + 125 + static struct mv64xxx_i2c_regs mv64xxx_i2c_regs_sun4i = { 126 + .addr = 0x00, 127 + .ext_addr = 0x04, 128 + .data = 0x08, 129 + .control = 0x0c, 130 + .status = 0x10, 131 + .clock = 0x14, 132 + .soft_reset = 0x18, 133 + }; 134 + 135 + static void 136 + mv64xxx_i2c_prepare_for_io(struct mv64xxx_i2c_data *drv_data, 137 + struct i2c_msg *msg) 138 + { 139 + u32 dir = 0; 140 + 141 + drv_data->msg = msg; 142 + drv_data->byte_posn = 0; 143 + drv_data->bytes_left = msg->len; 144 + drv_data->aborting = 0; 145 + drv_data->rc = 0; 146 + drv_data->cntl_bits = MV64XXX_I2C_REG_CONTROL_ACK | 147 + MV64XXX_I2C_REG_CONTROL_INTEN | MV64XXX_I2C_REG_CONTROL_TWSIEN; 148 + 149 + if (msg->flags & I2C_M_RD) 150 + dir = 1; 151 + 152 + if (msg->flags & I2C_M_TEN) { 153 + drv_data->addr1 = 0xf0 | (((u32)msg->addr & 0x300) >> 7) | dir; 154 + drv_data->addr2 = (u32)msg->addr & 0xff; 155 + } else { 156 + drv_data->addr1 = MV64XXX_I2C_ADDR_ADDR((u32)msg->addr) | dir; 157 + drv_data->addr2 = 0; 158 + } 159 + } 160 + 122 161 /* 123 162 ***************************************************************************** 124 163 * ··· 177 124 static void 178 125 mv64xxx_i2c_hw_init(struct mv64xxx_i2c_data *drv_data) 179 126 { 180 - writel(0, drv_data->reg_base + MV64XXX_I2C_REG_SOFT_RESET); 181 - writel((((drv_data->freq_m & 0xf) << 3) | (drv_data->freq_n & 0x7)), 182 - drv_data->reg_base + MV64XXX_I2C_REG_BAUD); 183 - writel(0, drv_data->reg_base + MV64XXX_I2C_REG_SLAVE_ADDR); 184 - writel(0, drv_data->reg_base + MV64XXX_I2C_REG_EXT_SLAVE_ADDR); 127 + writel(0, drv_data->reg_base + drv_data->reg_offsets.soft_reset); 128 + writel(MV64XXX_I2C_BAUD_DIV_M(drv_data->freq_m) | MV64XXX_I2C_BAUD_DIV_N(drv_data->freq_n), 129 + drv_data->reg_base + drv_data->reg_offsets.clock); 130 + writel(0, drv_data->reg_base + drv_data->reg_offsets.addr); 131 + writel(0, drv_data->reg_base + drv_data->reg_offsets.ext_addr); 185 132 writel(MV64XXX_I2C_REG_CONTROL_TWSIEN | MV64XXX_I2C_REG_CONTROL_STOP, 186 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 133 + drv_data->reg_base + drv_data->reg_offsets.control); 187 134 drv_data->state = MV64XXX_I2C_STATE_IDLE; 188 135 } 189 136 ··· 223 170 if ((drv_data->bytes_left == 0) 224 171 || (drv_data->aborting 225 172 && (drv_data->byte_posn != 0))) { 226 - if (drv_data->send_stop) { 173 + if (drv_data->send_stop || drv_data->aborting) { 227 174 drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP; 228 175 drv_data->state = MV64XXX_I2C_STATE_IDLE; 229 176 } else { ··· 280 227 /* Doesn't seem to be a device at other end */ 281 228 drv_data->action = MV64XXX_I2C_ACTION_SEND_STOP; 282 229 drv_data->state = MV64XXX_I2C_STATE_IDLE; 283 - drv_data->rc = -ENODEV; 230 + drv_data->rc = -ENXIO; 284 231 break; 285 232 286 233 default: ··· 300 247 { 301 248 switch(drv_data->action) { 302 249 case MV64XXX_I2C_ACTION_SEND_RESTART: 250 + /* We should only get here if we have further messages */ 251 + BUG_ON(drv_data->num_msgs == 0); 252 + 303 253 drv_data->cntl_bits |= MV64XXX_I2C_REG_CONTROL_START; 304 - drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN; 305 254 writel(drv_data->cntl_bits, 306 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 307 - drv_data->block = 0; 308 - wake_up(&drv_data->waitq); 255 + drv_data->reg_base + drv_data->reg_offsets.control); 256 + 257 + drv_data->msgs++; 258 + drv_data->num_msgs--; 259 + 260 + /* Setup for the next message */ 261 + mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs); 262 + 263 + /* 264 + * We're never at the start of the message here, and by this 265 + * time it's already too late to do any protocol mangling. 266 + * Thankfully, do not advertise support for that feature. 267 + */ 268 + drv_data->send_stop = drv_data->num_msgs == 1; 309 269 break; 310 270 311 271 case MV64XXX_I2C_ACTION_CONTINUE: 312 272 writel(drv_data->cntl_bits, 313 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 273 + drv_data->reg_base + drv_data->reg_offsets.control); 314 274 break; 315 275 316 276 case MV64XXX_I2C_ACTION_SEND_START: 317 277 writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START, 318 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 278 + drv_data->reg_base + drv_data->reg_offsets.control); 319 279 break; 320 280 321 281 case MV64XXX_I2C_ACTION_SEND_ADDR_1: 322 282 writel(drv_data->addr1, 323 - drv_data->reg_base + MV64XXX_I2C_REG_DATA); 283 + drv_data->reg_base + drv_data->reg_offsets.data); 324 284 writel(drv_data->cntl_bits, 325 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 285 + drv_data->reg_base + drv_data->reg_offsets.control); 326 286 break; 327 287 328 288 case MV64XXX_I2C_ACTION_SEND_ADDR_2: 329 289 writel(drv_data->addr2, 330 - drv_data->reg_base + MV64XXX_I2C_REG_DATA); 290 + drv_data->reg_base + drv_data->reg_offsets.data); 331 291 writel(drv_data->cntl_bits, 332 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 292 + drv_data->reg_base + drv_data->reg_offsets.control); 333 293 break; 334 294 335 295 case MV64XXX_I2C_ACTION_SEND_DATA: 336 296 writel(drv_data->msg->buf[drv_data->byte_posn++], 337 - drv_data->reg_base + MV64XXX_I2C_REG_DATA); 297 + drv_data->reg_base + drv_data->reg_offsets.data); 338 298 writel(drv_data->cntl_bits, 339 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 299 + drv_data->reg_base + drv_data->reg_offsets.control); 340 300 break; 341 301 342 302 case MV64XXX_I2C_ACTION_RCV_DATA: 343 303 drv_data->msg->buf[drv_data->byte_posn++] = 344 - readl(drv_data->reg_base + MV64XXX_I2C_REG_DATA); 304 + readl(drv_data->reg_base + drv_data->reg_offsets.data); 345 305 writel(drv_data->cntl_bits, 346 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 306 + drv_data->reg_base + drv_data->reg_offsets.control); 347 307 break; 348 308 349 309 case MV64XXX_I2C_ACTION_RCV_DATA_STOP: 350 310 drv_data->msg->buf[drv_data->byte_posn++] = 351 - readl(drv_data->reg_base + MV64XXX_I2C_REG_DATA); 311 + readl(drv_data->reg_base + drv_data->reg_offsets.data); 352 312 drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN; 353 313 writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP, 354 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 314 + drv_data->reg_base + drv_data->reg_offsets.control); 355 315 drv_data->block = 0; 356 316 wake_up(&drv_data->waitq); 357 317 break; ··· 379 313 case MV64XXX_I2C_ACTION_SEND_STOP: 380 314 drv_data->cntl_bits &= ~MV64XXX_I2C_REG_CONTROL_INTEN; 381 315 writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_STOP, 382 - drv_data->reg_base + MV64XXX_I2C_REG_CONTROL); 316 + drv_data->reg_base + drv_data->reg_offsets.control); 383 317 drv_data->block = 0; 384 318 wake_up(&drv_data->waitq); 385 319 break; ··· 395 329 irqreturn_t rc = IRQ_NONE; 396 330 397 331 spin_lock_irqsave(&drv_data->lock, flags); 398 - while (readl(drv_data->reg_base + MV64XXX_I2C_REG_CONTROL) & 332 + while (readl(drv_data->reg_base + drv_data->reg_offsets.control) & 399 333 MV64XXX_I2C_REG_CONTROL_IFLG) { 400 - status = readl(drv_data->reg_base + MV64XXX_I2C_REG_STATUS); 334 + status = readl(drv_data->reg_base + drv_data->reg_offsets.status); 401 335 mv64xxx_i2c_fsm(drv_data, status); 402 336 mv64xxx_i2c_do_action(drv_data); 403 337 rc = IRQ_HANDLED; ··· 414 348 * 415 349 ***************************************************************************** 416 350 */ 417 - static void 418 - mv64xxx_i2c_prepare_for_io(struct mv64xxx_i2c_data *drv_data, 419 - struct i2c_msg *msg) 420 - { 421 - u32 dir = 0; 422 - 423 - drv_data->msg = msg; 424 - drv_data->byte_posn = 0; 425 - drv_data->bytes_left = msg->len; 426 - drv_data->aborting = 0; 427 - drv_data->rc = 0; 428 - drv_data->cntl_bits = MV64XXX_I2C_REG_CONTROL_ACK | 429 - MV64XXX_I2C_REG_CONTROL_INTEN | MV64XXX_I2C_REG_CONTROL_TWSIEN; 430 - 431 - if (msg->flags & I2C_M_RD) 432 - dir = 1; 433 - 434 - if (msg->flags & I2C_M_TEN) { 435 - drv_data->addr1 = 0xf0 | (((u32)msg->addr & 0x300) >> 7) | dir; 436 - drv_data->addr2 = (u32)msg->addr & 0xff; 437 - } else { 438 - drv_data->addr1 = ((u32)msg->addr & 0x7f) << 1 | dir; 439 - drv_data->addr2 = 0; 440 - } 441 - } 442 - 443 351 static void 444 352 mv64xxx_i2c_wait_for_completion(struct mv64xxx_i2c_data *drv_data) 445 353 { ··· 454 414 455 415 static int 456 416 mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg, 457 - int is_first, int is_last) 417 + int is_last) 458 418 { 459 419 unsigned long flags; 460 420 461 421 spin_lock_irqsave(&drv_data->lock, flags); 462 422 mv64xxx_i2c_prepare_for_io(drv_data, msg); 463 423 464 - if (unlikely(msg->flags & I2C_M_NOSTART)) { /* Skip start/addr phases */ 465 - if (drv_data->msg->flags & I2C_M_RD) { 466 - /* No action to do, wait for slave to send a byte */ 467 - drv_data->action = MV64XXX_I2C_ACTION_CONTINUE; 468 - drv_data->state = 469 - MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_DATA; 470 - } else { 471 - drv_data->action = MV64XXX_I2C_ACTION_SEND_DATA; 472 - drv_data->state = 473 - MV64XXX_I2C_STATE_WAITING_FOR_SLAVE_ACK; 474 - drv_data->bytes_left--; 475 - } 476 - } else { 477 - if (is_first) { 478 - drv_data->action = MV64XXX_I2C_ACTION_SEND_START; 479 - drv_data->state = 480 - MV64XXX_I2C_STATE_WAITING_FOR_START_COND; 481 - } else { 482 - drv_data->action = MV64XXX_I2C_ACTION_SEND_ADDR_1; 483 - drv_data->state = 484 - MV64XXX_I2C_STATE_WAITING_FOR_ADDR_1_ACK; 485 - } 486 - } 424 + drv_data->action = MV64XXX_I2C_ACTION_SEND_START; 425 + drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND; 487 426 488 427 drv_data->send_stop = is_last; 489 428 drv_data->block = 1; ··· 490 471 mv64xxx_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) 491 472 { 492 473 struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap); 493 - int i, rc; 474 + int rc, ret = num; 494 475 495 - for (i = 0; i < num; i++) { 496 - rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[i], 497 - i == 0, i + 1 == num); 498 - if (rc < 0) 499 - return rc; 500 - } 476 + BUG_ON(drv_data->msgs != NULL); 477 + drv_data->msgs = msgs; 478 + drv_data->num_msgs = num; 501 479 502 - return num; 480 + rc = mv64xxx_i2c_execute_msg(drv_data, &msgs[0], num == 1); 481 + if (rc < 0) 482 + ret = rc; 483 + 484 + drv_data->num_msgs = 0; 485 + drv_data->msgs = NULL; 486 + 487 + return ret; 503 488 } 504 489 505 490 static const struct i2c_algorithm mv64xxx_i2c_algo = { ··· 518 495 * 519 496 ***************************************************************************** 520 497 */ 521 - static int 522 - mv64xxx_i2c_map_regs(struct platform_device *pd, 523 - struct mv64xxx_i2c_data *drv_data) 524 - { 525 - int size; 526 - struct resource *r = platform_get_resource(pd, IORESOURCE_MEM, 0); 527 - 528 - if (!r) 529 - return -ENODEV; 530 - 531 - size = resource_size(r); 532 - 533 - if (!request_mem_region(r->start, size, drv_data->adapter.name)) 534 - return -EBUSY; 535 - 536 - drv_data->reg_base = ioremap(r->start, size); 537 - drv_data->reg_base_p = r->start; 538 - drv_data->reg_size = size; 539 - 540 - return 0; 541 - } 542 - 543 - static void 544 - mv64xxx_i2c_unmap_regs(struct mv64xxx_i2c_data *drv_data) 545 - { 546 - if (drv_data->reg_base) { 547 - iounmap(drv_data->reg_base); 548 - release_mem_region(drv_data->reg_base_p, drv_data->reg_size); 549 - } 550 - 551 - drv_data->reg_base = NULL; 552 - drv_data->reg_base_p = 0; 553 - } 498 + static const struct of_device_id mv64xxx_i2c_of_match_table[] = { 499 + { .compatible = "allwinner,sun4i-i2c", .data = &mv64xxx_i2c_regs_sun4i}, 500 + { .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx}, 501 + {} 502 + }; 503 + MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table); 554 504 555 505 #ifdef CONFIG_OF 556 506 static int ··· 558 562 559 563 static int 560 564 mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, 561 - struct device_node *np) 565 + struct device *dev) 562 566 { 567 + const struct of_device_id *device; 568 + struct device_node *np = dev->of_node; 563 569 u32 bus_freq, tclk; 564 570 int rc = 0; 565 571 ··· 578 580 goto out; 579 581 } 580 582 tclk = clk_get_rate(drv_data->clk); 581 - of_property_read_u32(np, "clock-frequency", &bus_freq); 583 + 584 + rc = of_property_read_u32(np, "clock-frequency", &bus_freq); 585 + if (rc) 586 + bus_freq = 100000; /* 100kHz by default */ 587 + 582 588 if (!mv64xxx_find_baud_factors(bus_freq, tclk, 583 589 &drv_data->freq_n, &drv_data->freq_m)) { 584 590 rc = -EINVAL; ··· 594 592 * So hard code the value to 1 second. 595 593 */ 596 594 drv_data->adapter.timeout = HZ; 595 + 596 + device = of_match_device(mv64xxx_i2c_of_match_table, dev); 597 + if (!device) 598 + return -ENODEV; 599 + 600 + memcpy(&drv_data->reg_offsets, device->data, sizeof(drv_data->reg_offsets)); 601 + 597 602 out: 598 603 return rc; 599 604 #endif ··· 608 599 #else /* CONFIG_OF */ 609 600 static int 610 601 mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, 611 - struct device_node *np) 602 + struct device *dev) 612 603 { 613 604 return -ENODEV; 614 605 } ··· 619 610 { 620 611 struct mv64xxx_i2c_data *drv_data; 621 612 struct mv64xxx_i2c_pdata *pdata = pd->dev.platform_data; 613 + struct resource *r; 622 614 int rc; 623 615 624 616 if ((!pdata && !pd->dev.of_node)) 625 617 return -ENODEV; 626 618 627 - drv_data = kzalloc(sizeof(struct mv64xxx_i2c_data), GFP_KERNEL); 619 + drv_data = devm_kzalloc(&pd->dev, sizeof(struct mv64xxx_i2c_data), 620 + GFP_KERNEL); 628 621 if (!drv_data) 629 622 return -ENOMEM; 630 623 631 - if (mv64xxx_i2c_map_regs(pd, drv_data)) { 632 - rc = -ENODEV; 633 - goto exit_kfree; 634 - } 624 + r = platform_get_resource(pd, IORESOURCE_MEM, 0); 625 + drv_data->reg_base = devm_ioremap_resource(&pd->dev, r); 626 + if (IS_ERR(drv_data->reg_base)) 627 + return PTR_ERR(drv_data->reg_base); 635 628 636 629 strlcpy(drv_data->adapter.name, MV64XXX_I2C_CTLR_NAME " adapter", 637 630 sizeof(drv_data->adapter.name)); ··· 643 632 644 633 #if defined(CONFIG_HAVE_CLK) 645 634 /* Not all platforms have a clk */ 646 - drv_data->clk = clk_get(&pd->dev, NULL); 635 + drv_data->clk = devm_clk_get(&pd->dev, NULL); 647 636 if (!IS_ERR(drv_data->clk)) { 648 637 clk_prepare(drv_data->clk); 649 638 clk_enable(drv_data->clk); ··· 654 643 drv_data->freq_n = pdata->freq_n; 655 644 drv_data->irq = platform_get_irq(pd, 0); 656 645 drv_data->adapter.timeout = msecs_to_jiffies(pdata->timeout); 646 + memcpy(&drv_data->reg_offsets, &mv64xxx_i2c_regs_mv64xxx, sizeof(drv_data->reg_offsets)); 657 647 } else if (pd->dev.of_node) { 658 - rc = mv64xxx_of_config(drv_data, pd->dev.of_node); 648 + rc = mv64xxx_of_config(drv_data, &pd->dev); 659 649 if (rc) 660 - goto exit_unmap_regs; 650 + goto exit_clk; 661 651 } 662 652 if (drv_data->irq < 0) { 663 653 rc = -ENXIO; 664 - goto exit_unmap_regs; 654 + goto exit_clk; 665 655 } 666 656 667 657 drv_data->adapter.dev.parent = &pd->dev; ··· 676 664 677 665 mv64xxx_i2c_hw_init(drv_data); 678 666 679 - if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0, 680 - MV64XXX_I2C_CTLR_NAME, drv_data)) { 667 + rc = request_irq(drv_data->irq, mv64xxx_i2c_intr, 0, 668 + MV64XXX_I2C_CTLR_NAME, drv_data); 669 + if (rc) { 681 670 dev_err(&drv_data->adapter.dev, 682 - "mv64xxx: Can't register intr handler irq: %d\n", 683 - drv_data->irq); 684 - rc = -EINVAL; 685 - goto exit_unmap_regs; 671 + "mv64xxx: Can't register intr handler irq%d: %d\n", 672 + drv_data->irq, rc); 673 + goto exit_clk; 686 674 } else if ((rc = i2c_add_numbered_adapter(&drv_data->adapter)) != 0) { 687 675 dev_err(&drv_data->adapter.dev, 688 676 "mv64xxx: Can't add i2c adapter, rc: %d\n", -rc); ··· 693 681 694 682 return 0; 695 683 696 - exit_free_irq: 697 - free_irq(drv_data->irq, drv_data); 698 - exit_unmap_regs: 684 + exit_free_irq: 685 + free_irq(drv_data->irq, drv_data); 686 + exit_clk: 699 687 #if defined(CONFIG_HAVE_CLK) 700 688 /* Not all platforms have a clk */ 701 689 if (!IS_ERR(drv_data->clk)) { ··· 703 691 clk_unprepare(drv_data->clk); 704 692 } 705 693 #endif 706 - mv64xxx_i2c_unmap_regs(drv_data); 707 - exit_kfree: 708 - kfree(drv_data); 709 694 return rc; 710 695 } 711 696 ··· 713 704 714 705 i2c_del_adapter(&drv_data->adapter); 715 706 free_irq(drv_data->irq, drv_data); 716 - mv64xxx_i2c_unmap_regs(drv_data); 717 707 #if defined(CONFIG_HAVE_CLK) 718 708 /* Not all platforms have a clk */ 719 709 if (!IS_ERR(drv_data->clk)) { ··· 720 712 clk_unprepare(drv_data->clk); 721 713 } 722 714 #endif 723 - kfree(drv_data); 724 715 725 716 return 0; 726 717 } 727 - 728 - static const struct of_device_id mv64xxx_i2c_of_match_table[] = { 729 - { .compatible = "marvell,mv64xxx-i2c", }, 730 - {} 731 - }; 732 - MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table); 733 718 734 719 static struct platform_driver mv64xxx_i2c_driver = { 735 720 .probe = mv64xxx_i2c_probe,
-6
drivers/i2c/busses/i2c-mxs.c
··· 24 24 #include <linux/platform_device.h> 25 25 #include <linux/jiffies.h> 26 26 #include <linux/io.h> 27 - #include <linux/pinctrl/consumer.h> 28 27 #include <linux/stmp_device.h> 29 28 #include <linux/of.h> 30 29 #include <linux/of_device.h> ··· 637 638 struct device *dev = &pdev->dev; 638 639 struct mxs_i2c_dev *i2c; 639 640 struct i2c_adapter *adap; 640 - struct pinctrl *pinctrl; 641 641 struct resource *res; 642 642 resource_size_t res_size; 643 643 int err, irq; 644 - 645 - pinctrl = devm_pinctrl_get_select_default(dev); 646 - if (IS_ERR(pinctrl)) 647 - return PTR_ERR(pinctrl); 648 644 649 645 i2c = devm_kzalloc(dev, sizeof(struct mxs_i2c_dev), GFP_KERNEL); 650 646 if (!i2c)
+43 -9
drivers/i2c/busses/i2c-nomadik.c
··· 15 15 #include <linux/init.h> 16 16 #include <linux/module.h> 17 17 #include <linux/amba/bus.h> 18 - #include <linux/atomic.h> 19 18 #include <linux/slab.h> 20 19 #include <linux/interrupt.h> 21 20 #include <linux/i2c.h> ··· 105 106 /* maximum threshold value */ 106 107 #define MAX_I2C_FIFO_THRESHOLD 15 107 108 109 + /** 110 + * struct i2c_vendor_data - per-vendor variations 111 + * @has_mtdws: variant has the MTDWS bit 112 + * @fifodepth: variant FIFO depth 113 + */ 114 + struct i2c_vendor_data { 115 + bool has_mtdws; 116 + u32 fifodepth; 117 + }; 118 + 108 119 enum i2c_status { 109 120 I2C_NOP, 110 121 I2C_ON_GOING, ··· 147 138 148 139 /** 149 140 * struct nmk_i2c_dev - private data structure of the controller. 141 + * @vendor: vendor data for this variant. 150 142 * @adev: parent amba device. 151 143 * @adap: corresponding I2C adapter. 152 144 * @irq: interrupt line for the controller. ··· 161 151 * @busy: Busy doing transfer. 162 152 */ 163 153 struct nmk_i2c_dev { 154 + struct i2c_vendor_data *vendor; 164 155 struct amba_device *adev; 165 156 struct i2c_adapter adap; 166 157 int irq; ··· 433 422 irq_mask = (I2C_IT_RXFNF | I2C_IT_RXFF | 434 423 I2C_IT_MAL | I2C_IT_BERR); 435 424 436 - if (dev->stop) 425 + if (dev->stop || !dev->vendor->has_mtdws) 437 426 irq_mask |= I2C_IT_MTD; 438 427 else 439 428 irq_mask |= I2C_IT_MTDWS; ··· 513 502 * set the MTDWS bit (Master Transaction Done Without Stop) 514 503 * to start repeated start operation 515 504 */ 516 - if (dev->stop) 505 + if (dev->stop || !dev->vendor->has_mtdws) 517 506 irq_mask |= I2C_IT_MTD; 518 507 else 519 508 irq_mask |= I2C_IT_MTDWS; ··· 940 929 pdata->sm = I2C_FREQ_MODE_FAST; 941 930 } 942 931 943 - static atomic_t adapter_id = ATOMIC_INIT(0); 944 - 945 932 static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) 946 933 { 947 934 int ret = 0; ··· 947 938 struct device_node *np = adev->dev.of_node; 948 939 struct nmk_i2c_dev *dev; 949 940 struct i2c_adapter *adap; 941 + struct i2c_vendor_data *vendor = id->data; 942 + u32 max_fifo_threshold = (vendor->fifodepth / 2) - 1; 950 943 951 944 if (!pdata) { 952 945 if (np) { ··· 965 954 pdata = &u8500_i2c; 966 955 } 967 956 957 + if (pdata->tft > max_fifo_threshold) { 958 + dev_warn(&adev->dev, "requested TX FIFO threshold %u, adjusted down to %u\n", 959 + pdata->tft, max_fifo_threshold); 960 + pdata->tft = max_fifo_threshold; 961 + } 962 + 963 + if (pdata->rft > max_fifo_threshold) { 964 + dev_warn(&adev->dev, "requested RX FIFO threshold %u, adjusted down to %u\n", 965 + pdata->rft, max_fifo_threshold); 966 + pdata->rft = max_fifo_threshold; 967 + } 968 + 968 969 dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL); 969 970 if (!dev) { 970 971 dev_err(&adev->dev, "cannot allocate memory\n"); 971 972 ret = -ENOMEM; 972 973 goto err_no_mem; 973 974 } 975 + dev->vendor = vendor; 974 976 dev->busy = false; 975 977 dev->adev = adev; 976 978 amba_set_drvdata(adev, dev); ··· 1023 999 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 1024 1000 adap->algo = &nmk_i2c_algo; 1025 1001 adap->timeout = msecs_to_jiffies(pdata->timeout); 1026 - adap->nr = atomic_read(&adapter_id); 1027 1002 snprintf(adap->name, sizeof(adap->name), 1028 - "Nomadik I2C%d at %pR", adap->nr, &adev->res); 1029 - atomic_inc(&adapter_id); 1003 + "Nomadik I2C at %pR", &adev->res); 1030 1004 1031 1005 /* fetch the controller configuration from machine */ 1032 1006 dev->cfg.clk_freq = pdata->clk_freq; ··· 1039 1017 "initialize %s on virtual base %p\n", 1040 1018 adap->name, dev->virtbase); 1041 1019 1042 - ret = i2c_add_numbered_adapter(adap); 1020 + ret = i2c_add_adapter(adap); 1043 1021 if (ret) { 1044 1022 dev_err(&adev->dev, "failed to add adapter\n"); 1045 1023 goto err_add_adap; ··· 1086 1064 return 0; 1087 1065 } 1088 1066 1067 + static struct i2c_vendor_data vendor_stn8815 = { 1068 + .has_mtdws = false, 1069 + .fifodepth = 16, /* Guessed from TFTR/RFTR = 7 */ 1070 + }; 1071 + 1072 + static struct i2c_vendor_data vendor_db8500 = { 1073 + .has_mtdws = true, 1074 + .fifodepth = 32, /* Guessed from TFTR/RFTR = 15 */ 1075 + }; 1076 + 1089 1077 static struct amba_id nmk_i2c_ids[] = { 1090 1078 { 1091 1079 .id = 0x00180024, 1092 1080 .mask = 0x00ffffff, 1081 + .data = &vendor_stn8815, 1093 1082 }, 1094 1083 { 1095 1084 .id = 0x00380024, 1096 1085 .mask = 0x00ffffff, 1086 + .data = &vendor_db8500, 1097 1087 }, 1098 1088 {}, 1099 1089 };
+12 -11
drivers/i2c/busses/i2c-omap.c
··· 180 180 #define I2C_OMAP_ERRATA_I207 (1 << 0) 181 181 #define I2C_OMAP_ERRATA_I462 (1 << 1) 182 182 183 + #define OMAP_I2C_IP_V2_INTERRUPTS_MASK 0x6FFF 184 + 183 185 struct omap_i2c_dev { 184 186 spinlock_t lock; /* IRQ synchronization */ 185 187 struct device *dev; ··· 195 193 long latency); 196 194 u32 speed; /* Speed of bus in kHz */ 197 195 u32 flags; 196 + u16 scheme; 198 197 u16 cmd_err; 199 198 u8 *buf; 200 199 u8 *regs; ··· 1085 1082 int irq; 1086 1083 int r; 1087 1084 u32 rev; 1088 - u16 minor, major, scheme; 1089 - 1090 - /* NOTE: driver uses the static register mapping */ 1091 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1092 - if (!mem) { 1093 - dev_err(&pdev->dev, "no mem resource?\n"); 1094 - return -ENODEV; 1095 - } 1085 + u16 minor, major; 1096 1086 1097 1087 irq = platform_get_irq(pdev, 0); 1098 1088 if (irq < 0) { ··· 1099 1103 return -ENOMEM; 1100 1104 } 1101 1105 1106 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1102 1107 dev->base = devm_ioremap_resource(&pdev->dev, mem); 1103 1108 if (IS_ERR(dev->base)) 1104 1109 return PTR_ERR(dev->base); ··· 1156 1159 */ 1157 1160 rev = __raw_readw(dev->base + 0x04); 1158 1161 1159 - scheme = OMAP_I2C_SCHEME(rev); 1160 - switch (scheme) { 1162 + dev->scheme = OMAP_I2C_SCHEME(rev); 1163 + switch (dev->scheme) { 1161 1164 case OMAP_I2C_SCHEME_0: 1162 1165 dev->regs = (u8 *)reg_map_ip_v1; 1163 1166 dev->rev = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG); ··· 1286 1289 1287 1290 _dev->iestate = omap_i2c_read_reg(_dev, OMAP_I2C_IE_REG); 1288 1291 1289 - omap_i2c_write_reg(_dev, OMAP_I2C_IE_REG, 0); 1292 + if (_dev->scheme == OMAP_I2C_SCHEME_0) 1293 + omap_i2c_write_reg(_dev, OMAP_I2C_IE_REG, 0); 1294 + else 1295 + omap_i2c_write_reg(_dev, OMAP_I2C_IP_V2_IRQENABLE_CLR, 1296 + OMAP_I2C_IP_V2_INTERRUPTS_MASK); 1290 1297 1291 1298 if (_dev->rev < OMAP_I2C_OMAP1_REV_2) { 1292 1299 omap_i2c_read_reg(_dev, OMAP_I2C_IV_REG); /* Read clears */
+3 -3
drivers/i2c/busses/i2c-pxa.c
··· 1160 1160 i2c->adap.class = plat->class; 1161 1161 } 1162 1162 1163 - clk_enable(i2c->clk); 1163 + clk_prepare_enable(i2c->clk); 1164 1164 1165 1165 if (i2c->use_pio) { 1166 1166 i2c->adap.algo = &i2c_pxa_pio_algorithm; ··· 1202 1202 if (!i2c->use_pio) 1203 1203 free_irq(irq, i2c); 1204 1204 ereqirq: 1205 - clk_disable(i2c->clk); 1205 + clk_disable_unprepare(i2c->clk); 1206 1206 iounmap(i2c->reg_base); 1207 1207 eremap: 1208 1208 clk_put(i2c->clk); ··· 1221 1221 if (!i2c->use_pio) 1222 1222 free_irq(i2c->irq, i2c); 1223 1223 1224 - clk_disable(i2c->clk); 1224 + clk_disable_unprepare(i2c->clk); 1225 1225 clk_put(i2c->clk); 1226 1226 1227 1227 iounmap(i2c->reg_base);
+1 -6
drivers/i2c/busses/i2c-rcar.c
··· 623 623 u32 bus_speed; 624 624 int ret; 625 625 626 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 627 - if (!res) { 628 - dev_err(dev, "no mmio resources\n"); 629 - return -ENODEV; 630 - } 631 - 632 626 priv = devm_kzalloc(dev, sizeof(struct rcar_i2c_priv), GFP_KERNEL); 633 627 if (!priv) { 634 628 dev_err(dev, "no mem for private data\n"); ··· 636 642 if (ret < 0) 637 643 return ret; 638 644 645 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 639 646 priv->io = devm_ioremap_resource(dev, res); 640 647 if (IS_ERR(priv->io)) 641 648 return PTR_ERR(priv->io);
+479
drivers/i2c/busses/i2c-wmt.c
··· 1 + /* 2 + * Wondermedia I2C Master Mode Driver 3 + * 4 + * Copyright (C) 2012 Tony Prisk <linux@prisktech.co.nz> 5 + * 6 + * Derived from GPLv2+ licensed source: 7 + * - Copyright (C) 2008 WonderMedia Technologies, Inc. 8 + * 9 + * This program is free software; you can redistribute it and/or modify 10 + * it under the terms of the GNU General Public License version 2, or 11 + * (at your option) any later version. as published by the Free Software 12 + * Foundation 13 + */ 14 + 15 + #include <linux/clk.h> 16 + #include <linux/delay.h> 17 + #include <linux/err.h> 18 + #include <linux/i2c.h> 19 + #include <linux/interrupt.h> 20 + #include <linux/io.h> 21 + #include <linux/module.h> 22 + #include <linux/of.h> 23 + #include <linux/of_address.h> 24 + #include <linux/of_i2c.h> 25 + #include <linux/of_irq.h> 26 + #include <linux/platform_device.h> 27 + 28 + #define REG_CR 0x00 29 + #define REG_TCR 0x02 30 + #define REG_CSR 0x04 31 + #define REG_ISR 0x06 32 + #define REG_IMR 0x08 33 + #define REG_CDR 0x0A 34 + #define REG_TR 0x0C 35 + #define REG_MCR 0x0E 36 + #define REG_SLAVE_CR 0x10 37 + #define REG_SLAVE_SR 0x12 38 + #define REG_SLAVE_ISR 0x14 39 + #define REG_SLAVE_IMR 0x16 40 + #define REG_SLAVE_DR 0x18 41 + #define REG_SLAVE_TR 0x1A 42 + 43 + /* REG_CR Bit fields */ 44 + #define CR_TX_NEXT_ACK 0x0000 45 + #define CR_ENABLE 0x0001 46 + #define CR_TX_NEXT_NO_ACK 0x0002 47 + #define CR_TX_END 0x0004 48 + #define CR_CPU_RDY 0x0008 49 + #define SLAV_MODE_SEL 0x8000 50 + 51 + /* REG_TCR Bit fields */ 52 + #define TCR_STANDARD_MODE 0x0000 53 + #define TCR_MASTER_WRITE 0x0000 54 + #define TCR_HS_MODE 0x2000 55 + #define TCR_MASTER_READ 0x4000 56 + #define TCR_FAST_MODE 0x8000 57 + #define TCR_SLAVE_ADDR_MASK 0x007F 58 + 59 + /* REG_ISR Bit fields */ 60 + #define ISR_NACK_ADDR 0x0001 61 + #define ISR_BYTE_END 0x0002 62 + #define ISR_SCL_TIMEOUT 0x0004 63 + #define ISR_WRITE_ALL 0x0007 64 + 65 + /* REG_IMR Bit fields */ 66 + #define IMR_ENABLE_ALL 0x0007 67 + 68 + /* REG_CSR Bit fields */ 69 + #define CSR_RCV_NOT_ACK 0x0001 70 + #define CSR_RCV_ACK_MASK 0x0001 71 + #define CSR_READY_MASK 0x0002 72 + 73 + /* REG_TR */ 74 + #define SCL_TIMEOUT(x) (((x) & 0xFF) << 8) 75 + #define TR_STD 0x0064 76 + #define TR_HS 0x0019 77 + 78 + /* REG_MCR */ 79 + #define MCR_APB_96M 7 80 + #define MCR_APB_166M 12 81 + 82 + #define I2C_MODE_STANDARD 0 83 + #define I2C_MODE_FAST 1 84 + 85 + #define WMT_I2C_TIMEOUT (msecs_to_jiffies(1000)) 86 + 87 + struct wmt_i2c_dev { 88 + struct i2c_adapter adapter; 89 + struct completion complete; 90 + struct device *dev; 91 + void __iomem *base; 92 + struct clk *clk; 93 + int mode; 94 + int irq; 95 + u16 cmd_status; 96 + }; 97 + 98 + static int wmt_i2c_wait_bus_not_busy(struct wmt_i2c_dev *i2c_dev) 99 + { 100 + unsigned long timeout; 101 + 102 + timeout = jiffies + WMT_I2C_TIMEOUT; 103 + while (!(readw(i2c_dev->base + REG_CSR) & CSR_READY_MASK)) { 104 + if (time_after(jiffies, timeout)) { 105 + dev_warn(i2c_dev->dev, "timeout waiting for bus ready\n"); 106 + return -EBUSY; 107 + } 108 + msleep(20); 109 + } 110 + 111 + return 0; 112 + } 113 + 114 + static int wmt_check_status(struct wmt_i2c_dev *i2c_dev) 115 + { 116 + int ret = 0; 117 + 118 + if (i2c_dev->cmd_status & ISR_NACK_ADDR) 119 + ret = -EIO; 120 + 121 + if (i2c_dev->cmd_status & ISR_SCL_TIMEOUT) 122 + ret = -ETIMEDOUT; 123 + 124 + return ret; 125 + } 126 + 127 + static int wmt_i2c_write(struct i2c_adapter *adap, struct i2c_msg *pmsg, 128 + int last) 129 + { 130 + struct wmt_i2c_dev *i2c_dev = i2c_get_adapdata(adap); 131 + u16 val, tcr_val; 132 + int ret, wait_result; 133 + int xfer_len = 0; 134 + 135 + if (!(pmsg->flags & I2C_M_NOSTART)) { 136 + ret = wmt_i2c_wait_bus_not_busy(i2c_dev); 137 + if (ret < 0) 138 + return ret; 139 + } 140 + 141 + if (pmsg->len == 0) { 142 + /* 143 + * We still need to run through the while (..) once, so 144 + * start at -1 and break out early from the loop 145 + */ 146 + xfer_len = -1; 147 + writew(0, i2c_dev->base + REG_CDR); 148 + } else { 149 + writew(pmsg->buf[0] & 0xFF, i2c_dev->base + REG_CDR); 150 + } 151 + 152 + if (!(pmsg->flags & I2C_M_NOSTART)) { 153 + val = readw(i2c_dev->base + REG_CR); 154 + val &= ~CR_TX_END; 155 + writew(val, i2c_dev->base + REG_CR); 156 + 157 + val = readw(i2c_dev->base + REG_CR); 158 + val |= CR_CPU_RDY; 159 + writew(val, i2c_dev->base + REG_CR); 160 + } 161 + 162 + INIT_COMPLETION(i2c_dev->complete); 163 + 164 + if (i2c_dev->mode == I2C_MODE_STANDARD) 165 + tcr_val = TCR_STANDARD_MODE; 166 + else 167 + tcr_val = TCR_FAST_MODE; 168 + 169 + tcr_val |= (TCR_MASTER_WRITE | (pmsg->addr & TCR_SLAVE_ADDR_MASK)); 170 + 171 + writew(tcr_val, i2c_dev->base + REG_TCR); 172 + 173 + if (pmsg->flags & I2C_M_NOSTART) { 174 + val = readw(i2c_dev->base + REG_CR); 175 + val |= CR_CPU_RDY; 176 + writew(val, i2c_dev->base + REG_CR); 177 + } 178 + 179 + while (xfer_len < pmsg->len) { 180 + wait_result = wait_for_completion_timeout(&i2c_dev->complete, 181 + 500 * HZ / 1000); 182 + 183 + if (wait_result == 0) 184 + return -ETIMEDOUT; 185 + 186 + ret = wmt_check_status(i2c_dev); 187 + if (ret) 188 + return ret; 189 + 190 + xfer_len++; 191 + 192 + val = readw(i2c_dev->base + REG_CSR); 193 + if ((val & CSR_RCV_ACK_MASK) == CSR_RCV_NOT_ACK) { 194 + dev_dbg(i2c_dev->dev, "write RCV NACK error\n"); 195 + return -EIO; 196 + } 197 + 198 + if (pmsg->len == 0) { 199 + val = CR_TX_END | CR_CPU_RDY | CR_ENABLE; 200 + writew(val, i2c_dev->base + REG_CR); 201 + break; 202 + } 203 + 204 + if (xfer_len == pmsg->len) { 205 + if (last != 1) 206 + writew(CR_ENABLE, i2c_dev->base + REG_CR); 207 + } else { 208 + writew(pmsg->buf[xfer_len] & 0xFF, i2c_dev->base + 209 + REG_CDR); 210 + writew(CR_CPU_RDY | CR_ENABLE, i2c_dev->base + REG_CR); 211 + } 212 + } 213 + 214 + return 0; 215 + } 216 + 217 + static int wmt_i2c_read(struct i2c_adapter *adap, struct i2c_msg *pmsg, 218 + int last) 219 + { 220 + struct wmt_i2c_dev *i2c_dev = i2c_get_adapdata(adap); 221 + u16 val, tcr_val; 222 + int ret, wait_result; 223 + u32 xfer_len = 0; 224 + 225 + if (!(pmsg->flags & I2C_M_NOSTART)) { 226 + ret = wmt_i2c_wait_bus_not_busy(i2c_dev); 227 + if (ret < 0) 228 + return ret; 229 + } 230 + 231 + val = readw(i2c_dev->base + REG_CR); 232 + val &= ~CR_TX_END; 233 + writew(val, i2c_dev->base + REG_CR); 234 + 235 + val = readw(i2c_dev->base + REG_CR); 236 + val &= ~CR_TX_NEXT_NO_ACK; 237 + writew(val, i2c_dev->base + REG_CR); 238 + 239 + if (!(pmsg->flags & I2C_M_NOSTART)) { 240 + val = readw(i2c_dev->base + REG_CR); 241 + val |= CR_CPU_RDY; 242 + writew(val, i2c_dev->base + REG_CR); 243 + } 244 + 245 + if (pmsg->len == 1) { 246 + val = readw(i2c_dev->base + REG_CR); 247 + val |= CR_TX_NEXT_NO_ACK; 248 + writew(val, i2c_dev->base + REG_CR); 249 + } 250 + 251 + INIT_COMPLETION(i2c_dev->complete); 252 + 253 + if (i2c_dev->mode == I2C_MODE_STANDARD) 254 + tcr_val = TCR_STANDARD_MODE; 255 + else 256 + tcr_val = TCR_FAST_MODE; 257 + 258 + tcr_val |= TCR_MASTER_READ | (pmsg->addr & TCR_SLAVE_ADDR_MASK); 259 + 260 + writew(tcr_val, i2c_dev->base + REG_TCR); 261 + 262 + if (pmsg->flags & I2C_M_NOSTART) { 263 + val = readw(i2c_dev->base + REG_CR); 264 + val |= CR_CPU_RDY; 265 + writew(val, i2c_dev->base + REG_CR); 266 + } 267 + 268 + while (xfer_len < pmsg->len) { 269 + wait_result = wait_for_completion_timeout(&i2c_dev->complete, 270 + 500 * HZ / 1000); 271 + 272 + if (!wait_result) 273 + return -ETIMEDOUT; 274 + 275 + ret = wmt_check_status(i2c_dev); 276 + if (ret) 277 + return ret; 278 + 279 + pmsg->buf[xfer_len] = readw(i2c_dev->base + REG_CDR) >> 8; 280 + xfer_len++; 281 + 282 + if (xfer_len == pmsg->len - 1) { 283 + val = readw(i2c_dev->base + REG_CR); 284 + val |= (CR_TX_NEXT_NO_ACK | CR_CPU_RDY); 285 + writew(val, i2c_dev->base + REG_CR); 286 + } else { 287 + val = readw(i2c_dev->base + REG_CR); 288 + val |= CR_CPU_RDY; 289 + writew(val, i2c_dev->base + REG_CR); 290 + } 291 + } 292 + 293 + return 0; 294 + } 295 + 296 + static int wmt_i2c_xfer(struct i2c_adapter *adap, 297 + struct i2c_msg msgs[], 298 + int num) 299 + { 300 + struct i2c_msg *pmsg; 301 + int i, is_last; 302 + int ret = 0; 303 + 304 + for (i = 0; ret >= 0 && i < num; i++) { 305 + is_last = ((i + 1) == num); 306 + 307 + pmsg = &msgs[i]; 308 + if (pmsg->flags & I2C_M_RD) 309 + ret = wmt_i2c_read(adap, pmsg, is_last); 310 + else 311 + ret = wmt_i2c_write(adap, pmsg, is_last); 312 + } 313 + 314 + return (ret < 0) ? ret : i; 315 + } 316 + 317 + static u32 wmt_i2c_func(struct i2c_adapter *adap) 318 + { 319 + return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_NOSTART; 320 + } 321 + 322 + static const struct i2c_algorithm wmt_i2c_algo = { 323 + .master_xfer = wmt_i2c_xfer, 324 + .functionality = wmt_i2c_func, 325 + }; 326 + 327 + static irqreturn_t wmt_i2c_isr(int irq, void *data) 328 + { 329 + struct wmt_i2c_dev *i2c_dev = data; 330 + 331 + /* save the status and write-clear it */ 332 + i2c_dev->cmd_status = readw(i2c_dev->base + REG_ISR); 333 + writew(i2c_dev->cmd_status, i2c_dev->base + REG_ISR); 334 + 335 + complete(&i2c_dev->complete); 336 + 337 + return IRQ_HANDLED; 338 + } 339 + 340 + static int wmt_i2c_reset_hardware(struct wmt_i2c_dev *i2c_dev) 341 + { 342 + int err; 343 + 344 + err = clk_prepare_enable(i2c_dev->clk); 345 + if (err) { 346 + dev_err(i2c_dev->dev, "failed to enable clock\n"); 347 + return err; 348 + } 349 + 350 + err = clk_set_rate(i2c_dev->clk, 20000000); 351 + if (err) { 352 + dev_err(i2c_dev->dev, "failed to set clock = 20Mhz\n"); 353 + return err; 354 + } 355 + 356 + writew(0, i2c_dev->base + REG_CR); 357 + writew(MCR_APB_166M, i2c_dev->base + REG_MCR); 358 + writew(ISR_WRITE_ALL, i2c_dev->base + REG_ISR); 359 + writew(IMR_ENABLE_ALL, i2c_dev->base + REG_IMR); 360 + writew(CR_ENABLE, i2c_dev->base + REG_CR); 361 + readw(i2c_dev->base + REG_CSR); /* read clear */ 362 + writew(ISR_WRITE_ALL, i2c_dev->base + REG_ISR); 363 + 364 + if (i2c_dev->mode == I2C_MODE_STANDARD) 365 + writew(SCL_TIMEOUT(128) | TR_STD, i2c_dev->base + REG_TR); 366 + else 367 + writew(SCL_TIMEOUT(128) | TR_HS, i2c_dev->base + REG_TR); 368 + 369 + return 0; 370 + } 371 + 372 + static int wmt_i2c_probe(struct platform_device *pdev) 373 + { 374 + struct device_node *np = pdev->dev.of_node; 375 + struct wmt_i2c_dev *i2c_dev; 376 + struct i2c_adapter *adap; 377 + struct resource *res; 378 + int err; 379 + u32 clk_rate; 380 + 381 + i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL); 382 + if (!i2c_dev) { 383 + dev_err(&pdev->dev, "device memory allocation failed\n"); 384 + return -ENOMEM; 385 + } 386 + 387 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 388 + i2c_dev->base = devm_ioremap_resource(&pdev->dev, res); 389 + if (IS_ERR(i2c_dev->base)) 390 + return PTR_ERR(i2c_dev->base); 391 + 392 + i2c_dev->irq = irq_of_parse_and_map(np, 0); 393 + if (!i2c_dev->irq) { 394 + dev_err(&pdev->dev, "irq missing or invalid\n"); 395 + return -EINVAL; 396 + } 397 + 398 + i2c_dev->clk = of_clk_get(np, 0); 399 + if (IS_ERR(i2c_dev->clk)) { 400 + dev_err(&pdev->dev, "unable to request clock\n"); 401 + return PTR_ERR(i2c_dev->clk); 402 + } 403 + 404 + i2c_dev->mode = I2C_MODE_STANDARD; 405 + err = of_property_read_u32(np, "clock-frequency", &clk_rate); 406 + if ((!err) && (clk_rate == 400000)) 407 + i2c_dev->mode = I2C_MODE_FAST; 408 + 409 + i2c_dev->dev = &pdev->dev; 410 + 411 + err = devm_request_irq(&pdev->dev, i2c_dev->irq, wmt_i2c_isr, 0, 412 + "i2c", i2c_dev); 413 + if (err) { 414 + dev_err(&pdev->dev, "failed to request irq %i\n", i2c_dev->irq); 415 + return err; 416 + } 417 + 418 + adap = &i2c_dev->adapter; 419 + i2c_set_adapdata(adap, i2c_dev); 420 + strlcpy(adap->name, "WMT I2C adapter", sizeof(adap->name)); 421 + adap->owner = THIS_MODULE; 422 + adap->algo = &wmt_i2c_algo; 423 + adap->dev.parent = &pdev->dev; 424 + adap->dev.of_node = pdev->dev.of_node; 425 + 426 + init_completion(&i2c_dev->complete); 427 + 428 + err = wmt_i2c_reset_hardware(i2c_dev); 429 + if (err) { 430 + dev_err(&pdev->dev, "error initializing hardware\n"); 431 + return err; 432 + } 433 + 434 + err = i2c_add_adapter(adap); 435 + if (err) { 436 + dev_err(&pdev->dev, "failed to add adapter\n"); 437 + return err; 438 + } 439 + 440 + platform_set_drvdata(pdev, i2c_dev); 441 + 442 + of_i2c_register_devices(adap); 443 + 444 + return 0; 445 + } 446 + 447 + static int wmt_i2c_remove(struct platform_device *pdev) 448 + { 449 + struct wmt_i2c_dev *i2c_dev = platform_get_drvdata(pdev); 450 + 451 + /* Disable interrupts, clock and delete adapter */ 452 + writew(0, i2c_dev->base + REG_IMR); 453 + clk_disable_unprepare(i2c_dev->clk); 454 + i2c_del_adapter(&i2c_dev->adapter); 455 + 456 + return 0; 457 + } 458 + 459 + static struct of_device_id wmt_i2c_dt_ids[] = { 460 + { .compatible = "wm,wm8505-i2c" }, 461 + { /* Sentinel */ }, 462 + }; 463 + 464 + static struct platform_driver wmt_i2c_driver = { 465 + .probe = wmt_i2c_probe, 466 + .remove = wmt_i2c_remove, 467 + .driver = { 468 + .name = "wmt-i2c", 469 + .owner = THIS_MODULE, 470 + .of_match_table = wmt_i2c_dt_ids, 471 + }, 472 + }; 473 + 474 + module_platform_driver(wmt_i2c_driver); 475 + 476 + MODULE_DESCRIPTION("Wondermedia I2C master-mode bus adapter"); 477 + MODULE_AUTHOR("Tony Prisk <linux@prisktech.co.nz>"); 478 + MODULE_LICENSE("GPL"); 479 + MODULE_DEVICE_TABLE(of, wmt_i2c_dt_ids);