From: Marco Chiappero <marco@absence.it>
To: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: platform-driver-x86@vger.kernel.org, Mattia Dongili <malattia@linux.it>
Subject: [PATCH 11/25] sony-laptop: rfkill improvements
Date: Fri, 03 Jun 2011 17:42:22 +0200 [thread overview]
Message-ID: <4DE900DE.9010006@absence.it> (raw)
In-Reply-To: <4DE8FC4A.9010401@absence.it>
- added sony_nc_get_rfkill_hwblock helper function
- rfkill type now persistent, using the hardware stored device power state
- added support for newer WWAN modules
- handle detection removed because no longer necessary
- now notifying rfkill events to the acpi bus
Signed-off-by: Marco Chiappero <marco@absence.it>
---
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -141,10 +141,7 @@ MODULE_PARM_DESC(kbd_backlight_timeout,
"(default: 0)");
-static int sony_rfkill_handle;
-static struct rfkill *sony_rfkill_devices[N_SONY_RFKILL];
-static int sony_rfkill_address[N_SONY_RFKILL] = {0x300, 0x500, 0x700,
0x900};
-static void sony_nc_rfkill_update(void);
+static int sony_rfkill_handle = -1;
/*********** Input Devices ***********/
@@ -1190,6 +1187,26 @@ static int sony_nc_hotkeys_decode(unsign
return ret;
}
+enum sony_nc_rfkill {
+ SONY_WIFI,
+ SONY_BLUETOOTH,
+ SONY_WWAN,
+ SONY_WIMAX,
+ N_SONY_RFKILL,
+};
+static struct rfkill *sony_rfkill_devices[N_SONY_RFKILL];
+static int sony_rfkill_address[N_SONY_RFKILL] = {0x300, 0x500, 0x700,
0x900};
+
+static int sony_nc_get_rfkill_hwblock(void)
+{
+ unsigned int result;
+
+ if (sony_call_snc_handle(sony_rfkill_handle, 0x200, &result))
+ return -1;
+
+ return result & 0x1;
+}
+
static void sony_nc_rfkill_cleanup(void)
{
int i;
@@ -1204,9 +1221,14 @@ static void sony_nc_rfkill_cleanup(void)
static int sony_nc_rfkill_set(void *data, bool blocked)
{
- unsigned int result;
- unsigned int argument = sony_rfkill_address[(long) data] + 0x100;
+ unsigned int result, argument = sony_rfkill_address[(long) data];
+ /* do not force an already set state */
+ sony_call_snc_handle(sony_rfkill_handle, argument, &result);
+ if ((result & 0x1) == !blocked)
+ return 0;
+
+ argument += 0x100;
if (!blocked)
argument |= 0xff0000;
@@ -1225,7 +1247,7 @@ static int sony_nc_setup_rfkill(struct a
enum rfkill_type type;
const char *name;
unsigned int result;
- bool hwblock;
+ bool hwblock, swblock;
switch (nc_type) {
case SONY_WIFI:
@@ -1255,6 +1277,13 @@ static int sony_nc_setup_rfkill(struct a
sony_call_snc_handle(sony_rfkill_handle, 0x200, &result);
hwblock = !(result & 0x1);
+
+ result = 0;
+ sony_call_snc_handle(sony_rfkill_handle, sony_rfkill_address[nc_type],
+ &result);
+ swblock = !(result & 0x2);
+
+ rfkill_init_sw_state(rfk, swblock);
rfkill_set_hw_state(rfk, hwblock);
err = rfkill_register(rfk);
@@ -1281,16 +1310,9 @@ static void sony_nc_rfkill_update(void)
if (!sony_rfkill_devices[i])
continue;
- if (hwblock) {
- if (rfkill_set_hw_state(sony_rfkill_devices[i], true)) {
- /* we already know we're blocked */
- }
- continue;
- }
-
sony_call_snc_handle(sony_rfkill_handle, argument, &result);
rfkill_set_states(sony_rfkill_devices[i],
- !(result & 0xf), false);
+ !(result & 0x2), hwblock);
}
}
@@ -1298,17 +1320,7 @@ static int sony_nc_rfkill_setup(struct a
{
#define RFKILL_BUFF_SIZE 8
u8 dev_code, i, buff[RFKILL_BUFF_SIZE] = { 0 };
- int offset;
- offset = sony_find_snc_handle(0x124);
- if (offset == -1) {
- offset = sony_find_snc_handle(0x135);
- if (offset == -1)
- return 0;
- else
- sony_rfkill_handle = 0x135;
- } else
- sony_rfkill_handle = 0x124;
dprintk("Found rkfill handle: 0x%.4x\n", sony_rfkill_handle);
/* need to read the whole buffer returned by the acpi call to SN06
@@ -1327,6 +1339,25 @@ static int sony_nc_rfkill_setup(struct a
if (dev_code == 0xff)
break;
+ /*
+ known codes:
+
+ 0x00 WLAN
+ 0x10 BLUETOOTH
+ 0x20 WWAN GPRS-EDGE
+ 0x21 WWAN HSDPA
+ 0x22 WWAN EV-DO
+ 0x23 WWAN GPS
+ 0x25 Gobi WWAN no GPS
+ 0x26 Gobi WWAN + GPS
+ 0x28 Gobi WWAN no GPS
+ 0x29 Gobi WWAN + GPS
+ 0x50 Gobi WWAN no GPS
+ 0x51 Gobi WWAN + GPS
+ 0x30 WIMAX
+ 0x70 no SIM card slot
+ 0x71 SIM card slot
+ */
dprintk("Radio devices, looking at 0x%.2x\n", dev_code);
if (dev_code == 0 && !sony_rfkill_devices[SONY_WIFI])
@@ -1335,7 +1366,7 @@ static int sony_nc_rfkill_setup(struct a
if (dev_code == 0x10 && !sony_rfkill_devices[SONY_BLUETOOTH])
sony_nc_setup_rfkill(device, SONY_BLUETOOTH);
- if ((0xf0 & dev_code) == 0x20 &&
+ if (((0xf0 & dev_code) == 0x20 || (0xf0 & dev_code) == 0x50) &&
!sony_rfkill_devices[SONY_WWAN])
sony_nc_setup_rfkill(device, SONY_WWAN);
@@ -1694,6 +1725,7 @@ static void sony_nc_snc_setup_handles(st
break;
case 0x0124:
case 0x0135:
+ sony_rfkill_handle = handle;
ret = sony_nc_rfkill_setup(sony_nc_acpi_device);
break;
default:
@@ -1887,6 +1919,30 @@ static void sony_nc_notify(struct acpi_d
ev = 1;
break;
+ case 0x0124:
+ case 0x0135:
+ sony_call_snc_handle(sony_rfkill_handle, 0x0100,
+ &result);
+ result &= 0x03;
+ dprintk("sony_nc_notify, RFKILL event received "
+ "(reason: %s)\n", result == 1 ?
+ "switch state changed" : "battery");
+
+ if (result == 1) { /* hw swtich event */
+ sony_nc_rfkill_update();
+ sony_laptop_report_input_event(
+ SONYPI_EVENT_RFKILL_ALL);
+ value = sony_nc_get_rfkill_hwblock();
+ } else if (result == 2) { /* battery event */
+ /* we should change the WWAN rfkill
+ state when the battery state changes
+ */
+ return;
+ }
+
+ ev = 2;
+ break;
+
default:
value = event;
dprintk("Unknowk event for handle: 0x%x\n", handle);
next prev parent reply other threads:[~2011-06-03 15:42 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-03 15:22 [PATCH 0/25] sony-laptop: code improvements and support extension for newer Vaios Marco Chiappero
2011-06-03 15:26 ` [PATCH 1/25] sony-laptop: use usigned data type when calling ACPI methods Marco Chiappero
2011-06-03 15:28 ` [PATCH 2/25] sony-laptop: simple_strtoul replaced by strict_strtoul Marco Chiappero
2011-06-12 21:56 ` Mattia Dongili
2011-06-03 15:29 ` [PATCH 3/25] sony-laptop: new ACPI SN06 method helper functions Marco Chiappero
2011-06-03 15:32 ` [PATCH 4/25] sony-laptop: new SNC setup and cleanup functions Marco Chiappero
2011-06-12 22:21 ` Mattia Dongili
2011-06-13 0:01 ` Marco Chiappero
2011-06-13 1:28 ` Mattia Dongili
2011-06-13 9:39 ` Marco Chiappero
2011-06-13 13:42 ` Mattia Dongili
2011-06-13 14:10 ` Marco Chiappero
2011-06-18 22:50 ` Marco Chiappero
2011-06-18 23:06 ` Marco Chiappero
2011-06-28 9:27 ` Mattia Dongili
2011-06-28 10:04 ` Marco Chiappero
2011-07-01 10:54 ` Marco Chiappero
2011-07-13 22:19 ` Marco Chiappero
2011-07-14 22:05 ` Mattia Dongili
2011-07-18 14:49 ` Marco Chiappero
2011-07-19 22:03 ` Mattia Dongili
2011-06-20 13:49 ` Marco Chiappero
2011-06-03 15:33 ` [PATCH 5/25] sony-laptop: new handles " Marco Chiappero
2011-06-03 15:35 ` [PATCH 6/25] sony-laptop: new notebook controller resume function Marco Chiappero
2011-06-03 15:36 ` [PATCH 7/25] sony-laptop: sony_nc_function_setup modifications Marco Chiappero
2011-06-03 15:38 ` [PATCH 8/25] sony-laptop: sony_nc_notify rewritten and improved Marco Chiappero
2011-06-04 8:43 ` Mattia Dongili
2011-06-04 11:26 ` Marco Chiappero
2011-06-05 22:38 ` Mattia Dongili
2011-06-06 12:23 ` Marco Chiappero
2011-06-06 12:42 ` Mattia Dongili
2011-06-06 12:45 ` Marco Chiappero
2011-06-20 14:00 ` Marco Chiappero
2011-07-19 21:30 ` Mattia Dongili
2011-06-04 12:42 ` Matthew Garrett
2011-06-04 14:22 ` Marco Chiappero
2011-06-04 14:30 ` Matthew Garrett
2011-06-04 14:34 ` Marco Chiappero
2011-06-04 14:36 ` Matthew Garrett
2011-06-04 14:42 ` Marco Chiappero
2011-06-04 14:45 ` Matthew Garrett
2011-06-04 15:04 ` Corentin Chary
2011-06-04 16:50 ` Marco Chiappero
2011-06-04 20:22 ` Alan Cox
2011-06-05 17:48 ` Marco Chiappero
2011-06-05 19:14 ` Alan Cox
2011-06-05 20:13 ` Marco Chiappero
2011-06-03 15:39 ` [PATCH 9/25] sony-laptop: sony_walk_callback moved for better readability Marco Chiappero
2011-06-03 15:41 ` [PATCH 10/25] sony-laptop: keyboard backlight support extended to newer Vaios Marco Chiappero
2011-06-04 7:58 ` Mattia Dongili
2011-06-04 10:30 ` Marco Chiappero
2011-06-04 11:23 ` Mattia Dongili
2011-06-04 11:41 ` Marco Chiappero
2011-06-05 22:33 ` Mattia Dongili
2011-06-06 12:27 ` Marco Chiappero
2011-06-10 12:31 ` Marco Chiappero
2011-06-12 22:24 ` Mattia Dongili
2011-06-13 14:28 ` Marco Chiappero
2011-06-18 4:15 ` Mattia Dongili
2011-06-03 15:42 ` Marco Chiappero [this message]
2011-06-04 7:59 ` [PATCH 11/25] sony-laptop: rfkill improvements Mattia Dongili
2011-06-03 15:43 ` [PATCH 12/25] sony-laptop: input core improvements improvements Marco Chiappero
2011-06-04 8:07 ` Mattia Dongili
2011-06-04 10:42 ` Marco Chiappero
2011-06-04 12:44 ` Matthew Garrett
2011-06-04 12:44 ` Matthew Garrett
2011-06-04 13:11 ` Marco Chiappero
2011-06-08 8:26 ` Joey Lee
2011-06-08 8:26 ` Joey Lee
2011-06-04 15:21 ` Marco Chiappero
2011-06-04 16:40 ` Mattia Dongili
2011-06-04 16:40 ` Mattia Dongili
2011-06-04 16:58 ` Marco Chiappero
2011-06-04 16:58 ` Marco Chiappero
2011-06-05 22:24 ` Mattia Dongili
2011-06-06 13:26 ` Marco Chiappero
2011-06-07 14:23 ` Mattia Dongili
2011-06-07 15:15 ` Marco Chiappero
2011-06-07 16:24 ` Mattia Dongili
2011-06-07 17:59 ` Marco Chiappero
2011-06-20 13:53 ` Marco Chiappero
2011-07-01 11:12 ` Marco Chiappero
2011-07-01 12:50 ` Matthew Garrett
2011-07-01 14:03 ` Marco Chiappero
2011-07-01 14:09 ` Matthew Garrett
2011-07-01 14:20 ` Marco Chiappero
2011-07-01 15:06 ` Matthew Garrett
2011-07-01 15:11 ` Marco Chiappero
2011-07-01 15:53 ` Matthew Garrett
2011-07-01 16:12 ` Marco Chiappero
2011-07-19 21:26 ` Mattia Dongili
2011-06-03 15:45 ` [PATCH 13/25] sony-laptop: code style fixes Marco Chiappero
2011-06-03 15:46 ` [PATCH 14/25] sony-laptop: battery care functionality added Marco Chiappero
2011-06-03 17:33 ` [PATCH 15/25] sony-laptop: add thermal control feature Marco Chiappero
2011-06-03 17:45 ` [PATCH 16/25] sony-laptop: add HDD shock protection Marco Chiappero
2011-06-03 17:54 ` [PATCH 17/25] sony-laptop: add resume from S4/S3 when opening the lid Marco Chiappero
2011-06-03 18:02 ` [PATCH 18/25] sony-laptop: add control file for the HighSpeed Charging feature Marco Chiappero
2011-06-03 18:16 ` [PATCH 19/25] sony-laptop: add touchpad enable/disable control file Marco Chiappero
2011-06-03 20:23 ` Dmitry Torokhov
2011-06-03 20:33 ` Marco Chiappero
2011-06-03 21:00 ` Dmitry Torokhov
2011-06-03 21:46 ` Marco Chiappero
2011-06-03 22:12 ` Dmitry Torokhov
2011-06-04 1:54 ` Marco Chiappero
2011-06-04 7:09 ` Mattia Dongili
2011-06-04 11:15 ` Marco Chiappero
2011-06-04 12:46 ` Matthew Garrett
2011-06-04 14:28 ` Marco Chiappero
2011-06-03 18:28 ` [PATCH 20/25] sony-laptop: add fan related controls Marco Chiappero
2011-06-03 18:50 ` [PATCH 21/25] sony-laptop: add optical device power control Marco Chiappero
2011-06-03 19:27 ` [PATCH 22/25] sony-laptop: forward Hybrid GFX notifications to userspace Marco Chiappero
2011-06-04 8:48 ` Mattia Dongili
2011-06-20 21:12 ` Marco Chiappero
2011-07-19 21:50 ` Mattia Dongili
2011-06-03 19:49 ` [PATCH 23/25] sony-laptop: add ALS support Marco Chiappero
2011-06-05 5:31 ` Mattia Dongili
2011-06-05 22:21 ` Marco Chiappero
2011-06-06 7:41 ` Javier Achirica
2011-06-06 13:08 ` Mattia Dongili
2011-06-06 13:51 ` Marco Chiappero
2011-06-06 22:24 ` Mattia Dongili
2011-06-06 23:26 ` Marco Chiappero
2011-06-07 16:07 ` Mattia Dongili
2011-06-07 17:50 ` Marco Chiappero
2011-06-07 22:39 ` Mattia Dongili
2011-06-08 9:52 ` Marco Chiappero
2011-06-03 20:10 ` [PATCH 24/25] sony-laptop: backlight device changes Marco Chiappero
2011-06-03 20:10 ` [PATCH 25/25] sony-laptop: update copyright owners Marco Chiappero
2011-06-04 8:54 ` [PATCH 0/25] sony-laptop: code improvements and support extension for newer Vaios Mattia Dongili
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DE900DE.9010006@absence.it \
--to=marco@absence.it \
--cc=malattia@linux.it \
--cc=mjg59@srcf.ucam.org \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.