diff options
Diffstat (limited to 'arch/arm/plat-omap/i2c.c')
| -rw-r--r-- | arch/arm/plat-omap/i2c.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c index a5683a84c6e..6013831a043 100644 --- a/arch/arm/plat-omap/i2c.c +++ b/arch/arm/plat-omap/i2c.c @@ -26,12 +26,14 @@  #include <linux/kernel.h>  #include <linux/platform_device.h>  #include <linux/i2c.h> +#include <linux/i2c-omap.h>  #include <linux/slab.h>  #include <linux/err.h>  #include <linux/clk.h>  #include <mach/irqs.h>  #include <plat/i2c.h> +#include <plat/omap-pm.h>  #include <plat/omap_device.h>  #define OMAP_I2C_SIZE		0x3f @@ -127,6 +129,16 @@ static inline int omap1_i2c_add_bus(int bus_id)  #ifdef CONFIG_ARCH_OMAP2PLUS +/* + * 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 inline int omap2_i2c_add_bus(int bus_id)  {  	int l; @@ -158,6 +170,15 @@ static inline int omap2_i2c_add_bus(int bus_id)  	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);  |