speedtch minidrivers.h, NONE, 1.1 speedtch2.c, 1.4, 1.5 speedtch2.h,
1.3, 1.4 usbatm2.c, 1.4, 1.5
Duncan Sands
duncan at infradead.org
Fri Jan 21 09:49:33 EST 2005
- Previous message: speedtch speedtch2.c,1.3,1.4 speedtch2.h,1.2,1.3 usbatm2.c,1.3,1.4
- Next message: speedtch Makefile, 1.9, 1.10 speedtch2.c, 1.5, 1.6 speedtch2.h, 1.4,
1.5 usbatm2.c, 1.5, 1.6 minidrivers.h, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/speedtch
In directory phoenix.infradead.org:/tmp/cvs-serv21621
Modified Files:
speedtch2.c speedtch2.h usbatm2.c
Added Files:
minidrivers.h
Log Message:
The core is looking good. The drivers themselves are rather ill...
--- NEW FILE minidrivers.h ---
/******************************************************************************
* minidrivers.h - mini driver list
*
* Copyright (C) 2001, Alcatel
* Copyright (C) 2003, Duncan Sands, SolNegro, Josep Comas
* Copyright (C) 2004, David Woodhouse
*
* 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.
*
* 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., 59
* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
******************************************************************************/
#ifndef _MINIDRIVER_H_
#define _MINIDRIVER_H_
#ifdef CONFIG_USB_CXACRU
#include "cxacru2.h"
#define HAVE_HARDWARE
#endif
#ifdef CONFIG_USB_SPEEDTOUCH
#include "speedtch2.h"
#define HAVE_HARDWARE
#endif
#ifndef HAVE_HARDWARE
#error You need to configure some hardware for this driver
#endif
static const struct usb_device_id products [] = {
#ifdef CONFIG_USB_CXACRU
{
USB_DEVICE(0x0572, 0xcafe), /* V = Conexant P = ADSL modem (Euphrates project) */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x0572, 0xcb00), /* V = Conexant P = ADSL modem (Hasbani project) */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x0572, 0xcb01), /* V = Conexant P = ADSL modem */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x0572, 0xcb06), /* V = Conexant P = ADSL modem */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x08e3, 0x0100), /* V = Olitec P = ADSL modem version 2 */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x08e3, 0x0102), /* V = Olitec P = ADSL modem version 3 */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x0eb0, 0x3457), /* V = Trust/Amigo Technology Co. P = AMX-CA86U */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x1803, 0x5510), /* V = Zoom P = 5510 */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x0675, 0x0200), /* V = Draytek P = Vigor 318 */
.driver_info = (unsigned long) &cxacru_driver,
},
{
USB_DEVICE(0x0586, 0x330a), /* V = Zyxel P = 630-C1 aka OMNI ADSL USB modem */
.driver_info = (unsigned long) &cxacru_driver,
},
#endif
#ifdef CONFIG_USB_SPEEDTOUCH
{
USB_DEVICE(0x06b9, 0x4061),
.driver_info = (unsigned long) &speedtch_driver
},
#endif
{} /* END */
};
#endif /* _MINIDRIVER_H_ */
Index: speedtch2.c
===================================================================
RCS file: /home/cvs/speedtch/speedtch2.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- speedtch2.c 21 Jan 2005 12:46:31 -0000 1.4
+++ speedtch2.c 21 Jan 2005 14:49:29 -0000 1.5
@@ -92,7 +92,7 @@
#define hex2int(c) ( (c >= '0') && (c <= '9') ? (c - '0') : ((c & 0xf) + 9) )
struct speedtch_instance_data {
- struct usbatm_data usbatm;
+ struct usbatm_data *usbatm;
/* Status */
struct urb *int_urb;
@@ -121,10 +121,10 @@
** ATM **
**********/
-int speedtch_atm_init(struct usbatm_data *usbatm_data, struct atm_dev *atm_dev)
+int speedtch_atm_start(struct usbatm_data *usbatm, struct atm_dev *atm_dev)
{
- struct speedtch_instance_data *instance = usbatm_data->driver_data;
- struct usb_device *usb_dev = usbatm_data->usb_dev;
+ struct speedtch_instance_data *instance = usbatm->driver_data;
+ struct usb_device *usb_dev = usbatm->usb_dev;
int i;
unsigned char mac_str[13];
@@ -145,6 +145,26 @@
return 0;
}
+void speedtch_atm_stop(struct usbatm_data *usbatm, struct atm_dev *atm_dev)
+{
+ struct speedtch_instance_data *instance = usbatm->driver_data;
+
+ dbg("speedtch_usb_unbind entered");
+
+ if (instance->int_urb) {
+ struct urb *int_urb = instance->int_urb;
+ instance->int_urb = NULL;
+ wmb();
+ usb_unlink_urb(int_urb);
+ usb_free_urb(int_urb);
+ }
+
+ instance->int_data[0] = 1;
+ del_timer_sync(&instance->poll_timer);
+ wmb();
+ flush_scheduled_work();
+}
+
/***************
** firmware **
@@ -204,7 +224,7 @@
static int speedtch_set_swbuff(struct speedtch_instance_data *instance,
int state)
{
- struct usb_device *dev = instance->usbatm.usb_dev;
+ struct usb_device *dev = instance->usbatm->usb_dev;
int ret;
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
@@ -222,7 +242,7 @@
static void speedtch_test_sequence(struct speedtch_instance_data *instance)
{
- struct usb_device *dev = instance->usbatm.usb_dev;
+ struct usb_device *dev = instance->usbatm->usb_dev;
unsigned char buf[10];
int ret;
@@ -263,7 +283,7 @@
static int speedtch_start_synchro(struct speedtch_instance_data *instance)
{
- struct usb_device *dev = instance->usbatm.usb_dev;
+ struct usb_device *dev = instance->usbatm->usb_dev;
unsigned char buf[2];
int ret;
@@ -338,7 +358,7 @@
static int speedtch_get_status(struct speedtch_instance_data *instance,
unsigned char *buf)
{
- struct usb_device *dev = instance->usbatm.usb_dev;
+ struct usb_device *dev = instance->usbatm->usb_dev;
int ret;
memset(buf, 0, TOTAL);
@@ -402,28 +422,28 @@
switch (buf[OFFSET_7]) {
case 0:
- if (instance->usbatm.atm_dev->signal != ATM_PHY_SIG_LOST) {
- instance->usbatm.atm_dev->signal = ATM_PHY_SIG_LOST;
+ if (instance->usbatm->atm_dev->signal != ATM_PHY_SIG_LOST) {
+ instance->usbatm->atm_dev->signal = ATM_PHY_SIG_LOST;
printk(KERN_NOTICE "ADSL line is down\n");
}
break;
case 0x08:
- if (instance->usbatm.atm_dev->signal != ATM_PHY_SIG_UNKNOWN) {
- instance->usbatm.atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+ if (instance->usbatm->atm_dev->signal != ATM_PHY_SIG_UNKNOWN) {
+ instance->usbatm->atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
printk(KERN_NOTICE "ADSL line is blocked?\n");
}
break;
case 0x10:
- if (instance->usbatm.atm_dev->signal != ATM_PHY_SIG_LOST) {
- instance->usbatm.atm_dev->signal = ATM_PHY_SIG_LOST;
+ if (instance->usbatm->atm_dev->signal != ATM_PHY_SIG_LOST) {
+ instance->usbatm->atm_dev->signal = ATM_PHY_SIG_LOST;
printk(KERN_NOTICE "ADSL line is synchronising\n");
}
break;
case 0x20:
- if (instance->usbatm.atm_dev->signal != ATM_PHY_SIG_FOUND) {
+ if (instance->usbatm->atm_dev->signal != ATM_PHY_SIG_FOUND) {
int down_speed = buf[OFFSET_b] | (buf[OFFSET_b + 1] << 8)
| (buf[OFFSET_b + 2] << 16) | (buf[OFFSET_b + 3] << 24);
int up_speed = buf[OFFSET_b + 4] | (buf[OFFSET_b + 5] << 8)
@@ -434,8 +454,8 @@
down_speed >>= 16;
up_speed >>= 16;
}
- instance->usbatm.atm_dev->link_rate = down_speed * 1000 / 424;
- instance->usbatm.atm_dev->signal = ATM_PHY_SIG_FOUND;
+ instance->usbatm->atm_dev->link_rate = down_speed * 1000 / 424;
+ instance->usbatm->atm_dev->signal = ATM_PHY_SIG_FOUND;
printk(KERN_NOTICE
"ADSL line is up (%d Kib/s down | %d Kib/s up)\n",
@@ -444,8 +464,8 @@
break;
default:
- if (instance->usbatm.atm_dev->signal != ATM_PHY_SIG_UNKNOWN) {
- instance->usbatm.atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+ if (instance->usbatm->atm_dev->signal != ATM_PHY_SIG_UNKNOWN) {
+ instance->usbatm->atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
printk(KERN_NOTICE "Unknown line state %02x\n", buf[OFFSET_7]);
}
break;
@@ -466,7 +486,7 @@
const struct firmware *fw2)
{
unsigned char *buffer;
- struct usb_device *usb_dev = instance->usbatm.usb_dev;
+ struct usb_device *usb_dev = instance->usbatm->usb_dev;
struct usb_interface *intf;
int actual_length;
int ret;
@@ -603,29 +623,29 @@
const struct firmware **fw_p)
{
char buf[24];
- const u16 bcdDevice = instance->usbatm.usb_dev->descriptor.bcdDevice;
+ const u16 bcdDevice = instance->usbatm->usb_dev->descriptor.bcdDevice;
const u8 major_revision = bcdDevice >> 8;
const u8 minor_revision = bcdDevice & 0xff;
sprintf(buf, "speedtch-%d.bin.%x.%02x", phase, major_revision, minor_revision);
dbg("speedtch_find_firmware: looking for %s", buf);
- if (request_firmware(fw_p, buf, &instance->usbatm.usb_dev->dev)) {
+ if (request_firmware(fw_p, buf, &instance->usbatm->usb_dev->dev)) {
sprintf(buf, "speedtch-%d.bin.%x", phase, major_revision);
dbg("speedtch_find_firmware: looking for %s", buf);
- if (request_firmware(fw_p, buf, &instance->usbatm.usb_dev->dev)) {
+ if (request_firmware(fw_p, buf, &instance->usbatm->usb_dev->dev)) {
sprintf(buf, "speedtch-%d.bin", phase);
dbg("speedtch_find_firmware: looking for %s", buf);
- if (request_firmware(fw_p, buf, &instance->usbatm.usb_dev->dev)) {
- dev_warn(&instance->usbatm.usb_dev->dev, "no stage %d firmware found!", phase);
+ if (request_firmware(fw_p, buf, &instance->usbatm->usb_dev->dev)) {
+ dev_warn(&instance->usbatm->usb_dev->dev, "no stage %d firmware found!", phase);
return -ENOENT;
}
}
}
- dev_info(&instance->usbatm.usb_dev->dev, "found stage %d firmware %s\n", phase, buf);
+ dev_info(&instance->usbatm->usb_dev->dev, "found stage %d firmware %s\n", phase, buf);
return 0;
}
@@ -693,6 +713,7 @@
if ((ret = usb_set_interface(dev, 2, 0)) < 0)
goto fail;
+ instance->usbatm = usbatm;
usbatm->driver_data = instance;
return 0;
@@ -702,23 +723,3 @@
return -ENOMEM;
}
-
-void speedtch_unbind(struct usbatm_data *usbatm, struct usb_interface *intf)
-{
- struct speedtch_instance_data *instance = usbatm->driver_data;
-
- dbg("speedtch_usb_unbind entered");
-
- if (instance->int_urb) {
- struct urb *int_urb = instance->int_urb;
- instance->int_urb = NULL;
- wmb();
- usb_unlink_urb(int_urb);
- usb_free_urb(int_urb);
- }
-
- instance->int_data[0] = 1;
- del_timer_sync(&instance->poll_timer);
- wmb();
- flush_scheduled_work();
-}
Index: speedtch2.h
===================================================================
RCS file: /home/cvs/speedtch/speedtch2.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- speedtch2.h 21 Jan 2005 12:46:31 -0000 1.3
+++ speedtch2.h 21 Jan 2005 14:49:29 -0000 1.4
@@ -28,17 +28,20 @@
#include "usbatm.h"
int speedtch_bind(struct usbatm_data *usbatm, struct usb_interface *intf);
-void speedtch_unbind(struct usbatm_data *usbatm, struct usb_interface *intf);
int speedtch_load_firmware(struct usbatm_data *usbatm, struct usb_interface *intf);
-int speedtch_atm_init(struct usbatm_data *usbatm_data, struct atm_dev *atm_dev);
+int speedtch_atm_start(struct usbatm_data *usbatm_data, struct atm_dev *atm_dev);
+void speedtch_atm_stop(struct usbatm_data *usbatm_data, struct atm_dev *atm_dev);
static const struct usbatm_driver speedtch_driver = {
.driver_name = "speedtch",
.bind = speedtch_bind,
- .unbind = speedtch_unbind,
#ifdef CONFIG_FW_LOADER
.heavy_init = speedtch_load_firmware,
#endif
+
+ .atm_start = speedtch_atm_start,
+ .atm_stop = speedtch_atm_stop,
+
.in = 7, .out = 7
};
Index: usbatm2.c
===================================================================
RCS file: /home/cvs/speedtch/usbatm2.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- usbatm2.c 21 Jan 2005 12:46:31 -0000 1.4
+++ usbatm2.c 21 Jan 2005 14:49:29 -0000 1.5
@@ -22,7 +22,7 @@
******************************************************************************/
/*
- * Written by Johan Verrept, maintained by Duncan Sands (duncan.sands at free.fr)
+ * Written by Johan Verrept, Duncan Sands (duncan.sands at free.fr) and David Woodhouse
*
* 1.7+: - See the check-in logs
*
@@ -97,7 +97,7 @@
#endif
#define DRIVER_AUTHOR "Johan Verrept, Duncan Sands <duncan.sands at free.fr>"
-#define DRIVER_VERSION "1.8"
+#define DRIVER_VERSION "1.9"
#define DRIVER_DESC "Generic USB ATM/DSL I/O, version " DRIVER_VERSION
static const char driver_name[] = "usbatm";
@@ -744,14 +744,14 @@
return err;
}
+
/********************
** bean counting **
********************/
static void udsl_destroy_instance(struct kref *kref)
{
- struct usbatm_data *instance =
- container_of(kref, struct usbatm_data, refcount);
+ struct usbatm_data *instance = container_of(kref, struct usbatm_data, refcount);
tasklet_kill(&instance->receive_tasklet);
tasklet_kill(&instance->send_tasklet);
@@ -769,6 +769,7 @@
kref_put(&instance->refcount, udsl_destroy_instance);
}
+
/**********
** ATM **
**********/
@@ -778,7 +779,7 @@
struct usbatm_data *instance = dev->dev_data;
dev->dev_data = NULL;
- udsl_put_instance(instance);
+ udsl_put_instance(instance); /* taken in usbatm_atm_init */
}
static int udsl_atm_proc_read(struct atm_dev *atm_dev, loff_t * pos, char *page)
@@ -822,16 +823,10 @@
break;
}
- if (instance->usb_dev->state == USB_STATE_NOTATTACHED)
+ if (instance->bound)
+ strcat(page, ", ready\n");
+ else
strcat(page, ", disconnected\n");
- else {
- if (instance->status == UDSL_LOADED_FIRMWARE)
- strcat(page, ", firmware loaded\n");
- else if (instance->status == UDSL_LOADING_FIRMWARE)
- strcat(page, ", firmware loading\n");
- else
- strcat(page, ", no firmware\n");
- }
return strlen(page);
}
@@ -846,7 +841,6 @@
unsigned int max_pdu;
int vci = vcc->vci;
short vpi = vcc->vpi;
- int err;
dbg("udsl_atm_open: vpi %hd, vci %d", vpi, vci);
@@ -862,12 +856,6 @@
return -EINVAL;
}
- if (instance->firmware_wait &&
- (err = instance->firmware_wait(instance)) < 0) {
- dbg("udsl_atm_open: firmware not loaded (%d)!", err);
- return err;
- }
-
down(&instance->serialize); /* vs self, udsl_atm_close */
if (udsl_find_vcc(instance, vpi, vci)) {
@@ -971,37 +959,52 @@
struct atm_dev *atm_dev;
int ret;
+ down(&instance->serialize);
+
+ if (!instance->bound) {
+ dbg("usbatm_atm_init: device disconnected!");
+ ret = -ENODEV;
+ goto fail;
+ }
+
/* ATM init */
atm_dev = atm_dev_register(instance->driver->driver_name, &udsl_atm_devops, -1, NULL);
if (!atm_dev) {
dbg("usbatm_atm_init: failed to register ATM device!");
- return -1;
+ ret = -1;
+ goto fail;
}
- instance->atm_dev->ci_range.vpi_bits = ATM_CI_MAX;
- instance->atm_dev->ci_range.vci_bits = ATM_CI_MAX;
- instance->atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
+ udsl_get_instance(instance); /* dropped in udsl_atm_dev_close */
+
+ atm_dev->ci_range.vpi_bits = ATM_CI_MAX;
+ atm_dev->ci_range.vci_bits = ATM_CI_MAX;
+ atm_dev->signal = ATM_PHY_SIG_UNKNOWN;
/* temp init ATM device, set to 128kbit */
- instance->atm_dev->link_rate = 128 * 1000 / 424;
+ atm_dev->link_rate = 128 * 1000 / 424;
- instance->atm_dev = atm_dev;
+ atm_dev = atm_dev;
- if (instance->driver->atm_init && ((ret = instance->driver->atm_init(instance, atm_dev)) < 0))
- goto fail_free;
+ if (instance->driver->atm_start && ((ret = instance->driver->atm_start(instance, atm_dev)) < 0))
+ goto fail_close;
- udsl_get_instance(instance); /* one for ATM */
+ instance->atm_dev = atm_dev;
/* ready for ATM callbacks */
wmb();
- instance->atm_dev->dev_data = instance;
+ atm_dev->dev_data = instance;
+
+ up(&instance->serialize);
return 0;
- fail_free:
- shutdown_atm_dev(atm_dev); //QQ is this the right thing to use?
- kfree(atm_dev); //QQ should we be doing this?
- instance->atm_dev = NULL; //QQ likewise
+ fail_close:
+ shutdown_atm_dev(atm_dev); /* udsl_atm_dev_close will eventually be called */
+
+ fail:
+ up(&instance->serialize);
+
return ret;
}
@@ -1023,7 +1026,7 @@
ret = usbatm_atm_init(instance);
module_put(THIS_MODULE);
- udsl_put_instance(instance);
+ udsl_put_instance(instance); /* taken in usbatm_heavy_init */
return ret;
}
@@ -1032,7 +1035,7 @@
{
int ret;
- udsl_get_instance(instance);
+ udsl_get_instance(instance); /* dropped below or in usbatm_do_heavy_init */
try_module_get(THIS_MODULE);
ret = kernel_thread(usbatm_do_heavy_init, instance, CLONE_FS | CLONE_FILES);
@@ -1043,7 +1046,7 @@
dbg("usbatm_heavy_init: kernel_thread failed (%d)!", ret);
module_put(THIS_MODULE);
- udsl_put_instance(instance);
+ udsl_put_instance(instance); /* taken above */
return ret;
}
@@ -1088,9 +1091,6 @@
INIT_LIST_HEAD(&instance->vcc_list);
- instance->status = UDSL_NO_FIRMWARE;
- init_waitqueue_head(&instance->firmware_waiters);
-
spin_lock_init(&instance->receive_lock);
INIT_LIST_HEAD(&instance->spare_receivers);
INIT_LIST_HEAD(&instance->filled_receive_buffers);
@@ -1189,17 +1189,18 @@
if (driver->bind && (error = driver->bind(instance, intf)) < 0)
goto fail;
- usb_get_dev(dev);
+ instance->bound = 1;
if (driver->heavy_init)
error = usbatm_heavy_init(instance);
else
error = usbatm_atm_init(instance);
- if (!error)
+ if (!error) {
+ usb_get_dev(dev);
+ udsl_get_instance(instance); /* dropped in usbatm_disconnect */
return 0;
-
- usb_put_dev(dev);
+ }
fail:
for (i = 0; i < num_snd_bufs; i++)
@@ -1233,6 +1234,13 @@
usb_set_intfdata(intf, NULL);
+ down(&instance->serialize);
+ instance->bound = 0;
+ up(&instance->serialize);
+
+ if (instance->atm_dev && instance->driver->atm_stop)
+ instance->driver->atm_stop(instance, instance->atm_dev);
+
if (instance->driver->unbind)
instance->driver->unbind(instance, intf);
@@ -1274,90 +1282,21 @@
kfree(instance->send_buffers[i].base);
/* ATM finalize */
- shutdown_atm_dev(instance->atm_dev); //QQ what if never initialized?
+ if (instance->atm_dev)
+ shutdown_atm_dev(instance->atm_dev);
- udsl_put_instance(instance);
+ udsl_put_instance(instance); /* taken in usbatm_usb_probe */
}
-/*******************
-** mini drivers **
-*******************/
-
-#ifdef CONFIG_USB_CXACRU
-#include "cxacru2.h"
-#define HAVE_HARDWARE
-#endif
-
-#ifdef CONFIG_USB_SPEEDTOUCH
-#include "speedtch2.h"
-#define HAVE_HARDWARE
-#endif
-
-#ifndef HAVE_HARDWARE
-#error You need to configure some hardware for this driver
-#endif
-
-static const struct usb_device_id products [] = {
-#ifdef CONFIG_USB_CXACRU
-{
- USB_DEVICE(0x0572, 0xcafe), /* V = Conexant P = ADSL modem (Euphrates project) */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x0572, 0xcb00), /* V = Conexant P = ADSL modem (Hasbani project) */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x0572, 0xcb01), /* V = Conexant P = ADSL modem */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x0572, 0xcb06), /* V = Conexant P = ADSL modem */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x08e3, 0x0100), /* V = Olitec P = ADSL modem version 2 */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x08e3, 0x0102), /* V = Olitec P = ADSL modem version 3 */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x0eb0, 0x3457), /* V = Trust/Amigo Technology Co. P = AMX-CA86U */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x1803, 0x5510), /* V = Zoom P = 5510 */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x0675, 0x0200), /* V = Draytek P = Vigor 318 */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-{
- USB_DEVICE(0x0586, 0x330a), /* V = Zyxel P = 630-C1 aka OMNI ADSL USB modem */
- .driver_info = (unsigned long) &cxacru_driver,
-},
-#endif
-
-#ifdef CONFIG_USB_SPEEDTOUCH
-{
- USB_DEVICE(0x06b9, 0x4061),
- .driver_info = (unsigned long) &speedtch_driver
-},
-#endif
- {} /* END */
-};
-
-MODULE_DEVICE_TABLE (usb, products);
-
-
/***********
** init **
***********/
+#include "minidrivers.h"
+
+MODULE_DEVICE_TABLE (usb, products);
+
static struct usb_driver usbatm_driver = {
.owner = THIS_MODULE,
.name = driver_name,
- Previous message: speedtch speedtch2.c,1.3,1.4 speedtch2.h,1.2,1.3 usbatm2.c,1.3,1.4
- Next message: speedtch Makefile, 1.9, 1.10 speedtch2.c, 1.5, 1.6 speedtch2.h, 1.4,
1.5 usbatm2.c, 1.5, 1.6 minidrivers.h, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Usbatm-commits
mailing list