summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/msp3400-driver.c
diff options
context:
space:
mode:
authorGerd Knorr <devnull@localhost>2004-05-07 09:00:34 +0000
committerGerd Knorr <devnull@localhost>2004-05-07 09:00:34 +0000
commit133924f0d0b13244d42187e76661f07965383078 (patch)
tree83bc0047f919eaf03a86fc435beac8eea4cb1648 /linux/drivers/media/video/msp3400-driver.c
parentf42bc240e3f18da6d9814d1673ab8c3302666b08 (diff)
downloadmediapointer-dvb-s2-133924f0d0b13244d42187e76661f07965383078.tar.gz
mediapointer-dvb-s2-133924f0d0b13244d42187e76661f07965383078.tar.bz2
- fix and enable single field capture in cx88.
- mt2050 antenna selection, based on patch by Matthias Reichl. - msp3400 cleanups by Perry Gilfillan.
Diffstat (limited to 'linux/drivers/media/video/msp3400-driver.c')
-rw-r--r--linux/drivers/media/video/msp3400-driver.c61
1 files changed, 28 insertions, 33 deletions
diff --git a/linux/drivers/media/video/msp3400-driver.c b/linux/drivers/media/video/msp3400-driver.c
index f7db546d2..fc02f588c 100644
--- a/linux/drivers/media/video/msp3400-driver.c
+++ b/linux/drivers/media/video/msp3400-driver.c
@@ -85,7 +85,7 @@ struct msp3400c {
int input;
int muted;
- int left, right; /* volume */
+ int volume, balance;
int bass, treble;
/* shadow register set */
@@ -383,26 +383,24 @@ static void msp3400c_setcarrier(struct i2c_client *client, int cdo1, int cdo2)
}
static void msp3400c_setvolume(struct i2c_client *client,
- int muted, int left, int right)
+ int muted, int volume, int balance)
{
- int vol = 0,val = 0,balance = 0;
+ int val = 0, bal = 0;
if (!muted) {
- vol = (left > right) ? left : right;
- val = (vol * 0x73 / 65535) << 8;
+ val = (volume * 0x73 / 65535) << 8;
}
- if (vol > 0) {
- balance = ((right-left) * 127) / vol;
+ if (val) {
+ bal = (balance / 256) - 128;
}
-
dprintk(KERN_DEBUG
"msp34xx: setvolume: mute=%s %d:%d v=0x%02x b=0x%02x\n",
- muted ? "on" : "off", left, right, val>>8, balance);
+ muted ? "on" : "off", volume, balance, val>>8, bal);
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0000, val); /* loudspeaker */
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0006, val); /* headphones */
/* scart - on/off only */
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0007, val ? 0x4000 : 0);
- msp3400c_write(client,I2C_MSP3400C_DFP, 0x0001, balance << 8);
+ msp3400c_write(client,I2C_MSP3400C_DFP, 0x0001, bal << 8);
}
static void msp3400c_setbass(struct i2c_client *client, int bass)
@@ -828,7 +826,7 @@ static int msp3400c_thread(void *data)
/* no carrier scan, just unmute */
printk("msp3400: thread: no carrier scan\n");
msp3400c_setvolume(client, msp->muted,
- msp->left, msp->right);
+ msp->volume, msp->balance);
continue;
}
msp->restart = 0;
@@ -973,7 +971,8 @@ static int msp3400c_thread(void *data)
}
/* unmute + restore dfp registers */
- msp3400c_setvolume(client, msp->muted, msp->left, msp->right);
+ msp3400c_setvolume(client, msp->muted,
+ msp->volume, msp->balance);
msp3400c_restore_dfp(client);
if (msp->watch_stereo)
@@ -1063,7 +1062,7 @@ static int msp3410d_thread(void *data)
/* no carrier scan needed, just unmute */
dprintk(KERN_DEBUG "msp3410: thread: no carrier scan\n");
msp3400c_setvolume(client, msp->muted,
- msp->left, msp->right);
+ msp->volume, msp->balance);
continue;
}
msp->restart = 0;
@@ -1215,7 +1214,8 @@ static int msp3410d_thread(void *data)
/* unmute + restore dfp registers */
msp3400c_setbass(client, msp->bass);
msp3400c_settreble(client, msp->treble);
- msp3400c_setvolume(client, msp->muted, msp->left, msp->right);
+ msp3400c_setvolume(client, msp->muted,
+ msp->volume, msp->balance);
msp3400c_restore_dfp(client);
if (msp->watch_stereo)
@@ -1290,8 +1290,8 @@ static int msp_attach(struct i2c_adapter *adap, int addr,
}
memset(msp,0,sizeof(struct msp3400c));
- msp->left = 65535;
- msp->right = 65535;
+ msp->volume = 65535;
+ msp->balance = 32768;
msp->bass = 32768;
msp->treble = 32768;
msp->input = -1;
@@ -1323,7 +1323,7 @@ static int msp_attach(struct i2c_adapter *adap, int addr,
/* this will turn on a 1kHz beep - might be useful for debugging... */
msp3400c_write(c,I2C_MSP3400C_DFP, 0x0014, 0x1040);
#endif
- msp3400c_setvolume(c,msp->muted,msp->left,msp->right);
+ msp3400c_setvolume(c, msp->muted, msp->volume, msp->balance);
snprintf(c->name, sizeof(c->name), "MSP34%02d%c-%c%d",
(msp->rev2>>8)&0xff, (msp->rev1&0xff)+'@',
@@ -1479,8 +1479,10 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
} else {
/* set msp3400 to FM radio mode */
msp3400c_setmode(client,MSP_MODE_FM_RADIO);
- msp3400c_setcarrier(client, MSP_CARRIER(10.7),MSP_CARRIER(10.7));
- msp3400c_setvolume(client,msp->muted,msp->left,msp->right);
+ msp3400c_setcarrier(client, MSP_CARRIER(10.7),
+ MSP_CARRIER(10.7));
+ msp3400c_setvolume(client, msp->muted,
+ msp->volume, msp->balance);
}
if (msp->active)
msp->restart = 1;
@@ -1527,16 +1529,9 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
VIDEO_AUDIO_MUTABLE;
if (msp->muted)
va->flags |= VIDEO_AUDIO_MUTE;
- va->volume=max(msp->left,msp->right);
- if (0 == va->volume) {
- va->balance = 32768;
- } else {
- va->balance = (32768 * min(msp->left,msp->right))
- / va->volume;
- va->balance = (msp->left<msp->right) ?
- (65535 - va->balance) : va->balance;
- }
+ va->volume = msp->volume;
+ va->balance = (va->volume) ? msp->balance : 32768;
va->bass = msp->bass;
va->treble = msp->treble;
@@ -1552,13 +1547,13 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
dprintk(KERN_DEBUG "msp34xx: VIDIOCSAUDIO\n");
msp->muted = (va->flags & VIDEO_AUDIO_MUTE);
- msp->left = (min(65536 - va->balance,32768) *
- va->volume) / 32768;
- msp->right = (min(va->balance,(__u16)32768) *
- va->volume) / 32768;
+ msp->volume = va->volume;
+ msp->balance = va->balance;
msp->bass = va->bass;
msp->treble = va->treble;
- msp3400c_setvolume(client,msp->muted,msp->left,msp->right);
+
+ msp3400c_setvolume(client, msp->muted,
+ msp->volume, msp->balance);
msp3400c_setbass(client,msp->bass);
msp3400c_settreble(client,msp->treble);