Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / media / video / tvmixer.c
index 48b2f82..9e86cae 100644 (file)
@@ -1,4 +1,8 @@
+/*
+ */
+
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/string.h>
@@ -20,7 +24,7 @@
 #define DEV_MAX  4
 
 static int devnr = -1;
-MODULE_PARM(devnr,"i");
+module_param(devnr, int, 0644);
 
 MODULE_AUTHOR("Gerd Knorr");
 MODULE_LICENSE("GPL");
@@ -75,33 +79,33 @@ static int tvmixer_ioctl(struct inode *inode, struct file *file, unsigned int cm
 {
        struct video_audio va;
        int left,right,ret,val = 0;
-        struct TVMIXER *mix = file->private_data;
+       struct TVMIXER *mix = file->private_data;
        struct i2c_client *client = mix->dev;
        void __user *argp = (void __user *)arg;
        int __user *p = argp;
 
        if (NULL == client)
                return -ENODEV;
-       
-        if (cmd == SOUND_MIXER_INFO) {
-                mixer_info info;
-                strlcpy(info.id, "tv card", sizeof(info.id));
-                strlcpy(info.name, i2c_clientname(client), sizeof(info.name));
-                info.modify_counter = 42 /* FIXME */;
-                if (copy_to_user(argp, &info, sizeof(info)))
-                        return -EFAULT;
-                return 0;
-        }
-        if (cmd == SOUND_OLD_MIXER_INFO) {
-                _old_mixer_info info;
-                strlcpy(info.id, "tv card", sizeof(info.id));
-                strlcpy(info.name, i2c_clientname(client), sizeof(info.name));
-                if (copy_to_user(argp, &info, sizeof(info)))
-                        return -EFAULT;
-                return 0;
-        }
-        if (cmd == OSS_GETVERSION)
-                return put_user(SOUND_VERSION, p);
+
+       if (cmd == SOUND_MIXER_INFO) {
+               mixer_info info;
+               strlcpy(info.id, "tv card", sizeof(info.id));
+               strlcpy(info.name, client->name, sizeof(info.name));
+               info.modify_counter = 42 /* FIXME */;
+               if (copy_to_user(argp, &info, sizeof(info)))
+                       return -EFAULT;
+               return 0;
+       }
+       if (cmd == SOUND_OLD_MIXER_INFO) {
+               _old_mixer_info info;
+               strlcpy(info.id, "tv card", sizeof(info.id));
+               strlcpy(info.name, client->name, sizeof(info.name));
+               if (copy_to_user(argp, &info, sizeof(info)))
+                       return -EFAULT;
+               return 0;
+       }
+       if (cmd == OSS_GETVERSION)
+               return put_user(SOUND_VERSION, p);
 
        if (_SIOC_DIR(cmd) & _SIOC_WRITE)
                if (get_user(val, p))
@@ -148,7 +152,7 @@ static int tvmixer_ioctl(struct inode *inode, struct file *file, unsigned int cm
                         va.volume) / 32768;
                ret = v4l_to_mix2(left,right);
                break;
-               
+
        case MIXER_WRITE(SOUND_MIXER_BASS):
                va.bass = mix_to_v4l(val);
                client->driver->command(client,VIDIOCSAUDIO,&va);
@@ -177,8 +181,8 @@ static int tvmixer_ioctl(struct inode *inode, struct file *file, unsigned int cm
 
 static int tvmixer_open(struct inode *inode, struct file *file)
 {
-        int i, minor = iminor(inode);
-        struct TVMIXER *mix = NULL;
+       int i, minor = iminor(inode);
+       struct TVMIXER *mix = NULL;
        struct i2c_client *client = NULL;
 
        for (i = 0; i < DEV_MAX; i++) {
@@ -200,7 +204,7 @@ static int tvmixer_open(struct inode *inode, struct file *file)
 #endif
        if (client->adapter->owner)
                try_module_get(client->adapter->owner);
-        return 0;
+       return 0;
 }
 
 static int tvmixer_release(struct inode *inode, struct file *file)
@@ -223,19 +227,13 @@ static int tvmixer_release(struct inode *inode, struct file *file)
 }
 
 static struct i2c_driver driver = {
-#ifdef I2C_PEC
-       .owner           = THIS_MODULE,
-#endif
-       .name            = "tv card mixer driver",
-        .id              = I2C_DRIVERID_TVMIXER,
-#ifdef I2C_DF_DUMMY
-       .flags           = I2C_DF_DUMMY,
-#else
-       .flags           = I2C_DF_NOTIFY,
-        .detach_adapter  = tvmixer_adapters,
-#endif
-        .attach_adapter  = tvmixer_adapters,
-        .detach_client   = tvmixer_clients,
+       .driver = {
+               .name    = "tvmixer",
+       },
+       .id              = I2C_DRIVERID_TVMIXER,
+       .detach_adapter  = tvmixer_adapters,
+       .attach_adapter  = tvmixer_adapters,
+       .detach_client   = tvmixer_clients,
 };
 
 static struct file_operations tvmixer_fops = {
@@ -265,22 +263,8 @@ static int tvmixer_clients(struct i2c_client *client)
        struct video_audio va;
        int i,minor;
 
-#ifdef I2C_CLASS_TV_ANALOG
        if (!(client->adapter->class & I2C_CLASS_TV_ANALOG))
                return -1;
-#else
-       /* TV card ??? */
-       switch (client->adapter->id) {
-       case I2C_ALGO_BIT | I2C_HW_SMBUS_VOODOO3:
-       case I2C_ALGO_BIT | I2C_HW_B_BT848:
-       case I2C_ALGO_BIT | I2C_HW_B_RIVA:
-               /* ok, have a look ... */
-               break;
-       default:
-               /* ignore that one */
-               return -1;
-       }
-#endif
 
        /* unregister ?? */
        for (i = 0; i < DEV_MAX; i++) {
@@ -290,7 +274,7 @@ static int tvmixer_clients(struct i2c_client *client)
                        devices[i].dev = NULL;
                        devices[i].minor = -1;
                        printk("tvmixer: %s unregistered (#1)\n",
-                              i2c_clientname(client));
+                              client->name);
                        return 0;
                }
        }
@@ -324,32 +308,32 @@ static int tvmixer_clients(struct i2c_client *client)
        devices[i].dev   = client;
        printk("tvmixer: %s (%s) registered with minor %d\n",
               client->name,client->adapter->name,minor);
-       
+
        return 0;
 }
 
 /* ----------------------------------------------------------------------- */
 
-static int tvmixer_init_module(void)
+static int __init tvmixer_init_module(void)
 {
        int i;
-       
+
        for (i = 0; i < DEV_MAX; i++)
                devices[i].minor = -1;
-       i2c_add_driver(&driver);
-       return 0;
+
+       return i2c_add_driver(&driver);
 }
 
-static void tvmixer_cleanup_module(void)
+static void __exit tvmixer_cleanup_module(void)
 {
        int i;
-       
+
        i2c_del_driver(&driver);
        for (i = 0; i < DEV_MAX; i++) {
                if (devices[i].minor != -1) {
                        unregister_sound_mixer(devices[i].minor);
                        printk("tvmixer: %s unregistered (#2)\n",
-                              i2c_clientname(devices[i].dev));
+                              devices[i].dev->name);
                }
        }
 }