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

Merge branch 'for-linus/i2c-3.2' of git://git.fluff.org/bjdooks/linux

* 'for-linus/i2c-3.2' of git://git.fluff.org/bjdooks/linux: (47 commits)
i2c-s3c2410: Add device tree support
i2c-s3c2410: Keep a copy of platform data and use it
i2c-nomadik: cosmetic coding style corrections
i2c-au1550: dev_pm_ops conversion
i2c-au1550: increase timeout waiting for master done
i2c-au1550: remove unused ack_timeout
i2c-au1550: remove usage of volatile keyword
i2c-tegra: __iomem annotation fix
i2c-eg20t: Add initialize processing in case i2c-error occurs
i2c-eg20t: Fix flag setting issue
i2c-eg20t: add stop sequence in case wait-event timeout occurs
i2c-eg20t: Separate error processing
i2c-eg20t: Fix 10bit access issue
i2c-eg20t: Modify returned value s32 to long
i2c-eg20t: Fix bus-idle waiting issue
i2c-designware: Fix PCI core warning on suspend/resume
i2c-designware: Add runtime power management support
i2c-designware: Add support for Designware core behind PCI devices.
i2c-designware: Push all register reads/writes into the core code.
i2c-designware: Support multiple cores using same ISR
...

+1551 -692
+25
Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt
··· 1 + * Freescale Inter IC (I2C) and High Speed Inter IC (HS-I2C) for i.MX 2 + 3 + Required properties: 4 + - compatible : Should be "fsl,<chip>-i2c" 5 + - reg : Should contain I2C/HS-I2C registers location and length 6 + - interrupts : Should contain I2C/HS-I2C interrupt 7 + 8 + Optional properties: 9 + - clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz. 10 + The absence of the propoerty indicates the default frequency 100 kHz. 11 + 12 + Examples: 13 + 14 + i2c@83fc4000 { /* I2C2 on i.MX51 */ 15 + compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; 16 + reg = <0x83fc4000 0x4000>; 17 + interrupts = <63>; 18 + }; 19 + 20 + i2c@70038000 { /* HS-I2C on i.MX51 */ 21 + compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; 22 + reg = <0x70038000 0x4000>; 23 + interrupts = <64>; 24 + clock-frequency = <400000>; 25 + };
+39
Documentation/devicetree/bindings/i2c/samsung-i2c.txt
··· 1 + * Samsung's I2C controller 2 + 3 + The Samsung's I2C controller is used to interface with I2C devices. 4 + 5 + Required properties: 6 + - compatible: value should be either of the following. 7 + (a) "samsung, s3c2410-i2c", for i2c compatible with s3c2410 i2c. 8 + (b) "samsung, s3c2440-i2c", for i2c compatible with s3c2440 i2c. 9 + - reg: physical base address of the controller and length of memory mapped 10 + region. 11 + - interrupts: interrupt number to the cpu. 12 + - samsung,i2c-sda-delay: Delay (in ns) applied to data line (SDA) edges. 13 + - gpios: The order of the gpios should be the following: <SDA, SCL>. 14 + The gpio specifier depends on the gpio controller. 15 + 16 + Optional properties: 17 + - samsung,i2c-slave-addr: Slave address in multi-master enviroment. If not 18 + specified, default value is 0. 19 + - samsung,i2c-max-bus-freq: Desired frequency in Hz of the bus. If not 20 + specified, the default value in Hz is 100000. 21 + 22 + Example: 23 + 24 + i2c@13870000 { 25 + compatible = "samsung,s3c2440-i2c"; 26 + reg = <0x13870000 0x100>; 27 + interrupts = <345>; 28 + samsung,i2c-sda-delay = <100>; 29 + samsung,i2c-max-bus-freq = <100000>; 30 + gpios = <&gpd1 2 0 /* SDA */ 31 + &gpd1 3 0 /* SCL */>; 32 + #address-cells = <1>; 33 + #size-cells = <0>; 34 + 35 + wm8994@1a { 36 + compatible = "wlf,wm8994"; 37 + reg = <0x1a>; 38 + }; 39 + };
-4
arch/arm/plat-mxc/include/mach/i2c.h
··· 11 11 12 12 /** 13 13 * struct imxi2c_platform_data - structure of platform data for MXC I2C driver 14 - * @init: Initialise gpio's and other board specific things 15 - * @exit: Free everything initialised by @init 16 14 * @bitrate: Bus speed measured in Hz 17 15 * 18 16 **/ 19 17 struct imxi2c_platform_data { 20 - int (*init)(struct device *dev); 21 - void (*exit)(struct device *dev); 22 18 int bitrate; 23 19 }; 24 20
+27
arch/arm/plat-omap/i2c.c
··· 108 108 res[1].start = INT_I2C; 109 109 pdata = &i2c_pdata[bus_id - 1]; 110 110 111 + /* all OMAP1 have IP version 1 register set */ 112 + pdata->rev = OMAP_I2C_IP_VERSION_1; 113 + 114 + /* all OMAP1 I2C are implemented like this */ 115 + pdata->flags = OMAP_I2C_FLAG_NO_FIFO | 116 + OMAP_I2C_FLAG_SIMPLE_CLOCK | 117 + OMAP_I2C_FLAG_16BIT_DATA_REG | 118 + OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK; 119 + 120 + /* how the cpu bus is wired up differs for 7xx only */ 121 + 122 + if (cpu_is_omap7xx()) 123 + pdata->flags |= OMAP_I2C_FLAG_BUS_SHIFT_1; 124 + else 125 + pdata->flags |= OMAP_I2C_FLAG_BUS_SHIFT_2; 126 + 111 127 return platform_device_register(pdev); 112 128 } 113 129 ··· 154 138 struct omap_device *od; 155 139 char oh_name[MAX_OMAP_I2C_HWMOD_NAME_LEN]; 156 140 struct omap_i2c_bus_platform_data *pdata; 141 + struct omap_i2c_dev_attr *dev_attr; 157 142 158 143 omap2_i2c_mux_pins(bus_id); 159 144 ··· 168 151 } 169 152 170 153 pdata = &i2c_pdata[bus_id - 1]; 154 + /* 155 + * pass the hwmod class's CPU-specific knowledge of I2C IP revision in 156 + * use, and functionality implementation flags, up to the OMAP I2C 157 + * driver via platform data 158 + */ 159 + pdata->rev = oh->class->rev; 160 + 161 + dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr; 162 + pdata->flags = dev_attr->flags; 163 + 171 164 /* 172 165 * When waiting for completion of a i2c transfer, we need to 173 166 * set a wake up latency constraint for the MPU. This is to
-13
arch/mips/include/asm/mach-au1x00/au1xxx_psc.h
··· 394 394 #define PSC_SPITXRX_LC (1 << 29) 395 395 #define PSC_SPITXRX_SR (1 << 28) 396 396 397 - /* PSC in SMBus (I2C) Mode. */ 398 - typedef struct psc_smb { 399 - u32 psc_sel; 400 - u32 psc_ctrl; 401 - u32 psc_smbcfg; 402 - u32 psc_smbmsk; 403 - u32 psc_smbpcr; 404 - u32 psc_smbstat; 405 - u32 psc_smbevnt; 406 - u32 psc_smbtxrx; 407 - u32 psc_smbtmr; 408 - } psc_smb_t; 409 - 410 397 /* SMBus Config Register. */ 411 398 #define PSC_SMBCFG_RT_MASK (3 << 30) 412 399 #define PSC_SMBCFG_RT_FIFO1 (0 << 30)
+13 -3
drivers/i2c/busses/Kconfig
··· 350 350 devices such as DaVinci NIC. 351 351 For details please see http://www.ti.com/davinci 352 352 353 - config I2C_DESIGNWARE 354 - tristate "Synopsys DesignWare" 353 + config I2C_DESIGNWARE_PLATFORM 354 + tristate "Synopsys DesignWare Platfrom" 355 355 depends on HAVE_CLK 356 356 help 357 357 If you say yes to this option, support will be included for the 358 358 Synopsys DesignWare I2C adapter. Only master mode is supported. 359 359 360 360 This driver can also be built as a module. If so, the module 361 - will be called i2c-designware. 361 + will be called i2c-designware-platform. 362 + 363 + config I2C_DESIGNWARE_PCI 364 + tristate "Synopsys DesignWare PCI" 365 + depends on PCI 366 + help 367 + If you say yes to this option, support will be included for the 368 + Synopsys DesignWare I2C adapter. Only master mode is supported. 369 + 370 + This driver can also be built as a module. If so, the module 371 + will be called i2c-designware-pci. 362 372 363 373 config I2C_GPIO 364 374 tristate "GPIO-based bitbanging I2C"
+4 -1
drivers/i2c/busses/Makefile
··· 33 33 obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o 34 34 obj-$(CONFIG_I2C_CPM) += i2c-cpm.o 35 35 obj-$(CONFIG_I2C_DAVINCI) += i2c-davinci.o 36 - obj-$(CONFIG_I2C_DESIGNWARE) += i2c-designware.o 36 + obj-$(CONFIG_I2C_DESIGNWARE_PLATFORM) += i2c-designware-platform.o 37 + i2c-designware-platform-objs := i2c-designware-platdrv.o i2c-designware-core.o 38 + obj-$(CONFIG_I2C_DESIGNWARE_PCI) += i2c-designware-pci.o 39 + i2c-designware-pci-objs := i2c-designware-pcidrv.o i2c-designware-core.o 37 40 obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o 38 41 obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o 39 42 obj-$(CONFIG_I2C_IBM_IIC) += i2c-ibm_iic.o
+113 -165
drivers/i2c/busses/i2c-au1550.c
··· 39 39 #include <asm/mach-au1x00/au1xxx.h> 40 40 #include <asm/mach-au1x00/au1xxx_psc.h> 41 41 42 + #define PSC_SEL 0x00 43 + #define PSC_CTRL 0x04 44 + #define PSC_SMBCFG 0x08 45 + #define PSC_SMBMSK 0x0C 46 + #define PSC_SMBPCR 0x10 47 + #define PSC_SMBSTAT 0x14 48 + #define PSC_SMBEVNT 0x18 49 + #define PSC_SMBTXRX 0x1C 50 + #define PSC_SMBTMR 0x20 51 + 42 52 struct i2c_au1550_data { 43 - u32 psc_base; 53 + void __iomem *psc_base; 44 54 int xfer_timeout; 45 - int ack_timeout; 46 55 struct i2c_adapter adap; 47 56 struct resource *ioarea; 48 57 }; 49 58 50 - static int 51 - wait_xfer_done(struct i2c_au1550_data *adap) 59 + static inline void WR(struct i2c_au1550_data *a, int r, unsigned long v) 52 60 { 53 - u32 stat; 54 - int i; 55 - volatile psc_smb_t *sp; 61 + __raw_writel(v, a->psc_base + r); 62 + wmb(); 63 + } 56 64 57 - sp = (volatile psc_smb_t *)(adap->psc_base); 65 + static inline unsigned long RD(struct i2c_au1550_data *a, int r) 66 + { 67 + return __raw_readl(a->psc_base + r); 68 + } 58 69 59 - /* Wait for Tx Buffer Empty 60 - */ 70 + static int wait_xfer_done(struct i2c_au1550_data *adap) 71 + { 72 + int i; 73 + 74 + /* Wait for Tx Buffer Empty */ 61 75 for (i = 0; i < adap->xfer_timeout; i++) { 62 - stat = sp->psc_smbstat; 63 - au_sync(); 64 - if ((stat & PSC_SMBSTAT_TE) != 0) 76 + if (RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_TE) 65 77 return 0; 66 78 67 79 udelay(1); ··· 82 70 return -ETIMEDOUT; 83 71 } 84 72 85 - static int 86 - wait_ack(struct i2c_au1550_data *adap) 73 + static int wait_ack(struct i2c_au1550_data *adap) 87 74 { 88 - u32 stat; 89 - volatile psc_smb_t *sp; 75 + unsigned long stat; 90 76 91 77 if (wait_xfer_done(adap)) 92 78 return -ETIMEDOUT; 93 79 94 - sp = (volatile psc_smb_t *)(adap->psc_base); 95 - 96 - stat = sp->psc_smbevnt; 97 - au_sync(); 98 - 80 + stat = RD(adap, PSC_SMBEVNT); 99 81 if ((stat & (PSC_SMBEVNT_DN | PSC_SMBEVNT_AN | PSC_SMBEVNT_AL)) != 0) 100 82 return -ETIMEDOUT; 101 83 102 84 return 0; 103 85 } 104 86 105 - static int 106 - wait_master_done(struct i2c_au1550_data *adap) 87 + static int wait_master_done(struct i2c_au1550_data *adap) 107 88 { 108 - u32 stat; 109 - int i; 110 - volatile psc_smb_t *sp; 89 + int i; 111 90 112 - sp = (volatile psc_smb_t *)(adap->psc_base); 113 - 114 - /* Wait for Master Done. 115 - */ 116 - for (i = 0; i < adap->xfer_timeout; i++) { 117 - stat = sp->psc_smbevnt; 118 - au_sync(); 119 - if ((stat & PSC_SMBEVNT_MD) != 0) 91 + /* Wait for Master Done. */ 92 + for (i = 0; i < 2 * adap->xfer_timeout; i++) { 93 + if ((RD(adap, PSC_SMBEVNT) & PSC_SMBEVNT_MD) != 0) 120 94 return 0; 121 95 udelay(1); 122 96 } ··· 113 115 static int 114 116 do_address(struct i2c_au1550_data *adap, unsigned int addr, int rd, int q) 115 117 { 116 - volatile psc_smb_t *sp; 117 - u32 stat; 118 + unsigned long stat; 118 119 119 - sp = (volatile psc_smb_t *)(adap->psc_base); 120 - 121 - /* Reset the FIFOs, clear events. 122 - */ 123 - stat = sp->psc_smbstat; 124 - sp->psc_smbevnt = PSC_SMBEVNT_ALLCLR; 125 - au_sync(); 120 + /* Reset the FIFOs, clear events. */ 121 + stat = RD(adap, PSC_SMBSTAT); 122 + WR(adap, PSC_SMBEVNT, PSC_SMBEVNT_ALLCLR); 126 123 127 124 if (!(stat & PSC_SMBSTAT_TE) || !(stat & PSC_SMBSTAT_RE)) { 128 - sp->psc_smbpcr = PSC_SMBPCR_DC; 129 - au_sync(); 130 - do { 131 - stat = sp->psc_smbpcr; 132 - au_sync(); 133 - } while ((stat & PSC_SMBPCR_DC) != 0); 125 + WR(adap, PSC_SMBPCR, PSC_SMBPCR_DC); 126 + while ((RD(adap, PSC_SMBPCR) & PSC_SMBPCR_DC) != 0) 127 + cpu_relax(); 134 128 udelay(50); 135 129 } 136 130 137 - /* Write out the i2c chip address and specify operation 138 - */ 131 + /* Write out the i2c chip address and specify operation */ 139 132 addr <<= 1; 140 133 if (rd) 141 134 addr |= 1; ··· 135 146 if (q) 136 147 addr |= PSC_SMBTXRX_STP; 137 148 138 - /* Put byte into fifo, start up master. 139 - */ 140 - sp->psc_smbtxrx = addr; 141 - au_sync(); 142 - sp->psc_smbpcr = PSC_SMBPCR_MS; 143 - au_sync(); 149 + /* Put byte into fifo, start up master. */ 150 + WR(adap, PSC_SMBTXRX, addr); 151 + WR(adap, PSC_SMBPCR, PSC_SMBPCR_MS); 144 152 if (wait_ack(adap)) 145 153 return -EIO; 146 154 return (q) ? wait_master_done(adap) : 0; 147 155 } 148 156 149 - static u32 150 - wait_for_rx_byte(struct i2c_au1550_data *adap, u32 *ret_data) 157 + static int wait_for_rx_byte(struct i2c_au1550_data *adap, unsigned char *out) 151 158 { 152 - int j; 153 - u32 data, stat; 154 - volatile psc_smb_t *sp; 159 + int j; 155 160 156 161 if (wait_xfer_done(adap)) 157 162 return -EIO; 158 - 159 - sp = (volatile psc_smb_t *)(adap->psc_base); 160 163 161 164 j = adap->xfer_timeout * 100; 162 165 do { ··· 156 175 if (j <= 0) 157 176 return -EIO; 158 177 159 - stat = sp->psc_smbstat; 160 - au_sync(); 161 - if ((stat & PSC_SMBSTAT_RE) == 0) 178 + if ((RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_RE) == 0) 162 179 j = 0; 163 180 else 164 181 udelay(1); 165 182 } while (j > 0); 166 - data = sp->psc_smbtxrx; 167 - au_sync(); 168 - *ret_data = data; 183 + 184 + *out = RD(adap, PSC_SMBTXRX); 169 185 170 186 return 0; 171 187 } 172 188 173 - static int 174 - i2c_read(struct i2c_au1550_data *adap, unsigned char *buf, 189 + static int i2c_read(struct i2c_au1550_data *adap, unsigned char *buf, 175 190 unsigned int len) 176 191 { 177 - int i; 178 - u32 data; 179 - volatile psc_smb_t *sp; 192 + int i; 180 193 181 194 if (len == 0) 182 195 return 0; ··· 179 204 * zero bytes for timing, waiting for bytes to appear in the 180 205 * receive fifo, then reading the bytes. 181 206 */ 182 - 183 - sp = (volatile psc_smb_t *)(adap->psc_base); 184 - 185 207 i = 0; 186 - while (i < (len-1)) { 187 - sp->psc_smbtxrx = 0; 188 - au_sync(); 189 - if (wait_for_rx_byte(adap, &data)) 208 + while (i < (len - 1)) { 209 + WR(adap, PSC_SMBTXRX, 0); 210 + if (wait_for_rx_byte(adap, &buf[i])) 190 211 return -EIO; 191 212 192 - buf[i] = data; 193 213 i++; 194 214 } 195 215 196 - /* The last byte has to indicate transfer done. 197 - */ 198 - sp->psc_smbtxrx = PSC_SMBTXRX_STP; 199 - au_sync(); 216 + /* The last byte has to indicate transfer done. */ 217 + WR(adap, PSC_SMBTXRX, PSC_SMBTXRX_STP); 200 218 if (wait_master_done(adap)) 201 219 return -EIO; 202 220 203 - data = sp->psc_smbtxrx; 204 - au_sync(); 205 - buf[i] = data; 221 + buf[i] = (unsigned char)(RD(adap, PSC_SMBTXRX) & 0xff); 206 222 return 0; 207 223 } 208 224 209 - static int 210 - i2c_write(struct i2c_au1550_data *adap, unsigned char *buf, 225 + static int i2c_write(struct i2c_au1550_data *adap, unsigned char *buf, 211 226 unsigned int len) 212 227 { 213 - int i; 214 - u32 data; 215 - volatile psc_smb_t *sp; 228 + int i; 229 + unsigned long data; 216 230 217 231 if (len == 0) 218 232 return 0; 219 233 220 - sp = (volatile psc_smb_t *)(adap->psc_base); 221 - 222 234 i = 0; 223 235 while (i < (len-1)) { 224 236 data = buf[i]; 225 - sp->psc_smbtxrx = data; 226 - au_sync(); 237 + WR(adap, PSC_SMBTXRX, data); 227 238 if (wait_ack(adap)) 228 239 return -EIO; 229 240 i++; 230 241 } 231 242 232 - /* The last byte has to indicate transfer done. 233 - */ 243 + /* The last byte has to indicate transfer done. */ 234 244 data = buf[i]; 235 245 data |= PSC_SMBTXRX_STP; 236 - sp->psc_smbtxrx = data; 237 - au_sync(); 246 + WR(adap, PSC_SMBTXRX, data); 238 247 if (wait_master_done(adap)) 239 248 return -EIO; 240 249 return 0; ··· 228 269 au1550_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num) 229 270 { 230 271 struct i2c_au1550_data *adap = i2c_adap->algo_data; 231 - volatile psc_smb_t *sp = (volatile psc_smb_t *)adap->psc_base; 232 272 struct i2c_msg *p; 233 273 int i, err = 0; 234 274 235 - sp->psc_ctrl = PSC_CTRL_ENABLE; 236 - au_sync(); 275 + WR(adap, PSC_CTRL, PSC_CTRL_ENABLE); 237 276 238 277 for (i = 0; !err && i < num; i++) { 239 278 p = &msgs[i]; ··· 250 293 if (err == 0) 251 294 err = num; 252 295 253 - sp->psc_ctrl = PSC_CTRL_SUSPEND; 254 - au_sync(); 296 + WR(adap, PSC_CTRL, PSC_CTRL_SUSPEND); 255 297 256 298 return err; 257 299 } 258 300 259 - static u32 260 - au1550_func(struct i2c_adapter *adap) 301 + static u32 au1550_func(struct i2c_adapter *adap) 261 302 { 262 303 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; 263 304 } ··· 267 312 268 313 static void i2c_au1550_setup(struct i2c_au1550_data *priv) 269 314 { 270 - volatile psc_smb_t *sp = (volatile psc_smb_t *)priv->psc_base; 271 - u32 stat; 315 + unsigned long cfg; 272 316 273 - sp->psc_ctrl = PSC_CTRL_DISABLE; 274 - au_sync(); 275 - sp->psc_sel = PSC_SEL_PS_SMBUSMODE; 276 - sp->psc_smbcfg = 0; 277 - au_sync(); 278 - sp->psc_ctrl = PSC_CTRL_ENABLE; 279 - au_sync(); 280 - do { 281 - stat = sp->psc_smbstat; 282 - au_sync(); 283 - } while ((stat & PSC_SMBSTAT_SR) == 0); 317 + WR(priv, PSC_CTRL, PSC_CTRL_DISABLE); 318 + WR(priv, PSC_SEL, PSC_SEL_PS_SMBUSMODE); 319 + WR(priv, PSC_SMBCFG, 0); 320 + WR(priv, PSC_CTRL, PSC_CTRL_ENABLE); 321 + while ((RD(priv, PSC_SMBSTAT) & PSC_SMBSTAT_SR) == 0) 322 + cpu_relax(); 284 323 285 - sp->psc_smbcfg = (PSC_SMBCFG_RT_FIFO8 | PSC_SMBCFG_TT_FIFO8 | 286 - PSC_SMBCFG_DD_DISABLE); 324 + cfg = PSC_SMBCFG_RT_FIFO8 | PSC_SMBCFG_TT_FIFO8 | PSC_SMBCFG_DD_DISABLE; 325 + WR(priv, PSC_SMBCFG, cfg); 287 326 288 327 /* Divide by 8 to get a 6.25 MHz clock. The later protocol 289 328 * timings are based on this clock. 290 329 */ 291 - sp->psc_smbcfg |= PSC_SMBCFG_SET_DIV(PSC_SMBCFG_DIV8); 292 - sp->psc_smbmsk = PSC_SMBMSK_ALLMASK; 293 - au_sync(); 330 + cfg |= PSC_SMBCFG_SET_DIV(PSC_SMBCFG_DIV8); 331 + WR(priv, PSC_SMBCFG, cfg); 332 + WR(priv, PSC_SMBMSK, PSC_SMBMSK_ALLMASK); 294 333 295 334 /* Set the protocol timer values. See Table 71 in the 296 335 * Au1550 Data Book for standard timing values. 297 336 */ 298 - sp->psc_smbtmr = PSC_SMBTMR_SET_TH(0) | PSC_SMBTMR_SET_PS(15) | \ 337 + WR(priv, PSC_SMBTMR, PSC_SMBTMR_SET_TH(0) | PSC_SMBTMR_SET_PS(15) | \ 299 338 PSC_SMBTMR_SET_PU(15) | PSC_SMBTMR_SET_SH(15) | \ 300 339 PSC_SMBTMR_SET_SU(15) | PSC_SMBTMR_SET_CL(15) | \ 301 - PSC_SMBTMR_SET_CH(15); 302 - au_sync(); 340 + PSC_SMBTMR_SET_CH(15)); 303 341 304 - sp->psc_smbcfg |= PSC_SMBCFG_DE_ENABLE; 305 - do { 306 - stat = sp->psc_smbstat; 307 - au_sync(); 308 - } while ((stat & PSC_SMBSTAT_SR) == 0); 342 + cfg |= PSC_SMBCFG_DE_ENABLE; 343 + WR(priv, PSC_SMBCFG, cfg); 344 + while ((RD(priv, PSC_SMBSTAT) & PSC_SMBSTAT_SR) == 0) 345 + cpu_relax(); 309 346 310 - sp->psc_ctrl = PSC_CTRL_SUSPEND; 311 - au_sync(); 347 + WR(priv, PSC_CTRL, PSC_CTRL_SUSPEND); 312 348 } 313 349 314 350 static void i2c_au1550_disable(struct i2c_au1550_data *priv) 315 351 { 316 - volatile psc_smb_t *sp = (volatile psc_smb_t *)priv->psc_base; 317 - 318 - sp->psc_smbcfg = 0; 319 - sp->psc_ctrl = PSC_CTRL_DISABLE; 320 - au_sync(); 352 + WR(priv, PSC_SMBCFG, 0); 353 + WR(priv, PSC_CTRL, PSC_CTRL_DISABLE); 321 354 } 322 355 323 356 /* ··· 339 396 goto out_mem; 340 397 } 341 398 342 - priv->psc_base = CKSEG1ADDR(r->start); 399 + priv->psc_base = ioremap(r->start, resource_size(r)); 400 + if (!priv->psc_base) { 401 + ret = -EIO; 402 + goto out_map; 403 + } 343 404 priv->xfer_timeout = 200; 344 - priv->ack_timeout = 200; 345 405 346 406 priv->adap.nr = pdev->id; 347 407 priv->adap.algo = &au1550_algo; ··· 352 406 priv->adap.dev.parent = &pdev->dev; 353 407 strlcpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name)); 354 408 355 - /* Now, set up the PSC for SMBus PIO mode. 356 - */ 409 + /* Now, set up the PSC for SMBus PIO mode. */ 357 410 i2c_au1550_setup(priv); 358 411 359 412 ret = i2c_add_numbered_adapter(&priv->adap); ··· 362 417 } 363 418 364 419 i2c_au1550_disable(priv); 365 - 420 + iounmap(priv->psc_base); 421 + out_map: 366 422 release_resource(priv->ioarea); 367 423 kfree(priv->ioarea); 368 424 out_mem: ··· 372 426 return ret; 373 427 } 374 428 375 - static int __devexit 376 - i2c_au1550_remove(struct platform_device *pdev) 429 + static int __devexit i2c_au1550_remove(struct platform_device *pdev) 377 430 { 378 431 struct i2c_au1550_data *priv = platform_get_drvdata(pdev); 379 432 380 433 platform_set_drvdata(pdev, NULL); 381 434 i2c_del_adapter(&priv->adap); 382 435 i2c_au1550_disable(priv); 436 + iounmap(priv->psc_base); 383 437 release_resource(priv->ioarea); 384 438 kfree(priv->ioarea); 385 439 kfree(priv); ··· 387 441 } 388 442 389 443 #ifdef CONFIG_PM 390 - static int 391 - i2c_au1550_suspend(struct platform_device *pdev, pm_message_t state) 444 + static int i2c_au1550_suspend(struct device *dev) 392 445 { 393 - struct i2c_au1550_data *priv = platform_get_drvdata(pdev); 446 + struct i2c_au1550_data *priv = dev_get_drvdata(dev); 394 447 395 448 i2c_au1550_disable(priv); 396 449 397 450 return 0; 398 451 } 399 452 400 - static int 401 - i2c_au1550_resume(struct platform_device *pdev) 453 + static int i2c_au1550_resume(struct device *dev) 402 454 { 403 - struct i2c_au1550_data *priv = platform_get_drvdata(pdev); 455 + struct i2c_au1550_data *priv = dev_get_drvdata(dev); 404 456 405 457 i2c_au1550_setup(priv); 406 458 407 459 return 0; 408 460 } 461 + 462 + static const struct dev_pm_ops i2c_au1550_pmops = { 463 + .suspend = i2c_au1550_suspend, 464 + .resume = i2c_au1550_resume, 465 + }; 466 + 467 + #define AU1XPSC_SMBUS_PMOPS (&i2c_au1550_pmops) 468 + 409 469 #else 410 - #define i2c_au1550_suspend NULL 411 - #define i2c_au1550_resume NULL 470 + #define AU1XPSC_SMBUS_PMOPS NULL 412 471 #endif 413 472 414 473 static struct platform_driver au1xpsc_smbus_driver = { 415 474 .driver = { 416 475 .name = "au1xpsc_smbus", 417 476 .owner = THIS_MODULE, 477 + .pm = AU1XPSC_SMBUS_PMOPS, 418 478 }, 419 479 .probe = i2c_au1550_probe, 420 480 .remove = __devexit_p(i2c_au1550_remove), 421 - .suspend = i2c_au1550_suspend, 422 - .resume = i2c_au1550_resume, 423 481 }; 424 482 425 - static int __init 426 - i2c_au1550_init(void) 483 + static int __init i2c_au1550_init(void) 427 484 { 428 485 return platform_driver_register(&au1xpsc_smbus_driver); 429 486 } 430 487 431 - static void __exit 432 - i2c_au1550_exit(void) 488 + static void __exit i2c_au1550_exit(void) 433 489 { 434 490 platform_driver_unregister(&au1xpsc_smbus_driver); 435 491 }
+2 -2
drivers/i2c/busses/i2c-bfin-twi.c
··· 631 631 struct bfin_twi_iface *iface = platform_get_drvdata(pdev); 632 632 633 633 int rc = request_irq(iface->irq, bfin_twi_interrupt_entry, 634 - IRQF_DISABLED, pdev->name, iface); 634 + 0, pdev->name, iface); 635 635 if (rc) { 636 636 dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq); 637 637 return -ENODEV; ··· 702 702 } 703 703 704 704 rc = request_irq(iface->irq, bfin_twi_interrupt_entry, 705 - IRQF_DISABLED, pdev->name, iface); 705 + 0, pdev->name, iface); 706 706 if (rc) { 707 707 dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq); 708 708 rc = -ENODEV;
+105
drivers/i2c/busses/i2c-designware-core.h
··· 1 + /* 2 + * Synopsys DesignWare I2C adapter driver (master only). 3 + * 4 + * Based on the TI DAVINCI I2C adapter driver. 5 + * 6 + * Copyright (C) 2006 Texas Instruments. 7 + * Copyright (C) 2007 MontaVista Software Inc. 8 + * Copyright (C) 2009 Provigent Ltd. 9 + * 10 + * ---------------------------------------------------------------------------- 11 + * 12 + * This program is free software; you can redistribute it and/or modify 13 + * it under the terms of the GNU General Public License as published by 14 + * the Free Software Foundation; either version 2 of the License, or 15 + * (at your option) any later version. 16 + * 17 + * This program is distributed in the hope that it will be useful, 18 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 + * GNU General Public License for more details. 21 + * 22 + * You should have received a copy of the GNU General Public License 23 + * along with this program; if not, write to the Free Software 24 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 + * ---------------------------------------------------------------------------- 26 + * 27 + */ 28 + 29 + 30 + #define DW_IC_CON_MASTER 0x1 31 + #define DW_IC_CON_SPEED_STD 0x2 32 + #define DW_IC_CON_SPEED_FAST 0x4 33 + #define DW_IC_CON_10BITADDR_MASTER 0x10 34 + #define DW_IC_CON_RESTART_EN 0x20 35 + #define DW_IC_CON_SLAVE_DISABLE 0x40 36 + 37 + 38 + /** 39 + * struct dw_i2c_dev - private i2c-designware data 40 + * @dev: driver model device node 41 + * @base: IO registers pointer 42 + * @cmd_complete: tx completion indicator 43 + * @lock: protect this struct and IO registers 44 + * @clk: input reference clock 45 + * @cmd_err: run time hadware error code 46 + * @msgs: points to an array of messages currently being transfered 47 + * @msgs_num: the number of elements in msgs 48 + * @msg_write_idx: the element index of the current tx message in the msgs 49 + * array 50 + * @tx_buf_len: the length of the current tx buffer 51 + * @tx_buf: the current tx buffer 52 + * @msg_read_idx: the element index of the current rx message in the msgs 53 + * array 54 + * @rx_buf_len: the length of the current rx buffer 55 + * @rx_buf: the current rx buffer 56 + * @msg_err: error status of the current transfer 57 + * @status: i2c master status, one of STATUS_* 58 + * @abort_source: copy of the TX_ABRT_SOURCE register 59 + * @irq: interrupt number for the i2c master 60 + * @adapter: i2c subsystem adapter node 61 + * @tx_fifo_depth: depth of the hardware tx fifo 62 + * @rx_fifo_depth: depth of the hardware rx fifo 63 + */ 64 + struct dw_i2c_dev { 65 + struct device *dev; 66 + void __iomem *base; 67 + struct completion cmd_complete; 68 + struct mutex lock; 69 + struct clk *clk; 70 + u32 (*get_clk_rate_khz) (struct dw_i2c_dev *dev); 71 + struct dw_pci_controller *controller; 72 + int cmd_err; 73 + struct i2c_msg *msgs; 74 + int msgs_num; 75 + int msg_write_idx; 76 + u32 tx_buf_len; 77 + u8 *tx_buf; 78 + int msg_read_idx; 79 + u32 rx_buf_len; 80 + u8 *rx_buf; 81 + int msg_err; 82 + unsigned int status; 83 + u32 abort_source; 84 + int irq; 85 + int swab; 86 + struct i2c_adapter adapter; 87 + u32 functionality; 88 + u32 master_cfg; 89 + unsigned int tx_fifo_depth; 90 + unsigned int rx_fifo_depth; 91 + }; 92 + 93 + extern u32 dw_readl(struct dw_i2c_dev *dev, int offset); 94 + extern void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset); 95 + extern int i2c_dw_init(struct dw_i2c_dev *dev); 96 + extern int i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], 97 + int num); 98 + extern u32 i2c_dw_func(struct i2c_adapter *adap); 99 + extern irqreturn_t i2c_dw_isr(int this_irq, void *dev_id); 100 + extern void i2c_dw_enable(struct dw_i2c_dev *dev); 101 + extern u32 i2c_dw_is_enabled(struct dw_i2c_dev *dev); 102 + extern void i2c_dw_disable(struct dw_i2c_dev *dev); 103 + extern void i2c_dw_clear_int(struct dw_i2c_dev *dev); 104 + extern void i2c_dw_disable_int(struct dw_i2c_dev *dev); 105 + extern u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev);
+392
drivers/i2c/busses/i2c-designware-pcidrv.c
··· 1 + /* 2 + * Synopsys DesignWare I2C adapter driver (master only). 3 + * 4 + * Based on the TI DAVINCI I2C adapter driver. 5 + * 6 + * Copyright (C) 2006 Texas Instruments. 7 + * Copyright (C) 2007 MontaVista Software Inc. 8 + * Copyright (C) 2009 Provigent Ltd. 9 + * Copyright (C) 2011 Intel corporation. 10 + * 11 + * ---------------------------------------------------------------------------- 12 + * 13 + * This program is free software; you can redistribute it and/or modify 14 + * it under the terms of the GNU General Public License as published by 15 + * the Free Software Foundation; either version 2 of the License, or 16 + * (at your option) any later version. 17 + * 18 + * This program is distributed in the hope that it will be useful, 19 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 + * GNU General Public License for more details. 22 + * 23 + * You should have received a copy of the GNU General Public License 24 + * along with this program; if not, write to the Free Software 25 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 26 + * ---------------------------------------------------------------------------- 27 + * 28 + */ 29 + 30 + #include <linux/kernel.h> 31 + #include <linux/module.h> 32 + #include <linux/delay.h> 33 + #include <linux/i2c.h> 34 + #include <linux/errno.h> 35 + #include <linux/sched.h> 36 + #include <linux/err.h> 37 + #include <linux/interrupt.h> 38 + #include <linux/io.h> 39 + #include <linux/slab.h> 40 + #include <linux/pci.h> 41 + #include <linux/pm_runtime.h> 42 + #include "i2c-designware-core.h" 43 + 44 + #define DRIVER_NAME "i2c-designware-pci" 45 + 46 + enum dw_pci_ctl_id_t { 47 + moorestown_0, 48 + moorestown_1, 49 + moorestown_2, 50 + 51 + medfield_0, 52 + medfield_1, 53 + medfield_2, 54 + medfield_3, 55 + medfield_4, 56 + medfield_5, 57 + }; 58 + 59 + struct dw_pci_controller { 60 + u32 bus_num; 61 + u32 bus_cfg; 62 + u32 tx_fifo_depth; 63 + u32 rx_fifo_depth; 64 + u32 clk_khz; 65 + }; 66 + 67 + #define INTEL_MID_STD_CFG (DW_IC_CON_MASTER | \ 68 + DW_IC_CON_SLAVE_DISABLE | \ 69 + DW_IC_CON_RESTART_EN) 70 + 71 + static struct dw_pci_controller dw_pci_controllers[] = { 72 + [moorestown_0] = { 73 + .bus_num = 0, 74 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 75 + .tx_fifo_depth = 32, 76 + .rx_fifo_depth = 32, 77 + .clk_khz = 25000, 78 + }, 79 + [moorestown_1] = { 80 + .bus_num = 1, 81 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 82 + .tx_fifo_depth = 32, 83 + .rx_fifo_depth = 32, 84 + .clk_khz = 25000, 85 + }, 86 + [moorestown_2] = { 87 + .bus_num = 2, 88 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 89 + .tx_fifo_depth = 32, 90 + .rx_fifo_depth = 32, 91 + .clk_khz = 25000, 92 + }, 93 + [medfield_0] = { 94 + .bus_num = 0, 95 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 96 + .tx_fifo_depth = 32, 97 + .rx_fifo_depth = 32, 98 + .clk_khz = 25000, 99 + }, 100 + [medfield_1] = { 101 + .bus_num = 1, 102 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 103 + .tx_fifo_depth = 32, 104 + .rx_fifo_depth = 32, 105 + .clk_khz = 25000, 106 + }, 107 + [medfield_2] = { 108 + .bus_num = 2, 109 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 110 + .tx_fifo_depth = 32, 111 + .rx_fifo_depth = 32, 112 + .clk_khz = 25000, 113 + }, 114 + [medfield_3] = { 115 + .bus_num = 3, 116 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_STD, 117 + .tx_fifo_depth = 32, 118 + .rx_fifo_depth = 32, 119 + .clk_khz = 25000, 120 + }, 121 + [medfield_4] = { 122 + .bus_num = 4, 123 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 124 + .tx_fifo_depth = 32, 125 + .rx_fifo_depth = 32, 126 + .clk_khz = 25000, 127 + }, 128 + [medfield_5] = { 129 + .bus_num = 5, 130 + .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST, 131 + .tx_fifo_depth = 32, 132 + .rx_fifo_depth = 32, 133 + .clk_khz = 25000, 134 + }, 135 + }; 136 + static struct i2c_algorithm i2c_dw_algo = { 137 + .master_xfer = i2c_dw_xfer, 138 + .functionality = i2c_dw_func, 139 + }; 140 + 141 + static int i2c_dw_pci_suspend(struct device *dev) 142 + { 143 + struct pci_dev *pdev = container_of(dev, struct pci_dev, dev); 144 + struct dw_i2c_dev *i2c = pci_get_drvdata(pdev); 145 + int err; 146 + 147 + 148 + i2c_dw_disable(i2c); 149 + 150 + err = pci_save_state(pdev); 151 + if (err) { 152 + dev_err(&pdev->dev, "pci_save_state failed\n"); 153 + return err; 154 + } 155 + 156 + err = pci_set_power_state(pdev, PCI_D3hot); 157 + if (err) { 158 + dev_err(&pdev->dev, "pci_set_power_state failed\n"); 159 + return err; 160 + } 161 + 162 + return 0; 163 + } 164 + 165 + static int i2c_dw_pci_resume(struct device *dev) 166 + { 167 + struct pci_dev *pdev = container_of(dev, struct pci_dev, dev); 168 + struct dw_i2c_dev *i2c = pci_get_drvdata(pdev); 169 + int err; 170 + u32 enabled; 171 + 172 + enabled = i2c_dw_is_enabled(i2c); 173 + if (enabled) 174 + return 0; 175 + 176 + err = pci_set_power_state(pdev, PCI_D0); 177 + if (err) { 178 + dev_err(&pdev->dev, "pci_set_power_state() failed\n"); 179 + return err; 180 + } 181 + 182 + pci_restore_state(pdev); 183 + 184 + i2c_dw_init(i2c); 185 + i2c_dw_enable(i2c); 186 + return 0; 187 + } 188 + 189 + static int i2c_dw_pci_runtime_idle(struct device *dev) 190 + { 191 + int err = pm_schedule_suspend(dev, 500); 192 + dev_dbg(dev, "runtime_idle called\n"); 193 + 194 + if (err != 0) 195 + return 0; 196 + return -EBUSY; 197 + } 198 + 199 + static const struct dev_pm_ops i2c_dw_pm_ops = { 200 + .resume = i2c_dw_pci_resume, 201 + .suspend = i2c_dw_pci_suspend, 202 + SET_RUNTIME_PM_OPS(i2c_dw_pci_suspend, i2c_dw_pci_resume, 203 + i2c_dw_pci_runtime_idle) 204 + }; 205 + 206 + static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev) 207 + { 208 + return dev->controller->clk_khz; 209 + } 210 + 211 + static int __devinit i2c_dw_pci_probe(struct pci_dev *pdev, 212 + const struct pci_device_id *id) 213 + { 214 + struct dw_i2c_dev *dev; 215 + struct i2c_adapter *adap; 216 + unsigned long start, len; 217 + void __iomem *base; 218 + int r; 219 + struct dw_pci_controller *controller; 220 + 221 + if (id->driver_data >= ARRAY_SIZE(dw_pci_controllers)) { 222 + printk(KERN_ERR "dw_i2c_pci_probe: invalid driver data %ld\n", 223 + id->driver_data); 224 + return -EINVAL; 225 + } 226 + 227 + controller = &dw_pci_controllers[id->driver_data]; 228 + 229 + r = pci_enable_device(pdev); 230 + if (r) { 231 + dev_err(&pdev->dev, "Failed to enable I2C PCI device (%d)\n", 232 + r); 233 + goto exit; 234 + } 235 + 236 + /* Determine the address of the I2C area */ 237 + start = pci_resource_start(pdev, 0); 238 + len = pci_resource_len(pdev, 0); 239 + if (!start || len == 0) { 240 + dev_err(&pdev->dev, "base address not set\n"); 241 + r = -ENODEV; 242 + goto exit; 243 + } 244 + 245 + r = pci_request_region(pdev, 0, DRIVER_NAME); 246 + if (r) { 247 + dev_err(&pdev->dev, "failed to request I2C region " 248 + "0x%lx-0x%lx\n", start, 249 + (unsigned long)pci_resource_end(pdev, 0)); 250 + goto exit; 251 + } 252 + 253 + base = ioremap_nocache(start, len); 254 + if (!base) { 255 + dev_err(&pdev->dev, "I/O memory remapping failed\n"); 256 + r = -ENOMEM; 257 + goto err_release_region; 258 + } 259 + 260 + 261 + dev = kzalloc(sizeof(struct dw_i2c_dev), GFP_KERNEL); 262 + if (!dev) { 263 + r = -ENOMEM; 264 + goto err_release_region; 265 + } 266 + 267 + init_completion(&dev->cmd_complete); 268 + mutex_init(&dev->lock); 269 + dev->clk = NULL; 270 + dev->controller = controller; 271 + dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; 272 + dev->base = base; 273 + dev->dev = get_device(&pdev->dev); 274 + dev->functionality = 275 + I2C_FUNC_I2C | 276 + I2C_FUNC_SMBUS_BYTE | 277 + I2C_FUNC_SMBUS_BYTE_DATA | 278 + I2C_FUNC_SMBUS_WORD_DATA | 279 + I2C_FUNC_SMBUS_I2C_BLOCK; 280 + dev->master_cfg = controller->bus_cfg; 281 + 282 + pci_set_drvdata(pdev, dev); 283 + 284 + dev->tx_fifo_depth = controller->tx_fifo_depth; 285 + dev->rx_fifo_depth = controller->rx_fifo_depth; 286 + r = i2c_dw_init(dev); 287 + if (r) 288 + goto err_iounmap; 289 + 290 + adap = &dev->adapter; 291 + i2c_set_adapdata(adap, dev); 292 + adap->owner = THIS_MODULE; 293 + adap->class = 0; 294 + adap->algo = &i2c_dw_algo; 295 + adap->dev.parent = &pdev->dev; 296 + adap->nr = controller->bus_num; 297 + snprintf(adap->name, sizeof(adap->name), "i2c-designware-pci-%d", 298 + adap->nr); 299 + 300 + r = request_irq(pdev->irq, i2c_dw_isr, IRQF_SHARED, adap->name, dev); 301 + if (r) { 302 + dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); 303 + goto err_iounmap; 304 + } 305 + 306 + i2c_dw_disable_int(dev); 307 + i2c_dw_clear_int(dev); 308 + r = i2c_add_numbered_adapter(adap); 309 + if (r) { 310 + dev_err(&pdev->dev, "failure adding adapter\n"); 311 + goto err_free_irq; 312 + } 313 + 314 + pm_runtime_put_noidle(&pdev->dev); 315 + pm_runtime_allow(&pdev->dev); 316 + 317 + return 0; 318 + 319 + err_free_irq: 320 + free_irq(pdev->irq, dev); 321 + err_iounmap: 322 + iounmap(dev->base); 323 + pci_set_drvdata(pdev, NULL); 324 + put_device(&pdev->dev); 325 + kfree(dev); 326 + err_release_region: 327 + pci_release_region(pdev, 0); 328 + exit: 329 + return r; 330 + } 331 + 332 + static void __devexit i2c_dw_pci_remove(struct pci_dev *pdev) 333 + { 334 + struct dw_i2c_dev *dev = pci_get_drvdata(pdev); 335 + 336 + i2c_dw_disable(dev); 337 + pm_runtime_forbid(&pdev->dev); 338 + pm_runtime_get_noresume(&pdev->dev); 339 + 340 + pci_set_drvdata(pdev, NULL); 341 + i2c_del_adapter(&dev->adapter); 342 + put_device(&pdev->dev); 343 + 344 + free_irq(dev->irq, dev); 345 + kfree(dev); 346 + pci_release_region(pdev, 0); 347 + } 348 + 349 + /* work with hotplug and coldplug */ 350 + MODULE_ALIAS("i2c_designware-pci"); 351 + 352 + DEFINE_PCI_DEVICE_TABLE(i2_designware_pci_ids) = { 353 + /* Moorestown */ 354 + { PCI_VDEVICE(INTEL, 0x0802), moorestown_0 }, 355 + { PCI_VDEVICE(INTEL, 0x0803), moorestown_1 }, 356 + { PCI_VDEVICE(INTEL, 0x0804), moorestown_2 }, 357 + /* Medfield */ 358 + { PCI_VDEVICE(INTEL, 0x0817), medfield_3,}, 359 + { PCI_VDEVICE(INTEL, 0x0818), medfield_4 }, 360 + { PCI_VDEVICE(INTEL, 0x0819), medfield_5 }, 361 + { PCI_VDEVICE(INTEL, 0x082C), medfield_0 }, 362 + { PCI_VDEVICE(INTEL, 0x082D), medfield_1 }, 363 + { PCI_VDEVICE(INTEL, 0x082E), medfield_2 }, 364 + { 0,} 365 + }; 366 + MODULE_DEVICE_TABLE(pci, i2_designware_pci_ids); 367 + 368 + static struct pci_driver dw_i2c_driver = { 369 + .name = DRIVER_NAME, 370 + .id_table = i2_designware_pci_ids, 371 + .probe = i2c_dw_pci_probe, 372 + .remove = __devexit_p(i2c_dw_pci_remove), 373 + .driver = { 374 + .pm = &i2c_dw_pm_ops, 375 + }, 376 + }; 377 + 378 + static int __init dw_i2c_init_driver(void) 379 + { 380 + return pci_register_driver(&dw_i2c_driver); 381 + } 382 + module_init(dw_i2c_init_driver); 383 + 384 + static void __exit dw_i2c_exit_driver(void) 385 + { 386 + pci_unregister_driver(&dw_i2c_driver); 387 + } 388 + module_exit(dw_i2c_exit_driver); 389 + 390 + MODULE_AUTHOR("Baruch Siach <baruch@tkos.co.il>"); 391 + MODULE_DESCRIPTION("Synopsys DesignWare PCI I2C bus adapter"); 392 + MODULE_LICENSE("GPL");
+215
drivers/i2c/busses/i2c-designware-platdrv.c
··· 1 + /* 2 + * Synopsys DesignWare I2C adapter driver (master only). 3 + * 4 + * Based on the TI DAVINCI I2C adapter driver. 5 + * 6 + * Copyright (C) 2006 Texas Instruments. 7 + * Copyright (C) 2007 MontaVista Software Inc. 8 + * Copyright (C) 2009 Provigent Ltd. 9 + * 10 + * ---------------------------------------------------------------------------- 11 + * 12 + * This program is free software; you can redistribute it and/or modify 13 + * it under the terms of the GNU General Public License as published by 14 + * the Free Software Foundation; either version 2 of the License, or 15 + * (at your option) any later version. 16 + * 17 + * This program is distributed in the hope that it will be useful, 18 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 + * GNU General Public License for more details. 21 + * 22 + * You should have received a copy of the GNU General Public License 23 + * along with this program; if not, write to the Free Software 24 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 + * ---------------------------------------------------------------------------- 26 + * 27 + */ 28 + #include <linux/kernel.h> 29 + #include <linux/module.h> 30 + #include <linux/delay.h> 31 + #include <linux/i2c.h> 32 + #include <linux/clk.h> 33 + #include <linux/errno.h> 34 + #include <linux/sched.h> 35 + #include <linux/err.h> 36 + #include <linux/interrupt.h> 37 + #include <linux/platform_device.h> 38 + #include <linux/io.h> 39 + #include <linux/slab.h> 40 + #include "i2c-designware-core.h" 41 + 42 + static struct i2c_algorithm i2c_dw_algo = { 43 + .master_xfer = i2c_dw_xfer, 44 + .functionality = i2c_dw_func, 45 + }; 46 + static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev) 47 + { 48 + return clk_get_rate(dev->clk)/1000; 49 + } 50 + 51 + static int __devinit dw_i2c_probe(struct platform_device *pdev) 52 + { 53 + struct dw_i2c_dev *dev; 54 + struct i2c_adapter *adap; 55 + struct resource *mem, *ioarea; 56 + int irq, r; 57 + 58 + /* NOTE: driver uses the static register mapping */ 59 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 60 + if (!mem) { 61 + dev_err(&pdev->dev, "no mem resource?\n"); 62 + return -EINVAL; 63 + } 64 + 65 + irq = platform_get_irq(pdev, 0); 66 + if (irq < 0) { 67 + dev_err(&pdev->dev, "no irq resource?\n"); 68 + return irq; /* -ENXIO */ 69 + } 70 + 71 + ioarea = request_mem_region(mem->start, resource_size(mem), 72 + pdev->name); 73 + if (!ioarea) { 74 + dev_err(&pdev->dev, "I2C region already claimed\n"); 75 + return -EBUSY; 76 + } 77 + 78 + dev = kzalloc(sizeof(struct dw_i2c_dev), GFP_KERNEL); 79 + if (!dev) { 80 + r = -ENOMEM; 81 + goto err_release_region; 82 + } 83 + 84 + init_completion(&dev->cmd_complete); 85 + mutex_init(&dev->lock); 86 + dev->dev = get_device(&pdev->dev); 87 + dev->irq = irq; 88 + platform_set_drvdata(pdev, dev); 89 + 90 + dev->clk = clk_get(&pdev->dev, NULL); 91 + dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; 92 + 93 + if (IS_ERR(dev->clk)) { 94 + r = -ENODEV; 95 + goto err_free_mem; 96 + } 97 + clk_enable(dev->clk); 98 + 99 + dev->functionality = 100 + I2C_FUNC_I2C | 101 + I2C_FUNC_10BIT_ADDR | 102 + I2C_FUNC_SMBUS_BYTE | 103 + I2C_FUNC_SMBUS_BYTE_DATA | 104 + I2C_FUNC_SMBUS_WORD_DATA | 105 + I2C_FUNC_SMBUS_I2C_BLOCK; 106 + dev->master_cfg = DW_IC_CON_MASTER | DW_IC_CON_SLAVE_DISABLE | 107 + DW_IC_CON_RESTART_EN | DW_IC_CON_SPEED_FAST; 108 + 109 + dev->base = ioremap(mem->start, resource_size(mem)); 110 + if (dev->base == NULL) { 111 + dev_err(&pdev->dev, "failure mapping io resources\n"); 112 + r = -EBUSY; 113 + goto err_unuse_clocks; 114 + } 115 + { 116 + u32 param1 = i2c_dw_read_comp_param(dev); 117 + 118 + dev->tx_fifo_depth = ((param1 >> 16) & 0xff) + 1; 119 + dev->rx_fifo_depth = ((param1 >> 8) & 0xff) + 1; 120 + } 121 + r = i2c_dw_init(dev); 122 + if (r) 123 + goto err_iounmap; 124 + 125 + i2c_dw_disable_int(dev); 126 + r = request_irq(dev->irq, i2c_dw_isr, IRQF_DISABLED, pdev->name, dev); 127 + if (r) { 128 + dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); 129 + goto err_iounmap; 130 + } 131 + 132 + adap = &dev->adapter; 133 + i2c_set_adapdata(adap, dev); 134 + adap->owner = THIS_MODULE; 135 + adap->class = I2C_CLASS_HWMON; 136 + strlcpy(adap->name, "Synopsys DesignWare I2C adapter", 137 + sizeof(adap->name)); 138 + adap->algo = &i2c_dw_algo; 139 + adap->dev.parent = &pdev->dev; 140 + 141 + adap->nr = pdev->id; 142 + r = i2c_add_numbered_adapter(adap); 143 + if (r) { 144 + dev_err(&pdev->dev, "failure adding adapter\n"); 145 + goto err_free_irq; 146 + } 147 + 148 + return 0; 149 + 150 + err_free_irq: 151 + free_irq(dev->irq, dev); 152 + err_iounmap: 153 + iounmap(dev->base); 154 + err_unuse_clocks: 155 + clk_disable(dev->clk); 156 + clk_put(dev->clk); 157 + dev->clk = NULL; 158 + err_free_mem: 159 + platform_set_drvdata(pdev, NULL); 160 + put_device(&pdev->dev); 161 + kfree(dev); 162 + err_release_region: 163 + release_mem_region(mem->start, resource_size(mem)); 164 + 165 + return r; 166 + } 167 + 168 + static int __devexit dw_i2c_remove(struct platform_device *pdev) 169 + { 170 + struct dw_i2c_dev *dev = platform_get_drvdata(pdev); 171 + struct resource *mem; 172 + 173 + platform_set_drvdata(pdev, NULL); 174 + i2c_del_adapter(&dev->adapter); 175 + put_device(&pdev->dev); 176 + 177 + clk_disable(dev->clk); 178 + clk_put(dev->clk); 179 + dev->clk = NULL; 180 + 181 + i2c_dw_disable(dev); 182 + free_irq(dev->irq, dev); 183 + kfree(dev); 184 + 185 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 186 + release_mem_region(mem->start, resource_size(mem)); 187 + return 0; 188 + } 189 + 190 + /* work with hotplug and coldplug */ 191 + MODULE_ALIAS("platform:i2c_designware"); 192 + 193 + static struct platform_driver dw_i2c_driver = { 194 + .remove = __devexit_p(dw_i2c_remove), 195 + .driver = { 196 + .name = "i2c_designware", 197 + .owner = THIS_MODULE, 198 + }, 199 + }; 200 + 201 + static int __init dw_i2c_init_driver(void) 202 + { 203 + return platform_driver_probe(&dw_i2c_driver, dw_i2c_probe); 204 + } 205 + module_init(dw_i2c_init_driver); 206 + 207 + static void __exit dw_i2c_exit_driver(void) 208 + { 209 + platform_driver_unregister(&dw_i2c_driver); 210 + } 211 + module_exit(dw_i2c_exit_driver); 212 + 213 + MODULE_AUTHOR("Baruch Siach <baruch@tkos.co.il>"); 214 + MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter"); 215 + MODULE_LICENSE("GPL");
+123 -265
drivers/i2c/busses/i2c-designware.c drivers/i2c/busses/i2c-designware-core.c
··· 25 25 * ---------------------------------------------------------------------------- 26 26 * 27 27 */ 28 - #include <linux/kernel.h> 29 - #include <linux/module.h> 30 - #include <linux/delay.h> 31 - #include <linux/i2c.h> 32 28 #include <linux/clk.h> 33 29 #include <linux/errno.h> 34 - #include <linux/sched.h> 35 30 #include <linux/err.h> 31 + #include <linux/i2c.h> 36 32 #include <linux/interrupt.h> 37 - #include <linux/platform_device.h> 38 33 #include <linux/io.h> 39 - #include <linux/slab.h> 34 + #include <linux/pm_runtime.h> 35 + #include <linux/delay.h> 36 + #include "i2c-designware-core.h" 40 37 41 38 /* 42 39 * Registers offset ··· 65 68 #define DW_IC_STATUS 0x70 66 69 #define DW_IC_TXFLR 0x74 67 70 #define DW_IC_RXFLR 0x78 68 - #define DW_IC_COMP_PARAM_1 0xf4 69 71 #define DW_IC_TX_ABRT_SOURCE 0x80 70 - 71 - #define DW_IC_CON_MASTER 0x1 72 - #define DW_IC_CON_SPEED_STD 0x2 73 - #define DW_IC_CON_SPEED_FAST 0x4 74 - #define DW_IC_CON_10BITADDR_MASTER 0x10 75 - #define DW_IC_CON_RESTART_EN 0x20 76 - #define DW_IC_CON_SLAVE_DISABLE 0x40 72 + #define DW_IC_COMP_PARAM_1 0xf4 73 + #define DW_IC_COMP_TYPE 0xfc 74 + #define DW_IC_COMP_TYPE_VALUE 0x44570140 77 75 78 76 #define DW_IC_INTR_RX_UNDER 0x001 79 77 #define DW_IC_INTR_RX_OVER 0x002 ··· 162 170 "lost arbitration", 163 171 }; 164 172 165 - /** 166 - * struct dw_i2c_dev - private i2c-designware data 167 - * @dev: driver model device node 168 - * @base: IO registers pointer 169 - * @cmd_complete: tx completion indicator 170 - * @lock: protect this struct and IO registers 171 - * @clk: input reference clock 172 - * @cmd_err: run time hadware error code 173 - * @msgs: points to an array of messages currently being transferred 174 - * @msgs_num: the number of elements in msgs 175 - * @msg_write_idx: the element index of the current tx message in the msgs 176 - * array 177 - * @tx_buf_len: the length of the current tx buffer 178 - * @tx_buf: the current tx buffer 179 - * @msg_read_idx: the element index of the current rx message in the msgs 180 - * array 181 - * @rx_buf_len: the length of the current rx buffer 182 - * @rx_buf: the current rx buffer 183 - * @msg_err: error status of the current transfer 184 - * @status: i2c master status, one of STATUS_* 185 - * @abort_source: copy of the TX_ABRT_SOURCE register 186 - * @irq: interrupt number for the i2c master 187 - * @adapter: i2c subsystem adapter node 188 - * @tx_fifo_depth: depth of the hardware tx fifo 189 - * @rx_fifo_depth: depth of the hardware rx fifo 190 - */ 191 - struct dw_i2c_dev { 192 - struct device *dev; 193 - void __iomem *base; 194 - struct completion cmd_complete; 195 - struct mutex lock; 196 - struct clk *clk; 197 - int cmd_err; 198 - struct i2c_msg *msgs; 199 - int msgs_num; 200 - int msg_write_idx; 201 - u32 tx_buf_len; 202 - u8 *tx_buf; 203 - int msg_read_idx; 204 - u32 rx_buf_len; 205 - u8 *rx_buf; 206 - int msg_err; 207 - unsigned int status; 208 - u32 abort_source; 209 - int irq; 210 - struct i2c_adapter adapter; 211 - unsigned int tx_fifo_depth; 212 - unsigned int rx_fifo_depth; 213 - }; 173 + u32 dw_readl(struct dw_i2c_dev *dev, int offset) 174 + { 175 + u32 value = readl(dev->base + offset); 176 + 177 + if (dev->swab) 178 + return swab32(value); 179 + else 180 + return value; 181 + } 182 + 183 + void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset) 184 + { 185 + if (dev->swab) 186 + b = swab32(b); 187 + 188 + writel(b, dev->base + offset); 189 + } 214 190 215 191 static u32 216 192 i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset) ··· 243 283 * This function is called during I2C init function, and in case of timeout at 244 284 * run time. 245 285 */ 246 - static void i2c_dw_init(struct dw_i2c_dev *dev) 286 + int i2c_dw_init(struct dw_i2c_dev *dev) 247 287 { 248 - u32 input_clock_khz = clk_get_rate(dev->clk) / 1000; 249 - u32 ic_con, hcnt, lcnt; 288 + u32 input_clock_khz; 289 + u32 hcnt, lcnt; 290 + u32 reg; 291 + 292 + input_clock_khz = dev->get_clk_rate_khz(dev); 293 + 294 + /* Configure register endianess access */ 295 + reg = dw_readl(dev, DW_IC_COMP_TYPE); 296 + if (reg == ___constant_swab32(DW_IC_COMP_TYPE_VALUE)) { 297 + dev->swab = 1; 298 + reg = DW_IC_COMP_TYPE_VALUE; 299 + } 300 + 301 + if (reg != DW_IC_COMP_TYPE_VALUE) { 302 + dev_err(dev->dev, "Unknown Synopsys component type: " 303 + "0x%08x\n", reg); 304 + return -ENODEV; 305 + } 250 306 251 307 /* Disable the adapter */ 252 - writel(0, dev->base + DW_IC_ENABLE); 308 + dw_writel(dev, 0, DW_IC_ENABLE); 253 309 254 310 /* set standard and fast speed deviders for high/low periods */ 255 311 ··· 279 303 47, /* tLOW = 4.7 us */ 280 304 3, /* tf = 0.3 us */ 281 305 0); /* No offset */ 282 - writel(hcnt, dev->base + DW_IC_SS_SCL_HCNT); 283 - writel(lcnt, dev->base + DW_IC_SS_SCL_LCNT); 306 + dw_writel(dev, hcnt, DW_IC_SS_SCL_HCNT); 307 + dw_writel(dev, lcnt, DW_IC_SS_SCL_LCNT); 284 308 dev_dbg(dev->dev, "Standard-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt); 285 309 286 310 /* Fast-mode */ ··· 293 317 13, /* tLOW = 1.3 us */ 294 318 3, /* tf = 0.3 us */ 295 319 0); /* No offset */ 296 - writel(hcnt, dev->base + DW_IC_FS_SCL_HCNT); 297 - writel(lcnt, dev->base + DW_IC_FS_SCL_LCNT); 320 + dw_writel(dev, hcnt, DW_IC_FS_SCL_HCNT); 321 + dw_writel(dev, lcnt, DW_IC_FS_SCL_LCNT); 298 322 dev_dbg(dev->dev, "Fast-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt); 299 323 300 324 /* Configure Tx/Rx FIFO threshold levels */ 301 - writel(dev->tx_fifo_depth - 1, dev->base + DW_IC_TX_TL); 302 - writel(0, dev->base + DW_IC_RX_TL); 325 + dw_writel(dev, dev->tx_fifo_depth - 1, DW_IC_TX_TL); 326 + dw_writel(dev, 0, DW_IC_RX_TL); 303 327 304 328 /* configure the i2c master */ 305 - ic_con = DW_IC_CON_MASTER | DW_IC_CON_SLAVE_DISABLE | 306 - DW_IC_CON_RESTART_EN | DW_IC_CON_SPEED_FAST; 307 - writel(ic_con, dev->base + DW_IC_CON); 329 + dw_writel(dev, dev->master_cfg , DW_IC_CON); 330 + return 0; 308 331 } 309 332 310 333 /* ··· 313 338 { 314 339 int timeout = TIMEOUT; 315 340 316 - while (readl(dev->base + DW_IC_STATUS) & DW_IC_STATUS_ACTIVITY) { 341 + while (dw_readl(dev, DW_IC_STATUS) & DW_IC_STATUS_ACTIVITY) { 317 342 if (timeout <= 0) { 318 343 dev_warn(dev->dev, "timeout waiting for bus ready\n"); 319 344 return -ETIMEDOUT; ··· 331 356 u32 ic_con; 332 357 333 358 /* Disable the adapter */ 334 - writel(0, dev->base + DW_IC_ENABLE); 359 + dw_writel(dev, 0, DW_IC_ENABLE); 335 360 336 361 /* set the slave (target) address */ 337 - writel(msgs[dev->msg_write_idx].addr, dev->base + DW_IC_TAR); 362 + dw_writel(dev, msgs[dev->msg_write_idx].addr, DW_IC_TAR); 338 363 339 364 /* if the slave address is ten bit address, enable 10BITADDR */ 340 - ic_con = readl(dev->base + DW_IC_CON); 365 + ic_con = dw_readl(dev, DW_IC_CON); 341 366 if (msgs[dev->msg_write_idx].flags & I2C_M_TEN) 342 367 ic_con |= DW_IC_CON_10BITADDR_MASTER; 343 368 else 344 369 ic_con &= ~DW_IC_CON_10BITADDR_MASTER; 345 - writel(ic_con, dev->base + DW_IC_CON); 370 + dw_writel(dev, ic_con, DW_IC_CON); 346 371 347 372 /* Enable the adapter */ 348 - writel(1, dev->base + DW_IC_ENABLE); 373 + dw_writel(dev, 1, DW_IC_ENABLE); 349 374 350 375 /* Enable interrupts */ 351 - writel(DW_IC_INTR_DEFAULT_MASK, dev->base + DW_IC_INTR_MASK); 376 + dw_writel(dev, DW_IC_INTR_DEFAULT_MASK, DW_IC_INTR_MASK); 352 377 } 353 378 354 379 /* ··· 357 382 * messages into the tx buffer. Even if the size of i2c_msg data is 358 383 * longer than the size of the tx buffer, it handles everything. 359 384 */ 360 - static void 385 + void 361 386 i2c_dw_xfer_msg(struct dw_i2c_dev *dev) 362 387 { 363 388 struct i2c_msg *msgs = dev->msgs; ··· 395 420 buf_len = msgs[dev->msg_write_idx].len; 396 421 } 397 422 398 - tx_limit = dev->tx_fifo_depth - readl(dev->base + DW_IC_TXFLR); 399 - rx_limit = dev->rx_fifo_depth - readl(dev->base + DW_IC_RXFLR); 423 + tx_limit = dev->tx_fifo_depth - dw_readl(dev, DW_IC_TXFLR); 424 + rx_limit = dev->rx_fifo_depth - dw_readl(dev, DW_IC_RXFLR); 400 425 401 426 while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) { 402 427 if (msgs[dev->msg_write_idx].flags & I2C_M_RD) { 403 - writel(0x100, dev->base + DW_IC_DATA_CMD); 428 + dw_writel(dev, 0x100, DW_IC_DATA_CMD); 404 429 rx_limit--; 405 430 } else 406 - writel(*buf++, dev->base + DW_IC_DATA_CMD); 431 + dw_writel(dev, *buf++, DW_IC_DATA_CMD); 407 432 tx_limit--; buf_len--; 408 433 } 409 434 ··· 428 453 if (dev->msg_err) 429 454 intr_mask = 0; 430 455 431 - writel(intr_mask, dev->base + DW_IC_INTR_MASK); 456 + dw_writel(dev, intr_mask, DW_IC_INTR_MASK); 432 457 } 433 458 434 459 static void ··· 452 477 buf = dev->rx_buf; 453 478 } 454 479 455 - rx_valid = readl(dev->base + DW_IC_RXFLR); 480 + rx_valid = dw_readl(dev, DW_IC_RXFLR); 456 481 457 482 for (; len > 0 && rx_valid > 0; len--, rx_valid--) 458 - *buf++ = readl(dev->base + DW_IC_DATA_CMD); 483 + *buf++ = dw_readl(dev, DW_IC_DATA_CMD); 459 484 460 485 if (len > 0) { 461 486 dev->status |= STATUS_READ_IN_PROGRESS; ··· 493 518 /* 494 519 * Prepare controller for a transaction and call i2c_dw_xfer_msg 495 520 */ 496 - static int 521 + int 497 522 i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) 498 523 { 499 524 struct dw_i2c_dev *dev = i2c_get_adapdata(adap); ··· 502 527 dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num); 503 528 504 529 mutex_lock(&dev->lock); 530 + pm_runtime_get_sync(dev->dev); 505 531 506 532 INIT_COMPLETION(dev->cmd_complete); 507 533 dev->msgs = msgs; ··· 539 563 /* no error */ 540 564 if (likely(!dev->cmd_err)) { 541 565 /* Disable the adapter */ 542 - writel(0, dev->base + DW_IC_ENABLE); 566 + dw_writel(dev, 0, DW_IC_ENABLE); 543 567 ret = num; 544 568 goto done; 545 569 } ··· 552 576 ret = -EIO; 553 577 554 578 done: 579 + pm_runtime_put(dev->dev); 555 580 mutex_unlock(&dev->lock); 556 581 557 582 return ret; 558 583 } 559 584 560 - static u32 i2c_dw_func(struct i2c_adapter *adap) 585 + u32 i2c_dw_func(struct i2c_adapter *adap) 561 586 { 562 - return I2C_FUNC_I2C | 563 - I2C_FUNC_10BIT_ADDR | 564 - I2C_FUNC_SMBUS_BYTE | 565 - I2C_FUNC_SMBUS_BYTE_DATA | 566 - I2C_FUNC_SMBUS_WORD_DATA | 567 - I2C_FUNC_SMBUS_I2C_BLOCK; 587 + struct dw_i2c_dev *dev = i2c_get_adapdata(adap); 588 + return dev->functionality; 568 589 } 569 590 570 591 static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev) ··· 574 601 * in the IC_RAW_INTR_STAT register. 575 602 * 576 603 * That is, 577 - * stat = readl(IC_INTR_STAT); 604 + * stat = dw_readl(IC_INTR_STAT); 578 605 * equals to, 579 - * stat = readl(IC_RAW_INTR_STAT) & readl(IC_INTR_MASK); 606 + * stat = dw_readl(IC_RAW_INTR_STAT) & dw_readl(IC_INTR_MASK); 580 607 * 581 608 * The raw version might be useful for debugging purposes. 582 609 */ 583 - stat = readl(dev->base + DW_IC_INTR_STAT); 610 + stat = dw_readl(dev, DW_IC_INTR_STAT); 584 611 585 612 /* 586 613 * Do not use the IC_CLR_INTR register to clear interrupts, or 587 614 * you'll miss some interrupts, triggered during the period from 588 - * readl(IC_INTR_STAT) to readl(IC_CLR_INTR). 615 + * dw_readl(IC_INTR_STAT) to dw_readl(IC_CLR_INTR). 589 616 * 590 617 * Instead, use the separately-prepared IC_CLR_* registers. 591 618 */ 592 619 if (stat & DW_IC_INTR_RX_UNDER) 593 - readl(dev->base + DW_IC_CLR_RX_UNDER); 620 + dw_readl(dev, DW_IC_CLR_RX_UNDER); 594 621 if (stat & DW_IC_INTR_RX_OVER) 595 - readl(dev->base + DW_IC_CLR_RX_OVER); 622 + dw_readl(dev, DW_IC_CLR_RX_OVER); 596 623 if (stat & DW_IC_INTR_TX_OVER) 597 - readl(dev->base + DW_IC_CLR_TX_OVER); 624 + dw_readl(dev, DW_IC_CLR_TX_OVER); 598 625 if (stat & DW_IC_INTR_RD_REQ) 599 - readl(dev->base + DW_IC_CLR_RD_REQ); 626 + dw_readl(dev, DW_IC_CLR_RD_REQ); 600 627 if (stat & DW_IC_INTR_TX_ABRT) { 601 628 /* 602 629 * The IC_TX_ABRT_SOURCE register is cleared whenever 603 630 * the IC_CLR_TX_ABRT is read. Preserve it beforehand. 604 631 */ 605 - dev->abort_source = readl(dev->base + DW_IC_TX_ABRT_SOURCE); 606 - readl(dev->base + DW_IC_CLR_TX_ABRT); 632 + dev->abort_source = dw_readl(dev, DW_IC_TX_ABRT_SOURCE); 633 + dw_readl(dev, DW_IC_CLR_TX_ABRT); 607 634 } 608 635 if (stat & DW_IC_INTR_RX_DONE) 609 - readl(dev->base + DW_IC_CLR_RX_DONE); 636 + dw_readl(dev, DW_IC_CLR_RX_DONE); 610 637 if (stat & DW_IC_INTR_ACTIVITY) 611 - readl(dev->base + DW_IC_CLR_ACTIVITY); 638 + dw_readl(dev, DW_IC_CLR_ACTIVITY); 612 639 if (stat & DW_IC_INTR_STOP_DET) 613 - readl(dev->base + DW_IC_CLR_STOP_DET); 640 + dw_readl(dev, DW_IC_CLR_STOP_DET); 614 641 if (stat & DW_IC_INTR_START_DET) 615 - readl(dev->base + DW_IC_CLR_START_DET); 642 + dw_readl(dev, DW_IC_CLR_START_DET); 616 643 if (stat & DW_IC_INTR_GEN_CALL) 617 - readl(dev->base + DW_IC_CLR_GEN_CALL); 644 + dw_readl(dev, DW_IC_CLR_GEN_CALL); 618 645 619 646 return stat; 620 647 } ··· 623 650 * Interrupt service routine. This gets called whenever an I2C interrupt 624 651 * occurs. 625 652 */ 626 - static irqreturn_t i2c_dw_isr(int this_irq, void *dev_id) 653 + irqreturn_t i2c_dw_isr(int this_irq, void *dev_id) 627 654 { 628 655 struct dw_i2c_dev *dev = dev_id; 629 - u32 stat; 656 + u32 stat, enabled; 657 + 658 + enabled = dw_readl(dev, DW_IC_ENABLE); 659 + stat = dw_readl(dev, DW_IC_RAW_INTR_STAT); 660 + dev_dbg(dev->dev, "%s: %s enabled= 0x%x stat=0x%x\n", __func__, 661 + dev->adapter.name, enabled, stat); 662 + if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY)) 663 + return IRQ_NONE; 630 664 631 665 stat = i2c_dw_read_clear_intrbits(dev); 632 - dev_dbg(dev->dev, "%s: stat=0x%x\n", __func__, stat); 633 666 634 667 if (stat & DW_IC_INTR_TX_ABRT) { 635 668 dev->cmd_err |= DW_IC_ERR_TX_ABRT; ··· 645 666 * Anytime TX_ABRT is set, the contents of the tx/rx 646 667 * buffers are flushed. Make sure to skip them. 647 668 */ 648 - writel(0, dev->base + DW_IC_INTR_MASK); 669 + dw_writel(dev, 0, DW_IC_INTR_MASK); 649 670 goto tx_aborted; 650 671 } 651 672 ··· 668 689 return IRQ_HANDLED; 669 690 } 670 691 671 - static struct i2c_algorithm i2c_dw_algo = { 672 - .master_xfer = i2c_dw_xfer, 673 - .functionality = i2c_dw_func, 674 - }; 675 - 676 - static int __devinit dw_i2c_probe(struct platform_device *pdev) 692 + void i2c_dw_enable(struct dw_i2c_dev *dev) 677 693 { 678 - struct dw_i2c_dev *dev; 679 - struct i2c_adapter *adap; 680 - struct resource *mem, *ioarea; 681 - int irq, r; 682 - 683 - /* NOTE: driver uses the static register mapping */ 684 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 685 - if (!mem) { 686 - dev_err(&pdev->dev, "no mem resource?\n"); 687 - return -EINVAL; 688 - } 689 - 690 - irq = platform_get_irq(pdev, 0); 691 - if (irq < 0) { 692 - dev_err(&pdev->dev, "no irq resource?\n"); 693 - return irq; /* -ENXIO */ 694 - } 695 - 696 - ioarea = request_mem_region(mem->start, resource_size(mem), 697 - pdev->name); 698 - if (!ioarea) { 699 - dev_err(&pdev->dev, "I2C region already claimed\n"); 700 - return -EBUSY; 701 - } 702 - 703 - dev = kzalloc(sizeof(struct dw_i2c_dev), GFP_KERNEL); 704 - if (!dev) { 705 - r = -ENOMEM; 706 - goto err_release_region; 707 - } 708 - 709 - init_completion(&dev->cmd_complete); 710 - mutex_init(&dev->lock); 711 - dev->dev = get_device(&pdev->dev); 712 - dev->irq = irq; 713 - platform_set_drvdata(pdev, dev); 714 - 715 - dev->clk = clk_get(&pdev->dev, NULL); 716 - if (IS_ERR(dev->clk)) { 717 - r = -ENODEV; 718 - goto err_free_mem; 719 - } 720 - clk_enable(dev->clk); 721 - 722 - dev->base = ioremap(mem->start, resource_size(mem)); 723 - if (dev->base == NULL) { 724 - dev_err(&pdev->dev, "failure mapping io resources\n"); 725 - r = -EBUSY; 726 - goto err_unuse_clocks; 727 - } 728 - { 729 - u32 param1 = readl(dev->base + DW_IC_COMP_PARAM_1); 730 - 731 - dev->tx_fifo_depth = ((param1 >> 16) & 0xff) + 1; 732 - dev->rx_fifo_depth = ((param1 >> 8) & 0xff) + 1; 733 - } 734 - i2c_dw_init(dev); 735 - 736 - writel(0, dev->base + DW_IC_INTR_MASK); /* disable IRQ */ 737 - r = request_irq(dev->irq, i2c_dw_isr, IRQF_DISABLED, pdev->name, dev); 738 - if (r) { 739 - dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); 740 - goto err_iounmap; 741 - } 742 - 743 - adap = &dev->adapter; 744 - i2c_set_adapdata(adap, dev); 745 - adap->owner = THIS_MODULE; 746 - adap->class = I2C_CLASS_HWMON; 747 - strlcpy(adap->name, "Synopsys DesignWare I2C adapter", 748 - sizeof(adap->name)); 749 - adap->algo = &i2c_dw_algo; 750 - adap->dev.parent = &pdev->dev; 751 - 752 - adap->nr = pdev->id; 753 - r = i2c_add_numbered_adapter(adap); 754 - if (r) { 755 - dev_err(&pdev->dev, "failure adding adapter\n"); 756 - goto err_free_irq; 757 - } 758 - 759 - return 0; 760 - 761 - err_free_irq: 762 - free_irq(dev->irq, dev); 763 - err_iounmap: 764 - iounmap(dev->base); 765 - err_unuse_clocks: 766 - clk_disable(dev->clk); 767 - clk_put(dev->clk); 768 - dev->clk = NULL; 769 - err_free_mem: 770 - platform_set_drvdata(pdev, NULL); 771 - put_device(&pdev->dev); 772 - kfree(dev); 773 - err_release_region: 774 - release_mem_region(mem->start, resource_size(mem)); 775 - 776 - return r; 694 + /* Enable the adapter */ 695 + dw_writel(dev, 1, DW_IC_ENABLE); 777 696 } 778 697 779 - static int __devexit dw_i2c_remove(struct platform_device *pdev) 698 + u32 i2c_dw_is_enabled(struct dw_i2c_dev *dev) 780 699 { 781 - struct dw_i2c_dev *dev = platform_get_drvdata(pdev); 782 - struct resource *mem; 783 - 784 - platform_set_drvdata(pdev, NULL); 785 - i2c_del_adapter(&dev->adapter); 786 - put_device(&pdev->dev); 787 - 788 - clk_disable(dev->clk); 789 - clk_put(dev->clk); 790 - dev->clk = NULL; 791 - 792 - writel(0, dev->base + DW_IC_ENABLE); 793 - free_irq(dev->irq, dev); 794 - kfree(dev); 795 - 796 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 797 - release_mem_region(mem->start, resource_size(mem)); 798 - return 0; 700 + return dw_readl(dev, DW_IC_ENABLE); 799 701 } 800 702 801 - /* work with hotplug and coldplug */ 802 - MODULE_ALIAS("platform:i2c_designware"); 803 - 804 - static struct platform_driver dw_i2c_driver = { 805 - .remove = __devexit_p(dw_i2c_remove), 806 - .driver = { 807 - .name = "i2c_designware", 808 - .owner = THIS_MODULE, 809 - }, 810 - }; 811 - 812 - static int __init dw_i2c_init_driver(void) 703 + void i2c_dw_disable(struct dw_i2c_dev *dev) 813 704 { 814 - return platform_driver_probe(&dw_i2c_driver, dw_i2c_probe); 815 - } 816 - module_init(dw_i2c_init_driver); 705 + /* Disable controller */ 706 + dw_writel(dev, 0, DW_IC_ENABLE); 817 707 818 - static void __exit dw_i2c_exit_driver(void) 708 + /* Disable all interupts */ 709 + dw_writel(dev, 0, DW_IC_INTR_MASK); 710 + dw_readl(dev, DW_IC_CLR_INTR); 711 + } 712 + 713 + void i2c_dw_clear_int(struct dw_i2c_dev *dev) 819 714 { 820 - platform_driver_unregister(&dw_i2c_driver); 715 + dw_readl(dev, DW_IC_CLR_INTR); 821 716 } 822 - module_exit(dw_i2c_exit_driver); 823 717 824 - MODULE_AUTHOR("Baruch Siach <baruch@tkos.co.il>"); 825 - MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter"); 826 - MODULE_LICENSE("GPL"); 718 + void i2c_dw_disable_int(struct dw_i2c_dev *dev) 719 + { 720 + dw_writel(dev, 0, DW_IC_INTR_MASK); 721 + } 722 + 723 + u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev) 724 + { 725 + return dw_readl(dev, DW_IC_COMP_PARAM_1); 726 + }
+202 -80
drivers/i2c/busses/i2c-eg20t.c
··· 64 64 #define TEN_BIT_ADDR_DEFAULT 0xF000 65 65 #define TEN_BIT_ADDR_MASK 0xF0 66 66 #define PCH_START 0x0020 67 + #define PCH_RESTART 0x0004 67 68 #define PCH_ESR_START 0x0001 68 69 #define PCH_BUFF_START 0x1 69 70 #define PCH_REPSTART 0x0004 ··· 274 273 s32 timeout) 275 274 { 276 275 void __iomem *p = adap->pch_base_address; 276 + ktime_t ns_val; 277 + 278 + if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0) 279 + return 0; 277 280 278 281 /* MAX timeout value is timeout*1000*1000nsec */ 279 - ktime_t ns_val = ktime_add_ns(ktime_get(), timeout*1000*1000); 282 + ns_val = ktime_add_ns(ktime_get(), timeout*1000*1000); 280 283 do { 281 - if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0) 282 - break; 283 284 msleep(20); 285 + if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0) 286 + return 0; 284 287 } while (ktime_lt(ktime_get(), ns_val)); 285 288 286 289 pch_dbg(adap, "I2CSR = %x\n", ioread32(p + PCH_I2CSR)); 290 + pch_err(adap, "%s: Timeout Error.return%d\n", __func__, -ETIME); 291 + pch_i2c_init(adap); 287 292 288 - if (timeout == 0) { 289 - pch_err(adap, "%s: Timeout Error.return%d\n", __func__, -ETIME); 290 - return -ETIME; 291 - } 292 - 293 - return 0; 293 + return -ETIME; 294 294 } 295 295 296 296 /** ··· 313 311 */ 314 312 static s32 pch_i2c_wait_for_xfer_complete(struct i2c_algo_pch_data *adap) 315 313 { 316 - s32 ret; 314 + long ret; 317 315 ret = wait_event_timeout(pch_event, 318 316 (adap->pch_event_flag != 0), msecs_to_jiffies(50)); 319 - if (ret < 0) { 320 - pch_err(adap, "timeout: %x\n", adap->pch_event_flag); 321 - return ret; 322 - } 323 317 324 318 if (ret == 0) { 325 319 pch_err(adap, "timeout: %x\n", adap->pch_event_flag); 320 + adap->pch_event_flag = 0; 326 321 return -ETIMEDOUT; 327 322 } 328 323 329 324 if (adap->pch_event_flag & I2C_ERROR_MASK) { 330 325 pch_err(adap, "error bits set: %x\n", adap->pch_event_flag); 326 + adap->pch_event_flag = 0; 331 327 return -EIO; 332 328 } 333 329 ··· 394 394 u32 addr_2_msb; 395 395 u32 addr_8_lsb; 396 396 s32 wrcount; 397 + s32 rtn; 397 398 void __iomem *p = adap->pch_base_address; 398 399 399 400 length = msgs->len; ··· 413 412 } 414 413 415 414 if (msgs->flags & I2C_M_TEN) { 416 - addr_2_msb = ((addr & I2C_MSB_2B_MSK) >> 7); 415 + addr_2_msb = ((addr & I2C_MSB_2B_MSK) >> 7) & 0x06; 417 416 iowrite32(addr_2_msb | TEN_BIT_ADDR_MASK, p + PCH_I2CDR); 418 417 if (first) 419 418 pch_i2c_start(adap); 420 - if (pch_i2c_wait_for_xfer_complete(adap) == 0 && 421 - pch_i2c_getack(adap) == 0) { 419 + 420 + rtn = pch_i2c_wait_for_xfer_complete(adap); 421 + if (rtn == 0) { 422 + if (pch_i2c_getack(adap)) { 423 + pch_dbg(adap, "Receive NACK for slave address" 424 + "setting\n"); 425 + return -EIO; 426 + } 422 427 addr_8_lsb = (addr & I2C_ADDR_MSK); 423 428 iowrite32(addr_8_lsb, p + PCH_I2CDR); 424 - } else { 429 + } else if (rtn == -EIO) { /* Arbitration Lost */ 430 + pch_err(adap, "Lost Arbitration\n"); 431 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 432 + I2CMAL_BIT); 433 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 434 + I2CMIF_BIT); 435 + pch_i2c_init(adap); 436 + return -EAGAIN; 437 + } else { /* wait-event timeout */ 425 438 pch_i2c_stop(adap); 426 439 return -ETIME; 427 440 } ··· 446 431 pch_i2c_start(adap); 447 432 } 448 433 449 - if ((pch_i2c_wait_for_xfer_complete(adap) == 0) && 450 - (pch_i2c_getack(adap) == 0)) { 451 - for (wrcount = 0; wrcount < length; ++wrcount) { 452 - /* write buffer value to I2C data register */ 453 - iowrite32(buf[wrcount], p + PCH_I2CDR); 454 - pch_dbg(adap, "writing %x to Data register\n", 455 - buf[wrcount]); 456 - 457 - if (pch_i2c_wait_for_xfer_complete(adap) != 0) 458 - return -ETIME; 459 - 460 - if (pch_i2c_getack(adap)) 461 - return -EIO; 434 + rtn = pch_i2c_wait_for_xfer_complete(adap); 435 + if (rtn == 0) { 436 + if (pch_i2c_getack(adap)) { 437 + pch_dbg(adap, "Receive NACK for slave address" 438 + "setting\n"); 439 + return -EIO; 462 440 } 463 - 464 - /* check if this is the last message */ 465 - if (last) 466 - pch_i2c_stop(adap); 467 - else 468 - pch_i2c_repstart(adap); 469 - } else { 441 + } else if (rtn == -EIO) { /* Arbitration Lost */ 442 + pch_err(adap, "Lost Arbitration\n"); 443 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, I2CMAL_BIT); 444 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, I2CMIF_BIT); 445 + pch_i2c_init(adap); 446 + return -EAGAIN; 447 + } else { /* wait-event timeout */ 470 448 pch_i2c_stop(adap); 471 - return -EIO; 449 + return -ETIME; 472 450 } 451 + 452 + for (wrcount = 0; wrcount < length; ++wrcount) { 453 + /* write buffer value to I2C data register */ 454 + iowrite32(buf[wrcount], p + PCH_I2CDR); 455 + pch_dbg(adap, "writing %x to Data register\n", buf[wrcount]); 456 + 457 + rtn = pch_i2c_wait_for_xfer_complete(adap); 458 + if (rtn == 0) { 459 + if (pch_i2c_getack(adap)) { 460 + pch_dbg(adap, "Receive NACK for slave address" 461 + "setting\n"); 462 + return -EIO; 463 + } 464 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 465 + I2CMCF_BIT); 466 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 467 + I2CMIF_BIT); 468 + } else { /* wait-event timeout */ 469 + pch_i2c_stop(adap); 470 + return -ETIME; 471 + } 472 + } 473 + 474 + /* check if this is the last message */ 475 + if (last) 476 + pch_i2c_stop(adap); 477 + else 478 + pch_i2c_repstart(adap); 473 479 474 480 pch_dbg(adap, "return=%d\n", wrcount); 475 481 ··· 520 484 } 521 485 522 486 /** 487 + * pch_i2c_restart() - Generate I2C restart condition in normal mode. 488 + * @adap: Pointer to struct i2c_algo_pch_data. 489 + * 490 + * Generate I2C restart condition in normal mode by setting I2CCTL.I2CRSTA. 491 + */ 492 + static void pch_i2c_restart(struct i2c_algo_pch_data *adap) 493 + { 494 + void __iomem *p = adap->pch_base_address; 495 + pch_dbg(adap, "I2CCTL = %x\n", ioread32(p + PCH_I2CCTL)); 496 + pch_setbit(adap->pch_base_address, PCH_I2CCTL, PCH_RESTART); 497 + } 498 + 499 + /** 523 500 * pch_i2c_readbytes() - read data from I2C bus in normal mode. 524 501 * @i2c_adap: Pointer to the struct i2c_adapter. 525 502 * @msgs: Pointer to i2c_msg structure. ··· 549 500 u32 length; 550 501 u32 addr; 551 502 u32 addr_2_msb; 503 + u32 addr_8_lsb; 552 504 void __iomem *p = adap->pch_base_address; 505 + s32 rtn; 553 506 554 507 length = msgs->len; 555 508 buf = msgs->buf; ··· 566 515 } 567 516 568 517 if (msgs->flags & I2C_M_TEN) { 569 - addr_2_msb = (((addr & I2C_MSB_2B_MSK) >> 7) | (I2C_RD)); 518 + addr_2_msb = ((addr & I2C_MSB_2B_MSK) >> 7); 570 519 iowrite32(addr_2_msb | TEN_BIT_ADDR_MASK, p + PCH_I2CDR); 520 + if (first) 521 + pch_i2c_start(adap); 571 522 523 + rtn = pch_i2c_wait_for_xfer_complete(adap); 524 + if (rtn == 0) { 525 + if (pch_i2c_getack(adap)) { 526 + pch_dbg(adap, "Receive NACK for slave address" 527 + "setting\n"); 528 + return -EIO; 529 + } 530 + addr_8_lsb = (addr & I2C_ADDR_MSK); 531 + iowrite32(addr_8_lsb, p + PCH_I2CDR); 532 + } else if (rtn == -EIO) { /* Arbitration Lost */ 533 + pch_err(adap, "Lost Arbitration\n"); 534 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 535 + I2CMAL_BIT); 536 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 537 + I2CMIF_BIT); 538 + pch_i2c_init(adap); 539 + return -EAGAIN; 540 + } else { /* wait-event timeout */ 541 + pch_i2c_stop(adap); 542 + return -ETIME; 543 + } 544 + pch_i2c_restart(adap); 545 + rtn = pch_i2c_wait_for_xfer_complete(adap); 546 + if (rtn == 0) { 547 + if (pch_i2c_getack(adap)) { 548 + pch_dbg(adap, "Receive NACK for slave address" 549 + "setting\n"); 550 + return -EIO; 551 + } 552 + addr_2_msb |= I2C_RD; 553 + iowrite32(addr_2_msb | TEN_BIT_ADDR_MASK, 554 + p + PCH_I2CDR); 555 + } else if (rtn == -EIO) { /* Arbitration Lost */ 556 + pch_err(adap, "Lost Arbitration\n"); 557 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 558 + I2CMAL_BIT); 559 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, 560 + I2CMIF_BIT); 561 + pch_i2c_init(adap); 562 + return -EAGAIN; 563 + } else { /* wait-event timeout */ 564 + pch_i2c_stop(adap); 565 + return -ETIME; 566 + } 572 567 } else { 573 568 /* 7 address bits + R/W bit */ 574 569 addr = (((addr) << 1) | (I2C_RD)); ··· 625 528 if (first) 626 529 pch_i2c_start(adap); 627 530 628 - if ((pch_i2c_wait_for_xfer_complete(adap) == 0) && 629 - (pch_i2c_getack(adap) == 0)) { 630 - pch_dbg(adap, "return %d\n", 0); 531 + rtn = pch_i2c_wait_for_xfer_complete(adap); 532 + if (rtn == 0) { 533 + if (pch_i2c_getack(adap)) { 534 + pch_dbg(adap, "Receive NACK for slave address" 535 + "setting\n"); 536 + return -EIO; 537 + } 538 + } else if (rtn == -EIO) { /* Arbitration Lost */ 539 + pch_err(adap, "Lost Arbitration\n"); 540 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, I2CMAL_BIT); 541 + pch_clrbit(adap->pch_base_address, PCH_I2CSR, I2CMIF_BIT); 542 + pch_i2c_init(adap); 543 + return -EAGAIN; 544 + } else { /* wait-event timeout */ 545 + pch_i2c_stop(adap); 546 + return -ETIME; 547 + } 631 548 632 - if (length == 0) { 633 - pch_i2c_stop(adap); 634 - ioread32(p + PCH_I2CDR); /* Dummy read needs */ 549 + if (length == 0) { 550 + pch_i2c_stop(adap); 551 + ioread32(p + PCH_I2CDR); /* Dummy read needs */ 635 552 636 - count = length; 637 - } else { 638 - int read_index; 639 - int loop; 640 - pch_i2c_sendack(adap); 553 + count = length; 554 + } else { 555 + int read_index; 556 + int loop; 557 + pch_i2c_sendack(adap); 641 558 642 - /* Dummy read */ 643 - for (loop = 1, read_index = 0; loop < length; loop++) { 644 - buf[read_index] = ioread32(p + PCH_I2CDR); 645 - 646 - if (loop != 1) 647 - read_index++; 648 - 649 - if (pch_i2c_wait_for_xfer_complete(adap) != 0) { 650 - pch_i2c_stop(adap); 651 - return -ETIME; 652 - } 653 - } /* end for */ 654 - 655 - pch_i2c_sendnack(adap); 656 - 559 + /* Dummy read */ 560 + for (loop = 1, read_index = 0; loop < length; loop++) { 657 561 buf[read_index] = ioread32(p + PCH_I2CDR); 658 562 659 - if (length != 1) 563 + if (loop != 1) 660 564 read_index++; 661 565 662 - if (pch_i2c_wait_for_xfer_complete(adap) == 0) { 663 - if (last) 664 - pch_i2c_stop(adap); 665 - else 666 - pch_i2c_repstart(adap); 667 - 668 - buf[read_index++] = ioread32(p + PCH_I2CDR); 669 - count = read_index; 670 - } else { 671 - count = -ETIME; 566 + rtn = pch_i2c_wait_for_xfer_complete(adap); 567 + if (rtn == 0) { 568 + if (pch_i2c_getack(adap)) { 569 + pch_dbg(adap, "Receive NACK for slave" 570 + "address setting\n"); 571 + return -EIO; 572 + } 573 + } else { /* wait-event timeout */ 574 + pch_i2c_stop(adap); 575 + return -ETIME; 672 576 } 673 577 578 + } /* end for */ 579 + 580 + pch_i2c_sendnack(adap); 581 + 582 + buf[read_index] = ioread32(p + PCH_I2CDR); /* Read final - 1 */ 583 + 584 + if (length != 1) 585 + read_index++; 586 + 587 + rtn = pch_i2c_wait_for_xfer_complete(adap); 588 + if (rtn == 0) { 589 + if (pch_i2c_getack(adap)) { 590 + pch_dbg(adap, "Receive NACK for slave" 591 + "address setting\n"); 592 + return -EIO; 593 + } 594 + } else { /* wait-event timeout */ 595 + pch_i2c_stop(adap); 596 + return -ETIME; 674 597 } 675 - } else { 676 - count = -ETIME; 677 - pch_i2c_stop(adap); 598 + 599 + if (last) 600 + pch_i2c_stop(adap); 601 + else 602 + pch_i2c_repstart(adap); 603 + 604 + buf[read_index++] = ioread32(p + PCH_I2CDR); /* Read Final */ 605 + count = read_index; 678 606 } 679 607 680 608 return count;
+1 -1
drivers/i2c/busses/i2c-highlander.c
··· 387 387 dev->irq = 0; 388 388 389 389 if (dev->irq) { 390 - ret = request_irq(dev->irq, highlander_i2c_irq, IRQF_DISABLED, 390 + ret = request_irq(dev->irq, highlander_i2c_irq, 0, 391 391 pdev->name, dev); 392 392 if (unlikely(ret)) 393 393 goto err_unmap;
+22 -24
drivers/i2c/busses/i2c-imx.c
··· 48 48 #include <linux/platform_device.h> 49 49 #include <linux/clk.h> 50 50 #include <linux/slab.h> 51 + #include <linux/of.h> 52 + #include <linux/of_device.h> 53 + #include <linux/of_i2c.h> 51 54 52 55 #include <mach/irqs.h> 53 56 #include <mach/hardware.h> ··· 126 123 unsigned int disable_delay; 127 124 int stopped; 128 125 unsigned int ifdr; /* IMX_I2C_IFDR */ 126 + }; 127 + 128 + static const struct of_device_id i2c_imx_dt_ids[] = { 129 + { .compatible = "fsl,imx1-i2c", }, 130 + { /* sentinel */ } 129 131 }; 130 132 131 133 /** Functions for IMX I2C adapter driver *************************************** ··· 474 466 { 475 467 struct imx_i2c_struct *i2c_imx; 476 468 struct resource *res; 477 - struct imxi2c_platform_data *pdata; 469 + struct imxi2c_platform_data *pdata = pdev->dev.platform_data; 478 470 void __iomem *base; 479 471 resource_size_t res_size; 480 - int irq; 472 + int irq, bitrate; 481 473 int ret; 482 474 483 475 dev_dbg(&pdev->dev, "<%s>\n", __func__); ··· 493 485 return -ENOENT; 494 486 } 495 487 496 - pdata = pdev->dev.platform_data; 497 - 498 - if (pdata && pdata->init) { 499 - ret = pdata->init(&pdev->dev); 500 - if (ret) 501 - return ret; 502 - } 503 - 504 488 res_size = resource_size(res); 505 489 506 490 if (!request_mem_region(res->start, res_size, DRIVER_NAME)) { 507 - ret = -EBUSY; 508 - goto fail0; 491 + dev_err(&pdev->dev, "request_mem_region failed\n"); 492 + return -EBUSY; 509 493 } 510 494 511 495 base = ioremap(res->start, res_size); ··· 520 520 i2c_imx->adapter.algo = &i2c_imx_algo; 521 521 i2c_imx->adapter.dev.parent = &pdev->dev; 522 522 i2c_imx->adapter.nr = pdev->id; 523 + i2c_imx->adapter.dev.of_node = pdev->dev.of_node; 523 524 i2c_imx->irq = irq; 524 525 i2c_imx->base = base; 525 526 i2c_imx->res = res; ··· 547 546 i2c_set_adapdata(&i2c_imx->adapter, i2c_imx); 548 547 549 548 /* Set up clock divider */ 550 - if (pdata && pdata->bitrate) 551 - i2c_imx_set_clk(i2c_imx, pdata->bitrate); 552 - else 553 - i2c_imx_set_clk(i2c_imx, IMX_I2C_BIT_RATE); 549 + bitrate = IMX_I2C_BIT_RATE; 550 + ret = of_property_read_u32(pdev->dev.of_node, 551 + "clock-frequency", &bitrate); 552 + if (ret < 0 && pdata && pdata->bitrate) 553 + bitrate = pdata->bitrate; 554 + i2c_imx_set_clk(i2c_imx, bitrate); 554 555 555 556 /* Set up chip registers to defaults */ 556 557 writeb(0, i2c_imx->base + IMX_I2C_I2CR); ··· 564 561 dev_err(&pdev->dev, "registration failed\n"); 565 562 goto fail5; 566 563 } 564 + 565 + of_i2c_register_devices(&i2c_imx->adapter); 567 566 568 567 /* Set up platform driver data */ 569 568 platform_set_drvdata(pdev, i2c_imx); ··· 591 586 iounmap(base); 592 587 fail1: 593 588 release_mem_region(res->start, resource_size(res)); 594 - fail0: 595 - if (pdata && pdata->exit) 596 - pdata->exit(&pdev->dev); 597 589 return ret; /* Return error number */ 598 590 } 599 591 600 592 static int __exit i2c_imx_remove(struct platform_device *pdev) 601 593 { 602 594 struct imx_i2c_struct *i2c_imx = platform_get_drvdata(pdev); 603 - struct imxi2c_platform_data *pdata = pdev->dev.platform_data; 604 595 605 596 /* remove adapter */ 606 597 dev_dbg(&i2c_imx->adapter.dev, "adapter removed\n"); ··· 612 611 writeb(0, i2c_imx->base + IMX_I2C_I2CR); 613 612 writeb(0, i2c_imx->base + IMX_I2C_I2SR); 614 613 615 - /* Shut down hardware */ 616 - if (pdata && pdata->exit) 617 - pdata->exit(&pdev->dev); 618 - 619 614 clk_put(i2c_imx->clk); 620 615 621 616 iounmap(i2c_imx->base); ··· 625 628 .driver = { 626 629 .name = DRIVER_NAME, 627 630 .owner = THIS_MODULE, 631 + .of_match_table = i2c_imx_dt_ids, 628 632 } 629 633 }; 630 634
+47 -44
drivers/i2c/busses/i2c-nomadik.c
··· 63 63 /* Master controller (MCR) register */ 64 64 #define I2C_MCR_OP (0x1 << 0) /* Operation */ 65 65 #define I2C_MCR_A7 (0x7f << 1) /* 7-bit address */ 66 - #define I2C_MCR_EA10 (0x7 << 8) /* 10-bit Extended address */ 66 + #define I2C_MCR_EA10 (0x7 << 8) /* 10-bit Extended address */ 67 67 #define I2C_MCR_SB (0x1 << 11) /* Extended address */ 68 68 #define I2C_MCR_AM (0x3 << 12) /* Address type */ 69 - #define I2C_MCR_STOP (0x1 << 14) /* Stop condition */ 70 - #define I2C_MCR_LENGTH (0x7ff << 15) /* Transaction length */ 69 + #define I2C_MCR_STOP (0x1 << 14) /* Stop condition */ 70 + #define I2C_MCR_LENGTH (0x7ff << 15) /* Transaction length */ 71 71 72 72 /* Status register (SR) */ 73 73 #define I2C_SR_OP (0x3 << 0) /* Operation */ ··· 77 77 #define I2C_SR_LENGTH (0x7ff << 9) /* Transfer length */ 78 78 79 79 /* Interrupt mask set/clear (IMSCR) bits */ 80 - #define I2C_IT_TXFE (0x1 << 0) 80 + #define I2C_IT_TXFE (0x1 << 0) 81 81 #define I2C_IT_TXFNE (0x1 << 1) 82 82 #define I2C_IT_TXFF (0x1 << 2) 83 83 #define I2C_IT_TXFOVR (0x1 << 3) ··· 135 135 }; 136 136 137 137 /** 138 - * struct nmk_i2c_dev - private data structure of the controller 139 - * @pdev: parent platform device 140 - * @adap: corresponding I2C adapter 141 - * @irq: interrupt line for the controller 142 - * @virtbase: virtual io memory area 143 - * @clk: hardware i2c block clock 144 - * @cfg: machine provided controller configuration 145 - * @cli: holder of client specific data 146 - * @stop: stop condition 147 - * @xfer_complete: acknowledge completion for a I2C message 148 - * @result: controller propogated result 149 - * @regulator: pointer to i2c regulator 150 - * @busy: Busy doing transfer 138 + * struct nmk_i2c_dev - private data structure of the controller. 139 + * @pdev: parent platform device. 140 + * @adap: corresponding I2C adapter. 141 + * @irq: interrupt line for the controller. 142 + * @virtbase: virtual io memory area. 143 + * @clk: hardware i2c block clock. 144 + * @cfg: machine provided controller configuration. 145 + * @cli: holder of client specific data. 146 + * @stop: stop condition. 147 + * @xfer_complete: acknowledge completion for a I2C message. 148 + * @result: controller propogated result. 149 + * @regulator: pointer to i2c regulator. 150 + * @busy: Busy doing transfer. 151 151 */ 152 152 struct nmk_i2c_dev { 153 153 struct platform_device *pdev; 154 - struct i2c_adapter adap; 155 - int irq; 154 + struct i2c_adapter adap; 155 + int irq; 156 156 void __iomem *virtbase; 157 157 struct clk *clk; 158 158 struct nmk_i2c_controller cfg; 159 159 struct i2c_nmk_client cli; 160 - int stop; 160 + int stop; 161 161 struct completion xfer_complete; 162 - int result; 162 + int result; 163 163 struct regulator *regulator; 164 164 bool busy; 165 165 }; ··· 217 217 } 218 218 } 219 219 220 - dev_err(&dev->pdev->dev, "flushing operation timed out " 221 - "giving up after %d attempts", LOOP_ATTEMPTS); 220 + dev_err(&dev->pdev->dev, 221 + "flushing operation timed out giving up after %d attempts", 222 + LOOP_ATTEMPTS); 222 223 223 224 return -ETIMEDOUT; 224 225 } ··· 271 270 } 272 271 273 272 /* enable peripheral, master mode operation */ 274 - #define DEFAULT_I2C_REG_CR ((1 << 1) | I2C_CR_PE) 273 + #define DEFAULT_I2C_REG_CR ((1 << 1) | I2C_CR_PE) 275 274 276 275 /** 277 276 * load_i2c_mcr_reg() - load the MCR register ··· 364 363 * and high speed (up to 3.4 Mb/s) 365 364 */ 366 365 if (dev->cfg.sm > I2C_FREQ_MODE_FAST) { 367 - dev_err(&dev->pdev->dev, "do not support this mode " 368 - "defaulting to std. mode\n"); 366 + dev_err(&dev->pdev->dev, 367 + "do not support this mode defaulting to std. mode\n"); 369 368 brcr2 = i2c_clk/(100000 * 2) & 0xffff; 370 369 writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR); 371 370 writel(I2C_FREQ_MODE_STANDARD << 4, ··· 424 423 425 424 if (timeout < 0) { 426 425 dev_err(&dev->pdev->dev, 427 - "wait_for_completion_timeout" 426 + "wait_for_completion_timeout " 428 427 "returned %d waiting for event\n", timeout); 429 428 status = timeout; 430 429 } ··· 557 556 if (((i2c_sr >> 2) & 0x3) == 0x3) { 558 557 /* get the abort cause */ 559 558 cause = (i2c_sr >> 4) & 0x7; 560 - dev_err(&dev->pdev->dev, "%s\n", cause 561 - >= ARRAY_SIZE(abort_causes) ? 559 + dev_err(&dev->pdev->dev, "%s\n", 560 + cause >= ARRAY_SIZE(abort_causes) ? 562 561 "unknown reason" : 563 562 abort_causes[cause]); 564 563 } ··· 583 582 * 584 583 * NOTE: 585 584 * READ TRANSFER : We impose a restriction of the first message to be the 586 - * index message for any read transaction. 587 - * - a no index is coded as '0', 588 - * - 2byte big endian index is coded as '3' 589 - * !!! msg[0].buf holds the actual index. 590 - * This is compatible with generic messages of smbus emulator 591 - * that send a one byte index. 592 - * eg. a I2C transation to read 2 bytes from index 0 585 + * index message for any read transaction. 586 + * - a no index is coded as '0', 587 + * - 2byte big endian index is coded as '3' 588 + * !!! msg[0].buf holds the actual index. 589 + * This is compatible with generic messages of smbus emulator 590 + * that send a one byte index. 591 + * eg. a I2C transation to read 2 bytes from index 0 593 592 * idx = 0; 594 593 * msg[0].addr = client->addr; 595 594 * msg[0].flags = 0x0; ··· 645 644 646 645 for (i = 0; i < num_msgs; i++) { 647 646 if (unlikely(msgs[i].flags & I2C_M_TEN)) { 648 - dev_err(&dev->pdev->dev, "10 bit addressing" 649 - "not supported\n"); 647 + dev_err(&dev->pdev->dev, 648 + "10 bit addressing not supported\n"); 650 649 651 650 status = -EINVAL; 652 651 goto out; ··· 790 789 791 790 if (dev->cli.count) { 792 791 dev->result = -EIO; 793 - dev_err(&dev->pdev->dev, "%lu bytes still remain to be" 794 - "xfered\n", dev->cli.count); 792 + dev_err(&dev->pdev->dev, 793 + "%lu bytes still remain to be xfered\n", 794 + dev->cli.count); 795 795 (void) init_hw(dev); 796 796 } 797 797 complete(&dev->xfer_complete); ··· 925 923 } 926 924 927 925 if (request_mem_region(res->start, resource_size(res), 928 - DRIVER_NAME "I/O region") == NULL) { 926 + DRIVER_NAME "I/O region") == NULL) { 929 927 ret = -EBUSY; 930 928 goto err_no_region; 931 929 } ··· 937 935 } 938 936 939 937 dev->irq = platform_get_irq(pdev, 0); 940 - ret = request_irq(dev->irq, i2c_irq_handler, IRQF_DISABLED, 938 + ret = request_irq(dev->irq, i2c_irq_handler, 0, 941 939 DRIVER_NAME, dev); 942 940 if (ret) { 943 941 dev_err(&pdev->dev, "cannot claim the irq %d\n", dev->irq); ··· 982 980 983 981 i2c_set_adapdata(adap, dev); 984 982 985 - dev_info(&pdev->dev, "initialize %s on virtual " 986 - "base %p\n", adap->name, dev->virtbase); 983 + dev_info(&pdev->dev, 984 + "initialize %s on virtual base %p\n", 985 + adap->name, dev->virtbase); 987 986 988 987 ret = i2c_add_numbered_adapter(adap); 989 988 if (ret) {
+1 -1
drivers/i2c/busses/i2c-nuc900.c
··· 610 610 goto err_iomap; 611 611 } 612 612 613 - ret = request_irq(i2c->irq, nuc900_i2c_irq, IRQF_DISABLED | IRQF_SHARED, 613 + ret = request_irq(i2c->irq, nuc900_i2c_irq, IRQF_SHARED, 614 614 dev_name(&pdev->dev), i2c); 615 615 616 616 if (ret != 0) {
+92 -72
drivers/i2c/busses/i2c-omap.c
··· 42 42 #include <linux/pm_runtime.h> 43 43 44 44 /* I2C controller revisions */ 45 - #define OMAP_I2C_REV_2 0x20 45 + #define OMAP_I2C_OMAP1_REV_2 0x20 46 46 47 47 /* I2C controller revisions present on specific hardware */ 48 48 #define OMAP_I2C_REV_ON_2430 0x36 49 49 #define OMAP_I2C_REV_ON_3430 0x3C 50 - #define OMAP_I2C_REV_ON_4430 0x40 50 + #define OMAP_I2C_REV_ON_3530_4430 0x40 51 51 52 52 /* timeout waiting for the controller to respond */ 53 53 #define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000)) ··· 72 72 OMAP_I2C_SCLH_REG, 73 73 OMAP_I2C_SYSTEST_REG, 74 74 OMAP_I2C_BUFSTAT_REG, 75 - OMAP_I2C_REVNB_LO, 76 - OMAP_I2C_REVNB_HI, 77 - OMAP_I2C_IRQSTATUS_RAW, 78 - OMAP_I2C_IRQENABLE_SET, 79 - OMAP_I2C_IRQENABLE_CLR, 75 + /* only on OMAP4430 */ 76 + OMAP_I2C_IP_V2_REVNB_LO, 77 + OMAP_I2C_IP_V2_REVNB_HI, 78 + OMAP_I2C_IP_V2_IRQSTATUS_RAW, 79 + OMAP_I2C_IP_V2_IRQENABLE_SET, 80 + OMAP_I2C_IP_V2_IRQENABLE_CLR, 80 81 }; 81 82 82 83 /* I2C Interrupt Enable Register (OMAP_I2C_IE): */ ··· 194 193 */ 195 194 u8 rev; 196 195 unsigned b_hw:1; /* bad h/w fixes */ 197 - unsigned idle:1; 198 196 u16 iestate; /* Saved interrupt register */ 199 197 u16 pscstate; 200 198 u16 scllstate; ··· 204 204 u16 errata; 205 205 }; 206 206 207 - static const u8 reg_map[] = { 207 + static const u8 reg_map_ip_v1[] = { 208 208 [OMAP_I2C_REV_REG] = 0x00, 209 209 [OMAP_I2C_IE_REG] = 0x01, 210 210 [OMAP_I2C_STAT_REG] = 0x02, ··· 225 225 [OMAP_I2C_BUFSTAT_REG] = 0x10, 226 226 }; 227 227 228 - static const u8 omap4_reg_map[] = { 228 + static const u8 reg_map_ip_v2[] = { 229 229 [OMAP_I2C_REV_REG] = 0x04, 230 230 [OMAP_I2C_IE_REG] = 0x2c, 231 231 [OMAP_I2C_STAT_REG] = 0x28, ··· 244 244 [OMAP_I2C_SCLH_REG] = 0xb8, 245 245 [OMAP_I2C_SYSTEST_REG] = 0xbC, 246 246 [OMAP_I2C_BUFSTAT_REG] = 0xc0, 247 - [OMAP_I2C_REVNB_LO] = 0x00, 248 - [OMAP_I2C_REVNB_HI] = 0x04, 249 - [OMAP_I2C_IRQSTATUS_RAW] = 0x24, 250 - [OMAP_I2C_IRQENABLE_SET] = 0x2c, 251 - [OMAP_I2C_IRQENABLE_CLR] = 0x30, 247 + [OMAP_I2C_IP_V2_REVNB_LO] = 0x00, 248 + [OMAP_I2C_IP_V2_REVNB_HI] = 0x04, 249 + [OMAP_I2C_IP_V2_IRQSTATUS_RAW] = 0x24, 250 + [OMAP_I2C_IP_V2_IRQENABLE_SET] = 0x2c, 251 + [OMAP_I2C_IP_V2_IRQENABLE_CLR] = 0x30, 252 252 }; 253 253 254 254 static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev, ··· 266 266 267 267 static void omap_i2c_unidle(struct omap_i2c_dev *dev) 268 268 { 269 - struct platform_device *pdev; 270 269 struct omap_i2c_bus_platform_data *pdata; 271 270 272 - WARN_ON(!dev->idle); 271 + pdata = dev->dev->platform_data; 273 272 274 - pdev = to_platform_device(dev->dev); 275 - pdata = pdev->dev.platform_data; 276 - 277 - pm_runtime_get_sync(&pdev->dev); 278 - 279 - if (cpu_is_omap34xx()) { 273 + if (pdata->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE) { 280 274 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 281 275 omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate); 282 276 omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate); ··· 280 286 omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate); 281 287 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN); 282 288 } 283 - dev->idle = 0; 284 289 285 290 /* 286 291 * Don't write to this register if the IE state is 0 as it can ··· 291 298 292 299 static void omap_i2c_idle(struct omap_i2c_dev *dev) 293 300 { 294 - struct platform_device *pdev; 295 301 struct omap_i2c_bus_platform_data *pdata; 296 302 u16 iv; 297 303 298 - WARN_ON(dev->idle); 299 - 300 - pdev = to_platform_device(dev->dev); 301 - pdata = pdev->dev.platform_data; 304 + pdata = dev->dev->platform_data; 302 305 303 306 dev->iestate = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); 304 - if (dev->rev >= OMAP_I2C_REV_ON_4430) 305 - omap_i2c_write_reg(dev, OMAP_I2C_IRQENABLE_CLR, 1); 307 + if (pdata->rev == OMAP_I2C_IP_VERSION_2) 308 + omap_i2c_write_reg(dev, OMAP_I2C_IP_V2_IRQENABLE_CLR, 1); 306 309 else 307 310 omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0); 308 311 309 - if (dev->rev < OMAP_I2C_REV_2) { 312 + if (dev->rev < OMAP_I2C_OMAP1_REV_2) { 310 313 iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); /* Read clears */ 311 314 } else { 312 315 omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, dev->iestate); 313 316 314 - /* Flush posted write before the dev->idle store occurs */ 317 + /* Flush posted write */ 315 318 omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 316 319 } 317 - dev->idle = 1; 318 - 319 - pm_runtime_put_sync(&pdev->dev); 320 320 } 321 321 322 322 static int omap_i2c_init(struct omap_i2c_dev *dev) ··· 320 334 unsigned long timeout; 321 335 unsigned long internal_clk = 0; 322 336 struct clk *fclk; 337 + struct omap_i2c_bus_platform_data *pdata; 323 338 324 - if (dev->rev >= OMAP_I2C_REV_2) { 339 + pdata = dev->dev->platform_data; 340 + 341 + if (dev->rev >= OMAP_I2C_OMAP1_REV_2) { 325 342 /* Disable I2C controller before soft reset */ 326 343 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 327 344 omap_i2c_read_reg(dev, OMAP_I2C_CON_REG) & ··· 367 378 * REVISIT: Some wkup sources might not be needed. 368 379 */ 369 380 dev->westate = OMAP_I2C_WE_ALL; 370 - omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate); 381 + omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, 382 + dev->westate); 371 383 } 372 384 } 373 385 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 374 386 375 - if (cpu_class_is_omap1()) { 387 + if (pdata->flags & OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK) { 376 388 /* 377 389 * The I2C functional clock is the armxor_ck, so there's 378 390 * no need to get "armxor_ck" separately. Now, if OMAP2420 ··· 397 407 psc = fclk_rate / 12000000; 398 408 } 399 409 400 - if (!(cpu_class_is_omap1() || cpu_is_omap2420())) { 410 + if (!(pdata->flags & OMAP_I2C_FLAG_SIMPLE_CLOCK)) { 401 411 402 412 /* 403 413 * HSI2C controller internal clk rate should be 19.2 Mhz for ··· 405 415 * to get longer filter period for better noise suppression. 406 416 * The filter is iclk (fclk for HS) period. 407 417 */ 408 - if (dev->speed > 400 || cpu_is_omap2430()) 418 + if (dev->speed > 400 || 419 + pdata->flags & OMAP_I2C_FLAG_FORCE_19200_INT_CLK) 409 420 internal_clk = 19200; 410 421 else if (dev->speed > 100) 411 422 internal_clk = 9600; ··· 475 484 476 485 dev->errata = 0; 477 486 478 - if (cpu_is_omap2430() || cpu_is_omap34xx()) 487 + if (pdata->flags & OMAP_I2C_FLAG_APPLY_ERRATA_I207) 479 488 dev->errata |= I2C_OMAP_ERRATA_I207; 480 489 481 490 /* Enable interrupts */ ··· 484 493 OMAP_I2C_IE_AL) | ((dev->fifo_size) ? 485 494 (OMAP_I2C_IE_RDR | OMAP_I2C_IE_XDR) : 0); 486 495 omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate); 487 - if (cpu_is_omap34xx()) { 496 + if (pdata->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE) { 488 497 dev->pscstate = psc; 489 498 dev->scllstate = scll; 490 499 dev->sclhstate = sclh; ··· 633 642 int i; 634 643 int r; 635 644 636 - omap_i2c_unidle(dev); 645 + pm_runtime_get_sync(dev->dev); 637 646 638 647 r = omap_i2c_wait_for_bb(dev); 639 648 if (r < 0) ··· 656 665 657 666 omap_i2c_wait_for_bb(dev); 658 667 out: 659 - omap_i2c_idle(dev); 668 + pm_runtime_put(dev->dev); 660 669 return r; 661 670 } 662 671 ··· 711 720 #ifdef CONFIG_ARCH_OMAP15XX 712 721 713 722 static irqreturn_t 714 - omap_i2c_rev1_isr(int this_irq, void *dev_id) 723 + omap_i2c_omap1_isr(int this_irq, void *dev_id) 715 724 { 716 725 struct omap_i2c_dev *dev = dev_id; 717 726 u16 iv, w; 718 727 719 - if (dev->idle) 728 + if (pm_runtime_suspended(dev->dev)) 720 729 return IRQ_NONE; 721 730 722 731 iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); ··· 765 774 return IRQ_HANDLED; 766 775 } 767 776 #else 768 - #define omap_i2c_rev1_isr NULL 777 + #define omap_i2c_omap1_isr NULL 769 778 #endif 770 779 771 780 /* ··· 804 813 u16 bits; 805 814 u16 stat, w; 806 815 int err, count = 0; 816 + struct omap_i2c_bus_platform_data *pdata; 807 817 808 - if (dev->idle) 818 + pdata = dev->dev->platform_data; 819 + 820 + if (pm_runtime_suspended(dev->dev)) 809 821 return IRQ_NONE; 810 822 811 823 bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); ··· 875 881 * Data reg in 2430, omap3 and 876 882 * omap4 is 8 bit wide 877 883 */ 878 - if (cpu_class_is_omap1() || 879 - cpu_is_omap2420()) { 884 + if (pdata->flags & 885 + OMAP_I2C_FLAG_16BIT_DATA_REG) { 880 886 if (dev->buf_len) { 881 887 *dev->buf++ = w >> 8; 882 888 dev->buf_len--; ··· 918 924 * Data reg in 2430, omap3 and 919 925 * omap4 is 8 bit wide 920 926 */ 921 - if (cpu_class_is_omap1() || 922 - cpu_is_omap2420()) { 927 + if (pdata->flags & 928 + OMAP_I2C_FLAG_16BIT_DATA_REG) { 923 929 if (dev->buf_len) { 924 930 w |= *dev->buf++ << 8; 925 931 dev->buf_len--; ··· 1010 1016 } 1011 1017 1012 1018 dev->speed = speed; 1013 - dev->idle = 1; 1014 1019 dev->dev = &pdev->dev; 1015 1020 dev->irq = irq->start; 1016 1021 dev->base = ioremap(mem->start, resource_size(mem)); ··· 1020 1027 1021 1028 platform_set_drvdata(pdev, dev); 1022 1029 1023 - if (cpu_is_omap7xx()) 1024 - dev->reg_shift = 1; 1025 - else if (cpu_is_omap44xx()) 1026 - dev->reg_shift = 0; 1027 - else 1028 - dev->reg_shift = 2; 1030 + dev->reg_shift = (pdata->flags >> OMAP_I2C_FLAG_BUS_SHIFT__SHIFT) & 3; 1029 1031 1030 - if (cpu_is_omap44xx()) 1031 - dev->regs = (u8 *) omap4_reg_map; 1032 + if (pdata->rev == OMAP_I2C_IP_VERSION_2) 1033 + dev->regs = (u8 *)reg_map_ip_v2; 1032 1034 else 1033 - dev->regs = (u8 *) reg_map; 1035 + dev->regs = (u8 *)reg_map_ip_v1; 1034 1036 1035 - pm_runtime_enable(&pdev->dev); 1036 - omap_i2c_unidle(dev); 1037 + pm_runtime_enable(dev->dev); 1038 + pm_runtime_get_sync(dev->dev); 1037 1039 1038 1040 dev->rev = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG) & 0xff; 1039 1041 1040 1042 if (dev->rev <= OMAP_I2C_REV_ON_3430) 1041 1043 dev->errata |= I2C_OMAP3_1P153; 1042 1044 1043 - if (!(cpu_class_is_omap1() || cpu_is_omap2420())) { 1045 + if (!(pdata->flags & OMAP_I2C_FLAG_NO_FIFO)) { 1044 1046 u16 s; 1045 1047 1046 1048 /* Set up the fifo size - Get total size */ ··· 1047 1059 * size. This is to ensure that we can handle the status on int 1048 1060 * call back latencies. 1049 1061 */ 1050 - if (dev->rev >= OMAP_I2C_REV_ON_4430) { 1062 + if (dev->rev >= OMAP_I2C_REV_ON_3530_4430) { 1051 1063 dev->fifo_size = 0; 1052 1064 dev->b_hw = 0; /* Disable hardware fixes */ 1053 1065 } else { ··· 1063 1075 /* reset ASAP, clearing any IRQs */ 1064 1076 omap_i2c_init(dev); 1065 1077 1066 - isr = (dev->rev < OMAP_I2C_REV_2) ? omap_i2c_rev1_isr : omap_i2c_isr; 1078 + isr = (dev->rev < OMAP_I2C_OMAP1_REV_2) ? omap_i2c_omap1_isr : 1079 + omap_i2c_isr; 1067 1080 r = request_irq(dev->irq, isr, 0, pdev->name, dev); 1068 1081 1069 1082 if (r) { ··· 1072 1083 goto err_unuse_clocks; 1073 1084 } 1074 1085 1075 - dev_info(dev->dev, "bus %d rev%d.%d at %d kHz\n", 1076 - pdev->id, dev->rev >> 4, dev->rev & 0xf, dev->speed); 1086 + dev_info(dev->dev, "bus %d rev%d.%d.%d at %d kHz\n", pdev->id, 1087 + pdata->rev, dev->rev >> 4, dev->rev & 0xf, dev->speed); 1077 1088 1078 - omap_i2c_idle(dev); 1089 + pm_runtime_put(dev->dev); 1079 1090 1080 1091 adap = &dev->adapter; 1081 1092 i2c_set_adapdata(adap, dev); ··· 1099 1110 free_irq(dev->irq, dev); 1100 1111 err_unuse_clocks: 1101 1112 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 1102 - omap_i2c_idle(dev); 1113 + pm_runtime_put(dev->dev); 1103 1114 iounmap(dev->base); 1104 1115 err_free_mem: 1105 1116 platform_set_drvdata(pdev, NULL); ··· 1128 1139 return 0; 1129 1140 } 1130 1141 1142 + #ifdef CONFIG_PM_RUNTIME 1143 + static int omap_i2c_runtime_suspend(struct device *dev) 1144 + { 1145 + struct platform_device *pdev = to_platform_device(dev); 1146 + struct omap_i2c_dev *_dev = platform_get_drvdata(pdev); 1147 + 1148 + omap_i2c_idle(_dev); 1149 + 1150 + return 0; 1151 + } 1152 + 1153 + static int omap_i2c_runtime_resume(struct device *dev) 1154 + { 1155 + struct platform_device *pdev = to_platform_device(dev); 1156 + struct omap_i2c_dev *_dev = platform_get_drvdata(pdev); 1157 + 1158 + omap_i2c_unidle(_dev); 1159 + 1160 + return 0; 1161 + } 1162 + 1163 + static struct dev_pm_ops omap_i2c_pm_ops = { 1164 + .runtime_suspend = omap_i2c_runtime_suspend, 1165 + .runtime_resume = omap_i2c_runtime_resume, 1166 + }; 1167 + #define OMAP_I2C_PM_OPS (&omap_i2c_pm_ops) 1168 + #else 1169 + #define OMAP_I2C_PM_OPS NULL 1170 + #endif 1171 + 1131 1172 static struct platform_driver omap_i2c_driver = { 1132 1173 .probe = omap_i2c_probe, 1133 1174 .remove = omap_i2c_remove, 1134 1175 .driver = { 1135 1176 .name = "omap_i2c", 1136 1177 .owner = THIS_MODULE, 1178 + .pm = OMAP_I2C_PM_OPS, 1137 1179 }, 1138 1180 }; 1139 1181
+1 -1
drivers/i2c/busses/i2c-pmcmsp.c
··· 306 306 pmcmsptwi_data.irq = platform_get_irq(pldev, 0); 307 307 if (pmcmsptwi_data.irq) { 308 308 rc = request_irq(pmcmsptwi_data.irq, &pmcmsptwi_interrupt, 309 - IRQF_SHARED | IRQF_DISABLED | IRQF_SAMPLE_RANDOM, 309 + IRQF_SHARED | IRQF_SAMPLE_RANDOM, 310 310 pldev->name, &pmcmsptwi_data); 311 311 if (rc == 0) { 312 312 /*
+121 -9
drivers/i2c/busses/i2c-s3c2410.c
··· 35 35 #include <linux/cpufreq.h> 36 36 #include <linux/slab.h> 37 37 #include <linux/io.h> 38 + #include <linux/of_i2c.h> 39 + #include <linux/of_gpio.h> 38 40 39 41 #include <asm/irq.h> 40 42 ··· 80 78 struct resource *ioarea; 81 79 struct i2c_adapter adap; 82 80 81 + struct s3c2410_platform_i2c *pdata; 82 + int gpios[2]; 83 83 #ifdef CONFIG_CPU_FREQ 84 84 struct notifier_block freq_transition; 85 85 #endif ··· 98 94 { 99 95 struct platform_device *pdev = to_platform_device(i2c->dev); 100 96 enum s3c24xx_i2c_type type; 97 + 98 + #ifdef CONFIG_OF 99 + if (i2c->dev->of_node) 100 + return of_device_is_compatible(i2c->dev->of_node, 101 + "samsung,s3c2440-i2c"); 102 + #endif 101 103 102 104 type = platform_get_device_id(pdev)->driver_data; 103 105 return type == TYPE_S3C2440; ··· 635 625 636 626 static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got) 637 627 { 638 - struct s3c2410_platform_i2c *pdata = i2c->dev->platform_data; 628 + struct s3c2410_platform_i2c *pdata = i2c->pdata; 639 629 unsigned long clkin = clk_get_rate(i2c->clk); 640 630 unsigned int divs, div1; 641 631 unsigned long target_frequency; ··· 751 741 } 752 742 #endif 753 743 744 + #ifdef CONFIG_OF 745 + static int s3c24xx_i2c_parse_dt_gpio(struct s3c24xx_i2c *i2c) 746 + { 747 + int idx, gpio, ret; 748 + 749 + for (idx = 0; idx < 2; idx++) { 750 + gpio = of_get_gpio(i2c->dev->of_node, idx); 751 + if (!gpio_is_valid(gpio)) { 752 + dev_err(i2c->dev, "invalid gpio[%d]: %d\n", idx, gpio); 753 + goto free_gpio; 754 + } 755 + 756 + ret = gpio_request(gpio, "i2c-bus"); 757 + if (ret) { 758 + dev_err(i2c->dev, "gpio [%d] request failed\n", gpio); 759 + goto free_gpio; 760 + } 761 + } 762 + return 0; 763 + 764 + free_gpio: 765 + while (--idx >= 0) 766 + gpio_free(i2c->gpios[idx]); 767 + return -EINVAL; 768 + } 769 + 770 + static void s3c24xx_i2c_dt_gpio_free(struct s3c24xx_i2c *i2c) 771 + { 772 + unsigned int idx; 773 + for (idx = 0; idx < 2; idx++) 774 + gpio_free(i2c->gpios[idx]); 775 + } 776 + #else 777 + static int s3c24xx_i2c_parse_dt_gpio(struct s3c24xx_i2c *i2c) 778 + { 779 + return -EINVAL; 780 + } 781 + 782 + static void s3c24xx_i2c_dt_gpio_free(struct s3c24xx_i2c *i2c) 783 + { 784 + } 785 + #endif 786 + 754 787 /* s3c24xx_i2c_init 755 788 * 756 789 * initialise the controller, set the IO lines and frequency ··· 807 754 808 755 /* get the plafrom data */ 809 756 810 - pdata = i2c->dev->platform_data; 757 + pdata = i2c->pdata; 811 758 812 759 /* inititalise the gpio */ 813 760 814 761 if (pdata->cfg_gpio) 815 762 pdata->cfg_gpio(to_platform_device(i2c->dev)); 763 + else 764 + if (s3c24xx_i2c_parse_dt_gpio(i2c)) 765 + return -EINVAL; 816 766 817 767 /* write slave address */ 818 768 ··· 841 785 return 0; 842 786 } 843 787 788 + #ifdef CONFIG_OF 789 + /* s3c24xx_i2c_parse_dt 790 + * 791 + * Parse the device tree node and retreive the platform data. 792 + */ 793 + 794 + static void 795 + s3c24xx_i2c_parse_dt(struct device_node *np, struct s3c24xx_i2c *i2c) 796 + { 797 + struct s3c2410_platform_i2c *pdata = i2c->pdata; 798 + 799 + if (!np) 800 + return; 801 + 802 + pdata->bus_num = -1; /* i2c bus number is dynamically assigned */ 803 + of_property_read_u32(np, "samsung,i2c-sda-delay", &pdata->sda_delay); 804 + of_property_read_u32(np, "samsung,i2c-slave-addr", &pdata->slave_addr); 805 + of_property_read_u32(np, "samsung,i2c-max-bus-freq", 806 + (u32 *)&pdata->frequency); 807 + } 808 + #else 809 + static void 810 + s3c24xx_i2c_parse_dt(struct device_node *np, struct s3c24xx_i2c *i2c) 811 + { 812 + return; 813 + } 814 + #endif 815 + 844 816 /* s3c24xx_i2c_probe 845 817 * 846 818 * called by the bus driver when a suitable device is found ··· 877 793 static int s3c24xx_i2c_probe(struct platform_device *pdev) 878 794 { 879 795 struct s3c24xx_i2c *i2c; 880 - struct s3c2410_platform_i2c *pdata; 796 + struct s3c2410_platform_i2c *pdata = NULL; 881 797 struct resource *res; 882 798 int ret; 883 799 884 - pdata = pdev->dev.platform_data; 885 - if (!pdata) { 886 - dev_err(&pdev->dev, "no platform data\n"); 887 - return -EINVAL; 800 + if (!pdev->dev.of_node) { 801 + pdata = pdev->dev.platform_data; 802 + if (!pdata) { 803 + dev_err(&pdev->dev, "no platform data\n"); 804 + return -EINVAL; 805 + } 888 806 } 889 807 890 808 i2c = kzalloc(sizeof(struct s3c24xx_i2c), GFP_KERNEL); ··· 894 808 dev_err(&pdev->dev, "no memory for state\n"); 895 809 return -ENOMEM; 896 810 } 811 + 812 + i2c->pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 813 + if (!i2c->pdata) { 814 + ret = -ENOMEM; 815 + goto err_noclk; 816 + } 817 + 818 + if (pdata) 819 + memcpy(i2c->pdata, pdata, sizeof(*pdata)); 820 + else 821 + s3c24xx_i2c_parse_dt(pdev->dev.of_node, i2c); 897 822 898 823 strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name)); 899 824 i2c->adap.owner = THIS_MODULE; ··· 980 883 goto err_iomap; 981 884 } 982 885 983 - ret = request_irq(i2c->irq, s3c24xx_i2c_irq, IRQF_DISABLED, 886 + ret = request_irq(i2c->irq, s3c24xx_i2c_irq, 0, 984 887 dev_name(&pdev->dev), i2c); 985 888 986 889 if (ret != 0) { ··· 1000 903 * being bus 0. 1001 904 */ 1002 905 1003 - i2c->adap.nr = pdata->bus_num; 906 + i2c->adap.nr = i2c->pdata->bus_num; 907 + i2c->adap.dev.of_node = pdev->dev.of_node; 1004 908 1005 909 ret = i2c_add_numbered_adapter(&i2c->adap); 1006 910 if (ret < 0) { ··· 1009 911 goto err_cpufreq; 1010 912 } 1011 913 914 + of_i2c_register_devices(&i2c->adap); 1012 915 platform_set_drvdata(pdev, i2c); 1013 916 1014 917 dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev)); ··· 1058 959 iounmap(i2c->regs); 1059 960 1060 961 release_resource(i2c->ioarea); 962 + s3c24xx_i2c_dt_gpio_free(i2c); 1061 963 kfree(i2c->ioarea); 1062 964 kfree(i2c); 1063 965 ··· 1112 1012 }; 1113 1013 MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids); 1114 1014 1015 + #ifdef CONFIG_OF 1016 + static const struct of_device_id s3c24xx_i2c_match[] = { 1017 + { .compatible = "samsung,s3c2410-i2c" }, 1018 + { .compatible = "samsung,s3c2440-i2c" }, 1019 + {}, 1020 + }; 1021 + MODULE_DEVICE_TABLE(of, s3c24xx_i2c_match); 1022 + #else 1023 + #define s3c24xx_i2c_match NULL 1024 + #endif 1025 + 1115 1026 static struct platform_driver s3c24xx_i2c_driver = { 1116 1027 .probe = s3c24xx_i2c_probe, 1117 1028 .remove = s3c24xx_i2c_remove, ··· 1131 1020 .owner = THIS_MODULE, 1132 1021 .name = "s3c-i2c", 1133 1022 .pm = S3C24XX_DEV_PM_OPS, 1023 + .of_match_table = s3c24xx_i2c_match, 1134 1024 }, 1135 1025 }; 1136 1026
+1 -1
drivers/i2c/busses/i2c-sh7760.c
··· 502 502 } 503 503 OUT32(id, I2CCCR, ret); 504 504 505 - if (request_irq(id->irq, sh7760_i2c_irq, IRQF_DISABLED, 505 + if (request_irq(id->irq, sh7760_i2c_irq, 0, 506 506 SH7760_I2C_DEVNAME, id)) { 507 507 dev_err(&pdev->dev, "cannot get irq %d\n", id->irq); 508 508 ret = -EBUSY;
+1 -1
drivers/i2c/busses/i2c-sh_mobile.c
··· 543 543 544 544 while ((res = platform_get_resource(dev, IORESOURCE_IRQ, k))) { 545 545 for (n = res->start; hook && n <= res->end; n++) { 546 - if (request_irq(n, sh_mobile_i2c_isr, IRQF_DISABLED, 546 + if (request_irq(n, sh_mobile_i2c_isr, 0, 547 547 dev_name(&dev->dev), dev)) { 548 548 for (n--; n >= res->start; n--) 549 549 free_irq(n, dev);
+1 -1
drivers/i2c/busses/i2c-stu300.c
··· 916 916 } 917 917 918 918 dev->irq = platform_get_irq(pdev, 0); 919 - if (request_irq(dev->irq, stu300_irh, IRQF_DISABLED, 919 + if (request_irq(dev->irq, stu300_irh, 0, 920 920 NAME, dev)) { 921 921 ret = -EIO; 922 922 goto err_no_irq;
+1 -1
drivers/i2c/busses/i2c-tegra.c
··· 566 566 struct clk *clk; 567 567 struct clk *i2c_clk; 568 568 const unsigned int *prop; 569 - void *base; 569 + void __iomem *base; 570 570 int irq; 571 571 int ret = 0; 572 572
+2 -3
include/linux/i2c-omap.h
··· 32 32 33 33 struct omap_i2c_bus_platform_data { 34 34 u32 clkrate; 35 + u32 rev; 36 + u32 flags; 35 37 void (*set_mpu_wkup_lat)(struct device *dev, long set); 36 - int (*device_enable) (struct platform_device *pdev); 37 - int (*device_shutdown) (struct platform_device *pdev); 38 - int (*device_idle) (struct platform_device *pdev); 39 38 }; 40 39 41 40 #endif