1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| #include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <linux/i2c.h>
#include <linux/major.h>
/* Global variables */
struct cdev *dumy_cdev = NULL;
unsigned int dumy_major;
unsigned int nb_devices = 1;
/* Definition for file operation */
static struct file_operations dummy_fops =
{
.owner = THIS_MODULE,
};
static int dummy_i2c_probe(struct i2c_client*client){
return 0;
}
static int __devexit dummy_i2c_remove(struct i2c_client *client){
return 0;
}
static struct i2c_driver dummy_i2c_driver ={
.driver ={
.name = "dummy",
.owner = THIS_MODULE,
},
.probe = dummy_i2c_probe,
.remove = __devexit_p(dummy_i2c_remove),
};
static void dummy_cleanup_module(void){
cdev_del(dummy_cdev);
unregister_chrdev_region(MKDEV(device_major, 0), nb_devices);
i2c_del_driver(&dummy_i2c_driver);
}
static int dummy_init_module(void){
dev_t dev_no;
if (alloc_chrdev_region(&dev_no,0 ,nb_devices ,"dummy" ) ){
printk(KERN_ALERT "dummy: can't allocate char device region\n");
return(-EBUSY);
}
dummy_major=MAJOR(dev_no);
if ((dummy_cdev=cdev_alloc())==NULL){
printk(KERN_ALERT "dummy: can't allocate device\n");
unregister_chrdev_region(MKDEV(device_major,0),nb_devices);
return(-EBUSY);
}
dummy_cdev->owner = THIS_MODULE;
dummy_cdev->ops = dummy_fops;
if(i2c_add_driver(&dumy_i2c_driver)){
printk(KERN_ALERT "dummy: can't add i2c driver\n");
return (-EBUSY);
}
if (cdev_add(dummy_cdev,dev_no,nbdevices)){
printk(KERN_ALERT "dummy: can't add device\n");
unregister_chrdev_region(MKDEV(device_major,0),nb_devices);
return(-EBUSY);
}
return 0;
}
module_init(dummy_init_module);
module_exit(dummy_cleanup_module);
MODULE_AUTHOR("kamou");
MODULE_DESCRIPTION("dummy driver");
MODULE_LICENSE("GPL"); |
Partager