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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 02 Mar 2015 14:17:01 -0300
From:	Henrique de Moraes Holschuh <hmh@....eng.br>
To:	Bastien Nocera <hadess@...ess.net>,
	Darren Hart <dvhart@...radead.org>,
	ibm-acpi-devel@...ts.sourceforge.net,
	platform-driver-x86@...r.kernel.org, linux-kernel@...r.kernel.org,
	"linux-input" <linux-input@...r.kernel.org>,
	Jiri Kosina <jkosina@...e.cz>
Subject: Re: [PATCH 4/4] thinkpad_acpi: Add support for more adaptive kbd buttons

On Mon, Mar 2, 2015, at 10:45, Bastien Nocera wrote:
> This commit adds new elements to the ThinkPad keymaps, and
> will send key events for keys for which an input.h declaration
> exists.
> 
> Signed-off-by: Bastien Nocera <hadess@...ess.net>

Reviewed-by: Henrique de Moraes Holschuh <hmh@....eng.br>
Acked-by: Henrique de Moraes Holschuh <hmh@....eng.br>

> ---
>  drivers/platform/x86/thinkpad_acpi.c | 80
>  +++++++++++++++++++++++++++++++++++-
>  1 file changed, 79 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/platform/x86/thinkpad_acpi.c
> b/drivers/platform/x86/thinkpad_acpi.c
> index ae528cf..5d76f18 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -1912,6 +1912,27 @@ enum {   /* hot key scan codes (derived from ACPI
> DSDT) */
>  	TP_ACPI_HOTKEYSCAN_UNK7,
>  	TP_ACPI_HOTKEYSCAN_UNK8,
>  
> +       TP_ACPI_HOTKEYSCAN_MUTE2,
> +       TP_ACPI_HOTKEYSCAN_BRIGHTNESS_ZERO,
> +       TP_ACPI_HOTKEYSCAN_CLIPPING_TOOL,
> +       TP_ACPI_HOTKEYSCAN_CLOUD,
> +       TP_ACPI_HOTKEYSCAN_UNK9,
> +       TP_ACPI_HOTKEYSCAN_VOICE,
> +       TP_ACPI_HOTKEYSCAN_UNK10,
> +       TP_ACPI_HOTKEYSCAN_GESTURES,
> +       TP_ACPI_HOTKEYSCAN_UNK11,
> +       TP_ACPI_HOTKEYSCAN_UNK12,
> +       TP_ACPI_HOTKEYSCAN_UNK13,
> +       TP_ACPI_HOTKEYSCAN_CONFIG,
> +       TP_ACPI_HOTKEYSCAN_NEW_TAB,
> +       TP_ACPI_HOTKEYSCAN_RELOAD,
> +       TP_ACPI_HOTKEYSCAN_BACK,
> +       TP_ACPI_HOTKEYSCAN_MIC_DOWN,
> +       TP_ACPI_HOTKEYSCAN_MIC_UP,
> +       TP_ACPI_HOTKEYSCAN_MIC_CANCELLATION,
> +       TP_ACPI_HOTKEYSCAN_CAMERA_MODE,
> +       TP_ACPI_HOTKEYSCAN_ROTATE_DISPLAY,
> +
>  	/* Hotkey keymap size */
>  	TPACPI_HOTKEY_MAP_LEN
>  };
> @@ -3170,6 +3191,13 @@ static int __init hotkey_init(struct
> ibm_init_struct *iibm)
>  		/* (assignments unknown, please report if found) */
>  		KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
>  		KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
> +
> +               /* No assignments, only used for Adaptive keyboards. */
> +               KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
> +               KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
> +               KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
> +               KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
> +               KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
>  		},
>  
>  	/* Generic keymap for Lenovo ThinkPads */
> @@ -3226,6 +3254,35 @@ static int __init hotkey_init(struct
> ibm_init_struct *iibm)
>  
>  		/* Extra keys in use since the X240 / T440 / T540 */
>  		KEY_CONFIG, KEY_SEARCH, KEY_SCALE, KEY_FILE,
> +
> +               /*
> +                * These are the adaptive keyboard keycodes for Carbon X1
> 2014.
> +                * The first item in this list is the Mute button which
> is
> +                * emitted with 0x103 through
> +                * adaptive_keyboard_hotkey_notify_hotkey() when the
> sound
> +                * symbol is held.
> +                * We'll need to offset those by 0x20.
> +                */
> +               KEY_RESERVED,        /* Mute held, 0x103 */
> +               KEY_BRIGHTNESS_MIN,  /* Backlight off */
> +               KEY_RESERVED,        /* Clipping tool */
> +               KEY_RESERVED,        /* Cloud */
> +               KEY_RESERVED,
> +               KEY_VOICECOMMAND,    /* Voice */
> +               KEY_RESERVED,
> +               KEY_RESERVED,        /* Gestures */
> +               KEY_RESERVED,
> +               KEY_RESERVED,
> +               KEY_RESERVED,
> +               KEY_CONFIG,          /* Settings */
> +               KEY_RESERVED,        /* New tab */
> +               KEY_REFRESH,         /* Reload */
> +               KEY_BACK,            /* Back */
> +               KEY_RESERVED,        /* Microphone down */
> +               KEY_RESERVED,        /* Microphone up */
> +               KEY_RESERVED,        /* Microphone cancellation */
> +               KEY_RESERVED,        /* Camera mode */
> +               KEY_RESERVED,        /* Rotate display, 0x116 */
>  		},
>  	};
>  
> @@ -3527,6 +3584,8 @@ static const int adaptive_keyboard_modes[] = {
>  
>  #define DFR_CHANGE_ROW                  0x101
>  #define DFR_SHOW_QUICKVIEW_ROW          0x102
> +#define FIRST_ADAPTIVE_KEY             0x103
> +#define ADAPTIVE_KEY_OFFSET            0x020
>  
>  /* press Fn key a while second, it will switch to Function Mode. Then
>   * release Fn key, previous mode be restored.
> @@ -3582,6 +3641,7 @@ static bool
> adaptive_keyboard_hotkey_notify_hotkey(unsigned int scancode)
>  {
>  	u32 current_mode = 0;
>  	int new_mode = 0;
> +       int keycode;
>  
>  	switch (scancode) {
>  	case DFR_CHANGE_ROW:
> @@ -3614,7 +3674,25 @@ static bool
> adaptive_keyboard_hotkey_notify_hotkey(unsigned int scancode)
>  		return true;
>  
>  	default:
> -               return false;
> +               if (scancode < FIRST_ADAPTIVE_KEY || scancode >
> FIRST_ADAPTIVE_KEY +
> +                               TPACPI_HOTKEY_MAP_LEN -
> ADAPTIVE_KEY_OFFSET) {
> +                       pr_info("Unhandled adaptive keyboard key:
> 0x%x\n",
> +                                       scancode);
> +                       return false;
> +               }
> +               keycode = hotkey_keycode_map[scancode -
> FIRST_ADAPTIVE_KEY + ADAPTIVE_KEY_OFFSET];
> +               if (keycode != KEY_RESERVED) {
> +                       mutex_lock(&tpacpi_inputdev_send_mutex);
> +
> +                       input_report_key(tpacpi_inputdev, keycode, 1);
> +                       input_sync(tpacpi_inputdev);
> +
> +                       input_report_key(tpacpi_inputdev, keycode, 0);
> +                       input_sync(tpacpi_inputdev);
> +
> +                       mutex_unlock(&tpacpi_inputdev_send_mutex);
> +               }
> +               return true;
>  	}
>  }
>  
> -- 
> 2.1.0
> 
> 


-- 
  "One disk to rule them all, One disk to find them. One disk to bring
  them all and in the darkness grind them. In the Land of Redmond
  where the shadows lie." -- The Silicon Valley Tarot
  Henrique Holschuh
--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ