From: Jean Delvare <khali@linux-fr.org>
To: Frank Seidel <fseidel@suse.de>
Cc: linux kernel <linux-kernel@vger.kernel.org>,
akpm@linux-foundation.org, rlove@rlove.org, protasnb@gmail.com,
Michael Ruoss <miruoss@student.ethz.ch>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Tim Gardner <tim.gardner@canonical.com>,
Frank Seidel <fseidel@suse.de>
Subject: Re: [PATCH] hwmon/hdaps: Fix bug 7154 inversion of separate axis
Date: Sun, 15 Feb 2009 10:36:55 +0100 [thread overview]
Message-ID: <20090215103655.00ae92f1@hyperion.delvare> (raw)
In-Reply-To: <499569A9.5030202@suse.de>
Hi Frank,
On Fri, 13 Feb 2009 13:38:01 +0100, Frank Seidel wrote:
> From: Frank Seidel <frank@f-seidel.de>
>
> Fix for kernel.org bug #7154:hdaps inversion of
> each axis. This version is based on the work
> from Michael Ruoss <miruoss@student.ethz.ch>.
>
> Signed-off-by: Frank Seidel <frank@f-seidel.de>
> ---
> drivers/hwmon/hdaps.c | 49 ++++++++++++++++++++++++++++---------------------
> 1 file changed, 28 insertions(+), 21 deletions(-)
>
> --- a/drivers/hwmon/hdaps.c
> +++ b/drivers/hwmon/hdaps.c
> @@ -65,6 +65,10 @@
> #define HDAPS_INPUT_FUZZ 4 /* input event threshold */
> #define HDAPS_INPUT_FLAT 4
>
> +#define HDAPS_X_AXIS 1UL
> +#define HDAPS_Y_AXIS 2UL
> +#define HDAPS_BOTH_AXES 3UL
This would me much better defined as:
#define HDAPS_X_AXIS (1 << 0)
#define HDAPS_Y_AXIS (1 << 1)
#define HDAPS_BOTH_AXES (HDAPS_X_AXIS | HDAPS_Y_AXIS)
> +
> static struct platform_device *pdev;
> static struct input_polled_dev *hdaps_idev;
> static unsigned int hdaps_invert;
> @@ -182,11 +186,11 @@ static int __hdaps_read_pair(unsigned in
> km_activity = inb(HDAPS_PORT_KMACT);
> __device_complete();
>
> - /* if hdaps_invert is set, negate the two values */
> - if (hdaps_invert) {
> + /* hdaps_invert is a bitvector to negate the axes */
> + if (hdaps_invert & 1)
> *x = -*x;
> + if (hdaps_invert & 2)
> *y = -*y;
And then use these defines here (as Dmitry already suggested)...
> - }
>
> return 0;
> }
> @@ -436,7 +440,7 @@ static ssize_t hdaps_invert_store(struct
> {
> int invert;
>
> - if (sscanf(buf, "%d", &invert) != 1 || (invert != 1 && invert != 0))
> + if (sscanf(buf, "%d", &invert) != 1 || invert < 0 || invert > 3)
... and here as well (3 is really HDAPS_BOTH_AXES).
> return -EINVAL;
>
> hdaps_invert = invert;
> @@ -483,7 +487,7 @@ static int __init hdaps_dmi_match(const
> /* hdaps_dmi_match_invert - found an inverted match. */
> static int __init hdaps_dmi_match_invert(const struct dmi_system_id *id)
> {
> - hdaps_invert = 1;
> + hdaps_invert = (int)id->driver_data;
> printk(KERN_INFO "hdaps: inverting axis readings.\n");
> return hdaps_dmi_match(id);
> }
> @@ -491,15 +495,17 @@ static int __init hdaps_dmi_match_invert
> #define HDAPS_DMI_MATCH_NORMAL(vendor, model) { \
> .ident = vendor " " model, \
> .callback = hdaps_dmi_match, \
> + .driver_data = (void *)0UL, \
> .matches = { \
> DMI_MATCH(DMI_BOARD_VENDOR, vendor), \
> DMI_MATCH(DMI_PRODUCT_VERSION, model) \
> } \
> }
>
> -#define HDAPS_DMI_MATCH_INVERT(vendor, model) { \
> +#define HDAPS_DMI_MATCH_INVERT(vendor, model, axes) { \
> .ident = vendor " " model, \
> .callback = hdaps_dmi_match_invert, \
> + .driver_data = (void *)axes, \
> .matches = { \
> DMI_MATCH(DMI_BOARD_VENDOR, vendor), \
> DMI_MATCH(DMI_PRODUCT_VERSION, model) \
If I'm not mistaken, HDAPS_DMI_MATCH_NORMAL can now be defined as:
#define HDAPS_DMI_MATCH_NORMAL(vendor, model) \
HDAPS_DMI_MATCH_INVERT(vendor, model, 0)
Either that, or plain get rid of HDAPS_DMI_MATCH_NORMAL, rename
HDAPS_DMI_MATCH_INVERT to HDAPS_DMI_MATCH and use it everywhere.
> @@ -511,28 +517,28 @@ static int __init hdaps_dmi_match_invert
> If your ThinkPad is not recognized, please update to latest
> BIOS. This is especially the case for some R52 ThinkPads. */
> static struct dmi_system_id __initdata hdaps_whitelist[] = {
> - HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad R50p"),
> + HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad R50p", HDAPS_BOTH_AXES),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R50"),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R51"),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R52"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad R61i"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad R61"),
> - HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad T41p"),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad R61i", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad R61", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad T41p", HDAPS_BOTH_AXES),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T41"),
> - HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad T42p"),
> + HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad T42p", HDAPS_BOTH_AXES),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T42"),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T43"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T60"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T61p"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T61"),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T60", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T61p", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T61", HDAPS_BOTH_AXES),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X40"),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X41"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X61s"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X61"),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X61s", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X61", HDAPS_BOTH_AXES),
> HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad Z60m"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad Z61m"),
> - HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad Z61p"),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad Z61m", HDAPS_BOTH_AXES),
> + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad Z61p", HDAPS_BOTH_AXES),
> { .ident = NULL }
> };
>
> @@ -627,8 +633,9 @@ static void __exit hdaps_exit(void)
> module_init(hdaps_init);
> module_exit(hdaps_exit);
>
> -module_param_named(invert, hdaps_invert, bool, 0);
> -MODULE_PARM_DESC(invert, "invert data along each axis");
> +module_param_named(invert, hdaps_invert, int, 0);
> +MODULE_PARM_DESC(invert, "invert data along each axis. 1 invert x-axis, "
> + "2 invert y-axis, 3 invert both axes.");
>
> MODULE_AUTHOR("Robert Love");
> MODULE_DESCRIPTION("IBM Hard Drive Active Protection System (HDAPS) driver");
But see also my rant elsewhere in this thread: I suspect we don't
really care about this feature and we could get rid of it for a much
simpler driver.
--
Jean Delvare
next prev parent reply other threads:[~2009-02-15 9:37 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-13 12:38 [PATCH] hwmon/hdaps: Fix bug 7154 inversion of separate axis Frank Seidel
2009-02-14 22:25 ` Dmitry Torokhov
2009-02-15 13:34 ` Jean Delvare
2009-02-15 0:32 ` Shem Multinymous
2009-02-15 9:27 ` Jean Delvare
2009-02-15 13:41 ` Matthew Garrett
2009-02-15 15:23 ` Jean Delvare
2009-02-15 15:28 ` Matthew Garrett
2009-02-15 9:36 ` Jean Delvare [this message]
2009-02-15 12:16 ` [PATCHv2] " Frank Seidel
2009-02-15 13:01 ` [PATCHv3] " Frank Seidel
2009-02-15 14:37 ` Jean Delvare
2009-02-19 12:43 ` [PATCH] hwmon/hdaps: Fix bug 7154 adaption for Thinkpad X41 Frank Seidel
2009-02-19 17:16 ` Jean Delvare
2009-02-19 12:44 ` [PATCH] hwmon/hdaps: remove redundant sysfs invert Frank Seidel
2009-02-19 17:27 ` Jean Delvare
2009-02-19 20:00 ` Frank Seidel
2009-02-19 20:34 ` Jean Delvare
2009-02-20 8:35 ` Frank Seidel
2009-02-15 13:02 ` [PATCHv2] hwmon/hdaps: Fix bug 7154 inversion of separate axis Frank Seidel
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=20090215103655.00ae92f1@hyperion.delvare \
--to=khali@linux-fr.org \
--cc=akpm@linux-foundation.org \
--cc=dmitry.torokhov@gmail.com \
--cc=fseidel@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=miruoss@student.ethz.ch \
--cc=protasnb@gmail.com \
--cc=rlove@rlove.org \
--cc=tim.gardner@canonical.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.