From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Anisse Astier <anisse@astier.eu>
Cc: linux-input@vger.kernel.org, linux-acpi@vger.kernel.org,
Len Brown <lenb@kernel.org>,
Carlos Corbacho <carlos@strangeworlds.co.uk>
Subject: Re: [RFC PATCH 1/2] Input: add msi-wmi driver to support hotkeys in MSI Windtop AE1900-WT
Date: Wed, 2 Dec 2009 19:11:28 -0800 [thread overview]
Message-ID: <20091203031128.GA9121@core.coreip.homeip.net> (raw)
In-Reply-To: <20091202192603.3e1de98a@destiny.ordissimo>
Hi Anisse,
On Wed, Dec 02, 2009 at 07:26:03PM +0100, Anisse Astier wrote:
> +
> + if (jiffies_to_msecs(get_jiffies_64() - msi_wmi_time_last_press)
> + > pression_timeout) {
Why don't you use time_after() instead of manual computation?
Also, what is the point of this? If you are trying to debounce the
buttons this will not quite work. To do debouncing properly you need to
store the value you just read and fire up a timer. When timer fires -
that's the stable value.
> + printk(KERN_DEBUG
> + "MSI WMI: event correctly received: %llu\n",
> + obj->integer.value);
This is way too noisy for the mainline kernel, pr_debug() perhaps?
> + msi_wmi_time_last_press = get_jiffies_64();
> + key = msi_wmi_get_entry_by_scancode(obj->integer.value);
> + input_report_key(msi_wmi_input_dev, key->keycode, 1);
> + input_sync(msi_wmi_input_dev);
> + input_report_key(msi_wmi_input_dev, key->keycode, 0);
> + input_sync(msi_wmi_input_dev);
> + }
> +}
> +
> +static int msi_wmi_getkeycode(struct input_dev *dev, int scancode, int *keycode)
> +{
> + struct key_entry *key = msi_wmi_get_entry_by_scancode(scancode);
> +
> + if (key && key->code) {
> + *keycode = key->keycode;
> + return 0;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int msi_wmi_setkeycode(struct input_dev *dev, int scancode, int keycode)
> +{
> + struct key_entry *key;
> + int old_keycode;
> +
> + if (keycode < 0 || keycode > KEY_MAX)
> + return -EINVAL;
> +
> + key = msi_wmi_get_entry_by_scancode(scancode);
> + if (key && key->code) {
> + old_keycode = key->keycode;
> + key->keycode = keycode;
> + set_bit(keycode, dev->keybit);
> + if (!msi_wmi_get_entry_by_keycode(old_keycode))
> + clear_bit(old_keycode, dev->keybit);
> + return 0;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int __init msi_wmi_input_setup(void)
> +{
> + struct key_entry *key;
> + int err;
> +
> + msi_wmi_input_dev = input_allocate_device();
> +
> + msi_wmi_input_dev->name = "MSI WMI hotkeys";
> + msi_wmi_input_dev->phys = "wmi/input0";
> + msi_wmi_input_dev->id.bustype = BUS_HOST;
> + msi_wmi_input_dev->getkeycode = msi_wmi_getkeycode;
> + msi_wmi_input_dev->setkeycode = msi_wmi_setkeycode;
> +
> + for (key = msi_wmi_keymap; key->code; key++) {
> + set_bit(EV_KEY, msi_wmi_input_dev->evbit);
> + set_bit(key->keycode, msi_wmi_input_dev->keybit);
> + }
> +
> + err = input_register_device(msi_wmi_input_dev);
> +
> + if (err)
> + input_free_device(msi_wmi_input_dev);
> +
> + return err;
> +}
> +
> +static int __init msi_wmi_init(void)
> +{
> + int err;
> +
> + msi_wmi_time_last_press = get_jiffies_64();
> + if (!wmi_has_guid(MSIWMI_EVENT_GUID)) {
> + printk(KERN_ERR
> + "This machine doesn't have MSI-hotkeys through WMI\n");
> + goto load_error;
> + }
> + err = wmi_install_notify_handler(MSIWMI_EVENT_GUID,
> + msi_wmi_notify, NULL);
> + if (err) {
> + printk(KERN_ERR
> + "MSI WMI: Error while installing notify handler\n");
> + goto load_error;
> + }
> +
> + msi_wmi_input_setup();
You need to handle errors returned by msi_wmi_input_setup() as well.
> +
> + return 0;
> +load_error:
> + return -ENODEV;
> +}
> +
> +static void __exit msi_wmi_exit(void)
> +{
> + if (wmi_has_guid(MSIWMI_EVENT_GUID)) {
> + wmi_remove_notify_handler(MSIWMI_EVENT_GUID);
> + input_unregister_device(msi_wmi_input_dev);
> + }
> +}
> +
> +module_init(msi_wmi_init);
> +module_exit(msi_wmi_exit);
> +module_param(pression_timeout, uint, 0);
> +
> +MODULE_AUTHOR("Jérôme Pouiller <jezz@sysmic.org>");
> +MODULE_AUTHOR("Michael Bouchaud <michael@substantiel.fr");
> +MODULE_AUTHOR("Anisse Astier <anisse@astier.eu");
> +MODULE_DESCRIPTION("MSI all-in-one WMI hotkeys driver");
> +MODULE_LICENSE("GPL");
> +MODULE_ALIAS("wmi:" MSIWMI_EVENT_GUID);
> +/*This one is useless if there is wmi-autoloading*/
> +MODULE_ALIAS("dmi:bvnMICRO-STARINTERNATIONALCO.,LTD:*:svnMICRO-STARINTERNATIO"
> + "NALCO.,LTD:pnMS-6638:*:rnMS-7438:*:cvnMICRO-STARINTERNATIONALCO."
> + ",LTD:*");
> +MODULE_PARM_DESC(pression_timeout,
> + "How much time interrupts are ignored between each pression");
This is not the best option name:
MODULE_PARM_DESC(debounce_interval,
"Controls how long driver will wait for button to debounce");
--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2009-12-03 3:11 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-02 18:26 [RFC PATCH 1/2] Input: add msi-wmi driver to support hotkeys in MSI Windtop AE1900-WT Anisse Astier
2009-12-02 18:28 ` [RFC PATCH 2/2] Input: msi-wmi - switch to using sparse keymap library Anisse Astier
2009-12-02 18:48 ` Dmitry Torokhov
2009-12-03 3:11 ` Dmitry Torokhov [this message]
2009-12-03 9:08 ` [RFC PATCH 1/2] Input: add msi-wmi driver to support hotkeys in MSI Windtop AE1900-WT Anisse Astier
2009-12-03 9:34 ` Dmitry Torokhov
2009-12-03 16:49 ` Thomas Renninger
2009-12-04 10:15 ` Anisse Astier
2009-12-04 10:55 ` Thomas Renninger
2009-12-04 13:51 ` Anisse Astier
2009-12-04 15:20 ` Thomas Renninger
2009-12-04 15:35 ` Anisse Astier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091203031128.GA9121@core.coreip.homeip.net \
--to=dmitry.torokhov@gmail.com \
--cc=anisse@astier.eu \
--cc=carlos@strangeworlds.co.uk \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).