048-Fix-i2c-driver-bug-when-reinserting-as-module.patch 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. From 2c83888b2170d3883c9316c4d94dddc4b7f9ec68 Mon Sep 17 00:00:00 2001
  2. From: Alison Wang <[email protected]>
  3. Date: Thu, 4 Aug 2011 09:59:55 +0800
  4. Subject: [PATCH 48/52] Fix i2c driver bug when reinserting as module
  5. Signed-off-by: Alison Wang <[email protected]>
  6. ---
  7. drivers/i2c/busses/i2c-mcf-slave.c | 14 ++++++++++++++
  8. drivers/i2c/busses/i2c-mcf.c | 14 ++++++++++++++
  9. 2 files changed, 28 insertions(+), 0 deletions(-)
  10. --- a/drivers/i2c/busses/i2c-mcf-slave.c
  11. +++ b/drivers/i2c/busses/i2c-mcf-slave.c
  12. @@ -273,8 +273,15 @@ static int __init gen_i2c_proc_init(void
  13. return -ENOMEM;
  14. return 0;
  15. }
  16. +
  17. +static int gen_i2c_proc_deinit(void)
  18. +{
  19. + remove_proc_entry("driver/i2c-adaptor-register", NULL);
  20. + return 0;
  21. +}
  22. #else
  23. static inline int gen_i2c_proc_init(void) { return 0; }
  24. +static inline int gen_i2c_proc_deinit(void) { return 0; }
  25. #endif /* CONFIG_PROC_FS */
  26. /*
  27. @@ -345,6 +352,13 @@ static int __init i2c_coldfire_init(void
  28. static void __exit i2c_coldfire_exit(void)
  29. {
  30. + int retval;
  31. +
  32. + retval = gen_i2c_proc_deinit();
  33. + if (retval < 0)
  34. + printk(KERN_INFO "remove /proc/i2c-adaptor-register "
  35. + "for i2c slave mode failed!\n");
  36. +
  37. /* disable I2C and Interrupt */
  38. MCF_I2CR &= ~(MCF_I2CR_IEN | MCF_I2CR_IIEN);
  39. free_irq(IRQ, NULL);
  40. --- a/drivers/i2c/busses/i2c-mcf.c
  41. +++ b/drivers/i2c/busses/i2c-mcf.c
  42. @@ -669,8 +669,15 @@ static int __init gen_i2c_proc_init(void
  43. return -ENOMEM;
  44. return 0;
  45. }
  46. +
  47. +static int gen_i2c_proc_deinit(void)
  48. +{
  49. + remove_proc_entry("driver/i2c-adaptor-register", NULL);
  50. + return 0;
  51. +}
  52. #else
  53. static inline int gen_i2c_proc_init(void) { return 0; }
  54. +static inline int gen_i2c_proc_deinit(void) { return 0; }
  55. #endif /* CONFIG_PROC_FS */
  56. static int __init coldfire_i2c_init(void)
  57. @@ -687,6 +694,13 @@ static int __init coldfire_i2c_init(void
  58. static void __exit coldfire_i2c_exit(void)
  59. {
  60. + int retval;
  61. +
  62. + retval = gen_i2c_proc_deinit();
  63. + if (retval < 0)
  64. + printk(KERN_INFO "remove /proc/i2c-adaptor-register "
  65. + "for i2c master mode failed!\n");
  66. +
  67. platform_driver_unregister(&mcf_i2c_driver);
  68. }