diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-18 16:51:10 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-18 16:51:10 -0800 | 
| commit | 752451f01c4567b506bf4343082682dbb8fb30dd (patch) | |
| tree | ec2ec2989c93e567952ddc1ec879013aa2704f0a /arch | |
| parent | 673ab8783b596cda5b616b317b1a1b47480c66fd (diff) | |
| parent | 972deb4f49b5b6703d9c6117ba0aeda2180d4447 (diff) | |
| download | olio-linux-3.10-752451f01c4567b506bf4343082682dbb8fb30dd.tar.xz olio-linux-3.10-752451f01c4567b506bf4343082682dbb8fb30dd.zip  | |
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')
| -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 b222614ac9e..bdc80a4453d 100644 --- a/arch/arm/boot/dts/imx28-cfa10049.dts +++ b/arch/arm/boot/dts/imx28-cfa10049.dts @@ -92,6 +92,30 @@  				status = "okay";  			}; +			i2cmux { +				compatible = "i2c-mux-gpio"; +				#address-cells = <1>; +				#size-cells = <0>; +				mux-gpios = <&gpio1 22 0 &gpio1 23 0>; +				i2c-parent = <&i2c1>; + +				i2c@0 { +					reg = <0>; +				}; + +				i2c@1 { +					reg = <1>; +				}; + +				i2c@2 { +					reg = <2>; +				}; + +				i2c@3 { +					reg = <3>; +				}; +			}; +  			usbphy1: usbphy@8007e000 {  				status = "okay";  			}; diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index a4e167c55c1..0abb30fe399 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c @@ -16,10 +16,12 @@  #include <linux/gpio.h>  #include <linux/init.h>  #include <linux/io.h> +#include <linux/irq.h>  #include <linux/stddef.h>  #include <linux/i2c.h>  #include <linux/spi/spi.h>  #include <linux/usb/musb.h> +#include <linux/platform_data/i2c-cbus-gpio.h>  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <linux/platform_data/mtd-onenand-omap2.h>  #include <linux/mfd/menelaus.h> @@ -40,6 +42,45 @@  #define TUSB6010_GPIO_ENABLE	0  #define TUSB6010_DMACHAN	0x3f +#if defined(CONFIG_I2C_CBUS_GPIO) || defined(CONFIG_I2C_CBUS_GPIO_MODULE) +static struct i2c_cbus_platform_data n8x0_cbus_data = { +	.clk_gpio = 66, +	.dat_gpio = 65, +	.sel_gpio = 64, +}; + +static struct platform_device n8x0_cbus_device = { +	.name	= "i2c-cbus-gpio", +	.id	= 3, +	.dev	= { +		.platform_data = &n8x0_cbus_data, +	}, +}; + +static struct i2c_board_info n8x0_i2c_board_info_3[] __initdata = { +	{ +		I2C_BOARD_INFO("retu-mfd", 0x01), +	}, +}; + +static void __init n8x0_cbus_init(void) +{ +	const int retu_irq_gpio = 108; + +	if (gpio_request_one(retu_irq_gpio, GPIOF_IN, "Retu IRQ")) +		return; +	irq_set_irq_type(gpio_to_irq(retu_irq_gpio), IRQ_TYPE_EDGE_RISING); +	n8x0_i2c_board_info_3[0].irq = gpio_to_irq(retu_irq_gpio); +	i2c_register_board_info(3, n8x0_i2c_board_info_3, +				ARRAY_SIZE(n8x0_i2c_board_info_3)); +	platform_device_register(&n8x0_cbus_device); +} +#else /* CONFIG_I2C_CBUS_GPIO */ +static void __init n8x0_cbus_init(void) +{ +} +#endif /* CONFIG_I2C_CBUS_GPIO */ +  #if defined(CONFIG_USB_MUSB_TUSB6010) || defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  /*   * 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)  	gpmc_onenand_init(board_onenand_data);  	n8x0_mmc_init();  	n8x0_usb_init(); +	n8x0_cbus_init();  }  MACHINE_START(NOKIA_N800, "Nokia N800") diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index fbb9b152cd5..df6d6acbc9e 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)  	return ports;  } +/* + * XXX This function is a temporary compatibility wrapper - only + * needed until the I2C driver can be converted to call + * omap_pm_set_max_dev_wakeup_lat() and handle a return code. + */ +static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t) +{ +	omap_pm_set_max_mpu_wakeup_lat(dev, t); +} +  static const char name[] = "omap_i2c";  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,  	dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr;  	pdata->flags = dev_attr->flags; +	/* +	 * When waiting for completion of a i2c transfer, we need to +	 * set a wake up latency constraint for the MPU. This is to +	 * ensure quick enough wakeup from idle, when transfer +	 * completes. +	 * Only omap3 has support for constraints +	 */ +	if (cpu_is_omap34xx()) +		pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;  	pdev = omap_device_build(name, bus_id, oh, pdata,  			sizeof(struct omap_i2c_bus_platform_data),  			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 6c8fa70ddad..d2d3840557c 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 = {  static struct omap_i2c_dev_attr i2c_dev_attr = {  	.fifo_depth	= 8, /* bytes */ -	.flags		= OMAP_I2C_FLAG_APPLY_ERRATA_I207 | -			  OMAP_I2C_FLAG_BUS_SHIFT_2 | +	.flags		= OMAP_I2C_FLAG_BUS_SHIFT_2 |  			  OMAP_I2C_FLAG_FORCE_19200_INT_CLK,  }; diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 32820d89f5b..081c71edddf 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 = {  };  static struct omap_i2c_dev_attr i2c_dev_attr = { -	.flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE | -		  OMAP_I2C_FLAG_RESET_REGS_POSTIDLE, +	.flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,  };  /* i2c1 */ diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index ec4499e5a4c..8bb2628df34 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 = {  /* I2C1 */  static struct omap_i2c_dev_attr i2c1_dev_attr = {  	.fifo_depth	= 8, /* bytes */ -	.flags		= OMAP_I2C_FLAG_APPLY_ERRATA_I207 | -			  OMAP_I2C_FLAG_RESET_REGS_POSTIDLE | -			  OMAP_I2C_FLAG_BUS_SHIFT_2, +	.flags		= OMAP_I2C_FLAG_BUS_SHIFT_2,  };  static struct omap_hwmod omap3xxx_i2c1_hwmod = { @@ -821,9 +819,7 @@ static struct omap_hwmod omap3xxx_i2c1_hwmod = {  /* I2C2 */  static struct omap_i2c_dev_attr i2c2_dev_attr = {  	.fifo_depth	= 8, /* bytes */ -	.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 | -		 OMAP_I2C_FLAG_RESET_REGS_POSTIDLE | -		 OMAP_I2C_FLAG_BUS_SHIFT_2, +	.flags = OMAP_I2C_FLAG_BUS_SHIFT_2,  };  static struct omap_hwmod omap3xxx_i2c2_hwmod = { @@ -848,9 +844,7 @@ static struct omap_hwmod omap3xxx_i2c2_hwmod = {  /* I2C3 */  static struct omap_i2c_dev_attr i2c3_dev_attr = {  	.fifo_depth	= 64, /* bytes */ -	.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 | -		 OMAP_I2C_FLAG_RESET_REGS_POSTIDLE | -		 OMAP_I2C_FLAG_BUS_SHIFT_2, +	.flags = OMAP_I2C_FLAG_BUS_SHIFT_2,  };  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 eb61cfd9452..272b0178dba 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 = {  };  static struct omap_i2c_dev_attr i2c_dev_attr = { -	.flags	= OMAP_I2C_FLAG_BUS_SHIFT_NONE | -			OMAP_I2C_FLAG_RESET_REGS_POSTIDLE, +	.flags	= OMAP_I2C_FLAG_BUS_SHIFT_NONE,  };  /* i2c1 */  |