Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
[pandora-kernel.git] / drivers / media / dvb / dvb-usb / au6610.c
index f3ff813..eb34cc3 100644 (file)
@@ -1,23 +1,32 @@
-/* DVB USB compliant linux driver for Sigmatek DVB-110 DVB-T USB2.0 receiver
+/*
+ * DVB USB Linux driver for Alcor Micro AU6610 DVB-T USB2.0.
  *
  * Copyright (C) 2006 Antti Palosaari <crope@iki.fi>
  *
- *     This program is free software; you can redistribute it and/or modify it
- *     under the terms of the GNU General Public License as published by the Free
- *     Software Foundation, version 2.
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
  *
- * see Documentation/dvb/README.dvb-usb for more information
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "au6610.h"
-
 #include "zl10353.h"
 #include "qt1010.h"
 
 /* debug */
 static int dvb_usb_au6610_debug;
 module_param_named(debug, dvb_usb_au6610_debug, int, 0644);
-MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
+MODULE_PARM_DESC(debug, "set debugging level" DVB_USB_DEBUG_STATUS);
+DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 
 static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr,
                          u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen)
@@ -40,9 +49,8 @@ static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr,
        }
 
        ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), operation,
-                             USB_TYPE_VENDOR|USB_DIR_IN, addr << 1, index, usb_buf,
-                             sizeof(usb_buf), AU6610_USB_TIMEOUT);
-
+                             USB_TYPE_VENDOR|USB_DIR_IN, addr << 1, index,
+                             usb_buf, sizeof(usb_buf), AU6610_USB_TIMEOUT);
        if (ret < 0)
                return ret;
 
@@ -114,15 +122,6 @@ static struct i2c_algorithm au6610_i2c_algo = {
 };
 
 /* Callbacks for DVB USB */
-static int au6610_identify_state(struct usb_device *udev,
-                                struct dvb_usb_device_properties *props,
-                                struct dvb_usb_device_description **desc,
-                                int *cold)
-{
-       *cold = 0;
-       return 0;
-}
-
 static struct zl10353_config au6610_zl10353_config = {
        .demod_address = 0x0f,
        .no_tuner = 1,
@@ -131,12 +130,12 @@ static struct zl10353_config au6610_zl10353_config = {
 
 static int au6610_zl10353_frontend_attach(struct dvb_usb_adapter *adap)
 {
-       if ((adap->fe = dvb_attach(zl10353_attach, &au6610_zl10353_config,
-                                  &adap->dev->i2c_adap)) != NULL) {
-               return 0;
-       }
+       adap->fe = dvb_attach(zl10353_attach, &au6610_zl10353_config,
+               &adap->dev->i2c_adap);
+       if (adap->fe == NULL)
+               return -ENODEV;
 
-       return -EIO;
+       return 0;
 }
 
 static struct qt1010_config au6610_qt1010_config = {
@@ -163,11 +162,13 @@ static int au6610_probe(struct usb_interface *intf,
        if (intf->num_altsetting < AU6610_ALTSETTING_COUNT)
                return -ENODEV;
 
-       if ((ret = dvb_usb_device_init(intf, &au6610_properties, THIS_MODULE, &d)) == 0) {
+       ret = dvb_usb_device_init(intf, &au6610_properties, THIS_MODULE, &d,
+                                 adapter_nr);
+       if (ret == 0) {
                alt = usb_altnum_to_altsetting(intf, AU6610_ALTSETTING);
 
                if (alt == NULL) {
-                       deb_rc("no alt found!\n");
+                       deb_info("%s: no alt found!\n", __func__);
                        return -ENODEV;
                }
                ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber,
@@ -177,18 +178,19 @@ static int au6610_probe(struct usb_interface *intf,
        return ret;
 }
 
-
 static struct usb_device_id au6610_table [] = {
        { USB_DEVICE(USB_VID_ALCOR_MICRO, USB_PID_SIGMATEK_DVB_110) },
        { }             /* Terminating entry */
 };
-MODULE_DEVICE_TABLE (usb, au6610_table);
+MODULE_DEVICE_TABLE(usb, au6610_table);
 
 static struct dvb_usb_device_properties au6610_properties = {
        .caps = DVB_USB_IS_AN_I2C_ADAPTER,
+
        .usb_ctrl = DEVICE_SPECIFIC,
-       .size_of_priv     = 0,
-       .identify_state   = au6610_identify_state,
+
+       .size_of_priv = 0,
+
        .num_adapters = 1,
        .adapter = {
                {
@@ -202,20 +204,22 @@ static struct dvb_usb_device_properties au6610_properties = {
                                .u = {
                                        .isoc = {
                                                .framesperurb = 40,
-                                               .framesize = 942,   /* maximum packet size */
-                                               .interval = 1.25,   /* 125 us */
+                                               .framesize = 942,
+                                               .interval = 1,
                                        }
                                }
                        },
                }
        },
+
        .i2c_algo = &au6610_i2c_algo,
+
        .num_device_descs = 1,
        .devices = {
                {
-                       "Sigmatek DVB-110 DVB-T USB2.0",
-                       { &au6610_table[0], NULL },
-                       { NULL },
+                       .name = "Sigmatek DVB-110 DVB-T USB2.0",
+                       .cold_ids = {NULL},
+                       .warm_ids = {&au6610_table[0], NULL},
                },
        }
 };
@@ -232,12 +236,11 @@ static int __init au6610_module_init(void)
 {
        int ret;
 
-       if ((ret = usb_register(&au6610_driver))) {
+       ret = usb_register(&au6610_driver);
+       if (ret)
                err("usb_register failed. Error number %d", ret);
-               return ret;
-       }
 
-       return 0;
+       return ret;
 }
 
 static void __exit au6610_module_exit(void)
@@ -246,10 +249,10 @@ static void __exit au6610_module_exit(void)
        usb_deregister(&au6610_driver);
 }
 
-module_init (au6610_module_init);
-module_exit (au6610_module_exit);
+module_init(au6610_module_init);
+module_exit(au6610_module_exit);
 
 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
-MODULE_DESCRIPTION("Driver Sigmatek DVB-110 DVB-T USB2.0 / AU6610");
+MODULE_DESCRIPTION("Driver for Alcor Micro AU6610 DVB-T USB2.0");
 MODULE_VERSION("0.1");
 MODULE_LICENSE("GPL");