X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fscx200_gpio.c;h=70b5e94b5df942c09d91eaba7bca95a5d7c4fe22;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=3758fb1b11717e0940380fb378531eee66180429;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/char/scx200_gpio.c b/drivers/char/scx200_gpio.c index 3758fb1b1..70b5e94b5 100644 --- a/drivers/char/scx200_gpio.c +++ b/drivers/char/scx200_gpio.c @@ -26,15 +26,12 @@ static int major = 0; /* default to dynamic major */ MODULE_PARM(major, "i"); MODULE_PARM_DESC(major, "Major device number"); -static ssize_t scx200_gpio_write(struct file *file, const char *data, +static ssize_t scx200_gpio_write(struct file *file, const char __user *data, size_t len, loff_t *ppos) { unsigned m = iminor(file->f_dentry->d_inode); size_t i; - if (ppos != &file->f_pos) - return -ESPIPE; - for (i = 0; i < len; ++i) { char c; if (get_user(c, data+i)) @@ -77,15 +74,12 @@ static ssize_t scx200_gpio_write(struct file *file, const char *data, return len; } -static ssize_t scx200_gpio_read(struct file *file, char *buf, +static ssize_t scx200_gpio_read(struct file *file, char __user *buf, size_t len, loff_t *ppos) { unsigned m = iminor(file->f_dentry->d_inode); int value; - if (ppos != &file->f_pos) - return -ESPIPE; - value = scx200_gpio_get(m); if (put_user(value ? '1' : '0', buf)) return -EFAULT; @@ -98,7 +92,7 @@ static int scx200_gpio_open(struct inode *inode, struct file *file) unsigned m = iminor(inode); if (m > 63) return -EINVAL; - return 0; + return nonseekable_open(inode, file); } static int scx200_gpio_release(struct inode *inode, struct file *file)