Blackfin: switch /proc/gpio to seq_file
authorAlexey Dobriyan <adobriyan@gmail.com>
Sat, 14 May 2011 16:48:46 +0000 (19:48 +0300)
committerMike Frysinger <vapier@gentoo.org>
Wed, 25 May 2011 12:24:12 +0000 (08:24 -0400)
->read_proc interface is going away, switch to seq_file.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/kernel/bfin_gpio.c

index f9306bb..bcf8cf6 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/module.h>
 #include <linux/err.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <asm/blackfin.h>
 #include <asm/gpio.h>
 #include <asm/portmux.h>
@@ -1204,35 +1205,43 @@ void bfin_reset_boot_spi_cs(unsigned short pin)
 }
 
 #if defined(CONFIG_PROC_FS)
-static int gpio_proc_read(char *buf, char **start, off_t offset,
-                         int len, int *unused_i, void *unused_v)
+static int gpio_proc_show(struct seq_file *m, void *v)
 {
-       int c, irq, gpio, outlen = 0;
+       int c, irq, gpio;
 
        for (c = 0; c < MAX_RESOURCES; c++) {
                irq = is_reserved(gpio_irq, c, 1);
                gpio = is_reserved(gpio, c, 1);
                if (!check_gpio(c) && (gpio || irq))
-                       len = sprintf(buf, "GPIO_%d: \t%s%s \t\tGPIO %s\n", c,
+                       seq_printf(m, "GPIO_%d: \t%s%s \t\tGPIO %s\n", c,
                                 get_label(c), (gpio && irq) ? " *" : "",
                                 get_gpio_dir(c) ? "OUTPUT" : "INPUT");
                else if (is_reserved(peri, c, 1))
-                       len = sprintf(buf, "GPIO_%d: \t%s \t\tPeripheral\n", c, get_label(c));
+                       seq_printf(m, "GPIO_%d: \t%s \t\tPeripheral\n", c, get_label(c));
                else
                        continue;
-               buf += len;
-               outlen += len;
        }
-       return outlen;
+
+       return 0;
 }
 
+static int gpio_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, gpio_proc_show, NULL);
+}
+
+static const struct file_operations gpio_proc_ops = {
+       .open           = gpio_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
 static __init int gpio_register_proc(void)
 {
        struct proc_dir_entry *proc_gpio;
 
-       proc_gpio = create_proc_entry("gpio", S_IRUGO, NULL);
-       if (proc_gpio)
-               proc_gpio->read_proc = gpio_proc_read;
+       proc_gpio = proc_create("gpio", S_IRUGO, NULL, &gpio_proc_ops);
        return proc_gpio != NULL;
 }
 __initcall(gpio_register_proc);