patch-2.4.21 linux-2.4.21/drivers/media/video/msp3400.c
Next file: linux-2.4.21/drivers/media/video/pms.c
Previous file: linux-2.4.21/drivers/media/video/meye.h
Back to the patch index
Back to the overall index
- Lines: 620
- Date:
2003-06-13 07:51:34.000000000 -0700
- Orig file:
linux-2.4.20/drivers/media/video/msp3400.c
- Orig date:
2002-11-28 15:53:13.000000000 -0800
diff -urN linux-2.4.20/drivers/media/video/msp3400.c linux-2.4.21/drivers/media/video/msp3400.c
@@ -59,28 +59,13 @@
#include "audiochip.h"
#include "msp3400.h"
-/* Addresses to scan */
-static unsigned short normal_i2c[] = {I2C_CLIENT_END};
-static unsigned short normal_i2c_range[] = {0x40,0x40,I2C_CLIENT_END};
-static unsigned short probe[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
-static unsigned short probe_range[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
-static unsigned short ignore[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
-static unsigned short ignore_range[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
-static unsigned short force[2] = { I2C_CLIENT_END, I2C_CLIENT_END };
-static struct i2c_client_address_data addr_data = {
- normal_i2c, normal_i2c_range,
- probe, probe_range,
- ignore, ignore_range,
- force
-};
-
/* insmod parameters */
-static int debug = 0; /* debug output */
-static int once = 0; /* no continous stereo monitoring */
-static int amsound = 0; /* hard-wire AM sound at 6.5 Hz (france),
+static int debug = 0; /* debug output */
+static int once = 0; /* no continous stereo monitoring */
+static int amsound = 0; /* hard-wire AM sound at 6.5 Hz (france),
the autoscan seems work well only with FM... */
-static int simple = -1; /* use short programming (>= msp3410 only) */
-static int dolby = 0;
+static int simple = -1; /* use short programming (>= msp3410 only) */
+static int dolby = 0;
#define DFP_COUNT 0x41
static const int bl_dfp[] = {
@@ -89,8 +74,9 @@
};
struct msp3400c {
+ int rev1,rev2;
+
int simple;
- int nicam;
int mode;
int norm;
int stereo;
@@ -117,6 +103,10 @@
struct timer_list wake_stereo;
};
+#define HAVE_NICAM(msp) (((msp->rev2>>8) & 0xff) != 00)
+#define HAVE_SIMPLE(msp) ((msp->rev1 & 0xff)+'@' >= 'D')
+#define HAVE_RADIO(msp) ((msp->rev1 & 0xff)+'@' >= 'G')
+
#define MSP3400_MAX 4
static struct i2c_client *msps[MSP3400_MAX];
@@ -139,23 +129,50 @@
/* ---------------------------------------------------------------------- */
#define I2C_MSP3400C 0x80
+#define I2C_MSP3400C_ALT 0x88
+
#define I2C_MSP3400C_DEM 0x10
#define I2C_MSP3400C_DFP 0x12
+/* Addresses to scan */
+static unsigned short normal_i2c[] = {
+ I2C_MSP3400C >> 1,
+ I2C_MSP3400C_ALT >> 1,
+ I2C_CLIENT_END
+};
+static unsigned short normal_i2c_range[] = {I2C_CLIENT_END,I2C_CLIENT_END};
+I2C_CLIENT_INSMOD;
+
/* ----------------------------------------------------------------------- */
/* functions for talking to the MSP3400C Sound processor */
+#ifndef I2C_M_IGNORE_NAK
+# define I2C_M_IGNORE_NAK 0x1000
+#endif
+
static int msp3400c_reset(struct i2c_client *client)
{
- static char reset_off[3] = { 0x00, 0x80, 0x00 };
- static char reset_on[3] = { 0x00, 0x00, 0x00 };
-
- i2c_master_send(client,reset_off,3); /* XXX ignore errors here */
- if (3 != i2c_master_send(client,reset_on, 3)) {
- printk(KERN_ERR "msp3400: chip reset failed, penguin on i2c bus?\n");
- return -1;
- }
- return 0;
+ /* reset and read revision code */
+ static char reset_off[3] = { 0x00, 0x80, 0x00 };
+ static char reset_on[3] = { 0x00, 0x00, 0x00 };
+ static char write[3] = { I2C_MSP3400C_DFP + 1, 0x00, 0x1e };
+ char read[2];
+ struct i2c_msg reset[2] = {
+ { client->addr, I2C_M_IGNORE_NAK, 3, reset_off },
+ { client->addr, I2C_M_IGNORE_NAK, 3, reset_on },
+ };
+ struct i2c_msg test[2] = {
+ { client->addr, 0, 3, write },
+ { client->addr, I2C_M_RD, 2, read },
+ };
+
+ if ( (1 != i2c_transfer(client->adapter,&reset[0],1)) ||
+ (1 != i2c_transfer(client->adapter,&reset[1],1)) ||
+ (2 != i2c_transfer(client->adapter,test,2)) ) {
+ printk(KERN_ERR "msp3400: chip reset failed\n");
+ return -1;
+ }
+ return 0;
}
static int
@@ -348,7 +365,8 @@
if (-1 == scarts[out][in])
return;
- dprintk("msp34xx: scart switch: %s => %d\n",scart_names[in],out);
+ dprintk(KERN_DEBUG
+ "msp34xx: scart switch: %s => %d\n",scart_names[in],out);
msp->acb &= ~scarts[out][SCART_MASK];
msp->acb |= scarts[out][in];
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0013, msp->acb);
@@ -378,7 +396,8 @@
balance = ((right-left) * 127) / vol;
}
- dprintk("msp34xx: setvolume: mute=%s %d:%d v=0x%02x b=0x%02x\n",
+ dprintk(KERN_DEBUG
+ "msp34xx: setvolume: mute=%s %d:%d v=0x%02x b=0x%02x\n",
muted ? "on" : "off", left, right, val>>8, balance);
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0000, val); /* loudspeaker */
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0006, val); /* headphones */
@@ -391,7 +410,7 @@
{
int val = ((bass-32768) * 0x60 / 65535) << 8;
- dprintk("msp34xx: setbass: %d 0x%02x\n",bass, val>>8);
+ dprintk(KERN_DEBUG "msp34xx: setbass: %d 0x%02x\n",bass, val>>8);
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0002, val); /* loudspeaker */
}
@@ -399,7 +418,7 @@
{
int val = ((treble-32768) * 0x60 / 65535) << 8;
- dprintk("msp34xx: settreble: %d 0x%02x\n",treble, val>>8);
+ dprintk(KERN_DEBUG "msp34xx: settreble: %d 0x%02x\n",treble, val>>8);
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0003, val); /* loudspeaker */
}
@@ -408,7 +427,7 @@
struct msp3400c *msp = client->data;
int i;
- dprintk("msp3400: setmode: %d\n",type);
+ dprintk(KERN_DEBUG "msp3400: setmode: %d\n",type);
msp->mode = type;
msp->stereo = VIDEO_SOUND_MONO;
@@ -454,7 +473,7 @@
msp3400c_write(client,I2C_MSP3400C_DFP, 0x000e,
msp_init_data[type].dfp_matrix);
- if (msp->nicam) {
+ if (HAVE_NICAM(msp)) {
/* nicam prescale */
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0010, 0x5a00); /* was: 0x3000 */
}
@@ -472,7 +491,7 @@
/* switch demodulator */
switch (msp->mode) {
case MSP_MODE_FM_TERRA:
- dprintk("msp3400: FM setstereo: %s\n",strmode[mode]);
+ dprintk(KERN_DEBUG "msp3400: FM setstereo: %s\n",strmode[mode]);
msp3400c_setcarrier(client,msp->second,msp->main);
switch (mode) {
case VIDEO_SOUND_STEREO:
@@ -486,7 +505,7 @@
}
break;
case MSP_MODE_FM_SAT:
- dprintk("msp3400: SAT setstereo: %s\n",strmode[mode]);
+ dprintk(KERN_DEBUG "msp3400: SAT setstereo: %s\n",strmode[mode]);
switch (mode) {
case VIDEO_SOUND_MONO:
msp3400c_setcarrier(client, MSP_CARRIER(6.5), MSP_CARRIER(6.5));
@@ -505,24 +524,24 @@
case MSP_MODE_FM_NICAM1:
case MSP_MODE_FM_NICAM2:
case MSP_MODE_AM_NICAM:
- dprintk("msp3400: NICAM setstereo: %s\n",strmode[mode]);
+ dprintk(KERN_DEBUG "msp3400: NICAM setstereo: %s\n",strmode[mode]);
msp3400c_setcarrier(client,msp->second,msp->main);
if (msp->nicam_on)
nicam=0x0100;
break;
case MSP_MODE_BTSC:
- dprintk("msp3400: BTSC setstereo: %s\n",strmode[mode]);
+ dprintk(KERN_DEBUG "msp3400: BTSC setstereo: %s\n",strmode[mode]);
nicam=0x0300;
break;
case MSP_MODE_EXTERN:
- dprintk("msp3400: extern setstereo: %s\n",strmode[mode]);
+ dprintk(KERN_DEBUG "msp3400: extern setstereo: %s\n",strmode[mode]);
nicam = 0x0200;
break;
case MSP_MODE_FM_RADIO:
- dprintk("msp3400: FM-Radio setstereo: %s\n",strmode[mode]);
+ dprintk(KERN_DEBUG "msp3400: FM-Radio setstereo: %s\n",strmode[mode]);
break;
default:
- dprintk("msp3400: mono setstereo\n");
+ dprintk(KERN_DEBUG "msp3400: mono setstereo\n");
return;
}
@@ -551,7 +570,8 @@
src = 0x0010 | nicam;
break;
}
- dprintk("msp3400: setstereo final source/matrix = 0x%x\n", src);
+ dprintk(KERN_DEBUG
+ "msp3400: setstereo final source/matrix = 0x%x\n", src);
if (dolby) {
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0008,0x0520);
@@ -570,22 +590,22 @@
msp3400c_print_mode(struct msp3400c *msp)
{
if (msp->main == msp->second) {
- printk("msp3400: mono sound carrier: %d.%03d MHz\n",
+ printk(KERN_DEBUG "msp3400: mono sound carrier: %d.%03d MHz\n",
msp->main/910000,(msp->main/910)%1000);
} else {
- printk("msp3400: main sound carrier: %d.%03d MHz\n",
+ printk(KERN_DEBUG "msp3400: main sound carrier: %d.%03d MHz\n",
msp->main/910000,(msp->main/910)%1000);
}
if (msp->mode == MSP_MODE_FM_NICAM1 ||
msp->mode == MSP_MODE_FM_NICAM2)
- printk("msp3400: NICAM/FM carrier : %d.%03d MHz\n",
+ printk(KERN_DEBUG "msp3400: NICAM/FM carrier : %d.%03d MHz\n",
msp->second/910000,(msp->second/910)%1000);
if (msp->mode == MSP_MODE_AM_NICAM)
- printk("msp3400: NICAM/AM carrier : %d.%03d MHz\n",
+ printk(KERN_DEBUG "msp3400: NICAM/AM carrier : %d.%03d MHz\n",
msp->second/910000,(msp->second/910)%1000);
if (msp->mode == MSP_MODE_FM_TERRA &&
msp->main != msp->second) {
- printk("msp3400: FM-stereo carrier : %d.%03d MHz\n",
+ printk(KERN_DEBUG "msp3400: FM-stereo carrier : %d.%03d MHz\n",
msp->second/910000,(msp->second/910)%1000);
}
}
@@ -632,8 +652,8 @@
val = msp3400c_read(client, I2C_MSP3400C_DFP, 0x18);
if (val > 32767)
val -= 65536;
- dprintk("msp34xx: stereo detect register: %d\n",val);
-
+ dprintk(KERN_DEBUG
+ "msp34xx: stereo detect register: %d\n",val);
if (val > 4096) {
newstereo = VIDEO_SOUND_STEREO | VIDEO_SOUND_MONO;
} else if (val < -4096) {
@@ -647,7 +667,9 @@
case MSP_MODE_FM_NICAM2:
case MSP_MODE_AM_NICAM:
val = msp3400c_read(client, I2C_MSP3400C_DEM, 0x23);
- dprintk("msp34xx: nicam sync=%d, mode=%d\n",val & 1, (val & 0x1e) >> 1);
+ dprintk(KERN_DEBUG
+ "msp34xx: nicam sync=%d, mode=%d\n",
+ val & 1, (val & 0x1e) >> 1);
if (val & 1) {
/* nicam synced */
@@ -679,7 +701,8 @@
break;
case MSP_MODE_BTSC:
val = msp3400c_read(client, I2C_MSP3400C_DEM, 0x200);
- dprintk("msp3410: status=0x%x (pri=%s, sec=%s, %s%s%s)\n",
+ dprintk(KERN_DEBUG
+ "msp3410: status=0x%x (pri=%s, sec=%s, %s%s%s)\n",
val,
(val & 0x0002) ? "no" : "yes",
(val & 0x0004) ? "no" : "yes",
@@ -693,13 +716,13 @@
}
if (newstereo != msp->stereo) {
update = 1;
- dprintk("msp34xx: watch: stereo %d => %d\n",
+ dprintk(KERN_DEBUG "msp34xx: watch: stereo %d => %d\n",
msp->stereo,newstereo);
msp->stereo = newstereo;
}
if (newnicam != msp->nicam_on) {
update = 1;
- dprintk("msp34xx: watch: nicam %d => %d\n",
+ dprintk(KERN_DEBUG "msp34xx: watch: nicam %d => %d\n",
msp->nicam_on,newnicam);
msp->nicam_on = newnicam;
}
@@ -728,6 +751,8 @@
msp3400c_setstereo(client,VIDEO_SOUND_STEREO);
else if (msp->stereo & VIDEO_SOUND_LANG1)
msp3400c_setstereo(client,VIDEO_SOUND_LANG1);
+ else if (msp->stereo & VIDEO_SOUND_LANG2)
+ msp3400c_setstereo(client,VIDEO_SOUND_LANG2);
else
msp3400c_setstereo(client,VIDEO_SOUND_MONO);
}
@@ -774,10 +799,6 @@
if (msp->rmmod || signal_pending(current))
goto done;
- if (VIDEO_MODE_RADIO == msp->norm ||
- MSP_MODE_EXTERN == msp->mode)
- continue; /* nothing to do */
-
msp->active = 1;
if (msp->watch_stereo) {
@@ -794,8 +815,13 @@
restart:
if (VIDEO_MODE_RADIO == msp->norm ||
- MSP_MODE_EXTERN == msp->mode)
- continue; /* nothing to do */
+ MSP_MODE_EXTERN == msp->mode) {
+ /* no carrier scan, just unmute */
+ printk("msp3400: thread: no carrier scan\n");
+ msp3400c_setvolume(client, msp->muted,
+ msp->left, msp->right);
+ continue;
+ }
msp->restart = 0;
msp3400c_setvolume(client, msp->muted, 0, 0);
msp3400c_setmode(client, MSP_MODE_AM_DETECT /* +1 */ );
@@ -880,7 +906,7 @@
msp->nicam_on = 0;
msp3400c_setstereo(client, VIDEO_SOUND_MONO);
msp->watch_stereo = 1;
- } else if (max2 == 1 && msp->nicam) {
+ } else if (max2 == 1 && HAVE_NICAM(msp)) {
/* B/G NICAM */
msp->second = carrier_detect_55[max2].cdo;
msp3400c_setmode(client, MSP_MODE_FM_NICAM1);
@@ -918,7 +944,7 @@
/* volume prescale for SCART (AM mono input) */
msp3400c_write(client,I2C_MSP3400C_DFP, 0x000d, 0x1900);
msp->watch_stereo = 1;
- } else if (max2 == 0 && msp->nicam) {
+ } else if (max2 == 0 && HAVE_NICAM(msp)) {
/* D/K NICAM */
msp->second = carrier_detect_65[max2].cdo;
msp3400c_setmode(client, MSP_MODE_FM_NICAM1);
@@ -955,7 +981,7 @@
}
done:
- dprintk("msp3400: thread: exit\n");
+ dprintk(KERN_DEBUG "msp3400: thread: exit\n");
msp->active = 0;
msp->thread = NULL;
@@ -1023,16 +1049,13 @@
if (msp->rmmod)
goto done;
if (debug > 1)
- printk("msp3410: thread: sleep\n");
+ printk(KERN_DEBUG "msp3410: thread: sleep\n");
interruptible_sleep_on(&msp->wq);
if (debug > 1)
- printk("msp3410: thread: wakeup\n");
+ printk(KERN_DEBUG "msp3410: thread: wakeup\n");
if (msp->rmmod || signal_pending(current))
goto done;
- if (msp->mode == MSP_MODE_EXTERN)
- continue;
-
msp->active = 1;
if (msp->watch_stereo) {
@@ -1048,8 +1071,13 @@
goto done;
restart:
- if (msp->mode == MSP_MODE_EXTERN)
+ if (msp->mode == MSP_MODE_EXTERN) {
+ /* no carrier scan needed, just unmute */
+ dprintk(KERN_DEBUG "msp3410: thread: no carrier scan\n");
+ msp3400c_setvolume(client, msp->muted,
+ msp->left, msp->right);
continue;
+ }
msp->restart = 0;
del_timer(&msp->wake_stereo);
msp->watch_stereo = 0;
@@ -1071,7 +1099,7 @@
mode = 0x0003;
std = 1;
break;
- case VIDEO_MODE_RADIO:
+ case VIDEO_MODE_RADIO:
mode = 0x0003;
std = 0x0040;
break;
@@ -1088,7 +1116,7 @@
for (i = 0; modelist[i].name != NULL; i++)
if (modelist[i].retval == std)
break;
- printk("msp3410: setting mode: %s (0x%04x)\n",
+ printk(KERN_DEBUG "msp3410: setting mode: %s (0x%04x)\n",
modelist[i].name ? modelist[i].name : "unknown",std);
}
@@ -1109,13 +1137,13 @@
val = msp3400c_read(client, I2C_MSP3400C_DEM, 0x7e);
if (val < 0x07ff)
break;
- dprintk("msp3410: detection still in progress\n");
+ dprintk(KERN_DEBUG "msp3410: detection still in progress\n");
}
}
for (i = 0; modelist[i].name != NULL; i++)
if (modelist[i].retval == val)
break;
- dprintk("msp3410: current mode: %s (0x%04x)\n",
+ dprintk(KERN_DEBUG "msp3410: current mode: %s (0x%04x)\n",
modelist[i].name ? modelist[i].name : "unknown",
val);
msp->main = modelist[i].main;
@@ -1123,7 +1151,8 @@
if (amsound && (msp->norm == VIDEO_MODE_SECAM) && (val != 0x0009)) {
/* autodetection has failed, let backup */
- dprintk("msp3410: autodetection failed, switching to backup mode: %s (0x%04x)\n",
+ dprintk(KERN_DEBUG "msp3410: autodetection failed,"
+ " switching to backup mode: %s (0x%04x)\n",
modelist[8].name ? modelist[8].name : "unknown",val);
val = 0x0009;
msp3400c_write(client, I2C_MSP3400C_DEM, 0x20, val);
@@ -1168,11 +1197,24 @@
msp->stereo = VIDEO_SOUND_STEREO;
msp->nicam_on = 0;
msp->watch_stereo = 0;
+ /* not needed in theory if HAVE_RADIO(), but
+ short programming enables carrier mute */
+ msp3400c_setmode(client,MSP_MODE_FM_RADIO);
+ msp3400c_setcarrier(client, MSP_CARRIER(10.7),
+ MSP_CARRIER(10.7));
/* scart routing */
msp3400c_set_scart(client,SCART_IN2,0);
+#if 0
+ /* radio from SCART_IN2 */
msp3400c_write(client,I2C_MSP3400C_DFP, 0x08, 0x0220);
msp3400c_write(client,I2C_MSP3400C_DFP, 0x09, 0x0220);
msp3400c_write(client,I2C_MSP3400C_DFP, 0x0b, 0x0220);
+#else
+ /* msp34xx does radio decoding */
+ msp3400c_write(client,I2C_MSP3400C_DFP, 0x08, 0x0020);
+ msp3400c_write(client,I2C_MSP3400C_DFP, 0x09, 0x0020);
+ msp3400c_write(client,I2C_MSP3400C_DFP, 0x0b, 0x0020);
+#endif
break;
case 0x0003:
msp->mode = MSP_MODE_FM_TERRA;
@@ -1195,7 +1237,7 @@
}
done:
- dprintk("msp3410: thread: exit\n");
+ dprintk(KERN_DEBUG "msp3410: thread: exit\n");
msp->active = 0;
msp->thread = NULL;
@@ -1213,19 +1255,19 @@
static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg);
static struct i2c_driver driver = {
- name: "i2c msp3400 driver",
- id: I2C_DRIVERID_MSP3400,
- flags: I2C_DF_NOTIFY,
- attach_adapter: msp_probe,
- detach_client: msp_detach,
- command: msp_command,
+ .name = "i2c msp3400 driver",
+ .id = I2C_DRIVERID_MSP3400,
+ .flags = I2C_DF_NOTIFY,
+ .attach_adapter = msp_probe,
+ .detach_client = msp_detach,
+ .command = msp_command,
};
static struct i2c_client client_template =
{
- name: "(unset)",
- flags: I2C_CLIENT_ALLOW_USE,
- driver: &driver,
+ .name = "(unset)",
+ .flags = I2C_CLIENT_ALLOW_USE,
+ .driver = &driver,
};
static int msp_attach(struct i2c_adapter *adap, int addr,
@@ -1234,7 +1276,7 @@
DECLARE_MUTEX_LOCKED(sem);
struct msp3400c *msp;
struct i2c_client *c;
- int rev1,rev2,i;
+ int i;
client_template.adapter = adap;
client_template.addr = addr;
@@ -1258,6 +1300,7 @@
msp->bass = 32768;
msp->treble = 32768;
msp->input = -1;
+ msp->muted = 1;
for (i = 0; i < DFP_COUNT; i++)
msp->dfp_regs[i] = -1;
@@ -1271,10 +1314,10 @@
return -1;
}
- rev1 = msp3400c_read(c, I2C_MSP3400C_DFP, 0x1e);
- if (-1 != rev1)
- rev2 = msp3400c_read(c, I2C_MSP3400C_DFP, 0x1f);
- if ((-1 == rev1) || (0 == rev1 && 0 == rev2)) {
+ msp->rev1 = msp3400c_read(c, I2C_MSP3400C_DFP, 0x1e);
+ if (-1 != msp->rev1)
+ msp->rev2 = msp3400c_read(c, I2C_MSP3400C_DFP, 0x1f);
+ if ((-1 == msp->rev1) || (0 == msp->rev1 && 0 == msp->rev2)) {
kfree(msp);
kfree(c);
printk("msp3400: error while reading chip version\n");
@@ -1283,30 +1326,35 @@
#if 0
/* this will turn on a 1kHz beep - might be useful for debugging... */
- msp3400c_write(client,I2C_MSP3400C_DFP, 0x0014, 0x1040);
+ msp3400c_write(c,I2C_MSP3400C_DFP, 0x0014, 0x1040);
#endif
+ msp3400c_setvolume(c,msp->muted,msp->left,msp->right);
sprintf(c->name,"MSP34%02d%c-%c%d",
- (rev2>>8)&0xff, (rev1&0xff)+'@', ((rev1>>8)&0xff)+'@', rev2&0x1f);
- msp->nicam = (((rev2>>8)&0xff) != 00) ? 1 : 0;
+ (msp->rev2>>8)&0xff, (msp->rev1&0xff)+'@',
+ ((msp->rev1>>8)&0xff)+'@', msp->rev2&0x1f);
if (simple == -1) {
/* default mode */
- /* msp->simple = (((rev2>>8)&0xff) == 0) ? 0 : 1; */
- msp->simple = ((rev1&0xff)+'@' > 'C');
+ msp->simple = HAVE_SIMPLE(msp);
} else {
/* use insmod option */
msp->simple = simple;
}
/* timer for stereo checking */
+ init_timer(&msp->wake_stereo);
msp->wake_stereo.function = msp3400c_stereo_wake;
msp->wake_stereo.data = (unsigned long)msp;
/* hello world :-) */
printk(KERN_INFO "msp34xx: init: chip=%s",c->name);
- if (msp->nicam)
- printk(", has NICAM support");
+ if (HAVE_NICAM(msp))
+ printk(" +nicam");
+ if (HAVE_SIMPLE(msp))
+ printk(" +simple");
+ if (HAVE_RADIO(msp))
+ printk(" +radio");
printk("\n");
/* startup control thread */
@@ -1434,7 +1482,7 @@
msp->norm = VIDEO_MODE_RADIO;
msp->watch_stereo=0;
del_timer(&msp->wake_stereo);
- dprintk("msp34xx: switching to radio mode\n");
+ dprintk(KERN_DEBUG "msp34xx: switching to radio mode\n");
if (msp->simple) {
/* the thread will do for us */
msp_wake_thread(client);
@@ -1453,7 +1501,7 @@
case MSP_SET_DFPREG:
{
struct msp_dfpreg *r = arg;
- int i;
+ unsigned int i;
if (r->reg < 0 || r->reg >= DFP_COUNT)
return -EINVAL;
@@ -1521,7 +1569,7 @@
msp3400c_setbass(client,msp->bass);
msp3400c_settreble(client,msp->treble);
- if (va->mode != 0) {
+ if (va->mode != 0 && msp->norm != VIDEO_MODE_RADIO) {
msp->watch_stereo=0;
del_timer(&msp->wake_stereo);
msp->stereo = va->mode;
@@ -1534,7 +1582,6 @@
struct video_channel *vc = arg;
dprintk(KERN_DEBUG "msp34xx: VIDIOCSCHAN\n");
- dprintk("msp34xx: switching to TV mode\n");
msp->norm = vc->norm;
break;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)