[media] staging: sir: remove unselectable Tekram and Actisys
Support for these sir ports is not compiled in by default, it has to be enabled by manually defining LIRC_TEKRAM, LIRC_SIR_ACTISYS_ACT200L or LIRC_SIR_ACTISYS_ACT220L somewhere. This cannot be done from Kconfig at all so remove them from the driver. Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
cf9ed9aa5b
commit
402e7b63df
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* LIRC SIR driver, (C) 2000 Milan Pikula <www@fornax.sk>
|
||||
* IR SIR driver, (C) 2000 Milan Pikula <www@fornax.sk>
|
||||
*
|
||||
* sir_ir - Device driver for use with SIR (serial infra red)
|
||||
* mode of IrDA on many notebooks.
|
||||
@ -17,20 +17,6 @@
|
||||
* 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
|
||||
*
|
||||
*
|
||||
* 2000/09/16 Frank Przybylski <mail@frankprzybylski.de> :
|
||||
* added timeout and relaxed pulse detection, removed gap bug
|
||||
*
|
||||
* 2000/12/15 Christoph Bartelmus <lirc@bartelmus.de> :
|
||||
* added support for Tekram Irmate 210 (sending does not work yet,
|
||||
* kind of disappointing that nobody was able to implement that
|
||||
* before),
|
||||
* major clean-up
|
||||
*
|
||||
* 2001/02/27 Christoph Bartelmus <lirc@bartelmus.de> :
|
||||
* added support for StrongARM SA1100 embedded microprocessor
|
||||
* parts cut'n'pasted from sa1100_ir.c (C) 2000 Russell King
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
@ -61,62 +47,18 @@
|
||||
#include <media/rc-core.h>
|
||||
|
||||
/* SECTION: Definitions */
|
||||
|
||||
/*** Tekram dongle ***/
|
||||
#ifdef LIRC_SIR_TEKRAM
|
||||
/* stolen from kernel source */
|
||||
/* definitions for Tekram dongle */
|
||||
#define TEKRAM_115200 0x00
|
||||
#define TEKRAM_57600 0x01
|
||||
#define TEKRAM_38400 0x02
|
||||
#define TEKRAM_19200 0x03
|
||||
#define TEKRAM_9600 0x04
|
||||
#define TEKRAM_2400 0x08
|
||||
|
||||
#define TEKRAM_PW 0x10 /* Pulse select bit */
|
||||
|
||||
/* 10bit * 1s/115200bit in milliseconds = 87ms*/
|
||||
#define TIME_CONST (10000000ul/115200ul)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef LIRC_SIR_ACTISYS_ACT200L
|
||||
static void init_act200(void);
|
||||
#elif defined(LIRC_SIR_ACTISYS_ACT220L)
|
||||
static void init_act220(void);
|
||||
#endif
|
||||
|
||||
#define PULSE '['
|
||||
|
||||
#ifndef LIRC_SIR_TEKRAM
|
||||
/* 9bit * 1s/115200bit in milli seconds = 78.125ms*/
|
||||
#define TIME_CONST (9000000ul/115200ul)
|
||||
#endif
|
||||
|
||||
|
||||
/* timeout for sequences in jiffies (=5/100s), must be longer than TIME_CONST */
|
||||
#define SIR_TIMEOUT (HZ*5/100)
|
||||
|
||||
#ifndef LIRC_ON_SA1100
|
||||
#ifndef LIRC_IRQ
|
||||
#define LIRC_IRQ 4
|
||||
#endif
|
||||
#ifndef LIRC_PORT
|
||||
/* for external dongles, default to com1 */
|
||||
#if defined(LIRC_SIR_ACTISYS_ACT200L) || \
|
||||
defined(LIRC_SIR_ACTISYS_ACT220L) || \
|
||||
defined(LIRC_SIR_TEKRAM)
|
||||
#define LIRC_PORT 0x3f8
|
||||
#else
|
||||
/* onboard sir ports are typically com3 */
|
||||
#define LIRC_PORT 0x3e8
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int io = LIRC_PORT;
|
||||
static int irq = LIRC_IRQ;
|
||||
static int io = 0x3e8;
|
||||
static int irq = 4;
|
||||
static int threshold = 3;
|
||||
#endif
|
||||
|
||||
static DEFINE_SPINLOCK(timer_lock);
|
||||
static struct timer_list timerlist;
|
||||
@ -392,71 +334,6 @@ static int init_hardware(void)
|
||||
|
||||
spin_lock_irqsave(&hardware_lock, flags);
|
||||
/* reset UART */
|
||||
#if defined(LIRC_SIR_TEKRAM)
|
||||
/* disable FIFO */
|
||||
soutp(UART_FCR,
|
||||
UART_FCR_CLEAR_RCVR|
|
||||
UART_FCR_CLEAR_XMIT|
|
||||
UART_FCR_TRIGGER_1);
|
||||
|
||||
/* Set DLAB 0. */
|
||||
soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
|
||||
|
||||
/* First of all, disable all interrupts */
|
||||
soutp(UART_IER, sinp(UART_IER) &
|
||||
(~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI)));
|
||||
|
||||
/* Set DLAB 1. */
|
||||
soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
|
||||
|
||||
/* Set divisor to 12 => 9600 Baud */
|
||||
soutp(UART_DLM, 0);
|
||||
soutp(UART_DLL, 12);
|
||||
|
||||
/* Set DLAB 0. */
|
||||
soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
|
||||
|
||||
/* power supply */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
safe_udelay(50*1000);
|
||||
|
||||
/* -DTR low -> reset PIC */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
|
||||
udelay(1*1000);
|
||||
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
udelay(100);
|
||||
|
||||
|
||||
/* -RTS low -> send control byte */
|
||||
soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2);
|
||||
udelay(7);
|
||||
soutp(UART_TX, TEKRAM_115200|TEKRAM_PW);
|
||||
|
||||
/* one byte takes ~1042 usec to transmit at 9600,8N1 */
|
||||
udelay(1500);
|
||||
|
||||
/* back to normal operation */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
udelay(50);
|
||||
|
||||
udelay(1500);
|
||||
|
||||
/* read previous control byte */
|
||||
pr_info("0x%02x\n", sinp(UART_RX));
|
||||
|
||||
/* Set DLAB 1. */
|
||||
soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
|
||||
|
||||
/* Set divisor to 1 => 115200 Baud */
|
||||
soutp(UART_DLM, 0);
|
||||
soutp(UART_DLL, 1);
|
||||
|
||||
/* Set DLAB 0, 8 Bit */
|
||||
soutp(UART_LCR, UART_LCR_WLEN8);
|
||||
/* enable interrupts */
|
||||
soutp(UART_IER, sinp(UART_IER)|UART_IER_RDI);
|
||||
#else
|
||||
outb(0, io + UART_MCR);
|
||||
outb(0, io + UART_IER);
|
||||
/* init UART */
|
||||
@ -472,12 +349,6 @@ static int init_hardware(void)
|
||||
outb(UART_IER_RDI, io + UART_IER);
|
||||
/* turn on UART */
|
||||
outb(UART_MCR_DTR|UART_MCR_RTS|UART_MCR_OUT2, io + UART_MCR);
|
||||
#ifdef LIRC_SIR_ACTISYS_ACT200L
|
||||
init_act200();
|
||||
#elif defined(LIRC_SIR_ACTISYS_ACT220L)
|
||||
init_act220();
|
||||
#endif
|
||||
#endif
|
||||
spin_unlock_irqrestore(&hardware_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
@ -526,208 +397,6 @@ static void drop_port(void)
|
||||
release_region(io, 8);
|
||||
}
|
||||
|
||||
#ifdef LIRC_SIR_ACTISYS_ACT200L
|
||||
/* Crystal/Cirrus CS8130 IR transceiver, used in Actisys Act200L dongle */
|
||||
/* some code borrowed from Linux IRDA driver */
|
||||
|
||||
/* Register 0: Control register #1 */
|
||||
#define ACT200L_REG0 0x00
|
||||
#define ACT200L_TXEN 0x01 /* Enable transmitter */
|
||||
#define ACT200L_RXEN 0x02 /* Enable receiver */
|
||||
#define ACT200L_ECHO 0x08 /* Echo control chars */
|
||||
|
||||
/* 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 3: Transmit mode register #2 */
|
||||
#define ACT200L_REG3 0x30
|
||||
#define ACT200L_B0 0x01 /* DataBits, 0=6, 1=7, 2=8, 3=9(8P) */
|
||||
#define ACT200L_B1 0x02 /* DataBits, 0=6, 1=7, 2=8, 3=9(8P) */
|
||||
#define ACT200L_CHSY 0x04 /* StartBit Synced 0=bittime, 1=startbit */
|
||||
|
||||
/* 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 */
|
||||
/*.. other various IRDA bit modes, and TV remote modes..*/
|
||||
|
||||
/* 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 Divider 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 void init_act200(void)
|
||||
{
|
||||
int i;
|
||||
__u8 control[] = {
|
||||
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_REG3 | ACT200L_B0,
|
||||
ACT200L_REG0 | ACT200L_TXEN | ACT200L_RXEN,
|
||||
ACT200L_REG8 | (ACT200L_115200 & 0x0f),
|
||||
ACT200L_REG9 | ((ACT200L_115200 >> 4) & 0x0f),
|
||||
ACT200L_REG1 | ACT200L_LODB | ACT200L_WIDE
|
||||
};
|
||||
|
||||
/* Set DLAB 1. */
|
||||
soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN8);
|
||||
|
||||
/* Set divisor to 12 => 9600 Baud */
|
||||
soutp(UART_DLM, 0);
|
||||
soutp(UART_DLL, 12);
|
||||
|
||||
/* Set DLAB 0. */
|
||||
soutp(UART_LCR, UART_LCR_WLEN8);
|
||||
/* Set divisor to 12 => 9600 Baud */
|
||||
|
||||
/* power supply */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
for (i = 0; i < 50; i++)
|
||||
safe_udelay(1000);
|
||||
|
||||
/* Reset the dongle : set RTS low for 25 ms */
|
||||
soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2);
|
||||
for (i = 0; i < 25; i++)
|
||||
udelay(1000);
|
||||
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
udelay(100);
|
||||
|
||||
/* Clear DTR and set RTS to enter command mode */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
|
||||
udelay(7);
|
||||
|
||||
/* send out the control register settings for 115K 7N1 SIR operation */
|
||||
for (i = 0; i < sizeof(control); i++) {
|
||||
soutp(UART_TX, control[i]);
|
||||
/* one byte takes ~1042 usec to transmit at 9600,8N1 */
|
||||
udelay(1500);
|
||||
}
|
||||
|
||||
/* back to normal operation */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
udelay(50);
|
||||
|
||||
udelay(1500);
|
||||
soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
|
||||
|
||||
/* Set DLAB 1. */
|
||||
soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN7);
|
||||
|
||||
/* Set divisor to 1 => 115200 Baud */
|
||||
soutp(UART_DLM, 0);
|
||||
soutp(UART_DLL, 1);
|
||||
|
||||
/* Set DLAB 0. */
|
||||
soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
|
||||
|
||||
/* Set DLAB 0, 7 Bit */
|
||||
soutp(UART_LCR, UART_LCR_WLEN7);
|
||||
|
||||
/* enable interrupts */
|
||||
soutp(UART_IER, sinp(UART_IER)|UART_IER_RDI);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LIRC_SIR_ACTISYS_ACT220L
|
||||
/*
|
||||
* Derived from linux IrDA driver (net/irda/actisys.c)
|
||||
* Drop me a mail for any kind of comment: maxx@spaceboyz.net
|
||||
*/
|
||||
|
||||
void init_act220(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* DLAB 1 */
|
||||
soutp(UART_LCR, UART_LCR_DLAB|UART_LCR_WLEN7);
|
||||
|
||||
/* 9600 baud */
|
||||
soutp(UART_DLM, 0);
|
||||
soutp(UART_DLL, 12);
|
||||
|
||||
/* DLAB 0 */
|
||||
soutp(UART_LCR, UART_LCR_WLEN7);
|
||||
|
||||
/* reset the dongle, set DTR low for 10us */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
|
||||
udelay(10);
|
||||
|
||||
/* back to normal (still 9600) */
|
||||
soutp(UART_MCR, UART_MCR_DTR|UART_MCR_RTS|UART_MCR_OUT2);
|
||||
|
||||
/*
|
||||
* send RTS pulses until we reach 115200
|
||||
* i hope this is really the same for act220l/act220l+
|
||||
*/
|
||||
for (i = 0; i < 3; i++) {
|
||||
udelay(10);
|
||||
/* set RTS low for 10 us */
|
||||
soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2);
|
||||
udelay(10);
|
||||
/* set RTS high for 10 us */
|
||||
soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
|
||||
}
|
||||
|
||||
/* back to normal operation */
|
||||
udelay(1500); /* better safe than sorry ;) */
|
||||
|
||||
/* Set DLAB 1. */
|
||||
soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN7);
|
||||
|
||||
/* Set divisor to 1 => 115200 Baud */
|
||||
soutp(UART_DLM, 0);
|
||||
soutp(UART_DLL, 1);
|
||||
|
||||
/* Set DLAB 0, 7 Bit */
|
||||
/* The dongle doesn't seem to have any problems with operation at 7N1 */
|
||||
soutp(UART_LCR, UART_LCR_WLEN7);
|
||||
|
||||
/* enable interrupts */
|
||||
soutp(UART_IER, UART_IER_RDI);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int init_sir_ir(void)
|
||||
{
|
||||
int retval;
|
||||
@ -809,19 +478,8 @@ static void __exit sir_ir_exit(void)
|
||||
module_init(sir_ir_init);
|
||||
module_exit(sir_ir_exit);
|
||||
|
||||
#ifdef LIRC_SIR_TEKRAM
|
||||
MODULE_DESCRIPTION("Infrared receiver driver for Tekram Irmate 210");
|
||||
MODULE_AUTHOR("Christoph Bartelmus");
|
||||
#elif defined(LIRC_SIR_ACTISYS_ACT200L)
|
||||
MODULE_DESCRIPTION("LIRC driver for Actisys Act200L");
|
||||
MODULE_AUTHOR("Karl Bongers");
|
||||
#elif defined(LIRC_SIR_ACTISYS_ACT220L)
|
||||
MODULE_DESCRIPTION("LIRC driver for Actisys Act220L(+)");
|
||||
MODULE_AUTHOR("Jan Roemisch");
|
||||
#else
|
||||
MODULE_DESCRIPTION("Infrared receiver driver for SIR type serial ports");
|
||||
MODULE_AUTHOR("Milan Pikula");
|
||||
#endif
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_param(io, int, 0444);
|
||||
|
Loading…
Reference in New Issue
Block a user