[PATCH] v4l: msp3400 update
msp3400 update: Fix and enable "simpler" mode, some other minor fixes. Signed-off-by: Gerd Knorr <kraxel@bytesex.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
9990d744be
commit
faf8b24968
2 changed files with 19 additions and 11 deletions
|
@ -380,7 +380,9 @@ static void msp3400c_setvolume(struct i2c_client *client,
|
||||||
int val = 0, bal = 0;
|
int val = 0, bal = 0;
|
||||||
|
|
||||||
if (!muted) {
|
if (!muted) {
|
||||||
val = (volume * 0x7F / 65535) << 8;
|
/* 0x7f instead if 0x73 here has sound quality issues,
|
||||||
|
* probably due to overmodulation + clipping ... */
|
||||||
|
val = (volume * 0x73 / 65535) << 8;
|
||||||
}
|
}
|
||||||
if (val) {
|
if (val) {
|
||||||
bal = (balance / 256) - 128;
|
bal = (balance / 256) - 128;
|
||||||
|
@ -997,7 +999,13 @@ static int msp34xx_modus(int norm)
|
||||||
{
|
{
|
||||||
switch (norm) {
|
switch (norm) {
|
||||||
case VIDEO_MODE_PAL:
|
case VIDEO_MODE_PAL:
|
||||||
|
#if 1
|
||||||
|
/* experimental: not sure this works with all chip versions */
|
||||||
|
return 0x7003;
|
||||||
|
#else
|
||||||
|
/* previous value, try this if it breaks ... */
|
||||||
return 0x1003;
|
return 0x1003;
|
||||||
|
#endif
|
||||||
case VIDEO_MODE_NTSC: /* BTSC */
|
case VIDEO_MODE_NTSC: /* BTSC */
|
||||||
return 0x2003;
|
return 0x2003;
|
||||||
case VIDEO_MODE_SECAM:
|
case VIDEO_MODE_SECAM:
|
||||||
|
@ -1264,6 +1272,7 @@ static int msp34xxg_thread(void *data)
|
||||||
int val, std, i;
|
int val, std, i;
|
||||||
|
|
||||||
printk("msp34xxg: daemon started\n");
|
printk("msp34xxg: daemon started\n");
|
||||||
|
msp->source = 1; /* default */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
d2printk(KERN_DEBUG "msp34xxg: thread: sleep\n");
|
d2printk(KERN_DEBUG "msp34xxg: thread: sleep\n");
|
||||||
msp34xx_sleep(msp,-1);
|
msp34xx_sleep(msp,-1);
|
||||||
|
@ -1334,8 +1343,9 @@ static void msp34xxg_set_source(struct i2c_client *client, int source)
|
||||||
|
|
||||||
/* fix matrix mode to stereo and let the msp choose what
|
/* fix matrix mode to stereo and let the msp choose what
|
||||||
* to output according to 'source', as recommended
|
* to output according to 'source', as recommended
|
||||||
|
* for MONO (source==0) downmixing set bit[7:0] to 0x30
|
||||||
*/
|
*/
|
||||||
int value = (source&0x07)<<8|(source==0 ? 0x00:0x20);
|
int value = (source&0x07)<<8|(source==0 ? 0x30:0x20);
|
||||||
dprintk("msp34xxg: set source to %d (0x%x)\n", source, value);
|
dprintk("msp34xxg: set source to %d (0x%x)\n", source, value);
|
||||||
msp3400c_write(client,
|
msp3400c_write(client,
|
||||||
I2C_MSP3400C_DFP,
|
I2C_MSP3400C_DFP,
|
||||||
|
@ -1359,7 +1369,7 @@ static void msp34xxg_set_source(struct i2c_client *client, int source)
|
||||||
msp3400c_write(client,
|
msp3400c_write(client,
|
||||||
I2C_MSP3400C_DEM,
|
I2C_MSP3400C_DEM,
|
||||||
0x22, /* a2 threshold for stereo/bilingual */
|
0x22, /* a2 threshold for stereo/bilingual */
|
||||||
source==0 ? 0x7f0:stereo_threshold);
|
stereo_threshold);
|
||||||
msp->source=source;
|
msp->source=source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1394,7 +1404,7 @@ static void msp34xxg_detect_stereo(struct i2c_client *client)
|
||||||
static void msp34xxg_set_audmode(struct i2c_client *client, int audmode)
|
static void msp34xxg_set_audmode(struct i2c_client *client, int audmode)
|
||||||
{
|
{
|
||||||
struct msp3400c *msp = i2c_get_clientdata(client);
|
struct msp3400c *msp = i2c_get_clientdata(client);
|
||||||
int source = 0;
|
int source;
|
||||||
|
|
||||||
switch (audmode) {
|
switch (audmode) {
|
||||||
case V4L2_TUNER_MODE_MONO:
|
case V4L2_TUNER_MODE_MONO:
|
||||||
|
@ -1410,9 +1420,10 @@ static void msp34xxg_set_audmode(struct i2c_client *client, int audmode)
|
||||||
case V4L2_TUNER_MODE_LANG2:
|
case V4L2_TUNER_MODE_LANG2:
|
||||||
source=4; /* stereo or B */
|
source=4; /* stereo or B */
|
||||||
break;
|
break;
|
||||||
default: /* doing nothing: a safe, sane default */
|
default:
|
||||||
audmode = 0;
|
audmode = 0;
|
||||||
return;
|
source = 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
msp->audmode = audmode;
|
msp->audmode = audmode;
|
||||||
msp34xxg_set_source(client, source);
|
msp34xxg_set_source(client, source);
|
||||||
|
@ -1514,12 +1525,9 @@ static int msp_attach(struct i2c_adapter *adap, int addr, int kind)
|
||||||
|
|
||||||
msp->opmode = opmode;
|
msp->opmode = opmode;
|
||||||
if (OPMODE_AUTO == msp->opmode) {
|
if (OPMODE_AUTO == msp->opmode) {
|
||||||
#if 0 /* seems to work for ivtv only, disable by default for now ... */
|
|
||||||
if (HAVE_SIMPLER(msp))
|
if (HAVE_SIMPLER(msp))
|
||||||
msp->opmode = OPMODE_SIMPLER;
|
msp->opmode = OPMODE_SIMPLER;
|
||||||
else
|
else if (HAVE_SIMPLE(msp))
|
||||||
#endif
|
|
||||||
if (HAVE_SIMPLE(msp))
|
|
||||||
msp->opmode = OPMODE_SIMPLE;
|
msp->opmode = OPMODE_SIMPLE;
|
||||||
else
|
else
|
||||||
msp->opmode = OPMODE_MANUAL;
|
msp->opmode = OPMODE_MANUAL;
|
||||||
|
|
|
@ -991,7 +991,7 @@ static int tda9874a_initialize(struct CHIPSTATE *chip)
|
||||||
{
|
{
|
||||||
if (tda9874a_SIF > 2)
|
if (tda9874a_SIF > 2)
|
||||||
tda9874a_SIF = 1;
|
tda9874a_SIF = 1;
|
||||||
if (tda9874a_STD >= 8)
|
if (tda9874a_STD > 8)
|
||||||
tda9874a_STD = 0;
|
tda9874a_STD = 0;
|
||||||
if(tda9874a_AMSEL > 1)
|
if(tda9874a_AMSEL > 1)
|
||||||
tda9874a_AMSEL = 0;
|
tda9874a_AMSEL = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue