I2C cleanups
Subsystems (4)
v11 cover I2C cleanups
This is a minimal cleanup series.
The patch series does the following
- Bus busy recovery mechanism.
- Make the i2c use SET_RUNTIME_PM_OPS
- Use INIT_COMPLETION instead of init_completion
- the reset patch is dropped will try to rework it as per the review comments recieved.
This applies on Wolfram's i2c-embedded/for-next branch.
Functional testing on omap4430 , 4460 panda and omap3sdp.
The following changes since commit 0f009a914b40be8786fa67b1f4345cacc263b48c:
i2c: tegra: make all resource allocation through devm_* (2012-06-13 16:01:38 +0200)
are available in the git repository at:
git://gitorious.org/linus-tree/linus-tree.git for_next/omap/minimal_cleanup
Jon Hunter (1):
i2c: omap: Correct I2C revision for OMAP3
Shubhrajyoti D (4):
i2c: omap: Optimise the remove code
i2c: omap: Use SET_RUNTIME_PM_OPS
i2c: omap: Do not initialise the completion everytime
i2c: omap: Remove the definition of SYSS_RESETDONE_MASK
Vikram Pandita (1):
i2c: omap: Recover from Bus Busy condition
drivers/i2c/busses/i2c-omap.c | 60 ++++++++++++++++++++++++++++------------ 1 files changed, 42 insertions(+), 18 deletions(-)
Signature · 1 line
1.7.5.4
PATCH v11 1/6 i2c: omap: Optimise the remove code
The omap_i2c_remove function may not be needed after device exit so the memory could be freed.
--- drivers/i2c/busses/i2c-omap.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)
drivers/i2c/busses/i2c-omap.c +2 -3
@@ -1102,8 +1102,7 @@ err_release_region:return r; } -static int -omap_i2c_remove (struct platform_device *pdev) +static int __devexit omap_i2c_remove(struct platform_device *pdev) {struct omap_i2c_dev *dev =platform_get_drvdata (pdev);struct resource *mem;
@@ -1187,7 +1186,7 @@ static struct dev_pm_ops omap_i2c_pm_ops = {static struct platform_driver omap_i2c_driver = { .probe = omap_i2c_probe, - .remove = omap_i2c_remove, + .remove =__devexit_p (omap_i2c_remove), .driver = { .name ="omap_i2c" , .owner =THIS_MODULE ,
Signature · 1 line
1.7.5.4
PATCH v11 1/6 i2c: omap: Optimise the remove code
Quoted 4 lines · Shubhrajyoti D
The
omap_i2c_removefunction may not be needed after device exit so the memory could be freed.Signed-off-by Shubhrajyoti D <[email protected]>
Changed the title from "optimise" to "annotate" and pushed to next.
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/ce7bebb4/attachment.sig>
PATCH v11 1/6 i2c: omap: Optimise the remove code
Quoted 6 lines · Wolfram Sang
Quoted 4 lines · Shubhrajyoti D
The
omap_i2c_removefunction may not be needed after device exit so the memory could be freed.Signed-off-by Shubhrajyoti D <[email protected]>Changed the title from "optimise" to "annotate" and pushed to next.
Thanks for fixing that.
Quoted 1 line
PATCH v11 2/6 i2c: omap: Use SET_RUNTIME_PM_OPS
In reply to Shubhrajyoti DUse SET_RUNTIME_PM_OPS macro to set runtime functions.
--- drivers/i2c/busses/i2c-omap.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
drivers/i2c/busses/i2c-omap.c +5 -3
@@ -1126,6 +1126,7 @@ static int __devexit omap_i2c_remove(struct platform_device *pdev)return 0 ; } +#ifdef CONFIG_PM #ifdef CONFIG_PM_RUNTIME static int omap_i2c_runtime_suspend(struct device *dev) {
@@ -1174,15 +1175,16 @@ static int omap_i2c_runtime_resume(struct device *dev)return 0 ; } +#endif /* CONFIG_PM_RUNTIME */ static struct dev_pm_ops omap_i2c_pm_ops = { - .runtime_suspend = omap_i2c_runtime_suspend, - .runtime_resume = omap_i2c_runtime_resume, +SET_RUNTIME_PM_OPS (omap_i2c_runtime_suspend, + omap_i2c_runtime_resume,NULL ) };#define OMAP_I2C_PM_OPS (&omap_i2c_pm_ops)#else #define OMAP_I2C_PM_OPS NULL -#endif +#endif /* CONFIG_PM */ static struct platform_driver omap_i2c_driver = { .probe = omap_i2c_probe,
Signature · 1 line
1.7.5.4
Wolfram Sang
AppliedPATCH v11 2/6 i2c: omap: Use SET_RUNTIME_PM_OPS
Quoted 4 lines · Shubhrajyoti D
Use
SET_RUNTIME_PM_OPSmacro to set runtime functions.Acked-by Felipe Balbi <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>
Applied to next, thanks.
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/2c3e2dd4/attachment.sig>
PATCH v11 3/6 i2c: omap: Do not initialise the completion everytime
In reply to Shubhrajyoti DUse INIT_COMPLETION instead of init_completion in transfer.
---
- Add Felipe's reviewed-by tag
drivers/i2c/busses/i2c-omap.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/i2c/busses/i2c-omap.c +2 -1
@@ -490,7 +490,7 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap, w |=OMAP_I2C_BUF_RXFIF_CLR |OMAP_I2C_BUF_TXFIF_CLR ;omap_i2c_write_reg (dev,OMAP_I2C_BUF_REG , w); -init_completion (&dev->cmd_complete); +INIT_COMPLETION (dev->cmd_complete); dev->cmd_err =0 ; w =OMAP_I2C_CON_EN |OMAP_I2C_CON_MST |OMAP_I2C_CON_STT ;
@@ -999,6 +999,7 @@ omap_i2c_probe(struct platform_device *pdev) }platform_set_drvdata (pdev, dev); +init_completion (&dev->cmd_complete); dev->reg_shift = (dev->flags >>OMAP_I2C_FLAG_BUS_SHIFT__SHIFT ) &3 ;
Signature · 1 line
1.7.5.4
PATCH v11 3/6 i2c: omap: Do not initialise the completion everytime
Hi,
Quoted 24 lines · Shubhrajyoti D
Use
INIT_COMPLETIONinstead ofinit_completionin transfer.Reviewed-by Felipe Balbi <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>---
- Add Felipe's reviewed-by tag?drivers/i2c/busses/i2c-omap.c | ? ?3 ++-
?1 files changed, 2 insertions(+), 1 deletions(-)drivers/i2c/busses/i2c-omap.c +1
-1@@ -490,7 +490,7 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap, ? ? ? ?w |= OMAP_I2C_BUF_RXFIF_CLR | OMAP_I2C_BUF_TXFIF_CLR; ? ? ? ?omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, w); - ? ? ? init_completion(&dev->cmd_complete); + ? ? ? INIT_COMPLETION(dev->cmd_complete); ? ? ? ?dev->cmd_err = 0; ? ? ? ?w = OMAP_I2C_CON_EN | OMAP_I2C_CON_MST | OMAP_I2C_CON_STT;
drivers/i2c/busses/i2c-omap.c omap_i2c_probe(struct platform_device *pdev) · line 1002
Quoted 4 lines
drivers/i2c/busses/i2c-omap.c +1
-0@@ -999,6 +999,7 @@ omap_i2c_probe(struct platform_device *pdev) ? ? ? ?} ? ? ? ?platform_set_drvdata(pdev, dev); + ? ? ? init_completion(&dev->cmd_complete);
It should be INIT_COMPLETION here too.
Thanks
Kishon
PATCH v11 3/6 i2c: omap: Do not initialise the completion everytime
No, it should be init_completion(&dev->cmd_complete); in probe, we need to initialize the wait queue, which will be used when using "complete(......)"
-----Original Message-----
From: [email protected] [mailto:linux-i2c-owner at vger.kernel.org] On Behalf Of ABRAHAM, KISHON VIJAY
Sent: Friday, June 29, 2012 12:03 AM
To: Shubhrajyoti D
Cc: linux-omap at vger.kernel.org; linux-i2c at vger.kernel.org; linux-arm-kernel at lists.infradead.org; ben-linux at fluff.org; tony at atomide.com; w.sang at pengutronix.de
Subject: Re: [PATCHv11 3/6] i2c: omap: Do not initialise the completion everytime
Hi,
Quoted 27 lines · Shubhrajyoti D
Use
INIT_COMPLETIONinstead ofinit_completionin transfer.Reviewed-by Felipe Balbi <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>---
- Add Felipe's reviewed-by tag?drivers/i2c/busses/i2c-omap.c | ? ?3 ++-
?1 files changed, 2 insertions(+), 1 deletions(-)(quoted diff) +0
-0
b/drivers/i2c/busses/i2c-omap.cindex b9915bb..6d05f18 100644drivers/i2c/busses/i2c-omap.c +1
-1@@ -490,7 +490,7 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap, ? ? ? ?w |= OMAP_I2C_BUF_RXFIF_CLR | OMAP_I2C_BUF_TXFIF_CLR; ? ? ? ?omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, w); - ? ? ? init_completion(&dev->cmd_complete); + ? ? ? INIT_COMPLETION(dev->cmd_complete); ? ? ? ?dev->cmd_err = 0;? ? ? ?w =
OMAP_I2C_CON_EN|OMAP_I2C_CON_MST|OMAP_I2C_CON_STT; @@ -999,6 +999,7 @@omap_i2c_probe(struct platform_device *pdev)? ? ? ?}
Quoted 2 lines
? ? ? ?platform_set_drvdata(pdev, dev);
+ ? ? ?init_completion(&dev->cmd_complete);
It should be INIT_COMPLETION here too.
Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Wolfram Sang
AppliedPATCH v11 3/6 i2c: omap: Do not initialise the completion everytime
In reply to Shubhrajyoti DQuoted 4 lines · Shubhrajyoti D
Use
INIT_COMPLETIONinstead ofinit_completionin transfer.Reviewed-by Felipe Balbi <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>
Applied to next, thanks.
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/a025b696/attachment.sig>
PATCH v11 3/6 i2c: omap: Do not initialise the completion everytime
Quoted 3 lines · Wolfram Sang
Quoted 2 lines
Reviewed-by Felipe Balbi <[email protected]>Quoted 1 line
Signed-off-by Shubhrajyoti D <[email protected]>Applied to next, thanks.
Thanks
PATCH v11 4/6 i2c: omap: Remove the definition of SYSS_RESETDONE_MASK
In reply to Shubhrajyoti DRemove the definition of SYSS_RESETDONE_MASK and use the one in omap_hwmod.h.
---
- Add Felipe's reviewed by tag
drivers/i2c/busses/i2c-omap.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)
drivers/i2c/busses/i2c-omap.c +1 -3
@@ -43,6 +43,7 @@#include <linux/slab.h> #include <linux/i2c-omap.h> #include <linux/pm_runtime.h> +#include <plat/omap_hwmod.h> /* I2C controller revisions */ #define OMAP_I2C_OMAP1_REV_2 0x20
@@ -158,9 +159,6 @@ enum {#define OMAP_I2C_SYSTEST_SDA_O (1 << 0)/* SDA line drive out */ #endif -/* OCP_SYSSTATUS bit definitions */ -#define SYSS_RESETDONE_MASK (1 << 0) -/* OCP_SYSCONFIG bit definitions */ #define SYSC_CLOCKACTIVITY_MASK (0x3 << 8)#define SYSC_SIDLEMODE_MASK (0x3 << 3)
Signature · 1 line
1.7.5.4
PATCH v11 4/6 i2c: omap: Remove the definition of SYSS_RESETDONE_MASK
Quoted 16 lines · Shubhrajyoti D
Remove the definition of
SYSS_RESETDONE_MASKand use the one inomap_hwmod.h.Reviewed-by Felipe Balbi <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>---
- Add Felipe's reviewed by tagdrivers/i2c/busses/i2c-omap.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)drivers/i2c/busses/i2c-omap.c +0
-0
drivers/i2c/busses/i2c-omap.c line 46
Quoted 4 lines
drivers/i2c/busses/i2c-omap.c +1
-0@@ -43,6 +43,7 @@#include <linux/slab.h> #include <linux/i2c-omap.h> #include <linux/pm_runtime.h> +#include <plat/omap_hwmod.h>
Hmmm, so far the driver has no plat/mach dependencies and now this gets added. Need to think about it a bit more...
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/898892f0/attachment.sig>
PATCH v11 4/6 i2c: omap: Remove the definition of SYSS_RESETDONE_MASK
Quoted 3 lines · Wolfram Sang
Quoted 1 line
+#include <
plat/omap_hwmod.h>Hmmm, so far the driver has no plat/mach dependencies and now this gets added. Need to think about it a bit more...
OK .
PATCH v11 5/6 i2c: omap: Correct I2C revision for OMAP3
In reply to Shubhrajyoti DFrom: Jon Hunter <[email protected]>
The OMAP3530 is based upon the same silicon as the OMAP3430 and so the I2C revision is the same for 3430 and 3530. However, the OMAP3630 device has the same I2C revision as OMAP4. Correct the revision definition to reflect this.
This patch is based on work done by Jon Hunter <[email protected]> Changes from his patch
- Update OMAP_I2C_REV_ON_3430 also to reflect that it is same as 3530
---
- Add Felipe's Reviewed by tag
drivers/i2c/busses/i2c-omap.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
drivers/i2c/busses/i2c-omap.c +5 -5
@@ -50,8 +50,8 @@/* I2C controller revisions present on specific hardware */ #define OMAP_I2C_REV_ON_2430 0x36 -#define OMAP_I2C_REV_ON_3430 0x3C -#define OMAP_I2C_REV_ON_3530_4430 0x40 +#define OMAP_I2C_REV_ON_3430_3530 0x3C +#define OMAP_I2C_REV_ON_3630_4430 0x40/* timeout waiting for the controller to respond */ #define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
@@ -303,7 +303,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)omap_i2c_write_reg (dev,OMAP_I2C_SYSC_REG ,SYSC_AUTOIDLE_MASK ); - }else if (dev->rev >=OMAP_I2C_REV_ON_3430 ) { + }else if (dev->rev >=OMAP_I2C_REV_ON_3430_3530 ) { dev->syscstate =SYSC_AUTOIDLE_MASK ; dev->syscstate |=SYSC_ENAWAKEUP_MASK ; dev->syscstate |= (SYSC_IDLEMODE_SMART <<
@@ -1018,7 +1018,7 @@ omap_i2c_probe(struct platform_device *pdev)if (dev->flags &OMAP_I2C_FLAG_APPLY_ERRATA_I207 ) dev->errata |=I2C_OMAP_ERRATA_I207 ; -if (dev->rev <=OMAP_I2C_REV_ON_3430 ) +if (dev->rev <=OMAP_I2C_REV_ON_3430_3530 ) dev->errata |=I2C_OMAP_ERRATA_I462 ;if (!(dev->flags &OMAP_I2C_FLAG_NO_FIFO )) {
@@ -1036,7 +1036,7 @@ omap_i2c_probe(struct platform_device *pdev) dev->fifo_size = (dev->fifo_size /2 ); -if (dev->rev >=OMAP_I2C_REV_ON_3530_4430 ) +if (dev->rev >=OMAP_I2C_REV_ON_3630_4430 ) dev->b_hw =0 ;/* Disable hardware fixes */ else dev->b_hw =1 ;/* Enable hardware fixes */
Signature · 1 line
1.7.5.4
Wolfram Sang
AppliedPATCH v11 5/6 i2c: omap: Correct I2C revision for OMAP3
Quoted 6 lines · Shubhrajyoti D
From: Jon Hunter <[email protected]>
The OMAP3530 is based upon the same silicon as the OMAP3430 and so the I2C revision is the same for 3430 and 3530. However, the OMAP3630 device has the same I2C revision as OMAP4. Correct the revision definition to reflect this.
Quoted 7 lines
This patch is based on work done by Jon Hunter <[email protected]> Changes from his patch
- UpdateOMAP_I2C_REV_ON_3430also to reflect that it is same as 3530Reviewed-by Felipe Balbi <[email protected]>Signed-off-by Jon Hunter <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>
Applied to next, thanks.
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/3b5239b1/attachment.sig>
PATCH v11 5/6 i2c: omap: Correct I2C revision for OMAP3
Quoted 6 lines · Wolfram Sang
Quoted 5 lines
- Update
OMAP_I2C_REV_ON_3430also to reflect that it is same as 3530Quoted 4 lines
Reviewed-by Felipe Balbi <[email protected]>Signed-off-by Jon Hunter <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>Applied to next, thanks.
Thanks.
PATCH v11 6/6 i2c: omap: Recover from Bus Busy condition
In reply to Shubhrajyoti DFrom: Vikram Pandita <[email protected]>
In case a peripheral is driving SDA bus low (ie. a start condition), provide a constant clock output using the test mode of the OMAP I2C controller to try and clear the bus. Soft reset I2C controller after attempting the bus clear to ensure that controller is in a good state.
Based upon Vikram Pandita's patch from TI Android 3.0. I acknowledge the contributions and suggestions of Jon and Hemant.
A couple differences from the original patch ...
1. Add a new function for bus clear
2. Ensure that the CON.I2C_EN bit is set when using the SYSTEST feature to output a permanent clock. This bit needs to be set and typically it would be set by the unidle function but this is not the case for all OMAP generations.
3. Program the SYSTEST setting only the bits we care about. However, restore SYSTEST registers to there original state as some OMAP generations do not implement perform a soft-reset.
4. Clear the CON register after performing the bus clear, so when we call the init function the controller is disabled and the init function will re-enable later.
Original patch can be found here:
http://git.omapzoom.org/?p=kernel/omap.git;a=commit;h=a2ab04192ba25e60f95ba1ff3af5601a2d7b5bd1
--- drivers/i2c/busses/i2c-omap.c | 30 +++++++++++++++++++++++++++--- 1 files changed, 27 insertions(+), 3 deletions(-)
drivers/i2c/busses/i2c-omap.c +27 -3
@@ -148,16 +148,15 @@ enum {#define OMAP_I2C_SCLH_HSSCLH 8/* I2C System Test Register (OMAP_I2C_SYSTEST): */ -#ifdef DEBUG #define OMAP_I2C_SYSTEST_ST_EN (1 << 15)/* System test enable */ #define OMAP_I2C_SYSTEST_FREE (1 << 14)/* Free running mode */ #define OMAP_I2C_SYSTEST_TMODE_MASK (3 << 12)/* Test mode select */ -#define OMAP_I2C_SYSTEST_TMODE_SHIFT (12)/* Test mode select */ +#define OMAP_I2C_SYSTEST_TMODE_TEST (2 << 12)/* Test mode select */ +#define OMAP_I2C_SYSTEST_TMODE_LOOP (3 << 12)/* Test mode select */ #define OMAP_I2C_SYSTEST_SCL_I (1 << 3)/* SCL line sense in */ #define OMAP_I2C_SYSTEST_SCL_O (1 << 2)/* SCL line drive out */ #define OMAP_I2C_SYSTEST_SDA_I (1 << 1)/* SDA line sense in */ #define OMAP_I2C_SYSTEST_SDA_O (1 << 0)/* SDA line drive out */ -#endif /* OCP_SYSCONFIG bit definitions */ #define SYSC_CLOCKACTIVITY_MASK (0x3 << 8)
@@ -458,6 +457,29 @@ static int omap_i2c_wait_for_bb(struct omap_i2c_dev *dev)return 0 ; } +/* +* Bus Clear +*/ +static int omap_i2c_bus_clear (struct omap_i2c_dev *dev) +{ +u16 w; + +/* +* Per the I2C specification, if we are stuck in a bus busy state +* we can attempt a bus clear to try and recover the bus by sending +*@least 9 clock pulses on SCL. Put the I2C in a test mode so it +* will output a continuous clock on SCL. +*/ + w =omap_i2c_read_reg (dev,OMAP_I2C_SYSTEST_REG ); +omap_i2c_write_reg (dev,OMAP_I2C_CON_REG ,OMAP_I2C_CON_EN ); +omap_i2c_write_reg (dev,OMAP_I2C_SYSTEST_REG , (OMAP_I2C_SYSTEST_ST_EN + |OMAP_I2C_SYSTEST_TMODE_TEST )); +msleep (1 ); +omap_i2c_write_reg (dev,OMAP_I2C_SYSTEST_REG , w); +omap_i2c_write_reg (dev,OMAP_I2C_CON_REG ,0 ); +omap_i2c_init (dev); +return omap_i2c_wait_for_bb (dev); +}/* * Low level master read/write transaction.
@@ -584,6 +606,8 @@ omap_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) r =omap_i2c_wait_for_bb (dev);if (r <0 ) + r =omap_i2c_bus_clear (dev); +if (r <0 ) goto out;if (dev->set_mpu_wkup_lat !=NULL )
Signature · 1 line
1.7.5.4
PATCH v11 6/6 i2c: omap: Recover from Bus Busy condition
Quoted 23 lines · Shubhrajyoti D
From: Vikram Pandita <[email protected]>
In case a peripheral is driving SDA bus low (ie. a start condition), provide a constant clock output using the test mode of the OMAP I2C controller to try and clear the bus. Soft reset I2C controller after attempting the bus clear to ensure that controller is in a good state.
Based upon Vikram Pandita's patch from TI Android 3.0. I acknowledge the contributions and suggestions of Jon and Hemant.
A couple differences from the original patch ...
1. Add a new function for bus clear
2. Ensure that the CON.I2C_EN bit is set when using the SYSTEST feature to output a permanent clock. This bit needs to be set and typically it would be set by the unidle function but this is not the case for all OMAP generations.
3. Program the SYSTEST setting only the bits we care about. However, restore SYSTEST registers to there original state as some OMAP generations do not implement perform a soft-reset.
4. Clear the CON register after performing the bus clear, so when we call the init function the controller is disabled and the init function will re-enable later.
Quoted 6 lines
Original patch can be found here:
http://git.omapzoom.org/?p=kernel/omap.git;a=commit;h=a2ab04192ba25e60f95ba1ff3af5601a2d7b5bd1Signed-off-by Vikram Pandita <[email protected]>Signed-off-by Jon Hunter <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>
This has to wait a little bit until I can spend time on the recovery framework (which is still in the queue, sadly :( ). There might be some consolidation.
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/ce96a453/attachment-0001.sig>
PATCH v11 6/6 i2c: omap: Recover from Bus Busy condition
Quoted 6 lines · Wolfram Sang
Quoted 3 lines
Signed-off-by Vikram Pandita <[email protected]>Quoted 2 lines
Signed-off-by Jon Hunter <[email protected]>Signed-off-by Shubhrajyoti D <[email protected]>This has to wait a little bit until I can spend time on the recovery framework (which is still in the queue, sadly :( ). There might be some consolidation.
OK thanks.
v11 cover I2C cleanups
In reply to Shubhrajyoti DQuoted 1 line · Shubhrajyoti D
This is a minimal cleanup series.
If there are no further comments can this series be queued?
Quoted 44 lines
The patch series does the following
- Bus busy recovery mechanism.
- Make the i2c useSET_RUNTIME_PM_OPS
- UseINIT_COMPLETIONinstead ofinit_completion
- the reset patch is dropped will try to rework it as per the review comments recieved.This applies on Wolfram's i2c-embedded/for-next branch.
Functional testing on omap4430 , 4460 panda and omap3sdp.
The following changes since commit
0f009a914b40be8786fa67b1f4345cacc263b48c:i2c: tegra: make all resource allocation through devm_* (2012-06-13 16:01:38 +0200)
are available in the git repository at:
git://gitorious.org/linus-tree/linus-tree.gitfor_next/omap/minimal_cleanupJon Hunter (1):
i2c: omap: Correct I2C revision for OMAP3Shubhrajyoti D (4):
i2c: omap: Optimise the remove code
i2c: omap: UseSET_RUNTIME_PM_OPS
i2c: omap: Do not initialise the completion everytime
i2c: omap: Remove the definition ofSYSS_RESETDONE_MASKVikram Pandita (1):
i2c: omap: Recover from Bus Busy conditiondrivers/i2c/busses/i2c-omap.c | 60 ++++++++++++++++++++++++++++------------ 1 files changed, 42 insertions(+), 18 deletions(-)--
1.7.5.4--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
v11 cover I2C cleanups
Quoted 4 lines · Shubhrajyoti Datta
Quoted 1 line · Shubhrajyoti D
This is a minimal cleanup series.
If there are no further comments can this series be queued?
I just applied a few of them. BTW I get a build warning when compiling the kernel, maybe someone is interested. It is not related to the patches, though.
===
WARNING: arch/arm/mach-omap2/built-in.o(.data+0x2b5c0): Section mismatch in reference from the variable rx51_si4713_dev to the (unknown reference) .init.data:(unknown) The variable rx51_si4713_dev references
the (unknown reference) __initdata (unknown)
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:*_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console
===
I think this is what I'll pull in for the next merge window. The big OMAP cleanup (latest version from 3. July) would then go in early into -next for 3.7. Is that OK with the omap-people?
Also, thanks to Shubhrajyoti Datta for reviewing other patches on the i2c-list, much appreciated.
Thanks,
Wolfram
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120712/7065ea3b/attachment.sig>
v11 cover I2C cleanups
Quoted 6 lines · Wolfram Sang
Quoted 3 lines · Shubhrajyoti Datta
Quoted 1 line · Shubhrajyoti D
This is a minimal cleanup series.
If there are no further comments can this series be queued?
I just applied a few of them. BTW I get a build warning when compiling the kernel, maybe someone is interested. It is not related to the patches, though.
OK could check that.
Quoted 10 lines
===
WARNING: arch/arm/mach-omap2/built-in.o(.data+0x2b5c0): Section mismatch in reference from the variable
rx51_si4713_devto the (unknown reference) .init.data:(unknown) The variablerx51_si4713_devreferences
the (unknown reference)__initdata(unknown)
If the reference is valid then annotate the
variable with __init* or__refdata(seelinux/init.h) or name the variable:*_template,*_timer,*_sht,*_ops,*_probe,*_probe_one,*_console
Quoted 8 lines
===
I think this is what I'll pull in for the next merge window. The big OMAP cleanup (latest version from 3. July) would then go in early into -next for 3.7. Is that OK with the omap-people?
Also, thanks to Shubhrajyoti Datta for reviewing other patches on the i2c-list, much appreciated.
Thanks,
Quoted 4 lines
Thanks,
Wolfram