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

Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux

Pull i2c-embedded changes from Wolfram Sang:
"The changes for i2c-embedded include:

- massive rework of the omap driver
- massive rework of the at91 driver. In fact, the old driver gets
removed; I am okay with this approach since the old driver was
depending on BROKEN and its limitations made it practically
unusable, so people used bitbanging instead. But even if there are
users, there is no platform_data or module parameter which would
need to be converted. It is just another driver doing I2C
transfers, just way better. Modifications of arch/arm/at91 related
files have proper acks from the maintainer.
- new driver for R-Car I2C
- devicetree and generic_clock conversions and fixes
- usual driver fixes and changes.

The rework patches have come a long way and lots of people have been
involved in creating/testing them. Most patches have been in
linux-next at least since 3.6-rc5. A few have been added in the last
week, I have to admit.

An unexpected (but welcome :)) peak in private life is the cause for
that. The "late" patches shouldn't cause any merge conflicts and I
will have a special eye on them during the stabilization phase. This
is an exception and I want to have the patches in place properly in
time again for the next kernels."

* 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux: (44 commits)
MXS: Implement DMA support into mxs-i2c
i2c: add Renesas R-Car I2C driver
i2c: s3c2410: use clk_prepare_enable and clk_disable_unprepare
ARM: OMAP: convert I2C driver to PM QoS for MPU latency constraints
i2c: nomadik: Add Device Tree support to the Nomadik I2C driver
i2c: algo: pca: Fix chip reset function for PCA9665
i2c: mpc: Wait for STOP to hit the bus
i2c: davinci: preparation for switch to common clock framework
omap-i2c: fix incorrect log message when using a device tree
i2c: omap: sanitize exit path
i2c: omap: switch over to autosuspend API
i2c: omap: remove unnecessary pm_runtime_suspended check
i2c: omap: switch to threaded IRQ support
i2c: omap: remove redundant status read
i2c: omap: get rid of the "complete" label
i2c: omap: resize fifos before each message
i2c: omap: simplify IRQ exit path
i2c: omap: always return IRQ_HANDLED
i2c: omap: simplify errata check
i2c: omap: bus: add a receiver flag
...

+2144 -645
+30
Documentation/devicetree/bindings/i2c/atmel-i2c.txt
··· 1 + I2C for Atmel platforms 2 + 3 + Required properties : 4 + - compatible : Must be "atmel,at91rm9200-i2c", "atmel,at91sam9261-i2c", 5 + "atmel,at91sam9260-i2c", "atmel,at91sam9g20-i2c", "atmel,at91sam9g10-i2c" 6 + or "atmel,at91sam9x5-i2c" 7 + - reg: physical base address of the controller and length of memory mapped 8 + region. 9 + - interrupts: interrupt number to the cpu. 10 + - #address-cells = <1>; 11 + - #size-cells = <0>; 12 + 13 + Optional properties: 14 + - Child nodes conforming to i2c bus binding 15 + 16 + Examples : 17 + 18 + i2c0: i2c@fff84000 { 19 + compatible = "atmel,at91sam9g20-i2c"; 20 + reg = <0xfff84000 0x100>; 21 + interrupts = <12 4 6>; 22 + #address-cells = <1>; 23 + #size-cells = <0>; 24 + 25 + 24c512@50 { 26 + compatible = "24c512"; 27 + reg = <0x50>; 28 + pagesize = <128>; 29 + } 30 + }
+28
Documentation/devicetree/bindings/i2c/davinci.txt
··· 1 + * Texas Instruments Davinci I2C 2 + 3 + This file provides information, what the device node for the 4 + davinci i2c interface contain. 5 + 6 + Required properties: 7 + - compatible: "ti,davinci-i2c"; 8 + - reg : Offset and length of the register set for the device 9 + 10 + Recommended properties : 11 + - interrupts : standard interrupt property. 12 + - clock-frequency : desired I2C bus clock frequency in Hz. 13 + 14 + Example (enbw_cmc board): 15 + i2c@1c22000 { 16 + compatible = "ti,davinci-i2c"; 17 + reg = <0x22000 0x1000>; 18 + clock-frequency = <100000>; 19 + interrupts = <15>; 20 + interrupt-parent = <&intc>; 21 + #address-cells = <1>; 22 + #size-cells = <0>; 23 + 24 + dtt@48 { 25 + compatible = "national,lm75"; 26 + reg = <0x48>; 27 + }; 28 + };
+2
Documentation/devicetree/bindings/i2c/i2c-mxs.txt
··· 6 6 - interrupts: Should contain ERROR and DMA interrupts 7 7 - clock-frequency: Desired I2C bus clock frequency in Hz. 8 8 Only 100000Hz and 400000Hz modes are supported. 9 + - fsl,i2c-dma-channel: APBX DMA channel for the I2C 9 10 10 11 Examples: 11 12 ··· 17 16 reg = <0x80058000 2000>; 18 17 interrupts = <111 68>; 19 18 clock-frequency = <100000>; 19 + fsl,i2c-dma-channel = <6>; 20 20 };
+23
Documentation/devicetree/bindings/i2c/nomadik.txt
··· 1 + I2C for Nomadik based systems 2 + 3 + Required (non-standard) properties: 4 + - Nil 5 + 6 + Recommended (non-standard) properties: 7 + - clock-frequency : Maximum bus clock frequency for the device 8 + 9 + Optional (non-standard) properties: 10 + - Nil 11 + 12 + Example : 13 + 14 + i2c@80004000 { 15 + compatible = "stericsson,db8500-i2c", "st,nomadik-i2c"; 16 + reg = <0x80004000 0x1000>; 17 + interrupts = <0 21 0x4>; 18 + #address-cells = <1>; 19 + #size-cells = <0>; 20 + v-i2c-supply = <&db8500_vape_reg>; 21 + 22 + clock-frequency = <400000>; 23 + };
+10
arch/arm/boot/dts/at91sam9260.dtsi
··· 28 28 gpio2 = &pioC; 29 29 tcb0 = &tcb0; 30 30 tcb1 = &tcb1; 31 + i2c0 = &i2c0; 31 32 }; 32 33 cpus { 33 34 cpu@0 { ··· 200 199 compatible = "atmel,at91rm9200-udc"; 201 200 reg = <0xfffa4000 0x4000>; 202 201 interrupts = <10 4 2>; 202 + status = "disabled"; 203 + }; 204 + 205 + i2c0: i2c@fffac000 { 206 + compatible = "atmel,at91sam9260-i2c"; 207 + reg = <0xfffac000 0x100>; 208 + interrupts = <11 4 6>; 209 + #address-cells = <1>; 210 + #size-cells = <0>; 203 211 status = "disabled"; 204 212 }; 205 213
+10
arch/arm/boot/dts/at91sam9263.dtsi
··· 24 24 gpio3 = &pioD; 25 25 gpio4 = &pioE; 26 26 tcb0 = &tcb0; 27 + i2c0 = &i2c0; 27 28 }; 28 29 cpus { 29 30 cpu@0 { ··· 184 183 compatible = "atmel,at91rm9200-udc"; 185 184 reg = <0xfff78000 0x4000>; 186 185 interrupts = <24 4 2>; 186 + status = "disabled"; 187 + }; 188 + 189 + i2c0: i2c@fff88000 { 190 + compatible = "atmel,at91sam9263-i2c"; 191 + reg = <0xfff88000 0x100>; 192 + interrupts = <13 4 6>; 193 + #address-cells = <1>; 194 + #size-cells = <0>; 187 195 status = "disabled"; 188 196 }; 189 197 };
+4
arch/arm/boot/dts/at91sam9g20.dtsi
··· 18 18 19 19 ahb { 20 20 apb { 21 + i2c0: i2c@fffac000 { 22 + compatible = "atmel,at91sam9g20-i2c"; 23 + }; 24 + 21 25 adc0: adc@fffe0000 { 22 26 atmel,adc-startup-time = <40>; 23 27 };
+12
arch/arm/boot/dts/at91sam9g25ek.dts
··· 32 32 phy-mode = "rmii"; 33 33 status = "okay"; 34 34 }; 35 + 36 + i2c0: i2c@f8010000 { 37 + status = "okay"; 38 + }; 39 + 40 + i2c1: i2c@f8014000 { 41 + status = "okay"; 42 + }; 43 + 44 + i2c2: i2c@f8018000 { 45 + status = "okay"; 46 + }; 35 47 }; 36 48 37 49 usb0: ohci@00600000 {
+20
arch/arm/boot/dts/at91sam9g45.dtsi
··· 29 29 gpio4 = &pioE; 30 30 tcb0 = &tcb0; 31 31 tcb1 = &tcb1; 32 + i2c0 = &i2c0; 33 + i2c1 = &i2c1; 32 34 }; 33 35 cpus { 34 36 cpu@0 { ··· 205 203 compatible = "cdns,at32ap7000-macb", "cdns,macb"; 206 204 reg = <0xfffbc000 0x100>; 207 205 interrupts = <25 4 3>; 206 + status = "disabled"; 207 + }; 208 + 209 + i2c0: i2c@fff84000 { 210 + compatible = "atmel,at91sam9g10-i2c"; 211 + reg = <0xfff84000 0x100>; 212 + interrupts = <12 4 6>; 213 + #address-cells = <1>; 214 + #size-cells = <0>; 215 + status = "disabled"; 216 + }; 217 + 218 + i2c1: i2c@fff88000 { 219 + compatible = "atmel,at91sam9g10-i2c"; 220 + reg = <0xfff88000 0x100>; 221 + interrupts = <13 4 6>; 222 + #address-cells = <1>; 223 + #size-cells = <0>; 208 224 status = "disabled"; 209 225 }; 210 226
+8
arch/arm/boot/dts/at91sam9m10g45ek.dts
··· 46 46 phy-mode = "rmii"; 47 47 status = "okay"; 48 48 }; 49 + 50 + i2c0: i2c@fff84000 { 51 + status = "okay"; 52 + }; 53 + 54 + i2c1: i2c@fff88000 { 55 + status = "okay"; 56 + }; 49 57 }; 50 58 51 59 nand0: nand@40000000 {
+20
arch/arm/boot/dts/at91sam9n12.dtsi
··· 26 26 gpio3 = &pioD; 27 27 tcb0 = &tcb0; 28 28 tcb1 = &tcb1; 29 + i2c0 = &i2c0; 30 + i2c1 = &i2c1; 29 31 }; 30 32 cpus { 31 33 cpu@0 { ··· 182 180 interrupts = <8 4 5>; 183 181 atmel,use-dma-rx; 184 182 atmel,use-dma-tx; 183 + status = "disabled"; 184 + }; 185 + 186 + i2c0: i2c@f8010000 { 187 + compatible = "atmel,at91sam9x5-i2c"; 188 + reg = <0xf8010000 0x100>; 189 + interrupts = <9 4 6>; 190 + #address-cells = <1>; 191 + #size-cells = <0>; 192 + status = "disabled"; 193 + }; 194 + 195 + i2c1: i2c@f8014000 { 196 + compatible = "atmel,at91sam9x5-i2c"; 197 + reg = <0xf8014000 0x100>; 198 + interrupts = <10 4 6>; 199 + #address-cells = <1>; 200 + #size-cells = <0>; 185 201 status = "disabled"; 186 202 }; 187 203 };
+8
arch/arm/boot/dts/at91sam9n12ek.dts
··· 37 37 dbgu: serial@fffff200 { 38 38 status = "okay"; 39 39 }; 40 + 41 + i2c0: i2c@f8010000 { 42 + status = "okay"; 43 + }; 44 + 45 + i2c1: i2c@f8014000 { 46 + status = "okay"; 47 + }; 40 48 }; 41 49 42 50 nand0: nand@40000000 {
+30
arch/arm/boot/dts/at91sam9x5.dtsi
··· 27 27 gpio3 = &pioD; 28 28 tcb0 = &tcb0; 29 29 tcb1 = &tcb1; 30 + i2c0 = &i2c0; 31 + i2c1 = &i2c1; 32 + i2c2 = &i2c2; 30 33 }; 31 34 cpus { 32 35 cpu@0 { ··· 196 193 compatible = "cdns,at32ap7000-macb", "cdns,macb"; 197 194 reg = <0xf8030000 0x100>; 198 195 interrupts = <27 4 3>; 196 + status = "disabled"; 197 + }; 198 + 199 + i2c0: i2c@f8010000 { 200 + compatible = "atmel,at91sam9x5-i2c"; 201 + reg = <0xf8010000 0x100>; 202 + interrupts = <9 4 6>; 203 + #address-cells = <1>; 204 + #size-cells = <0>; 205 + status = "disabled"; 206 + }; 207 + 208 + i2c1: i2c@f8014000 { 209 + compatible = "atmel,at91sam9x5-i2c"; 210 + reg = <0xf8014000 0x100>; 211 + interrupts = <10 4 6>; 212 + #address-cells = <1>; 213 + #size-cells = <0>; 214 + status = "disabled"; 215 + }; 216 + 217 + i2c2: i2c@f8018000 { 218 + compatible = "atmel,at91sam9x5-i2c"; 219 + reg = <0xf8018000 0x100>; 220 + interrupts = <11 4 6>; 221 + #address-cells = <1>; 222 + #size-cells = <0>; 199 223 status = "disabled"; 200 224 }; 201 225
+2
arch/arm/boot/dts/imx28.dtsi
··· 764 764 reg = <0x80058000 0x2000>; 765 765 interrupts = <111 68>; 766 766 clock-frequency = <100000>; 767 + fsl,i2c-dma-channel = <6>; 767 768 status = "disabled"; 768 769 }; 769 770 ··· 775 774 reg = <0x8005a000 0x2000>; 776 775 interrupts = <110 69>; 777 776 clock-frequency = <100000>; 777 + fsl,i2c-dma-channel = <7>; 778 778 status = "disabled"; 779 779 }; 780 780
+1
arch/arm/mach-at91/at91rm9200.c
··· 187 187 CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), 188 188 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 189 189 CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), 190 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91rm9200", &twi_clk), 190 191 /* fake hclk clock */ 191 192 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), 192 193 CLKDEV_CON_ID("pioA", &pioA_clk),
+1 -1
arch/arm/mach-at91/at91rm9200_devices.c
··· 511 511 }; 512 512 513 513 static struct platform_device at91rm9200_twi_device = { 514 - .name = "at91_i2c", 514 + .name = "i2c-at91rm9200", 515 515 .id = -1, 516 516 .resource = twi_resources, 517 517 .num_resources = ARRAY_SIZE(twi_resources),
+3
arch/arm/mach-at91/at91sam9260.c
··· 211 211 CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk), 212 212 CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk), 213 213 CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc_clk), 214 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260", &twi_clk), 215 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20", &twi_clk), 214 216 /* more usart lookup table for DT entries */ 215 217 CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck), 216 218 CLKDEV_CON_DEV_ID("usart", "fffb0000.serial", &usart0_clk), ··· 221 219 CLKDEV_CON_DEV_ID("usart", "fffd0000.serial", &usart3_clk), 222 220 CLKDEV_CON_DEV_ID("usart", "fffd4000.serial", &usart4_clk), 223 221 CLKDEV_CON_DEV_ID("usart", "fffd8000.serial", &usart5_clk), 222 + CLKDEV_CON_DEV_ID(NULL, "fffac000.i2c", &twi_clk), 224 223 /* more tc lookup table for DT entries */ 225 224 CLKDEV_CON_DEV_ID("t0_clk", "fffa0000.timer", &tc0_clk), 226 225 CLKDEV_CON_DEV_ID("t1_clk", "fffa0000.timer", &tc1_clk),
+7 -1
arch/arm/mach-at91/at91sam9260_devices.c
··· 421 421 }; 422 422 423 423 static struct platform_device at91sam9260_twi_device = { 424 - .name = "at91_i2c", 425 424 .id = -1, 426 425 .resource = twi_resources, 427 426 .num_resources = ARRAY_SIZE(twi_resources), ··· 428 429 429 430 void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) 430 431 { 432 + /* IP version is not the same on 9260 and g20 */ 433 + if (cpu_is_at91sam9g20()) { 434 + at91sam9260_twi_device.name = "i2c-at91sam9g20"; 435 + } else { 436 + at91sam9260_twi_device.name = "i2c-at91sam9260"; 437 + } 438 + 431 439 /* pins used for TWI interface */ 432 440 at91_set_A_periph(AT91_PIN_PA23, 0); /* TWD */ 433 441 at91_set_multi_drive(AT91_PIN_PA23, 1);
+2
arch/arm/mach-at91/at91sam9261.c
··· 178 178 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 179 179 CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk), 180 180 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &hck0), 181 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9261", &twi_clk), 182 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10", &twi_clk), 181 183 CLKDEV_CON_ID("pioA", &pioA_clk), 182 184 CLKDEV_CON_ID("pioB", &pioB_clk), 183 185 CLKDEV_CON_ID("pioC", &pioC_clk),
+10 -4
arch/arm/mach-at91/at91sam9261_devices.c
··· 317 317 }; 318 318 319 319 static struct platform_device at91sam9261_twi_device = { 320 - .name = "at91_i2c", 321 320 .id = -1, 322 321 .resource = twi_resources, 323 322 .num_resources = ARRAY_SIZE(twi_resources), ··· 324 325 325 326 void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) 326 327 { 328 + /* IP version is not the same on 9261 and g10 */ 329 + if (cpu_is_at91sam9g10()) { 330 + at91sam9261_twi_device.name = "i2c-at91sam9g10"; 331 + /* I2C PIO must not be configured as open-drain on this chip */ 332 + } else { 333 + at91sam9261_twi_device.name = "i2c-at91sam9261"; 334 + at91_set_multi_drive(AT91_PIN_PA7, 1); 335 + at91_set_multi_drive(AT91_PIN_PA8, 1); 336 + } 337 + 327 338 /* pins used for TWI interface */ 328 339 at91_set_A_periph(AT91_PIN_PA7, 0); /* TWD */ 329 - at91_set_multi_drive(AT91_PIN_PA7, 1); 330 - 331 340 at91_set_A_periph(AT91_PIN_PA8, 0); /* TWCK */ 332 - at91_set_multi_drive(AT91_PIN_PA8, 1); 333 341 334 342 i2c_register_board_info(0, devices, nr_devices); 335 343 platform_device_register(&at91sam9261_twi_device);
+2
arch/arm/mach-at91/at91sam9263.c
··· 193 193 CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), 194 194 CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), 195 195 CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), 196 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260", &twi_clk), 196 197 /* fake hclk clock */ 197 198 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), 198 199 CLKDEV_CON_ID("pioA", &pioA_clk), ··· 211 210 CLKDEV_CON_DEV_ID("hclk", "a00000.ohci", &ohci_clk), 212 211 CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk), 213 212 CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk), 213 + CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi_clk), 214 214 }; 215 215 216 216 static struct clk_lookup usart_clocks_lookups[] = {
+1 -1
arch/arm/mach-at91/at91sam9263_devices.c
··· 599 599 }; 600 600 601 601 static struct platform_device at91sam9263_twi_device = { 602 - .name = "at91_i2c", 602 + .name = "i2c-at91sam9260", 603 603 .id = -1, 604 604 .resource = twi_resources, 605 605 .num_resources = ARRAY_SIZE(twi_resources),
+4
arch/arm/mach-at91/at91sam9g45.c
··· 237 237 CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), 238 238 CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk), 239 239 CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tcb0_clk), 240 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.0", &twi0_clk), 241 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g10.1", &twi1_clk), 240 242 CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), 241 243 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 242 244 CLKDEV_CON_DEV_ID(NULL, "atmel-trng", &trng_clk), ··· 256 254 CLKDEV_CON_DEV_ID("t0_clk", "fffd4000.timer", &tcb0_clk), 257 255 CLKDEV_CON_DEV_ID("hclk", "700000.ohci", &uhphs_clk), 258 256 CLKDEV_CON_DEV_ID("ehci_clk", "800000.ehci", &uhphs_clk), 257 + CLKDEV_CON_DEV_ID(NULL, "fff84000.i2c", &twi0_clk), 258 + CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi1_clk), 259 259 /* fake hclk clock */ 260 260 CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), 261 261 CLKDEV_CON_ID("pioA", &pioA_clk),
+2 -8
arch/arm/mach-at91/at91sam9g45_devices.c
··· 653 653 }; 654 654 655 655 static struct platform_device at91sam9g45_twi0_device = { 656 - .name = "at91_i2c", 656 + .name = "i2c-at91sam9g10", 657 657 .id = 0, 658 658 .resource = twi0_resources, 659 659 .num_resources = ARRAY_SIZE(twi0_resources), ··· 673 673 }; 674 674 675 675 static struct platform_device at91sam9g45_twi1_device = { 676 - .name = "at91_i2c", 676 + .name = "i2c-at91sam9g10", 677 677 .id = 1, 678 678 .resource = twi1_resources, 679 679 .num_resources = ARRAY_SIZE(twi1_resources), ··· 686 686 /* pins used for TWI interface */ 687 687 if (i2c_id == 0) { 688 688 at91_set_A_periph(AT91_PIN_PA20, 0); /* TWD */ 689 - at91_set_multi_drive(AT91_PIN_PA20, 1); 690 - 691 689 at91_set_A_periph(AT91_PIN_PA21, 0); /* TWCK */ 692 - at91_set_multi_drive(AT91_PIN_PA21, 1); 693 690 694 691 platform_device_register(&at91sam9g45_twi0_device); 695 692 } else { 696 693 at91_set_A_periph(AT91_PIN_PB10, 0); /* TWD */ 697 - at91_set_multi_drive(AT91_PIN_PB10, 1); 698 - 699 694 at91_set_A_periph(AT91_PIN_PB11, 0); /* TWCK */ 700 - at91_set_multi_drive(AT91_PIN_PB11, 1); 701 695 702 696 platform_device_register(&at91sam9g45_twi1_device); 703 697 }
+2
arch/arm/mach-at91/at91sam9n12.c
··· 169 169 CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb_clk), 170 170 CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb_clk), 171 171 CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma_clk), 172 + CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), 173 + CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), 172 174 CLKDEV_CON_ID("pioA", &pioAB_clk), 173 175 CLKDEV_CON_ID("pioB", &pioAB_clk), 174 176 CLKDEV_CON_ID("pioC", &pioCD_clk),
+2
arch/arm/mach-at91/at91sam9rl.c
··· 186 186 CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk), 187 187 CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), 188 188 CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), 189 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.0", &twi0_clk), 190 + CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.1", &twi1_clk), 189 191 CLKDEV_CON_ID("pioA", &pioA_clk), 190 192 CLKDEV_CON_ID("pioB", &pioB_clk), 191 193 CLKDEV_CON_ID("pioC", &pioC_clk),
+1 -1
arch/arm/mach-at91/at91sam9rl_devices.c
··· 346 346 }; 347 347 348 348 static struct platform_device at91sam9rl_twi_device = { 349 - .name = "at91_i2c", 349 + .name = "i2c-at91sam9g20", 350 350 .id = -1, 351 351 .resource = twi_resources, 352 352 .num_resources = ARRAY_SIZE(twi_resources),
+3
arch/arm/mach-at91/at91sam9x5.c
··· 231 231 CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), 232 232 CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk), 233 233 CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk), 234 + CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), 235 + CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), 236 + CLKDEV_CON_DEV_ID(NULL, "f8018000.i2c", &twi2_clk), 234 237 CLKDEV_CON_ID("pioA", &pioAB_clk), 235 238 CLKDEV_CON_ID("pioB", &pioAB_clk), 236 239 CLKDEV_CON_ID("pioC", &pioCD_clk),
-68
arch/arm/mach-at91/include/mach/at91_twi.h
··· 1 - /* 2 - * arch/arm/mach-at91/include/mach/at91_twi.h 3 - * 4 - * Copyright (C) 2005 Ivan Kokshaysky 5 - * Copyright (C) SAN People 6 - * 7 - * Two-wire Interface (TWI) registers. 8 - * Based on AT91RM9200 datasheet revision E. 9 - * 10 - * This program is free software; you can redistribute it and/or modify 11 - * it under the terms of the GNU General Public License as published by 12 - * the Free Software Foundation; either version 2 of the License, or 13 - * (at your option) any later version. 14 - */ 15 - 16 - #ifndef AT91_TWI_H 17 - #define AT91_TWI_H 18 - 19 - #define AT91_TWI_CR 0x00 /* Control Register */ 20 - #define AT91_TWI_START (1 << 0) /* Send a Start Condition */ 21 - #define AT91_TWI_STOP (1 << 1) /* Send a Stop Condition */ 22 - #define AT91_TWI_MSEN (1 << 2) /* Master Transfer Enable */ 23 - #define AT91_TWI_MSDIS (1 << 3) /* Master Transfer Disable */ 24 - #define AT91_TWI_SVEN (1 << 4) /* Slave Transfer Enable [SAM9260 only] */ 25 - #define AT91_TWI_SVDIS (1 << 5) /* Slave Transfer Disable [SAM9260 only] */ 26 - #define AT91_TWI_SWRST (1 << 7) /* Software Reset */ 27 - 28 - #define AT91_TWI_MMR 0x04 /* Master Mode Register */ 29 - #define AT91_TWI_IADRSZ (3 << 8) /* Internal Device Address Size */ 30 - #define AT91_TWI_IADRSZ_NO (0 << 8) 31 - #define AT91_TWI_IADRSZ_1 (1 << 8) 32 - #define AT91_TWI_IADRSZ_2 (2 << 8) 33 - #define AT91_TWI_IADRSZ_3 (3 << 8) 34 - #define AT91_TWI_MREAD (1 << 12) /* Master Read Direction */ 35 - #define AT91_TWI_DADR (0x7f << 16) /* Device Address */ 36 - 37 - #define AT91_TWI_SMR 0x08 /* Slave Mode Register [SAM9260 only] */ 38 - #define AT91_TWI_SADR (0x7f << 16) /* Slave Address */ 39 - 40 - #define AT91_TWI_IADR 0x0c /* Internal Address Register */ 41 - 42 - #define AT91_TWI_CWGR 0x10 /* Clock Waveform Generator Register */ 43 - #define AT91_TWI_CLDIV (0xff << 0) /* Clock Low Divisor */ 44 - #define AT91_TWI_CHDIV (0xff << 8) /* Clock High Divisor */ 45 - #define AT91_TWI_CKDIV (7 << 16) /* Clock Divider */ 46 - 47 - #define AT91_TWI_SR 0x20 /* Status Register */ 48 - #define AT91_TWI_TXCOMP (1 << 0) /* Transmission Complete */ 49 - #define AT91_TWI_RXRDY (1 << 1) /* Receive Holding Register Ready */ 50 - #define AT91_TWI_TXRDY (1 << 2) /* Transmit Holding Register Ready */ 51 - #define AT91_TWI_SVREAD (1 << 3) /* Slave Read [SAM9260 only] */ 52 - #define AT91_TWI_SVACC (1 << 4) /* Slave Access [SAM9260 only] */ 53 - #define AT91_TWI_GACC (1 << 5) /* General Call Access [SAM9260 only] */ 54 - #define AT91_TWI_OVRE (1 << 6) /* Overrun Error [AT91RM9200 only] */ 55 - #define AT91_TWI_UNRE (1 << 7) /* Underrun Error [AT91RM9200 only] */ 56 - #define AT91_TWI_NACK (1 << 8) /* Not Acknowledged */ 57 - #define AT91_TWI_ARBLST (1 << 9) /* Arbitration Lost [SAM9260 only] */ 58 - #define AT91_TWI_SCLWS (1 << 10) /* Clock Wait State [SAM9260 only] */ 59 - #define AT91_TWI_EOSACC (1 << 11) /* End of Slave Address [SAM9260 only] */ 60 - 61 - #define AT91_TWI_IER 0x24 /* Interrupt Enable Register */ 62 - #define AT91_TWI_IDR 0x28 /* Interrupt Disable Register */ 63 - #define AT91_TWI_IMR 0x2c /* Interrupt Mask Register */ 64 - #define AT91_TWI_RHR 0x30 /* Receive Holding Register */ 65 - #define AT91_TWI_THR 0x34 /* Transmit Holding Register */ 66 - 67 - #endif 68 -
-21
arch/arm/plat-omap/i2c.c
··· 26 26 #include <linux/kernel.h> 27 27 #include <linux/platform_device.h> 28 28 #include <linux/i2c.h> 29 - #include <linux/i2c-omap.h> 30 29 #include <linux/slab.h> 31 30 #include <linux/err.h> 32 31 #include <linux/clk.h> 33 32 34 33 #include <mach/irqs.h> 35 34 #include <plat/i2c.h> 36 - #include <plat/omap-pm.h> 37 35 #include <plat/omap_device.h> 38 36 39 37 #define OMAP_I2C_SIZE 0x3f ··· 127 129 128 130 129 131 #ifdef CONFIG_ARCH_OMAP2PLUS 130 - /* 131 - * XXX This function is a temporary compatibility wrapper - only 132 - * needed until the I2C driver can be converted to call 133 - * omap_pm_set_max_dev_wakeup_lat() and handle a return code. 134 - */ 135 - static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t) 136 - { 137 - omap_pm_set_max_mpu_wakeup_lat(dev, t); 138 - } 139 - 140 132 static inline int omap2_i2c_add_bus(int bus_id) 141 133 { 142 134 int l; ··· 158 170 dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr; 159 171 pdata->flags = dev_attr->flags; 160 172 161 - /* 162 - * When waiting for completion of a i2c transfer, we need to 163 - * set a wake up latency constraint for the MPU. This is to 164 - * ensure quick enough wakeup from idle, when transfer 165 - * completes. 166 - * Only omap3 has support for constraints 167 - */ 168 - if (cpu_is_omap34xx()) 169 - pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat; 170 173 pdev = omap_device_build(name, bus_id, oh, pdata, 171 174 sizeof(struct omap_i2c_bus_platform_data), 172 175 NULL, 0, 0);
+14 -13
drivers/i2c/algos/i2c-algo-pca.c
··· 46 46 #define pca_set_con(adap, val) pca_outw(adap, I2C_PCA_CON, val) 47 47 #define pca_get_con(adap) pca_inw(adap, I2C_PCA_CON) 48 48 #define pca_wait(adap) adap->wait_for_completion(adap->data) 49 - #define pca_reset(adap) adap->reset_chip(adap->data) 50 49 51 - static void pca9665_reset(void *pd) 50 + static void pca_reset(struct i2c_algo_pca_data *adap) 52 51 { 53 - struct i2c_algo_pca_data *adap = pd; 54 - pca_outw(adap, I2C_PCA_INDPTR, I2C_PCA_IPRESET); 55 - pca_outw(adap, I2C_PCA_IND, 0xA5); 56 - pca_outw(adap, I2C_PCA_IND, 0x5A); 52 + if (adap->chip == I2C_PCA_CHIP_9665) { 53 + /* Ignore the reset function from the module, 54 + * we can use the parallel bus reset. 55 + */ 56 + pca_outw(adap, I2C_PCA_INDPTR, I2C_PCA_IPRESET); 57 + pca_outw(adap, I2C_PCA_IND, 0xA5); 58 + pca_outw(adap, I2C_PCA_IND, 0x5A); 59 + } else { 60 + adap->reset_chip(adap->data); 61 + } 57 62 } 58 63 59 64 /* ··· 383 378 pca_outw(pca_data, I2C_PCA_INDPTR, I2C_PCA_IADR); 384 379 if (pca_inw(pca_data, I2C_PCA_IND) == 0xAA) { 385 380 printk(KERN_INFO "%s: PCA9665 detected.\n", adap->name); 386 - return I2C_PCA_CHIP_9665; 381 + pca_data->chip = I2C_PCA_CHIP_9665; 387 382 } else { 388 383 printk(KERN_INFO "%s: PCA9564 detected.\n", adap->name); 389 - return I2C_PCA_CHIP_9564; 384 + pca_data->chip = I2C_PCA_CHIP_9564; 390 385 } 386 + return pca_data->chip; 391 387 } 392 388 393 389 static int pca_init(struct i2c_adapter *adap) ··· 461 455 * maximum clock rate for each mode 462 456 */ 463 457 int raise_fall_time; 464 - 465 - /* Ignore the reset function from the module, 466 - * we can use the parallel bus reset 467 - */ 468 - pca_data->reset_chip = pca9665_reset; 469 458 470 459 if (pca_data->i2c_clock > 1265800) { 471 460 printk(KERN_WARNING "%s: I2C clock speed too high."
+20 -7
drivers/i2c/busses/Kconfig
··· 294 294 295 295 config I2C_AT91 296 296 tristate "Atmel AT91 I2C Two-Wire interface (TWI)" 297 - depends on ARCH_AT91 && EXPERIMENTAL && BROKEN 297 + depends on ARCH_AT91 && EXPERIMENTAL 298 298 help 299 299 This supports the use of the I2C interface on Atmel AT91 300 300 processors. 301 301 302 - This driver is BROKEN because the controller which it uses 303 - will easily trigger RX overrun and TX underrun errors. Using 304 - low I2C clock rates may partially work around those issues 305 - on some systems. Another serious problem is that there is no 306 - documented way to issue repeated START conditions, as needed 302 + A serious problem is that there is no documented way to issue 303 + repeated START conditions for more than two messages, as needed 307 304 to support combined I2C messages. Use the i2c-gpio driver 308 - unless your system can cope with those limitations. 305 + unless your system can cope with this limitation. 306 + 307 + Caution! at91rm9200, at91sam9261, at91sam9260, at91sam9263 devices 308 + don't have clock stretching in transmission mode. For that reason, 309 + you can encounter underrun issues causing premature stop sendings if 310 + the latency to fill the transmission register is too long. If you 311 + are facing this situation, use the i2c-gpio driver. 309 312 310 313 config I2C_AU1550 311 314 tristate "Au1550/Au1200/Au1300 SMBus interface" ··· 720 717 721 718 This driver can also be built as a module. If so, the module 722 719 will be called i2c-xlr. 720 + 721 + config I2C_RCAR 722 + tristate "Renesas R-Car I2C Controller" 723 + depends on ARCH_SHMOBILE && I2C 724 + help 725 + If you say yes to this option, support will be included for the 726 + R-Car I2C controller. 727 + 728 + This driver can also be built as a module. If so, the module 729 + will be called i2c-rcar. 723 730 724 731 comment "External I2C/SMBus adapter drivers" 725 732
+1
drivers/i2c/busses/Makefile
··· 71 71 obj-$(CONFIG_I2C_OCTEON) += i2c-octeon.o 72 72 obj-$(CONFIG_I2C_XILINX) += i2c-xiic.o 73 73 obj-$(CONFIG_I2C_XLR) += i2c-xlr.o 74 + obj-$(CONFIG_I2C_RCAR) += i2c-rcar.o 74 75 75 76 # External I2C/SMBus adapter drivers 76 77 obj-$(CONFIG_I2C_DIOLAN_U2C) += i2c-diolan-u2c.o
+501 -262
drivers/i2c/busses/i2c-at91.c
··· 1 1 /* 2 - i2c Support for Atmel's AT91 Two-Wire Interface (TWI) 3 - 4 - Copyright (C) 2004 Rick Bronson 5 - Converted to 2.6 by Andrew Victor <andrew@sanpeople.com> 6 - 7 - Borrowed heavily from original work by: 8 - Copyright (C) 2000 Philip Edelbrock <phil@stimpy.netroedge.com> 9 - 10 - This program is free software; you can redistribute it and/or modify 11 - it under the terms of the GNU General Public License as published by 12 - the Free Software Foundation; either version 2 of the License, or 13 - (at your option) any later version. 14 - */ 15 - 16 - #include <linux/module.h> 17 - #include <linux/kernel.h> 18 - #include <linux/err.h> 19 - #include <linux/slab.h> 20 - #include <linux/types.h> 21 - #include <linux/delay.h> 22 - #include <linux/i2c.h> 23 - #include <linux/init.h> 24 - #include <linux/clk.h> 25 - #include <linux/platform_device.h> 26 - #include <linux/io.h> 27 - 28 - #include <mach/at91_twi.h> 29 - #include <mach/board.h> 30 - #include <mach/cpu.h> 31 - 32 - #define TWI_CLOCK 100000 /* Hz. max 400 Kbits/sec */ 33 - 34 - 35 - static struct clk *twi_clk; 36 - static void __iomem *twi_base; 37 - 38 - #define at91_twi_read(reg) __raw_readl(twi_base + (reg)) 39 - #define at91_twi_write(reg, val) __raw_writel((val), twi_base + (reg)) 40 - 41 - 42 - /* 43 - * Initialize the TWI hardware registers. 44 - */ 45 - static void __devinit at91_twi_hwinit(void) 46 - { 47 - unsigned long cdiv, ckdiv; 48 - 49 - at91_twi_write(AT91_TWI_IDR, 0xffffffff); /* Disable all interrupts */ 50 - at91_twi_write(AT91_TWI_CR, AT91_TWI_SWRST); /* Reset peripheral */ 51 - at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN); /* Set Master mode */ 52 - 53 - /* Calcuate clock dividers */ 54 - cdiv = (clk_get_rate(twi_clk) / (2 * TWI_CLOCK)) - 3; 55 - cdiv = cdiv + 1; /* round up */ 56 - ckdiv = 0; 57 - while (cdiv > 255) { 58 - ckdiv++; 59 - cdiv = cdiv >> 1; 60 - } 61 - 62 - if (cpu_is_at91rm9200()) { /* AT91RM9200 Errata #22 */ 63 - if (ckdiv > 5) { 64 - printk(KERN_ERR "AT91 I2C: Invalid TWI_CLOCK value!\n"); 65 - ckdiv = 5; 66 - } 67 - } 68 - 69 - at91_twi_write(AT91_TWI_CWGR, (ckdiv << 16) | (cdiv << 8) | cdiv); 70 - } 71 - 72 - /* 73 - * Poll the i2c status register until the specified bit is set. 74 - * Returns 0 if timed out (100 msec). 75 - */ 76 - static short at91_poll_status(unsigned long bit) 77 - { 78 - int loop_cntr = 10000; 79 - 80 - do { 81 - udelay(10); 82 - } while (!(at91_twi_read(AT91_TWI_SR) & bit) && (--loop_cntr > 0)); 83 - 84 - return (loop_cntr > 0); 85 - } 86 - 87 - static int xfer_read(struct i2c_adapter *adap, unsigned char *buf, int length) 88 - { 89 - /* Send Start */ 90 - at91_twi_write(AT91_TWI_CR, AT91_TWI_START); 91 - 92 - /* Read data */ 93 - while (length--) { 94 - if (!length) /* need to send Stop before reading last byte */ 95 - at91_twi_write(AT91_TWI_CR, AT91_TWI_STOP); 96 - if (!at91_poll_status(AT91_TWI_RXRDY)) { 97 - dev_dbg(&adap->dev, "RXRDY timeout\n"); 98 - return -ETIMEDOUT; 99 - } 100 - *buf++ = (at91_twi_read(AT91_TWI_RHR) & 0xff); 101 - } 102 - 103 - return 0; 104 - } 105 - 106 - static int xfer_write(struct i2c_adapter *adap, unsigned char *buf, int length) 107 - { 108 - /* Load first byte into transmitter */ 109 - at91_twi_write(AT91_TWI_THR, *buf++); 110 - 111 - /* Send Start */ 112 - at91_twi_write(AT91_TWI_CR, AT91_TWI_START); 113 - 114 - do { 115 - if (!at91_poll_status(AT91_TWI_TXRDY)) { 116 - dev_dbg(&adap->dev, "TXRDY timeout\n"); 117 - return -ETIMEDOUT; 118 - } 119 - 120 - length--; /* byte was transmitted */ 121 - 122 - if (length > 0) /* more data to send? */ 123 - at91_twi_write(AT91_TWI_THR, *buf++); 124 - } while (length); 125 - 126 - /* Send Stop */ 127 - at91_twi_write(AT91_TWI_CR, AT91_TWI_STOP); 128 - 129 - return 0; 130 - } 131 - 132 - /* 133 - * Generic i2c master transfer entrypoint. 2 + * i2c Support for Atmel's AT91 Two-Wire Interface (TWI) 134 3 * 135 - * Note: We do not use Atmel's feature of storing the "internal device address". 136 - * Instead the "internal device address" has to be written using a separate 137 - * i2c message. 138 - * http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-September/024411.html 4 + * Copyright (C) 2011 Weinmann Medical GmbH 5 + * Author: Nikolaus Voss <n.voss@weinmann.de> 6 + * 7 + * Evolved from original work by: 8 + * Copyright (C) 2004 Rick Bronson 9 + * Converted to 2.6 by Andrew Victor <andrew@sanpeople.com> 10 + * 11 + * Borrowed heavily from original work by: 12 + * Copyright (C) 2000 Philip Edelbrock <phil@stimpy.netroedge.com> 13 + * 14 + * This program is free software; you can redistribute it and/or modify 15 + * it under the terms of the GNU General Public License as published by 16 + * the Free Software Foundation; either version 2 of the License, or 17 + * (at your option) any later version. 139 18 */ 140 - static int at91_xfer(struct i2c_adapter *adap, struct i2c_msg *pmsg, int num) 19 + 20 + #include <linux/clk.h> 21 + #include <linux/completion.h> 22 + #include <linux/err.h> 23 + #include <linux/i2c.h> 24 + #include <linux/interrupt.h> 25 + #include <linux/io.h> 26 + #include <linux/module.h> 27 + #include <linux/of.h> 28 + #include <linux/of_device.h> 29 + #include <linux/of_i2c.h> 30 + #include <linux/platform_device.h> 31 + #include <linux/slab.h> 32 + 33 + #define TWI_CLK_HZ 100000 /* max 400 Kbits/s */ 34 + #define AT91_I2C_TIMEOUT msecs_to_jiffies(100) /* transfer timeout */ 35 + 36 + /* AT91 TWI register definitions */ 37 + #define AT91_TWI_CR 0x0000 /* Control Register */ 38 + #define AT91_TWI_START 0x0001 /* Send a Start Condition */ 39 + #define AT91_TWI_STOP 0x0002 /* Send a Stop Condition */ 40 + #define AT91_TWI_MSEN 0x0004 /* Master Transfer Enable */ 41 + #define AT91_TWI_SVDIS 0x0020 /* Slave Transfer Disable */ 42 + #define AT91_TWI_SWRST 0x0080 /* Software Reset */ 43 + 44 + #define AT91_TWI_MMR 0x0004 /* Master Mode Register */ 45 + #define AT91_TWI_IADRSZ_1 0x0100 /* Internal Device Address Size */ 46 + #define AT91_TWI_MREAD 0x1000 /* Master Read Direction */ 47 + 48 + #define AT91_TWI_IADR 0x000c /* Internal Address Register */ 49 + 50 + #define AT91_TWI_CWGR 0x0010 /* Clock Waveform Generator Reg */ 51 + 52 + #define AT91_TWI_SR 0x0020 /* Status Register */ 53 + #define AT91_TWI_TXCOMP 0x0001 /* Transmission Complete */ 54 + #define AT91_TWI_RXRDY 0x0002 /* Receive Holding Register Ready */ 55 + #define AT91_TWI_TXRDY 0x0004 /* Transmit Holding Register Ready */ 56 + 57 + #define AT91_TWI_OVRE 0x0040 /* Overrun Error */ 58 + #define AT91_TWI_UNRE 0x0080 /* Underrun Error */ 59 + #define AT91_TWI_NACK 0x0100 /* Not Acknowledged */ 60 + 61 + #define AT91_TWI_IER 0x0024 /* Interrupt Enable Register */ 62 + #define AT91_TWI_IDR 0x0028 /* Interrupt Disable Register */ 63 + #define AT91_TWI_IMR 0x002c /* Interrupt Mask Register */ 64 + #define AT91_TWI_RHR 0x0030 /* Receive Holding Register */ 65 + #define AT91_TWI_THR 0x0034 /* Transmit Holding Register */ 66 + 67 + struct at91_twi_pdata { 68 + unsigned clk_max_div; 69 + unsigned clk_offset; 70 + bool has_unre_flag; 71 + }; 72 + 73 + struct at91_twi_dev { 74 + struct device *dev; 75 + void __iomem *base; 76 + struct completion cmd_complete; 77 + struct clk *clk; 78 + u8 *buf; 79 + size_t buf_len; 80 + struct i2c_msg *msg; 81 + int irq; 82 + unsigned transfer_status; 83 + struct i2c_adapter adapter; 84 + unsigned twi_cwgr_reg; 85 + struct at91_twi_pdata *pdata; 86 + }; 87 + 88 + static unsigned at91_twi_read(struct at91_twi_dev *dev, unsigned reg) 141 89 { 142 - int i, ret; 90 + return readl_relaxed(dev->base + reg); 91 + } 92 + 93 + static void at91_twi_write(struct at91_twi_dev *dev, unsigned reg, unsigned val) 94 + { 95 + writel_relaxed(val, dev->base + reg); 96 + } 97 + 98 + static void at91_disable_twi_interrupts(struct at91_twi_dev *dev) 99 + { 100 + at91_twi_write(dev, AT91_TWI_IDR, 101 + AT91_TWI_TXCOMP | AT91_TWI_RXRDY | AT91_TWI_TXRDY); 102 + } 103 + 104 + static void at91_init_twi_bus(struct at91_twi_dev *dev) 105 + { 106 + at91_disable_twi_interrupts(dev); 107 + at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_SWRST); 108 + at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_MSEN); 109 + at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_SVDIS); 110 + at91_twi_write(dev, AT91_TWI_CWGR, dev->twi_cwgr_reg); 111 + } 112 + 113 + /* 114 + * Calculate symmetric clock as stated in datasheet: 115 + * twi_clk = F_MAIN / (2 * (cdiv * (1 << ckdiv) + offset)) 116 + */ 117 + static void __devinit at91_calc_twi_clock(struct at91_twi_dev *dev, int twi_clk) 118 + { 119 + int ckdiv, cdiv, div; 120 + struct at91_twi_pdata *pdata = dev->pdata; 121 + int offset = pdata->clk_offset; 122 + int max_ckdiv = pdata->clk_max_div; 123 + 124 + div = max(0, (int)DIV_ROUND_UP(clk_get_rate(dev->clk), 125 + 2 * twi_clk) - offset); 126 + ckdiv = fls(div >> 8); 127 + cdiv = div >> ckdiv; 128 + 129 + if (ckdiv > max_ckdiv) { 130 + dev_warn(dev->dev, "%d exceeds ckdiv max value which is %d.\n", 131 + ckdiv, max_ckdiv); 132 + ckdiv = max_ckdiv; 133 + cdiv = 255; 134 + } 135 + 136 + dev->twi_cwgr_reg = (ckdiv << 16) | (cdiv << 8) | cdiv; 137 + dev_dbg(dev->dev, "cdiv %d ckdiv %d\n", cdiv, ckdiv); 138 + } 139 + 140 + static void at91_twi_write_next_byte(struct at91_twi_dev *dev) 141 + { 142 + if (dev->buf_len <= 0) 143 + return; 144 + 145 + at91_twi_write(dev, AT91_TWI_THR, *dev->buf); 146 + 147 + /* send stop when last byte has been written */ 148 + if (--dev->buf_len == 0) 149 + at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP); 150 + 151 + dev_dbg(dev->dev, "wrote 0x%x, to go %d\n", *dev->buf, dev->buf_len); 152 + 153 + ++dev->buf; 154 + } 155 + 156 + static void at91_twi_read_next_byte(struct at91_twi_dev *dev) 157 + { 158 + if (dev->buf_len <= 0) 159 + return; 160 + 161 + *dev->buf = at91_twi_read(dev, AT91_TWI_RHR) & 0xff; 162 + --dev->buf_len; 163 + 164 + /* handle I2C_SMBUS_BLOCK_DATA */ 165 + if (unlikely(dev->msg->flags & I2C_M_RECV_LEN)) { 166 + dev->msg->flags &= ~I2C_M_RECV_LEN; 167 + dev->buf_len += *dev->buf; 168 + dev->msg->len = dev->buf_len + 1; 169 + dev_dbg(dev->dev, "received block length %d\n", dev->buf_len); 170 + } 171 + 172 + /* send stop if second but last byte has been read */ 173 + if (dev->buf_len == 1) 174 + at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP); 175 + 176 + dev_dbg(dev->dev, "read 0x%x, to go %d\n", *dev->buf, dev->buf_len); 177 + 178 + ++dev->buf; 179 + } 180 + 181 + static irqreturn_t atmel_twi_interrupt(int irq, void *dev_id) 182 + { 183 + struct at91_twi_dev *dev = dev_id; 184 + const unsigned status = at91_twi_read(dev, AT91_TWI_SR); 185 + const unsigned irqstatus = status & at91_twi_read(dev, AT91_TWI_IMR); 186 + 187 + if (!irqstatus) 188 + return IRQ_NONE; 189 + else if (irqstatus & AT91_TWI_RXRDY) 190 + at91_twi_read_next_byte(dev); 191 + else if (irqstatus & AT91_TWI_TXRDY) 192 + at91_twi_write_next_byte(dev); 193 + 194 + /* catch error flags */ 195 + dev->transfer_status |= status; 196 + 197 + if (irqstatus & AT91_TWI_TXCOMP) { 198 + at91_disable_twi_interrupts(dev); 199 + complete(&dev->cmd_complete); 200 + } 201 + 202 + return IRQ_HANDLED; 203 + } 204 + 205 + static int at91_do_twi_transfer(struct at91_twi_dev *dev) 206 + { 207 + int ret; 208 + bool has_unre_flag = dev->pdata->has_unre_flag; 209 + 210 + dev_dbg(dev->dev, "transfer: %s %d bytes.\n", 211 + (dev->msg->flags & I2C_M_RD) ? "read" : "write", dev->buf_len); 212 + 213 + INIT_COMPLETION(dev->cmd_complete); 214 + dev->transfer_status = 0; 215 + if (dev->msg->flags & I2C_M_RD) { 216 + unsigned start_flags = AT91_TWI_START; 217 + 218 + if (at91_twi_read(dev, AT91_TWI_SR) & AT91_TWI_RXRDY) { 219 + dev_err(dev->dev, "RXRDY still set!"); 220 + at91_twi_read(dev, AT91_TWI_RHR); 221 + } 222 + 223 + /* if only one byte is to be read, immediately stop transfer */ 224 + if (dev->buf_len <= 1 && !(dev->msg->flags & I2C_M_RECV_LEN)) 225 + start_flags |= AT91_TWI_STOP; 226 + at91_twi_write(dev, AT91_TWI_CR, start_flags); 227 + at91_twi_write(dev, AT91_TWI_IER, 228 + AT91_TWI_TXCOMP | AT91_TWI_RXRDY); 229 + } else { 230 + at91_twi_write_next_byte(dev); 231 + at91_twi_write(dev, AT91_TWI_IER, 232 + AT91_TWI_TXCOMP | AT91_TWI_TXRDY); 233 + } 234 + 235 + ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete, 236 + dev->adapter.timeout); 237 + if (ret == 0) { 238 + dev_err(dev->dev, "controller timed out\n"); 239 + at91_init_twi_bus(dev); 240 + return -ETIMEDOUT; 241 + } 242 + if (dev->transfer_status & AT91_TWI_NACK) { 243 + dev_dbg(dev->dev, "received nack\n"); 244 + return -EREMOTEIO; 245 + } 246 + if (dev->transfer_status & AT91_TWI_OVRE) { 247 + dev_err(dev->dev, "overrun while reading\n"); 248 + return -EIO; 249 + } 250 + if (has_unre_flag && dev->transfer_status & AT91_TWI_UNRE) { 251 + dev_err(dev->dev, "underrun while writing\n"); 252 + return -EIO; 253 + } 254 + dev_dbg(dev->dev, "transfer complete\n"); 255 + 256 + return 0; 257 + } 258 + 259 + static int at91_twi_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, int num) 260 + { 261 + struct at91_twi_dev *dev = i2c_get_adapdata(adap); 262 + int ret; 263 + unsigned int_addr_flag = 0; 264 + struct i2c_msg *m_start = msg; 143 265 144 266 dev_dbg(&adap->dev, "at91_xfer: processing %d messages:\n", num); 145 267 146 - for (i = 0; i < num; i++) { 147 - dev_dbg(&adap->dev, " #%d: %sing %d byte%s %s 0x%02x\n", i, 148 - pmsg->flags & I2C_M_RD ? "read" : "writ", 149 - pmsg->len, pmsg->len > 1 ? "s" : "", 150 - pmsg->flags & I2C_M_RD ? "from" : "to", pmsg->addr); 268 + /* 269 + * The hardware can handle at most two messages concatenated by a 270 + * repeated start via it's internal address feature. 271 + */ 272 + if (num > 2) { 273 + dev_err(dev->dev, 274 + "cannot handle more than two concatenated messages.\n"); 275 + return 0; 276 + } else if (num == 2) { 277 + int internal_address = 0; 278 + int i; 151 279 152 - at91_twi_write(AT91_TWI_MMR, (pmsg->addr << 16) 153 - | ((pmsg->flags & I2C_M_RD) ? AT91_TWI_MREAD : 0)); 154 - 155 - if (pmsg->len && pmsg->buf) { /* sanity check */ 156 - if (pmsg->flags & I2C_M_RD) 157 - ret = xfer_read(adap, pmsg->buf, pmsg->len); 158 - else 159 - ret = xfer_write(adap, pmsg->buf, pmsg->len); 160 - 161 - if (ret) 162 - return ret; 163 - 164 - /* Wait until transfer is finished */ 165 - if (!at91_poll_status(AT91_TWI_TXCOMP)) { 166 - dev_dbg(&adap->dev, "TXCOMP timeout\n"); 167 - return -ETIMEDOUT; 168 - } 280 + if (msg->flags & I2C_M_RD) { 281 + dev_err(dev->dev, "first transfer must be write.\n"); 282 + return -EINVAL; 169 283 } 170 - dev_dbg(&adap->dev, "transfer complete\n"); 171 - pmsg++; /* next message */ 284 + if (msg->len > 3) { 285 + dev_err(dev->dev, "first message size must be <= 3.\n"); 286 + return -EINVAL; 287 + } 288 + 289 + /* 1st msg is put into the internal address, start with 2nd */ 290 + m_start = &msg[1]; 291 + for (i = 0; i < msg->len; ++i) { 292 + const unsigned addr = msg->buf[msg->len - 1 - i]; 293 + 294 + internal_address |= addr << (8 * i); 295 + int_addr_flag += AT91_TWI_IADRSZ_1; 296 + } 297 + at91_twi_write(dev, AT91_TWI_IADR, internal_address); 172 298 } 173 - return i; 299 + 300 + at91_twi_write(dev, AT91_TWI_MMR, (m_start->addr << 16) | int_addr_flag 301 + | ((m_start->flags & I2C_M_RD) ? AT91_TWI_MREAD : 0)); 302 + 303 + dev->buf_len = m_start->len; 304 + dev->buf = m_start->buf; 305 + dev->msg = m_start; 306 + 307 + ret = at91_do_twi_transfer(dev); 308 + 309 + return (ret < 0) ? ret : num; 174 310 } 175 311 176 - /* 177 - * Return list of supported functionality. 178 - */ 179 - static u32 at91_func(struct i2c_adapter *adapter) 312 + static u32 at91_twi_func(struct i2c_adapter *adapter) 180 313 { 181 - return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; 314 + return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL 315 + | I2C_FUNC_SMBUS_READ_BLOCK_DATA; 182 316 } 183 317 184 - static struct i2c_algorithm at91_algorithm = { 185 - .master_xfer = at91_xfer, 186 - .functionality = at91_func, 318 + static struct i2c_algorithm at91_twi_algorithm = { 319 + .master_xfer = at91_twi_xfer, 320 + .functionality = at91_twi_func, 187 321 }; 188 322 189 - /* 190 - * Main initialization routine. 191 - */ 192 - static int __devinit at91_i2c_probe(struct platform_device *pdev) 323 + static struct at91_twi_pdata at91rm9200_config = { 324 + .clk_max_div = 5, 325 + .clk_offset = 3, 326 + .has_unre_flag = true, 327 + }; 328 + 329 + static struct at91_twi_pdata at91sam9261_config = { 330 + .clk_max_div = 5, 331 + .clk_offset = 4, 332 + .has_unre_flag = false, 333 + }; 334 + 335 + static struct at91_twi_pdata at91sam9260_config = { 336 + .clk_max_div = 7, 337 + .clk_offset = 4, 338 + .has_unre_flag = false, 339 + }; 340 + 341 + static struct at91_twi_pdata at91sam9g20_config = { 342 + .clk_max_div = 7, 343 + .clk_offset = 4, 344 + .has_unre_flag = false, 345 + }; 346 + 347 + static struct at91_twi_pdata at91sam9g10_config = { 348 + .clk_max_div = 7, 349 + .clk_offset = 4, 350 + .has_unre_flag = false, 351 + }; 352 + 353 + static struct at91_twi_pdata at91sam9x5_config = { 354 + .clk_max_div = 7, 355 + .clk_offset = 4, 356 + .has_unre_flag = false, 357 + }; 358 + 359 + static const struct platform_device_id at91_twi_devtypes[] = { 360 + { 361 + .name = "i2c-at91rm9200", 362 + .driver_data = (unsigned long) &at91rm9200_config, 363 + }, { 364 + .name = "i2c-at91sam9261", 365 + .driver_data = (unsigned long) &at91sam9261_config, 366 + }, { 367 + .name = "i2c-at91sam9260", 368 + .driver_data = (unsigned long) &at91sam9260_config, 369 + }, { 370 + .name = "i2c-at91sam9g20", 371 + .driver_data = (unsigned long) &at91sam9g20_config, 372 + }, { 373 + .name = "i2c-at91sam9g10", 374 + .driver_data = (unsigned long) &at91sam9g10_config, 375 + }, { 376 + /* sentinel */ 377 + } 378 + }; 379 + 380 + #if defined(CONFIG_OF) 381 + static const struct of_device_id atmel_twi_dt_ids[] = { 382 + { 383 + .compatible = "atmel,at91sam9260-i2c", 384 + .data = &at91sam9260_config, 385 + } , { 386 + .compatible = "atmel,at91sam9g20-i2c", 387 + .data = &at91sam9g20_config, 388 + } , { 389 + .compatible = "atmel,at91sam9g10-i2c", 390 + .data = &at91sam9g10_config, 391 + }, { 392 + .compatible = "atmel,at91sam9x5-i2c", 393 + .data = &at91sam9x5_config, 394 + }, { 395 + /* sentinel */ 396 + } 397 + }; 398 + MODULE_DEVICE_TABLE(of, atmel_twi_dt_ids); 399 + #else 400 + #define atmel_twi_dt_ids NULL 401 + #endif 402 + 403 + static struct at91_twi_pdata * __devinit at91_twi_get_driver_data( 404 + struct platform_device *pdev) 193 405 { 194 - struct i2c_adapter *adapter; 195 - struct resource *res; 196 - int rc; 197 - 198 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 199 - if (!res) 200 - return -ENXIO; 201 - 202 - if (!request_mem_region(res->start, resource_size(res), "at91_i2c")) 203 - return -EBUSY; 204 - 205 - twi_base = ioremap(res->start, resource_size(res)); 206 - if (!twi_base) { 207 - rc = -ENOMEM; 208 - goto fail0; 406 + if (pdev->dev.of_node) { 407 + const struct of_device_id *match; 408 + match = of_match_node(atmel_twi_dt_ids, pdev->dev.of_node); 409 + if (!match) 410 + return NULL; 411 + return match->data; 209 412 } 210 - 211 - twi_clk = clk_get(NULL, "twi_clk"); 212 - if (IS_ERR(twi_clk)) { 213 - dev_err(&pdev->dev, "no clock defined\n"); 214 - rc = -ENODEV; 215 - goto fail1; 216 - } 217 - 218 - adapter = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL); 219 - if (adapter == NULL) { 220 - dev_err(&pdev->dev, "can't allocate inteface!\n"); 221 - rc = -ENOMEM; 222 - goto fail2; 223 - } 224 - snprintf(adapter->name, sizeof(adapter->name), "AT91"); 225 - adapter->algo = &at91_algorithm; 226 - adapter->class = I2C_CLASS_HWMON; 227 - adapter->dev.parent = &pdev->dev; 228 - /* adapter->id == 0 ... only one TWI controller for now */ 229 - 230 - platform_set_drvdata(pdev, adapter); 231 - 232 - clk_enable(twi_clk); /* enable peripheral clock */ 233 - at91_twi_hwinit(); /* initialize TWI controller */ 234 - 235 - rc = i2c_add_numbered_adapter(adapter); 236 - if (rc) { 237 - dev_err(&pdev->dev, "Adapter %s registration failed\n", 238 - adapter->name); 239 - goto fail3; 240 - } 241 - 242 - dev_info(&pdev->dev, "AT91 i2c bus driver.\n"); 243 - return 0; 244 - 245 - fail3: 246 - platform_set_drvdata(pdev, NULL); 247 - kfree(adapter); 248 - clk_disable(twi_clk); 249 - fail2: 250 - clk_put(twi_clk); 251 - fail1: 252 - iounmap(twi_base); 253 - fail0: 254 - release_mem_region(res->start, resource_size(res)); 255 - 256 - return rc; 413 + return (struct at91_twi_pdata *) platform_get_device_id(pdev)->driver_data; 257 414 } 258 415 259 - static int __devexit at91_i2c_remove(struct platform_device *pdev) 416 + static int __devinit at91_twi_probe(struct platform_device *pdev) 260 417 { 261 - struct i2c_adapter *adapter = platform_get_drvdata(pdev); 262 - struct resource *res; 418 + struct at91_twi_dev *dev; 419 + struct resource *mem; 263 420 int rc; 264 421 265 - rc = i2c_del_adapter(adapter); 266 - platform_set_drvdata(pdev, NULL); 422 + dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); 423 + if (!dev) 424 + return -ENOMEM; 425 + init_completion(&dev->cmd_complete); 426 + dev->dev = &pdev->dev; 267 427 268 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 269 - iounmap(twi_base); 270 - release_mem_region(res->start, resource_size(res)); 428 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 429 + if (!mem) 430 + return -ENODEV; 271 431 272 - clk_disable(twi_clk); /* disable peripheral clock */ 273 - clk_put(twi_clk); 432 + dev->pdata = at91_twi_get_driver_data(pdev); 433 + if (!dev->pdata) 434 + return -ENODEV; 435 + 436 + dev->base = devm_request_and_ioremap(&pdev->dev, mem); 437 + if (!dev->base) 438 + return -EBUSY; 439 + 440 + dev->irq = platform_get_irq(pdev, 0); 441 + if (dev->irq < 0) 442 + return dev->irq; 443 + 444 + rc = devm_request_irq(&pdev->dev, dev->irq, atmel_twi_interrupt, 0, 445 + dev_name(dev->dev), dev); 446 + if (rc) { 447 + dev_err(dev->dev, "Cannot get irq %d: %d\n", dev->irq, rc); 448 + return rc; 449 + } 450 + 451 + platform_set_drvdata(pdev, dev); 452 + 453 + dev->clk = devm_clk_get(dev->dev, NULL); 454 + if (IS_ERR(dev->clk)) { 455 + dev_err(dev->dev, "no clock defined\n"); 456 + return -ENODEV; 457 + } 458 + clk_prepare_enable(dev->clk); 459 + 460 + at91_calc_twi_clock(dev, TWI_CLK_HZ); 461 + at91_init_twi_bus(dev); 462 + 463 + snprintf(dev->adapter.name, sizeof(dev->adapter.name), "AT91"); 464 + i2c_set_adapdata(&dev->adapter, dev); 465 + dev->adapter.owner = THIS_MODULE; 466 + dev->adapter.class = I2C_CLASS_HWMON; 467 + dev->adapter.algo = &at91_twi_algorithm; 468 + dev->adapter.dev.parent = dev->dev; 469 + dev->adapter.nr = pdev->id; 470 + dev->adapter.timeout = AT91_I2C_TIMEOUT; 471 + dev->adapter.dev.of_node = pdev->dev.of_node; 472 + 473 + rc = i2c_add_numbered_adapter(&dev->adapter); 474 + if (rc) { 475 + dev_err(dev->dev, "Adapter %s registration failed\n", 476 + dev->adapter.name); 477 + clk_disable_unprepare(dev->clk); 478 + return rc; 479 + } 480 + 481 + of_i2c_register_devices(&dev->adapter); 482 + 483 + dev_info(dev->dev, "AT91 i2c bus driver.\n"); 484 + return 0; 485 + } 486 + 487 + static int __devexit at91_twi_remove(struct platform_device *pdev) 488 + { 489 + struct at91_twi_dev *dev = platform_get_drvdata(pdev); 490 + int rc; 491 + 492 + rc = i2c_del_adapter(&dev->adapter); 493 + clk_disable_unprepare(dev->clk); 274 494 275 495 return rc; 276 496 } 277 497 278 498 #ifdef CONFIG_PM 279 499 280 - /* NOTE: could save a few mA by keeping clock off outside of at91_xfer... */ 281 - 282 - static int at91_i2c_suspend(struct device *dev) 500 + static int at91_twi_runtime_suspend(struct device *dev) 283 501 { 284 - clk_disable(twi_clk); 502 + struct at91_twi_dev *twi_dev = dev_get_drvdata(dev); 503 + 504 + clk_disable(twi_dev->clk); 505 + 285 506 return 0; 286 507 } 287 508 288 - static int at91_i2c_resume(struct device *dev) 509 + static int at91_twi_runtime_resume(struct device *dev) 289 510 { 290 - return clk_enable(twi_clk); 511 + struct at91_twi_dev *twi_dev = dev_get_drvdata(dev); 512 + 513 + return clk_enable(twi_dev->clk); 291 514 } 292 515 293 - static SIMPLE_DEV_PM_OPS(at91_i2c_pm, at91_i2c_suspend, at91_i2c_resume); 294 - #define AT91_I2C_PM (&at91_i2c_pm) 516 + static const struct dev_pm_ops at91_twi_pm = { 517 + .runtime_suspend = at91_twi_runtime_suspend, 518 + .runtime_resume = at91_twi_runtime_resume, 519 + }; 295 520 521 + #define at91_twi_pm_ops (&at91_twi_pm) 296 522 #else 297 - #define AT91_I2C_PM NULL 523 + #define at91_twi_pm_ops NULL 298 524 #endif 299 525 300 - static struct platform_driver at91_i2c_driver = { 301 - .probe = at91_i2c_probe, 302 - .remove = __devexit_p(at91_i2c_remove), 526 + static struct platform_driver at91_twi_driver = { 527 + .probe = at91_twi_probe, 528 + .remove = __devexit_p(at91_twi_remove), 529 + .id_table = at91_twi_devtypes, 303 530 .driver = { 304 531 .name = "at91_i2c", 305 532 .owner = THIS_MODULE, 306 - .pm = AT91_I2C_PM, 533 + .of_match_table = atmel_twi_dt_ids, 534 + .pm = at91_twi_pm_ops, 307 535 }, 308 536 }; 309 537 310 - module_platform_driver(at91_i2c_driver); 538 + static int __init at91_twi_init(void) 539 + { 540 + return platform_driver_register(&at91_twi_driver); 541 + } 311 542 312 - MODULE_AUTHOR("Rick Bronson"); 543 + static void __exit at91_twi_exit(void) 544 + { 545 + platform_driver_unregister(&at91_twi_driver); 546 + } 547 + 548 + subsys_initcall(at91_twi_init); 549 + module_exit(at91_twi_exit); 550 + 551 + MODULE_AUTHOR("Nikolaus Voss <n.voss@weinmann.de>"); 313 552 MODULE_DESCRIPTION("I2C (TWI) driver for Atmel AT91"); 314 553 MODULE_LICENSE("GPL"); 315 554 MODULE_ALIAS("platform:at91_i2c");
+42 -16
drivers/i2c/busses/i2c-davinci.c
··· 38 38 #include <linux/slab.h> 39 39 #include <linux/cpufreq.h> 40 40 #include <linux/gpio.h> 41 + #include <linux/of_i2c.h> 42 + #include <linux/of_device.h> 41 43 42 44 #include <mach/hardware.h> 43 45 #include <linux/platform_data/i2c-davinci.h> ··· 116 114 struct completion xfr_complete; 117 115 struct notifier_block freq_transition; 118 116 #endif 117 + struct davinci_i2c_platform_data *pdata; 119 118 }; 120 119 121 120 /* default platform data to use if not supplied in the platform_device */ ··· 158 155 static void i2c_recover_bus(struct davinci_i2c_dev *dev) 159 156 { 160 157 u32 flag = 0; 161 - struct davinci_i2c_platform_data *pdata = dev->dev->platform_data; 158 + struct davinci_i2c_platform_data *pdata = dev->pdata; 162 159 163 160 dev_err(dev->dev, "initiating i2c bus recovery\n"); 164 161 /* Send NACK to the slave */ ··· 166 163 flag |= DAVINCI_I2C_MDR_NACK; 167 164 /* write the data into mode register */ 168 165 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); 169 - if (pdata) 170 - generic_i2c_clock_pulse(pdata->scl_pin); 166 + generic_i2c_clock_pulse(pdata->scl_pin); 171 167 /* Send STOP */ 172 168 flag = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); 173 169 flag |= DAVINCI_I2C_MDR_STP; ··· 189 187 190 188 static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev) 191 189 { 192 - struct davinci_i2c_platform_data *pdata = dev->dev->platform_data; 190 + struct davinci_i2c_platform_data *pdata = dev->pdata; 193 191 u16 psc; 194 192 u32 clk; 195 193 u32 d; ··· 237 235 */ 238 236 static int i2c_davinci_init(struct davinci_i2c_dev *dev) 239 237 { 240 - struct davinci_i2c_platform_data *pdata = dev->dev->platform_data; 241 - 242 - if (!pdata) 243 - pdata = &davinci_i2c_platform_data_default; 238 + struct davinci_i2c_platform_data *pdata = dev->pdata; 244 239 245 240 /* put I2C into reset */ 246 241 davinci_i2c_reset_ctrl(dev, 0); ··· 258 259 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKH_REG)); 259 260 dev_dbg(dev->dev, "bus_freq = %dkHz, bus_delay = %d\n", 260 261 pdata->bus_freq, pdata->bus_delay); 262 + 261 263 262 264 /* Take the I2C module out of reset: */ 263 265 davinci_i2c_reset_ctrl(dev, 1); ··· 308 308 i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop) 309 309 { 310 310 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); 311 - struct davinci_i2c_platform_data *pdata = dev->dev->platform_data; 311 + struct davinci_i2c_platform_data *pdata = dev->pdata; 312 312 u32 flag; 313 313 u16 w; 314 314 int r; 315 315 316 - if (!pdata) 317 - pdata = &davinci_i2c_platform_data_default; 318 316 /* Introduce a delay, required for some boards (e.g Davinci EVM) */ 319 317 if (pdata->bus_delay) 320 318 udelay(pdata->bus_delay); ··· 633 635 .functionality = i2c_davinci_func, 634 636 }; 635 637 638 + static const struct of_device_id davinci_i2c_of_match[] = { 639 + {.compatible = "ti,davinci-i2c", }, 640 + {}, 641 + }; 642 + MODULE_DEVICE_TABLE(of, davinci_i2c_of_match); 643 + 636 644 static int davinci_i2c_probe(struct platform_device *pdev) 637 645 { 638 646 struct davinci_i2c_dev *dev; ··· 678 674 #endif 679 675 dev->dev = get_device(&pdev->dev); 680 676 dev->irq = irq->start; 677 + dev->pdata = dev->dev->platform_data; 681 678 platform_set_drvdata(pdev, dev); 679 + 680 + if (!dev->pdata && pdev->dev.of_node) { 681 + u32 prop; 682 + 683 + dev->pdata = devm_kzalloc(&pdev->dev, 684 + sizeof(struct davinci_i2c_platform_data), GFP_KERNEL); 685 + if (!dev->pdata) { 686 + r = -ENOMEM; 687 + goto err_free_mem; 688 + } 689 + memcpy(dev->pdata, &davinci_i2c_platform_data_default, 690 + sizeof(struct davinci_i2c_platform_data)); 691 + if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency", 692 + &prop)) 693 + dev->pdata->bus_freq = prop / 1000; 694 + } else if (!dev->pdata) { 695 + dev->pdata = &davinci_i2c_platform_data_default; 696 + } 682 697 683 698 dev->clk = clk_get(&pdev->dev, NULL); 684 699 if (IS_ERR(dev->clk)) { 685 700 r = -ENODEV; 686 701 goto err_free_mem; 687 702 } 688 - clk_enable(dev->clk); 703 + clk_prepare_enable(dev->clk); 689 704 690 705 dev->base = ioremap(mem->start, resource_size(mem)); 691 706 if (!dev->base) { ··· 734 711 adap->algo = &i2c_davinci_algo; 735 712 adap->dev.parent = &pdev->dev; 736 713 adap->timeout = DAVINCI_I2C_TIMEOUT; 714 + adap->dev.of_node = pdev->dev.of_node; 737 715 738 716 adap->nr = pdev->id; 739 717 r = i2c_add_numbered_adapter(adap); ··· 742 718 dev_err(&pdev->dev, "failure adding adapter\n"); 743 719 goto err_free_irq; 744 720 } 721 + of_i2c_register_devices(adap); 745 722 746 723 return 0; 747 724 ··· 751 726 err_unuse_clocks: 752 727 iounmap(dev->base); 753 728 err_mem_ioremap: 754 - clk_disable(dev->clk); 729 + clk_disable_unprepare(dev->clk); 755 730 clk_put(dev->clk); 756 731 dev->clk = NULL; 757 732 err_free_mem: ··· 775 750 i2c_del_adapter(&dev->adapter); 776 751 put_device(&pdev->dev); 777 752 778 - clk_disable(dev->clk); 753 + clk_disable_unprepare(dev->clk); 779 754 clk_put(dev->clk); 780 755 dev->clk = NULL; 781 756 ··· 797 772 798 773 /* put I2C into reset */ 799 774 davinci_i2c_reset_ctrl(i2c_dev, 0); 800 - clk_disable(i2c_dev->clk); 775 + clk_disable_unprepare(i2c_dev->clk); 801 776 802 777 return 0; 803 778 } ··· 807 782 struct platform_device *pdev = to_platform_device(dev); 808 783 struct davinci_i2c_dev *i2c_dev = platform_get_drvdata(pdev); 809 784 810 - clk_enable(i2c_dev->clk); 785 + clk_prepare_enable(i2c_dev->clk); 811 786 /* take I2C out of reset */ 812 787 davinci_i2c_reset_ctrl(i2c_dev, 1); 813 788 ··· 834 809 .name = "i2c_davinci", 835 810 .owner = THIS_MODULE, 836 811 .pm = davinci_i2c_pm_ops, 812 + .of_match_table = of_match_ptr(davinci_i2c_of_match), 837 813 }, 838 814 }; 839 815
+3 -3
drivers/i2c/busses/i2c-imx.c
··· 272 272 273 273 /* dev_dbg() can't be used, because adapter is not yet registered */ 274 274 #ifdef CONFIG_I2C_DEBUG_BUS 275 - printk(KERN_DEBUG "I2C: <%s> I2C_CLK=%d, REQ DIV=%d\n", 275 + dev_dbg(&i2c_imx->adapter.dev, "<%s> I2C_CLK=%d, REQ DIV=%d\n", 276 276 __func__, i2c_clk_rate, div); 277 - printk(KERN_DEBUG "I2C: <%s> IFDR[IC]=0x%x, REAL DIV=%d\n", 277 + dev_dbg(&i2c_imx->adapter.dev, "<%s> IFDR[IC]=0x%x, REAL DIV=%d\n", 278 278 __func__, i2c_clk_div[i][1], i2c_clk_div[i][0]); 279 279 #endif 280 280 } ··· 564 564 resource_size(res), res->start); 565 565 dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n", 566 566 i2c_imx->adapter.name); 567 - dev_dbg(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); 567 + dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); 568 568 569 569 return 0; /* Return OK */ 570 570 }
+17 -1
drivers/i2c/busses/i2c-mpc.c
··· 576 576 mpc_write(i2c, pmsg->addr, pmsg->buf, pmsg->len, i); 577 577 } 578 578 } 579 - mpc_i2c_stop(i2c); 579 + mpc_i2c_stop(i2c); /* Initiate STOP */ 580 + orig_jiffies = jiffies; 581 + /* Wait until STOP is seen, allow up to 1 s */ 582 + while (readb(i2c->base + MPC_I2C_SR) & CSR_MBB) { 583 + if (time_after(jiffies, orig_jiffies + HZ)) { 584 + u8 status = readb(i2c->base + MPC_I2C_SR); 585 + 586 + dev_dbg(i2c->dev, "timeout\n"); 587 + if ((status & (CSR_MCF | CSR_MBB | CSR_RXAK)) != 0) { 588 + writeb(status & ~CSR_MAL, 589 + i2c->base + MPC_I2C_SR); 590 + mpc_i2c_fixup(i2c); 591 + } 592 + return -EIO; 593 + } 594 + cond_resched(); 595 + } 580 596 return (ret < 0) ? ret : num; 581 597 } 582 598
+247 -22
drivers/i2c/busses/i2c-mxs.c
··· 7 7 * 8 8 * Copyright (C) 2009-2010 Freescale Semiconductor, Inc. All Rights Reserved. 9 9 * 10 - * TODO: add dma-support if platform-support for it is available 11 - * 12 10 * This program is free software; you can redistribute it and/or modify 13 11 * it under the terms of the GNU General Public License as published by 14 12 * the Free Software Foundation; either version 2 of the License, or ··· 29 31 #include <linux/of.h> 30 32 #include <linux/of_device.h> 31 33 #include <linux/of_i2c.h> 34 + #include <linux/dma-mapping.h> 35 + #include <linux/dmaengine.h> 36 + #include <linux/fsl/mxs-dma.h> 32 37 33 38 #define DRIVER_NAME "mxs-i2c" 39 + 40 + static bool use_pioqueue; 41 + module_param(use_pioqueue, bool, 0); 42 + MODULE_PARM_DESC(use_pioqueue, "Use PIOQUEUE mode for transfer instead of DMA"); 34 43 35 44 #define MXS_I2C_CTRL0 (0x00) 36 45 #define MXS_I2C_CTRL0_SET (0x04) ··· 151 146 u32 cmd_err; 152 147 struct i2c_adapter adapter; 153 148 const struct mxs_i2c_speed_config *speed; 149 + 150 + /* DMA support components */ 151 + bool dma_mode; 152 + int dma_channel; 153 + struct dma_chan *dmach; 154 + struct mxs_dma_data dma_data; 155 + uint32_t pio_data[2]; 156 + uint32_t addr_data; 157 + struct scatterlist sg_io[2]; 158 + bool dma_read; 154 159 }; 155 160 156 161 static void mxs_i2c_reset(struct mxs_i2c_dev *i2c) ··· 172 157 writel(i2c->speed->timing2, i2c->regs + MXS_I2C_TIMING2); 173 158 174 159 writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_SET); 175 - writel(MXS_I2C_QUEUECTRL_PIO_QUEUE_MODE, 160 + if (i2c->dma_mode) 161 + writel(MXS_I2C_QUEUECTRL_PIO_QUEUE_MODE, 162 + i2c->regs + MXS_I2C_QUEUECTRL_CLR); 163 + else 164 + writel(MXS_I2C_QUEUECTRL_PIO_QUEUE_MODE, 176 165 i2c->regs + MXS_I2C_QUEUECTRL_SET); 177 166 } 178 167 ··· 267 248 return 0; 268 249 } 269 250 251 + static void mxs_i2c_dma_finish(struct mxs_i2c_dev *i2c) 252 + { 253 + if (i2c->dma_read) { 254 + dma_unmap_sg(i2c->dev, &i2c->sg_io[0], 1, DMA_TO_DEVICE); 255 + dma_unmap_sg(i2c->dev, &i2c->sg_io[1], 1, DMA_FROM_DEVICE); 256 + } else { 257 + dma_unmap_sg(i2c->dev, i2c->sg_io, 2, DMA_TO_DEVICE); 258 + } 259 + } 260 + 261 + static void mxs_i2c_dma_irq_callback(void *param) 262 + { 263 + struct mxs_i2c_dev *i2c = param; 264 + 265 + complete(&i2c->cmd_complete); 266 + mxs_i2c_dma_finish(i2c); 267 + } 268 + 269 + static int mxs_i2c_dma_setup_xfer(struct i2c_adapter *adap, 270 + struct i2c_msg *msg, uint32_t flags) 271 + { 272 + struct dma_async_tx_descriptor *desc; 273 + struct mxs_i2c_dev *i2c = i2c_get_adapdata(adap); 274 + 275 + if (msg->flags & I2C_M_RD) { 276 + i2c->dma_read = 1; 277 + i2c->addr_data = (msg->addr << 1) | I2C_SMBUS_READ; 278 + 279 + /* 280 + * SELECT command. 281 + */ 282 + 283 + /* Queue the PIO register write transfer. */ 284 + i2c->pio_data[0] = MXS_CMD_I2C_SELECT; 285 + desc = dmaengine_prep_slave_sg(i2c->dmach, 286 + (struct scatterlist *)&i2c->pio_data[0], 287 + 1, DMA_TRANS_NONE, 0); 288 + if (!desc) { 289 + dev_err(i2c->dev, 290 + "Failed to get PIO reg. write descriptor.\n"); 291 + goto select_init_pio_fail; 292 + } 293 + 294 + /* Queue the DMA data transfer. */ 295 + sg_init_one(&i2c->sg_io[0], &i2c->addr_data, 1); 296 + dma_map_sg(i2c->dev, &i2c->sg_io[0], 1, DMA_TO_DEVICE); 297 + desc = dmaengine_prep_slave_sg(i2c->dmach, &i2c->sg_io[0], 1, 298 + DMA_MEM_TO_DEV, 299 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 300 + if (!desc) { 301 + dev_err(i2c->dev, 302 + "Failed to get DMA data write descriptor.\n"); 303 + goto select_init_dma_fail; 304 + } 305 + 306 + /* 307 + * READ command. 308 + */ 309 + 310 + /* Queue the PIO register write transfer. */ 311 + i2c->pio_data[1] = flags | MXS_CMD_I2C_READ | 312 + MXS_I2C_CTRL0_XFER_COUNT(msg->len); 313 + desc = dmaengine_prep_slave_sg(i2c->dmach, 314 + (struct scatterlist *)&i2c->pio_data[1], 315 + 1, DMA_TRANS_NONE, DMA_PREP_INTERRUPT); 316 + if (!desc) { 317 + dev_err(i2c->dev, 318 + "Failed to get PIO reg. write descriptor.\n"); 319 + goto select_init_dma_fail; 320 + } 321 + 322 + /* Queue the DMA data transfer. */ 323 + sg_init_one(&i2c->sg_io[1], msg->buf, msg->len); 324 + dma_map_sg(i2c->dev, &i2c->sg_io[1], 1, DMA_FROM_DEVICE); 325 + desc = dmaengine_prep_slave_sg(i2c->dmach, &i2c->sg_io[1], 1, 326 + DMA_DEV_TO_MEM, 327 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 328 + if (!desc) { 329 + dev_err(i2c->dev, 330 + "Failed to get DMA data write descriptor.\n"); 331 + goto read_init_dma_fail; 332 + } 333 + } else { 334 + i2c->dma_read = 0; 335 + i2c->addr_data = (msg->addr << 1) | I2C_SMBUS_WRITE; 336 + 337 + /* 338 + * WRITE command. 339 + */ 340 + 341 + /* Queue the PIO register write transfer. */ 342 + i2c->pio_data[0] = flags | MXS_CMD_I2C_WRITE | 343 + MXS_I2C_CTRL0_XFER_COUNT(msg->len + 1); 344 + desc = dmaengine_prep_slave_sg(i2c->dmach, 345 + (struct scatterlist *)&i2c->pio_data[0], 346 + 1, DMA_TRANS_NONE, 0); 347 + if (!desc) { 348 + dev_err(i2c->dev, 349 + "Failed to get PIO reg. write descriptor.\n"); 350 + goto write_init_pio_fail; 351 + } 352 + 353 + /* Queue the DMA data transfer. */ 354 + sg_init_table(i2c->sg_io, 2); 355 + sg_set_buf(&i2c->sg_io[0], &i2c->addr_data, 1); 356 + sg_set_buf(&i2c->sg_io[1], msg->buf, msg->len); 357 + dma_map_sg(i2c->dev, i2c->sg_io, 2, DMA_TO_DEVICE); 358 + desc = dmaengine_prep_slave_sg(i2c->dmach, i2c->sg_io, 2, 359 + DMA_MEM_TO_DEV, 360 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 361 + if (!desc) { 362 + dev_err(i2c->dev, 363 + "Failed to get DMA data write descriptor.\n"); 364 + goto write_init_dma_fail; 365 + } 366 + } 367 + 368 + /* 369 + * The last descriptor must have this callback, 370 + * to finish the DMA transaction. 371 + */ 372 + desc->callback = mxs_i2c_dma_irq_callback; 373 + desc->callback_param = i2c; 374 + 375 + /* Start the transfer. */ 376 + dmaengine_submit(desc); 377 + dma_async_issue_pending(i2c->dmach); 378 + return 0; 379 + 380 + /* Read failpath. */ 381 + read_init_dma_fail: 382 + dma_unmap_sg(i2c->dev, &i2c->sg_io[1], 1, DMA_FROM_DEVICE); 383 + select_init_dma_fail: 384 + dma_unmap_sg(i2c->dev, &i2c->sg_io[0], 1, DMA_TO_DEVICE); 385 + select_init_pio_fail: 386 + return -EINVAL; 387 + 388 + /* Write failpath. */ 389 + write_init_dma_fail: 390 + dma_unmap_sg(i2c->dev, i2c->sg_io, 2, DMA_TO_DEVICE); 391 + write_init_pio_fail: 392 + return -EINVAL; 393 + } 394 + 270 395 /* 271 396 * Low level master read/write transaction. 272 397 */ ··· 421 258 int ret; 422 259 int flags; 423 260 261 + flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0; 262 + 424 263 dev_dbg(i2c->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n", 425 264 msg->addr, msg->len, msg->flags, stop); 426 265 ··· 432 267 init_completion(&i2c->cmd_complete); 433 268 i2c->cmd_err = 0; 434 269 435 - flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0; 270 + if (i2c->dma_mode) { 271 + ret = mxs_i2c_dma_setup_xfer(adap, msg, flags); 272 + if (ret) 273 + return ret; 274 + } else { 275 + if (msg->flags & I2C_M_RD) { 276 + mxs_i2c_pioq_setup_read(i2c, msg->addr, 277 + msg->len, flags); 278 + } else { 279 + mxs_i2c_pioq_setup_write(i2c, msg->addr, msg->buf, 280 + msg->len, flags); 281 + } 436 282 437 - if (msg->flags & I2C_M_RD) 438 - mxs_i2c_pioq_setup_read(i2c, msg->addr, msg->len, flags); 439 - else 440 - mxs_i2c_pioq_setup_write(i2c, msg->addr, msg->buf, msg->len, 441 - flags); 442 - 443 - writel(MXS_I2C_QUEUECTRL_QUEUE_RUN, 283 + writel(MXS_I2C_QUEUECTRL_QUEUE_RUN, 444 284 i2c->regs + MXS_I2C_QUEUECTRL_SET); 285 + } 445 286 446 287 ret = wait_for_completion_timeout(&i2c->cmd_complete, 447 288 msecs_to_jiffies(1000)); 448 289 if (ret == 0) 449 290 goto timeout; 450 291 451 - if ((!i2c->cmd_err) && (msg->flags & I2C_M_RD)) { 292 + if (!i2c->dma_mode && !i2c->cmd_err && (msg->flags & I2C_M_RD)) { 452 293 ret = mxs_i2c_finish_read(i2c, msg->buf, msg->len); 453 294 if (ret) 454 295 goto timeout; ··· 472 301 473 302 timeout: 474 303 dev_dbg(i2c->dev, "Timeout!\n"); 304 + if (i2c->dma_mode) 305 + mxs_i2c_dma_finish(i2c); 475 306 mxs_i2c_reset(i2c); 476 307 return -ETIMEDOUT; 477 308 } ··· 515 342 /* MXS_I2C_CTRL1_OVERSIZE_XFER_TERM_IRQ is only for slaves */ 516 343 i2c->cmd_err = -EIO; 517 344 518 - is_last_cmd = (readl(i2c->regs + MXS_I2C_QUEUESTAT) & 519 - MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK) == 0; 345 + if (!i2c->dma_mode) { 346 + is_last_cmd = (readl(i2c->regs + MXS_I2C_QUEUESTAT) & 347 + MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK) == 0; 520 348 521 - if (is_last_cmd || i2c->cmd_err) 522 - complete(&i2c->cmd_complete); 349 + if (is_last_cmd || i2c->cmd_err) 350 + complete(&i2c->cmd_complete); 351 + } 523 352 524 353 writel(stat, i2c->regs + MXS_I2C_CTRL1_CLR); 525 354 ··· 533 358 .functionality = mxs_i2c_func, 534 359 }; 535 360 361 + static bool mxs_i2c_dma_filter(struct dma_chan *chan, void *param) 362 + { 363 + struct mxs_i2c_dev *i2c = param; 364 + 365 + if (!mxs_dma_is_apbx(chan)) 366 + return false; 367 + 368 + if (chan->chan_id != i2c->dma_channel) 369 + return false; 370 + 371 + chan->private = &i2c->dma_data; 372 + 373 + return true; 374 + } 375 + 536 376 static int mxs_i2c_get_ofdata(struct mxs_i2c_dev *i2c) 537 377 { 538 378 uint32_t speed; 539 379 struct device *dev = i2c->dev; 540 380 struct device_node *node = dev->of_node; 541 381 int ret; 382 + 383 + /* 384 + * The MXS I2C DMA mode is prefered and enabled by default. 385 + * The PIO mode is still supported, but should be used only 386 + * for debuging purposes etc. 387 + */ 388 + i2c->dma_mode = !use_pioqueue; 389 + if (!i2c->dma_mode) 390 + dev_info(dev, "Using PIOQUEUE mode for I2C transfers!\n"); 391 + 392 + /* 393 + * TODO: This is a temporary solution and should be changed 394 + * to use generic DMA binding later when the helpers get in. 395 + */ 396 + ret = of_property_read_u32(node, "fsl,i2c-dma-channel", 397 + &i2c->dma_channel); 398 + if (ret) { 399 + dev_warn(dev, "Failed to get DMA channel, using PIOQUEUE!\n"); 400 + i2c->dma_mode = 0; 401 + } 542 402 543 403 ret = of_property_read_u32(node, "clock-frequency", &speed); 544 404 if (ret) ··· 594 384 struct pinctrl *pinctrl; 595 385 struct resource *res; 596 386 resource_size_t res_size; 597 - int err, irq; 387 + int err, irq, dmairq; 388 + dma_cap_mask_t mask; 598 389 599 390 pinctrl = devm_pinctrl_get_select_default(dev); 600 391 if (IS_ERR(pinctrl)) ··· 606 395 return -ENOMEM; 607 396 608 397 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 609 - if (!res) 398 + irq = platform_get_irq(pdev, 0); 399 + dmairq = platform_get_irq(pdev, 1); 400 + 401 + if (!res || irq < 0 || dmairq < 0) 610 402 return -ENOENT; 611 403 612 404 res_size = resource_size(res); ··· 619 405 i2c->regs = devm_ioremap_nocache(dev, res->start, res_size); 620 406 if (!i2c->regs) 621 407 return -EBUSY; 622 - 623 - irq = platform_get_irq(pdev, 0); 624 - if (irq < 0) 625 - return irq; 626 408 627 409 err = devm_request_irq(dev, irq, mxs_i2c_isr, 0, dev_name(dev), i2c); 628 410 if (err) ··· 631 421 err = mxs_i2c_get_ofdata(i2c); 632 422 if (err) 633 423 return err; 424 + } 425 + 426 + /* Setup the DMA */ 427 + if (i2c->dma_mode) { 428 + dma_cap_zero(mask); 429 + dma_cap_set(DMA_SLAVE, mask); 430 + i2c->dma_data.chan_irq = dmairq; 431 + i2c->dmach = dma_request_channel(mask, mxs_i2c_dma_filter, i2c); 432 + if (!i2c->dmach) { 433 + dev_err(dev, "Failed to request dma\n"); 434 + return -ENODEV; 435 + } 634 436 } 635 437 636 438 platform_set_drvdata(pdev, i2c); ··· 679 457 ret = i2c_del_adapter(&i2c->adapter); 680 458 if (ret) 681 459 return -EBUSY; 460 + 461 + if (i2c->dmach) 462 + dma_release_channel(i2c->dmach); 682 463 683 464 writel(MXS_I2C_CTRL0_SFTRST, i2c->regs + MXS_I2C_CTRL0_SET); 684 465
+32 -20
drivers/i2c/busses/i2c-nomadik.c
··· 22 22 #include <linux/err.h> 23 23 #include <linux/clk.h> 24 24 #include <linux/io.h> 25 - #include <linux/regulator/consumer.h> 26 25 #include <linux/pm_runtime.h> 27 26 #include <linux/platform_data/i2c-nomadik.h> 27 + #include <linux/of.h> 28 + #include <linux/of_i2c.h> 28 29 29 30 #define DRIVER_NAME "nmk-i2c" 30 31 ··· 147 146 * @stop: stop condition. 148 147 * @xfer_complete: acknowledge completion for a I2C message. 149 148 * @result: controller propogated result. 150 - * @regulator: pointer to i2c regulator. 151 149 * @busy: Busy doing transfer. 152 150 */ 153 151 struct nmk_i2c_dev { ··· 160 160 int stop; 161 161 struct completion xfer_complete; 162 162 int result; 163 - struct regulator *regulator; 164 163 bool busy; 165 164 }; 166 165 ··· 642 643 643 644 dev->busy = true; 644 645 645 - if (dev->regulator) 646 - regulator_enable(dev->regulator); 647 646 pm_runtime_get_sync(&dev->adev->dev); 648 647 649 648 clk_enable(dev->clk); ··· 673 676 out: 674 677 clk_disable(dev->clk); 675 678 pm_runtime_put_sync(&dev->adev->dev); 676 - if (dev->regulator) 677 - regulator_disable(dev->regulator); 678 679 679 680 dev->busy = false; 680 681 ··· 915 920 .sm = I2C_FREQ_MODE_FAST, 916 921 }; 917 922 923 + static void nmk_i2c_of_probe(struct device_node *np, 924 + struct nmk_i2c_controller *pdata) 925 + { 926 + of_property_read_u32(np, "clock-frequency", &pdata->clk_freq); 927 + 928 + /* This driver only supports 'standard' and 'fast' modes of operation. */ 929 + if (pdata->clk_freq <= 100000) 930 + pdata->sm = I2C_FREQ_MODE_STANDARD; 931 + else 932 + pdata->sm = I2C_FREQ_MODE_FAST; 933 + } 934 + 918 935 static atomic_t adapter_id = ATOMIC_INIT(0); 919 936 920 937 static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) 921 938 { 922 939 int ret = 0; 923 940 struct nmk_i2c_controller *pdata = adev->dev.platform_data; 941 + struct device_node *np = adev->dev.of_node; 924 942 struct nmk_i2c_dev *dev; 925 943 struct i2c_adapter *adap; 926 944 927 - if (!pdata) 928 - /* No i2c configuration found, using the default. */ 929 - pdata = &u8500_i2c; 945 + if (!pdata) { 946 + if (np) { 947 + pdata = devm_kzalloc(&adev->dev, sizeof(*pdata), GFP_KERNEL); 948 + if (!pdata) { 949 + ret = -ENOMEM; 950 + goto err_no_mem; 951 + } 952 + /* Provide the default configuration as a base. */ 953 + memcpy(pdata, &u8500_i2c, sizeof(struct nmk_i2c_controller)); 954 + nmk_i2c_of_probe(np, pdata); 955 + } else 956 + /* No i2c configuration found, using the default. */ 957 + pdata = &u8500_i2c; 958 + } 930 959 931 960 dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL); 932 961 if (!dev) { ··· 976 957 goto err_irq; 977 958 } 978 959 979 - dev->regulator = regulator_get(&adev->dev, "v-i2c"); 980 - if (IS_ERR(dev->regulator)) { 981 - dev_warn(&adev->dev, "could not get i2c regulator\n"); 982 - dev->regulator = NULL; 983 - } 984 - 985 960 pm_suspend_ignore_children(&adev->dev, true); 986 961 987 962 dev->clk = clk_get(&adev->dev, NULL); ··· 986 973 } 987 974 988 975 adap = &dev->adap; 976 + adap->dev.of_node = np; 989 977 adap->dev.parent = &adev->dev; 990 978 adap->owner = THIS_MODULE; 991 979 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; ··· 1016 1002 goto err_add_adap; 1017 1003 } 1018 1004 1005 + of_i2c_register_devices(adap); 1006 + 1019 1007 pm_runtime_put(&adev->dev); 1020 1008 1021 1009 return 0; ··· 1025 1009 err_add_adap: 1026 1010 clk_put(dev->clk); 1027 1011 err_no_clk: 1028 - if (dev->regulator) 1029 - regulator_put(dev->regulator); 1030 1012 free_irq(dev->irq, dev); 1031 1013 err_irq: 1032 1014 iounmap(dev->virtbase); ··· 1052 1038 if (res) 1053 1039 release_mem_region(res->start, resource_size(res)); 1054 1040 clk_put(dev->clk); 1055 - if (dev->regulator) 1056 - regulator_put(dev->regulator); 1057 1041 pm_runtime_disable(&adev->dev); 1058 1042 amba_set_drvdata(adev, NULL); 1059 1043 kfree(dev);
+289 -185
drivers/i2c/busses/i2c-omap.c
··· 43 43 #include <linux/slab.h> 44 44 #include <linux/i2c-omap.h> 45 45 #include <linux/pm_runtime.h> 46 + #include <linux/pm_qos.h> 46 47 47 48 /* I2C controller revisions */ 48 49 #define OMAP_I2C_OMAP1_REV_2 0x20 ··· 55 54 56 55 /* timeout waiting for the controller to respond */ 57 56 #define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000)) 57 + 58 + /* timeout for pm runtime autosuspend */ 59 + #define OMAP_I2C_PM_TIMEOUT 1000 /* ms */ 58 60 59 61 /* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */ 60 62 enum { ··· 180 176 #define I2C_OMAP_ERRATA_I462 (1 << 1) 181 177 182 178 struct omap_i2c_dev { 179 + spinlock_t lock; /* IRQ synchronization */ 183 180 struct device *dev; 184 181 void __iomem *base; /* virtual */ 185 182 int irq; 186 183 int reg_shift; /* bit shift for I2C register addresses */ 187 184 struct completion cmd_complete; 188 185 struct resource *ioarea; 189 - u32 latency; /* maximum mpu wkup latency */ 190 - void (*set_mpu_wkup_lat)(struct device *dev, 191 - long latency); 186 + u32 latency; /* maximum MPU wkup latency */ 187 + struct pm_qos_request pm_qos_request; 192 188 u32 speed; /* Speed of bus in kHz */ 193 189 u32 dtrev; /* extra revision from DT */ 194 190 u32 flags; ··· 197 193 u8 *regs; 198 194 size_t buf_len; 199 195 struct i2c_adapter adapter; 196 + u8 threshold; 200 197 u8 fifo_size; /* use as flag and value 201 198 * fifo_size==0 implies no fifo 202 199 * if set, should be trsh+1 203 200 */ 204 201 u8 rev; 205 202 unsigned b_hw:1; /* bad h/w fixes */ 203 + unsigned receiver:1; /* true when we're in receiver mode */ 206 204 u16 iestate; /* Saved interrupt register */ 207 205 u16 pscstate; 208 206 u16 scllstate; ··· 423 417 omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, scll); 424 418 omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, sclh); 425 419 426 - if (dev->fifo_size) { 427 - /* Note: setup required fifo size - 1. RTRSH and XTRSH */ 428 - buf = (dev->fifo_size - 1) << 8 | OMAP_I2C_BUF_RXFIF_CLR | 429 - (dev->fifo_size - 1) | OMAP_I2C_BUF_TXFIF_CLR; 430 - omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, buf); 431 - } 432 - 433 420 /* Take the I2C module out of reset: */ 434 421 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN); 435 422 ··· 460 461 return 0; 461 462 } 462 463 464 + static void omap_i2c_resize_fifo(struct omap_i2c_dev *dev, u8 size, bool is_rx) 465 + { 466 + u16 buf; 467 + 468 + if (dev->flags & OMAP_I2C_FLAG_NO_FIFO) 469 + return; 470 + 471 + /* 472 + * Set up notification threshold based on message size. We're doing 473 + * this to try and avoid draining feature as much as possible. Whenever 474 + * we have big messages to transfer (bigger than our total fifo size) 475 + * then we might use draining feature to transfer the remaining bytes. 476 + */ 477 + 478 + dev->threshold = clamp(size, (u8) 1, dev->fifo_size); 479 + 480 + buf = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG); 481 + 482 + if (is_rx) { 483 + /* Clear RX Threshold */ 484 + buf &= ~(0x3f << 8); 485 + buf |= ((dev->threshold - 1) << 8) | OMAP_I2C_BUF_RXFIF_CLR; 486 + } else { 487 + /* Clear TX Threshold */ 488 + buf &= ~0x3f; 489 + buf |= (dev->threshold - 1) | OMAP_I2C_BUF_TXFIF_CLR; 490 + } 491 + 492 + omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, buf); 493 + 494 + if (dev->rev < OMAP_I2C_REV_ON_3630_4430) 495 + dev->b_hw = 1; /* Enable hardware fixes */ 496 + 497 + /* calculate wakeup latency constraint for MPU */ 498 + dev->latency = (1000000 * dev->threshold) / (1000 * dev->speed / 8); 499 + } 500 + 463 501 /* 464 502 * Low level master read/write transaction. 465 503 */ ··· 512 476 513 477 if (msg->len == 0) 514 478 return -EINVAL; 479 + 480 + dev->receiver = !!(msg->flags & I2C_M_RD); 481 + omap_i2c_resize_fifo(dev, msg->len, dev->receiver); 515 482 516 483 omap_i2c_write_reg(dev, OMAP_I2C_SA_REG, msg->addr); 517 484 ··· 629 590 if (r < 0) 630 591 goto out; 631 592 632 - if (dev->set_mpu_wkup_lat != NULL) 633 - dev->set_mpu_wkup_lat(dev->dev, dev->latency); 593 + /* 594 + * When waiting for completion of a i2c transfer, we need to 595 + * set a wake up latency constraint for the MPU. This is to 596 + * ensure quick enough wakeup from idle, when transfer 597 + * completes. 598 + */ 599 + if (dev->latency) 600 + pm_qos_add_request(&dev->pm_qos_request, 601 + PM_QOS_CPU_DMA_LATENCY, 602 + dev->latency); 634 603 635 604 for (i = 0; i < num; i++) { 636 605 r = omap_i2c_xfer_msg(adap, &msgs[i], (i == (num - 1))); ··· 646 599 break; 647 600 } 648 601 649 - if (dev->set_mpu_wkup_lat != NULL) 650 - dev->set_mpu_wkup_lat(dev->dev, -1); 602 + if (dev->latency) 603 + pm_qos_remove_request(&dev->pm_qos_request); 651 604 652 605 if (r == 0) 653 606 r = num; 654 607 655 608 omap_i2c_wait_for_bb(dev); 656 609 out: 657 - pm_runtime_put(dev->dev); 610 + pm_runtime_mark_last_busy(dev->dev); 611 + pm_runtime_put_autosuspend(dev->dev); 658 612 return r; 659 613 } 660 614 ··· 773 725 * data to DATA_REG. Otherwise some data bytes can be lost while transferring 774 726 * them from the memory to the I2C interface. 775 727 */ 776 - static int errata_omap3_i462(struct omap_i2c_dev *dev, u16 *stat, int *err) 728 + static int errata_omap3_i462(struct omap_i2c_dev *dev) 777 729 { 778 730 unsigned long timeout = 10000; 731 + u16 stat; 779 732 780 - while (--timeout && !(*stat & OMAP_I2C_STAT_XUDF)) { 781 - if (*stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) { 782 - omap_i2c_ack_stat(dev, *stat & (OMAP_I2C_STAT_XRDY | 733 + do { 734 + stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 735 + if (stat & OMAP_I2C_STAT_XUDF) 736 + break; 737 + 738 + if (stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) { 739 + omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_XRDY | 783 740 OMAP_I2C_STAT_XDR)); 784 - return -ETIMEDOUT; 741 + if (stat & OMAP_I2C_STAT_NACK) { 742 + dev->cmd_err |= OMAP_I2C_STAT_NACK; 743 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); 744 + } 745 + 746 + if (stat & OMAP_I2C_STAT_AL) { 747 + dev_err(dev->dev, "Arbitration lost\n"); 748 + dev->cmd_err |= OMAP_I2C_STAT_AL; 749 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); 750 + } 751 + 752 + return -EIO; 785 753 } 786 754 787 755 cpu_relax(); 788 - *stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 789 - } 756 + } while (--timeout); 790 757 791 758 if (!timeout) { 792 759 dev_err(dev->dev, "timeout waiting on XUDF bit\n"); 793 760 return 0; 794 761 } 795 762 796 - *err |= OMAP_I2C_STAT_XUDF; 763 + return 0; 764 + } 765 + 766 + static void omap_i2c_receive_data(struct omap_i2c_dev *dev, u8 num_bytes, 767 + bool is_rdr) 768 + { 769 + u16 w; 770 + 771 + while (num_bytes--) { 772 + w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG); 773 + *dev->buf++ = w; 774 + dev->buf_len--; 775 + 776 + /* 777 + * Data reg in 2430, omap3 and 778 + * omap4 is 8 bit wide 779 + */ 780 + if (dev->flags & OMAP_I2C_FLAG_16BIT_DATA_REG) { 781 + *dev->buf++ = w >> 8; 782 + dev->buf_len--; 783 + } 784 + } 785 + } 786 + 787 + static int omap_i2c_transmit_data(struct omap_i2c_dev *dev, u8 num_bytes, 788 + bool is_xdr) 789 + { 790 + u16 w; 791 + 792 + while (num_bytes--) { 793 + w = *dev->buf++; 794 + dev->buf_len--; 795 + 796 + /* 797 + * Data reg in 2430, omap3 and 798 + * omap4 is 8 bit wide 799 + */ 800 + if (dev->flags & OMAP_I2C_FLAG_16BIT_DATA_REG) { 801 + w |= *dev->buf++ << 8; 802 + dev->buf_len--; 803 + } 804 + 805 + if (dev->errata & I2C_OMAP_ERRATA_I462) { 806 + int ret; 807 + 808 + ret = errata_omap3_i462(dev); 809 + if (ret < 0) 810 + return ret; 811 + } 812 + 813 + omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w); 814 + } 815 + 797 816 return 0; 798 817 } 799 818 800 819 static irqreturn_t 801 - omap_i2c_isr(int this_irq, void *dev_id) 820 + omap_i2c_isr(int irq, void *dev_id) 802 821 { 803 822 struct omap_i2c_dev *dev = dev_id; 823 + irqreturn_t ret = IRQ_HANDLED; 824 + u16 mask; 825 + u16 stat; 826 + 827 + spin_lock(&dev->lock); 828 + mask = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); 829 + stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 830 + 831 + if (stat & mask) 832 + ret = IRQ_WAKE_THREAD; 833 + 834 + spin_unlock(&dev->lock); 835 + 836 + return ret; 837 + } 838 + 839 + static irqreturn_t 840 + omap_i2c_isr_thread(int this_irq, void *dev_id) 841 + { 842 + struct omap_i2c_dev *dev = dev_id; 843 + unsigned long flags; 804 844 u16 bits; 805 - u16 stat, w; 806 - int err, count = 0; 845 + u16 stat; 846 + int err = 0, count = 0; 807 847 808 - if (pm_runtime_suspended(dev->dev)) 809 - return IRQ_NONE; 848 + spin_lock_irqsave(&dev->lock, flags); 849 + do { 850 + bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); 851 + stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 852 + stat &= bits; 810 853 811 - bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); 812 - while ((stat = (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG))) & bits) { 854 + /* If we're in receiver mode, ignore XDR/XRDY */ 855 + if (dev->receiver) 856 + stat &= ~(OMAP_I2C_STAT_XDR | OMAP_I2C_STAT_XRDY); 857 + else 858 + stat &= ~(OMAP_I2C_STAT_RDR | OMAP_I2C_STAT_RRDY); 859 + 860 + if (!stat) { 861 + /* my work here is done */ 862 + goto out; 863 + } 864 + 813 865 dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat); 814 866 if (count++ == 100) { 815 867 dev_warn(dev->dev, "Too much work in one IRQ\n"); 816 868 break; 817 869 } 818 870 819 - err = 0; 820 - complete: 821 - /* 822 - * Ack the stat in one go, but [R/X]DR and [R/X]RDY should be 823 - * acked after the data operation is complete. 824 - * Ref: TRM SWPU114Q Figure 18-31 825 - */ 826 - omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat & 827 - ~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | 828 - OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); 829 - 830 - if (stat & OMAP_I2C_STAT_NACK) 871 + if (stat & OMAP_I2C_STAT_NACK) { 831 872 err |= OMAP_I2C_STAT_NACK; 873 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); 874 + break; 875 + } 832 876 833 877 if (stat & OMAP_I2C_STAT_AL) { 834 878 dev_err(dev->dev, "Arbitration lost\n"); 835 879 err |= OMAP_I2C_STAT_AL; 880 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL); 881 + break; 836 882 } 883 + 837 884 /* 838 885 * ProDB0017052: Clear ARDY bit twice 839 886 */ 840 887 if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK | 841 888 OMAP_I2C_STAT_AL)) { 842 - omap_i2c_ack_stat(dev, stat & 843 - (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | 844 - OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR | 845 - OMAP_I2C_STAT_ARDY)); 846 - omap_i2c_complete_cmd(dev, err); 847 - return IRQ_HANDLED; 889 + omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_RRDY | 890 + OMAP_I2C_STAT_RDR | 891 + OMAP_I2C_STAT_XRDY | 892 + OMAP_I2C_STAT_XDR | 893 + OMAP_I2C_STAT_ARDY)); 894 + break; 848 895 } 849 - if (stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR)) { 896 + 897 + if (stat & OMAP_I2C_STAT_RDR) { 850 898 u8 num_bytes = 1; 899 + 900 + if (dev->fifo_size) 901 + num_bytes = dev->buf_len; 902 + 903 + omap_i2c_receive_data(dev, num_bytes, true); 851 904 852 905 if (dev->errata & I2C_OMAP_ERRATA_I207) 853 906 i2c_omap_errata_i207(dev, stat); 854 907 855 - if (dev->fifo_size) { 856 - if (stat & OMAP_I2C_STAT_RRDY) 857 - num_bytes = dev->fifo_size; 858 - else /* read RXSTAT on RDR interrupt */ 859 - num_bytes = (omap_i2c_read_reg(dev, 860 - OMAP_I2C_BUFSTAT_REG) 861 - >> 8) & 0x3F; 862 - } 863 - while (num_bytes) { 864 - num_bytes--; 865 - w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG); 866 - if (dev->buf_len) { 867 - *dev->buf++ = w; 868 - dev->buf_len--; 869 - /* 870 - * Data reg in 2430, omap3 and 871 - * omap4 is 8 bit wide 872 - */ 873 - if (dev->flags & 874 - OMAP_I2C_FLAG_16BIT_DATA_REG) { 875 - if (dev->buf_len) { 876 - *dev->buf++ = w >> 8; 877 - dev->buf_len--; 878 - } 879 - } 880 - } else { 881 - if (stat & OMAP_I2C_STAT_RRDY) 882 - dev_err(dev->dev, 883 - "RRDY IRQ while no data" 884 - " requested\n"); 885 - if (stat & OMAP_I2C_STAT_RDR) 886 - dev_err(dev->dev, 887 - "RDR IRQ while no data" 888 - " requested\n"); 889 - break; 890 - } 891 - } 892 - omap_i2c_ack_stat(dev, 893 - stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR)); 894 - continue; 908 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR); 909 + break; 895 910 } 896 - if (stat & (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)) { 911 + 912 + if (stat & OMAP_I2C_STAT_RRDY) { 897 913 u8 num_bytes = 1; 898 - if (dev->fifo_size) { 899 - if (stat & OMAP_I2C_STAT_XRDY) 900 - num_bytes = dev->fifo_size; 901 - else /* read TXSTAT on XDR interrupt */ 902 - num_bytes = omap_i2c_read_reg(dev, 903 - OMAP_I2C_BUFSTAT_REG) 904 - & 0x3F; 905 - } 906 - while (num_bytes) { 907 - num_bytes--; 908 - w = 0; 909 - if (dev->buf_len) { 910 - w = *dev->buf++; 911 - dev->buf_len--; 912 - /* 913 - * Data reg in 2430, omap3 and 914 - * omap4 is 8 bit wide 915 - */ 916 - if (dev->flags & 917 - OMAP_I2C_FLAG_16BIT_DATA_REG) { 918 - if (dev->buf_len) { 919 - w |= *dev->buf++ << 8; 920 - dev->buf_len--; 921 - } 922 - } 923 - } else { 924 - if (stat & OMAP_I2C_STAT_XRDY) 925 - dev_err(dev->dev, 926 - "XRDY IRQ while no " 927 - "data to send\n"); 928 - if (stat & OMAP_I2C_STAT_XDR) 929 - dev_err(dev->dev, 930 - "XDR IRQ while no " 931 - "data to send\n"); 932 - break; 933 - } 934 914 935 - if ((dev->errata & I2C_OMAP_ERRATA_I462) && 936 - errata_omap3_i462(dev, &stat, &err)) 937 - goto complete; 915 + if (dev->threshold) 916 + num_bytes = dev->threshold; 938 917 939 - omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w); 940 - } 941 - omap_i2c_ack_stat(dev, 942 - stat & (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); 918 + omap_i2c_receive_data(dev, num_bytes, false); 919 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY); 943 920 continue; 944 921 } 922 + 923 + if (stat & OMAP_I2C_STAT_XDR) { 924 + u8 num_bytes = 1; 925 + int ret; 926 + 927 + if (dev->fifo_size) 928 + num_bytes = dev->buf_len; 929 + 930 + ret = omap_i2c_transmit_data(dev, num_bytes, true); 931 + if (ret < 0) 932 + break; 933 + 934 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR); 935 + break; 936 + } 937 + 938 + if (stat & OMAP_I2C_STAT_XRDY) { 939 + u8 num_bytes = 1; 940 + int ret; 941 + 942 + if (dev->threshold) 943 + num_bytes = dev->threshold; 944 + 945 + ret = omap_i2c_transmit_data(dev, num_bytes, false); 946 + if (ret < 0) 947 + break; 948 + 949 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY); 950 + continue; 951 + } 952 + 945 953 if (stat & OMAP_I2C_STAT_ROVR) { 946 954 dev_err(dev->dev, "Receive overrun\n"); 947 - dev->cmd_err |= OMAP_I2C_STAT_ROVR; 955 + err |= OMAP_I2C_STAT_ROVR; 956 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR); 957 + break; 948 958 } 959 + 949 960 if (stat & OMAP_I2C_STAT_XUDF) { 950 961 dev_err(dev->dev, "Transmit underflow\n"); 951 - dev->cmd_err |= OMAP_I2C_STAT_XUDF; 962 + err |= OMAP_I2C_STAT_XUDF; 963 + omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF); 964 + break; 952 965 } 953 - } 966 + } while (stat); 954 967 955 - return count ? IRQ_HANDLED : IRQ_NONE; 968 + omap_i2c_complete_cmd(dev, err); 969 + 970 + out: 971 + spin_unlock_irqrestore(&dev->lock, flags); 972 + 973 + return IRQ_HANDLED; 956 974 } 957 975 958 976 static const struct i2c_algorithm omap_i2c_algo = { ··· 1057 943 { 1058 944 struct omap_i2c_dev *dev; 1059 945 struct i2c_adapter *adap; 1060 - struct resource *mem, *irq, *ioarea; 946 + struct resource *mem; 1061 947 const struct omap_i2c_bus_platform_data *pdata = 1062 948 pdev->dev.platform_data; 1063 949 struct device_node *node = pdev->dev.of_node; 1064 950 const struct of_device_id *match; 1065 - irq_handler_t isr; 951 + int irq; 1066 952 int r; 1067 953 1068 954 /* NOTE: driver uses the static register mapping */ ··· 1071 957 dev_err(&pdev->dev, "no mem resource?\n"); 1072 958 return -ENODEV; 1073 959 } 1074 - irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1075 - if (!irq) { 960 + 961 + irq = platform_get_irq(pdev, 0); 962 + if (irq < 0) { 1076 963 dev_err(&pdev->dev, "no irq resource?\n"); 1077 - return -ENODEV; 964 + return irq; 1078 965 } 1079 966 1080 - ioarea = request_mem_region(mem->start, resource_size(mem), 1081 - pdev->name); 1082 - if (!ioarea) { 1083 - dev_err(&pdev->dev, "I2C region already claimed\n"); 1084 - return -EBUSY; 1085 - } 1086 - 1087 - dev = kzalloc(sizeof(struct omap_i2c_dev), GFP_KERNEL); 967 + dev = devm_kzalloc(&pdev->dev, sizeof(struct omap_i2c_dev), GFP_KERNEL); 1088 968 if (!dev) { 1089 - r = -ENOMEM; 1090 - goto err_release_region; 969 + dev_err(&pdev->dev, "Menory allocation failed\n"); 970 + return -ENOMEM; 971 + } 972 + 973 + dev->base = devm_request_and_ioremap(&pdev->dev, mem); 974 + if (!dev->base) { 975 + dev_err(&pdev->dev, "I2C region already claimed\n"); 976 + return -ENOMEM; 1091 977 } 1092 978 1093 979 match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev); ··· 1104 990 } else if (pdata != NULL) { 1105 991 dev->speed = pdata->clkrate; 1106 992 dev->flags = pdata->flags; 1107 - dev->set_mpu_wkup_lat = pdata->set_mpu_wkup_lat; 1108 993 dev->dtrev = pdata->rev; 1109 994 } 1110 995 1111 996 dev->dev = &pdev->dev; 1112 - dev->irq = irq->start; 1113 - dev->base = ioremap(mem->start, resource_size(mem)); 1114 - if (!dev->base) { 1115 - r = -ENOMEM; 1116 - goto err_free_mem; 1117 - } 997 + dev->irq = irq; 998 + 999 + spin_lock_init(&dev->lock); 1118 1000 1119 1001 platform_set_drvdata(pdev, dev); 1120 1002 init_completion(&dev->cmd_complete); ··· 1123 1013 dev->regs = (u8 *)reg_map_ip_v1; 1124 1014 1125 1015 pm_runtime_enable(dev->dev); 1016 + pm_runtime_set_autosuspend_delay(dev->dev, OMAP_I2C_PM_TIMEOUT); 1017 + pm_runtime_use_autosuspend(dev->dev); 1018 + 1126 1019 r = pm_runtime_get_sync(dev->dev); 1127 1020 if (IS_ERR_VALUE(r)) 1128 1021 goto err_free_mem; ··· 1155 1042 1156 1043 dev->fifo_size = (dev->fifo_size / 2); 1157 1044 1158 - if (dev->rev >= OMAP_I2C_REV_ON_3630_4430) 1159 - dev->b_hw = 0; /* Disable hardware fixes */ 1160 - else 1045 + if (dev->rev < OMAP_I2C_REV_ON_3630_4430) 1161 1046 dev->b_hw = 1; /* Enable hardware fixes */ 1162 1047 1163 1048 /* calculate wakeup latency constraint for MPU */ 1164 - if (dev->set_mpu_wkup_lat != NULL) 1165 - dev->latency = (1000000 * dev->fifo_size) / 1166 - (1000 * dev->speed / 8); 1049 + dev->latency = (1000000 * dev->fifo_size) / 1050 + (1000 * dev->speed / 8); 1167 1051 } 1168 1052 1169 1053 /* reset ASAP, clearing any IRQs */ 1170 1054 omap_i2c_init(dev); 1171 1055 1172 - isr = (dev->rev < OMAP_I2C_OMAP1_REV_2) ? omap_i2c_omap1_isr : 1173 - omap_i2c_isr; 1174 - r = request_irq(dev->irq, isr, IRQF_NO_SUSPEND, pdev->name, dev); 1056 + if (dev->rev < OMAP_I2C_OMAP1_REV_2) 1057 + r = devm_request_irq(&pdev->dev, dev->irq, omap_i2c_omap1_isr, 1058 + IRQF_NO_SUSPEND, pdev->name, dev); 1059 + else 1060 + r = devm_request_threaded_irq(&pdev->dev, dev->irq, 1061 + omap_i2c_isr, omap_i2c_isr_thread, 1062 + IRQF_NO_SUSPEND | IRQF_ONESHOT, 1063 + pdev->name, dev); 1175 1064 1176 1065 if (r) { 1177 1066 dev_err(dev->dev, "failure requesting irq %i\n", dev->irq); 1178 1067 goto err_unuse_clocks; 1179 1068 } 1180 - 1181 - dev_info(dev->dev, "bus %d rev%d.%d.%d at %d kHz\n", pdev->id, 1182 - dev->dtrev, dev->rev >> 4, dev->rev & 0xf, dev->speed); 1183 1069 1184 1070 adap = &dev->adapter; 1185 1071 i2c_set_adapdata(adap, dev); ··· 1194 1082 r = i2c_add_numbered_adapter(adap); 1195 1083 if (r) { 1196 1084 dev_err(dev->dev, "failure adding adapter\n"); 1197 - goto err_free_irq; 1085 + goto err_unuse_clocks; 1198 1086 } 1087 + 1088 + dev_info(dev->dev, "bus %d rev%d.%d.%d at %d kHz\n", adap->nr, 1089 + dev->dtrev, dev->rev >> 4, dev->rev & 0xf, dev->speed); 1199 1090 1200 1091 of_i2c_register_devices(adap); 1201 1092 1202 - pm_runtime_put(dev->dev); 1093 + pm_runtime_mark_last_busy(dev->dev); 1094 + pm_runtime_put_autosuspend(dev->dev); 1203 1095 1204 1096 return 0; 1205 1097 1206 - err_free_irq: 1207 - free_irq(dev->irq, dev); 1208 1098 err_unuse_clocks: 1209 1099 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 1210 1100 pm_runtime_put(dev->dev); 1211 - iounmap(dev->base); 1212 1101 pm_runtime_disable(&pdev->dev); 1213 1102 err_free_mem: 1214 1103 platform_set_drvdata(pdev, NULL); 1215 - kfree(dev); 1216 - err_release_region: 1217 - release_mem_region(mem->start, resource_size(mem)); 1218 1104 1219 1105 return r; 1220 1106 } ··· 1220 1110 static int __devexit omap_i2c_remove(struct platform_device *pdev) 1221 1111 { 1222 1112 struct omap_i2c_dev *dev = platform_get_drvdata(pdev); 1223 - struct resource *mem; 1224 1113 int ret; 1225 1114 1226 1115 platform_set_drvdata(pdev, NULL); 1227 1116 1228 - free_irq(dev->irq, dev); 1229 1117 i2c_del_adapter(&dev->adapter); 1230 1118 ret = pm_runtime_get_sync(&pdev->dev); 1231 1119 if (IS_ERR_VALUE(ret)) ··· 1232 1124 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 1233 1125 pm_runtime_put(&pdev->dev); 1234 1126 pm_runtime_disable(&pdev->dev); 1235 - iounmap(dev->base); 1236 - kfree(dev); 1237 - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1238 - release_mem_region(mem->start, resource_size(mem)); 1239 1127 return 0; 1240 1128 } 1241 1129
+709
drivers/i2c/busses/i2c-rcar.c
··· 1 + /* 2 + * drivers/i2c/busses/i2c-rcar.c 3 + * 4 + * Copyright (C) 2012 Renesas Solutions Corp. 5 + * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 6 + * 7 + * This file is based on the drivers/i2c/busses/i2c-sh7760.c 8 + * (c) 2005-2008 MSC Vertriebsges.m.b.H, Manuel Lauss <mlau@msc-ge.com> 9 + * 10 + * This file used out-of-tree driver i2c-rcar.c 11 + * Copyright (C) 2011-2012 Renesas Electronics Corporation 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 + */ 26 + #include <linux/clk.h> 27 + #include <linux/delay.h> 28 + #include <linux/err.h> 29 + #include <linux/init.h> 30 + #include <linux/interrupt.h> 31 + #include <linux/io.h> 32 + #include <linux/i2c.h> 33 + #include <linux/i2c/i2c-rcar.h> 34 + #include <linux/kernel.h> 35 + #include <linux/module.h> 36 + #include <linux/platform_device.h> 37 + #include <linux/pm_runtime.h> 38 + #include <linux/slab.h> 39 + #include <linux/spinlock.h> 40 + 41 + /* register offsets */ 42 + #define ICSCR 0x00 /* slave ctrl */ 43 + #define ICMCR 0x04 /* master ctrl */ 44 + #define ICSSR 0x08 /* slave status */ 45 + #define ICMSR 0x0C /* master status */ 46 + #define ICSIER 0x10 /* slave irq enable */ 47 + #define ICMIER 0x14 /* master irq enable */ 48 + #define ICCCR 0x18 /* clock dividers */ 49 + #define ICSAR 0x1C /* slave address */ 50 + #define ICMAR 0x20 /* master address */ 51 + #define ICRXTX 0x24 /* data port */ 52 + 53 + /* ICMCR */ 54 + #define MDBS (1 << 7) /* non-fifo mode switch */ 55 + #define FSCL (1 << 6) /* override SCL pin */ 56 + #define FSDA (1 << 5) /* override SDA pin */ 57 + #define OBPC (1 << 4) /* override pins */ 58 + #define MIE (1 << 3) /* master if enable */ 59 + #define TSBE (1 << 2) 60 + #define FSB (1 << 1) /* force stop bit */ 61 + #define ESG (1 << 0) /* en startbit gen */ 62 + 63 + /* ICMSR */ 64 + #define MNR (1 << 6) /* nack received */ 65 + #define MAL (1 << 5) /* arbitration lost */ 66 + #define MST (1 << 4) /* sent a stop */ 67 + #define MDE (1 << 3) 68 + #define MDT (1 << 2) 69 + #define MDR (1 << 1) 70 + #define MAT (1 << 0) /* slave addr xfer done */ 71 + 72 + /* ICMIE */ 73 + #define MNRE (1 << 6) /* nack irq en */ 74 + #define MALE (1 << 5) /* arblos irq en */ 75 + #define MSTE (1 << 4) /* stop irq en */ 76 + #define MDEE (1 << 3) 77 + #define MDTE (1 << 2) 78 + #define MDRE (1 << 1) 79 + #define MATE (1 << 0) /* address sent irq en */ 80 + 81 + 82 + enum { 83 + RCAR_BUS_PHASE_ADDR, 84 + RCAR_BUS_PHASE_DATA, 85 + RCAR_BUS_PHASE_STOP, 86 + }; 87 + 88 + enum { 89 + RCAR_IRQ_CLOSE, 90 + RCAR_IRQ_OPEN_FOR_SEND, 91 + RCAR_IRQ_OPEN_FOR_RECV, 92 + RCAR_IRQ_OPEN_FOR_STOP, 93 + }; 94 + 95 + /* 96 + * flags 97 + */ 98 + #define ID_LAST_MSG (1 << 0) 99 + #define ID_IOERROR (1 << 1) 100 + #define ID_DONE (1 << 2) 101 + #define ID_ARBLOST (1 << 3) 102 + #define ID_NACK (1 << 4) 103 + 104 + struct rcar_i2c_priv { 105 + void __iomem *io; 106 + struct i2c_adapter adap; 107 + struct i2c_msg *msg; 108 + 109 + spinlock_t lock; 110 + wait_queue_head_t wait; 111 + 112 + int pos; 113 + int irq; 114 + u32 icccr; 115 + u32 flags; 116 + }; 117 + 118 + #define rcar_i2c_priv_to_dev(p) ((p)->adap.dev.parent) 119 + #define rcar_i2c_is_recv(p) ((p)->msg->flags & I2C_M_RD) 120 + 121 + #define rcar_i2c_flags_set(p, f) ((p)->flags |= (f)) 122 + #define rcar_i2c_flags_has(p, f) ((p)->flags & (f)) 123 + 124 + #define LOOP_TIMEOUT 1024 125 + 126 + /* 127 + * basic functions 128 + */ 129 + static void rcar_i2c_write(struct rcar_i2c_priv *priv, int reg, u32 val) 130 + { 131 + writel(val, priv->io + reg); 132 + } 133 + 134 + static u32 rcar_i2c_read(struct rcar_i2c_priv *priv, int reg) 135 + { 136 + return readl(priv->io + reg); 137 + } 138 + 139 + static void rcar_i2c_init(struct rcar_i2c_priv *priv) 140 + { 141 + /* 142 + * reset slave mode. 143 + * slave mode is not used on this driver 144 + */ 145 + rcar_i2c_write(priv, ICSIER, 0); 146 + rcar_i2c_write(priv, ICSAR, 0); 147 + rcar_i2c_write(priv, ICSCR, 0); 148 + rcar_i2c_write(priv, ICSSR, 0); 149 + 150 + /* reset master mode */ 151 + rcar_i2c_write(priv, ICMIER, 0); 152 + rcar_i2c_write(priv, ICMCR, 0); 153 + rcar_i2c_write(priv, ICMSR, 0); 154 + rcar_i2c_write(priv, ICMAR, 0); 155 + } 156 + 157 + static void rcar_i2c_irq_mask(struct rcar_i2c_priv *priv, int open) 158 + { 159 + u32 val = MNRE | MALE | MSTE | MATE; /* default */ 160 + 161 + switch (open) { 162 + case RCAR_IRQ_OPEN_FOR_SEND: 163 + val |= MDEE; /* default + send */ 164 + break; 165 + case RCAR_IRQ_OPEN_FOR_RECV: 166 + val |= MDRE; /* default + read */ 167 + break; 168 + case RCAR_IRQ_OPEN_FOR_STOP: 169 + val = MSTE; /* stop irq only */ 170 + break; 171 + case RCAR_IRQ_CLOSE: 172 + default: 173 + val = 0; /* all close */ 174 + break; 175 + } 176 + rcar_i2c_write(priv, ICMIER, val); 177 + } 178 + 179 + static void rcar_i2c_set_addr(struct rcar_i2c_priv *priv, u32 recv) 180 + { 181 + rcar_i2c_write(priv, ICMAR, (priv->msg->addr << 1) | recv); 182 + } 183 + 184 + /* 185 + * bus control functions 186 + */ 187 + static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv) 188 + { 189 + int i; 190 + 191 + for (i = 0; i < LOOP_TIMEOUT; i++) { 192 + /* make sure that bus is not busy */ 193 + if (!(rcar_i2c_read(priv, ICMCR) & FSDA)) 194 + return 0; 195 + udelay(1); 196 + } 197 + 198 + return -EBUSY; 199 + } 200 + 201 + static void rcar_i2c_bus_phase(struct rcar_i2c_priv *priv, int phase) 202 + { 203 + switch (phase) { 204 + case RCAR_BUS_PHASE_ADDR: 205 + rcar_i2c_write(priv, ICMCR, MDBS | MIE | ESG); 206 + break; 207 + case RCAR_BUS_PHASE_DATA: 208 + rcar_i2c_write(priv, ICMCR, MDBS | MIE); 209 + break; 210 + case RCAR_BUS_PHASE_STOP: 211 + rcar_i2c_write(priv, ICMCR, MDBS | MIE | FSB); 212 + break; 213 + } 214 + } 215 + 216 + /* 217 + * clock function 218 + */ 219 + static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, 220 + u32 bus_speed, 221 + struct device *dev) 222 + { 223 + struct clk *clkp = clk_get(NULL, "peripheral_clk"); 224 + u32 scgd, cdf; 225 + u32 round, ick; 226 + u32 scl; 227 + 228 + if (!clkp) { 229 + dev_err(dev, "there is no peripheral_clk\n"); 230 + return -EIO; 231 + } 232 + 233 + /* 234 + * calculate SCL clock 235 + * see 236 + * ICCCR 237 + * 238 + * ick = clkp / (1 + CDF) 239 + * SCL = ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick]) 240 + * 241 + * ick : I2C internal clock < 20 MHz 242 + * ticf : I2C SCL falling time = 35 ns here 243 + * tr : I2C SCL rising time = 200 ns here 244 + * intd : LSI internal delay = 50 ns here 245 + * clkp : peripheral_clk 246 + * F[] : integer up-valuation 247 + */ 248 + for (cdf = 0; cdf < 4; cdf++) { 249 + ick = clk_get_rate(clkp) / (1 + cdf); 250 + if (ick < 20000000) 251 + goto ick_find; 252 + } 253 + dev_err(dev, "there is no best CDF\n"); 254 + return -EIO; 255 + 256 + ick_find: 257 + /* 258 + * it is impossible to calculate large scale 259 + * number on u32. separate it 260 + * 261 + * F[(ticf + tr + intd) * ick] 262 + * = F[(35 + 200 + 50)ns * ick] 263 + * = F[285 * ick / 1000000000] 264 + * = F[(ick / 1000000) * 285 / 1000] 265 + */ 266 + round = (ick + 500000) / 1000000 * 285; 267 + round = (round + 500) / 1000; 268 + 269 + /* 270 + * SCL = ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick]) 271 + * 272 + * Calculation result (= SCL) should be less than 273 + * bus_speed for hardware safety 274 + */ 275 + for (scgd = 0; scgd < 0x40; scgd++) { 276 + scl = ick / (20 + (scgd * 8) + round); 277 + if (scl <= bus_speed) 278 + goto scgd_find; 279 + } 280 + dev_err(dev, "it is impossible to calculate best SCL\n"); 281 + return -EIO; 282 + 283 + scgd_find: 284 + dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n", 285 + scl, bus_speed, clk_get_rate(clkp), round, cdf, scgd); 286 + 287 + /* 288 + * keep icccr value 289 + */ 290 + priv->icccr = (scgd << 2 | cdf); 291 + 292 + return 0; 293 + } 294 + 295 + static void rcar_i2c_clock_start(struct rcar_i2c_priv *priv) 296 + { 297 + rcar_i2c_write(priv, ICCCR, priv->icccr); 298 + } 299 + 300 + /* 301 + * status functions 302 + */ 303 + static u32 rcar_i2c_status_get(struct rcar_i2c_priv *priv) 304 + { 305 + return rcar_i2c_read(priv, ICMSR); 306 + } 307 + 308 + #define rcar_i2c_status_clear(priv) rcar_i2c_status_bit_clear(priv, 0xffffffff) 309 + static void rcar_i2c_status_bit_clear(struct rcar_i2c_priv *priv, u32 bit) 310 + { 311 + rcar_i2c_write(priv, ICMSR, ~bit); 312 + } 313 + 314 + /* 315 + * recv/send functions 316 + */ 317 + static int rcar_i2c_recv(struct rcar_i2c_priv *priv) 318 + { 319 + rcar_i2c_set_addr(priv, 1); 320 + rcar_i2c_status_clear(priv); 321 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_ADDR); 322 + rcar_i2c_irq_mask(priv, RCAR_IRQ_OPEN_FOR_RECV); 323 + 324 + return 0; 325 + } 326 + 327 + static int rcar_i2c_send(struct rcar_i2c_priv *priv) 328 + { 329 + int ret; 330 + 331 + /* 332 + * It should check bus status when send case 333 + */ 334 + ret = rcar_i2c_bus_barrier(priv); 335 + if (ret < 0) 336 + return ret; 337 + 338 + rcar_i2c_set_addr(priv, 0); 339 + rcar_i2c_status_clear(priv); 340 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_ADDR); 341 + rcar_i2c_irq_mask(priv, RCAR_IRQ_OPEN_FOR_SEND); 342 + 343 + return 0; 344 + } 345 + 346 + #define rcar_i2c_send_restart(priv) rcar_i2c_status_bit_clear(priv, (MAT | MDE)) 347 + #define rcar_i2c_recv_restart(priv) rcar_i2c_status_bit_clear(priv, (MAT | MDR)) 348 + 349 + /* 350 + * interrupt functions 351 + */ 352 + static int rcar_i2c_irq_send(struct rcar_i2c_priv *priv, u32 msr) 353 + { 354 + struct i2c_msg *msg = priv->msg; 355 + 356 + /* 357 + * FIXME 358 + * sometimes, unknown interrupt happened. 359 + * Do nothing 360 + */ 361 + if (!(msr & MDE)) 362 + return 0; 363 + 364 + /* 365 + * If address transfer phase finished, 366 + * goto data phase. 367 + */ 368 + if (msr & MAT) 369 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_DATA); 370 + 371 + if (priv->pos < msg->len) { 372 + /* 373 + * Prepare next data to ICRXTX register. 374 + * This data will go to _SHIFT_ register. 375 + * 376 + * * 377 + * [ICRXTX] -> [SHIFT] -> [I2C bus] 378 + */ 379 + rcar_i2c_write(priv, ICRXTX, msg->buf[priv->pos]); 380 + priv->pos++; 381 + 382 + } else { 383 + /* 384 + * The last data was pushed to ICRXTX on _PREV_ empty irq. 385 + * It is on _SHIFT_ register, and will sent to I2C bus. 386 + * 387 + * * 388 + * [ICRXTX] -> [SHIFT] -> [I2C bus] 389 + */ 390 + 391 + if (priv->flags & ID_LAST_MSG) 392 + /* 393 + * If current msg is the _LAST_ msg, 394 + * prepare stop condition here. 395 + * ID_DONE will be set on STOP irq. 396 + */ 397 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_STOP); 398 + else 399 + /* 400 + * If current msg is _NOT_ last msg, 401 + * it doesn't call stop phase. 402 + * thus, there is no STOP irq. 403 + * return ID_DONE here. 404 + */ 405 + return ID_DONE; 406 + } 407 + 408 + rcar_i2c_send_restart(priv); 409 + 410 + return 0; 411 + } 412 + 413 + static int rcar_i2c_irq_recv(struct rcar_i2c_priv *priv, u32 msr) 414 + { 415 + struct i2c_msg *msg = priv->msg; 416 + 417 + /* 418 + * FIXME 419 + * sometimes, unknown interrupt happened. 420 + * Do nothing 421 + */ 422 + if (!(msr & MDR)) 423 + return 0; 424 + 425 + if (msr & MAT) { 426 + /* 427 + * Address transfer phase finished, 428 + * but, there is no data at this point. 429 + * Do nothing. 430 + */ 431 + } else if (priv->pos < msg->len) { 432 + /* 433 + * get received data 434 + */ 435 + msg->buf[priv->pos] = rcar_i2c_read(priv, ICRXTX); 436 + priv->pos++; 437 + } 438 + 439 + /* 440 + * If next received data is the _LAST_, 441 + * go to STOP phase, 442 + * otherwise, go to DATA phase. 443 + */ 444 + if (priv->pos + 1 >= msg->len) 445 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_STOP); 446 + else 447 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_DATA); 448 + 449 + rcar_i2c_recv_restart(priv); 450 + 451 + return 0; 452 + } 453 + 454 + static irqreturn_t rcar_i2c_irq(int irq, void *ptr) 455 + { 456 + struct rcar_i2c_priv *priv = ptr; 457 + struct device *dev = rcar_i2c_priv_to_dev(priv); 458 + u32 msr; 459 + 460 + /*-------------- spin lock -----------------*/ 461 + spin_lock(&priv->lock); 462 + 463 + msr = rcar_i2c_status_get(priv); 464 + 465 + /* 466 + * Arbitration lost 467 + */ 468 + if (msr & MAL) { 469 + /* 470 + * CAUTION 471 + * 472 + * When arbitration lost, device become _slave_ mode. 473 + */ 474 + dev_dbg(dev, "Arbitration Lost\n"); 475 + rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST)); 476 + goto out; 477 + } 478 + 479 + /* 480 + * Stop 481 + */ 482 + if (msr & MST) { 483 + dev_dbg(dev, "Stop\n"); 484 + rcar_i2c_flags_set(priv, ID_DONE); 485 + goto out; 486 + } 487 + 488 + /* 489 + * Nack 490 + */ 491 + if (msr & MNR) { 492 + dev_dbg(dev, "Nack\n"); 493 + 494 + /* go to stop phase */ 495 + rcar_i2c_bus_phase(priv, RCAR_BUS_PHASE_STOP); 496 + rcar_i2c_irq_mask(priv, RCAR_IRQ_OPEN_FOR_STOP); 497 + rcar_i2c_flags_set(priv, ID_NACK); 498 + goto out; 499 + } 500 + 501 + /* 502 + * recv/send 503 + */ 504 + if (rcar_i2c_is_recv(priv)) 505 + rcar_i2c_flags_set(priv, rcar_i2c_irq_recv(priv, msr)); 506 + else 507 + rcar_i2c_flags_set(priv, rcar_i2c_irq_send(priv, msr)); 508 + 509 + out: 510 + if (rcar_i2c_flags_has(priv, ID_DONE)) { 511 + rcar_i2c_irq_mask(priv, RCAR_IRQ_CLOSE); 512 + rcar_i2c_status_clear(priv); 513 + wake_up(&priv->wait); 514 + } 515 + 516 + spin_unlock(&priv->lock); 517 + /*-------------- spin unlock -----------------*/ 518 + 519 + return IRQ_HANDLED; 520 + } 521 + 522 + static int rcar_i2c_master_xfer(struct i2c_adapter *adap, 523 + struct i2c_msg *msgs, 524 + int num) 525 + { 526 + struct rcar_i2c_priv *priv = i2c_get_adapdata(adap); 527 + struct device *dev = rcar_i2c_priv_to_dev(priv); 528 + unsigned long flags; 529 + int i, ret, timeout; 530 + 531 + pm_runtime_get_sync(dev); 532 + 533 + /*-------------- spin lock -----------------*/ 534 + spin_lock_irqsave(&priv->lock, flags); 535 + 536 + rcar_i2c_init(priv); 537 + rcar_i2c_clock_start(priv); 538 + 539 + spin_unlock_irqrestore(&priv->lock, flags); 540 + /*-------------- spin unlock -----------------*/ 541 + 542 + ret = -EINVAL; 543 + for (i = 0; i < num; i++) { 544 + /*-------------- spin lock -----------------*/ 545 + spin_lock_irqsave(&priv->lock, flags); 546 + 547 + /* init each data */ 548 + priv->msg = &msgs[i]; 549 + priv->pos = 0; 550 + priv->flags = 0; 551 + if (priv->msg == &msgs[num - 1]) 552 + rcar_i2c_flags_set(priv, ID_LAST_MSG); 553 + 554 + /* start send/recv */ 555 + if (rcar_i2c_is_recv(priv)) 556 + ret = rcar_i2c_recv(priv); 557 + else 558 + ret = rcar_i2c_send(priv); 559 + 560 + spin_unlock_irqrestore(&priv->lock, flags); 561 + /*-------------- spin unlock -----------------*/ 562 + 563 + if (ret < 0) 564 + break; 565 + 566 + /* 567 + * wait result 568 + */ 569 + timeout = wait_event_timeout(priv->wait, 570 + rcar_i2c_flags_has(priv, ID_DONE), 571 + 5 * HZ); 572 + if (!timeout) { 573 + ret = -ETIMEDOUT; 574 + break; 575 + } 576 + 577 + /* 578 + * error handling 579 + */ 580 + if (rcar_i2c_flags_has(priv, ID_NACK)) { 581 + ret = -EREMOTEIO; 582 + break; 583 + } 584 + 585 + if (rcar_i2c_flags_has(priv, ID_ARBLOST)) { 586 + ret = -EAGAIN; 587 + break; 588 + } 589 + 590 + if (rcar_i2c_flags_has(priv, ID_IOERROR)) { 591 + ret = -EIO; 592 + break; 593 + } 594 + 595 + ret = i + 1; /* The number of transfer */ 596 + } 597 + 598 + pm_runtime_put(dev); 599 + 600 + if (ret < 0) 601 + dev_err(dev, "error %d : %x\n", ret, priv->flags); 602 + 603 + return ret; 604 + } 605 + 606 + static u32 rcar_i2c_func(struct i2c_adapter *adap) 607 + { 608 + return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; 609 + } 610 + 611 + static const struct i2c_algorithm rcar_i2c_algo = { 612 + .master_xfer = rcar_i2c_master_xfer, 613 + .functionality = rcar_i2c_func, 614 + }; 615 + 616 + static int __devinit rcar_i2c_probe(struct platform_device *pdev) 617 + { 618 + struct i2c_rcar_platform_data *pdata = pdev->dev.platform_data; 619 + struct rcar_i2c_priv *priv; 620 + struct i2c_adapter *adap; 621 + struct resource *res; 622 + struct device *dev = &pdev->dev; 623 + u32 bus_speed; 624 + int ret; 625 + 626 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 627 + if (!res) { 628 + dev_err(dev, "no mmio resources\n"); 629 + return -ENODEV; 630 + } 631 + 632 + priv = devm_kzalloc(dev, sizeof(struct rcar_i2c_priv), GFP_KERNEL); 633 + if (!priv) { 634 + dev_err(dev, "no mem for private data\n"); 635 + return -ENOMEM; 636 + } 637 + 638 + bus_speed = 100000; /* default 100 kHz */ 639 + if (pdata && pdata->bus_speed) 640 + bus_speed = pdata->bus_speed; 641 + ret = rcar_i2c_clock_calculate(priv, bus_speed, dev); 642 + if (ret < 0) 643 + return ret; 644 + 645 + priv->io = devm_ioremap(dev, res->start, resource_size(res)); 646 + if (!priv->io) { 647 + dev_err(dev, "cannot ioremap\n"); 648 + return -ENODEV; 649 + } 650 + 651 + priv->irq = platform_get_irq(pdev, 0); 652 + init_waitqueue_head(&priv->wait); 653 + spin_lock_init(&priv->lock); 654 + 655 + adap = &priv->adap; 656 + adap->nr = pdev->id; 657 + adap->algo = &rcar_i2c_algo; 658 + adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 659 + adap->retries = 3; 660 + adap->dev.parent = dev; 661 + i2c_set_adapdata(adap, priv); 662 + strlcpy(adap->name, pdev->name, sizeof(adap->name)); 663 + 664 + ret = devm_request_irq(dev, priv->irq, rcar_i2c_irq, 0, 665 + dev_name(dev), priv); 666 + if (ret < 0) { 667 + dev_err(dev, "cannot get irq %d\n", priv->irq); 668 + return ret; 669 + } 670 + 671 + ret = i2c_add_numbered_adapter(adap); 672 + if (ret < 0) { 673 + dev_err(dev, "reg adap failed: %d\n", ret); 674 + return ret; 675 + } 676 + 677 + pm_runtime_enable(dev); 678 + platform_set_drvdata(pdev, priv); 679 + 680 + dev_info(dev, "probed\n"); 681 + 682 + return 0; 683 + } 684 + 685 + static int __devexit rcar_i2c_remove(struct platform_device *pdev) 686 + { 687 + struct rcar_i2c_priv *priv = platform_get_drvdata(pdev); 688 + struct device *dev = &pdev->dev; 689 + 690 + i2c_del_adapter(&priv->adap); 691 + pm_runtime_disable(dev); 692 + 693 + return 0; 694 + } 695 + 696 + static struct platform_driver rcar_i2c_drv = { 697 + .driver = { 698 + .name = "i2c-rcar", 699 + .owner = THIS_MODULE, 700 + }, 701 + .probe = rcar_i2c_probe, 702 + .remove = __devexit_p(rcar_i2c_remove), 703 + }; 704 + 705 + module_platform_driver(rcar_i2c_drv); 706 + 707 + MODULE_LICENSE("GPL"); 708 + MODULE_DESCRIPTION("Renesas R-Car I2C bus driver"); 709 + MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");
+9 -9
drivers/i2c/busses/i2c-s3c2410.c
··· 601 601 int ret; 602 602 603 603 pm_runtime_get_sync(&adap->dev); 604 - clk_enable(i2c->clk); 604 + clk_prepare_enable(i2c->clk); 605 605 606 606 for (retry = 0; retry < adap->retries; retry++) { 607 607 608 608 ret = s3c24xx_i2c_doxfer(i2c, msgs, num); 609 609 610 610 if (ret != -EAGAIN) { 611 - clk_disable(i2c->clk); 611 + clk_disable_unprepare(i2c->clk); 612 612 pm_runtime_put(&adap->dev); 613 613 return ret; 614 614 } ··· 618 618 udelay(100); 619 619 } 620 620 621 - clk_disable(i2c->clk); 621 + clk_disable_unprepare(i2c->clk); 622 622 pm_runtime_put(&adap->dev); 623 623 return -EREMOTEIO; 624 624 } ··· 977 977 978 978 dev_dbg(&pdev->dev, "clock source %p\n", i2c->clk); 979 979 980 - clk_enable(i2c->clk); 980 + clk_prepare_enable(i2c->clk); 981 981 982 982 /* map the registers */ 983 983 ··· 1065 1065 pm_runtime_enable(&i2c->adap.dev); 1066 1066 1067 1067 dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev)); 1068 - clk_disable(i2c->clk); 1068 + clk_disable_unprepare(i2c->clk); 1069 1069 return 0; 1070 1070 1071 1071 err_cpufreq: ··· 1082 1082 kfree(i2c->ioarea); 1083 1083 1084 1084 err_clk: 1085 - clk_disable(i2c->clk); 1085 + clk_disable_unprepare(i2c->clk); 1086 1086 clk_put(i2c->clk); 1087 1087 1088 1088 err_noclk: ··· 1106 1106 i2c_del_adapter(&i2c->adap); 1107 1107 free_irq(i2c->irq, i2c); 1108 1108 1109 - clk_disable(i2c->clk); 1109 + clk_disable_unprepare(i2c->clk); 1110 1110 clk_put(i2c->clk); 1111 1111 1112 1112 iounmap(i2c->regs); ··· 1135 1135 struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev); 1136 1136 1137 1137 i2c->suspended = 0; 1138 - clk_enable(i2c->clk); 1138 + clk_prepare_enable(i2c->clk); 1139 1139 s3c24xx_i2c_init(i2c); 1140 - clk_disable(i2c->clk); 1140 + clk_disable_unprepare(i2c->clk); 1141 1141 1142 1142 return 0; 1143 1143 }
+1
include/linux/i2c-algo-pca.h
··· 62 62 * 330000, 288000, 217000, 146000, 88000, 59000, 44000, 36000 63 63 * For PCA9665, use the frequency you want here. */ 64 64 unsigned int i2c_clock; 65 + unsigned int chip; 65 66 }; 66 67 67 68 int i2c_pca_add_bus(struct i2c_adapter *);
-1
include/linux/i2c-omap.h
··· 34 34 u32 clkrate; 35 35 u32 rev; 36 36 u32 flags; 37 - void (*set_mpu_wkup_lat)(struct device *dev, long set); 38 37 }; 39 38 40 39 #endif
+10
include/linux/i2c/i2c-rcar.h
··· 1 + #ifndef __I2C_R_CAR_H__ 2 + #define __I2C_R_CAR_H__ 3 + 4 + #include <linux/platform_device.h> 5 + 6 + struct i2c_rcar_platform_data { 7 + u32 bus_speed; 8 + }; 9 + 10 + #endif /* __I2C_R_CAR_H__ */
+1 -1
include/linux/platform_data/i2c-nomadik.h
··· 28 28 * @sm: speed mode 29 29 */ 30 30 struct nmk_i2c_controller { 31 - unsigned long clk_freq; 31 + u32 clk_freq; 32 32 unsigned short slsu; 33 33 unsigned char tft; 34 34 unsigned char rft;