Skip to contentSkip to conversation

rfkill for tc1100-wmi

PATCH New Carlos Corbacho 1 participant 3 messages Oct 10, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index cce9202..1caa81b 100644
@@ -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

#2 lore raw

PATCH 2/2 tc1100-wmi: Remove wireless sysfs entry

In reply to Carlos Corbacho

With 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
index ed49269..492f591 100644
@@ -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;
 }