Toshiba Satellite 1800, Satellite 5100, Tecra 9100 laptops and may be many other models are provided with a SMCS LPC47N227 SuperIO chip which is IrDA SIR/FIR capable. The IrDA subsystem of the SuperIO chip is supported by the smc-ircc Linux kernel module. Unfortunately the BIOS neither configurates the SuperIO chip IrDA subsystem (SIR port, FIR port, dma, irq, IrDA mode, power) nor sets the PCI-ISA bridge to decode any usable port. Linux kernel is thus prevented to detect the second UART making impossible to use it in SIR mode. For the same reason, the FIR mode smc-ircc is able to detect the SuperIO chip but, once found the IrDA subsystem unconfigured, fails to install.
While this problem will be fixed in Linux 2.6.x kernel series, the 2.4.x users are frustrated. Daniele Peri, Rob Miller and Paul Hampson mananged to build little utilities that initialize the LPC47N227 SuperIO allowing smc-ircc IrDA kernel driver to detect and use the SMSC chip.
My sole work was to put these utilities as one package, easy to install and use.
- -V, --version
- Show program version and exit
- -h, --help
- Show a little help on options and exit
- -v, --verbose
- Increase the details about actions performed
- -t, --tty=device
- If specified, the serial device will be unbound from the kernel stock serial driver. It is there to replace an external call to setserial(1) to unset the UART of the device. There is no default value.
- -s, --sirio=IO
- Set the SIR (serial infrared) I/O port address to IO. Default value is 0x3f8.
- -f, --firio=IO
- Set the FIR (fast infrared) I/O port address to IO. Default value is 0x130.
- -i, --firirq=IRQ
- Set the FIR (fast infrared) IRQ line to IRQ. Default value is 3.
- -d, --firdma=DMA
Set the FIR (fast infrared) DMA channel to DMA. Default
value is 3.
When system startup a script is run from /etc/init.d and which run appropriate SMC intialization utility. This is done before PCMCIA startup because on Tecra 9100 and other models the orinoco_cs wireless driver will block the I/O region used 47N227 SuperIO.
The only configuration file is /etc/sysconfig/smcinit and the variable SMCCONFIG can be set to "1800" or "5100". By default "5100" value is used.
- for Toshiba Satellite 1800
- for Toshiba Satellite 5100 and Toshiba Tecra 9100
The next step is to configure the kernel IrDA stack package to attach the smc-ircc driver. This is Linux distribution specific. The main thing is that the device should be set to "irda0". Run the following command:
irattach irda0 -s
Distribution specific configuration:
- Edit the /etc/sysconfig/irda and set IRDA_PORT=irda0
- Edit the /etc/sysconfig/irda and set DEVICE=irda0
The smc-ircc driver is preloaded in kernel. I tested the package only on Tecra 9100 without any additional step, but for Toshiba Satellite 1800 Daniele Peri sugest to put the following line in your /etc/modules.conf (on one line):
options smc-ircc ircc_dma=3 ircc_irq=7 ircc_cfg=0x2e \ ircc_sir=0x2e8 ircc_fir=0x2f8
After that run the command:
prompt# depmod -a
If the laptop enter suspend mode, then resume operation the smc-ircc driver will stop working. You need to stop IrDA service, then SMCINIT, start SMCINIT, and finally start IrDA service. Simply put, the kernel driver must be unloaded, then reloaded.
- Configuration file for SMCINIT startup script. It's shell script.