Hi
Patches for review.
Add new data structure list_head for many tm6000 cards.
Rework tm6000-alsa.
Comment some old code befor remove.
Now tm6000-alsa not load when tm6000 start. Need load tm6000-alsa manualy
[ 210.777562] tm6000: New video device @ 480 Mbps (6000:dec0, ifnum 0)
[ 210.777566] tm6000: Found Beholder Wander DVB-T/TV/FM USB2.0
[ 211.700009] Board version = 0x67980bf4
[ 211.900011] board=0x67980bf4
[ 212.024512] tm6000 #0: i2c eeprom 00: 42 59 54 45 12 01 00 02 00 00 00 40 00
60 c0 de byte.......@.`..
[ 212.216012] tm6000 #0: i2c eeprom 10: 01 00 10 20 40 01 28 03 42 00 65 00 68
00 6f 00 ... @.(.B.e.h.o.
[ 212.408012] tm6000 #0: i2c eeprom 20: 6c 00 64 00 65 00 72 00 20 00 49 00 6e
00 74 00 l.d.e.r. .I.n.t.
[ 212.600012] tm6000 #0: i2c eeprom 30: 6c 00 2e 00 20 00 4c 00 74 00 64 00 2e
00 ff ff l... .L.t.d.....
[ 212.792012] tm6000 #0: i2c eeprom 40: 22 03 42 00 65 00 68 00 6f 00 6c 00 64
00 20 00 ".B.e.h.o.l.d. .
[ 212.984012] tm6000 #0: i2c eeprom 50: 54 00 56 00 20 00 57 00 61 00 6e 00 64
00 65 00 T.V. .W.a.n.d.e.
[ 213.176011] tm6000 #0: i2c eeprom 60: 72 00 ff ff ff ff ff ff ff ff 1a 03 56
00 69 00 r...........V.i.
[ 213.368012] tm6000 #0: i2c eeprom 70: 64 00 65 00 6f 00 43 00 61 00 70 00 74
00 75 00 d.e.o.C.a.p.t.u.
[ 213.560012] tm6000 #0: i2c eeprom 80: 72 00 65 00 ff ff ff ff ff ff ff ff ff
ff ff ff r.e.............
[ 213.752012] tm6000 #0: i2c eeprom 90: ff ff ff ff 16 03 30 00 30 00 30 00 30
00 30 00 ......0.0.0.0.0.
[ 213.944011] tm6000 #0: i2c eeprom a0: 30 00 32 00 30 00 34 00 31 00 ff ff ff
ff ff ff 0.2.0.4.1.......
[ 214.136009] tm6000 #0: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ................
[ 214.328012] tm6000 #0: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ................
[ 214.520014] tm6000 #0: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ................
[ 214.712012] tm6000 #0: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ................
[ 214.904012] tm6000 #0: i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ................
[ 215.084013] ................
[ 215.104890] tuner 1-0061: chip found @ 0xc2 (tm6000 #0)
[ 215.160471] xc5000 1-0061: creating new instance
[ 215.216511] xc5000: Successfully identified at address 0x61
[ 215.216515] xc5000: Firmware has not been loaded previously
[ 215.216522] tuner 1-0061: Tuner frontend module has no way to set config
[ 215.328012] xc5000: waiting for firmware upload (dvb-fe-xc5000-1.6.114.fw)...
[ 215.328019] usb 1-1: firmware: requesting dvb-fe-xc5000-1.6.114.fw
[ 215.365986] xc5000: firmware read 12401 bytes.
[ 215.365989] xc5000: firmware uploading...
[ 227.128008] xc5000: firmware upload complete...
[ 229.036083] Trident TVMaster TM5600/TM6000/TM6010 USB2 board (Load status: 0)
[ 229.036114] usbcore: registered new interface driver tm6000
[ 229.052288] tm6000: open called (dev=video0)
[ 230.484571] Original value=255
load tm6000-alsa manualy
[ 259.141425] tm6000 ALSA driver for DMA sound loaded
unload tm6000-alsa
[ 309.364210] tm6000 ALSA driver for DMA sound unloaded
load tm6000-alsa manualy
[ 320.118131] tm6000 ALSA driver for DMA sound loaded
ALSA devices created
arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC883 Analog [ALC883 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: ALC883 Digital [ALC883 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 2: ALC883 Analog [ALC883 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: default [], device 0: tm6000 Digital [tm6000 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
If need I can rework this patches or it can be upload to tm6000 tree.
With my best regards, Dmitry.
diff -r 8f5129efe974 linux/drivers/staging/tm6000/tm6000-alsa.c
--- a/linux/drivers/staging/tm6000/tm6000-alsa.c Sun May 16 18:48:01 2010 -0300
+++ b/linux/drivers/staging/tm6000/tm6000-alsa.c Wed May 26 08:36:16 2010 +1000
@@ -68,6 +68,9 @@
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
static int enable[SNDRV_CARDS] = {1, [1 ... (SNDRV_CARDS - 1)] = 1};
+
+static struct snd_card *snd_tm6000_cards[SNDRV_CARDS];
+static int devno;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 10)
static unsigned int dummy;
@@ -353,7 +356,8 @@
* Alsa Constructor - Component probe
*/
-int tm6000_audio_init(struct tm6000_core *dev, int idx)
+//int tm6000_audio_init(struct tm6000_core *dev, int idx)
+int tm6000_audio_initdev(struct tm6000_core *dev, int idx)
{
struct snd_card *card;
struct snd_tm6000_card *chip;
@@ -419,6 +423,7 @@
if (rc < 0)
goto error;
+ snd_tm6000_cards[idx] = card;
return 0;
@@ -426,14 +431,49 @@
snd_card_free(card);
return rc;
}
-EXPORT_SYMBOL_GPL(tm6000_audio_init);
+//EXPORT_SYMBOL_GPL(tm6000_audio_init);
+#if 1
+static int tm6000_audio_init(void)
+{
+ struct tm6000_core *dev = NULL;
+ struct list_head *list;
-#if 0
+// tm6000_dmasound_init = alsa_device_init;
+// tm6000_dmasound_exit = alsa_device_exit;
+
+ printk(KERN_INFO "tm6000 ALSA driver for DMA sound loaded\n");
+
+ list_for_each(list,&tm6000_devlist) {
+ dev = list_entry(list, struct tm6000_core, devlist);
+ if (!tm6000_audio_initdev(dev, devno))
+ devno++;
+ else
+ printk(KERN_INFO "tm6000 ALSA: audio init failed\n");
+ }
+
+ if (dev == NULL)
+ printk(KERN_INFO "tm6000 ALSA: no tm6000 cards found\n");
+
+ return 0;
+
+}
+
/*
* module remove
*/
static void tm6000_audio_fini(void)
{
+ int idx;
+
+ for (idx = 0; idx < devno; idx++) {
+ snd_card_free(snd_tm6000_cards[idx]);
+ }
+
+// tm6000_dmasound_init = NULL;
+// tm6000_dmasound_exit = NULL;
+ printk(KERN_INFO "tm6000 ALSA driver for DMA sound unloaded\n");
+
+ return;
}
module_init(tm6000_audio_init);
Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov <[email protected]>
diff -r 8f5129efe974 linux/drivers/staging/tm6000/tm6000-cards.c
--- a/linux/drivers/staging/tm6000/tm6000-cards.c Sun May 16 18:48:01 2010 -0300
+++ b/linux/drivers/staging/tm6000/tm6000-cards.c Wed May 26 08:36:41 2010 +1000
@@ -56,6 +56,12 @@
module_param_array(card, int, NULL, 0444);
static unsigned long tm6000_devused;
+
+DEFINE_MUTEX(tm6000_devlist_lock);
+EXPORT_SYMBOL(tm6000_devlist_lock);
+LIST_HEAD(tm6000_devlist);
+EXPORT_SYMBOL(tm6000_devlist);
+static LIST_HEAD(mops_list);
#if 0
/* This will be needed sooner or later, to allow selecting video mux entries */
@@ -723,6 +716,13 @@
}
#endif
}
+
+ mutex_lock(&tm6000_devlist_lock);
+// list_for_each_entry(mops, &mops_list, next)
+// mpeg_ops_attach(mops, dev);
+ list_add_tail(&dev->devlist, &tm6000_devlist);
+ mutex_unlock(&tm6000_devlist_lock);
+
mutex_unlock(&dev->lock);
return 0;
@@ -957,6 +957,13 @@
mutex_lock(&dev->lock);
+ /* unregister */
+ mutex_lock(&tm6000_devlist_lock);
+ list_del(&dev->devlist);
+// list_for_each_entry(mops, &mops_list, next)
+// mpeg_ops_detach(mops, dev);
+ mutex_unlock(&tm6000_devlist_lock);
+
#ifdef CONFIG_VIDEO_TM6000_DVB
if (dev->dvb) {
tm6000_dvb_unregister(dev);
@@ -991,6 +998,7 @@
static int __init tm6000_module_init(void)
{
int result;
+ INIT_LIST_HEAD(&tm6000_devlist);
printk(KERN_INFO "tm6000" " v4l2 driver version %d.%d.%d loaded\n",
(TM6000_VERSION >> 16) & 0xff,
Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov <[email protected]>
diff -r 8f5129efe974 linux/drivers/staging/tm6000/tm6000.h
--- a/linux/drivers/staging/tm6000/tm6000.h Sun May 16 18:48:01 2010 -0300
+++ b/linux/drivers/staging/tm6000/tm6000.h Wed May 26 08:38:12 2010 +1000
@@ -154,6 +154,7 @@
int model; /* index in the device_data struct */
int devno; /* marks the number of this device */
enum tm6000_devtype dev_type; /* type of device */
+ struct list_head devlist;
v4l2_std_id norm; /* Current norm */
int width,height; /* Selected resolution */
@@ -228,6 +229,8 @@
V4L2_STD_NTSC_M_JP|V4L2_STD_SECAM
/* In tm6000-cards.c */
+extern struct list_head tm6000_devlist;
+extern struct mutex tm6000_devlist_lock;
int tm6000_tuner_callback (void *ptr, int component, int command, int arg);
int tm6000_xc5000_callback (void *ptr, int component, int command, int arg);
@@ -289,7 +294,7 @@
int tm6000_queue_init(struct tm6000_core *dev);
/* In tm6000-alsa.c */
-int tm6000_audio_init(struct tm6000_core *dev, int idx);
+//int tm6000_audio_init(struct tm6000_core *dev, int idx);
/* Debug stuff */
Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov <[email protected]>