diff mbox

sony-laptop: support rfkill via ACPI interfaces

Message ID 20090323214822.GA32460@srcf.ucam.org (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Matthew Garrett March 23, 2009, 9:48 p.m. UTC
On Mon, Mar 23, 2009 at 08:10:30AM +0900, Mattia Dongili wrote:

> Yes it does.
> A vaio SR user sent me this list for 0x9c that after a call to SN07(202)
> becomes:

After looking at this, I think we actually want to be calling SN07(20C) 
on these machines - they implement an 0x127 function in the C function 
slot which also calls GECR. I suspect that this corresponds to the 
larger number of programmable buttons, so should be added to another 
table. Something like the following - some amount of tidying up 
required. That would avoid needing to add a multilevel setup.

Interestingly, the recent SRs also appear to implement the 0x124 rfill 
method, but at SN07(4) rather than SN07(3). This leaves me pretty happy 
that I've got the right idea about how this all works now :)

Comments

Norbert Preining March 24, 2009, 12:02 a.m. UTC | #1
On Mo, 23 Mär 2009, Matthew Garrett wrote:
> Interestingly, the recent SRs also appear to implement the 0x124 rfill 
> method, but at SN07(4) rather than SN07(3). This leaves me pretty happy 
> that I've got the right idea about how this all works now :)
> 
> diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
> index 2d142d3..5d95af8 100644

So does that mean I should test this on on top of your "final" patch?

Best wishes

Norbert

-------------------------------------------------------------------------------
Dr. Norbert Preining <preining@logic.at>        Vienna University of Technology
Debian Developer <preining@debian.org>                         Debian TeX Group
gpg DSA: 0x09C5B094      fp: 14DF 2E6C 0307 BE6D AD76  A9C0 D2BF 4AA3 09C5 B094
-------------------------------------------------------------------------------
GILDERSOME (adj.) Descriptive of a joke someone tells you which starts
well, but which becomes so embellished in the telling that you start
to weary of it after scarcely half an hour.
			--- Douglas Adams, The Meaning of Liff
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Matthew Garrett March 24, 2009, 12:04 a.m. UTC | #2
On Tue, Mar 24, 2009 at 01:02:00AM +0100, Norbert Preining wrote:
> On Mo, 23 Mär 2009, Matthew Garrett wrote:
> > Interestingly, the recent SRs also appear to implement the 0x124 rfill 
> > method, but at SN07(4) rather than SN07(3). This leaves me pretty happy 
> > that I've got the right idea about how this all works now :)
> > 
> > diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
> > index 2d142d3..5d95af8 100644
> 
> So does that mean I should test this on on top of your "final" patch?

The Z series doesn't implement the 0x127 method, so it won't make any 
difference.
diff mbox

Patch

diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index 2d142d3..5d95af8 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -850,6 +850,25 @@  struct sony_nc_event {
 	u8	event;
 };
 
+static struct sony_nc_event sony_127_events[] = {
+	{ 0x81, SONYPI_EVENT_MODEKEY_PRESSED },
+	{ 0x01, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x82, SONYPI_EVENT_PKEY_P1 },
+	{ 0x02, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x83, SONYPI_EVENT_PKEY_P2 },
+	{ 0x03, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x84, SONYPI_EVENT_PKEY_P3 },
+	{ 0x04, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x85, SONYPI_EVENT_PKEY_P4 },
+	{ 0x05, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x86, SONYPI_EVENT_PKEY_P5 },
+	{ 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0x87, SONYPI_EVENT_SETTINGKEY_PRESSED },
+	{ 0x07, SONYPI_EVENT_ANYBUTTON_RELEASED },
+	{ 0, 0 },
+}
+
 static struct sony_nc_event sony_nc_events[] = {
 	{ 0x90, SONYPI_EVENT_PKEY_P1 },
 	{ 0x10, SONYPI_EVENT_ANYBUTTON_RELEASED },
@@ -908,6 +927,24 @@  static void sony_acpi_notify(acpi_handle handle, u32 event, void *data)
 		} else if (sony_find_snc_handle(0x124) == ev) {
 			sony_nc_rfkill_update();
 			return;
+		} else 	if (sony_find_snc_handle(0x127) == ev) {
+			int i;
+
+			if (sony_call_snc_handle(0x127, 0x200, &result))
+				dprintk("sony_acpi_notify, unable to decode event 0x%.2x\n", ev);
+			else
+				ev = result & 0xFF;
+
+			for (i=0; sony_127_events[i].event; i++) {
+				if (sony_127_events[i].data == ev) {
+					ev = sony_127_events[i].event;
+					break;
+				}
+			}
+
+			if (!sony_127_events[i].data)
+				printk(KERN_INFO DRV_PFX
+				       "Unknown event: %x %x\n", origev, ev);
 		}
 	}