patch-2.4.0-test5 linux/drivers/char/msp3400.c
Next file: linux/drivers/char/random.c
Previous file: linux/drivers/char/misc.c
Back to the patch index
Back to the overall index
- Lines: 257
- Date:
Tue Jul 18 22:35:33 2000
- Orig file:
v2.4.0-test4/linux/drivers/char/msp3400.c
- Orig date:
Fri Jul 14 12:12:09 2000
diff -u --recursive --new-file v2.4.0-test4/linux/drivers/char/msp3400.c linux/drivers/char/msp3400.c
@@ -58,11 +58,6 @@
#include "audiochip.h"
-/* sound mixer stuff */
-#if 0 /* defined(CONFIG_SOUND) || defined(CONFIG_SOUND_MODULE) */
-# define REGISTER_MIXER 1
-#endif
-
/* Addresses to scan */
static unsigned short normal_i2c[] = {I2C_CLIENT_END};
static unsigned short normal_i2c_range[] = {0x40,0x40,I2C_CLIENT_END};
@@ -85,9 +80,6 @@
the autoscan seems work well only with FM... */
static int simple = -1; /* use short programming (>= msp3410 only) */
static int dolby = 0;
-#ifdef REGISTER_MIXER
-static int mixer = -1;
-#endif
struct msp3400c {
int simple;
@@ -110,10 +102,6 @@
int watch_stereo;
struct timer_list wake_stereo;
-
- /* mixer */
- int mixer_modcnt;
- int mixer_num;
};
#define MSP3400_MAX 4
@@ -130,7 +118,6 @@
MODULE_PARM(simple,"i");
MODULE_PARM(amsound,"i");
MODULE_PARM(dolby,"i");
-MODULE_PARM(mixer,"i");
/* ---------------------------------------------------------------------- */
@@ -680,10 +667,7 @@
lock_kernel();
#endif
- exit_mm(current);
- exit_fs(current);
- current->session = 1;
- current->pgrp = 1;
+ daemonize();
sigfillset(¤t->blocked);
strcpy(current->comm,"msp3400");
@@ -932,10 +916,7 @@
lock_kernel();
#endif
- exit_mm(current);
- exit_fs(current);
- current->session = 1;
- current->pgrp = 1;
+ daemonize();
sigfillset(¤t->blocked);
strcpy(current->comm,"msp3410 [auto]");
@@ -1102,191 +1083,6 @@
up(msp->notify);
return 0;
}
-
-/* ----------------------------------------------------------------------- */
-/* mixer stuff -- with the modular sound driver in 2.1.x we can easily */
-/* register the msp3400 as mixer device */
-
-#ifdef REGISTER_MIXER
-
-#include <linux/sound.h>
-#include <linux/soundcard.h>
-#include <asm/uaccess.h>
-
-static int mix_to_v4l(int i)
-{
- int r;
-
- r = ((i & 0xff) * 65536 + 50) / 100;
- if (r > 65535) r = 65535;
- if (r < 0) r = 0;
- return r;
-}
-
-static int v4l_to_mix(int i)
-{
- int r;
-
- r = (i * 100 + 32768) / 65536;
- if (r > 100) r = 100;
- if (r < 0) r = 0;
- return r | (r << 8);
-}
-
-static int v4l_to_mix2(int l, int r)
-{
- r = (r * 100 + 32768) / 65536;
- if (r > 100) r = 100;
- if (r < 0) r = 0;
- l = (l * 100 + 32768) / 65536;
- if (l > 100) l = 100;
- if (l < 0) l = 0;
- return (r << 8) | l;
-}
-
-static int
-msp3400c_mixer_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
-{
- struct i2c_client *client;
- struct msp3400c *msp;
- int ret,val = 0;
-
- client = file->private_data;
- if (!client)
- return -ENODEV;
- msp = client->data;
- if (!msp)
- return -ENODEV;
-
- if (cmd == SOUND_MIXER_INFO) {
- mixer_info info;
- strncpy(info.id, "MSP3400", sizeof(info.id));
- strncpy(info.name, "MSP 3400", sizeof(info.name));
- info.modify_counter = msp->mixer_modcnt;
- if (copy_to_user((void *)arg, &info, sizeof(info)))
- return -EFAULT;
- return 0;
- }
- if (cmd == SOUND_OLD_MIXER_INFO) {
- _old_mixer_info info;
- strncpy(info.id, "MSP3400", sizeof(info.id));
- strncpy(info.name, "MSP 3400", sizeof(info.name));
- if (copy_to_user((void *)arg, &info, sizeof(info)))
- return -EFAULT;
- return 0;
- }
- if (cmd == OSS_GETVERSION)
- return put_user(SOUND_VERSION, (int *)arg);
-
- if (_SIOC_DIR(cmd) & _SIOC_WRITE)
- if (get_user(val, (int *)arg))
- return -EFAULT;
-
- switch (cmd) {
- case MIXER_READ(SOUND_MIXER_RECMASK):
- case MIXER_READ(SOUND_MIXER_CAPS):
- case MIXER_READ(SOUND_MIXER_RECSRC):
- case MIXER_WRITE(SOUND_MIXER_RECSRC):
- ret = 0;
- break;
-
- case MIXER_READ(SOUND_MIXER_STEREODEVS):
- ret = SOUND_MASK_VOLUME;
- break;
- case MIXER_READ(SOUND_MIXER_DEVMASK):
- ret = SOUND_MASK_VOLUME | SOUND_MASK_BASS | SOUND_MASK_TREBLE;
- break;
-
- case MIXER_WRITE(SOUND_MIXER_VOLUME):
- msp->left = mix_to_v4l(val);
- msp->right = mix_to_v4l(val >> 8);
- msp3400c_setvolume(client,msp->left,msp->right);
- msp->mixer_modcnt++;
- /* fall */
- case MIXER_READ(SOUND_MIXER_VOLUME):
- ret = v4l_to_mix2(msp->left, msp->right);
- break;
-
- case MIXER_WRITE(SOUND_MIXER_BASS):
- msp->bass = mix_to_v4l(val);
- msp3400c_setbass(client,msp->bass);
- msp->mixer_modcnt++;
- /* fall */
- case MIXER_READ(SOUND_MIXER_BASS):
- ret = v4l_to_mix(msp->bass);
- break;
-
- case MIXER_WRITE(SOUND_MIXER_TREBLE):
- msp->treble = mix_to_v4l(val);
- msp3400c_settreble(client,msp->treble);
- msp->mixer_modcnt++;
- /* fall */
- case MIXER_READ(SOUND_MIXER_TREBLE):
- ret = v4l_to_mix(msp->treble);
- break;
-
- default:
- return -EINVAL;
- }
- if (put_user(ret, (int *)arg))
- return -EFAULT;
- return 0;
-}
-
-static int
-msp3400c_mixer_open(struct inode *inode, struct file *file)
-{
- int minor = MINOR(inode->i_rdev);
- struct i2c_client *client;
- struct msp3400c *msp;
- int i;
-
- /* search for the right one... */
- for (i = 0; i < MSP3400_MAX; i++) {
- msp = msps[i]->data;
- if (msp->mixer_num == minor) {
- client = msps[i];
- file->private_data = client;
- break;
- }
- }
- if (MSP3400_MAX == i)
- return -ENODEV;
-
- /* lock bttv in memory while the mixer is in use */
- if (client->adapter->inc_use)
- client->adapter->inc_use(client->adapter);
-
- return 0;
-}
-
-static int
-msp3400c_mixer_release(struct inode *inode, struct file *file)
-{
- struct i2c_client *client = file->private_data;
-
- lock_kernel();
- if (client->adapter->dec_use)
- client->adapter->dec_use(client->adapter);
- unlock_kernel();
- return 0;
-}
-
-static loff_t
-msp3400c_mixer_llseek(struct file *file, loff_t offset, int origin)
-{
- return -ESPIPE;
-}
-
-static struct file_operations msp3400c_mixer_fops = {
- owner: THIS_MODULE,
- llseek: msp3400c_mixer_llseek,
- ioctl: msp3400c_mixer_ioctl,
- open: msp3400c_mixer_open,
- release: msp3400c_mixer_release,
-};
-
-#endif
/* ----------------------------------------------------------------------- */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)