#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "light_ring.h" #include "led.h" #include "ssegment.h" #include "ec_version.h" #include "buzzer.h" #include "fan.h" #include "writeprotect.h" #include "myname.h" #include "cash_drawers.h" #include "batteryled.h" #include "watchdog.h" #include "power.h" #include "switches.h" #include "backlight.h" #include "gsensor.h" #include "lcd_2x20.h" struct kobject *vfiec_kobj = NULL; static int __init all_driver_init(void) { int ret = 0; /* 创建 /sys/kernel/vfiec */ vfiec_kobj = kobject_create_and_add("vfiec", kernel_kobj); if (!vfiec_kobj) { ret = -ENOMEM; return ret; } ret = backlight_init(); if(ret != 0) { printk(KERN_ERR "backlight_init failed\n"); goto out_kobject_put; } ret = switches_init(); if(ret != 0) { printk(KERN_ERR "switches_init failed\n"); goto out_backlight; } ret = power_interface_init(); if(ret != 0) { printk(KERN_ERR "power_interface_init failed\n"); goto out_switches; } ret = watchdog_init(); if(ret != 0) { printk(KERN_ERR "watchdog_init failed\n"); goto out_power; } ret = batteryled_init(); if(ret != 0) { printk(KERN_ERR "batteryled_init failed\n"); goto out_watchdog; } ret = cashd_init(); if(ret != 0) { printk(KERN_ERR "cashd_init failed\n"); goto out_batteryled; } ret = myname_init(); if(ret != 0) { printk(KERN_ERR "myname_init failed\n"); goto out_cashd; } ret = writeprotect_init(); if(ret != 0) { printk(KERN_ERR "writeprotect_init failed\n"); goto out_myname; } ret = fan_init(); if(ret != 0) { printk(KERN_ERR "fan_init failed\n"); goto out_writeprotect; } ret = buzzer_init(); if(ret != 0) { printk(KERN_ERR "buzzer_init failed\n"); goto out_fan; } ret = ec_version_init(); if(ret != 0) { printk(KERN_ERR "ec_version_init failed\n"); goto out_buzzer; } ret = light_ring_init(); if(ret != 0) { printk(KERN_ERR "light_ring_init failed\n"); goto out_ec_version; } ret = led_init(); if(ret != 0) { printk(KERN_ERR "led_init failed\n"); goto out_light_ring; } ret = ssegment_init(); if(ret != 0) { printk(KERN_ERR "sssegment_init failed\n"); goto out_led; } ret = gsensor_init_main(); if (ret != 0) { printk(KERN_ERR "gsensor_init failed\n"); goto out_ssegment; } ret = lcd2x20_init(); if(ret != 0) { printk(KERN_ERR "lcd2x20_init failed\n"); goto out_gensor; } printk(KERN_INFO "all_driver_init\n"); return ret; out_lcd: lcd2x20_exit(); out_gensor: gsensor_exit_main(); out_ssegment: ssegment_exit(); out_led: led_exit(); out_light_ring: light_ring_exit(); out_ec_version: ec_version_exit(); out_buzzer: buzzer_exit(); out_fan: fan_exit(); out_writeprotect: writeprotect_exit(); out_myname: myname_exit(); out_cashd: cashd_exit(); out_batteryled: batteryled_exit(); out_watchdog: watchdog_exit(); out_power: power_interface_exit(); out_switches: switches_exit(); out_backlight: backlight_exit(); out_kobject_put: kobject_put(vfiec_kobj); return ret; } static void __exit all_driver_exit(void) { backlight_exit(); switches_exit(); power_interface_exit(); watchdog_exit(); batteryled_exit(); cashd_exit(); myname_exit(); writeprotect_exit(); fan_exit(); buzzer_exit(); ec_version_exit(); light_ring_exit(); led_exit(); ssegment_exit(); gsensor_exit_main(); lcd2x20_exit(); kobject_put(vfiec_kobj); } module_init(all_driver_init); module_exit(all_driver_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("Fixed I2C Bus Driver for Intel N97 (0000:00:1f.4)"); MODULE_VERSION("1.0");