Initialize the smsc irda controler on various laptops
smcinit [OPTIONS]
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.
1800
for Toshiba Satellite 1800
5100
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:
SuSE
Edit the /etc/sysconfig/irda and set IRDA_PORT=irda0
RedHat
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.
/etc/sysconfig/smcinit
Configuration file for SMCINIT startup script. It's shell script.
This document is made by Claudiu Costin <[email protected]> The utilities authors are Daniele Peri, Rob Miller and Paul Hampson. Thomas Pinz made improvements to tosh-smcinit (the former tosh5100-smcinit) to expand the number of Toshiba Satellite models supported.
smcinit(7),
tosh1800-smcinit(8),
irattach(1),
irdadump(1),
http://irda.sourceforge.net/smcinit/ the SMCINIT package home page.