static int __init fpga_init(void)
{
int ret;
dev_t dev = 0;
FPGA_cdev = cdev_alloc();
printk(DEVICE_NAME"start init\n");
/*register device, if FPGA_Major is not 0, it will get this major number, or allocated by kernel
* register_chrdev_region instead of register_chrdev for v2.6 kernel*/
if (FPGA_Major)
{
dev = MKDEV(FPGA_Major, FPGA_Minor);
ret = register_chrdev_region(dev, 1, DEVICE_NAME);
}
else
{
ret = alloc_chrdev_region(&dev, FPGA_Minor, 1, DEVICE_NAME);
FPGA_Major = MAJOR(dev);
}
if (ret < 0)
{
printk(KERN_WARNING "FPGA: can't get major %d\n", FPGA_Major);
return ret;
}
cdev_init(FPGA_cdev, &fpga_fops);
FPGA_cdev->owner = THIS_MODULE;
FPGA_cdev->ops = &fpga_fops;
ret = cdev_add (FPGA_cdev, MKDEV(FPGA_Major, FPGA_Minor), 1);
/* Fail gracefully if need be */
if (ret)
{
printk(KERN_NOTICE "Error %d adding FPGA", ret);
return ret;
}