tm6000, alsa

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <d.belimov@xxxxxxxxx>
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 <d.belimov@xxxxxxxxx>
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 <d.belimov@xxxxxxxxx>

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux