linux/drivers/media/usb/stk1160/stk1160-core.c
<<
>>
Prefs
   1/*
   2 * STK1160 driver
   3 *
   4 * Copyright (C) 2012 Ezequiel Garcia
   5 * <elezegarcia--a.t--gmail.com>
   6 *
   7 * Based on Easycap driver by R.M. Thomas
   8 *      Copyright (C) 2010 R.M. Thomas
   9 *      <rmthomas--a.t--sciolus.org>
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License as published by
  13 * the Free Software Foundation; either version 2 of the License, or
  14 * (at your option) any later version.
  15 *
  16 * This program is distributed in the hope that it will be useful,
  17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19 * GNU General Public License for more details.
  20 *
  21 * TODO:
  22 *
  23 * 1. (Try to) detect if we must register ac97 mixer
  24 * 2. Support stream at lower speed: lower frame rate or lower frame size.
  25 *
  26 */
  27
  28#include <linux/module.h>
  29#include <linux/init.h>
  30#include <linux/kernel.h>
  31#include <linux/errno.h>
  32#include <linux/slab.h>
  33
  34#include <linux/usb.h>
  35#include <linux/mm.h>
  36#include <linux/vmalloc.h>
  37#include <media/i2c/saa7115.h>
  38
  39#include "stk1160.h"
  40#include "stk1160-reg.h"
  41
  42static unsigned int input;
  43module_param(input, int, 0644);
  44MODULE_PARM_DESC(input, "Set default input");
  45
  46MODULE_LICENSE("GPL");
  47MODULE_AUTHOR("Ezequiel Garcia");
  48MODULE_DESCRIPTION("STK1160 driver");
  49
  50/* Devices supported by this driver */
  51static struct usb_device_id stk1160_id_table[] = {
  52        { USB_DEVICE(0x05e1, 0x0408) },
  53        { }
  54};
  55MODULE_DEVICE_TABLE(usb, stk1160_id_table);
  56
  57/* saa7113 I2C address */
  58static unsigned short saa7113_addrs[] = {
  59        0x4a >> 1,
  60        I2C_CLIENT_END
  61};
  62
  63/*
  64 * Read/Write stk registers
  65 */
  66int stk1160_read_reg(struct stk1160 *dev, u16 reg, u8 *value)
  67{
  68        int ret;
  69        int pipe = usb_rcvctrlpipe(dev->udev, 0);
  70        u8 *buf;
  71
  72        *value = 0;
  73
  74        buf = kmalloc(sizeof(u8), GFP_KERNEL);
  75        if (!buf)
  76                return -ENOMEM;
  77        ret = usb_control_msg(dev->udev, pipe, 0x00,
  78                        USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
  79                        0x00, reg, buf, sizeof(u8), HZ);
  80        if (ret < 0) {
  81                stk1160_err("read failed on reg 0x%x (%d)\n",
  82                        reg, ret);
  83                kfree(buf);
  84                return ret;
  85        }
  86
  87        *value = *buf;
  88        kfree(buf);
  89        return 0;
  90}
  91
  92int stk1160_write_reg(struct stk1160 *dev, u16 reg, u16 value)
  93{
  94        int ret;
  95        int pipe = usb_sndctrlpipe(dev->udev, 0);
  96
  97        ret =  usb_control_msg(dev->udev, pipe, 0x01,
  98                        USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
  99                        value, reg, NULL, 0, HZ);
 100        if (ret < 0) {
 101                stk1160_err("write failed on reg 0x%x (%d)\n",
 102                        reg, ret);
 103                return ret;
 104        }
 105
 106        return 0;
 107}
 108
 109void stk1160_select_input(struct stk1160 *dev)
 110{
 111        int route;
 112        static const u8 gctrl[] = {
 113                0x98, 0x90, 0x88, 0x80, 0x98
 114        };
 115
 116        if (dev->ctl_input == STK1160_SVIDEO_INPUT)
 117                route = SAA7115_SVIDEO3;
 118        else
 119                route = SAA7115_COMPOSITE0;
 120
 121        if (dev->ctl_input < ARRAY_SIZE(gctrl)) {
 122                v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
 123                                route, 0, 0);
 124                stk1160_write_reg(dev, STK1160_GCTRL, gctrl[dev->ctl_input]);
 125        }
 126}
 127
 128/* TODO: We should break this into pieces */
 129static void stk1160_reg_reset(struct stk1160 *dev)
 130{
 131        int i;
 132
 133        static const struct regval ctl[] = {
 134                {STK1160_GCTRL+2, 0x0078},
 135
 136                {STK1160_RMCTL+1, 0x0000},
 137                {STK1160_RMCTL+3, 0x0002},
 138
 139                {STK1160_PLLSO,   0x0010},
 140                {STK1160_PLLSO+1, 0x0000},
 141                {STK1160_PLLSO+2, 0x0014},
 142                {STK1160_PLLSO+3, 0x000E},
 143
 144                {STK1160_PLLFD,   0x0046},
 145
 146                /* Timing generator setup */
 147                {STK1160_TIGEN,   0x0012},
 148                {STK1160_TICTL,   0x002D},
 149                {STK1160_TICTL+1, 0x0001},
 150                {STK1160_TICTL+2, 0x0000},
 151                {STK1160_TICTL+3, 0x0000},
 152                {STK1160_TIGEN,   0x0080},
 153
 154                {0xffff, 0xffff}
 155        };
 156
 157        for (i = 0; ctl[i].reg != 0xffff; i++)
 158                stk1160_write_reg(dev, ctl[i].reg, ctl[i].val);
 159}
 160
 161static void stk1160_release(struct v4l2_device *v4l2_dev)
 162{
 163        struct stk1160 *dev = container_of(v4l2_dev, struct stk1160, v4l2_dev);
 164
 165        stk1160_dbg("releasing all resources\n");
 166
 167        stk1160_i2c_unregister(dev);
 168
 169        v4l2_ctrl_handler_free(&dev->ctrl_handler);
 170        v4l2_device_unregister(&dev->v4l2_dev);
 171        kfree(dev->alt_max_pkt_size);
 172        kfree(dev);
 173}
 174
 175/* high bandwidth multiplier, as encoded in highspeed endpoint descriptors */
 176#define hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
 177
 178/*
 179 * Scan usb interface and populate max_pkt_size array
 180 * with information on each alternate setting.
 181 * The array should be allocated by the caller.
 182 */
 183static int stk1160_scan_usb(struct usb_interface *intf, struct usb_device *udev,
 184                unsigned int *max_pkt_size)
 185{
 186        int i, e, sizedescr, size, ifnum;
 187        const struct usb_endpoint_descriptor *desc;
 188
 189        bool has_video = false, has_audio = false;
 190        const char *speed;
 191
 192        ifnum = intf->altsetting[0].desc.bInterfaceNumber;
 193
 194        /* Get endpoints */
 195        for (i = 0; i < intf->num_altsetting; i++) {
 196
 197                for (e = 0; e < intf->altsetting[i].desc.bNumEndpoints; e++) {
 198
 199                        /* This isn't clear enough, at least to me */
 200                        desc = &intf->altsetting[i].endpoint[e].desc;
 201                        sizedescr = le16_to_cpu(desc->wMaxPacketSize);
 202                        size = sizedescr & 0x7ff;
 203
 204                        if (udev->speed == USB_SPEED_HIGH)
 205                                size = size * hb_mult(sizedescr);
 206
 207                        if (usb_endpoint_xfer_isoc(desc) &&
 208                            usb_endpoint_dir_in(desc)) {
 209                                switch (desc->bEndpointAddress) {
 210                                case STK1160_EP_AUDIO:
 211                                        has_audio = true;
 212                                        break;
 213                                case STK1160_EP_VIDEO:
 214                                        has_video = true;
 215                                        max_pkt_size[i] = size;
 216                                        break;
 217                                }
 218                        }
 219                }
 220        }
 221
 222        /* Is this even possible? */
 223        if (!(has_audio || has_video)) {
 224                dev_err(&udev->dev, "no audio or video endpoints found\n");
 225                return -ENODEV;
 226        }
 227
 228        switch (udev->speed) {
 229        case USB_SPEED_LOW:
 230                speed = "1.5";
 231                break;
 232        case USB_SPEED_FULL:
 233                speed = "12";
 234                break;
 235        case USB_SPEED_HIGH:
 236                speed = "480";
 237                break;
 238        default:
 239                speed = "unknown";
 240        }
 241
 242        dev_info(&udev->dev, "New device %s %s @ %s Mbps (%04x:%04x, interface %d, class %d)\n",
 243                udev->manufacturer ? udev->manufacturer : "",
 244                udev->product ? udev->product : "",
 245                speed,
 246                le16_to_cpu(udev->descriptor.idVendor),
 247                le16_to_cpu(udev->descriptor.idProduct),
 248                ifnum,
 249                intf->altsetting->desc.bInterfaceNumber);
 250
 251        /* This should never happen, since we rejected audio interfaces */
 252        if (has_audio)
 253                dev_warn(&udev->dev, "audio interface %d found.\n\
 254                                This is not implemented by this driver,\
 255                                you should use snd-usb-audio instead\n", ifnum);
 256
 257        if (has_video)
 258                dev_info(&udev->dev, "video interface %d found\n",
 259                                ifnum);
 260
 261        /*
 262         * Make sure we have 480 Mbps of bandwidth, otherwise things like
 263         * video stream wouldn't likely work, since 12 Mbps is generally
 264         * not enough even for most streams.
 265         */
 266        if (udev->speed != USB_SPEED_HIGH)
 267                dev_warn(&udev->dev, "must be connected to a high-speed USB 2.0 port\n\
 268                                You may not be able to stream video smoothly\n");
 269
 270        return 0;
 271}
 272
 273static int stk1160_probe(struct usb_interface *interface,
 274                const struct usb_device_id *id)
 275{
 276        int rc = 0;
 277
 278        unsigned int *alt_max_pkt_size; /* array of wMaxPacketSize */
 279        struct usb_device *udev;
 280        struct stk1160 *dev;
 281
 282        udev = interface_to_usbdev(interface);
 283
 284        /*
 285         * Since usb audio class is supported by snd-usb-audio,
 286         * we reject audio interface.
 287         */
 288        if (interface->altsetting[0].desc.bInterfaceClass == USB_CLASS_AUDIO)
 289                return -ENODEV;
 290
 291        /* Alloc an array for all possible max_pkt_size */
 292        alt_max_pkt_size = kmalloc(sizeof(alt_max_pkt_size[0]) *
 293                        interface->num_altsetting, GFP_KERNEL);
 294        if (alt_max_pkt_size == NULL)
 295                return -ENOMEM;
 296
 297        /*
 298         * Scan usb posibilities and populate alt_max_pkt_size array.
 299         * Also, check if device speed is fast enough.
 300         */
 301        rc = stk1160_scan_usb(interface, udev, alt_max_pkt_size);
 302        if (rc < 0) {
 303                kfree(alt_max_pkt_size);
 304                return rc;
 305        }
 306
 307        dev = kzalloc(sizeof(struct stk1160), GFP_KERNEL);
 308        if (dev == NULL) {
 309                kfree(alt_max_pkt_size);
 310                return -ENOMEM;
 311        }
 312
 313        dev->alt_max_pkt_size = alt_max_pkt_size;
 314        dev->udev = udev;
 315        dev->num_alt = interface->num_altsetting;
 316        dev->ctl_input = input;
 317
 318        /* We save struct device for debug purposes only */
 319        dev->dev = &interface->dev;
 320
 321        usb_set_intfdata(interface, dev);
 322
 323        /* initialize videobuf2 stuff */
 324        rc = stk1160_vb2_setup(dev);
 325        if (rc < 0)
 326                goto free_err;
 327
 328        /*
 329         * There is no need to take any locks here in probe
 330         * because we register the device node as the *last* thing.
 331         */
 332        spin_lock_init(&dev->buf_lock);
 333        mutex_init(&dev->v4l_lock);
 334        mutex_init(&dev->vb_queue_lock);
 335
 336        rc = v4l2_ctrl_handler_init(&dev->ctrl_handler, 0);
 337        if (rc) {
 338                stk1160_err("v4l2_ctrl_handler_init failed (%d)\n", rc);
 339                goto free_err;
 340        }
 341
 342        /*
 343         * We obtain a v4l2_dev but defer
 344         * registration of video device node as the last thing.
 345         * There is no need to set the name if we give a device struct
 346         */
 347        dev->v4l2_dev.release = stk1160_release;
 348        dev->v4l2_dev.ctrl_handler = &dev->ctrl_handler;
 349        rc = v4l2_device_register(dev->dev, &dev->v4l2_dev);
 350        if (rc) {
 351                stk1160_err("v4l2_device_register failed (%d)\n", rc);
 352                goto free_ctrl;
 353        }
 354
 355        rc = stk1160_i2c_register(dev);
 356        if (rc < 0)
 357                goto unreg_v4l2;
 358
 359        /*
 360         * To the best of my knowledge stk1160 boards only have
 361         * saa7113, but it doesn't hurt to support them all.
 362         */
 363        dev->sd_saa7115 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
 364                "saa7115_auto", 0, saa7113_addrs);
 365
 366        /* i2c reset saa711x */
 367        v4l2_device_call_all(&dev->v4l2_dev, 0, core, reset, 0);
 368        v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
 369
 370        /* reset stk1160 to default values */
 371        stk1160_reg_reset(dev);
 372
 373        /* select default input */
 374        stk1160_select_input(dev);
 375
 376        stk1160_ac97_register(dev);
 377
 378        rc = stk1160_video_register(dev);
 379        if (rc < 0)
 380                goto unreg_i2c;
 381
 382        return 0;
 383
 384unreg_i2c:
 385        stk1160_i2c_unregister(dev);
 386unreg_v4l2:
 387        v4l2_device_unregister(&dev->v4l2_dev);
 388free_ctrl:
 389        v4l2_ctrl_handler_free(&dev->ctrl_handler);
 390free_err:
 391        kfree(alt_max_pkt_size);
 392        kfree(dev);
 393
 394        return rc;
 395}
 396
 397static void stk1160_disconnect(struct usb_interface *interface)
 398{
 399        struct stk1160 *dev;
 400
 401        dev = usb_get_intfdata(interface);
 402        usb_set_intfdata(interface, NULL);
 403
 404        /*
 405         * Wait until all current v4l2 operation are finished
 406         * then deallocate resources
 407         */
 408        mutex_lock(&dev->vb_queue_lock);
 409        mutex_lock(&dev->v4l_lock);
 410
 411        /* Here is the only place where isoc get released */
 412        stk1160_uninit_isoc(dev);
 413
 414        /* ac97 unregister needs to be done before usb_device is cleared */
 415        stk1160_ac97_unregister(dev);
 416
 417        stk1160_clear_queue(dev);
 418
 419        video_unregister_device(&dev->vdev);
 420        v4l2_device_disconnect(&dev->v4l2_dev);
 421
 422        /* This way current users can detect device is gone */
 423        dev->udev = NULL;
 424
 425        mutex_unlock(&dev->v4l_lock);
 426        mutex_unlock(&dev->vb_queue_lock);
 427
 428        /*
 429         * This calls stk1160_release if it's the last reference.
 430         * therwise, release is posponed until there are no users left.
 431         */
 432        v4l2_device_put(&dev->v4l2_dev);
 433}
 434
 435static struct usb_driver stk1160_usb_driver = {
 436        .name = "stk1160",
 437        .id_table = stk1160_id_table,
 438        .probe = stk1160_probe,
 439        .disconnect = stk1160_disconnect,
 440};
 441
 442module_usb_driver(stk1160_usb_driver);
 443