diff options
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/busses/i2c-diolan-u2c.c | 1 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-nomadik.c | 28 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-tegra.c | 2 | 
4 files changed, 21 insertions, 12 deletions
diff --git a/drivers/i2c/busses/i2c-diolan-u2c.c b/drivers/i2c/busses/i2c-diolan-u2c.c index aedb94f34bf..dae3ddfe761 100644 --- a/drivers/i2c/busses/i2c-diolan-u2c.c +++ b/drivers/i2c/busses/i2c-diolan-u2c.c @@ -405,6 +405,7 @@ static int diolan_usb_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,  			}  		}  	} +	ret = num;  abort:  	sret = diolan_i2c_stop(dev);  	if (sret < 0 && ret >= 0) diff --git a/drivers/i2c/busses/i2c-nomadik.c b/drivers/i2c/busses/i2c-nomadik.c index 5e6f1eed4f8..61b00edacb0 100644 --- a/drivers/i2c/busses/i2c-nomadik.c +++ b/drivers/i2c/busses/i2c-nomadik.c @@ -350,10 +350,6 @@ static void setup_i2c_controller(struct nmk_i2c_dev *dev)  	i2c_clk = clk_get_rate(dev->clk); -	/* fallback to std. mode if machine has not provided it */ -	if (dev->cfg.clk_freq == 0) -		dev->cfg.clk_freq = 100000; -  	/*  	 * The spec says, in case of std. mode the divider is  	 * 2 whereas it is 3 for fast and fastplus mode of @@ -911,20 +907,32 @@ static const struct i2c_algorithm nmk_i2c_algo = {  	.functionality	= nmk_i2c_functionality  }; +static struct nmk_i2c_controller u8500_i2c = { +	/* +	 * Slave data setup time; 250ns, 100ns, and 10ns, which +	 * is 14, 6 and 2 respectively for a 48Mhz i2c clock. +	 */ +	.slsu           = 0xe, +	.tft            = 1,      /* Tx FIFO threshold */ +	.rft            = 8,      /* Rx FIFO threshold */ +	.clk_freq       = 400000, /* fast mode operation */ +	.timeout        = 200,    /* Slave response timeout(ms) */ +	.sm             = I2C_FREQ_MODE_FAST, +}; +  static atomic_t adapter_id = ATOMIC_INIT(0);  static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)  {  	int ret = 0; -	struct nmk_i2c_controller *pdata = -			adev->dev.platform_data; +	struct nmk_i2c_controller *pdata = adev->dev.platform_data;  	struct nmk_i2c_dev	*dev;  	struct i2c_adapter *adap; -	if (!pdata) { -		dev_warn(&adev->dev, "no platform data\n"); -		return -ENODEV; -	} +	if (!pdata) +		/* No i2c configuration found, using the default. */ +		pdata = &u8500_i2c; +  	dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL);  	if (!dev) {  		dev_err(&adev->dev, "cannot allocate memory\n"); diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index 6849635b268..5d19a49803c 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c @@ -584,7 +584,7 @@ omap_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)  	r = pm_runtime_get_sync(dev->dev);  	if (IS_ERR_VALUE(r)) -		return r; +		goto out;  	r = omap_i2c_wait_for_bb(dev);  	if (r < 0) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 66eb53fac20..9a08c57bc93 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -712,7 +712,7 @@ static int __devexit tegra_i2c_remove(struct platform_device *pdev)  	return 0;  } -#ifdef CONFIG_PM +#ifdef CONFIG_PM_SLEEP  static int tegra_i2c_suspend(struct device *dev)  {  	struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);  |