hal_reset.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #include <aw_list.h>
  2. #include <stdlib.h>
  3. #include <hal_log.h>
  4. #include <hal_reset.h>
  5. static LIST_HEAD(reset_control_list);
  6. int reset_control_register(struct reset_control_dev *rcdev) //for reset system
  7. {
  8. if (rcdev)
  9. {
  10. list_add_tail(&rcdev->node, &reset_control_list);
  11. return 0;
  12. }
  13. return -1;
  14. }
  15. int reset_control_unregister(struct reset_control *reset) //for reset system
  16. {
  17. struct reset_control_dev *rcdev = NULL;
  18. if (!rcdev)
  19. {
  20. return 0;
  21. }
  22. list_for_each_entry(rcdev, &reset_control_list, node)
  23. {
  24. if (rcdev->type != reset->rcdev->type)
  25. {
  26. continue;
  27. }
  28. list_del(&rcdev->node);
  29. return 0;
  30. }
  31. return 0;
  32. }
  33. #ifdef CONFIG_DRIVERS_SUNXI_CCU
  34. struct reset_control *hal_reset_control_get(hal_reset_type_t type, hal_reset_id_t id)
  35. {
  36. struct reset_control_dev *rcdev = NULL;
  37. struct reset_control *rc = NULL;
  38. rc = (struct reset_control *)malloc(sizeof(*rc));
  39. if (!rc)
  40. {
  41. return NULL;
  42. }
  43. list_for_each_entry(rcdev, &reset_control_list, node)
  44. {
  45. if (rcdev->type != type)
  46. {
  47. continue;
  48. }
  49. if (rcdev->nr_resets < id)
  50. {
  51. continue;
  52. }
  53. rc->rcdev = rcdev;
  54. rc->id = id;
  55. rc->enable_count = 0;
  56. return rc;
  57. }
  58. return NULL;
  59. }
  60. int hal_reset_control_put(struct reset_control *reset)
  61. {
  62. if (!reset)
  63. return 0;
  64. free(reset);
  65. return 0;
  66. }
  67. int hal_reset_control_assert(struct reset_control *reset)
  68. {
  69. struct reset_control_dev *rcdev;
  70. if (!reset || !reset->rcdev)
  71. {
  72. return 0;
  73. }
  74. rcdev = reset->rcdev;
  75. if (rcdev->ops && rcdev->ops->assert)
  76. {
  77. return rcdev->ops->assert(rcdev, reset->id);
  78. }
  79. return -1;
  80. }
  81. int hal_reset_control_deassert(struct reset_control *reset)
  82. {
  83. struct reset_control_dev *rcdev;
  84. if (!reset || !reset->rcdev)
  85. {
  86. return 0;
  87. }
  88. rcdev = reset->rcdev;
  89. if (rcdev->ops && rcdev->ops->deassert)
  90. {
  91. return rcdev->ops->deassert(rcdev, reset->id);
  92. }
  93. return -1;
  94. }
  95. int hal_reset_control_reset(struct reset_control *reset)
  96. {
  97. struct reset_control_dev *rcdev;
  98. if (!reset || !reset->rcdev)
  99. {
  100. return 0;
  101. }
  102. rcdev = reset->rcdev;
  103. if (rcdev->ops && rcdev->ops->deassert)
  104. {
  105. return rcdev->ops->reset(rcdev, reset->id);
  106. }
  107. return -1;
  108. }
  109. int hal_reset_control_status(struct reset_control *reset)
  110. {
  111. struct reset_control_dev *rcdev;
  112. if (!reset || !reset->rcdev)
  113. {
  114. return 0;
  115. }
  116. rcdev = reset->rcdev;
  117. if (rcdev->ops && rcdev->ops->deassert)
  118. {
  119. return rcdev->ops->status(rcdev, reset->id);
  120. }
  121. return 0;
  122. }
  123. #else
  124. struct reset_control *hal_reset_control_get(hal_reset_type_t type_id, u32 reset_id)
  125. {
  126. return NULL;
  127. }
  128. int hal_reset_control_put(struct reset_control *reset)
  129. {
  130. return 0;
  131. }
  132. int hal_reset_control_assert(struct reset_control *reset)
  133. {
  134. return 0;
  135. }
  136. int hal_reset_control_deassert(struct reset_control *reset)
  137. {
  138. return 0;
  139. }
  140. int hal_reset_control_reset(struct reset_control *reset)
  141. {
  142. return 0;
  143. }
  144. int hal_reset_control_status(struct reset_control *reset)
  145. {
  146. return 0;
  147. }
  148. #endif