[PATCH] Some Samsung laptops with Fn+Fx key release not working

From: whs_jwc
Date: Sat Oct 27 2012 - 10:15:15 EST


[PATCH] Some Samsung laptops with Fn+Fx key release not working

Some new Samsung laptops doesn't send key-release signal of the
volume key to the OS, it's quite hard to change the volume by
using Fn+Fx, so I decode the DMI and add several samsung machines
to the forced_release_keys table in order to fixed this problem.

DMI (only a part):
# dmidecode
...
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: SAMSUNG ELECTRONICS CO., LTD.
Product Name: 355V4C/355V4X/355V5C/355V5X/356V4C/356V4X/356V5C/356V5X/3445VC/3445VX/3545VC/3545VX
Version: P02AAN.014.CP
Serial Number: HTD798FC7B1TQY
UUID: 7661EB04-63B7-E111-9466-B888E35FDCEE
Wake-up Type: Power Switch
SKU Number: P02AAN.014.CP
Family: Eureka
...
P.S: I have tested this patch on all these machines and It
works very well.

Patched file(s):
drivers/input/keyboard/atkbd.c


----- input_keyboard_samsung_laptops.patch -----

commit f7540722cf2e98a01f64239c184882de000904ac
Author: WenCong Ji <whs_jwc@xxxxxxx>
Date: Sat Oct 27 21:11:20 2012 +0800

input/keyboard: Some Samsung laptops with Fn+Fx key release not working

Some new Samsung laptops doesn't send key-release signal to the Operating
System when we click on Fn+F[6-8], so we have to force it to release immedi-
ately after receiving the key-press signal.

Signed-off-by: WenCong Ji <whs_jwc@xxxxxxx>
Signed-off-by: Cai Liu <lcc_xiaojsoft@xxxxxxx>

diff -up a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -915,10 +915,10 @@ static unsigned int atkbd_hp_forced_rele
};

/*
- * Samsung NC10,NC20 with Fn+F? key release not working
+ * Some Samsung laptops with Fn+F? key release not working
*/
static unsigned int atkbd_samsung_forced_release_keys[] = {
- 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
+ 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xa0, 0xae, 0xb0, 0xb3, 0xf7, 0xf9, -1U
};

/*
@@ -1700,6 +1700,114 @@ static const struct dmi_system_id atkbd_
},
.callback = atkbd_setup_forced_release,
.driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 355V4C */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "355V4C"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 355V4X */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "355V4X"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 355V5C */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "355V5C"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 355V5X */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "355V5X"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 356V4C */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "356V4C"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 356V4X */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "356V4X"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 356V5C */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "356V5C"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 356V5X */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "356V5X"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 3445VC */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "3445VC"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 3445VX */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "3445VX"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 3545VC */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "3545VC"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
+ },
+ {
+ /* Samsung 3545VX */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "3545VX"),
+ },
+ .callback = atkbd_setup_forced_release,
+ .driver_data = atkbd_samsung_forced_release_keys,
},
{
/* Fujitsu Amilo PA 1510 */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/