git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
drivers
/
telephony
/
phonedev.c
diff --git
a/drivers/telephony/phonedev.c
b/drivers/telephony/phonedev.c
index
e41f49a
..
3c987f4
100644
(file)
--- a/
drivers/telephony/phonedev.c
+++ b/
drivers/telephony/phonedev.c
@@
-28,7
+28,7
@@
#include <linux/kmod.h>
#include <linux/sem.h>
#include <linux/kmod.h>
#include <linux/sem.h>
-#include <linux/
mutex
.h>
+#include <linux/
devfs_fs_kernel
.h>
#define PHONE_NUM_DEVICES 256
#define PHONE_NUM_DEVICES 256
@@
-37,7
+37,7
@@
*/
static struct phone_device *phone_device[PHONE_NUM_DEVICES];
*/
static struct phone_device *phone_device[PHONE_NUM_DEVICES];
-static DE
FIN
E_MUTEX(phone_lock);
+static DE
CLAR
E_MUTEX(phone_lock);
/*
* Open a phone device.
/*
* Open a phone device.
@@
-48,19
+48,19
@@
static int phone_open(struct inode *inode, struct file *file)
unsigned int minor = iminor(inode);
int err = 0;
struct phone_device *p;
unsigned int minor = iminor(inode);
int err = 0;
struct phone_device *p;
-
const
struct file_operations *old_fops, *new_fops = NULL;
+ struct file_operations *old_fops, *new_fops = NULL;
if (minor >= PHONE_NUM_DEVICES)
return -ENODEV;
if (minor >= PHONE_NUM_DEVICES)
return -ENODEV;
-
mutex_lock
(&phone_lock);
+
down
(&phone_lock);
p = phone_device[minor];
if (p)
new_fops = fops_get(p->f_op);
if (!new_fops) {
p = phone_device[minor];
if (p)
new_fops = fops_get(p->f_op);
if (!new_fops) {
-
mutex_unlock
(&phone_lock);
+
up
(&phone_lock);
request_module("char-major-%d-%d", PHONE_MAJOR, minor);
request_module("char-major-%d-%d", PHONE_MAJOR, minor);
-
mutex_lock
(&phone_lock);
+
down
(&phone_lock);
p = phone_device[minor];
if (p == NULL || (new_fops = fops_get(p->f_op)) == NULL)
{
p = phone_device[minor];
if (p == NULL || (new_fops = fops_get(p->f_op)) == NULL)
{
@@
-78,7
+78,7
@@
static int phone_open(struct inode *inode, struct file *file)
}
fops_put(old_fops);
end:
}
fops_put(old_fops);
end:
-
mutex_unlock
(&phone_lock);
+
up
(&phone_lock);
return err;
}
return err;
}
@@
-100,16
+100,18
@@
int phone_register_device(struct phone_device *p, int unit)
end = unit + 1; /* enter the loop at least one time */
}
end = unit + 1; /* enter the loop at least one time */
}
-
mutex_lock
(&phone_lock);
+
down
(&phone_lock);
for (i = base; i < end; i++) {
if (phone_device[i] == NULL) {
phone_device[i] = p;
p->minor = i;
for (i = base; i < end; i++) {
if (phone_device[i] == NULL) {
phone_device[i] = p;
p->minor = i;
- mutex_unlock(&phone_lock);
+ devfs_mk_cdev(MKDEV(PHONE_MAJOR,i),
+ S_IFCHR|S_IRUSR|S_IWUSR, "phone/%d", i);
+ up(&phone_lock);
return 0;
}
}
return 0;
}
}
-
mutex_unlock
(&phone_lock);
+
up
(&phone_lock);
return -ENFILE;
}
return -ENFILE;
}
@@
-119,11
+121,12
@@
int phone_register_device(struct phone_device *p, int unit)
void phone_unregister_device(struct phone_device *pfd)
{
void phone_unregister_device(struct phone_device *pfd)
{
-
mutex_lock
(&phone_lock);
+
down
(&phone_lock);
if (phone_device[pfd->minor] != pfd)
panic("phone: bad unregister");
if (phone_device[pfd->minor] != pfd)
panic("phone: bad unregister");
+ devfs_remove("phone/%d", pfd->minor);
phone_device[pfd->minor] = NULL;
phone_device[pfd->minor] = NULL;
-
mutex_unlock
(&phone_lock);
+
up
(&phone_lock);
}
}