]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 30 Jan 2014 03:56:20 +0000 (19:56 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 30 Jan 2014 03:56:20 +0000 (19:56 -0800)
Pull more i2c updates from Wolfram Sang:
 "Mostly bugfixes, small but wanted cleanups, and Paul's init.h removal
  applied"

* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: rcar: fix NACK error code
  i2c: update i2c_algorithm documentation
  i2c: rcar: use devm_clk_get to ensure clock is properly ref-counted
  i2c: rcar: do not print error if device nacks transfer
  i2c: rely on driver core when sanitizing devices
  i2c: delete non-required instances of include <linux/init.h>
  i2c: acorn: is tristate and should use module.h
  i2c: piix4: Standardize log messages
  i2c: piix4: Use different message for AMD Auxiliary SMBus Controller
  i2c: piix4: Add support for AMD ML and CZ SMBus changes

48 files changed:
Documentation/i2c/busses/i2c-piix4
drivers/i2c/algos/i2c-algo-bit.c
drivers/i2c/algos/i2c-algo-pca.c
drivers/i2c/algos/i2c-algo-pcf.c
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-acorn.c
drivers/i2c/busses/i2c-ali1535.c
drivers/i2c/busses/i2c-ali1563.c
drivers/i2c/busses/i2c-ali15x3.c
drivers/i2c/busses/i2c-amd756.c
drivers/i2c/busses/i2c-amd8111.c
drivers/i2c/busses/i2c-au1550.c
drivers/i2c/busses/i2c-cbus-gpio.c
drivers/i2c/busses/i2c-cpm.c
drivers/i2c/busses/i2c-eg20t.c
drivers/i2c/busses/i2c-exynos5.c
drivers/i2c/busses/i2c-highlander.c
drivers/i2c/busses/i2c-hydra.c
drivers/i2c/busses/i2c-ibm_iic.c
drivers/i2c/busses/i2c-iop3xx.c
drivers/i2c/busses/i2c-isch.c
drivers/i2c/busses/i2c-ismt.c
drivers/i2c/busses/i2c-mpc.c
drivers/i2c/busses/i2c-nforce2.c
drivers/i2c/busses/i2c-ocores.c
drivers/i2c/busses/i2c-octeon.c
drivers/i2c/busses/i2c-pca-platform.c
drivers/i2c/busses/i2c-piix4.c
drivers/i2c/busses/i2c-pmcmsp.c
drivers/i2c/busses/i2c-powermac.c
drivers/i2c/busses/i2c-puv3.c
drivers/i2c/busses/i2c-rcar.c
drivers/i2c/busses/i2c-scmi.c
drivers/i2c/busses/i2c-sh7760.c
drivers/i2c/busses/i2c-simtec.c
drivers/i2c/busses/i2c-sis630.c
drivers/i2c/busses/i2c-sis96x.c
drivers/i2c/busses/i2c-via.c
drivers/i2c/busses/i2c-xiic.c
drivers/i2c/busses/i2c-xlr.c
drivers/i2c/busses/scx200_i2c.c
drivers/i2c/i2c-core.c
drivers/i2c/muxes/i2c-arb-gpio-challenge.c
drivers/i2c/muxes/i2c-mux-gpio.c
drivers/i2c/muxes/i2c-mux-pca9541.c
drivers/i2c/muxes/i2c-mux-pca954x.c
drivers/i2c/muxes/i2c-mux-pinctrl.c
include/linux/i2c.h

index c097e0f020fe1d786bed67fd3ed9e06fd99f7b63..aa959fd22450de6793e02d73f2fa657ac31c4bce 100644 (file)
@@ -13,7 +13,7 @@ Supported adapters:
   * AMD SP5100 (SB700 derivative found on some server mainboards)
     Datasheet: Publicly available at the AMD website
     http://support.amd.com/us/Embedded_TechDocs/44413.pdf
-  * AMD Hudson-2, CZ
+  * AMD Hudson-2, ML, CZ
     Datasheet: Not publicly available
   * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge
     Datasheet: Publicly available at the SMSC website http://www.smsc.com
index b7a6acfcb3000f3fba99b62da00c47705d9e3bbc..65ef9664d5da884cdec666a81228408e5240b381 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/delay.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/sched.h>
 #include <linux/i2c.h>
index f892a424009b8123c3cb0ceb3dae75359cceaef9..8b10f88b13d9bd8c908997d3ebdde7de84718732 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/moduleparam.h>
 #include <linux/delay.h>
 #include <linux/jiffies.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-pca.h>
index 5c2379522aa9fb8d9e8c0e1a6635e4429443289f..34370090b753f616ff56e8a67e8172210b05c2cd 100644 (file)
@@ -30,7 +30,6 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/delay.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-pcf.h>
index 6bcdea5856afa7f84e9d2c0534bcdbfa7a696dd1..f5ed03164d86c314942453d244f103d6e9276070 100644 (file)
@@ -152,6 +152,7 @@ config I2C_PIIX4
            ATI SB700/SP5100
            ATI SB800
            AMD Hudson-2
+           AMD ML
            AMD CZ
            Serverworks OSB4
            Serverworks CSB5
index ed9f48d566dba7d4dab71d1217ce792c7dc3005a..9d7be5af2bf2a037ffb93a1e2ca60bc8f0299583 100644 (file)
@@ -12,7 +12,7 @@
  *  On Acorn machines, the following i2c devices are on the bus:
  *     - PCF8583 real time clock & static RAM
  */
-#include <linux/init.h>
+#include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
 #include <linux/io.h>
index 3f491815e2c4759a5d0b7d850de20abeafe42381..7d60d3a1f621cf9fa44d66daedd4af0c7c1e0c30 100644 (file)
@@ -58,7 +58,6 @@
 #include <linux/delay.h>
 #include <linux/ioport.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
 
index 84ccd9496a5e91934e197f49192cf5a54fc492ef..4611e4754a67071e35275a4411c327cbe59af0ce 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/delay.h>
 #include <linux/i2c.h>
 #include <linux/pci.h>
-#include <linux/init.h>
 #include <linux/acpi.h>
 
 #define ALI1563_MAX_TIMEOUT    500
index 26bcc6127cee62c1b12749944af43af76ae3b908..4823206a4870d51331ed74ab4b61b3630e12c9f7 100644 (file)
@@ -65,7 +65,6 @@
 #include <linux/ioport.h>
 #include <linux/delay.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
 
index e13e2aa2d05d9fb379299fdd84635742cf37efba..819d3c1062a75878a4bd56c8762190e7a662e131 100644 (file)
@@ -41,7 +41,6 @@
 #include <linux/stddef.h>
 #include <linux/ioport.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
 
index a44e6e77c5a1d1e55dde1a326c67c6ad1cf39dd2..f3d4d79855b5fdc8fb29dc4524422cb1056c96cb 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/kernel.h>
 #include <linux/stddef.h>
 #include <linux/ioport.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/delay.h>
 #include <linux/acpi.h>
index b5b89239d622d015698d638239fe50bd9562f6f9..8762458ca7da1f09d5094f5f0490bd2bb22c3c2b 100644 (file)
@@ -31,7 +31,6 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
 #include <linux/slab.h>
index ce7ffba2b0208f24fa7324c5c7ad283346e2c693..bdf040fd8675c268510d496cc7d89bbbe1a0d8ae 100644 (file)
@@ -19,7 +19,6 @@
 #include <linux/io.h>
 #include <linux/i2c.h>
 #include <linux/gpio.h>
-#include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
index 3e5ea2c87a6e19b747f34a80613d892866fba77d..be7f0a20d634d1107a7bb3147b32edf0256546ed 100644 (file)
@@ -33,7 +33,6 @@
 #include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/errno.h>
 #include <linux/stddef.h>
index ff15ae90aaf54bb5c52585e087954338c0e40a31..e08e458bab0247161e89c9b68c10b8efd3fe255f 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
 #include <linux/fs.h>
index 044f85b01d062f4485cba00a76f0fe4d8540230c..9fd711c03dd2bd2ff2de7fef34db4da569a1fbdd 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/module.h>
 
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/time.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
index 436b0f254916dbe8d1a8c4e3c32e0c13e1362536..512fcfabc18e34470e81735d83dc91c2145629e4 100644 (file)
@@ -12,7 +12,6 @@
  * of this archive for more details.
  */
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/i2c.h>
 #include <linux/platform_device.h>
index 79c3d9069a487328edc82c33228c84908b401222..e248257fe517a5f62fc909826640d82d4e15a66f 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/types.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
-#include <linux/init.h>
 #include <linux/io.h>
 #include <asm/hydra.h>
 
index f7444100f397cc41baeeb117d790e449e567ed6f..274312c96b12e0eecc46b6fb13e484316e5e3c87 100644 (file)
@@ -36,7 +36,6 @@
 #include <linux/ioport.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <asm/irq.h>
 #include <linux/io.h>
index dd24aa0424a9c0cc3df4588a32743171146ac812..3d16c2f60a5e17d6681dc5d3fd3a46bd0543269e 100644 (file)
@@ -34,7 +34,6 @@
 #include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
index af213045ab7e21d52570c93fd91060d4d330d847..cf99dbf21fd100a5002aac1a6d98ddb20ab847c9 100644 (file)
@@ -33,7 +33,6 @@
 #include <linux/stddef.h>
 #include <linux/ioport.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/io.h>
 #include <linux/acpi.h>
 
index bb132ea7d2b49e1b0050ff998d0f893b6cdb80af..8ce4f517fc56eedcb01072c01adba455e8dd0a4a 100644 (file)
@@ -62,7 +62,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/kernel.h>
 #include <linux/stddef.h>
index b6a741caf4f6566fcfe0c36be0189bbe185272aa..f5391633b53ac69647f4db90cb1379a19a78a01d 100644 (file)
@@ -16,7 +16,6 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/sched.h>
-#include <linux/init.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
index ac88f4000cc23acfb8fbcdc8bbb63290aa85bb79..0038c451095c6e86d614c13fea0bca8ee298a3fb 100644 (file)
@@ -51,7 +51,6 @@
 #include <linux/kernel.h>
 #include <linux/stddef.h>
 #include <linux/ioport.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/delay.h>
 #include <linux/dmi.h>
index c61f37a10a074e30f2c3c1e368a602a85e7301b9..80e06fa45720e59235ece70499637eceed2a530f 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/err.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
index b929ba271b4705714f846fa07aae3d9116fcada3..81042b08a947669390d61715f285f8702c888f25 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/delay.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/io.h>
 #include <linux/of.h>
index 39e2755e3f257c09bd1edd76371130fd8df0ceda..845f12598e7914bf5bf5c8f49036f6acacb017bb 100644 (file)
@@ -12,7 +12,6 @@
  */
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/jiffies.h>
index a028617b8f13c37a4a8371264a149ba7f6d44540..39dd8ec60dfda4170664c009726aa46d8c5eae42 100644 (file)
@@ -22,7 +22,7 @@
        Intel PIIX4, 440MX
        Serverworks OSB4, CSB5, CSB6, HT-1000, HT-1100
        ATI IXP200, IXP300, IXP400, SB600, SB700/SP5100, SB800
-       AMD Hudson-2, CZ
+       AMD Hudson-2, ML, CZ
        SMSC Victory66
 
    Note: we assume there can only be one device, with one or more
@@ -38,7 +38,6 @@
 #include <linux/ioport.h>
 #include <linux/i2c.h>
 #include <linux/slab.h>
-#include <linux/init.h>
 #include <linux/dmi.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
@@ -208,16 +207,16 @@ static int piix4_setup(struct pci_dev *PIIX4_dev,
                                   "WARNING: SMBus interface has been FORCEFULLY ENABLED!\n");
                } else {
                        dev_err(&PIIX4_dev->dev,
-                               "Host SMBus controller not enabled!\n");
+                               "SMBus Host Controller not enabled!\n");
                        release_region(piix4_smba, SMBIOSIZE);
                        return -ENODEV;
                }
        }
 
        if (((temp & 0x0E) == 8) || ((temp & 0x0E) == 2))
-               dev_dbg(&PIIX4_dev->dev, "Using Interrupt 9 for SMBus.\n");
+               dev_dbg(&PIIX4_dev->dev, "Using IRQ for SMBus\n");
        else if ((temp & 0x0E) == 0)
-               dev_dbg(&PIIX4_dev->dev, "Using Interrupt SMI# for SMBus.\n");
+               dev_dbg(&PIIX4_dev->dev, "Using SMI# for SMBus\n");
        else
                dev_err(&PIIX4_dev->dev, "Illegal Interrupt configuration "
                        "(or code out of date)!\n");
@@ -235,7 +234,8 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
 {
        unsigned short piix4_smba;
        unsigned short smba_idx = 0xcd6;
-       u8 smba_en_lo, smba_en_hi, i2ccfg, i2ccfg_offset = 0x10, smb_en;
+       u8 smba_en_lo, smba_en_hi, smb_en, smb_en_status;
+       u8 i2ccfg, i2ccfg_offset = 0x10;
 
        /* SB800 and later SMBus does not support forcing address */
        if (force || force_addr) {
@@ -245,7 +245,15 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
        }
 
        /* Determine the address of the SMBus areas */
-       smb_en = (aux) ? 0x28 : 0x2c;
+       if ((PIIX4_dev->vendor == PCI_VENDOR_ID_AMD &&
+            PIIX4_dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS &&
+            PIIX4_dev->revision >= 0x41) ||
+           (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD &&
+            PIIX4_dev->device == 0x790b &&
+            PIIX4_dev->revision >= 0x49))
+               smb_en = 0x00;
+       else
+               smb_en = (aux) ? 0x28 : 0x2c;
 
        if (!request_region(smba_idx, 2, "smba_idx")) {
                dev_err(&PIIX4_dev->dev, "SMBus base address index region "
@@ -258,13 +266,22 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
        smba_en_hi = inb_p(smba_idx + 1);
        release_region(smba_idx, 2);
 
-       if ((smba_en_lo & 1) == 0) {
+       if (!smb_en) {
+               smb_en_status = smba_en_lo & 0x10;
+               piix4_smba = smba_en_hi << 8;
+               if (aux)
+                       piix4_smba |= 0x20;
+       } else {
+               smb_en_status = smba_en_lo & 0x01;
+               piix4_smba = ((smba_en_hi << 8) | smba_en_lo) & 0xffe0;
+       }
+
+       if (!smb_en_status) {
                dev_err(&PIIX4_dev->dev,
-                       "Host SMBus controller not enabled!\n");
+                       "SMBus Host Controller not enabled!\n");
                return -ENODEV;
        }
 
-       piix4_smba = ((smba_en_hi << 8) | smba_en_lo) & 0xffe0;
        if (acpi_check_region(piix4_smba, SMBIOSIZE, piix4_driver.name))
                return -ENODEV;
 
@@ -277,7 +294,8 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
        /* Aux SMBus does not support IRQ information */
        if (aux) {
                dev_info(&PIIX4_dev->dev,
-                        "SMBus Host Controller at 0x%x\n", piix4_smba);
+                        "Auxiliary SMBus Host Controller at 0x%x\n",
+                        piix4_smba);
                return piix4_smba;
        }
 
@@ -292,9 +310,9 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
        release_region(piix4_smba + i2ccfg_offset, 1);
 
        if (i2ccfg & 1)
-               dev_dbg(&PIIX4_dev->dev, "Using IRQ for SMBus.\n");
+               dev_dbg(&PIIX4_dev->dev, "Using IRQ for SMBus\n");
        else
-               dev_dbg(&PIIX4_dev->dev, "Using SMI# for SMBus.\n");
+               dev_dbg(&PIIX4_dev->dev, "Using SMI# for SMBus\n");
 
        dev_info(&PIIX4_dev->dev,
                 "SMBus Host Controller at 0x%x, revision %d\n",
index f6389e2c9d02d704163cd7b2f0fc6c23bda1f8ba..8564768fee32eb24d7bfd92aec29d362ffe6cbdc 100644 (file)
@@ -26,7 +26,6 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
index 8c87f4a9793be22ef28b8de3c8c7ae3766b25bde..01e967763c2a70ed92e15eb4e134ab84f621d42c 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/device.h>
 #include <linux/platform_device.h>
 #include <linux/of_irq.h>
index ac80199885bef383c1a394ffbdbff335ab529b5d..c83fc3ccdd2b2c5677a977d00462c65d6c334489 100644 (file)
@@ -17,7 +17,6 @@
 #include <linux/types.h>
 #include <linux/delay.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/clk.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
index 2c2fd7c2b116624f737352fb6ea5dee55ff3cad3..0282d4d42805fae9c2a6d68c3213bf0cab18f6f6 100644 (file)
@@ -26,7 +26,6 @@
 #include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/err.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/i2c.h>
@@ -111,6 +110,7 @@ struct rcar_i2c_priv {
        void __iomem *io;
        struct i2c_adapter adap;
        struct i2c_msg  *msg;
+       struct clk *clk;
 
        spinlock_t lock;
        wait_queue_head_t wait;
@@ -227,18 +227,12 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
                                    u32 bus_speed,
                                    struct device *dev)
 {
-       struct clk *clkp = clk_get(dev, NULL);
        u32 scgd, cdf;
        u32 round, ick;
        u32 scl;
        u32 cdf_width;
        unsigned long rate;
 
-       if (IS_ERR(clkp)) {
-               dev_err(dev, "couldn't get clock\n");
-               return PTR_ERR(clkp);
-       }
-
        switch (priv->devtype) {
        case I2C_RCAR_GEN1:
                cdf_width = 2;
@@ -266,7 +260,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
         * clkp : peripheral_clk
         * F[]  : integer up-valuation
         */
-       rate = clk_get_rate(clkp);
+       rate = clk_get_rate(priv->clk);
        cdf = rate / 20000000;
        if (cdf >= 1 << cdf_width) {
                dev_err(dev, "Input clock %lu too high\n", rate);
@@ -308,7 +302,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
 
 scgd_find:
        dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n",
-               scl, bus_speed, clk_get_rate(clkp), round, cdf, scgd);
+               scl, bus_speed, clk_get_rate(priv->clk), round, cdf, scgd);
 
        /*
         * keep icccr value
@@ -604,7 +598,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
                 * error handling
                 */
                if (rcar_i2c_flags_has(priv, ID_NACK)) {
-                       ret = -EREMOTEIO;
+                       ret = -ENXIO;
                        break;
                }
 
@@ -623,7 +617,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
 
        pm_runtime_put(dev);
 
-       if (ret < 0)
+       if (ret < 0 && ret != -ENXIO)
                dev_err(dev, "error %d : %x\n", ret, priv->flags);
 
        return ret;
@@ -664,6 +658,12 @@ static int rcar_i2c_probe(struct platform_device *pdev)
                return -ENOMEM;
        }
 
+       priv->clk = devm_clk_get(dev, NULL);
+       if (IS_ERR(priv->clk)) {
+               dev_err(dev, "cannot get clock\n");
+               return PTR_ERR(priv->clk);
+       }
+
        bus_speed = 100000; /* default 100 kHz */
        ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed);
        if (ret < 0 && pdata && pdata->bus_speed)
index 599235514138564ba2db1befc6b711655420cf16..dfc98df7b1b6a72ccc96e1e1b242bcab9770002e 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/slab.h>
 #include <linux/kernel.h>
 #include <linux/stddef.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/acpi.h>
 
index 5e8f136e233f79d5205a5ef65038474721154b16..d76f3d9737ec920564e72184598010e5f581e7a2 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/delay.h>
 #include <linux/err.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/platform_device.h>
index 4fc87e7c94c9472b1df8b44f25e10dd605593805..294c80f21d65163b86e17d27a0101a3b3b921b50 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
index 36a9556d7cfa8e287b4e8a2f819dd7b2768842c9..19b8505d0cdd0b02ebb437dc7ac859fc91d20df1 100644 (file)
@@ -45,7 +45,6 @@
 #include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/ioport.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
index b9faf9b6002bce7c09286229fd1680a212f2d11c..f8aa0c29f02b2cdbd8f852da3aa707058e4413ec 100644 (file)
@@ -36,7 +36,6 @@
 #include <linux/stddef.h>
 #include <linux/ioport.h>
 #include <linux/i2c.h>
-#include <linux/init.h>
 #include <linux/acpi.h>
 #include <linux/io.h>
 
index be662511c58bf931aef8e57de31905d710952363..49d7f14b9d275074fc3181b7cacabc49fb521055 100644 (file)
@@ -22,7 +22,6 @@
 #include <linux/module.h>
 #include <linux/pci.h>
 #include <linux/ioport.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
 #include <linux/io.h>
index 6f9918f37b91c23f0464d3a7ed4d70ccc6ae4e93..28107502517f19005860861ca9ff17f785295575 100644 (file)
@@ -30,7 +30,6 @@
  */
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/delay.h>
index 7945b05d3ea0415c2fe86c5f578fa90787e20ef1..17f7352eca6bf7fe37ef1bb2c10f2ada6e4aa984 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/slab.h>
-#include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
index ae1258b95d6041cdfbba0194cbe0de0bf1a8d529..8eadf0f47ad7a1a295a9b4486c3bd870ed756e38 100644 (file)
@@ -26,7 +26,6 @@
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
-#include <linux/init.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
 #include <linux/io.h>
index 82f7a5354dfea8f31d2a6ddfa69a360d30a235b5..5fb80b8962a2ad7d8e78dcee01df68cb639d3602 100644 (file)
@@ -261,10 +261,9 @@ static int i2c_device_probe(struct device *dev)
 
        acpi_dev_pm_attach(&client->dev, true);
        status = driver->probe(client, i2c_match_id(driver->id_table, client));
-       if (status) {
-               i2c_set_clientdata(client, NULL);
+       if (status)
                acpi_dev_pm_detach(&client->dev, true);
-       }
+
        return status;
 }
 
@@ -272,7 +271,7 @@ static int i2c_device_remove(struct device *dev)
 {
        struct i2c_client       *client = i2c_verify_client(dev);
        struct i2c_driver       *driver;
-       int                     status;
+       int status = 0;
 
        if (!client || !dev->driver)
                return 0;
@@ -281,12 +280,8 @@ static int i2c_device_remove(struct device *dev)
        if (driver->remove) {
                dev_dbg(dev, "remove\n");
                status = driver->remove(client);
-       } else {
-               dev->driver = NULL;
-               status = 0;
        }
-       if (status == 0)
-               i2c_set_clientdata(client, NULL);
+
        acpi_dev_pm_detach(&client->dev, true);
        return status;
 }
index c58e093b6032480a316c1725db5f6879842cd2ef..69afffa8f427a0b055c3a13ae1dd9423b27e76da 100644 (file)
@@ -19,7 +19,6 @@
 #include <linux/kernel.h>
 #include <linux/i2c.h>
 #include <linux/i2c-mux.h>
-#include <linux/init.h>
 #include <linux/module.h>
 #include <linux/of_gpio.h>
 #include <linux/platform_device.h>
index 8a8c56f4b026d6a22e54941e9959ea633b42c321..d8989c823f50d0baa7c73c09a64e9016821b7f74 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/i2c-mux.h>
 #include <linux/i2c-mux-gpio.h>
 #include <linux/platform_device.h>
-#include <linux/init.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/gpio.h>
index c4f08ad311832ed79da7d02d6606342e696b72c1..cb772775da431e78ba5ecf1a3da9c45fba135a03 100644 (file)
@@ -17,7 +17,6 @@
  */
 
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/jiffies.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
index 8720b6a1123777a727f1da4165f12a7327729f55..550bd36aa5d651b7324879df550563ca0c85d53e 100644 (file)
@@ -40,7 +40,6 @@
 #include <linux/i2c.h>
 #include <linux/i2c-mux.h>
 #include <linux/i2c/pca954x.h>
-#include <linux/init.h>
 #include <linux/module.h>
 #include <linux/of_gpio.h>
 #include <linux/slab.h>
index d7978dc4ad0b075a03b842bc93b52a61c952ae70..4ff0ef3e07a6b9839c4bcb9e48618f859bc7e10d 100644 (file)
@@ -18,7 +18,6 @@
 
 #include <linux/i2c.h>
 #include <linux/i2c-mux.h>
-#include <linux/init.h>
 #include <linux/module.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/i2c-mux-pinctrl.h>
index d9c8dbd3373f90d298ac66001ccdd13fa6f54ddf..deddeb8c337cff2c67d2b9205065741539dbf97c 100644 (file)
@@ -342,11 +342,25 @@ i2c_register_board_info(int busnum, struct i2c_board_info const *info,
 }
 #endif /* I2C_BOARDINFO */
 
-/*
+/**
+ * struct i2c_algorithm - represent I2C transfer method
+ * @master_xfer: Issue a set of i2c transactions to the given I2C adapter
+ *   defined by the msgs array, with num messages available to transfer via
+ *   the adapter specified by adap.
+ * @smbus_xfer: Issue smbus transactions to the given I2C adapter. If this
+ *   is not present, then the bus layer will try and convert the SMBus calls
+ *   into I2C transfers instead.
+ * @functionality: Return the flags that this algorithm/adapter pair supports
+ *   from the I2C_FUNC_* flags.
+ *
  * The following structs are for those who like to implement new bus drivers:
  * i2c_algorithm is the interface to a class of hardware solutions which can
  * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
  * to name two of the most common.
+ *
+ * The return codes from the @master_xfer field should indicate the type of
+ * error code that occured during the transfer, as documented in the kernel
+ * Documentation file Documentation/i2c/fault-codes.
  */
 struct i2c_algorithm {
        /* If an adapter algorithm can't do I2C-level access, set master_xfer