Commit bb3d7c7f authored by Ralf Baechle's avatar Ralf Baechle

[MIPS] RTLX: Sprinkle device model code into code to make udev happier.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 27a3bbaf
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
* *
*/ */
#include <linux/device.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/fs.h> #include <linux/fs.h>
...@@ -34,6 +35,7 @@ ...@@ -34,6 +35,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <asm/mipsmtregs.h> #include <asm/mipsmtregs.h>
#include <asm/mips_mt.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/cpu.h> #include <asm/cpu.h>
...@@ -498,7 +500,8 @@ static char register_chrdev_failed[] __initdata = ...@@ -498,7 +500,8 @@ static char register_chrdev_failed[] __initdata =
static int rtlx_module_init(void) static int rtlx_module_init(void)
{ {
int i; struct device *dev;
int i, err;
major = register_chrdev(0, module_name, &rtlx_fops); major = register_chrdev(0, module_name, &rtlx_fops);
if (major < 0) { if (major < 0) {
...@@ -511,6 +514,13 @@ static int rtlx_module_init(void) ...@@ -511,6 +514,13 @@ static int rtlx_module_init(void)
init_waitqueue_head(&channel_wqs[i].rt_queue); init_waitqueue_head(&channel_wqs[i].rt_queue);
init_waitqueue_head(&channel_wqs[i].lx_queue); init_waitqueue_head(&channel_wqs[i].lx_queue);
channel_wqs[i].in_open = 0; channel_wqs[i].in_open = 0;
dev = device_create(mt_class, NULL, MKDEV(major, i),
"%s%d", module_name, i);
if (IS_ERR(dev)) {
err = PTR_ERR(dev);
goto out_chrdev;
}
} }
/* set up notifiers */ /* set up notifiers */
...@@ -525,10 +535,21 @@ static int rtlx_module_init(void) ...@@ -525,10 +535,21 @@ static int rtlx_module_init(void)
setup_irq(rtlx_irq_num, &rtlx_irq); setup_irq(rtlx_irq_num, &rtlx_irq);
return 0; return 0;
out_chrdev:
for (i = 0; i < RTLX_CHANNELS; i++)
device_destroy(mt_class, MKDEV(major, i));
return err;
} }
static void __exit rtlx_module_exit(void) static void __exit rtlx_module_exit(void)
{ {
int i;
for (i = 0; i < RTLX_CHANNELS; i++)
device_destroy(mt_class, MKDEV(major, i));
unregister_chrdev(major, module_name); unregister_chrdev(major, module_name);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment