diff --git a/drivers/platform/x86/dell-wmi.c b/drivers/platform/x86/dell-wmi.c
index 2fab941..c062108 100644
--- a/drivers/platform/x86/dell-wmi.c
+++ b/drivers/platform/x86/dell-wmi.c
@@ -44,12 +44,15 @@ struct key_entry {
 	char type;		/* See KE_* below */
 	u16 code;
 	u16 keycode;
+   u8  state;
 };
 
 enum { KE_KEY, KE_SW, KE_END };
 
 static struct key_entry dell_wmi_keymap[] = {
 	{KE_KEY, 0xe045, KEY_PROG1},
+	{KE_SW , 0xe046, SW_TABLET_MODE,1},     /* Going to tablet mode */
+	{KE_SW , 0xe047, SW_TABLET_MODE,0},     /* Coming from tablet mode */
 	{KE_END, 0}
 };
 
@@ -124,10 +127,18 @@ static void dell_wmi_notify(u32 value, void *context)
 		int *buffer = (int *)obj->buffer.pointer;
 		key = dell_wmi_get_entry_by_scancode(buffer[1]);
 		if (key) {
-			input_report_key(dell_wmi_input_dev, key->keycode, 1);
-			input_sync(dell_wmi_input_dev);
-			input_report_key(dell_wmi_input_dev, key->keycode, 0);
-			input_sync(dell_wmi_input_dev);
+         switch (key->type) {
+         case KE_KEY:
+            input_report_key(dell_wmi_input_dev, key->keycode, 1);
+            input_sync(dell_wmi_input_dev);
+            input_report_key(dell_wmi_input_dev, key->keycode, 0);
+            input_sync(dell_wmi_input_dev);
+            break;
+         case KE_SW:
+            input_report_switch(dell_wmi_input_dev, key->keycode, key->state);
+            input_sync(dell_wmi_input_dev);
+            break;
+         }
 		} else
 			printk(KERN_INFO "dell-wmi: Unknown key %x pressed\n",
 			       buffer[1]);
-- 
1.6.2.4

