Commit faf8b249 authored by Gerd Knorr's avatar Gerd Knorr Committed by Linus Torvalds

[PATCH] v4l: msp3400 update

msp3400 update: Fix and enable "simpler" mode, some other minor fixes.
Signed-off-by: default avatarGerd Knorr <kraxel@bytesex.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9990d744
...@@ -380,7 +380,9 @@ static void msp3400c_setvolume(struct i2c_client *client, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment