[PATCH] I8K: convert to seqfile
Dmitry Torokhov [Sat, 25 Jun 2005 21:54:26 +0000 (14:54 -0700)]
I8K: Change proc code to use seq_file.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

drivers/char/i8k.c

index 81d2f67..1599456 100644 (file)
 #include <linux/types.h>
 #include <linux/init.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <linux/dmi.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
 #include <linux/i8k.h>
 
-#define I8K_VERSION            "1.13 14/05/2002"
+#define I8K_VERSION            "1.14 21/02/2005"
 
 #define I8K_SMM_FN_STATUS      0x0025
 #define I8K_SMM_POWER_STATUS   0x0069
@@ -74,13 +75,16 @@ static int power_status;
 module_param(power_status, bool, 0600);
 MODULE_PARM_DESC(power_status, "Report power status in /proc/i8k");
 
-static ssize_t i8k_read(struct file *, char __user *, size_t, loff_t *);
+static int i8k_open_fs(struct inode *inode, struct file *file);
 static int i8k_ioctl(struct inode *, struct file *, unsigned int,
                     unsigned long);
 
 static struct file_operations i8k_fops = {
-       .read = i8k_read,
-       .ioctl = i8k_ioctl,
+       .open           = i8k_open_fs,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+       .ioctl          = i8k_ioctl,
 };
 
 typedef struct {
@@ -400,9 +404,9 @@ static int i8k_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
 /*
  * Print the information for /proc/i8k.
  */
-static int i8k_get_info(char *buffer, char **start, off_t fpos, int length)
+static int i8k_proc_show(struct seq_file *seq, void *offset)
 {
-       int n, fn_key, cpu_temp, ac_power;
+       int fn_key, cpu_temp, ac_power;
        int left_fan, right_fan, left_speed, right_speed;
 
        cpu_temp        = i8k_get_cpu_temp();                   /* 11100 ┬Ás */
@@ -431,42 +435,18 @@ static int i8k_get_info(char *buffer, char **start, off_t fpos, int length)
         * 9)  AC power
         * 10) Fn Key status
         */
-       n = sprintf(buffer, "%s %s %s %d %d %d %d %d %d %d\n",
-                   I8K_PROC_FMT,
-                   bios_version,
-                   dmi_get_system_info(DMI_PRODUCT_SERIAL) ? : "N/A",
-                   cpu_temp,
-                   left_fan, right_fan, left_speed, right_speed,
-                   ac_power, fn_key);
-
-       return n;
+       return seq_printf(seq, "%s %s %s %d %d %d %d %d %d %d\n",
+                         I8K_PROC_FMT,
+                         bios_version,
+                         dmi_get_system_info(DMI_PRODUCT_SERIAL) ? : "N/A",
+                         cpu_temp,
+                         left_fan, right_fan, left_speed, right_speed,
+                         ac_power, fn_key);
 }
 
-static ssize_t i8k_read(struct file *f, char __user * buffer, size_t len,
-                       loff_t * fpos)
+static int i8k_open_fs(struct inode *inode, struct file *file)
 {
-       int n;
-       char info[128];
-
-       n = i8k_get_info(info, NULL, 0, 128);
-       if (n <= 0) {
-               return n;
-       }
-
-       if (*fpos >= n) {
-               return 0;
-       }
-
-       if ((*fpos + len) >= n) {
-               len = n - *fpos;
-       }
-
-       if (copy_to_user(buffer, info, len) != 0) {
-               return -EFAULT;
-       }
-
-       *fpos += len;
-       return len;
+       return single_open(file, i8k_proc_show, NULL);
 }
 
 static struct dmi_system_id __initdata i8k_dmi_table[] = {
@@ -560,10 +540,10 @@ int __init i8k_init(void)
                return -ENODEV;
 
        /* Register the proc entry */
-       proc_i8k = create_proc_info_entry("i8k", 0, NULL, i8k_get_info);
-       if (!proc_i8k) {
+       proc_i8k = create_proc_entry("i8k", 0, NULL);
+       if (!proc_i8k)
                return -ENOENT;
-       }
+
        proc_i8k->proc_fops = &i8k_fops;
        proc_i8k->owner = THIS_MODULE;