linux/drivers/media/usb/em28xx/em28xx-audio.c
<<
>>
Prefs
   1/*
   2 *  Empiatech em28x1 audio extension
   3 *
   4 *  Copyright (C) 2006 Markus Rechberger <mrechberger@gmail.com>
   5 *
   6 *  Copyright (C) 2007-2014 Mauro Carvalho Chehab
   7 *      - Port to work with the in-kernel driver
   8 *      - Cleanups, fixes, alsa-controls, etc.
   9 *
  10 *  This driver is based on my previous au600 usb pstn audio driver
  11 *  and inherits all the copyrights
  12 *
  13 *  This program is free software; you can redistribute it and/or modify
  14 *  it under the terms of the GNU General Public License as published by
  15 *  the Free Software Foundation; either version 2 of the License, or
  16 *  (at your option) any later version.
  17 *
  18 *  This program is distributed in the hope that it will be useful,
  19 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  20 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21 *  GNU General Public License for more details.
  22 *
  23 *  You should have received a copy of the GNU General Public License
  24 *  along with this program; if not, write to the Free Software
  25 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26 */
  27
  28#include <linux/kernel.h>
  29#include <linux/usb.h>
  30#include <linux/init.h>
  31#include <linux/sound.h>
  32#include <linux/spinlock.h>
  33#include <linux/soundcard.h>
  34#include <linux/slab.h>
  35#include <linux/vmalloc.h>
  36#include <linux/proc_fs.h>
  37#include <linux/module.h>
  38#include <sound/core.h>
  39#include <sound/pcm.h>
  40#include <sound/pcm_params.h>
  41#include <sound/info.h>
  42#include <sound/initval.h>
  43#include <sound/control.h>
  44#include <sound/tlv.h>
  45#include <sound/ac97_codec.h>
  46#include <media/v4l2-common.h>
  47#include "em28xx.h"
  48
  49static int debug;
  50module_param(debug, int, 0644);
  51MODULE_PARM_DESC(debug, "activates debug info");
  52
  53#define EM28XX_MAX_AUDIO_BUFS           5
  54#define EM28XX_MIN_AUDIO_PACKETS        64
  55
  56#define dprintk(fmt, arg...) do {                                       \
  57            if (debug)                                                  \
  58                printk(KERN_INFO "em28xx-audio %s: " fmt,               \
  59                                  __func__, ##arg);             \
  60        } while (0)
  61
  62static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
  63
  64static int em28xx_deinit_isoc_audio(struct em28xx *dev)
  65{
  66        int i;
  67
  68        dprintk("Stopping isoc\n");
  69        for (i = 0; i < dev->adev.num_urb; i++) {
  70                struct urb *urb = dev->adev.urb[i];
  71
  72                if (!irqs_disabled())
  73                        usb_kill_urb(urb);
  74                else
  75                        usb_unlink_urb(urb);
  76        }
  77
  78        return 0;
  79}
  80
  81static void em28xx_audio_isocirq(struct urb *urb)
  82{
  83        struct em28xx            *dev = urb->context;
  84        int                      i;
  85        unsigned int             oldptr;
  86        int                      period_elapsed = 0;
  87        int                      status;
  88        unsigned char            *cp;
  89        unsigned int             stride;
  90        struct snd_pcm_substream *substream;
  91        struct snd_pcm_runtime   *runtime;
  92
  93        if (dev->disconnected) {
  94                dprintk("device disconnected while streaming. URB status=%d.\n", urb->status);
  95                atomic_set(&dev->adev.stream_started, 0);
  96                return;
  97        }
  98
  99        switch (urb->status) {
 100        case 0:             /* success */
 101        case -ETIMEDOUT:    /* NAK */
 102                break;
 103        case -ECONNRESET:   /* kill */
 104        case -ENOENT:
 105        case -ESHUTDOWN:
 106                return;
 107        default:            /* error */
 108                dprintk("urb completition error %d.\n", urb->status);
 109                break;
 110        }
 111
 112        if (atomic_read(&dev->adev.stream_started) == 0)
 113                return;
 114
 115        if (dev->adev.capture_pcm_substream) {
 116                substream = dev->adev.capture_pcm_substream;
 117                runtime = substream->runtime;
 118                stride = runtime->frame_bits >> 3;
 119
 120                for (i = 0; i < urb->number_of_packets; i++) {
 121                        int length =
 122                            urb->iso_frame_desc[i].actual_length / stride;
 123                        cp = (unsigned char *)urb->transfer_buffer +
 124                            urb->iso_frame_desc[i].offset;
 125
 126                        if (!length)
 127                                continue;
 128
 129                        oldptr = dev->adev.hwptr_done_capture;
 130                        if (oldptr + length >= runtime->buffer_size) {
 131                                unsigned int cnt =
 132                                    runtime->buffer_size - oldptr;
 133                                memcpy(runtime->dma_area + oldptr * stride, cp,
 134                                       cnt * stride);
 135                                memcpy(runtime->dma_area, cp + cnt * stride,
 136                                       length * stride - cnt * stride);
 137                        } else {
 138                                memcpy(runtime->dma_area + oldptr * stride, cp,
 139                                       length * stride);
 140                        }
 141
 142                        snd_pcm_stream_lock(substream);
 143
 144                        dev->adev.hwptr_done_capture += length;
 145                        if (dev->adev.hwptr_done_capture >=
 146                            runtime->buffer_size)
 147                                dev->adev.hwptr_done_capture -=
 148                                    runtime->buffer_size;
 149
 150                        dev->adev.capture_transfer_done += length;
 151                        if (dev->adev.capture_transfer_done >=
 152                            runtime->period_size) {
 153                                dev->adev.capture_transfer_done -=
 154                                    runtime->period_size;
 155                                period_elapsed = 1;
 156                        }
 157
 158                        snd_pcm_stream_unlock(substream);
 159                }
 160                if (period_elapsed)
 161                        snd_pcm_period_elapsed(substream);
 162        }
 163        urb->status = 0;
 164
 165        status = usb_submit_urb(urb, GFP_ATOMIC);
 166        if (status < 0)
 167                em28xx_errdev("resubmit of audio urb failed (error=%i)\n",
 168                              status);
 169        return;
 170}
 171
 172static int em28xx_init_audio_isoc(struct em28xx *dev)
 173{
 174        int       i, errCode;
 175
 176        dprintk("Starting isoc transfers\n");
 177
 178        /* Start streaming */
 179        for (i = 0; i < dev->adev.num_urb; i++) {
 180                memset(dev->adev.transfer_buffer[i], 0x80,
 181                       dev->adev.urb[i]->transfer_buffer_length);
 182
 183                errCode = usb_submit_urb(dev->adev.urb[i], GFP_ATOMIC);
 184                if (errCode) {
 185                        em28xx_errdev("submit of audio urb failed (error=%i)\n",
 186                                      errCode);
 187                        em28xx_deinit_isoc_audio(dev);
 188                        atomic_set(&dev->adev.stream_started, 0);
 189                        return errCode;
 190                }
 191
 192        }
 193
 194        return 0;
 195}
 196
 197static int snd_pcm_alloc_vmalloc_buffer(struct snd_pcm_substream *subs,
 198                                        size_t size)
 199{
 200        struct snd_pcm_runtime *runtime = subs->runtime;
 201
 202        dprintk("Allocating vbuffer\n");
 203        if (runtime->dma_area) {
 204                if (runtime->dma_bytes > size)
 205                        return 0;
 206
 207                vfree(runtime->dma_area);
 208        }
 209        runtime->dma_area = vmalloc(size);
 210        if (!runtime->dma_area)
 211                return -ENOMEM;
 212
 213        runtime->dma_bytes = size;
 214
 215        return 0;
 216}
 217
 218static struct snd_pcm_hardware snd_em28xx_hw_capture = {
 219        .info = SNDRV_PCM_INFO_BLOCK_TRANSFER |
 220                SNDRV_PCM_INFO_MMAP           |
 221                SNDRV_PCM_INFO_INTERLEAVED    |
 222                SNDRV_PCM_INFO_BATCH          |
 223                SNDRV_PCM_INFO_MMAP_VALID,
 224
 225        .formats = SNDRV_PCM_FMTBIT_S16_LE,
 226
 227        .rates = SNDRV_PCM_RATE_48000,
 228
 229        .rate_min = 48000,
 230        .rate_max = 48000,
 231        .channels_min = 2,
 232        .channels_max = 2,
 233        .buffer_bytes_max = 62720 * 8,  /* just about the value in usbaudio.c */
 234
 235        /*
 236         * The period is 12.288 bytes. Allow a 10% of variation along its
 237         * value, in order to avoid overruns/underruns due to some clock
 238         * drift.
 239         *
 240         * FIXME: This period assumes 64 packets, and a 48000 PCM rate.
 241         * Calculate it dynamically.
 242         */
 243        .period_bytes_min = 11059,
 244        .period_bytes_max = 13516,
 245
 246        .periods_min = 2,
 247        .periods_max = 98,              /* 12544, */
 248};
 249
 250static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
 251{
 252        struct em28xx *dev = snd_pcm_substream_chip(substream);
 253        struct snd_pcm_runtime *runtime = substream->runtime;
 254        int nonblock, ret = 0;
 255
 256        if (!dev) {
 257                em28xx_err("BUG: em28xx can't find device struct."
 258                                " Can't proceed with open\n");
 259                return -ENODEV;
 260        }
 261
 262        if (dev->disconnected)
 263                return -ENODEV;
 264
 265        dprintk("opening device and trying to acquire exclusive lock\n");
 266
 267        nonblock = !!(substream->f_flags & O_NONBLOCK);
 268        if (nonblock) {
 269                if (!mutex_trylock(&dev->lock))
 270                        return -EAGAIN;
 271        } else
 272                mutex_lock(&dev->lock);
 273
 274        runtime->hw = snd_em28xx_hw_capture;
 275
 276        if (dev->adev.users == 0) {
 277                if (dev->alt == 0 || dev->is_audio_only) {
 278                        if (dev->is_audio_only)
 279                                /* audio is on a separate interface */
 280                                dev->alt = 1;
 281                        else
 282                                /* audio is on the same interface as video */
 283                                dev->alt = 7;
 284                                /*
 285                                 * FIXME: The intention seems to be to select
 286                                 * the alt setting with the largest
 287                                 * wMaxPacketSize for the video endpoint.
 288                                 * At least dev->alt should be used instead, but
 289                                 * we should probably not touch it at all if it
 290                                 * is already >0, because wMaxPacketSize of the
 291                                 * audio endpoints seems to be the same for all.
 292                                 */
 293                        dprintk("changing alternate number on interface %d to %d\n",
 294                                dev->ifnum, dev->alt);
 295                        usb_set_interface(dev->udev, dev->ifnum, dev->alt);
 296                }
 297
 298                /* Sets volume, mute, etc */
 299                dev->mute = 0;
 300                ret = em28xx_audio_analog_set(dev);
 301                if (ret < 0)
 302                        goto err;
 303        }
 304
 305        kref_get(&dev->ref);
 306        dev->adev.users++;
 307        mutex_unlock(&dev->lock);
 308
 309        /* Dynamically adjust the period size */
 310        snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
 311        snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
 312                                     dev->adev.period * 95 / 100,
 313                                     dev->adev.period * 105 / 100);
 314
 315        dev->adev.capture_pcm_substream = substream;
 316
 317        return 0;
 318err:
 319        mutex_unlock(&dev->lock);
 320
 321        em28xx_err("Error while configuring em28xx mixer\n");
 322        return ret;
 323}
 324
 325static int snd_em28xx_pcm_close(struct snd_pcm_substream *substream)
 326{
 327        struct em28xx *dev = snd_pcm_substream_chip(substream);
 328
 329        dprintk("closing device\n");
 330
 331        dev->mute = 1;
 332        mutex_lock(&dev->lock);
 333        dev->adev.users--;
 334        if (atomic_read(&dev->adev.stream_started) > 0) {
 335                atomic_set(&dev->adev.stream_started, 0);
 336                schedule_work(&dev->adev.wq_trigger);
 337        }
 338
 339        em28xx_audio_analog_set(dev);
 340        if (substream->runtime->dma_area) {
 341                dprintk("freeing\n");
 342                vfree(substream->runtime->dma_area);
 343                substream->runtime->dma_area = NULL;
 344        }
 345        mutex_unlock(&dev->lock);
 346        kref_put(&dev->ref, em28xx_free_device);
 347
 348        return 0;
 349}
 350
 351static int snd_em28xx_hw_capture_params(struct snd_pcm_substream *substream,
 352                                        struct snd_pcm_hw_params *hw_params)
 353{
 354        int ret;
 355        struct em28xx *dev = snd_pcm_substream_chip(substream);
 356
 357        if (dev->disconnected)
 358                return -ENODEV;
 359
 360        dprintk("Setting capture parameters\n");
 361
 362        ret = snd_pcm_alloc_vmalloc_buffer(substream,
 363                                           params_buffer_bytes(hw_params));
 364        if (ret < 0)
 365                return ret;
 366#if 0
 367        /* TODO: set up em28xx audio chip to deliver the correct audio format,
 368           current default is 48000hz multiplexed => 96000hz mono
 369           which shouldn't matter since analogue TV only supports mono */
 370        unsigned int channels, rate, format;
 371
 372        format = params_format(hw_params);
 373        rate = params_rate(hw_params);
 374        channels = params_channels(hw_params);
 375#endif
 376
 377        return 0;
 378}
 379
 380static int snd_em28xx_hw_capture_free(struct snd_pcm_substream *substream)
 381{
 382        struct em28xx *dev = snd_pcm_substream_chip(substream);
 383        struct em28xx_audio *adev = &dev->adev;
 384
 385        dprintk("Stop capture, if needed\n");
 386
 387        if (atomic_read(&adev->stream_started) > 0) {
 388                atomic_set(&adev->stream_started, 0);
 389                schedule_work(&adev->wq_trigger);
 390        }
 391
 392        return 0;
 393}
 394
 395static int snd_em28xx_prepare(struct snd_pcm_substream *substream)
 396{
 397        struct em28xx *dev = snd_pcm_substream_chip(substream);
 398
 399        if (dev->disconnected)
 400                return -ENODEV;
 401
 402        dev->adev.hwptr_done_capture = 0;
 403        dev->adev.capture_transfer_done = 0;
 404
 405        return 0;
 406}
 407
 408static void audio_trigger(struct work_struct *work)
 409{
 410        struct em28xx_audio *adev =
 411                            container_of(work, struct em28xx_audio, wq_trigger);
 412        struct em28xx *dev = container_of(adev, struct em28xx, adev);
 413
 414        if (atomic_read(&adev->stream_started)) {
 415                dprintk("starting capture");
 416                em28xx_init_audio_isoc(dev);
 417        } else {
 418                dprintk("stopping capture");
 419                em28xx_deinit_isoc_audio(dev);
 420        }
 421}
 422
 423static int snd_em28xx_capture_trigger(struct snd_pcm_substream *substream,
 424                                      int cmd)
 425{
 426        struct em28xx *dev = snd_pcm_substream_chip(substream);
 427        int retval = 0;
 428
 429        if (dev->disconnected)
 430                return -ENODEV;
 431
 432        switch (cmd) {
 433        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: /* fall through */
 434        case SNDRV_PCM_TRIGGER_RESUME: /* fall through */
 435        case SNDRV_PCM_TRIGGER_START:
 436                atomic_set(&dev->adev.stream_started, 1);
 437                break;
 438        case SNDRV_PCM_TRIGGER_PAUSE_PUSH: /* fall through */
 439        case SNDRV_PCM_TRIGGER_SUSPEND: /* fall through */
 440        case SNDRV_PCM_TRIGGER_STOP:
 441                atomic_set(&dev->adev.stream_started, 0);
 442                break;
 443        default:
 444                retval = -EINVAL;
 445        }
 446        schedule_work(&dev->adev.wq_trigger);
 447        return retval;
 448}
 449
 450static snd_pcm_uframes_t snd_em28xx_capture_pointer(struct snd_pcm_substream
 451                                                    *substream)
 452{
 453        unsigned long flags;
 454        struct em28xx *dev;
 455        snd_pcm_uframes_t hwptr_done;
 456
 457        dev = snd_pcm_substream_chip(substream);
 458        if (dev->disconnected)
 459                return SNDRV_PCM_POS_XRUN;
 460
 461        spin_lock_irqsave(&dev->adev.slock, flags);
 462        hwptr_done = dev->adev.hwptr_done_capture;
 463        spin_unlock_irqrestore(&dev->adev.slock, flags);
 464
 465        return hwptr_done;
 466}
 467
 468static struct page *snd_pcm_get_vmalloc_page(struct snd_pcm_substream *subs,
 469                                             unsigned long offset)
 470{
 471        void *pageptr = subs->runtime->dma_area + offset;
 472
 473        return vmalloc_to_page(pageptr);
 474}
 475
 476/*
 477 * AC97 volume control support
 478 */
 479static int em28xx_vol_info(struct snd_kcontrol *kcontrol,
 480                           struct snd_ctl_elem_info *info)
 481{
 482        struct em28xx *dev = snd_kcontrol_chip(kcontrol);
 483
 484        if (dev->disconnected)
 485                return -ENODEV;
 486
 487        info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
 488        info->count = 2;
 489        info->value.integer.min = 0;
 490        info->value.integer.max = 0x1f;
 491
 492        return 0;
 493}
 494
 495static int em28xx_vol_put(struct snd_kcontrol *kcontrol,
 496                          struct snd_ctl_elem_value *value)
 497{
 498        struct em28xx *dev = snd_kcontrol_chip(kcontrol);
 499        struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream;
 500        u16 val = (0x1f - (value->value.integer.value[0] & 0x1f)) |
 501                  (0x1f - (value->value.integer.value[1] & 0x1f)) << 8;
 502        int nonblock = 0;
 503        int rc;
 504
 505        if (dev->disconnected)
 506                return -ENODEV;
 507
 508        if (substream)
 509                nonblock = !!(substream->f_flags & O_NONBLOCK);
 510        if (nonblock) {
 511                if (!mutex_trylock(&dev->lock))
 512                        return -EAGAIN;
 513        } else
 514                mutex_lock(&dev->lock);
 515        rc = em28xx_read_ac97(dev, kcontrol->private_value);
 516        if (rc < 0)
 517                goto err;
 518
 519        val |= rc & 0x8000;     /* Preserve the mute flag */
 520
 521        rc = em28xx_write_ac97(dev, kcontrol->private_value, val);
 522        if (rc < 0)
 523                goto err;
 524
 525        dprintk("%sleft vol %d, right vol %d (0x%04x) to ac97 volume control 0x%04x\n",
 526                (val & 0x8000) ? "muted " : "",
 527                0x1f - ((val >> 8) & 0x1f), 0x1f - (val & 0x1f),
 528                val, (int)kcontrol->private_value);
 529
 530err:
 531        mutex_unlock(&dev->lock);
 532        return rc;
 533}
 534
 535static int em28xx_vol_get(struct snd_kcontrol *kcontrol,
 536                          struct snd_ctl_elem_value *value)
 537{
 538        struct em28xx *dev = snd_kcontrol_chip(kcontrol);
 539        struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream;
 540        int nonblock = 0;
 541        int val;
 542
 543        if (dev->disconnected)
 544                return -ENODEV;
 545
 546        if (substream)
 547                nonblock = !!(substream->f_flags & O_NONBLOCK);
 548        if (nonblock) {
 549                if (!mutex_trylock(&dev->lock))
 550                        return -EAGAIN;
 551        } else
 552                mutex_lock(&dev->lock);
 553        val = em28xx_read_ac97(dev, kcontrol->private_value);
 554        mutex_unlock(&dev->lock);
 555        if (val < 0)
 556                return val;
 557
 558        dprintk("%sleft vol %d, right vol %d (0x%04x) from ac97 volume control 0x%04x\n",
 559                (val & 0x8000) ? "muted " : "",
 560                0x1f - ((val >> 8) & 0x1f), 0x1f - (val & 0x1f),
 561                val, (int)kcontrol->private_value);
 562
 563        value->value.integer.value[0] = 0x1f - (val & 0x1f);
 564        value->value.integer.value[1] = 0x1f - ((val << 8) & 0x1f);
 565
 566        return 0;
 567}
 568
 569static int em28xx_vol_put_mute(struct snd_kcontrol *kcontrol,
 570                               struct snd_ctl_elem_value *value)
 571{
 572        struct em28xx *dev = snd_kcontrol_chip(kcontrol);
 573        u16 val = value->value.integer.value[0];
 574        struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream;
 575        int nonblock = 0;
 576        int rc;
 577
 578        if (dev->disconnected)
 579                return -ENODEV;
 580
 581        if (substream)
 582                nonblock = !!(substream->f_flags & O_NONBLOCK);
 583        if (nonblock) {
 584                if (!mutex_trylock(&dev->lock))
 585                        return -EAGAIN;
 586        } else
 587                mutex_lock(&dev->lock);
 588        rc = em28xx_read_ac97(dev, kcontrol->private_value);
 589        if (rc < 0)
 590                goto err;
 591
 592        if (val)
 593                rc &= 0x1f1f;
 594        else
 595                rc |= 0x8000;
 596
 597        rc = em28xx_write_ac97(dev, kcontrol->private_value, rc);
 598        if (rc < 0)
 599                goto err;
 600
 601        dprintk("%sleft vol %d, right vol %d (0x%04x) to ac97 volume control 0x%04x\n",
 602                (val & 0x8000) ? "muted " : "",
 603                0x1f - ((val >> 8) & 0x1f), 0x1f - (val & 0x1f),
 604                val, (int)kcontrol->private_value);
 605
 606err:
 607        mutex_unlock(&dev->lock);
 608        return rc;
 609}
 610
 611static int em28xx_vol_get_mute(struct snd_kcontrol *kcontrol,
 612                               struct snd_ctl_elem_value *value)
 613{
 614        struct em28xx *dev = snd_kcontrol_chip(kcontrol);
 615        struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream;
 616        int nonblock = 0;
 617        int val;
 618
 619        if (dev->disconnected)
 620                return -ENODEV;
 621
 622        if (substream)
 623                nonblock = !!(substream->f_flags & O_NONBLOCK);
 624        if (nonblock) {
 625                if (!mutex_trylock(&dev->lock))
 626                        return -EAGAIN;
 627        } else
 628                mutex_lock(&dev->lock);
 629        val = em28xx_read_ac97(dev, kcontrol->private_value);
 630        mutex_unlock(&dev->lock);
 631        if (val < 0)
 632                return val;
 633
 634        if (val & 0x8000)
 635                value->value.integer.value[0] = 0;
 636        else
 637                value->value.integer.value[0] = 1;
 638
 639        dprintk("%sleft vol %d, right vol %d (0x%04x) from ac97 volume control 0x%04x\n",
 640                (val & 0x8000) ? "muted " : "",
 641                0x1f - ((val >> 8) & 0x1f), 0x1f - (val & 0x1f),
 642                val, (int)kcontrol->private_value);
 643
 644        return 0;
 645}
 646
 647static const DECLARE_TLV_DB_SCALE(em28xx_db_scale, -3450, 150, 0);
 648
 649static int em28xx_cvol_new(struct snd_card *card, struct em28xx *dev,
 650                           char *name, int id)
 651{
 652        int err;
 653        char ctl_name[44];
 654        struct snd_kcontrol *kctl;
 655        struct snd_kcontrol_new tmp;
 656
 657        memset(&tmp, 0, sizeof(tmp));
 658        tmp.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 659        tmp.private_value = id,
 660        tmp.name  = ctl_name,
 661
 662        /* Add Mute Control */
 663        sprintf(ctl_name, "%s Switch", name);
 664        tmp.get  = em28xx_vol_get_mute;
 665        tmp.put  = em28xx_vol_put_mute;
 666        tmp.info = snd_ctl_boolean_mono_info;
 667        kctl = snd_ctl_new1(&tmp, dev);
 668        err = snd_ctl_add(card, kctl);
 669        if (err < 0)
 670                return err;
 671        dprintk("Added control %s for ac97 volume control 0x%04x\n",
 672                ctl_name, id);
 673
 674        memset(&tmp, 0, sizeof(tmp));
 675        tmp.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 676        tmp.private_value = id,
 677        tmp.name  = ctl_name,
 678
 679        /* Add Volume Control */
 680        sprintf(ctl_name, "%s Volume", name);
 681        tmp.get   = em28xx_vol_get;
 682        tmp.put   = em28xx_vol_put;
 683        tmp.info  = em28xx_vol_info;
 684        tmp.tlv.p = em28xx_db_scale,
 685        kctl = snd_ctl_new1(&tmp, dev);
 686        err = snd_ctl_add(card, kctl);
 687        if (err < 0)
 688                return err;
 689        dprintk("Added control %s for ac97 volume control 0x%04x\n",
 690                ctl_name, id);
 691
 692        return 0;
 693}
 694
 695/*
 696 * register/unregister code and data
 697 */
 698static struct snd_pcm_ops snd_em28xx_pcm_capture = {
 699        .open      = snd_em28xx_capture_open,
 700        .close     = snd_em28xx_pcm_close,
 701        .ioctl     = snd_pcm_lib_ioctl,
 702        .hw_params = snd_em28xx_hw_capture_params,
 703        .hw_free   = snd_em28xx_hw_capture_free,
 704        .prepare   = snd_em28xx_prepare,
 705        .trigger   = snd_em28xx_capture_trigger,
 706        .pointer   = snd_em28xx_capture_pointer,
 707        .page      = snd_pcm_get_vmalloc_page,
 708};
 709
 710static void em28xx_audio_free_urb(struct em28xx *dev)
 711{
 712        int i;
 713
 714        for (i = 0; i < dev->adev.num_urb; i++) {
 715                struct urb *urb = dev->adev.urb[i];
 716
 717                if (!urb)
 718                        continue;
 719
 720                usb_free_coherent(dev->udev, urb->transfer_buffer_length,
 721                                  dev->adev.transfer_buffer[i],
 722                                  urb->transfer_dma);
 723
 724                usb_free_urb(urb);
 725        }
 726        kfree(dev->adev.urb);
 727        kfree(dev->adev.transfer_buffer);
 728        dev->adev.num_urb = 0;
 729}
 730
 731/* high bandwidth multiplier, as encoded in highspeed endpoint descriptors */
 732static int em28xx_audio_ep_packet_size(struct usb_device *udev,
 733                                       struct usb_endpoint_descriptor *e)
 734{
 735        int size = le16_to_cpu(e->wMaxPacketSize);
 736
 737        if (udev->speed == USB_SPEED_HIGH)
 738                return (size & 0x7ff) *  (1 + (((size) >> 11) & 0x03));
 739
 740        return size & 0x7ff;
 741}
 742
 743static int em28xx_audio_urb_init(struct em28xx *dev)
 744{
 745        struct usb_interface *intf;
 746        struct usb_endpoint_descriptor *e, *ep = NULL;
 747        int                 i, ep_size, interval, num_urb, npackets;
 748        int                 urb_size, bytes_per_transfer;
 749        u8 alt;
 750
 751        if (dev->ifnum)
 752                alt = 1;
 753        else
 754                alt = 7;
 755
 756        intf = usb_ifnum_to_if(dev->udev, dev->ifnum);
 757
 758        if (intf->num_altsetting <= alt) {
 759                em28xx_errdev("alt %d doesn't exist on interface %d\n",
 760                              dev->ifnum, alt);
 761                return -ENODEV;
 762        }
 763
 764        for (i = 0; i < intf->altsetting[alt].desc.bNumEndpoints; i++) {
 765                e = &intf->altsetting[alt].endpoint[i].desc;
 766                if (!usb_endpoint_dir_in(e))
 767                        continue;
 768                if (e->bEndpointAddress == EM28XX_EP_AUDIO) {
 769                        ep = e;
 770                        break;
 771                }
 772        }
 773
 774        if (!ep) {
 775                em28xx_errdev("Couldn't find an audio endpoint");
 776                return -ENODEV;
 777        }
 778
 779        ep_size = em28xx_audio_ep_packet_size(dev->udev, ep);
 780        interval = 1 << (ep->bInterval - 1);
 781
 782        em28xx_info("Endpoint 0x%02x %s on intf %d alt %d interval = %d, size %d\n",
 783                    EM28XX_EP_AUDIO, usb_speed_string(dev->udev->speed),
 784                     dev->ifnum, alt,
 785                     interval,
 786                     ep_size);
 787
 788        /* Calculate the number and size of URBs to better fit the audio samples */
 789
 790        /*
 791         * Estimate the number of bytes per DMA transfer.
 792         *
 793         * This is given by the bit rate (for now, only 48000 Hz) multiplied
 794         * by 2 channels and 2 bytes/sample divided by the number of microframe
 795         * intervals and by the microframe rate (125 us)
 796         */
 797        bytes_per_transfer = DIV_ROUND_UP(48000 * 2 * 2, 125 * interval);
 798
 799        /*
 800         * Estimate the number of transfer URBs. Don't let it go past the
 801         * maximum number of URBs that is known to be supported by the device.
 802         */
 803        num_urb = DIV_ROUND_UP(bytes_per_transfer, ep_size);
 804        if (num_urb > EM28XX_MAX_AUDIO_BUFS)
 805                num_urb = EM28XX_MAX_AUDIO_BUFS;
 806
 807        /*
 808         * Now that we know the number of bytes per transfer and the number of
 809         * URBs, estimate the typical size of an URB, in order to adjust the
 810         * minimal number of packets.
 811         */
 812        urb_size = bytes_per_transfer / num_urb;
 813
 814        /*
 815         * Now, calculate the amount of audio packets to be filled on each
 816         * URB. In order to preserve the old behaviour, use a minimal
 817         * threshold for this value.
 818         */
 819        npackets = EM28XX_MIN_AUDIO_PACKETS;
 820        if (urb_size > ep_size * npackets)
 821                npackets = DIV_ROUND_UP(urb_size, ep_size);
 822
 823        em28xx_info("Number of URBs: %d, with %d packets and %d size\n",
 824                    num_urb, npackets, urb_size);
 825
 826        /* Estimate the bytes per period */
 827        dev->adev.period = urb_size * npackets;
 828
 829        /* Allocate space to store the number of URBs to be used */
 830
 831        dev->adev.transfer_buffer = kcalloc(num_urb,
 832                                            sizeof(*dev->adev.transfer_buffer),
 833                                            GFP_ATOMIC);
 834        if (!dev->adev.transfer_buffer) {
 835                return -ENOMEM;
 836        }
 837
 838        dev->adev.urb = kcalloc(num_urb, sizeof(*dev->adev.urb), GFP_ATOMIC);
 839        if (!dev->adev.urb) {
 840                kfree(dev->adev.transfer_buffer);
 841                return -ENOMEM;
 842        }
 843
 844        /* Alloc memory for each URB and for each transfer buffer */
 845        dev->adev.num_urb = num_urb;
 846        for (i = 0; i < num_urb; i++) {
 847                struct urb *urb;
 848                int j, k;
 849                void *buf;
 850
 851                urb = usb_alloc_urb(npackets, GFP_ATOMIC);
 852                if (!urb) {
 853                        em28xx_errdev("usb_alloc_urb failed!\n");
 854                        em28xx_audio_free_urb(dev);
 855                        return -ENOMEM;
 856                }
 857                dev->adev.urb[i] = urb;
 858
 859                buf = usb_alloc_coherent(dev->udev, npackets * ep_size, GFP_ATOMIC,
 860                                         &urb->transfer_dma);
 861                if (!buf) {
 862                        em28xx_errdev("usb_alloc_coherent failed!\n");
 863                        em28xx_audio_free_urb(dev);
 864                        return -ENOMEM;
 865                }
 866                dev->adev.transfer_buffer[i] = buf;
 867
 868                urb->dev = dev->udev;
 869                urb->context = dev;
 870                urb->pipe = usb_rcvisocpipe(dev->udev, EM28XX_EP_AUDIO);
 871                urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
 872                urb->transfer_buffer = buf;
 873                urb->interval = interval;
 874                urb->complete = em28xx_audio_isocirq;
 875                urb->number_of_packets = npackets;
 876                urb->transfer_buffer_length = ep_size * npackets;
 877
 878                for (j = k = 0; j < npackets; j++, k += ep_size) {
 879                        urb->iso_frame_desc[j].offset = k;
 880                        urb->iso_frame_desc[j].length = ep_size;
 881                }
 882        }
 883
 884        return 0;
 885}
 886
 887static int em28xx_audio_init(struct em28xx *dev)
 888{
 889        struct em28xx_audio *adev = &dev->adev;
 890        struct snd_pcm      *pcm;
 891        struct snd_card     *card;
 892        static int          devnr;
 893        int                 err;
 894
 895        if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) {
 896                /* This device does not support the extension (in this case
 897                   the device is expecting the snd-usb-audio module or
 898                   doesn't have analog audio support at all) */
 899                return 0;
 900        }
 901
 902        em28xx_info("Binding audio extension\n");
 903
 904        kref_get(&dev->ref);
 905
 906        printk(KERN_INFO "em28xx-audio.c: Copyright (C) 2006 Markus "
 907                         "Rechberger\n");
 908        printk(KERN_INFO
 909               "em28xx-audio.c: Copyright (C) 2007-2014 Mauro Carvalho Chehab\n");
 910
 911        err = snd_card_new(&dev->udev->dev, index[devnr], "Em28xx Audio",
 912                           THIS_MODULE, 0, &card);
 913        if (err < 0)
 914                return err;
 915
 916        spin_lock_init(&adev->slock);
 917        adev->sndcard = card;
 918        adev->udev = dev->udev;
 919
 920        err = snd_pcm_new(card, "Em28xx Audio", 0, 0, 1, &pcm);
 921        if (err < 0)
 922                goto card_free;
 923
 924        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_em28xx_pcm_capture);
 925        pcm->info_flags = 0;
 926        pcm->private_data = dev;
 927        strcpy(pcm->name, "Empia 28xx Capture");
 928
 929        strcpy(card->driver, "Em28xx-Audio");
 930        strcpy(card->shortname, "Em28xx Audio");
 931        strcpy(card->longname, "Empia Em28xx Audio");
 932
 933        INIT_WORK(&adev->wq_trigger, audio_trigger);
 934
 935        if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
 936                em28xx_cvol_new(card, dev, "Video", AC97_VIDEO);
 937                em28xx_cvol_new(card, dev, "Line In", AC97_LINE);
 938                em28xx_cvol_new(card, dev, "Phone", AC97_PHONE);
 939                em28xx_cvol_new(card, dev, "Microphone", AC97_MIC);
 940                em28xx_cvol_new(card, dev, "CD", AC97_CD);
 941                em28xx_cvol_new(card, dev, "AUX", AC97_AUX);
 942                em28xx_cvol_new(card, dev, "PCM", AC97_PCM);
 943
 944                em28xx_cvol_new(card, dev, "Master", AC97_MASTER);
 945                em28xx_cvol_new(card, dev, "Line", AC97_HEADPHONE);
 946                em28xx_cvol_new(card, dev, "Mono", AC97_MASTER_MONO);
 947                em28xx_cvol_new(card, dev, "LFE", AC97_CENTER_LFE_MASTER);
 948                em28xx_cvol_new(card, dev, "Surround", AC97_SURROUND_MASTER);
 949        }
 950
 951        err = em28xx_audio_urb_init(dev);
 952        if (err)
 953                goto card_free;
 954
 955        err = snd_card_register(card);
 956        if (err < 0)
 957                goto urb_free;
 958
 959        em28xx_info("Audio extension successfully initialized\n");
 960        return 0;
 961
 962urb_free:
 963        em28xx_audio_free_urb(dev);
 964
 965card_free:
 966        snd_card_free(card);
 967        adev->sndcard = NULL;
 968
 969        return err;
 970}
 971
 972static int em28xx_audio_fini(struct em28xx *dev)
 973{
 974        if (dev == NULL)
 975                return 0;
 976
 977        if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) {
 978                /* This device does not support the extension (in this case
 979                   the device is expecting the snd-usb-audio module or
 980                   doesn't have analog audio support at all) */
 981                return 0;
 982        }
 983
 984        em28xx_info("Closing audio extension\n");
 985
 986        if (dev->adev.sndcard) {
 987                snd_card_disconnect(dev->adev.sndcard);
 988                flush_work(&dev->adev.wq_trigger);
 989
 990                em28xx_audio_free_urb(dev);
 991
 992                snd_card_free(dev->adev.sndcard);
 993                dev->adev.sndcard = NULL;
 994        }
 995
 996        kref_put(&dev->ref, em28xx_free_device);
 997        return 0;
 998}
 999
1000static int em28xx_audio_suspend(struct em28xx *dev)
1001{
1002        if (dev == NULL)
1003                return 0;
1004
1005        if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR)
1006                return 0;
1007
1008        em28xx_info("Suspending audio extension\n");
1009        em28xx_deinit_isoc_audio(dev);
1010        atomic_set(&dev->adev.stream_started, 0);
1011        return 0;
1012}
1013
1014static int em28xx_audio_resume(struct em28xx *dev)
1015{
1016        if (dev == NULL)
1017                return 0;
1018
1019        if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR)
1020                return 0;
1021
1022        em28xx_info("Resuming audio extension\n");
1023        /* Nothing to do other than schedule_work() ?? */
1024        schedule_work(&dev->adev.wq_trigger);
1025        return 0;
1026}
1027
1028static struct em28xx_ops audio_ops = {
1029        .id   = EM28XX_AUDIO,
1030        .name = "Em28xx Audio Extension",
1031        .init = em28xx_audio_init,
1032        .fini = em28xx_audio_fini,
1033        .suspend = em28xx_audio_suspend,
1034        .resume = em28xx_audio_resume,
1035};
1036
1037static int __init em28xx_alsa_register(void)
1038{
1039        return em28xx_register_extension(&audio_ops);
1040}
1041
1042static void __exit em28xx_alsa_unregister(void)
1043{
1044        em28xx_unregister_extension(&audio_ops);
1045}
1046
1047MODULE_LICENSE("GPL");
1048MODULE_AUTHOR("Markus Rechberger <mrechberger@gmail.com>");
1049MODULE_AUTHOR("Mauro Carvalho Chehab");
1050MODULE_DESCRIPTION(DRIVER_DESC " - audio interface");
1051MODULE_VERSION(EM28XX_VERSION);
1052
1053module_init(em28xx_alsa_register);
1054module_exit(em28xx_alsa_unregister);
1055