diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-08-22 13:41:36 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-08-22 13:41:36 -0400 |
| commit | 2e2d8c93aec7c0f995bf140a00fb15ca2e07ddd4 (patch) | |
| tree | 3d63494f9727262ea5c53da9d73577a04b14f493 | |
| parent | fec3c03fb07ac2acae03199fa7472a29a0d9b49d (diff) | |
| parent | 371e67c9e1a82b5fd8110b9a25e36bbc3a99e8c7 (diff) | |
Merge branch 'i2c-embedded/for-current' of git://git.pengutronix.de/git/wsa/linux
Pull i2c-embedded fixes from Wolfram Sang:
"Some bugfixes for the "embedded" part of the I2C subsystem. The fixes
affect mostly drivers which have been largely reworked lately and
where regressions appeared."
* 'i2c-embedded/for-current' of git://git.pengutronix.de/git/wsa/linux:
i2c: tegra: protect suspend/resume callbacks with CONFIG_PM_SLEEP
i2c: diolan-u2c: Fix master_xfer return code
I2C: OMAP: xfer: fix runtime PM get/put balance on error
i2c: nomadik: Add default configuration into the Nomadik I2C driver
| -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 aedb94f34bf7..dae3ddfe7619 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, | |||
| 405 | } | 405 | } |
| 406 | } | 406 | } |
| 407 | } | 407 | } |
| 408 | ret = num; | ||
| 408 | abort: | 409 | abort: |
| 409 | sret = diolan_i2c_stop(dev); | 410 | sret = diolan_i2c_stop(dev); |
| 410 | if (sret < 0 && ret >= 0) | 411 | if (sret < 0 && ret >= 0) |
diff --git a/drivers/i2c/busses/i2c-nomadik.c b/drivers/i2c/busses/i2c-nomadik.c index 5e6f1eed4f83..61b00edacb08 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) | |||
| 350 | 350 | ||
| 351 | i2c_clk = clk_get_rate(dev->clk); | 351 | i2c_clk = clk_get_rate(dev->clk); |
| 352 | 352 | ||
| 353 | /* fallback to std. mode if machine has not provided it */ | ||
| 354 | if (dev->cfg.clk_freq == 0) | ||
| 355 | dev->cfg.clk_freq = 100000; | ||
| 356 | |||
| 357 | /* | 353 | /* |
| 358 | * The spec says, in case of std. mode the divider is | 354 | * The spec says, in case of std. mode the divider is |
| 359 | * 2 whereas it is 3 for fast and fastplus mode of | 355 | * 2 whereas it is 3 for fast and fastplus mode of |
| @@ -911,20 +907,32 @@ static const struct i2c_algorithm nmk_i2c_algo = { | |||
| 911 | .functionality = nmk_i2c_functionality | 907 | .functionality = nmk_i2c_functionality |
| 912 | }; | 908 | }; |
| 913 | 909 | ||
| 910 | static struct nmk_i2c_controller u8500_i2c = { | ||
| 911 | /* | ||
| 912 | * Slave data setup time; 250ns, 100ns, and 10ns, which | ||
| 913 | * is 14, 6 and 2 respectively for a 48Mhz i2c clock. | ||
| 914 | */ | ||
| 915 | .slsu = 0xe, | ||
| 916 | .tft = 1, /* Tx FIFO threshold */ | ||
| 917 | .rft = 8, /* Rx FIFO threshold */ | ||
| 918 | .clk_freq = 400000, /* fast mode operation */ | ||
| 919 | .timeout = 200, /* Slave response timeout(ms) */ | ||
| 920 | .sm = I2C_FREQ_MODE_FAST, | ||
| 921 | }; | ||
| 922 | |||
| 914 | static atomic_t adapter_id = ATOMIC_INIT(0); | 923 | static atomic_t adapter_id = ATOMIC_INIT(0); |
| 915 | 924 | ||
| 916 | static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) | 925 | static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) |
| 917 | { | 926 | { |
| 918 | int ret = 0; | 927 | int ret = 0; |
| 919 | struct nmk_i2c_controller *pdata = | 928 | struct nmk_i2c_controller *pdata = adev->dev.platform_data; |
| 920 | adev->dev.platform_data; | ||
| 921 | struct nmk_i2c_dev *dev; | 929 | struct nmk_i2c_dev *dev; |
| 922 | struct i2c_adapter *adap; | 930 | struct i2c_adapter *adap; |
| 923 | 931 | ||
| 924 | if (!pdata) { | 932 | if (!pdata) |
| 925 | dev_warn(&adev->dev, "no platform data\n"); | 933 | /* No i2c configuration found, using the default. */ |
| 926 | return -ENODEV; | 934 | pdata = &u8500_i2c; |
| 927 | } | 935 | |
| 928 | dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL); | 936 | dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL); |
| 929 | if (!dev) { | 937 | if (!dev) { |
| 930 | dev_err(&adev->dev, "cannot allocate memory\n"); | 938 | 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 6849635b268a..5d19a49803c1 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) | |||
| 584 | 584 | ||
| 585 | r = pm_runtime_get_sync(dev->dev); | 585 | r = pm_runtime_get_sync(dev->dev); |
| 586 | if (IS_ERR_VALUE(r)) | 586 | if (IS_ERR_VALUE(r)) |
| 587 | return r; | 587 | goto out; |
| 588 | 588 | ||
| 589 | r = omap_i2c_wait_for_bb(dev); | 589 | r = omap_i2c_wait_for_bb(dev); |
| 590 | if (r < 0) | 590 | if (r < 0) |
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 66eb53fac202..9a08c57bc936 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) | |||
| 712 | return 0; | 712 | return 0; |
| 713 | } | 713 | } |
| 714 | 714 | ||
| 715 | #ifdef CONFIG_PM | 715 | #ifdef CONFIG_PM_SLEEP |
| 716 | static int tegra_i2c_suspend(struct device *dev) | 716 | static int tegra_i2c_suspend(struct device *dev) |
| 717 | { | 717 | { |
| 718 | struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev); | 718 | struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev); |
