Re: [PATCH resend 3/6] toshiba_acpi: Add support for Keyboard functions mode

2015-02-09 Thread Azael Avalos
Hi Darren,

2015-02-09 21:08 GMT-07:00 Darren Hart :
> On Mon, Feb 09, 2015 at 08:34:51PM -0700, Azael Avalos wrote:
>> Recent Toshiba laptops that come with the new keyboard layout have
>> the Special Functions (hotkeys) enabled by default, which, in order to
>> access the F{1-12} keys, you need to press the FN-F{1-12} key to
>> access such key.
>>
>> This patch adds support to toggle the Keyboard Functions operation
>> mode by creating the sysfs entry "kbd_functions_keys", accepting only
>> two parameters, 0 to set the "Normal Operation" mode and 1 to set the
>> "Special Functions" mode, however, everytime the mode is toggled, a
>> restart is needed.
>
> Erm... that's kinda horrible :-/
>
> A couple of questions then.
>
> 1) Does the system BIOS offer a way to select one mode or the other? If so, no
> point in adding it here if a reboot is required.

Yes, I just wanted to make the driver on Linux on par with its Windows
counterpart.

>
> 2) Where Toshiba supports this (Windows?) is a reboot required?

Windows 7 and up, and yes, a reboot is required on Windows too.

>
> Rather than having to reboot, would a userspace mapping possibly be 
> preferable?
> Could be done without a reboot.

Nope, it sets some value into a BIOS variable (register?), not even
unloading/loading
the module helps.

>
> Finally, if we keep this, we need to print something to the system log
> indicating success - and that a reboot is required to take effect.

Sure, that's no problem, its your call to keep it or drop it, just let me know
as to send an updated version.

>
> --
> Darren Hart
> Intel Open Source Technology Center

Cheers
Azael



-- 
-- El mundo apesta y vosotros apestais tambien --
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH resend 3/6] toshiba_acpi: Add support for Keyboard functions mode

2015-02-09 Thread Darren Hart
On Mon, Feb 09, 2015 at 08:34:51PM -0700, Azael Avalos wrote:
> Recent Toshiba laptops that come with the new keyboard layout have
> the Special Functions (hotkeys) enabled by default, which, in order to
> access the F{1-12} keys, you need to press the FN-F{1-12} key to
> access such key.
> 
> This patch adds support to toggle the Keyboard Functions operation
> mode by creating the sysfs entry "kbd_functions_keys", accepting only
> two parameters, 0 to set the "Normal Operation" mode and 1 to set the
> "Special Functions" mode, however, everytime the mode is toggled, a
> restart is needed.

Erm... that's kinda horrible :-/

A couple of questions then.

1) Does the system BIOS offer a way to select one mode or the other? If so, no
point in adding it here if a reboot is required.

2) Where Toshiba supports this (Windows?) is a reboot required?

Rather than having to reboot, would a userspace mapping possibly be preferable?
Could be done without a reboot.

Finally, if we keep this, we need to print something to the system log
indicating success - and that a reboot is required to take effect.

-- 
Darren Hart
Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH resend 3/6] toshiba_acpi: Add support for Keyboard functions mode

2015-02-09 Thread Azael Avalos
Recent Toshiba laptops that come with the new keyboard layout have
the Special Functions (hotkeys) enabled by default, which, in order to
access the F{1-12} keys, you need to press the FN-F{1-12} key to
access such key.

This patch adds support to toggle the Keyboard Functions operation
mode by creating the sysfs entry "kbd_functions_keys", accepting only
two parameters, 0 to set the "Normal Operation" mode and 1 to set the
"Special Functions" mode, however, everytime the mode is toggled, a
restart is needed.

In the "Normal Operation" mode, the F{1-12} keys are as usual and
the hotkeys are accessed via FN-F{1-12}.

In the "Special Functions" mode, the F{1-12} keys trigger the hotkey
and the F{1-12} keys are accessed via FN-F{1-12}.

Signed-off-by: Azael Avalos 
---
 drivers/platform/x86/toshiba_acpi.c | 98 +
 1 file changed, 98 insertions(+)

diff --git a/drivers/platform/x86/toshiba_acpi.c 
b/drivers/platform/x86/toshiba_acpi.c
index 413af60..c79211a 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -126,6 +126,7 @@ MODULE_LICENSE("GPL");
 #define SCI_KBD_ILLUM_STATUS   0x015c
 #define SCI_USB_SLEEP_MUSIC0x015e
 #define SCI_TOUCHPAD   0x050e
+#define SCI_KBD_FUNCTION_KEYS  0x0522
 
 /* field definitions */
 #define HCI_ACCEL_MASK 0x7fff
@@ -192,6 +193,7 @@ struct toshiba_acpi_dev {
unsigned int usb_sleep_charge_supported:1;
unsigned int usb_rapid_charge_supported:1;
unsigned int usb_sleep_music_supported:1;
+   unsigned int kbd_function_keys_supported:1;
unsigned int sysfs_created:1;
 
struct mutex mutex;
@@ -988,6 +990,47 @@ static int toshiba_usb_sleep_music_set(struct 
toshiba_acpi_dev *dev, u32 state)
return 0;
 }
 
+/* Keyboard function keys */
+static int toshiba_function_keys_get(struct toshiba_acpi_dev *dev, u32 *mode)
+{
+   u32 result;
+
+   if (!sci_open(dev))
+   return -EIO;
+
+   result = sci_read(dev, SCI_KBD_FUNCTION_KEYS, mode);
+   sci_close(dev);
+   if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
+   pr_err("ACPI call to get KBD function keys failed\n");
+   return -EIO;
+   } else if (result == TOS_NOT_SUPPORTED) {
+   pr_info("KBD function keys not supported\n");
+   return -ENODEV;
+   }
+
+   return 0;
+}
+
+static int toshiba_function_keys_set(struct toshiba_acpi_dev *dev, u32 mode)
+{
+   u32 result;
+
+   if (!sci_open(dev))
+   return -EIO;
+
+   result = sci_write(dev, SCI_KBD_FUNCTION_KEYS, mode);
+   sci_close(dev);
+   if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
+   pr_err("ACPI call to set KBD function keys failed\n");
+   return -EIO;
+   } else if (result == TOS_NOT_SUPPORTED) {
+   pr_info("KBD function keys not supported\n");
+   return -ENODEV;
+   }
+
+   return 0;
+}
+
 /* Bluetooth rfkill handlers */
 
 static u32 hci_get_bt_present(struct toshiba_acpi_dev *dev, bool *present)
@@ -1572,6 +1615,12 @@ static ssize_t toshiba_usb_sleep_music_show(struct 
device *dev,
 static ssize_t toshiba_usb_sleep_music_store(struct device *dev,
 struct device_attribute *attr,
 const char *buf, size_t count);
+static ssize_t toshiba_kbd_function_keys_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf);
+static ssize_t toshiba_kbd_function_keys_store(struct device *dev,
+  struct device_attribute *attr,
+  const char *buf, size_t count);
 
 static DEVICE_ATTR(version, S_IRUGO, toshiba_version_show, NULL);
 static DEVICE_ATTR(fan, S_IRUGO | S_IWUSR,
@@ -1598,6 +1647,9 @@ static DEVICE_ATTR(usb_rapid_charge, S_IRUGO | S_IWUSR,
 static DEVICE_ATTR(usb_sleep_music, S_IRUGO | S_IWUSR,
   toshiba_usb_sleep_music_show,
   toshiba_usb_sleep_music_store);
+static DEVICE_ATTR(kbd_function_keys, S_IRUGO | S_IWUSR,
+  toshiba_kbd_function_keys_show,
+  toshiba_kbd_function_keys_store);
 
 static struct attribute *toshiba_attributes[] = {
&dev_attr_version.attr,
@@ -1612,6 +1664,7 @@ static struct attribute *toshiba_attributes[] = {
&dev_attr_sleep_functions_on_battery.attr,
&dev_attr_usb_rapid_charge.attr,
&dev_attr_usb_sleep_music.attr,
+   &dev_attr_kbd_function_keys.attr,
NULL,
 };
 
@@ -2057,6 +2110,46 @@ static ssize_t toshiba_usb_sleep_music_store(struct 
device *dev,
return count;
 }
 
+static ssize_t toshiba_kbd_function_keys_show(struct device *dev,
+