mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
staging: irda: remove the irda network stack and drivers
No one has publicly stepped up to maintain this broken codebase for devices that no one uses anymore, so let's just drop the whole thing. If someone really wants/needs it, we can revert this and they can fix the code up to work properly. Cc: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
To use the IrDA protocols within Linux you will need to get a suitable copy
|
||||
of the IrDA Utilities. More detailed information about these and associated
|
||||
programs can be found on http://irda.sourceforge.net/
|
||||
|
||||
For more information about how to use the IrDA protocol stack, see the
|
||||
Linux Infrared HOWTO by Werner Heuser <wehe@tuxmobil.org>:
|
||||
<http://www.tuxmobil.org/Infrared-HOWTO/Infrared-HOWTO.html>
|
||||
|
||||
There is an active mailing list for discussing Linux-IrDA matters called
|
||||
irda-users@lists.sourceforge.net
|
||||
@@ -24,8 +24,6 @@ menuconfig STAGING
|
||||
|
||||
if STAGING
|
||||
|
||||
source "drivers/staging/irda/net/Kconfig"
|
||||
|
||||
source "drivers/staging/ipx/Kconfig"
|
||||
|
||||
source "drivers/staging/ncpfs/Kconfig"
|
||||
|
||||
@@ -5,8 +5,6 @@ obj-y += media/
|
||||
obj-y += typec/
|
||||
obj-$(CONFIG_IPX) += ipx/
|
||||
obj-$(CONFIG_NCP_FS) += ncpfs/
|
||||
obj-$(CONFIG_IRDA) += irda/net/
|
||||
obj-$(CONFIG_IRDA) += irda/drivers/
|
||||
obj-$(CONFIG_PRISM2_USB) += wlan-ng/
|
||||
obj-$(CONFIG_COMEDI) += comedi/
|
||||
obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
The irda code will be removed soon from the kernel tree as it is old and
|
||||
obsolete and broken.
|
||||
|
||||
Don't worry about fixing up anything here, it's not needed.
|
||||
@@ -1,398 +0,0 @@
|
||||
menu "Infrared-port device drivers"
|
||||
depends on IRDA!=n
|
||||
|
||||
comment "SIR device drivers"
|
||||
|
||||
config IRTTY_SIR
|
||||
tristate "IrTTY (uses Linux serial driver)"
|
||||
depends on IRDA && TTY
|
||||
help
|
||||
Say Y here if you want to build support for the IrTTY line
|
||||
discipline. To compile it as a module, choose M here: the module
|
||||
will be called irtty-sir. IrTTY makes it possible to use Linux's
|
||||
own serial driver for all IrDA ports that are 16550 compatible.
|
||||
Most IrDA chips are 16550 compatible so you should probably say Y
|
||||
to this option. Using IrTTY will however limit the speed of the
|
||||
connection to 115200 bps (IrDA SIR mode).
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
config BFIN_SIR
|
||||
tristate "Blackfin SIR on UART"
|
||||
depends on BLACKFIN && IRDA
|
||||
default n
|
||||
help
|
||||
Say Y here if your want to enable SIR function on Blackfin UART
|
||||
devices.
|
||||
|
||||
To activate this driver you can start irattach like:
|
||||
"irattach irda0 -s"
|
||||
|
||||
Saying M, it will be built as a module named bfin_sir.
|
||||
|
||||
Note that you need to turn off one of the serial drivers for SIR
|
||||
to use that UART.
|
||||
|
||||
config BFIN_SIR0
|
||||
bool "Blackfin SIR on UART0"
|
||||
depends on BFIN_SIR && !SERIAL_BFIN_UART0
|
||||
|
||||
config BFIN_SIR1
|
||||
bool "Blackfin SIR on UART1"
|
||||
depends on BFIN_SIR && !SERIAL_BFIN_UART1 && (!BF531 && !BF532 && !BF533 && !BF561)
|
||||
|
||||
config BFIN_SIR2
|
||||
bool "Blackfin SIR on UART2"
|
||||
depends on BFIN_SIR && !SERIAL_BFIN_UART2 && (BF54x || BF538 || BF539)
|
||||
|
||||
config BFIN_SIR3
|
||||
bool "Blackfin SIR on UART3"
|
||||
depends on BFIN_SIR && !SERIAL_BFIN_UART3 && (BF54x)
|
||||
|
||||
choice
|
||||
prompt "SIR Mode"
|
||||
depends on BFIN_SIR
|
||||
default SIR_BFIN_DMA
|
||||
|
||||
config SIR_BFIN_DMA
|
||||
bool "DMA mode"
|
||||
depends on !DMA_UNCACHED_NONE
|
||||
|
||||
config SIR_BFIN_PIO
|
||||
bool "PIO mode"
|
||||
endchoice
|
||||
|
||||
config SH_SIR
|
||||
tristate "SuperH SIR on UART"
|
||||
depends on IRDA && SUPERH && \
|
||||
(CPU_SUBTYPE_SH7722 || CPU_SUBTYPE_SH7723 || \
|
||||
CPU_SUBTYPE_SH7724)
|
||||
default n
|
||||
help
|
||||
Say Y here if your want to enable SIR function on SuperH UART
|
||||
devices.
|
||||
|
||||
comment "Dongle support"
|
||||
|
||||
config DONGLE
|
||||
bool "Serial dongle support"
|
||||
depends on IRTTY_SIR
|
||||
help
|
||||
Say Y here if you have an infrared device that connects to your
|
||||
computer's serial port. These devices are called dongles. Then say Y
|
||||
or M to the driver for your particular dongle below.
|
||||
|
||||
Note that the answer to this question won't directly affect the
|
||||
kernel: saying N will just cause the configurator to skip all
|
||||
the questions about serial dongles.
|
||||
|
||||
config ESI_DONGLE
|
||||
tristate "ESI JetEye PC dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Extended Systems
|
||||
JetEye PC dongle. To compile it as a module, choose M here. The ESI
|
||||
dongle attaches to the normal 9-pin serial port connector, and can
|
||||
currently only be used by IrTTY. To activate support for ESI
|
||||
dongles you will have to start irattach like this:
|
||||
"irattach -d esi".
|
||||
|
||||
config ACTISYS_DONGLE
|
||||
tristate "ACTiSYS IR-220L and IR220L+ dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the ACTiSYS IR-220L and
|
||||
IR220L+ dongles. To compile it as a module, choose M here. The
|
||||
ACTiSYS dongles attaches to the normal 9-pin serial port connector,
|
||||
and can currently only be used by IrTTY. To activate support for
|
||||
ACTiSYS dongles you will have to start irattach like this:
|
||||
"irattach -d actisys" or "irattach -d actisys+".
|
||||
|
||||
config TEKRAM_DONGLE
|
||||
tristate "Tekram IrMate 210B dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Tekram IrMate 210B
|
||||
dongle. To compile it as a module, choose M here. The Tekram dongle
|
||||
attaches to the normal 9-pin serial port connector, and can
|
||||
currently only be used by IrTTY. To activate support for Tekram
|
||||
dongles you will have to start irattach like this:
|
||||
"irattach -d tekram".
|
||||
|
||||
config TOIM3232_DONGLE
|
||||
tristate "TOIM3232 IrDa dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Vishay/Temic
|
||||
TOIM3232 and TOIM4232 based dongles.
|
||||
To compile it as a module, choose M here.
|
||||
|
||||
config LITELINK_DONGLE
|
||||
tristate "Parallax LiteLink dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Parallax Litelink
|
||||
dongle. To compile it as a module, choose M here. The Parallax
|
||||
dongle attaches to the normal 9-pin serial port connector, and can
|
||||
currently only be used by IrTTY. To activate support for Parallax
|
||||
dongles you will have to start irattach like this:
|
||||
"irattach -d litelink".
|
||||
|
||||
config MA600_DONGLE
|
||||
tristate "Mobile Action MA600 dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Mobile Action MA600
|
||||
dongle. To compile it as a module, choose M here. The MA600 dongle
|
||||
attaches to the normal 9-pin serial port connector, and can
|
||||
currently only be used by IrTTY. The driver should also support
|
||||
the MA620 USB version of the dongle, if the integrated USB-to-RS232
|
||||
converter is supported by usbserial. To activate support for
|
||||
MA600 dongle you will have to start irattach like this:
|
||||
"irattach -d ma600".
|
||||
|
||||
config GIRBIL_DONGLE
|
||||
tristate "Greenwich GIrBIL dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Greenwich GIrBIL
|
||||
dongle. If you want to compile it as a module, choose M here.
|
||||
The Greenwich dongle attaches to the normal 9-pin serial port
|
||||
connector, and can currently only be used by IrTTY. To activate
|
||||
support for Greenwich dongles you will have to start irattach
|
||||
like this: "irattach -d girbil".
|
||||
|
||||
config MCP2120_DONGLE
|
||||
tristate "Microchip MCP2120"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Microchip MCP2120
|
||||
dongle. If you want to compile it as a module, choose M here.
|
||||
The MCP2120 dongle attaches to the normal 9-pin serial port
|
||||
connector, and can currently only be used by IrTTY. To activate
|
||||
support for MCP2120 dongles you will have to start irattach
|
||||
like this: "irattach -d mcp2120".
|
||||
|
||||
You must build this dongle yourself. For more information see:
|
||||
<http://www.eyetap.org/~tangf/irda_sir_linux.html>
|
||||
|
||||
config OLD_BELKIN_DONGLE
|
||||
tristate "Old Belkin dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the Adaptec Airport 1000
|
||||
and 2000 dongles. If you want to compile it as a module, choose
|
||||
M here. Some information is contained in the comments
|
||||
at the top of <file:drivers/net/irda/old_belkin-sir.c>.
|
||||
|
||||
config ACT200L_DONGLE
|
||||
tristate "ACTiSYS IR-200L dongle"
|
||||
depends on IRTTY_SIR && DONGLE && IRDA
|
||||
help
|
||||
Say Y here if you want to build support for the ACTiSYS IR-200L
|
||||
dongle. If you want to compile it as a module, choose M here.
|
||||
The ACTiSYS IR-200L dongle attaches to the normal 9-pin serial
|
||||
port connector, and can currently only be used by IrTTY.
|
||||
To activate support for ACTiSYS IR-200L dongle you will have to
|
||||
start irattach like this: "irattach -d act200l".
|
||||
|
||||
config KINGSUN_DONGLE
|
||||
tristate "KingSun/DonShine DS-620 IrDA-USB dongle"
|
||||
depends on IRDA && USB
|
||||
help
|
||||
Say Y or M here if you want to build support for the KingSun/DonShine
|
||||
DS-620 IrDA-USB bridge device driver.
|
||||
|
||||
This USB bridge does not conform to the IrDA-USB device class
|
||||
specification, and therefore needs its own specific driver. This
|
||||
dongle supports SIR speed only (9600 bps).
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
kingsun-sir.
|
||||
|
||||
config KSDAZZLE_DONGLE
|
||||
tristate "KingSun Dazzle IrDA-USB dongle"
|
||||
depends on IRDA && USB
|
||||
help
|
||||
Say Y or M here if you want to build support for the KingSun Dazzle
|
||||
IrDA-USB bridge device driver.
|
||||
|
||||
This USB bridge does not conform to the IrDA-USB device class
|
||||
specification, and therefore needs its own specific driver. This
|
||||
dongle supports SIR speeds only (9600 through 115200 bps).
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
ksdazzle-sir.
|
||||
|
||||
config KS959_DONGLE
|
||||
tristate "KingSun KS-959 IrDA-USB dongle"
|
||||
depends on IRDA && USB
|
||||
help
|
||||
Say Y or M here if you want to build support for the KingSun KS-959
|
||||
IrDA-USB bridge device driver.
|
||||
|
||||
This USB bridge does not conform to the IrDA-USB device class
|
||||
specification, and therefore needs its own specific driver. This
|
||||
dongle supports SIR speeds only (9600 through 57600 bps).
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
ks959-sir.
|
||||
|
||||
comment "FIR device drivers"
|
||||
|
||||
config USB_IRDA
|
||||
tristate "IrDA USB dongles"
|
||||
depends on IRDA && USB
|
||||
select FW_LOADER
|
||||
---help---
|
||||
Say Y here if you want to build support for the USB IrDA FIR Dongle
|
||||
device driver. To compile it as a module, choose M here: the module
|
||||
will be called irda-usb. IrDA-USB support the various IrDA USB
|
||||
dongles available and most of their peculiarities. Those dongles
|
||||
plug in the USB port of your computer, are plug and play, and
|
||||
support SIR and FIR (4Mbps) speeds. On the other hand, those
|
||||
dongles tend to be less efficient than a FIR chipset.
|
||||
|
||||
Please note that the driver is still experimental. And of course,
|
||||
you will need both USB and IrDA support in your kernel...
|
||||
|
||||
config SIGMATEL_FIR
|
||||
tristate "SigmaTel STIr4200 bridge"
|
||||
depends on IRDA && USB
|
||||
select CRC32
|
||||
---help---
|
||||
Say Y here if you want to build support for the SigmaTel STIr4200
|
||||
USB IrDA FIR bridge device driver.
|
||||
|
||||
USB bridge based on the SigmaTel STIr4200 don't conform to the
|
||||
IrDA-USB device class specification, and therefore need their
|
||||
own specific driver. Those dongles support SIR and FIR (4Mbps)
|
||||
speeds.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
stir4200.
|
||||
|
||||
config NSC_FIR
|
||||
tristate "NSC PC87108/PC87338"
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the NSC PC87108 and
|
||||
PC87338 IrDA chipsets. This driver supports SIR,
|
||||
MIR and FIR (4Mbps) speeds.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
nsc-ircc.
|
||||
|
||||
config WINBOND_FIR
|
||||
tristate "Winbond W83977AF (IR)"
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build IrDA support for the Winbond
|
||||
W83977AF super-io chipset. This driver should be used for the IrDA
|
||||
chipset in the Corel NetWinder. The driver supports SIR, MIR and
|
||||
FIR (4Mbps) speeds.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
w83977af_ir.
|
||||
|
||||
config TOSHIBA_FIR
|
||||
tristate "Toshiba Type-O IR Port"
|
||||
depends on IRDA && PCI && !64BIT && VIRT_TO_BUS
|
||||
help
|
||||
Say Y here if you want to build support for the Toshiba Type-O IR
|
||||
and Donau oboe chipsets. These chipsets are used by the Toshiba
|
||||
Libretto 100/110CT, Tecra 8100, Portege 7020 and many more laptops.
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
donauboe.
|
||||
|
||||
config AU1000_FIR
|
||||
tristate "Alchemy IrDA SIR/FIR"
|
||||
depends on IRDA && MIPS_ALCHEMY
|
||||
help
|
||||
Say Y/M here to build support the IrDA peripheral on the
|
||||
Alchemy Au1000 and Au1100 SoCs.
|
||||
Say M to build a module; it will be called au1k_ir.ko
|
||||
|
||||
config SMC_IRCC_FIR
|
||||
tristate "SMSC IrCC"
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the SMC Infrared
|
||||
Communications Controller. It is used in a wide variety of
|
||||
laptops (Fujitsu, Sony, Compaq and some Toshiba).
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
smsc-ircc2.o.
|
||||
|
||||
config ALI_FIR
|
||||
tristate "ALi M5123 FIR"
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the ALi M5123 FIR
|
||||
Controller. The ALi M5123 FIR Controller is embedded in ALi M1543C,
|
||||
M1535, M1535D, M1535+, M1535D South Bridge. This driver supports
|
||||
SIR, MIR and FIR (4Mbps) speeds.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
ali-ircc.
|
||||
|
||||
config VLSI_FIR
|
||||
tristate "VLSI 82C147 SIR/MIR/FIR"
|
||||
depends on IRDA && PCI
|
||||
help
|
||||
Say Y here if you want to build support for the VLSI 82C147
|
||||
PCI-IrDA Controller. This controller is used by the HP OmniBook 800
|
||||
and 5500 notebooks. The driver provides support for SIR, MIR and
|
||||
FIR (4Mbps) speeds.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
vlsi_ir.
|
||||
|
||||
config SA1100_FIR
|
||||
tristate "SA1100 Internal IR"
|
||||
depends on ARCH_SA1100 && IRDA && DMA_SA11X0
|
||||
|
||||
config VIA_FIR
|
||||
tristate "VIA VT8231/VT1211 SIR/MIR/FIR"
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the VIA VT8231
|
||||
and VIA VT1211 IrDA controllers, found on the motherboards using
|
||||
those VIA chipsets. To use this controller, you will need
|
||||
to plug a specific 5 pins FIR IrDA dongle in the specific
|
||||
motherboard connector. The driver provides support for SIR, MIR
|
||||
and FIR (4Mbps) speeds.
|
||||
|
||||
You will need to specify the 'dongle_id' module parameter to
|
||||
indicate the FIR dongle attached to the controller.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
via-ircc.
|
||||
|
||||
config PXA_FICP
|
||||
tristate "Intel PXA2xx Internal FICP"
|
||||
depends on ARCH_PXA && IRDA
|
||||
help
|
||||
Say Y or M here if you want to build support for the PXA2xx
|
||||
built-in IRDA interface which can support both SIR and FIR.
|
||||
This driver relies on platform specific helper routines so
|
||||
available capabilities may vary from one PXA2xx target to
|
||||
another.
|
||||
|
||||
config MCS_FIR
|
||||
tristate "MosChip MCS7780 IrDA-USB dongle"
|
||||
depends on IRDA && USB
|
||||
select CRC32
|
||||
help
|
||||
Say Y or M here if you want to build support for the MosChip
|
||||
MCS7780 IrDA-USB bridge device driver.
|
||||
|
||||
USB bridge based on the MosChip MCS7780 don't conform to the
|
||||
IrDA-USB device class specification, and therefore need their
|
||||
own specific driver. Those dongles support SIR and FIR (4Mbps)
|
||||
speeds.
|
||||
|
||||
To compile it as a module, choose M here: the module will be called
|
||||
mcs7780.
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
#
|
||||
# Makefile for the Linux IrDA infrared port device drivers.
|
||||
#
|
||||
# 9 Aug 2000, Christoph Hellwig <hch@infradead.org>
|
||||
# Rewritten to use lists instead of if-statements.
|
||||
#
|
||||
|
||||
subdir-ccflags-y += -I$(srctree)/drivers/staging/irda/include
|
||||
|
||||
# FIR drivers
|
||||
obj-$(CONFIG_USB_IRDA) += irda-usb.o
|
||||
obj-$(CONFIG_SIGMATEL_FIR) += stir4200.o
|
||||
obj-$(CONFIG_NSC_FIR) += nsc-ircc.o
|
||||
obj-$(CONFIG_WINBOND_FIR) += w83977af_ir.o
|
||||
obj-$(CONFIG_SA1100_FIR) += sa1100_ir.o
|
||||
obj-$(CONFIG_TOSHIBA_FIR) += donauboe.o
|
||||
obj-$(CONFIG_SMC_IRCC_FIR) += smsc-ircc2.o
|
||||
obj-$(CONFIG_ALI_FIR) += ali-ircc.o
|
||||
obj-$(CONFIG_VLSI_FIR) += vlsi_ir.o
|
||||
obj-$(CONFIG_VIA_FIR) += via-ircc.o
|
||||
obj-$(CONFIG_PXA_FICP) += pxaficp_ir.o
|
||||
obj-$(CONFIG_MCS_FIR) += mcs7780.o
|
||||
obj-$(CONFIG_AU1000_FIR) += au1k_ir.o
|
||||
# SIR drivers
|
||||
obj-$(CONFIG_IRTTY_SIR) += irtty-sir.o sir-dev.o
|
||||
obj-$(CONFIG_BFIN_SIR) += bfin_sir.o
|
||||
obj-$(CONFIG_SH_SIR) += sh_sir.o
|
||||
# dongle drivers for SIR drivers
|
||||
obj-$(CONFIG_ESI_DONGLE) += esi-sir.o
|
||||
obj-$(CONFIG_TEKRAM_DONGLE) += tekram-sir.o
|
||||
obj-$(CONFIG_ACTISYS_DONGLE) += actisys-sir.o
|
||||
obj-$(CONFIG_LITELINK_DONGLE) += litelink-sir.o
|
||||
obj-$(CONFIG_GIRBIL_DONGLE) += girbil-sir.o
|
||||
obj-$(CONFIG_OLD_BELKIN_DONGLE) += old_belkin-sir.o
|
||||
obj-$(CONFIG_MCP2120_DONGLE) += mcp2120-sir.o
|
||||
obj-$(CONFIG_ACT200L_DONGLE) += act200l-sir.o
|
||||
obj-$(CONFIG_MA600_DONGLE) += ma600-sir.o
|
||||
obj-$(CONFIG_TOIM3232_DONGLE) += toim3232-sir.o
|
||||
obj-$(CONFIG_KINGSUN_DONGLE) += kingsun-sir.o
|
||||
obj-$(CONFIG_KSDAZZLE_DONGLE) += ksdazzle-sir.o
|
||||
obj-$(CONFIG_KS959_DONGLE) += ks959-sir.o
|
||||
|
||||
# The SIR helper module
|
||||
sir-dev-objs := sir_dev.o sir_dongle.o
|
||||
@@ -1,250 +0,0 @@
|
||||
/*********************************************************************
|
||||
*
|
||||
* Filename: act200l.c
|
||||
* Version: 0.8
|
||||
* Description: Implementation for the ACTiSYS ACT-IR200L dongle
|
||||
* Status: Experimental.
|
||||
* Author: SHIMIZU Takuya <tshimizu@ga2.so-net.ne.jp>
|
||||
* Created at: Fri Aug 3 17:35:42 2001
|
||||
* Modified at: Fri Aug 17 10:22:40 2001
|
||||
* Modified by: SHIMIZU Takuya <tshimizu@ga2.so-net.ne.jp>
|
||||
*
|
||||
* Copyright (c) 2001 SHIMIZU Takuya, All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <net/irda/irda.h>
|
||||
|
||||
#include "sir-dev.h"
|
||||
|
||||
static int act200l_reset(struct sir_dev *dev);
|
||||
static int act200l_open(struct sir_dev *dev);
|
||||
static int act200l_close(struct sir_dev *dev);
|
||||
static int act200l_change_speed(struct sir_dev *dev, unsigned speed);
|
||||
|
||||
/* Regsiter 0: Control register #1 */
|
||||
#define ACT200L_REG0 0x00
|
||||
#define ACT200L_TXEN 0x01 /* Enable transmitter */
|
||||
#define ACT200L_RXEN 0x02 /* Enable receiver */
|
||||
|
||||
/* Register 1: Control register #2 */
|
||||
#define ACT200L_REG1 0x10
|
||||
#define ACT200L_LODB 0x01 /* Load new baud rate count value */
|
||||
#define ACT200L_WIDE 0x04 /* Expand the maximum allowable pulse */
|
||||
|
||||
/* Register 4: Output Power register */
|
||||
#define ACT200L_REG4 0x40
|
||||
#define ACT200L_OP0 0x01 /* Enable LED1C output */
|
||||
#define ACT200L_OP1 0x02 /* Enable LED2C output */
|
||||
#define ACT200L_BLKR 0x04
|
||||
|
||||
/* Register 5: Receive Mode register */
|
||||
#define ACT200L_REG5 0x50
|
||||
#define ACT200L_RWIDL 0x01 /* fixed 1.6us pulse mode */
|
||||
|
||||
/* Register 6: Receive Sensitivity register #1 */
|
||||
#define ACT200L_REG6 0x60
|
||||
#define ACT200L_RS0 0x01 /* receive threshold bit 0 */
|
||||
#define ACT200L_RS1 0x02 /* receive threshold bit 1 */
|
||||
|
||||
/* Register 7: Receive Sensitivity register #2 */
|
||||
#define ACT200L_REG7 0x70
|
||||
#define ACT200L_ENPOS 0x04 /* Ignore the falling edge */
|
||||
|
||||
/* Register 8,9: Baud Rate Dvider register #1,#2 */
|
||||
#define ACT200L_REG8 0x80
|
||||
#define ACT200L_REG9 0x90
|
||||
|
||||
#define ACT200L_2400 0x5f
|
||||
#define ACT200L_9600 0x17
|
||||
#define ACT200L_19200 0x0b
|
||||
#define ACT200L_38400 0x05
|
||||
#define ACT200L_57600 0x03
|
||||
#define ACT200L_115200 0x01
|
||||
|
||||
/* Register 13: Control register #3 */
|
||||
#define ACT200L_REG13 0xd0
|
||||
#define ACT200L_SHDW 0x01 /* Enable access to shadow registers */
|
||||
|
||||
/* Register 15: Status register */
|
||||
#define ACT200L_REG15 0xf0
|
||||
|
||||
/* Register 21: Control register #4 */
|
||||
#define ACT200L_REG21 0x50
|
||||
#define ACT200L_EXCK 0x02 /* Disable clock output driver */
|
||||
#define ACT200L_OSCL 0x04 /* oscillator in low power, medium accuracy mode */
|
||||
|
||||
static struct dongle_driver act200l = {
|
||||
.owner = THIS_MODULE,
|
||||
.driver_name = "ACTiSYS ACT-IR200L",
|
||||
.type = IRDA_ACT200L_DONGLE,
|
||||
.open = act200l_open,
|
||||
.close = act200l_close,
|
||||
.reset = act200l_reset,
|
||||
.set_speed = act200l_change_speed,
|
||||
};
|
||||
|
||||
static int __init act200l_sir_init(void)
|
||||
{
|
||||
return irda_register_dongle(&act200l);
|
||||
}
|
||||
|
||||
static void __exit act200l_sir_cleanup(void)
|
||||
{
|
||||
irda_unregister_dongle(&act200l);
|
||||
}
|
||||
|
||||
static int act200l_open(struct sir_dev *dev)
|
||||
{
|
||||
struct qos_info *qos = &dev->qos;
|
||||
|
||||
/* Power on the dongle */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
|
||||
/* Set the speeds we can accept */
|
||||
qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
|
||||
qos->min_turn_time.bits = 0x03;
|
||||
irda_qos_bits_to_value(qos);
|
||||
|
||||
/* irda thread waits 50 msec for power settling */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int act200l_close(struct sir_dev *dev)
|
||||
{
|
||||
/* Power off the dongle */
|
||||
sirdev_set_dtr_rts(dev, FALSE, FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function act200l_change_speed (dev, speed)
|
||||
*
|
||||
* Set the speed for the ACTiSYS ACT-IR200L type dongle.
|
||||
*
|
||||
*/
|
||||
static int act200l_change_speed(struct sir_dev *dev, unsigned speed)
|
||||
{
|
||||
u8 control[3];
|
||||
int ret = 0;
|
||||
|
||||
/* Clear DTR and set RTS to enter command mode */
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
|
||||
switch (speed) {
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
/* fall through */
|
||||
case 9600:
|
||||
control[0] = ACT200L_REG8 | (ACT200L_9600 & 0x0f);
|
||||
control[1] = ACT200L_REG9 | ((ACT200L_9600 >> 4) & 0x0f);
|
||||
break;
|
||||
case 19200:
|
||||
control[0] = ACT200L_REG8 | (ACT200L_19200 & 0x0f);
|
||||
control[1] = ACT200L_REG9 | ((ACT200L_19200 >> 4) & 0x0f);
|
||||
break;
|
||||
case 38400:
|
||||
control[0] = ACT200L_REG8 | (ACT200L_38400 & 0x0f);
|
||||
control[1] = ACT200L_REG9 | ((ACT200L_38400 >> 4) & 0x0f);
|
||||
break;
|
||||
case 57600:
|
||||
control[0] = ACT200L_REG8 | (ACT200L_57600 & 0x0f);
|
||||
control[1] = ACT200L_REG9 | ((ACT200L_57600 >> 4) & 0x0f);
|
||||
break;
|
||||
case 115200:
|
||||
control[0] = ACT200L_REG8 | (ACT200L_115200 & 0x0f);
|
||||
control[1] = ACT200L_REG9 | ((ACT200L_115200 >> 4) & 0x0f);
|
||||
break;
|
||||
}
|
||||
control[2] = ACT200L_REG1 | ACT200L_LODB | ACT200L_WIDE;
|
||||
|
||||
/* Write control bytes */
|
||||
sirdev_raw_write(dev, control, 3);
|
||||
msleep(5);
|
||||
|
||||
/* Go back to normal mode */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
|
||||
dev->speed = speed;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function act200l_reset (driver)
|
||||
*
|
||||
* Reset the ACTiSYS ACT-IR200L type dongle.
|
||||
*/
|
||||
|
||||
#define ACT200L_STATE_WAIT1_RESET (SIRDEV_STATE_DONGLE_RESET+1)
|
||||
#define ACT200L_STATE_WAIT2_RESET (SIRDEV_STATE_DONGLE_RESET+2)
|
||||
|
||||
static int act200l_reset(struct sir_dev *dev)
|
||||
{
|
||||
unsigned state = dev->fsm.substate;
|
||||
unsigned delay = 0;
|
||||
static const u8 control[9] = {
|
||||
ACT200L_REG15,
|
||||
ACT200L_REG13 | ACT200L_SHDW,
|
||||
ACT200L_REG21 | ACT200L_EXCK | ACT200L_OSCL,
|
||||
ACT200L_REG13,
|
||||
ACT200L_REG7 | ACT200L_ENPOS,
|
||||
ACT200L_REG6 | ACT200L_RS0 | ACT200L_RS1,
|
||||
ACT200L_REG5 | ACT200L_RWIDL,
|
||||
ACT200L_REG4 | ACT200L_OP0 | ACT200L_OP1 | ACT200L_BLKR,
|
||||
ACT200L_REG0 | ACT200L_TXEN | ACT200L_RXEN
|
||||
};
|
||||
int ret = 0;
|
||||
|
||||
switch (state) {
|
||||
case SIRDEV_STATE_DONGLE_RESET:
|
||||
/* Reset the dongle : set RTS low for 25 ms */
|
||||
sirdev_set_dtr_rts(dev, TRUE, FALSE);
|
||||
state = ACT200L_STATE_WAIT1_RESET;
|
||||
delay = 50;
|
||||
break;
|
||||
|
||||
case ACT200L_STATE_WAIT1_RESET:
|
||||
/* Clear DTR and set RTS to enter command mode */
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
|
||||
udelay(25); /* better wait for some short while */
|
||||
|
||||
/* Write control bytes */
|
||||
sirdev_raw_write(dev, control, sizeof(control));
|
||||
state = ACT200L_STATE_WAIT2_RESET;
|
||||
delay = 15;
|
||||
break;
|
||||
|
||||
case ACT200L_STATE_WAIT2_RESET:
|
||||
/* Go back to normal mode */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
dev->speed = 9600;
|
||||
break;
|
||||
default:
|
||||
net_err_ratelimited("%s(), unknown state %d\n",
|
||||
__func__, state);
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
dev->fsm.substate = state;
|
||||
return (delay > 0) ? delay : ret;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("SHIMIZU Takuya <tshimizu@ga2.so-net.ne.jp>");
|
||||
MODULE_DESCRIPTION("ACTiSYS ACT-IR200L dongle driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("irda-dongle-10"); /* IRDA_ACT200L_DONGLE */
|
||||
|
||||
module_init(act200l_sir_init);
|
||||
module_exit(act200l_sir_cleanup);
|
||||
@@ -1,245 +0,0 @@
|
||||
/*********************************************************************
|
||||
*
|
||||
* Filename: actisys.c
|
||||
* Version: 1.1
|
||||
* Description: Implementation for the ACTiSYS IR-220L and IR-220L+
|
||||
* dongles
|
||||
* Status: Beta.
|
||||
* Authors: Dag Brattli <dagb@cs.uit.no> (initially)
|
||||
* Jean Tourrilhes <jt@hpl.hp.com> (new version)
|
||||
* Martin Diehl <mad@mdiehl.de> (new version for sir_dev)
|
||||
* Created at: Wed Oct 21 20:02:35 1998
|
||||
* Modified at: Sun Oct 27 22:02:13 2002
|
||||
* Modified by: Martin Diehl <mad@mdiehl.de>
|
||||
*
|
||||
* Copyright (c) 1998-1999 Dag Brattli, All Rights Reserved.
|
||||
* Copyright (c) 1999 Jean Tourrilhes
|
||||
* Copyright (c) 2002 Martin Diehl
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Neither Dag Brattli nor University of Tromsø admit liability nor
|
||||
* provide warranty for any of this software. This material is
|
||||
* provided "AS-IS" and at no charge.
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
/*
|
||||
* Changelog
|
||||
*
|
||||
* 0.8 -> 0.9999 - Jean
|
||||
* o New initialisation procedure : much safer and correct
|
||||
* o New procedure the change speed : much faster and simpler
|
||||
* o Other cleanups & comments
|
||||
* Thanks to Lichen Wang @ Actisys for his excellent help...
|
||||
*
|
||||
* 1.0 -> 1.1 - Martin Diehl
|
||||
* modified for new sir infrastructure
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <net/irda/irda.h>
|
||||
|
||||
#include "sir-dev.h"
|
||||
|
||||
/*
|
||||
* Define the timing of the pulses we send to the dongle (to reset it, and
|
||||
* to toggle speeds). Basically, the limit here is the propagation speed of
|
||||
* the signals through the serial port, the dongle being much faster. Any
|
||||
* serial port support 115 kb/s, so we are sure that pulses 8.5 us wide can
|
||||
* go through cleanly . If you are on the wild side, you can try to lower
|
||||
* this value (Actisys recommended me 2 us, and 0 us work for me on a P233!)
|
||||
*/
|
||||
#define MIN_DELAY 10 /* 10 us to be on the conservative side */
|
||||
|
||||
static int actisys_open(struct sir_dev *);
|
||||
static int actisys_close(struct sir_dev *);
|
||||
static int actisys_change_speed(struct sir_dev *, unsigned);
|
||||
static int actisys_reset(struct sir_dev *);
|
||||
|
||||
/* These are the baudrates supported, in the order available */
|
||||
/* Note : the 220L doesn't support 38400, but we will fix that below */
|
||||
static unsigned baud_rates[] = { 9600, 19200, 57600, 115200, 38400 };
|
||||
|
||||
#define MAX_SPEEDS ARRAY_SIZE(baud_rates)
|
||||
|
||||
static struct dongle_driver act220l = {
|
||||
.owner = THIS_MODULE,
|
||||
.driver_name = "Actisys ACT-220L",
|
||||
.type = IRDA_ACTISYS_DONGLE,
|
||||
.open = actisys_open,
|
||||
.close = actisys_close,
|
||||
.reset = actisys_reset,
|
||||
.set_speed = actisys_change_speed,
|
||||
};
|
||||
|
||||
static struct dongle_driver act220l_plus = {
|
||||
.owner = THIS_MODULE,
|
||||
.driver_name = "Actisys ACT-220L+",
|
||||
.type = IRDA_ACTISYS_PLUS_DONGLE,
|
||||
.open = actisys_open,
|
||||
.close = actisys_close,
|
||||
.reset = actisys_reset,
|
||||
.set_speed = actisys_change_speed,
|
||||
};
|
||||
|
||||
static int __init actisys_sir_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* First, register an Actisys 220L dongle */
|
||||
ret = irda_register_dongle(&act220l);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Now, register an Actisys 220L+ dongle */
|
||||
ret = irda_register_dongle(&act220l_plus);
|
||||
if (ret < 0) {
|
||||
irda_unregister_dongle(&act220l);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit actisys_sir_cleanup(void)
|
||||
{
|
||||
/* We have to remove both dongles */
|
||||
irda_unregister_dongle(&act220l_plus);
|
||||
irda_unregister_dongle(&act220l);
|
||||
}
|
||||
|
||||
static int actisys_open(struct sir_dev *dev)
|
||||
{
|
||||
struct qos_info *qos = &dev->qos;
|
||||
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
|
||||
/* Set the speeds we can accept */
|
||||
qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
|
||||
|
||||
/* Remove support for 38400 if this is not a 220L+ dongle */
|
||||
if (dev->dongle_drv->type == IRDA_ACTISYS_DONGLE)
|
||||
qos->baud_rate.bits &= ~IR_38400;
|
||||
|
||||
qos->min_turn_time.bits = 0x7f; /* Needs 0.01 ms */
|
||||
irda_qos_bits_to_value(qos);
|
||||
|
||||
/* irda thread waits 50 msec for power settling */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int actisys_close(struct sir_dev *dev)
|
||||
{
|
||||
/* Power off the dongle */
|
||||
sirdev_set_dtr_rts(dev, FALSE, FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function actisys_change_speed (task)
|
||||
*
|
||||
* Change speed of the ACTiSYS IR-220L and IR-220L+ type IrDA dongles.
|
||||
* To cycle through the available baud rates, pulse RTS low for a few us.
|
||||
*
|
||||
* First, we reset the dongle to always start from a known state.
|
||||
* Then, we cycle through the speeds by pulsing RTS low and then up.
|
||||
* The dongle allow us to pulse quite fast, se we can set speed in one go,
|
||||
* which is must faster ( < 100 us) and less complex than what is found
|
||||
* in some other dongle drivers...
|
||||
* Note that even if the new speed is the same as the current speed,
|
||||
* we reassert the speed. This make sure that things are all right,
|
||||
* and it's fast anyway...
|
||||
* By the way, this function will work for both type of dongles,
|
||||
* because the additional speed is at the end of the sequence...
|
||||
*/
|
||||
static int actisys_change_speed(struct sir_dev *dev, unsigned speed)
|
||||
{
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
|
||||
pr_debug("%s(), speed=%d (was %d)\n", __func__, speed, dev->speed);
|
||||
|
||||
/* dongle was already resetted from irda_request state machine,
|
||||
* we are in known state (dongle default)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Now, we can set the speed requested. Send RTS pulses until we
|
||||
* reach the target speed
|
||||
*/
|
||||
for (i = 0; i < MAX_SPEEDS; i++) {
|
||||
if (speed == baud_rates[i]) {
|
||||
dev->speed = speed;
|
||||
break;
|
||||
}
|
||||
/* Set RTS low for 10 us */
|
||||
sirdev_set_dtr_rts(dev, TRUE, FALSE);
|
||||
udelay(MIN_DELAY);
|
||||
|
||||
/* Set RTS high for 10 us */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
udelay(MIN_DELAY);
|
||||
}
|
||||
|
||||
/* Check if life is sweet... */
|
||||
if (i >= MAX_SPEEDS) {
|
||||
actisys_reset(dev);
|
||||
ret = -EINVAL; /* This should not happen */
|
||||
}
|
||||
|
||||
/* Basta lavoro, on se casse d'ici... */
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function actisys_reset (task)
|
||||
*
|
||||
* Reset the Actisys type dongle. Warning, this function must only be
|
||||
* called with a process context!
|
||||
*
|
||||
* We need to do two things in this function :
|
||||
* o first make sure that the dongle is in a state where it can operate
|
||||
* o second put the dongle in a know state
|
||||
*
|
||||
* The dongle is powered of the RTS and DTR lines. In the dongle, there
|
||||
* is a big capacitor to accommodate the current spikes. This capacitor
|
||||
* takes a least 50 ms to be charged. In theory, the Bios set those lines
|
||||
* up, so by the time we arrive here we should be set. It doesn't hurt
|
||||
* to be on the conservative side, so we will wait...
|
||||
* <Martin : move above comment to irda_config_fsm>
|
||||
* Then, we set the speed to 9600 b/s to get in a known state (see in
|
||||
* change_speed for details). It is needed because the IrDA stack
|
||||
* has tried to set the speed immediately after our first return,
|
||||
* so before we can be sure the dongle is up and running.
|
||||
*/
|
||||
|
||||
static int actisys_reset(struct sir_dev *dev)
|
||||
{
|
||||
/* Reset the dongle : set DTR low for 10 us */
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
udelay(MIN_DELAY);
|
||||
|
||||
/* Go back to normal mode */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
|
||||
dev->speed = 9600; /* That's the default */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Dag Brattli <dagb@cs.uit.no> - Jean Tourrilhes <jt@hpl.hp.com>");
|
||||
MODULE_DESCRIPTION("ACTiSYS IR-220L and IR-220L+ dongle driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("irda-dongle-2"); /* IRDA_ACTISYS_DONGLE */
|
||||
MODULE_ALIAS("irda-dongle-3"); /* IRDA_ACTISYS_PLUS_DONGLE */
|
||||
|
||||
module_init(actisys_sir_init);
|
||||
module_exit(actisys_sir_cleanup);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,227 +0,0 @@
|
||||
/*********************************************************************
|
||||
*
|
||||
* Filename: ali-ircc.h
|
||||
* Version: 0.5
|
||||
* Description: Driver for the ALI M1535D and M1543C FIR Controller
|
||||
* Status: Experimental.
|
||||
* Author: Benjamin Kong <benjamin_kong@ali.com.tw>
|
||||
* Created at: 2000/10/16 03:46PM
|
||||
* Modified at: 2001/1/3 02:56PM
|
||||
* Modified by: Benjamin Kong <benjamin_kong@ali.com.tw>
|
||||
*
|
||||
* Copyright (c) 2000 Benjamin Kong <benjamin_kong@ali.com.tw>
|
||||
* All Rights Reserved
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
#ifndef ALI_IRCC_H
|
||||
#define ALI_IRCC_H
|
||||
|
||||
#include <linux/ktime.h>
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
/* SIR Register */
|
||||
/* Usr definition of linux/serial_reg.h */
|
||||
|
||||
/* FIR Register */
|
||||
#define BANK0 0x20
|
||||
#define BANK1 0x21
|
||||
#define BANK2 0x22
|
||||
#define BANK3 0x23
|
||||
|
||||
#define FIR_MCR 0x07 /* Master Control Register */
|
||||
|
||||
/* Bank 0 */
|
||||
#define FIR_DR 0x00 /* Alias 0, FIR Data Register (R/W) */
|
||||
#define FIR_IER 0x01 /* Alias 1, FIR Interrupt Enable Register (R/W) */
|
||||
#define FIR_IIR 0x02 /* Alias 2, FIR Interrupt Identification Register (Read only) */
|
||||
#define FIR_LCR_A 0x03 /* Alias 3, FIR Line Control Register A (R/W) */
|
||||
#define FIR_LCR_B 0x04 /* Alias 4, FIR Line Control Register B (R/W) */
|
||||
#define FIR_LSR 0x05 /* Alias 5, FIR Line Status Register (R/W) */
|
||||
#define FIR_BSR 0x06 /* Alias 6, FIR Bus Status Register (Read only) */
|
||||
|
||||
|
||||
/* Alias 1 */
|
||||
#define IER_FIFO 0x10 /* FIR FIFO Interrupt Enable */
|
||||
#define IER_TIMER 0x20 /* Timer Interrupt Enable */
|
||||
#define IER_EOM 0x40 /* End of Message Interrupt Enable */
|
||||
#define IER_ACT 0x80 /* Active Frame Interrupt Enable */
|
||||
|
||||
/* Alias 2 */
|
||||
#define IIR_FIFO 0x10 /* FIR FIFO Interrupt */
|
||||
#define IIR_TIMER 0x20 /* Timer Interrupt */
|
||||
#define IIR_EOM 0x40 /* End of Message Interrupt */
|
||||
#define IIR_ACT 0x80 /* Active Frame Interrupt */
|
||||
|
||||
/* Alias 3 */
|
||||
#define LCR_A_FIFO_RESET 0x80 /* FIFO Reset */
|
||||
|
||||
/* Alias 4 */
|
||||
#define LCR_B_BW 0x10 /* Brick Wall */
|
||||
#define LCR_B_SIP 0x20 /* SIP Enable */
|
||||
#define LCR_B_TX_MODE 0x40 /* Transmit Mode */
|
||||
#define LCR_B_RX_MODE 0x80 /* Receive Mode */
|
||||
|
||||
/* Alias 5 */
|
||||
#define LSR_FIR_LSA 0x00 /* FIR Line Status Address */
|
||||
#define LSR_FRAME_ABORT 0x08 /* Frame Abort */
|
||||
#define LSR_CRC_ERROR 0x10 /* CRC Error */
|
||||
#define LSR_SIZE_ERROR 0x20 /* Size Error */
|
||||
#define LSR_FRAME_ERROR 0x40 /* Frame Error */
|
||||
#define LSR_FIFO_UR 0x80 /* FIFO Underrun */
|
||||
#define LSR_FIFO_OR 0x80 /* FIFO Overrun */
|
||||
|
||||
/* Alias 6 */
|
||||
#define BSR_FIFO_NOT_EMPTY 0x80 /* FIFO Not Empty */
|
||||
|
||||
/* Bank 1 */
|
||||
#define FIR_CR 0x00 /* Alias 0, FIR Configuration Register (R/W) */
|
||||
#define FIR_FIFO_TR 0x01 /* Alias 1, FIR FIFO Threshold Register (R/W) */
|
||||
#define FIR_DMA_TR 0x02 /* Alias 2, FIR DMA Threshold Register (R/W) */
|
||||
#define FIR_TIMER_IIR 0x03 /* Alias 3, FIR Timer interrupt interval register (W/O) */
|
||||
#define FIR_FIFO_FR 0x03 /* Alias 3, FIR FIFO Flag register (R/O) */
|
||||
#define FIR_FIFO_RAR 0x04 /* Alias 4, FIR FIFO Read Address register (R/O) */
|
||||
#define FIR_FIFO_WAR 0x05 /* Alias 5, FIR FIFO Write Address register (R/O) */
|
||||
#define FIR_TR 0x06 /* Alias 6, Test REgister (W/O) */
|
||||
|
||||
/* Alias 0 */
|
||||
#define CR_DMA_EN 0x01 /* DMA Enable */
|
||||
#define CR_DMA_BURST 0x02 /* DMA Burst Mode */
|
||||
#define CR_TIMER_EN 0x08 /* Timer Enable */
|
||||
|
||||
/* Alias 3 */
|
||||
#define TIMER_IIR_500 0x00 /* 500 us */
|
||||
#define TIMER_IIR_1ms 0x01 /* 1 ms */
|
||||
#define TIMER_IIR_2ms 0x02 /* 2 ms */
|
||||
#define TIMER_IIR_4ms 0x03 /* 4 ms */
|
||||
|
||||
/* Bank 2 */
|
||||
#define FIR_IRDA_CR 0x00 /* Alias 0, IrDA Control Register (R/W) */
|
||||
#define FIR_BOF_CR 0x01 /* Alias 1, BOF Count Register (R/W) */
|
||||
#define FIR_BW_CR 0x02 /* Alias 2, Brick Wall Count Register (R/W) */
|
||||
#define FIR_TX_DSR_HI 0x03 /* Alias 3, TX Data Size Register (high) (R/W) */
|
||||
#define FIR_TX_DSR_LO 0x04 /* Alias 4, TX Data Size Register (low) (R/W) */
|
||||
#define FIR_RX_DSR_HI 0x05 /* Alias 5, RX Data Size Register (high) (R/W) */
|
||||
#define FIR_RX_DSR_LO 0x06 /* Alias 6, RX Data Size Register (low) (R/W) */
|
||||
|
||||
/* Alias 0 */
|
||||
#define IRDA_CR_HDLC1152 0x80 /* 1.152Mbps HDLC Select */
|
||||
#define IRDA_CR_CRC 0X40 /* CRC Select. */
|
||||
#define IRDA_CR_HDLC 0x20 /* HDLC select. */
|
||||
#define IRDA_CR_HP_MODE 0x10 /* HP mode (read only) */
|
||||
#define IRDA_CR_SD_ST 0x08 /* SD/MODE State. */
|
||||
#define IRDA_CR_FIR_SIN 0x04 /* FIR SIN Select. */
|
||||
#define IRDA_CR_ITTX_0 0x02 /* SOUT State. IRTX force to 0 */
|
||||
#define IRDA_CR_ITTX_1 0x03 /* SOUT State. IRTX force to 1 */
|
||||
|
||||
/* Bank 3 */
|
||||
#define FIR_ID_VR 0x00 /* Alias 0, FIR ID Version Register (R/O) */
|
||||
#define FIR_MODULE_CR 0x01 /* Alias 1, FIR Module Control Register (R/W) */
|
||||
#define FIR_IO_BASE_HI 0x02 /* Alias 2, FIR Higher I/O Base Address Register (R/O) */
|
||||
#define FIR_IO_BASE_LO 0x03 /* Alias 3, FIR Lower I/O Base Address Register (R/O) */
|
||||
#define FIR_IRQ_CR 0x04 /* Alias 4, FIR IRQ Channel Register (R/O) */
|
||||
#define FIR_DMA_CR 0x05 /* Alias 5, FIR DMA Channel Register (R/O) */
|
||||
|
||||
struct ali_chip {
|
||||
char *name;
|
||||
int cfg[2];
|
||||
unsigned char entr1;
|
||||
unsigned char entr2;
|
||||
unsigned char cid_index;
|
||||
unsigned char cid_value;
|
||||
int (*probe)(struct ali_chip *chip, chipio_t *info);
|
||||
int (*init)(struct ali_chip *chip, chipio_t *info);
|
||||
};
|
||||
typedef struct ali_chip ali_chip_t;
|
||||
|
||||
|
||||
/* DMA modes needed */
|
||||
#define DMA_TX_MODE 0x08 /* Mem to I/O, ++, demand. */
|
||||
#define DMA_RX_MODE 0x04 /* I/O to mem, ++, demand. */
|
||||
|
||||
#define MAX_TX_WINDOW 7
|
||||
#define MAX_RX_WINDOW 7
|
||||
|
||||
#define TX_FIFO_Threshold 8
|
||||
#define RX_FIFO_Threshold 1
|
||||
#define TX_DMA_Threshold 1
|
||||
#define RX_DMA_Threshold 1
|
||||
|
||||
/* For storing entries in the status FIFO */
|
||||
|
||||
struct st_fifo_entry {
|
||||
int status;
|
||||
int len;
|
||||
};
|
||||
|
||||
struct st_fifo {
|
||||
struct st_fifo_entry entries[MAX_RX_WINDOW];
|
||||
int pending_bytes;
|
||||
int head;
|
||||
int tail;
|
||||
int len;
|
||||
};
|
||||
|
||||
struct frame_cb {
|
||||
void *start; /* Start of frame in DMA mem */
|
||||
int len; /* Length of frame in DMA mem */
|
||||
};
|
||||
|
||||
struct tx_fifo {
|
||||
struct frame_cb queue[MAX_TX_WINDOW]; /* Info about frames in queue */
|
||||
int ptr; /* Currently being sent */
|
||||
int len; /* Length of queue */
|
||||
int free; /* Next free slot */
|
||||
void *tail; /* Next free start in DMA mem */
|
||||
};
|
||||
|
||||
/* Private data for each instance */
|
||||
struct ali_ircc_cb {
|
||||
|
||||
struct st_fifo st_fifo; /* Info about received frames */
|
||||
struct tx_fifo tx_fifo; /* Info about frames to be transmitted */
|
||||
|
||||
struct net_device *netdev; /* Yes! we are some kind of netdevice */
|
||||
|
||||
struct irlap_cb *irlap; /* The link layer we are binded to */
|
||||
struct qos_info qos; /* QoS capabilities for this device */
|
||||
|
||||
chipio_t io; /* IrDA controller information */
|
||||
iobuff_t tx_buff; /* Transmit buffer */
|
||||
iobuff_t rx_buff; /* Receive buffer */
|
||||
dma_addr_t tx_buff_dma;
|
||||
dma_addr_t rx_buff_dma;
|
||||
|
||||
__u8 ier; /* Interrupt enable register */
|
||||
|
||||
__u8 InterruptID; /* Interrupt ID */
|
||||
__u8 BusStatus; /* Bus Status */
|
||||
__u8 LineStatus; /* Line Status */
|
||||
|
||||
unsigned char rcvFramesOverflow;
|
||||
|
||||
ktime_t stamp;
|
||||
|
||||
spinlock_t lock; /* For serializing operations */
|
||||
|
||||
__u32 new_speed;
|
||||
int index; /* Instance index */
|
||||
|
||||
unsigned char fifo_opti_buf;
|
||||
};
|
||||
|
||||
static inline void switch_bank(int iobase, int bank)
|
||||
{
|
||||
outb(bank, iobase+FIR_MCR);
|
||||
}
|
||||
|
||||
#endif /* ALI_IRCC_H */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,93 +0,0 @@
|
||||
/*
|
||||
* Blackfin Infra-red Driver
|
||||
*
|
||||
* Copyright 2006-2009 Analog Devices Inc.
|
||||
*
|
||||
* Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
* Licensed under the GPL-2 or later.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/serial.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <net/irda/irda.h>
|
||||
#include <net/irda/wrapper.h>
|
||||
#include <net/irda/irda_device.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/portmux.h>
|
||||
#undef DRIVER_NAME
|
||||
|
||||
#ifdef CONFIG_SIR_BFIN_DMA
|
||||
struct dma_rx_buf {
|
||||
char *buf;
|
||||
int head;
|
||||
int tail;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct bfin_sir_port {
|
||||
unsigned char __iomem *membase;
|
||||
unsigned int irq;
|
||||
unsigned int lsr;
|
||||
unsigned long clk;
|
||||
struct net_device *dev;
|
||||
#ifdef CONFIG_SIR_BFIN_DMA
|
||||
int tx_done;
|
||||
struct dma_rx_buf rx_dma_buf;
|
||||
struct timer_list rx_dma_timer;
|
||||
int rx_dma_nrows;
|
||||
#endif
|
||||
unsigned int tx_dma_channel;
|
||||
unsigned int rx_dma_channel;
|
||||
};
|
||||
|
||||
struct bfin_sir_port_res {
|
||||
unsigned long base_addr;
|
||||
int irq;
|
||||
unsigned int rx_dma_channel;
|
||||
unsigned int tx_dma_channel;
|
||||
};
|
||||
|
||||
struct bfin_sir_self {
|
||||
struct bfin_sir_port *sir_port;
|
||||
spinlock_t lock;
|
||||
unsigned int open;
|
||||
int speed;
|
||||
int newspeed;
|
||||
|
||||
struct sk_buff *txskb;
|
||||
struct sk_buff *rxskb;
|
||||
struct net_device_stats stats;
|
||||
struct device *dev;
|
||||
struct irlap_cb *irlap;
|
||||
struct qos_info qos;
|
||||
|
||||
iobuff_t tx_buff;
|
||||
iobuff_t rx_buff;
|
||||
|
||||
struct work_struct work;
|
||||
int mtt;
|
||||
};
|
||||
|
||||
#define DRIVER_NAME "bfin_sir"
|
||||
|
||||
#include <asm/bfin_serial.h>
|
||||
|
||||
static const unsigned short per[][4] = {
|
||||
/* rx pin tx pin NULL uart_number */
|
||||
{P_UART0_RX, P_UART0_TX, 0, 0},
|
||||
{P_UART1_RX, P_UART1_TX, 0, 1},
|
||||
{P_UART2_RX, P_UART2_TX, 0, 2},
|
||||
{P_UART3_RX, P_UART3_TX, 0, 3},
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,362 +0,0 @@
|
||||
/*********************************************************************
|
||||
*
|
||||
* Filename: toshoboe.h
|
||||
* Version: 2.16
|
||||
* Description: Driver for the Toshiba OBOE (or type-O or 701)
|
||||
* FIR Chipset, also supports the DONAUOBOE (type-DO
|
||||
* or d01) FIR chipset which as far as I know is
|
||||
* register compatible.
|
||||
* Status: Experimental.
|
||||
* Author: James McKenzie <james@fishsoup.dhs.org>
|
||||
* Created at: Sat May 8 12:35:27 1999
|
||||
* Modified: 2.16 Martin Lucina <mato@kotelna.sk>
|
||||
* Modified: 2.16 Sat Jun 22 18:54:29 2002 (sync headers)
|
||||
* Modified: 2.17 Christian Gennerat <christian.gennerat@polytechnique.org>
|
||||
* Modified: 2.17 jeu sep 12 08:50:20 2002 (add lock to be used by spinlocks)
|
||||
*
|
||||
* Copyright (c) 1999 James McKenzie, All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Neither James McKenzie nor Cambridge University admit liability nor
|
||||
* provide warranty for any of this software. This material is
|
||||
* provided "AS-IS" and at no charge.
|
||||
*
|
||||
* Applicable Models : Libretto 100/110CT and many more.
|
||||
* Toshiba refers to this chip as the type-O IR port,
|
||||
* or the type-DO IR port.
|
||||
*
|
||||
* IrDA chip set list from Toshiba Computer Engineering Corp.
|
||||
* model method maker controller Version
|
||||
* Portege 320CT FIR,SIR Toshiba Oboe(Triangle)
|
||||
* Portege 3010CT FIR,SIR Toshiba Oboe(Sydney)
|
||||
* Portege 3015CT FIR,SIR Toshiba Oboe(Sydney)
|
||||
* Portege 3020CT FIR,SIR Toshiba Oboe(Sydney)
|
||||
* Portege 7020CT FIR,SIR ? ?
|
||||
*
|
||||
* Satell. 4090XCDT FIR,SIR ? ?
|
||||
*
|
||||
* Libretto 100CT FIR,SIR Toshiba Oboe
|
||||
* Libretto 1000CT FIR,SIR Toshiba Oboe
|
||||
*
|
||||
* TECRA750DVD FIR,SIR Toshiba Oboe(Triangle) REV ID=14h
|
||||
* TECRA780 FIR,SIR Toshiba Oboe(Sandlot) REV ID=32h,33h
|
||||
* TECRA750CDT FIR,SIR Toshiba Oboe(Triangle) REV ID=13h,14h
|
||||
* TECRA8000 FIR,SIR Toshiba Oboe(ISKUR) REV ID=23h
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
/* The documentation for this chip is allegedly released */
|
||||
/* However I have not seen it, not have I managed to contact */
|
||||
/* anyone who has. HOWEVER the chip bears a striking resemblance */
|
||||
/* to the IrDA controller in the Toshiba RISC TMPR3922 chip */
|
||||
/* the documentation for this is freely available at */
|
||||
/* http://www.madingley.org/james/resources/toshoboe/TMPR3922.pdf */
|
||||
/* The mapping between the registers in that document and the */
|
||||
/* Registers in the 701 oboe chip are as follows */
|
||||
|
||||
|
||||
/* 3922 reg 701 regs, by bit numbers */
|
||||
/* 7- 0 15- 8 24-16 31-25 */
|
||||
/* $28 0x0 0x1 */
|
||||
/* $2c SEE NOTE 1 */
|
||||
/* $30 0x6 0x7 */
|
||||
/* $34 0x8 0x9 SEE NOTE 2 */
|
||||
/* $38 0x10 0x11 */
|
||||
/* $3C 0xe SEE NOTE 3 */
|
||||
/* $40 0x12 0x13 */
|
||||
/* $44 0x14 0x15 */
|
||||
/* $48 0x16 0x17 */
|
||||
/* $4c 0x18 0x19 */
|
||||
/* $50 0x1a 0x1b */
|
||||
|
||||
/* FIXME: could be 0x1b 0x1a here */
|
||||
|
||||
/* $54 0x1d 0x1c */
|
||||
/* $5C 0xf SEE NOTE 4 */
|
||||
/* $130 SEE NOTE 5 */
|
||||
/* $134 SEE NOTE 6 */
|
||||
/* */
|
||||
/* NOTES: */
|
||||
/* 1. The pointer to ring is packed in most unceremoniusly */
|
||||
/* 701 Register Address bits (A9-A0 must be zero) */
|
||||
/* 0x4: A17 A16 A15 A14 A13 A12 A11 A10 */
|
||||
/* 0x5: A25 A24 A23 A22 A21 A20 A19 A18 */
|
||||
/* 0x2: 0 0 A31 A30 A29 A28 A27 A26 */
|
||||
/* */
|
||||
/* 2. The M$ drivers do a write 0x1 to 0x9, however the 3922 */
|
||||
/* documentation would suggest that a write of 0x1 to 0x8 */
|
||||
/* would be more appropriate. */
|
||||
/* */
|
||||
/* 3. This assignment is tenuous at best, register 0xe seems to */
|
||||
/* have bits arranged 0 0 0 R/W R/W R/W R/W R/W */
|
||||
/* if either of the lower two bits are set the chip seems to */
|
||||
/* switch off */
|
||||
/* */
|
||||
/* 4. Bits 7-4 seem to be different 4 seems just to be generic */
|
||||
/* receiver busy flag */
|
||||
/* */
|
||||
/* 5. and 6. The IER and ISR have a different bit assignment */
|
||||
/* The lower three bits of both read back as ones */
|
||||
/* ISR is register 0xc, IER is register 0xd */
|
||||
/* 7 6 5 4 3 2 1 0 */
|
||||
/* 0xc: TxDone RxDone TxUndr RxOver SipRcv 1 1 1 */
|
||||
/* 0xd: TxDone RxDone TxUndr RxOver SipRcv 1 1 1 */
|
||||
/* TxDone xmitt done (generated only if generate interrupt bit */
|
||||
/* is set in the ring) */
|
||||
/* RxDone recv completed (or other recv condition if you set it */
|
||||
/* up */
|
||||
/* TxUnder underflow in Transmit FIFO */
|
||||
/* RxOver overflow in Recv FIFO */
|
||||
/* SipRcv received serial gap (or other condition you set) */
|
||||
/* Interrupts are enabled by writing a one to the IER register */
|
||||
/* Interrupts are cleared by writing a one to the ISR register */
|
||||
/* */
|
||||
/* 6. The remaining registers: 0x6 and 0x3 appear to be */
|
||||
/* reserved parts of 16 or 32 bit registersthe remainder */
|
||||
/* 0xa 0xb 0x1e 0x1f could possibly be (by their behaviour) */
|
||||
/* the Unicast Filter register at $58. */
|
||||
/* */
|
||||
/* 7. While the core obviously expects 32 bit accesses all the */
|
||||
/* M$ drivers do 8 bit accesses, infact the Miniport ones */
|
||||
/* write and read back the byte serveral times (why?) */
|
||||
|
||||
|
||||
#ifndef TOSHOBOE_H
|
||||
#define TOSHOBOE_H
|
||||
|
||||
/* Registers */
|
||||
|
||||
#define OBOE_IO_EXTENT 0x1f
|
||||
|
||||
/*Receive and transmit slot pointers */
|
||||
#define OBOE_REG(i) (i+(self->base))
|
||||
#define OBOE_RXSLOT OBOE_REG(0x0)
|
||||
#define OBOE_TXSLOT OBOE_REG(0x1)
|
||||
#define OBOE_SLOT_MASK 0x3f
|
||||
|
||||
#define OBOE_TXRING_OFFSET 0x200
|
||||
#define OBOE_TXRING_OFFSET_IN_SLOTS 0x40
|
||||
|
||||
/*pointer to the ring */
|
||||
#define OBOE_RING_BASE0 OBOE_REG(0x4)
|
||||
#define OBOE_RING_BASE1 OBOE_REG(0x5)
|
||||
#define OBOE_RING_BASE2 OBOE_REG(0x2)
|
||||
#define OBOE_RING_BASE3 OBOE_REG(0x3)
|
||||
|
||||
/*Number of slots in the ring */
|
||||
#define OBOE_RING_SIZE OBOE_REG(0x7)
|
||||
#define OBOE_RING_SIZE_RX4 0x00
|
||||
#define OBOE_RING_SIZE_RX8 0x01
|
||||
#define OBOE_RING_SIZE_RX16 0x03
|
||||
#define OBOE_RING_SIZE_RX32 0x07
|
||||
#define OBOE_RING_SIZE_RX64 0x0f
|
||||
#define OBOE_RING_SIZE_TX4 0x00
|
||||
#define OBOE_RING_SIZE_TX8 0x10
|
||||
#define OBOE_RING_SIZE_TX16 0x30
|
||||
#define OBOE_RING_SIZE_TX32 0x70
|
||||
#define OBOE_RING_SIZE_TX64 0xf0
|
||||
|
||||
#define OBOE_RING_MAX_SIZE 64
|
||||
|
||||
/*Causes the gubbins to re-examine the ring */
|
||||
#define OBOE_PROMPT OBOE_REG(0x9)
|
||||
#define OBOE_PROMPT_BIT 0x1
|
||||
|
||||
/* Interrupt Status Register */
|
||||
#define OBOE_ISR OBOE_REG(0xc)
|
||||
/* Interrupt Enable Register */
|
||||
#define OBOE_IER OBOE_REG(0xd)
|
||||
/* Interrupt bits for IER and ISR */
|
||||
#define OBOE_INT_TXDONE 0x80
|
||||
#define OBOE_INT_RXDONE 0x40
|
||||
#define OBOE_INT_TXUNDER 0x20
|
||||
#define OBOE_INT_RXOVER 0x10
|
||||
#define OBOE_INT_SIP 0x08
|
||||
#define OBOE_INT_MASK 0xf8
|
||||
|
||||
/*Reset Register */
|
||||
#define OBOE_CONFIG1 OBOE_REG(0xe)
|
||||
#define OBOE_CONFIG1_RST 0x01
|
||||
#define OBOE_CONFIG1_DISABLE 0x02
|
||||
#define OBOE_CONFIG1_4 0x08
|
||||
#define OBOE_CONFIG1_8 0x08
|
||||
|
||||
#define OBOE_CONFIG1_ON 0x8
|
||||
#define OBOE_CONFIG1_RESET 0xf
|
||||
#define OBOE_CONFIG1_OFF 0xe
|
||||
|
||||
#define OBOE_STATUS OBOE_REG(0xf)
|
||||
#define OBOE_STATUS_RXBUSY 0x10
|
||||
#define OBOE_STATUS_FIRRX 0x04
|
||||
#define OBOE_STATUS_MIRRX 0x02
|
||||
#define OBOE_STATUS_SIRRX 0x01
|
||||
|
||||
|
||||
/*Speed control registers */
|
||||
#define OBOE_CONFIG0L OBOE_REG(0x10)
|
||||
#define OBOE_CONFIG0H OBOE_REG(0x11)
|
||||
|
||||
#define OBOE_CONFIG0H_TXONLOOP 0x80 /*Transmit when looping (dangerous) */
|
||||
#define OBOE_CONFIG0H_LOOP 0x40 /*Loopback Tx->Rx */
|
||||
#define OBOE_CONFIG0H_ENTX 0x10 /*Enable Tx */
|
||||
#define OBOE_CONFIG0H_ENRX 0x08 /*Enable Rx */
|
||||
#define OBOE_CONFIG0H_ENDMAC 0x04 /*Enable/reset* the DMA controller */
|
||||
#define OBOE_CONFIG0H_RCVANY 0x02 /*DMA mode 1=bytes, 0=dwords */
|
||||
|
||||
#define OBOE_CONFIG0L_CRC16 0x80 /*CRC 1=16 bit 0=32 bit */
|
||||
#define OBOE_CONFIG0L_ENFIR 0x40 /*Enable FIR */
|
||||
#define OBOE_CONFIG0L_ENMIR 0x20 /*Enable MIR */
|
||||
#define OBOE_CONFIG0L_ENSIR 0x10 /*Enable SIR */
|
||||
#define OBOE_CONFIG0L_ENSIRF 0x08 /*Enable SIR framer */
|
||||
#define OBOE_CONFIG0L_SIRTEST 0x04 /*Enable SIR framer in MIR and FIR */
|
||||
#define OBOE_CONFIG0L_INVERTTX 0x02 /*Invert Tx Line */
|
||||
#define OBOE_CONFIG0L_INVERTRX 0x01 /*Invert Rx Line */
|
||||
|
||||
#define OBOE_BOF OBOE_REG(0x12)
|
||||
#define OBOE_EOF OBOE_REG(0x13)
|
||||
|
||||
#define OBOE_ENABLEL OBOE_REG(0x14)
|
||||
#define OBOE_ENABLEH OBOE_REG(0x15)
|
||||
|
||||
#define OBOE_ENABLEH_PHYANDCLOCK 0x80 /*Toggle low to copy config in */
|
||||
#define OBOE_ENABLEH_CONFIGERR 0x40
|
||||
#define OBOE_ENABLEH_FIRON 0x20
|
||||
#define OBOE_ENABLEH_MIRON 0x10
|
||||
#define OBOE_ENABLEH_SIRON 0x08
|
||||
#define OBOE_ENABLEH_ENTX 0x04
|
||||
#define OBOE_ENABLEH_ENRX 0x02
|
||||
#define OBOE_ENABLEH_CRC16 0x01
|
||||
|
||||
#define OBOE_ENABLEL_BROADCAST 0x01
|
||||
|
||||
#define OBOE_CURR_PCONFIGL OBOE_REG(0x16) /*Current config */
|
||||
#define OBOE_CURR_PCONFIGH OBOE_REG(0x17)
|
||||
|
||||
#define OBOE_NEW_PCONFIGL OBOE_REG(0x18)
|
||||
#define OBOE_NEW_PCONFIGH OBOE_REG(0x19)
|
||||
|
||||
#define OBOE_PCONFIGH_BAUDMASK 0xfc
|
||||
#define OBOE_PCONFIGH_WIDTHMASK 0x04
|
||||
#define OBOE_PCONFIGL_WIDTHMASK 0xe0
|
||||
#define OBOE_PCONFIGL_PREAMBLEMASK 0x1f
|
||||
|
||||
#define OBOE_PCONFIG_BAUDMASK 0xfc00
|
||||
#define OBOE_PCONFIG_BAUDSHIFT 10
|
||||
#define OBOE_PCONFIG_WIDTHMASK 0x04e0
|
||||
#define OBOE_PCONFIG_WIDTHSHIFT 5
|
||||
#define OBOE_PCONFIG_PREAMBLEMASK 0x001f
|
||||
#define OBOE_PCONFIG_PREAMBLESHIFT 0
|
||||
|
||||
#define OBOE_MAXLENL OBOE_REG(0x1a)
|
||||
#define OBOE_MAXLENH OBOE_REG(0x1b)
|
||||
|
||||
#define OBOE_RXCOUNTH OBOE_REG(0x1c) /*Reset on recipt */
|
||||
#define OBOE_RXCOUNTL OBOE_REG(0x1d) /*of whole packet */
|
||||
|
||||
/* The PCI ID of the OBOE chip */
|
||||
#ifndef PCI_DEVICE_ID_FIR701
|
||||
#define PCI_DEVICE_ID_FIR701 0x0701
|
||||
#endif
|
||||
|
||||
#ifndef PCI_DEVICE_ID_FIRD01
|
||||
#define PCI_DEVICE_ID_FIRD01 0x0d01
|
||||
#endif
|
||||
|
||||
struct OboeSlot
|
||||
{
|
||||
__u16 len; /*Tweleve bits of packet length */
|
||||
__u8 unused;
|
||||
__u8 control; /*Slot control/status see below */
|
||||
__u32 address; /*Slot buffer address */
|
||||
}
|
||||
__packed;
|
||||
|
||||
#define OBOE_NTASKS OBOE_TXRING_OFFSET_IN_SLOTS
|
||||
|
||||
struct OboeRing
|
||||
{
|
||||
struct OboeSlot rx[OBOE_NTASKS];
|
||||
struct OboeSlot tx[OBOE_NTASKS];
|
||||
};
|
||||
|
||||
#define OBOE_RING_LEN (sizeof(struct OboeRing))
|
||||
|
||||
|
||||
#define OBOE_CTL_TX_HW_OWNS 0x80 /*W/R This slot owned by the hardware */
|
||||
#define OBOE_CTL_TX_DISTX_CRC 0x40 /*W Disable CRC generation for [FM]IR */
|
||||
#define OBOE_CTL_TX_BAD_CRC 0x20 /*W Generate bad CRC */
|
||||
#define OBOE_CTL_TX_SIP 0x10 /*W Generate an SIP after xmittion */
|
||||
#define OBOE_CTL_TX_MKUNDER 0x08 /*W Generate an underrun error */
|
||||
#define OBOE_CTL_TX_RTCENTX 0x04 /*W Enable receiver and generate TXdone */
|
||||
/* After this slot is processed */
|
||||
#define OBOE_CTL_TX_UNDER 0x01 /*R Set by hardware to indicate underrun */
|
||||
|
||||
|
||||
#define OBOE_CTL_RX_HW_OWNS 0x80 /*W/R This slot owned by hardware */
|
||||
#define OBOE_CTL_RX_PHYERR 0x40 /*R Decoder error on receiption */
|
||||
#define OBOE_CTL_RX_CRCERR 0x20 /*R CRC error only set for [FM]IR */
|
||||
#define OBOE_CTL_RX_LENGTH 0x10 /*R Packet > max Rx length */
|
||||
#define OBOE_CTL_RX_OVER 0x08 /*R set to indicate an overflow */
|
||||
#define OBOE_CTL_RX_SIRBAD 0x04 /*R SIR had BOF in packet or ABORT sequence */
|
||||
#define OBOE_CTL_RX_RXEOF 0x02 /*R Finished receiving on this slot */
|
||||
|
||||
|
||||
struct toshoboe_cb
|
||||
{
|
||||
struct net_device *netdev; /* Yes! we are some kind of netdevice */
|
||||
struct tty_driver ttydev;
|
||||
|
||||
struct irlap_cb *irlap; /* The link layer we are binded to */
|
||||
|
||||
chipio_t io; /* IrDA controller information */
|
||||
struct qos_info qos; /* QoS capabilities for this device */
|
||||
|
||||
__u32 flags; /* Interface flags */
|
||||
|
||||
struct pci_dev *pdev; /*PCI device */
|
||||
int base; /*IO base */
|
||||
|
||||
|
||||
int txpending; /*how many tx's are pending */
|
||||
int txs, rxs; /*Which slots are we at */
|
||||
|
||||
int irdad; /*Driver under control of netdev end */
|
||||
int async; /*Driver under control of async end */
|
||||
|
||||
|
||||
int stopped; /*Stopped by some or other APM stuff */
|
||||
|
||||
int filter; /*In SIR mode do we want to receive
|
||||
frames or byte ranges */
|
||||
|
||||
void *ringbuf; /*The ring buffer */
|
||||
struct OboeRing *ring; /*The ring */
|
||||
|
||||
void *tx_bufs[OBOE_RING_MAX_SIZE]; /*The buffers */
|
||||
void *rx_bufs[OBOE_RING_MAX_SIZE];
|
||||
|
||||
|
||||
int speed; /*Current setting of the speed */
|
||||
int new_speed; /*Set to request a speed change */
|
||||
|
||||
/* The spinlock protect critical parts of the driver.
|
||||
* Locking is done like this :
|
||||
* spin_lock_irqsave(&self->spinlock, flags);
|
||||
* Releasing the lock :
|
||||
* spin_unlock_irqrestore(&self->spinlock, flags);
|
||||
*/
|
||||
spinlock_t spinlock;
|
||||
/* Used for the probe and diagnostics code */
|
||||
int int_rx;
|
||||
int int_tx;
|
||||
int int_txunder;
|
||||
int int_rxover;
|
||||
int int_sip;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,157 +0,0 @@
|
||||
/*********************************************************************
|
||||
*
|
||||
* Filename: esi.c
|
||||
* Version: 1.6
|
||||
* Description: Driver for the Extended Systems JetEye PC dongle
|
||||
* Status: Experimental.
|
||||
* Author: Dag Brattli <dagb@cs.uit.no>
|
||||
* Created at: Sat Feb 21 18:54:38 1998
|
||||
* Modified at: Sun Oct 27 22:01:04 2002
|
||||
* Modified by: Martin Diehl <mad@mdiehl.de>
|
||||
*
|
||||
* Copyright (c) 1999 Dag Brattli, <dagb@cs.uit.no>,
|
||||
* Copyright (c) 1998 Thomas Davis, <ratbert@radiks.net>,
|
||||
* Copyright (c) 2002 Martin Diehl, <mad@mdiehl.de>,
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* 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, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <net/irda/irda.h>
|
||||
|
||||
#include "sir-dev.h"
|
||||
|
||||
static int esi_open(struct sir_dev *);
|
||||
static int esi_close(struct sir_dev *);
|
||||
static int esi_change_speed(struct sir_dev *, unsigned);
|
||||
static int esi_reset(struct sir_dev *);
|
||||
|
||||
static struct dongle_driver esi = {
|
||||
.owner = THIS_MODULE,
|
||||
.driver_name = "JetEye PC ESI-9680 PC",
|
||||
.type = IRDA_ESI_DONGLE,
|
||||
.open = esi_open,
|
||||
.close = esi_close,
|
||||
.reset = esi_reset,
|
||||
.set_speed = esi_change_speed,
|
||||
};
|
||||
|
||||
static int __init esi_sir_init(void)
|
||||
{
|
||||
return irda_register_dongle(&esi);
|
||||
}
|
||||
|
||||
static void __exit esi_sir_cleanup(void)
|
||||
{
|
||||
irda_unregister_dongle(&esi);
|
||||
}
|
||||
|
||||
static int esi_open(struct sir_dev *dev)
|
||||
{
|
||||
struct qos_info *qos = &dev->qos;
|
||||
|
||||
/* Power up and set dongle to 9600 baud */
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
|
||||
qos->baud_rate.bits &= IR_9600|IR_19200|IR_115200;
|
||||
qos->min_turn_time.bits = 0x01; /* Needs at least 10 ms */
|
||||
irda_qos_bits_to_value(qos);
|
||||
|
||||
/* irda thread waits 50 msec for power settling */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int esi_close(struct sir_dev *dev)
|
||||
{
|
||||
/* Power off dongle */
|
||||
sirdev_set_dtr_rts(dev, FALSE, FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function esi_change_speed (task)
|
||||
*
|
||||
* Set the speed for the Extended Systems JetEye PC ESI-9680 type dongle
|
||||
* Apparently (see old esi-driver) no delays are needed here...
|
||||
*
|
||||
*/
|
||||
static int esi_change_speed(struct sir_dev *dev, unsigned speed)
|
||||
{
|
||||
int ret = 0;
|
||||
int dtr, rts;
|
||||
|
||||
switch (speed) {
|
||||
case 19200:
|
||||
dtr = TRUE;
|
||||
rts = FALSE;
|
||||
break;
|
||||
case 115200:
|
||||
dtr = rts = TRUE;
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
speed = 9600;
|
||||
/* fall through */
|
||||
case 9600:
|
||||
dtr = FALSE;
|
||||
rts = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Change speed of dongle */
|
||||
sirdev_set_dtr_rts(dev, dtr, rts);
|
||||
dev->speed = speed;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function esi_reset (task)
|
||||
*
|
||||
* Reset dongle;
|
||||
*
|
||||
*/
|
||||
static int esi_reset(struct sir_dev *dev)
|
||||
{
|
||||
sirdev_set_dtr_rts(dev, FALSE, FALSE);
|
||||
|
||||
/* Hm, the old esi-driver left the dongle unpowered relying on
|
||||
* the following speed change to repower. This might work for
|
||||
* the esi because we only need the modem lines. However, now the
|
||||
* general rule is reset must bring the dongle to some working
|
||||
* well-known state because speed change might write to registers.
|
||||
* The old esi-driver didn't any delay here - let's hope it' fine.
|
||||
*/
|
||||
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
dev->speed = 9600;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Dag Brattli <dagb@cs.uit.no>");
|
||||
MODULE_DESCRIPTION("Extended Systems JetEye PC dongle driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("irda-dongle-1"); /* IRDA_ESI_DONGLE */
|
||||
|
||||
module_init(esi_sir_init);
|
||||
module_exit(esi_sir_cleanup);
|
||||
|
||||
@@ -1,252 +0,0 @@
|
||||
/*********************************************************************
|
||||
*
|
||||
* Filename: girbil.c
|
||||
* Version: 1.2
|
||||
* Description: Implementation for the Greenwich GIrBIL dongle
|
||||
* Status: Experimental.
|
||||
* Author: Dag Brattli <dagb@cs.uit.no>
|
||||
* Created at: Sat Feb 6 21:02:33 1999
|
||||
* Modified at: Fri Dec 17 09:13:20 1999
|
||||
* Modified by: Dag Brattli <dagb@cs.uit.no>
|
||||
*
|
||||
* Copyright (c) 1999 Dag Brattli, All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Neither Dag Brattli nor University of Tromsø admit liability nor
|
||||
* provide warranty for any of this software. This material is
|
||||
* provided "AS-IS" and at no charge.
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <net/irda/irda.h>
|
||||
|
||||
#include "sir-dev.h"
|
||||
|
||||
static int girbil_reset(struct sir_dev *dev);
|
||||
static int girbil_open(struct sir_dev *dev);
|
||||
static int girbil_close(struct sir_dev *dev);
|
||||
static int girbil_change_speed(struct sir_dev *dev, unsigned speed);
|
||||
|
||||
/* Control register 1 */
|
||||
#define GIRBIL_TXEN 0x01 /* Enable transmitter */
|
||||
#define GIRBIL_RXEN 0x02 /* Enable receiver */
|
||||
#define GIRBIL_ECAN 0x04 /* Cancel self emitted data */
|
||||
#define GIRBIL_ECHO 0x08 /* Echo control characters */
|
||||
|
||||
/* LED Current Register (0x2) */
|
||||
#define GIRBIL_HIGH 0x20
|
||||
#define GIRBIL_MEDIUM 0x21
|
||||
#define GIRBIL_LOW 0x22
|
||||
|
||||
/* Baud register (0x3) */
|
||||
#define GIRBIL_2400 0x30
|
||||
#define GIRBIL_4800 0x31
|
||||
#define GIRBIL_9600 0x32
|
||||
#define GIRBIL_19200 0x33
|
||||
#define GIRBIL_38400 0x34
|
||||
#define GIRBIL_57600 0x35
|
||||
#define GIRBIL_115200 0x36
|
||||
|
||||
/* Mode register (0x4) */
|
||||
#define GIRBIL_IRDA 0x40
|
||||
#define GIRBIL_ASK 0x41
|
||||
|
||||
/* Control register 2 (0x5) */
|
||||
#define GIRBIL_LOAD 0x51 /* Load the new baud rate value */
|
||||
|
||||
static struct dongle_driver girbil = {
|
||||
.owner = THIS_MODULE,
|
||||
.driver_name = "Greenwich GIrBIL",
|
||||
.type = IRDA_GIRBIL_DONGLE,
|
||||
.open = girbil_open,
|
||||
.close = girbil_close,
|
||||
.reset = girbil_reset,
|
||||
.set_speed = girbil_change_speed,
|
||||
};
|
||||
|
||||
static int __init girbil_sir_init(void)
|
||||
{
|
||||
return irda_register_dongle(&girbil);
|
||||
}
|
||||
|
||||
static void __exit girbil_sir_cleanup(void)
|
||||
{
|
||||
irda_unregister_dongle(&girbil);
|
||||
}
|
||||
|
||||
static int girbil_open(struct sir_dev *dev)
|
||||
{
|
||||
struct qos_info *qos = &dev->qos;
|
||||
|
||||
/* Power on dongle */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
|
||||
qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
|
||||
qos->min_turn_time.bits = 0x03;
|
||||
irda_qos_bits_to_value(qos);
|
||||
|
||||
/* irda thread waits 50 msec for power settling */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int girbil_close(struct sir_dev *dev)
|
||||
{
|
||||
/* Power off dongle */
|
||||
sirdev_set_dtr_rts(dev, FALSE, FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function girbil_change_speed (dev, speed)
|
||||
*
|
||||
* Set the speed for the Girbil type dongle.
|
||||
*
|
||||
*/
|
||||
|
||||
#define GIRBIL_STATE_WAIT_SPEED (SIRDEV_STATE_DONGLE_SPEED + 1)
|
||||
|
||||
static int girbil_change_speed(struct sir_dev *dev, unsigned speed)
|
||||
{
|
||||
unsigned state = dev->fsm.substate;
|
||||
unsigned delay = 0;
|
||||
u8 control[2];
|
||||
static int ret = 0;
|
||||
|
||||
/* dongle alread reset - port and dongle at default speed */
|
||||
|
||||
switch(state) {
|
||||
|
||||
case SIRDEV_STATE_DONGLE_SPEED:
|
||||
|
||||
/* Set DTR and Clear RTS to enter command mode */
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
|
||||
udelay(25); /* better wait a little while */
|
||||
|
||||
ret = 0;
|
||||
switch (speed) {
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
/* fall through */
|
||||
case 9600:
|
||||
control[0] = GIRBIL_9600;
|
||||
break;
|
||||
case 19200:
|
||||
control[0] = GIRBIL_19200;
|
||||
break;
|
||||
case 34800:
|
||||
control[0] = GIRBIL_38400;
|
||||
break;
|
||||
case 57600:
|
||||
control[0] = GIRBIL_57600;
|
||||
break;
|
||||
case 115200:
|
||||
control[0] = GIRBIL_115200;
|
||||
break;
|
||||
}
|
||||
control[1] = GIRBIL_LOAD;
|
||||
|
||||
/* Write control bytes */
|
||||
sirdev_raw_write(dev, control, 2);
|
||||
|
||||
dev->speed = speed;
|
||||
|
||||
state = GIRBIL_STATE_WAIT_SPEED;
|
||||
delay = 100;
|
||||
break;
|
||||
|
||||
case GIRBIL_STATE_WAIT_SPEED:
|
||||
/* Go back to normal mode */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
|
||||
udelay(25); /* better wait a little while */
|
||||
break;
|
||||
|
||||
default:
|
||||
net_err_ratelimited("%s - undefined state %d\n",
|
||||
__func__, state);
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
dev->fsm.substate = state;
|
||||
return (delay > 0) ? delay : ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function girbil_reset (driver)
|
||||
*
|
||||
* This function resets the girbil dongle.
|
||||
*
|
||||
* Algorithm:
|
||||
* 0. set RTS, and wait at least 5 ms
|
||||
* 1. clear RTS
|
||||
*/
|
||||
|
||||
|
||||
#define GIRBIL_STATE_WAIT1_RESET (SIRDEV_STATE_DONGLE_RESET + 1)
|
||||
#define GIRBIL_STATE_WAIT2_RESET (SIRDEV_STATE_DONGLE_RESET + 2)
|
||||
#define GIRBIL_STATE_WAIT3_RESET (SIRDEV_STATE_DONGLE_RESET + 3)
|
||||
|
||||
static int girbil_reset(struct sir_dev *dev)
|
||||
{
|
||||
unsigned state = dev->fsm.substate;
|
||||
unsigned delay = 0;
|
||||
u8 control = GIRBIL_TXEN | GIRBIL_RXEN;
|
||||
int ret = 0;
|
||||
|
||||
switch (state) {
|
||||
case SIRDEV_STATE_DONGLE_RESET:
|
||||
/* Reset dongle */
|
||||
sirdev_set_dtr_rts(dev, TRUE, FALSE);
|
||||
/* Sleep at least 5 ms */
|
||||
delay = 20;
|
||||
state = GIRBIL_STATE_WAIT1_RESET;
|
||||
break;
|
||||
|
||||
case GIRBIL_STATE_WAIT1_RESET:
|
||||
/* Set DTR and clear RTS to enter command mode */
|
||||
sirdev_set_dtr_rts(dev, FALSE, TRUE);
|
||||
delay = 20;
|
||||
state = GIRBIL_STATE_WAIT2_RESET;
|
||||
break;
|
||||
|
||||
case GIRBIL_STATE_WAIT2_RESET:
|
||||
/* Write control byte */
|
||||
sirdev_raw_write(dev, &control, 1);
|
||||
delay = 20;
|
||||
state = GIRBIL_STATE_WAIT3_RESET;
|
||||
break;
|
||||
|
||||
case GIRBIL_STATE_WAIT3_RESET:
|
||||
/* Go back to normal mode */
|
||||
sirdev_set_dtr_rts(dev, TRUE, TRUE);
|
||||
dev->speed = 9600;
|
||||
break;
|
||||
|
||||
default:
|
||||
net_err_ratelimited("%s(), undefined state %d\n",
|
||||
__func__, state);
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
dev->fsm.substate = state;
|
||||
return (delay > 0) ? delay : ret;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Dag Brattli <dagb@cs.uit.no>");
|
||||
MODULE_DESCRIPTION("Greenwich GIrBIL dongle driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("irda-dongle-4"); /* IRDA_GIRBIL_DONGLE */
|
||||
|
||||
module_init(girbil_sir_init);
|
||||
module_exit(girbil_sir_cleanup);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,175 +0,0 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Filename: irda-usb.h
|
||||
* Version: 0.10
|
||||
* Description: IrDA-USB Driver
|
||||
* Status: Experimental
|
||||
* Author: Dag Brattli <dag@brattli.net>
|
||||
*
|
||||
* Copyright (C) 2001, Roman Weissgaerber <weissg@vienna.at>
|
||||
* Copyright (C) 2000, Dag Brattli <dag@brattli.net>
|
||||
* Copyright (C) 2001, Jean Tourrilhes <jt@hpl.hp.com>
|
||||
* Copyright (C) 2004, SigmaTel, Inc. <irquality@sigmatel.com>
|
||||
* Copyright (C) 2005, Milan Beno <beno@pobox.sk>
|
||||
* Copyright (C) 2006, Nick FEdchik <nick@fedchik.org.ua>
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <linux/ktime.h>
|
||||
|
||||
#include <net/irda/irda.h>
|
||||
#include <net/irda/irda_device.h> /* struct irlap_cb */
|
||||
|
||||
#define RX_COPY_THRESHOLD 200
|
||||
#define IRDA_USB_MAX_MTU 2051
|
||||
#define IRDA_USB_SPEED_MTU 64 /* Weird, but work like this */
|
||||
|
||||
/* Maximum number of active URB on the Rx path
|
||||
* This is the amount of buffers the we keep between the USB harware and the
|
||||
* IrDA stack.
|
||||
*
|
||||
* Note : the network layer does also queue the packets between us and the
|
||||
* IrDA stack, and is actually pretty fast and efficient in doing that.
|
||||
* Therefore, we don't need to have a large number of URBs, and we can
|
||||
* perfectly live happy with only one. We certainly don't need to keep the
|
||||
* full IrTTP window around here...
|
||||
* I repeat for those who have trouble to understand : 1 URB is plenty
|
||||
* good enough to handle back-to-back (brickwalled) frames. I tried it,
|
||||
* it works (it's the hardware that has trouble doing it).
|
||||
*
|
||||
* Having 2 URBs would allow the USB stack to process one URB while we take
|
||||
* care of the other and then swap the URBs...
|
||||
* On the other hand, increasing the number of URB will have penalities
|
||||
* in term of latency and will interact with the link management in IrLAP...
|
||||
* Jean II */
|
||||
#define IU_MAX_ACTIVE_RX_URBS 1 /* Don't touch !!! */
|
||||
|
||||
/* When a Rx URB is passed back to us, we can't reuse it immediately,
|
||||
* because it may still be referenced by the USB layer. Therefore we
|
||||
* need to keep one extra URB in the Rx path.
|
||||
* Jean II */
|
||||
#define IU_MAX_RX_URBS (IU_MAX_ACTIVE_RX_URBS + 1)
|
||||
|
||||
/* Various ugly stuff to try to workaround generic problems */
|
||||
/* Send speed command in case of timeout, just for trying to get things sane */
|
||||
#define IU_BUG_KICK_TIMEOUT
|
||||
/* Show the USB class descriptor */
|
||||
#undef IU_DUMP_CLASS_DESC
|
||||
/* Assume a minimum round trip latency for USB transfer (in us)...
|
||||
* USB transfer are done in the next USB slot if there is no traffic
|
||||
* (1/19 msec) and is done at 12 Mb/s :
|
||||
* Waiting for slot + tx = (53us + 16us) * 2 = 137us minimum.
|
||||
* Rx notification will only be done at the end of the USB frame period :
|
||||
* OHCI : frame period = 1ms
|
||||
* UHCI : frame period = 1ms, but notification can take 2 or 3 ms :-(
|
||||
* EHCI : frame period = 125us */
|
||||
#define IU_USB_MIN_RTT 500 /* This should be safe in most cases */
|
||||
|
||||
/* Inbound header */
|
||||
#define MEDIA_BUSY 0x80
|
||||
|
||||
#define SPEED_2400 0x01
|
||||
#define SPEED_9600 0x02
|
||||
#define SPEED_19200 0x03
|
||||
#define SPEED_38400 0x04
|
||||
#define SPEED_57600 0x05
|
||||
#define SPEED_115200 0x06
|
||||
#define SPEED_576000 0x07
|
||||
#define SPEED_1152000 0x08
|
||||
#define SPEED_4000000 0x09
|
||||
#define SPEED_16000000 0x0a
|
||||
|
||||
/* Basic capabilities */
|
||||
#define IUC_DEFAULT 0x00 /* Basic device compliant with 1.0 spec */
|
||||
/* Main bugs */
|
||||
#define IUC_SPEED_BUG 0x01 /* Device doesn't set speed after the frame */
|
||||
#define IUC_NO_WINDOW 0x02 /* Device doesn't behave with big Rx window */
|
||||
#define IUC_NO_TURN 0x04 /* Device doesn't do turnaround by itself */
|
||||
/* Not currently used */
|
||||
#define IUC_SIR_ONLY 0x08 /* Device doesn't behave at FIR speeds */
|
||||
#define IUC_SMALL_PKT 0x10 /* Device doesn't behave with big Rx packets */
|
||||
#define IUC_MAX_WINDOW 0x20 /* Device underestimate the Rx window */
|
||||
#define IUC_MAX_XBOFS 0x40 /* Device need more xbofs than advertised */
|
||||
#define IUC_STIR421X 0x80 /* SigmaTel 4210/4220/4116 VFIR */
|
||||
|
||||
/* USB class definitions */
|
||||
#define USB_IRDA_HEADER 0x01
|
||||
#define USB_CLASS_IRDA 0x02 /* USB_CLASS_APP_SPEC subclass */
|
||||
#define USB_DT_IRDA 0x21
|
||||
#define USB_IRDA_STIR421X_HEADER 0x03
|
||||
#define IU_SIGMATEL_MAX_RX_URBS (IU_MAX_ACTIVE_RX_URBS + \
|
||||
USB_IRDA_STIR421X_HEADER)
|
||||
|
||||
struct irda_class_desc {
|
||||
__u8 bLength;
|
||||
__u8 bDescriptorType;
|
||||
__le16 bcdSpecRevision;
|
||||
__u8 bmDataSize;
|
||||
__u8 bmWindowSize;
|
||||
__u8 bmMinTurnaroundTime;
|
||||
__le16 wBaudRate;
|
||||
__u8 bmAdditionalBOFs;
|
||||
__u8 bIrdaRateSniff;
|
||||
__u8 bMaxUnicastList;
|
||||
} __packed;
|
||||
|
||||
/* class specific interface request to get the IrDA-USB class descriptor
|
||||
* (6.2.5, USB-IrDA class spec 1.0) */
|
||||
|
||||
#define IU_REQ_GET_CLASS_DESC 0x06
|
||||
#define STIR421X_MAX_PATCH_DOWNLOAD_SIZE 1023
|
||||
|
||||
struct irda_usb_cb {
|
||||
struct irda_class_desc *irda_desc;
|
||||
struct usb_device *usbdev; /* init: probe_irda */
|
||||
struct usb_interface *usbintf; /* init: probe_irda */
|
||||
int netopen; /* Device is active for network */
|
||||
int present; /* Device is present on the bus */
|
||||
__u32 capability; /* Capability of the hardware */
|
||||
__u8 bulk_in_ep; /* Rx Endpoint assignments */
|
||||
__u8 bulk_out_ep; /* Tx Endpoint assignments */
|
||||
__u16 bulk_out_mtu; /* Max Tx packet size in bytes */
|
||||
__u8 bulk_int_ep; /* Interrupt Endpoint assignments */
|
||||
|
||||
__u8 max_rx_urb;
|
||||
struct urb **rx_urb; /* URBs used to receive data frames */
|
||||
struct urb *idle_rx_urb; /* Pointer to idle URB in Rx path */
|
||||
struct urb *tx_urb; /* URB used to send data frames */
|
||||
struct urb *speed_urb; /* URB used to send speed commands */
|
||||
|
||||
struct net_device *netdev; /* Yes! we are some kind of netdev. */
|
||||
struct irlap_cb *irlap; /* The link layer we are binded to */
|
||||
struct qos_info qos;
|
||||
char *speed_buff; /* Buffer for speed changes */
|
||||
char *tx_buff;
|
||||
|
||||
ktime_t stamp;
|
||||
|
||||
spinlock_t lock; /* For serializing Tx operations */
|
||||
|
||||
__u16 xbofs; /* Current xbofs setting */
|
||||
__s16 new_xbofs; /* xbofs we need to set */
|
||||
__u32 speed; /* Current speed */
|
||||
__s32 new_speed; /* speed we need to set */
|
||||
|
||||
__u8 header_length; /* USB-IrDA frame header size */
|
||||
int needspatch; /* device needs firmware patch */
|
||||
|
||||
struct timer_list rx_defer_timer; /* Wait for Rx error to clear */
|
||||
struct urb *rx_defer_timer_urb; /* URB attached to rx_defer_timer */
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user