Commit e97b81dd authored by Mark M. Hoffman's avatar Mark M. Hoffman Committed by Greg Kroah-Hartman

[PATCH] i2c-parport: Make type parameter mandatory

This patch forces the user to specify what type of adapter is present when
loading i2c-parport or i2c-parport-light.  If none is specified, the driver
init simply fails - instead of assuming adapter type 0.

This alleviates the sometimes lengthy boot time delays which can be caused
by accidentally building one of these into a kernel along with several i2c
slave drivers that have lengthy probe routines (e.g. hwmon drivers).

Kconfig and documentation updated accordingly.
Signed-off-by: default avatarMark M. Hoffman <mhoffman@lightlink.com>
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 3cb8e1a9
...@@ -12,18 +12,22 @@ meant as a replacement for the older, individual drivers: ...@@ -12,18 +12,22 @@ meant as a replacement for the older, individual drivers:
teletext adapters) teletext adapters)
It currently supports the following devices: It currently supports the following devices:
* Philips adapter * (type=0) Philips adapter
* home brew teletext adapter * (type=1) home brew teletext adapter
* Velleman K8000 adapter * (type=2) Velleman K8000 adapter
* ELV adapter * (type=3) ELV adapter
* Analog Devices evaluation boards (ADM1025, ADM1030, ADM1031, ADM1032) * (type=4) Analog Devices ADM1032 evaluation board
* Barco LPT->DVI (K5800236) adapter * (type=5) Analog Devices evaluation boards: ADM1025, ADM1030, ADM1031
* (type=6) Barco LPT->DVI (K5800236) adapter
These devices use different pinout configurations, so you have to tell These devices use different pinout configurations, so you have to tell
the driver what you have, using the type module parameter. There is no the driver what you have, using the type module parameter. There is no
way to autodetect the devices. Support for different pinout configurations way to autodetect the devices. Support for different pinout configurations
can be easily added when needed. can be easily added when needed.
Earlier kernels defaulted to type=0 (Philips). But now, if the type
parameter is missing, the driver will simply fail to initialize.
Building your own adapter Building your own adapter
------------------------- -------------------------
......
...@@ -286,7 +286,10 @@ config I2C_PARPORT ...@@ -286,7 +286,10 @@ config I2C_PARPORT
This driver is a replacement for (and was inspired by) an older This driver is a replacement for (and was inspired by) an older
driver named i2c-philips-par. The new driver supports more devices, driver named i2c-philips-par. The new driver supports more devices,
and makes it easier to add support for new devices. and makes it easier to add support for new devices.
An adapter type parameter is now mandatory. Please read the file
Documentation/i2c/busses/i2c-parport for details.
Another driver exists, named i2c-parport-light, which doesn't depend Another driver exists, named i2c-parport-light, which doesn't depend
on the parport driver. This is meant for embedded systems. Don't say on the parport driver. This is meant for embedded systems. Don't say
Y here if you intend to say Y or M there. Y here if you intend to say Y or M there.
......
...@@ -121,9 +121,14 @@ static struct i2c_adapter parport_adapter = { ...@@ -121,9 +121,14 @@ static struct i2c_adapter parport_adapter = {
static int __init i2c_parport_init(void) static int __init i2c_parport_init(void)
{ {
if (type < 0 || type >= ARRAY_SIZE(adapter_parm)) { if (type < 0) {
printk(KERN_WARNING "i2c-parport: adapter type unspecified\n");
return -ENODEV;
}
if (type >= ARRAY_SIZE(adapter_parm)) {
printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type); printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type);
type = 0; return -ENODEV;
} }
if (base == 0) { if (base == 0) {
......
...@@ -241,9 +241,14 @@ static struct parport_driver i2c_parport_driver = { ...@@ -241,9 +241,14 @@ static struct parport_driver i2c_parport_driver = {
static int __init i2c_parport_init(void) static int __init i2c_parport_init(void)
{ {
if (type < 0 || type >= ARRAY_SIZE(adapter_parm)) { if (type < 0) {
printk(KERN_WARNING "i2c-parport: adapter type unspecified\n");
return -ENODEV;
}
if (type >= ARRAY_SIZE(adapter_parm)) {
printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type); printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type);
type = 0; return -ENODEV;
} }
return parport_register_driver(&i2c_parport_driver); return parport_register_driver(&i2c_parport_driver);
......
...@@ -90,7 +90,7 @@ static struct adapter_parm adapter_parm[] = { ...@@ -90,7 +90,7 @@ static struct adapter_parm adapter_parm[] = {
}, },
}; };
static int type; static int type = -1;
module_param(type, int, 0); module_param(type, int, 0);
MODULE_PARM_DESC(type, MODULE_PARM_DESC(type,
"Type of adapter:\n" "Type of adapter:\n"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment