From 7da6c2360f522be6e8c1e50f7c16646ac52cfe46 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Sat, 5 Jun 2010 15:10:36 -0300 Subject: [PATCH] --- yaml --- r: 201943 b: refs/heads/master c: 3f23a81a101889711e878240908a2b81b94a268a h: refs/heads/master i: 201941: 47aa1ed38383aed458ae4bd41c05cd90e75a5268 201939: 188fce392aa6a2b50b0e42a75d0519b5a1d9863f 201935: 611009333efbbee509eea0ccb78b5962d29455a6 v: v3 --- [refs] | 2 +- trunk/drivers/staging/tm6000/tm6000-alsa.c | 49 ++++++++++++---------- trunk/drivers/staging/tm6000/tm6000-core.c | 6 +-- trunk/drivers/staging/tm6000/tm6000.h | 5 ++- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/[refs] b/[refs] index b48f66dc650d..7070617dd8d9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: faa7c13481a1d73e93456b1e2a0d95c4f89ad518 +refs/heads/master: 3f23a81a101889711e878240908a2b81b94a268a diff --git a/trunk/drivers/staging/tm6000/tm6000-alsa.c b/trunk/drivers/staging/tm6000/tm6000-alsa.c index b14c5b780c96..5839a27f30f0 100644 --- a/trunk/drivers/staging/tm6000/tm6000-alsa.c +++ b/trunk/drivers/staging/tm6000/tm6000-alsa.c @@ -78,6 +78,8 @@ static int _tm6000_start_audio_dma(struct snd_tm6000_card *chip) struct tm6000_core *core = chip->core; int val; + dprintk(1, "Starting audio DMA\n"); + /* Enables audio */ val = tm6000_get_reg(core, TM6010_REQ07_RCC_ACTIVE_VIDEO_IF, 0x0); val |= 0x20; @@ -237,7 +239,9 @@ static int snd_tm6000_hw_params(struct snd_pcm_substream *substream, */ static int snd_tm6000_hw_free(struct snd_pcm_substream *substream) { - dsp_buffer_free(substream); + struct snd_tm6000_card *chip = snd_pcm_substream_chip(substream); + + _tm6000_stop_audio_dma(chip); return 0; } @@ -247,6 +251,11 @@ static int snd_tm6000_hw_free(struct snd_pcm_substream *substream) */ static int snd_tm6000_prepare(struct snd_pcm_substream *substream) { + struct snd_tm6000_card *chip = snd_pcm_substream_chip(substream); + + chip->buf_pos = 0; + chip->period_pos = 0; + return 0; } @@ -284,12 +293,8 @@ static int snd_tm6000_card_trigger(struct snd_pcm_substream *substream, int cmd) static snd_pcm_uframes_t snd_tm6000_pointer(struct snd_pcm_substream *substream) { struct snd_tm6000_card *chip = snd_pcm_substream_chip(substream); - struct snd_pcm_runtime *runtime = substream->runtime; - u16 count; - - count = atomic_read(&chip->count); - return runtime->period_size * (count & (runtime->periods-1)); + return chip->buf_pos; } /* @@ -342,6 +347,16 @@ int tm6000_audio_init(struct tm6000_core *dev) snd_printk(KERN_ERR "cannot create card instance %d\n", devnr); return rc; } + strcpy(card->driver, "tm6000-alsa"); + strcpy(card->shortname, "TM5600/60x0"); + sprintf(card->longname, "TM5600/60x0 Audio at bus %d device %d", + dev->udev->bus->busnum, dev->udev->devnum); + + sprintf(component, "USB%04x:%04x", + le16_to_cpu(dev->udev->descriptor.idVendor), + le16_to_cpu(dev->udev->descriptor.idProduct)); + snd_component_add(card, component); + snd_card_set_dev(card, &dev->udev->dev); chip = kzalloc(sizeof(struct snd_tm6000_card), GFP_KERNEL); if (!chip) { @@ -349,34 +364,26 @@ int tm6000_audio_init(struct tm6000_core *dev) goto error; } - sprintf(component, "USB%04x:%04x", - le16_to_cpu(dev->udev->descriptor.idVendor), - le16_to_cpu(dev->udev->descriptor.idProduct)); - snd_component_add(card, component); - + chip->core = dev; + chip->card = card; + dev->adev = chip; spin_lock_init(&chip->reg_lock); + rc = snd_pcm_new(card, "TM6000 Audio", 0, 0, 1, &pcm); if (rc < 0) goto error; - snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_tm6000_pcm_ops); pcm->info_flags = 0; - pcm->private_data = dev; + pcm->private_data = chip; strcpy(pcm->name, "Trident TM5600/60x0"); - strcpy(card->driver, "tm6000-alsa"); - strcpy(card->shortname, "TM5600/60x0"); - sprintf(card->longname, "TM5600/60x0 Audio at bus %d device %d", - dev->udev->bus->busnum, dev->udev->devnum); - snd_card_set_dev(card, &dev->udev->dev); + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_tm6000_pcm_ops); rc = snd_card_register(card); if (rc < 0) goto error; - chip->core = dev; - chip->card = card; - dev->adev = chip; + dprintk(1,"Registered audio driver for %s\n", card->longname); return 0; diff --git a/trunk/drivers/staging/tm6000/tm6000-core.c b/trunk/drivers/staging/tm6000/tm6000-core.c index 6ddb7465a40c..1656440306a5 100644 --- a/trunk/drivers/staging/tm6000/tm6000-core.c +++ b/trunk/drivers/staging/tm6000/tm6000-core.c @@ -678,10 +678,10 @@ int tm6000_register_extension(struct tm6000_ops *ops) mutex_lock(&tm6000_extension_devlist_lock); list_add_tail(&ops->next, &tm6000_extension_devlist); list_for_each_entry(dev, &tm6000_devlist, devlist) { - if (dev) - ops->init(dev); + ops->init(dev); + printk(KERN_INFO "%s: Initialized (%s) extension\n", + dev->name, ops->name); } - printk(KERN_INFO "tm6000: Initialized (%s) extension\n", ops->name); mutex_unlock(&tm6000_extension_devlist_lock); mutex_unlock(&tm6000_devlist_mutex); return 0; diff --git a/trunk/drivers/staging/tm6000/tm6000.h b/trunk/drivers/staging/tm6000/tm6000.h index db9995914caa..89862a49520d 100644 --- a/trunk/drivers/staging/tm6000/tm6000.h +++ b/trunk/drivers/staging/tm6000/tm6000.h @@ -135,9 +135,12 @@ struct tm6000_dvb { struct snd_tm6000_card { struct snd_card *card; spinlock_t reg_lock; - atomic_t count; struct tm6000_core *core; struct snd_pcm_substream *substream; + + /* temporary data for buffer fill processing */ + unsigned buf_pos; + unsigned period_pos; }; struct tm6000_endpoint {