lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 18 Apr 2013 15:00:00 -0700 From: Benson Leung <bleung@...omium.org> To: Olof Johansson <olof@...om.net> Cc: Matthew Garrett <matthew.garrett@...ula.com>, Linus Torvalds <torvalds@...ux-foundation.org>, "platform-driver-x86@...r.kernel.org" <platform-driver-x86@...r.kernel.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, dirk@...ndel.org Subject: Re: [PATCH] Platform: x86: chromeos_laptop: defer probing if no i2c busses found Acked-by: Benson Leung <bleung@...omium.org> On Thu, Apr 18, 2013 at 2:55 PM, Olof Johansson <olof@...om.net> wrote: > If chromeos_laptop is loaded before the DRM driver, the i2c busses will > not yet be available. Defer probe for that case and try again later. > > Trickling the error up to the module init function is unfortuantely a > little awkward, since the i2c bus lookup and device registration happens > as a dmi callback. > > Reported-by: Dirk Hohndel <dirk@...ndel.org> > Signed-off-by: Olof Johansson <olof@...om.net> > --- > drivers/platform/x86/chromeos_laptop.c | 33 ++++++++++++++++++++++++-------- > 1 file changed, 25 insertions(+), 8 deletions(-) > > diff --git a/drivers/platform/x86/chromeos_laptop.c b/drivers/platform/x86/chromeos_laptop.c > index 3e5b4497..7ff12fa 100644 > --- a/drivers/platform/x86/chromeos_laptop.c > +++ b/drivers/platform/x86/chromeos_laptop.c > @@ -39,6 +39,7 @@ > static struct i2c_client *als; > static struct i2c_client *tp; > static struct i2c_client *ts; > +static int setup_error; > > const char *i2c_adapter_names[] = { > "SMBus I801 adapter", > @@ -191,7 +192,8 @@ static int __init find_i2c_adapter_num(enum i2c_adapter_type type) > if (!dev) { > pr_err("%s: i2c adapter %s not found on system.\n", __func__, > name); > + setup_error = -EPROBE_DEFER; > return -ENODEV; > } > adapter = to_i2c_adapter(dev); > return adapter->nr; > @@ -381,23 +383,38 @@ static struct dmi_system_id __initdata chromeos_laptop_dmi_table[] = { > }; > MODULE_DEVICE_TABLE(dmi, chromeos_laptop_dmi_table); > > +static void chromeos_laptop_unregister(void) > +{ > + if (als) > + i2c_unregister_device(als); > + if (tp) > + i2c_unregister_device(tp); > + if (ts) > + i2c_unregister_device(ts); > + > + als = NULL; > + tp = NULL; > + ts = NULL; > +} > + > static int __init chromeos_laptop_init(void) > { > + setup_error = 0; > + > if (!dmi_check_system(chromeos_laptop_dmi_table)) { > pr_debug("%s unsupported system.\n", __func__); > return -ENODEV; > } > - return 0; > + > + if (setup_error) > + chromeos_laptop_unregister(); > + > + return setup_error; > } > > static void __exit chromeos_laptop_exit(void) > { > - if (als) > - i2c_unregister_device(als); > - if (tp) > - i2c_unregister_device(tp); > - if (ts) > - i2c_unregister_device(ts); > + chromeos_laptop_unregister(); > } > > module_init(chromeos_laptop_init); > -- > 1.7.10.4 > -- Benson Leung Software Engineer, Chrom* OS bleung@...omium.org -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists