static long read_timeout = 1000; /* ms to wait before read() times out */
static long write_timeout = 1000; /* ms to wait before write() times out */
+static DEFINE_IDA(axis_fifo_ida);
+
/* ----------------------------
* module command-line arguments
* ----------------------------
*/
struct axis_fifo {
+ int id;
int irq; /* interrupt */
void __iomem *base_addr; /* kernel space memory */
dev_dbg(fifo->dt_device, "remapped memory to 0x%p\n", fifo->base_addr);
- /* create unique device name */
- snprintf(device_name, 32, "%s_%pa", DRIVER_NAME, &r_mem->start);
- dev_dbg(fifo->dt_device, "device name [%s]\n", device_name);
-
/* ----------------------------
* init IP
* ----------------------------
* init char device
* ----------------------------
*/
+ fifo->id = ida_alloc(&axis_fifo_ida, GFP_KERNEL);
+ if (fifo->id < 0)
+ return fifo->id;
+
+ snprintf(device_name, 32, "%s%d", DRIVER_NAME, fifo->id);
/* create character device */
fifo->miscdev.fops = &fops;
fifo->miscdev.name = device_name;
fifo->miscdev.parent = dev;
rc = misc_register(&fifo->miscdev);
- if (rc < 0)
+ if (rc < 0) {
+ ida_free(&axis_fifo_ida, fifo->id);
return rc;
+ }
axis_fifo_debugfs_init(fifo);
debugfs_remove(fifo->debugfs_dir);
misc_deregister(&fifo->miscdev);
+ ida_free(&axis_fifo_ida, fifo->id);
}
static const struct of_device_id axis_fifo_of_match[] = {
static void __exit axis_fifo_exit(void)
{
platform_driver_unregister(&axis_fifo_driver);
+ ida_destroy(&axis_fifo_ida);
}
module_exit(axis_fifo_exit);