rfkill for tc1100-wmi
Subsystems (2)
cover rfkill for tc1100-wmi
The following series implements rfkill support for tc1100-wmi, and rips out the old sysfs interface for wireless.
As I don't have the hardware, this is compile-tested only, so I'd appreciate some victims^^^^^^volunteers testing this first (and/ or possibly some time in linux-next).
-Carlos
---
Carlos Corbacho (2):
tc1100-wmi: Remove wireless sysfs entry
tc1100-wmi: Convert wireless to use rfkill
drivers/misc/Kconfig | 5 + drivers/misc/tc1100-wmi.c | 153 +++++++++++++++++++++++++++++---------------- 2 files changed, 101 insertions(+), 57 deletions(-)
Signature · 3 lines
E-Mail: [email protected] Web: strangeworlds.co.uk GPG Key ID: 0x23EE722D
PATCH 1/2 tc1100-wmi: Convert wireless to use rfkill
Removal of the old sysfs file will be left for a future patch.
Also, I don't own the hardware, so this patch is compile tested only (though mostly based on the working acer-wmi code).
While we're at it, fix the broken Kconfig description.
---
drivers/misc/Kconfig | 5 ++- drivers/misc/tc1100-wmi.c | 76 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 78 insertions(+), 3 deletions(-)
drivers/misc/Kconfig +3 -2
@@ -208,12 +208,13 @@ config FUJITSU_LAPTOP_DEBUG config TC1100_WMI tristate "HP Compaq TC1100 Tablet WMI Extras (EXPERIMENTAL)" depends on X86 && !X86_64 + depends on RFKILL depends on EXPERIMENTAL depends on ACPI select ACPI_WMI ---help--- - This is a driver for the WMI extensions (wireless and bluetooth power - control) of the HP Compaq TC1100 tablet. + This is a driver for the WMI extensions (wireless power control and + jogdial mode) of the HP Compaq TC1100 tablet. config HP_WMI tristate "HP WMI extras"
drivers/misc/tc1100-wmi.c +75 -1
113 lines not on this page · raw message
PATCH 2/2 tc1100-wmi: Remove wireless sysfs entry
In reply to Carlos CorbachoWith the addition of the rfkill interface, this is no longer required. Also, clean up the custom suspend/ resume handling for wireless while we're at it.
---
drivers/misc/tc1100-wmi.c | 77 +++++++++++++-------------------------------- 1 files changed, 23 insertions(+), 54 deletions(-)
drivers/misc/tc1100-wmi.c +23 -54
@@ -69,7 +69,6 @@ static struct platform_driver tc1100_driver = {static struct platform_device *tc1100_device;struct tc1100_data { -u32 wireless;u32 jogdial; };
@@ -226,37 +225,32 @@ static void tc1100_rfkill_exit(void)/* * Read/ write bool sysfs macro */ -#define show_set_bool (value, instance) \ -static ssize_t \ -show_bool_##value(struct device *dev, struct device_attribute *attr, \ - char *buf) \ -{ \ - u32 result; \ - acpi_status status = get_state(&result, instance); \ - if (ACPI_SUCCESS(status)) \ - return sprintf(buf, "%d\n", result); \ - return sprintf(buf, "Read error\n"); \ -} \ -\ -static ssize_t \ -set_bool_##value(struct device *dev, struct device_attribute *attr, \ - const char *buf, size_t count) \ -{ \ - u32 tmp = simple_strtoul(buf, NULL, 10); \ - acpi_status status = set_state(&tmp, instance); \ - if (ACPI_FAILURE(status)) \ - return -EINVAL; \ - return count; \ -} \ -static DEVICE_ATTR(value, S_IWUGO | S_IRUGO | S_IWUSR, \ - show_bool_##value, set_bool_##value); - -show_set_bool (wireless,TC1100_INSTANCE_WIRELESS ); -show_set_bool (jogdial,TC1100_INSTANCE_JOGDIAL ); +static ssize_t +show_bool_jogdial (struct device *dev,struct device_attribute *attr, +char *buf) +{ +u32 result; +acpi_status status =get_state (&result,TC1100_INSTANCE_JOGDIAL ); +if (ACPI_SUCCESS (status)) +return sprintf (buf,"%d\n" , result); +return sprintf (buf,"Read error\n" ); +} + +static ssize_t +set_bool_jogdial (struct device *dev,struct device_attribute *attr, +const char *buf,size_t count) +{ +u32 tmp =simple_strtoul (buf,NULL ,10 ); +acpi_status status =set_state (&tmp,TC1100_INSTANCE_JOGDIAL ); +if (ACPI_FAILURE (status)) +return -EINVAL ; +return count; +} +static DEVICE_ATTR(jogdial, S_IWUGO | S_IRUGO | S_IWUSR, + show_bool_jogdial, set_bool_jogdial);static void remove_fs (void ) { -device_remove_file (&tc1100_device->dev, &dev_attr_wireless);device_remove_file (&tc1100_device->dev, &dev_attr_jogdial); }
@@ -264,18 +258,7 @@ static int add_fs(void) {int ret; - ret =device_create_file (&tc1100_device->dev, &dev_attr_wireless); -if (ret) - goto add_sysfs_error; - ret =device_create_file (&tc1100_device->dev, &dev_attr_jogdial); -if (ret) - goto add_sysfs_error; - -return ret; - -add_sysfs_error: -remove_fs ();return ret; }
@@ -307,14 +290,7 @@ static int tc1100_suspend(struct platform_device *dev, pm_message_t state) {int ret; - ret =get_state (&suspend_data.wireless,TC1100_INSTANCE_WIRELESS ); -if (ret) -return ret; - ret =get_state (&suspend_data.jogdial,TC1100_INSTANCE_JOGDIAL ); -if (ret) -return ret; -return ret; }
@@ -322,14 +298,7 @@ static int tc1100_resume(struct platform_device *dev) {int ret; - ret =set_state (&suspend_data.wireless,TC1100_INSTANCE_WIRELESS ); -if (ret) -return ret; - ret =set_state (&suspend_data.jogdial,TC1100_INSTANCE_JOGDIAL ); -if (ret) -return ret; -return ret; }