0a99a7950b
Add support for the Zoom 3095 USB Fax Modem. There are some problems with this modem: 1) The CS descriptors were placed after all other descriptors rather than in the Control Interface. This is true in both configurations and is the issue this patch deals with. 2) Modem audio is not done on the modem. There is a second configuration with an extra interface (3 interfaces) which presumably is for handling audio. This patch does not support that. 3) The interrupts are raised a bit slowly. This means that pppd(8) needs to wait a bit before trying to read from the link (i.e., just before the get_input() loop in src/dist/pppd/pppd/main.c line 547). If you don't wait, then DCD will not be detected high before that first read and get_input() will drop the line. This is not a problem if you use the "local" option to pppd(8) and ignore DCD, but that is less than desirable. 4) You apparently have to toggle "RSDL (DCD) option"[1] when you initialize the modem or you will never see a second DCD high interrupt when redialing after a disconnect. Without this the pppd(8) "persist" mode will not work. Presumably, some extra initialization is missing from the driver for this chipset. [1] Send the AT commands: AT&C0 followed by AT&C1 - doing it in one command doesn't work. The AT commands for this modem are at: http://www.zoom.com/documentation/dial_up/3095F_ATcommands.pdf
56 lines
2.9 KiB
C
56 lines
2.9 KiB
C
/* $NetBSD: usb_quirks.h,v 1.25 2010/10/01 20:56:10 christos Exp $ */
|
|
/* $FreeBSD: src/sys/dev/usb/usb_quirks.h,v 1.9 1999/11/12 23:31:03 n_hibma Exp $ */
|
|
|
|
/*
|
|
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This code is derived from software contributed to The NetBSD Foundation
|
|
* by Lennart Augustsson (lennart@augustsson.net) at
|
|
* Carlstedt Research & Technology.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
struct usbd_quirks {
|
|
u_int32_t uq_flags; /* Device problems: */
|
|
#define UQ_NO_SET_PROTO 0x0001 /* cannot handle SET PROTOCOL. */
|
|
#define UQ_SWAP_UNICODE 0x0002 /* has some Unicode strings swapped. */
|
|
#define UQ_MS_REVZ 0x0004 /* mouse has Z-axis reversed */
|
|
#define UQ_NO_STRINGS 0x0008 /* string descriptors are broken. */
|
|
#define UQ_BAD_ADC 0x0010 /* bad audio spec version number. */
|
|
#define UQ_BAD_AUDIO 0x0040 /* device claims audio class, but isn't */
|
|
#define UQ_SPUR_BUT_UP 0x0080 /* spurious mouse button up events */
|
|
#define UQ_AU_NO_XU 0x0100 /* audio device has broken extension unit */
|
|
#define UQ_AU_NO_FRAC 0x0400 /* don't adjust for fractional samples */
|
|
#define UQ_AU_INP_ASYNC 0x0800 /* input is async despite claim of adaptive */
|
|
#define UQ_ASSUME_CM_OVER_DATA 0x1000 /* modem device breaks on cm over data */
|
|
#define UQ_BROKEN_BIDIR 0x2000 /* printer has broken bidir mode */
|
|
#define UQ_HID_IGNORE 0x4000 /* device should be ignored by hid class */
|
|
#define UQ_NO_UNION_NRM 0x8000 /* has no normal UNION descriptor */
|
|
#define UQ_LOST_CS_DESC 0x10000 /* look everywhere for the CS descriptors */
|
|
};
|
|
|
|
extern const struct usbd_quirks usbd_no_quirk;
|
|
|
|
const struct usbd_quirks *usbd_find_quirk(usb_device_descriptor_t *);
|