diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-18 19:51:10 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-18 19:51:10 -0500 |
| commit | 752451f01c4567b506bf4343082682dbb8fb30dd (patch) | |
| tree | ec2ec2989c93e567952ddc1ec879013aa2704f0a /arch/arm | |
| parent | 673ab8783b596cda5b616b317b1a1b47480c66fd (diff) | |
| parent | 972deb4f49b5b6703d9c6117ba0aeda2180d4447 (diff) | |
Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux
Pull i2c-embedded changes from Wolfram Sang:
- CBUS driver (an I2C variant)
- continued rework of the omap driver
- s3c2410 gets lots of fixes and gains pinctrl support
- at91 gains DMA support
- the GPIO muxer gains devicetree probing
- typical fixes and additions all over
* 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux: (45 commits)
i2c: omap: Remove the OMAP_I2C_FLAG_RESET_REGS_POSTIDLE flag
i2c: at91: add dma support
i2c: at91: change struct members indentation
i2c: at91: fix compilation warning
i2c: mxs: Do not disable the I2C SMBus quick mode
i2c: mxs: Handle i2c DMA failure properly
i2c: s3c2410: Remove recently introduced performance overheads
i2c: ocores: Move grlib set/get functions into #ifdef CONFIG_OF block
i2c: s3c2410: Add fix for i2c suspend/resume
i2c: s3c2410: Fix code to free gpios
i2c: i2c-cbus-gpio: introduce driver
i2c: ocores: Add support for the GRLIB port of the controller and use function pointers for getreg and setreg functions
i2c: ocores: Add irq support for sparc
i2c: omap: Move the remove constraint
ARM: dts: cfa10049: Add the i2c muxer buses to the CFA-10049
i2c: s3c2410: do not special case HDMIPHY stuck bus detection
i2c: s3c2410: use exponential back off while polling for bus idle
i2c: s3c2410: do not generate STOP for QUIRK_HDMIPHY
i2c: s3c2410: grab adapter lock while changing i2c clock
i2c: s3c2410: Add support for pinctrl
...
Diffstat (limited to 'arch/arm')
| -rw-r--r-- | arch/arm/boot/dts/imx28-cfa10049.dts | 24 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-n8x0.c | 42 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/i2c.c | 19 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_2430_data.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 12 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 3 |
7 files changed, 91 insertions, 15 deletions
diff --git a/arch/arm/boot/dts/imx28-cfa10049.dts b/arch/arm/boot/dts/imx28-cfa10049.dts index b222614ac9e0..bdc80a4453dd 100644 --- a/arch/arm/boot/dts/imx28-cfa10049.dts +++ b/arch/arm/boot/dts/imx28-cfa10049.dts | |||
| @@ -92,6 +92,30 @@ | |||
| 92 | status = "okay"; | 92 | status = "okay"; |
| 93 | }; | 93 | }; |
| 94 | 94 | ||
| 95 | i2cmux { | ||
| 96 | compatible = "i2c-mux-gpio"; | ||
| 97 | #address-cells = <1>; | ||
| 98 | #size-cells = <0>; | ||
| 99 | mux-gpios = <&gpio1 22 0 &gpio1 23 0>; | ||
| 100 | i2c-parent = <&i2c1>; | ||
| 101 | |||
| 102 | i2c@0 { | ||
| 103 | reg = <0>; | ||
| 104 | }; | ||
| 105 | |||
| 106 | i2c@1 { | ||
| 107 | reg = <1>; | ||
| 108 | }; | ||
| 109 | |||
| 110 | i2c@2 { | ||
| 111 | reg = <2>; | ||
| 112 | }; | ||
| 113 | |||
| 114 | i2c@3 { | ||
| 115 | reg = <3>; | ||
| 116 | }; | ||
| 117 | }; | ||
| 118 | |||
| 95 | usbphy1: usbphy@8007e000 { | 119 | usbphy1: usbphy@8007e000 { |
| 96 | status = "okay"; | 120 | status = "okay"; |
| 97 | }; | 121 | }; |
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index a4e167c55c1d..0abb30fe399c 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
| @@ -16,10 +16,12 @@ | |||
| 16 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
| 17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | #include <linux/irq.h> | ||
| 19 | #include <linux/stddef.h> | 20 | #include <linux/stddef.h> |
| 20 | #include <linux/i2c.h> | 21 | #include <linux/i2c.h> |
| 21 | #include <linux/spi/spi.h> | 22 | #include <linux/spi/spi.h> |
| 22 | #include <linux/usb/musb.h> | 23 | #include <linux/usb/musb.h> |
| 24 | #include <linux/platform_data/i2c-cbus-gpio.h> | ||
| 23 | #include <linux/platform_data/spi-omap2-mcspi.h> | 25 | #include <linux/platform_data/spi-omap2-mcspi.h> |
| 24 | #include <linux/platform_data/mtd-onenand-omap2.h> | 26 | #include <linux/platform_data/mtd-onenand-omap2.h> |
| 25 | #include <linux/mfd/menelaus.h> | 27 | #include <linux/mfd/menelaus.h> |
| @@ -40,6 +42,45 @@ | |||
| 40 | #define TUSB6010_GPIO_ENABLE 0 | 42 | #define TUSB6010_GPIO_ENABLE 0 |
| 41 | #define TUSB6010_DMACHAN 0x3f | 43 | #define TUSB6010_DMACHAN 0x3f |
| 42 | 44 | ||
| 45 | #if defined(CONFIG_I2C_CBUS_GPIO) || defined(CONFIG_I2C_CBUS_GPIO_MODULE) | ||
| 46 | static struct i2c_cbus_platform_data n8x0_cbus_data = { | ||
| 47 | .clk_gpio = 66, | ||
| 48 | .dat_gpio = 65, | ||
| 49 | .sel_gpio = 64, | ||
| 50 | }; | ||
| 51 | |||
| 52 | static struct platform_device n8x0_cbus_device = { | ||
| 53 | .name = "i2c-cbus-gpio", | ||
| 54 | .id = 3, | ||
| 55 | .dev = { | ||
| 56 | .platform_data = &n8x0_cbus_data, | ||
| 57 | }, | ||
| 58 | }; | ||
| 59 | |||
| 60 | static struct i2c_board_info n8x0_i2c_board_info_3[] __initdata = { | ||
| 61 | { | ||
| 62 | I2C_BOARD_INFO("retu-mfd", 0x01), | ||
| 63 | }, | ||
| 64 | }; | ||
| 65 | |||
| 66 | static void __init n8x0_cbus_init(void) | ||
| 67 | { | ||
| 68 | const int retu_irq_gpio = 108; | ||
| 69 | |||
| 70 | if (gpio_request_one(retu_irq_gpio, GPIOF_IN, "Retu IRQ")) | ||
| 71 | return; | ||
| 72 | irq_set_irq_type(gpio_to_irq(retu_irq_gpio), IRQ_TYPE_EDGE_RISING); | ||
| 73 | n8x0_i2c_board_info_3[0].irq = gpio_to_irq(retu_irq_gpio); | ||
| 74 | i2c_register_board_info(3, n8x0_i2c_board_info_3, | ||
| 75 | ARRAY_SIZE(n8x0_i2c_board_info_3)); | ||
| 76 | platform_device_register(&n8x0_cbus_device); | ||
| 77 | } | ||
| 78 | #else /* CONFIG_I2C_CBUS_GPIO */ | ||
| 79 | static void __init n8x0_cbus_init(void) | ||
| 80 | { | ||
| 81 | } | ||
| 82 | #endif /* CONFIG_I2C_CBUS_GPIO */ | ||
| 83 | |||
| 43 | #if defined(CONFIG_USB_MUSB_TUSB6010) || defined(CONFIG_USB_MUSB_TUSB6010_MODULE) | 84 | #if defined(CONFIG_USB_MUSB_TUSB6010) || defined(CONFIG_USB_MUSB_TUSB6010_MODULE) |
| 44 | /* | 85 | /* |
| 45 | * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and | 86 | * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and |
| @@ -678,6 +719,7 @@ static void __init n8x0_init_machine(void) | |||
| 678 | gpmc_onenand_init(board_onenand_data); | 719 | gpmc_onenand_init(board_onenand_data); |
| 679 | n8x0_mmc_init(); | 720 | n8x0_mmc_init(); |
| 680 | n8x0_usb_init(); | 721 | n8x0_usb_init(); |
| 722 | n8x0_cbus_init(); | ||
| 681 | } | 723 | } |
| 682 | 724 | ||
| 683 | MACHINE_START(NOKIA_N800, "Nokia N800") | 725 | MACHINE_START(NOKIA_N800, "Nokia N800") |
diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index fbb9b152cd5e..df6d6acbc9ed 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c | |||
| @@ -120,6 +120,16 @@ static int __init omap_i2c_nr_ports(void) | |||
| 120 | return ports; | 120 | return ports; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | /* | ||
| 124 | * XXX This function is a temporary compatibility wrapper - only | ||
| 125 | * needed until the I2C driver can be converted to call | ||
| 126 | * omap_pm_set_max_dev_wakeup_lat() and handle a return code. | ||
| 127 | */ | ||
| 128 | static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t) | ||
| 129 | { | ||
| 130 | omap_pm_set_max_mpu_wakeup_lat(dev, t); | ||
| 131 | } | ||
| 132 | |||
| 123 | static const char name[] = "omap_i2c"; | 133 | static const char name[] = "omap_i2c"; |
| 124 | 134 | ||
| 125 | int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, | 135 | int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, |
| @@ -157,6 +167,15 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, | |||
| 157 | dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr; | 167 | dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr; |
| 158 | pdata->flags = dev_attr->flags; | 168 | pdata->flags = dev_attr->flags; |
| 159 | 169 | ||
| 170 | /* | ||
| 171 | * When waiting for completion of a i2c transfer, we need to | ||
| 172 | * set a wake up latency constraint for the MPU. This is to | ||
| 173 | * ensure quick enough wakeup from idle, when transfer | ||
| 174 | * completes. | ||
| 175 | * Only omap3 has support for constraints | ||
| 176 | */ | ||
| 177 | if (cpu_is_omap34xx()) | ||
| 178 | pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat; | ||
| 160 | pdev = omap_device_build(name, bus_id, oh, pdata, | 179 | pdev = omap_device_build(name, bus_id, oh, pdata, |
| 161 | sizeof(struct omap_i2c_bus_platform_data), | 180 | sizeof(struct omap_i2c_bus_platform_data), |
| 162 | NULL, 0, 0); | 181 | NULL, 0, 0); |
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index 6c8fa70ddadd..d2d3840557c3 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c | |||
| @@ -77,8 +77,7 @@ static struct omap_hwmod_class i2c_class = { | |||
| 77 | 77 | ||
| 78 | static struct omap_i2c_dev_attr i2c_dev_attr = { | 78 | static struct omap_i2c_dev_attr i2c_dev_attr = { |
| 79 | .fifo_depth = 8, /* bytes */ | 79 | .fifo_depth = 8, /* bytes */ |
| 80 | .flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 | | 80 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_2 | |
| 81 | OMAP_I2C_FLAG_BUS_SHIFT_2 | | ||
| 82 | OMAP_I2C_FLAG_FORCE_19200_INT_CLK, | 81 | OMAP_I2C_FLAG_FORCE_19200_INT_CLK, |
| 83 | }; | 82 | }; |
| 84 | 83 | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 32820d89f5b4..081c71edddf4 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c | |||
| @@ -1118,8 +1118,7 @@ static struct omap_hwmod_class i2c_class = { | |||
| 1118 | }; | 1118 | }; |
| 1119 | 1119 | ||
| 1120 | static struct omap_i2c_dev_attr i2c_dev_attr = { | 1120 | static struct omap_i2c_dev_attr i2c_dev_attr = { |
| 1121 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE | | 1121 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE, |
| 1122 | OMAP_I2C_FLAG_RESET_REGS_POSTIDLE, | ||
| 1123 | }; | 1122 | }; |
| 1124 | 1123 | ||
| 1125 | /* i2c1 */ | 1124 | /* i2c1 */ |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index ec4499e5a4c9..8bb2628df34e 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
| @@ -794,9 +794,7 @@ static struct omap_hwmod omap3xxx_dss_venc_hwmod = { | |||
| 794 | /* I2C1 */ | 794 | /* I2C1 */ |
| 795 | static struct omap_i2c_dev_attr i2c1_dev_attr = { | 795 | static struct omap_i2c_dev_attr i2c1_dev_attr = { |
| 796 | .fifo_depth = 8, /* bytes */ | 796 | .fifo_depth = 8, /* bytes */ |
| 797 | .flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 | | 797 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_2, |
| 798 | OMAP_I2C_FLAG_RESET_REGS_POSTIDLE | | ||
| 799 | OMAP_I2C_FLAG_BUS_SHIFT_2, | ||
| 800 | }; | 798 | }; |
| 801 | 799 | ||
| 802 | static struct omap_hwmod omap3xxx_i2c1_hwmod = { | 800 | static struct omap_hwmod omap3xxx_i2c1_hwmod = { |
| @@ -821,9 +819,7 @@ static struct omap_hwmod omap3xxx_i2c1_hwmod = { | |||
| 821 | /* I2C2 */ | 819 | /* I2C2 */ |
| 822 | static struct omap_i2c_dev_attr i2c2_dev_attr = { | 820 | static struct omap_i2c_dev_attr i2c2_dev_attr = { |
| 823 | .fifo_depth = 8, /* bytes */ | 821 | .fifo_depth = 8, /* bytes */ |
| 824 | .flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 | | 822 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_2, |
| 825 | OMAP_I2C_FLAG_RESET_REGS_POSTIDLE | | ||
| 826 | OMAP_I2C_FLAG_BUS_SHIFT_2, | ||
| 827 | }; | 823 | }; |
| 828 | 824 | ||
| 829 | static struct omap_hwmod omap3xxx_i2c2_hwmod = { | 825 | static struct omap_hwmod omap3xxx_i2c2_hwmod = { |
| @@ -848,9 +844,7 @@ static struct omap_hwmod omap3xxx_i2c2_hwmod = { | |||
| 848 | /* I2C3 */ | 844 | /* I2C3 */ |
| 849 | static struct omap_i2c_dev_attr i2c3_dev_attr = { | 845 | static struct omap_i2c_dev_attr i2c3_dev_attr = { |
| 850 | .fifo_depth = 64, /* bytes */ | 846 | .fifo_depth = 64, /* bytes */ |
| 851 | .flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 | | 847 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_2, |
| 852 | OMAP_I2C_FLAG_RESET_REGS_POSTIDLE | | ||
| 853 | OMAP_I2C_FLAG_BUS_SHIFT_2, | ||
| 854 | }; | 848 | }; |
| 855 | 849 | ||
| 856 | static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = { | 850 | static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = { |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index eb61cfd9452b..272b0178dba6 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
| @@ -1529,8 +1529,7 @@ static struct omap_hwmod_class omap44xx_i2c_hwmod_class = { | |||
| 1529 | }; | 1529 | }; |
| 1530 | 1530 | ||
| 1531 | static struct omap_i2c_dev_attr i2c_dev_attr = { | 1531 | static struct omap_i2c_dev_attr i2c_dev_attr = { |
| 1532 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE | | 1532 | .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE, |
| 1533 | OMAP_I2C_FLAG_RESET_REGS_POSTIDLE, | ||
| 1534 | }; | 1533 | }; |
| 1535 | 1534 | ||
| 1536 | /* i2c1 */ | 1535 | /* i2c1 */ |
