main.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/init.h>
  4. #include <linux/fs.h>
  5. #include <linux/cdev.h>
  6. #include <linux/device.h>
  7. #include <linux/uaccess.h>
  8. #include <linux/slab.h>
  9. #include <linux/pci.h>
  10. #include <linux/i2c.h>
  11. #include <linux/acpi.h>
  12. #include <linux/interrupt.h>
  13. #include <linux/wait.h>
  14. #include <linux/sched.h>
  15. #include <linux/poll.h>
  16. #include <linux/mutex.h>
  17. #include <linux/delay.h>
  18. #include "light_ring.h"
  19. #include "led.h"
  20. #include "ssegment.h"
  21. #include "ec_version.h"
  22. #include "buzzer.h"
  23. #include "fan.h"
  24. #include "writeprotect.h"
  25. #include "myname.h"
  26. #include "cash_drawers.h"
  27. #include "batteryled.h"
  28. #include "watchdog.h"
  29. #include "power.h"
  30. #include "switches.h"
  31. #include "backlight.h"
  32. #include "gsensor.h"
  33. #include "lcd_2x20.h"
  34. #include "smart_battery.h"
  35. #include "voltage_sysfs.h"
  36. struct kobject *vfiec_kobj = NULL;
  37. struct kobject *hwmon_kobj = NULL;
  38. static int __init all_driver_init(void)
  39. {
  40. int ret = 0;
  41. vfiec_kobj = kobject_create_and_add("vfiec", kernel_kobj);
  42. if (!vfiec_kobj)
  43. {
  44. ret = -ENOMEM;
  45. return ret;
  46. }
  47. hwmon_kobj = kobject_create_and_add("hwmon", vfiec_kobj);
  48. if (!hwmon_kobj)
  49. {
  50. kobject_put(vfiec_kobj);
  51. ret = -ENOMEM;
  52. return ret;
  53. }
  54. ret = backlight_init();
  55. if(ret != 0)
  56. {
  57. printk(KERN_ERR "backlight_init failed\n");
  58. goto out_kobject_put;
  59. }
  60. ret = switches_init();
  61. if(ret != 0)
  62. {
  63. printk(KERN_ERR "switches_init failed\n");
  64. goto out_backlight;
  65. }
  66. ret = power_interface_init();
  67. if(ret != 0)
  68. {
  69. printk(KERN_ERR "power_interface_init failed\n");
  70. goto out_switches;
  71. }
  72. ret = watchdog_init();
  73. if(ret != 0)
  74. {
  75. printk(KERN_ERR "watchdog_init failed\n");
  76. goto out_power;
  77. }
  78. ret = batteryled_init();
  79. if(ret != 0)
  80. {
  81. printk(KERN_ERR "batteryled_init failed\n");
  82. goto out_watchdog;
  83. }
  84. ret = cashd_init();
  85. if(ret != 0)
  86. {
  87. printk(KERN_ERR "cashd_init failed\n");
  88. goto out_batteryled;
  89. }
  90. ret = myname_init();
  91. if(ret != 0)
  92. {
  93. printk(KERN_ERR "myname_init failed\n");
  94. goto out_cashd;
  95. }
  96. ret = writeprotect_init();
  97. if(ret != 0)
  98. {
  99. printk(KERN_ERR "writeprotect_init failed\n");
  100. goto out_myname;
  101. }
  102. ret = fan_init();
  103. if(ret != 0)
  104. {
  105. printk(KERN_ERR "fan_init failed\n");
  106. goto out_writeprotect;
  107. }
  108. ret = buzzer_init();
  109. if(ret != 0)
  110. {
  111. printk(KERN_ERR "buzzer_init failed\n");
  112. goto out_fan;
  113. }
  114. ret = ec_version_init();
  115. if(ret != 0)
  116. {
  117. printk(KERN_ERR "ec_version_init failed\n");
  118. goto out_buzzer;
  119. }
  120. ret = light_ring_init();
  121. if(ret != 0)
  122. {
  123. printk(KERN_ERR "light_ring_init failed\n");
  124. goto out_ec_version;
  125. }
  126. ret = led_init();
  127. if(ret != 0)
  128. {
  129. printk(KERN_ERR "led_init failed\n");
  130. goto out_light_ring;
  131. }
  132. ret = ssegment_init();
  133. if(ret != 0)
  134. {
  135. printk(KERN_ERR "sssegment_init failed\n");
  136. goto out_led;
  137. }
  138. ret = gsensor_init_main();
  139. if (ret != 0) {
  140. printk(KERN_ERR "gsensor_init failed\n");
  141. goto out_ssegment;
  142. }
  143. ret = lcd2x20_init();
  144. if(ret != 0)
  145. {
  146. printk(KERN_ERR "lcd2x20_init failed\n");
  147. goto out_gensor;
  148. }
  149. ret = battery_acpi_driver_init();
  150. if(ret != 0)
  151. {
  152. printk(KERN_ERR "battery_acpi_driver_init failed\n");
  153. goto out_lcd;
  154. }
  155. ret = voltage_sysfs_init();
  156. if(ret != 0)
  157. {
  158. printk(KERN_ERR "voltage_sysfs_init failed\n");
  159. goto out_battery_acpi;
  160. }
  161. printk(KERN_INFO "all_driver_init\n");
  162. return ret;
  163. out_voltage_sysfs:
  164. voltage_sysfs_exit();
  165. out_battery_acpi:
  166. battery_acpi_driver_exit();
  167. out_lcd:
  168. lcd2x20_exit();
  169. out_gensor:
  170. gsensor_exit_main();
  171. out_ssegment:
  172. ssegment_exit();
  173. out_led:
  174. led_exit();
  175. out_light_ring:
  176. light_ring_exit();
  177. out_ec_version:
  178. ec_version_exit();
  179. out_buzzer:
  180. buzzer_exit();
  181. out_fan:
  182. fan_exit();
  183. out_writeprotect:
  184. writeprotect_exit();
  185. out_myname:
  186. myname_exit();
  187. out_cashd:
  188. cashd_exit();
  189. out_batteryled:
  190. batteryled_exit();
  191. out_watchdog:
  192. watchdog_exit();
  193. out_power:
  194. power_interface_exit();
  195. out_switches:
  196. switches_exit();
  197. out_backlight:
  198. backlight_exit();
  199. out_kobject_put:
  200. kobject_put(vfiec_kobj);
  201. return ret;
  202. }
  203. static void __exit all_driver_exit(void)
  204. {
  205. backlight_exit();
  206. switches_exit();
  207. power_interface_exit();
  208. watchdog_exit();
  209. batteryled_exit();
  210. cashd_exit();
  211. myname_exit();
  212. writeprotect_exit();
  213. fan_exit();
  214. buzzer_exit();
  215. ec_version_exit();
  216. light_ring_exit();
  217. led_exit();
  218. ssegment_exit();
  219. gsensor_exit_main();
  220. lcd2x20_exit();
  221. battery_acpi_driver_exit();
  222. voltage_sysfs_exit();
  223. kobject_put(vfiec_kobj);
  224. }
  225. module_init(all_driver_init);
  226. module_exit(all_driver_exit);
  227. MODULE_LICENSE("GPL");
  228. MODULE_AUTHOR("Your Name");
  229. MODULE_DESCRIPTION("Fixed I2C Bus Driver for Intel N97 (0000:00:1f.4)");
  230. MODULE_VERSION("1.0");