public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Mattia Dongili <malattia@linux.it>
To: Len Brown <lenb@kernel.org>
Cc: linux-acpi@vger.kernel.org, Stelian Pop <stelian@popies.net>,
	Mattia Dongili <malattia@linux.it>,
	Andrei Paskevich <andrei@capet.iut-fbleau.fr>
Subject: [PATCH 7/7] Fix event reading in sony-laptop
Date: Mon, 16 Jul 2007 02:34:39 +0900	[thread overview]
Message-ID: <1184520880267-git-send-email-malattia@linux.it> (raw)
In-Reply-To: <11845208801817-git-send-email-malattia@linux.it>

The rewritten event reading code from sonypi was absolutely wrong,
this patche makes things functional for type2 and type1 models.

Cc: Andrei Paskevich <andrei@capet.iut-fbleau.fr>
Signed-off-by: Mattia Dongili <malattia@linux.it>
---
 drivers/misc/sony-laptop.c |   30 ++++++++++++++++++++++--------
 1 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/drivers/misc/sony-laptop.c b/drivers/misc/sony-laptop.c
index 6909714..4831e72 100644
--- a/drivers/misc/sony-laptop.c
+++ b/drivers/misc/sony-laptop.c
@@ -1086,7 +1086,9 @@ static struct acpi_driver sony_nc_driver = {
 #define SONYPI_DEVICE_TYPE2	0x00000002
 #define SONYPI_DEVICE_TYPE3	0x00000004
 
-#define SONY_PIC_EV_MASK	0xff
+#define SONYPI_TYPE1_OFFSET	0x04
+#define SONYPI_TYPE2_OFFSET	0x12
+#define SONYPI_TYPE3_OFFSET	0x12
 
 struct sony_pic_ioport {
 	struct acpi_resource_io	io;
@@ -1100,6 +1102,7 @@ struct sony_pic_irq {
 
 struct sony_pic_dev {
 	int			model;
+	u16			evport_offset;
 	u8			camera_power;
 	u8			bluetooth_power;
 	u8			wwan_power;
@@ -2176,20 +2179,17 @@ end:
 static irqreturn_t sony_pic_irq(int irq, void *dev_id)
 {
 	int i, j;
-	u32 port_val = 0;
 	u8 ev = 0;
 	u8 data_mask = 0;
 	u8 device_event = 0;
 
 	struct sony_pic_dev *dev = (struct sony_pic_dev *) dev_id;
 
-	acpi_os_read_port(dev->cur_ioport->io.minimum, &port_val,
-			dev->cur_ioport->io.address_length);
-	ev = port_val & SONY_PIC_EV_MASK;
-	data_mask = 0xff & (port_val >> (dev->cur_ioport->io.address_length - 8));
+	ev = inb_p(dev->cur_ioport->io.minimum);
+	data_mask = inb_p(dev->cur_ioport->io.minimum + dev->evport_offset);
 
-	dprintk("event (0x%.8x [%.2x] [%.2x]) at port 0x%.4x\n",
-			port_val, ev, data_mask, dev->cur_ioport->io.minimum);
+	dprintk("event ([%.2x] [%.2x]) at port 0x%.4x(+0x%.2x)\n",
+			ev, data_mask, dev->cur_ioport->io.minimum, dev->evport_offset);
 
 	if (ev == 0x00 || ev == 0xff)
 		return IRQ_HANDLED;
@@ -2280,6 +2280,20 @@ static int sony_pic_add(struct acpi_device *device)
 	spic_dev.model = sony_pic_detect_device_type();
 	mutex_init(&spic_dev.lock);
 
+	/* model specific characteristics */
+	switch(spic_dev.model) {
+		case SONYPI_DEVICE_TYPE1:
+			spic_dev.evport_offset = SONYPI_TYPE1_OFFSET;
+			break;
+		case SONYPI_DEVICE_TYPE3:
+			spic_dev.evport_offset = SONYPI_TYPE3_OFFSET;
+			break;
+		case SONYPI_DEVICE_TYPE2:
+		default:
+			spic_dev.evport_offset = SONYPI_TYPE2_OFFSET;
+			break;
+	}
+
 	/* read _PRS resources */
 	result = sony_pic_possible_resources(device);
 	if (result) {
-- 
1.5.2.3


  reply	other threads:[~2007-07-15 17:35 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-15 17:34 [PATCH 0/7] sony-laptop for 2.6.23 (updated) Mattia Dongili
2007-07-15 17:34 ` [PATCH 1/7] sony-laptop: add new SNC handlers Mattia Dongili
2007-07-15 17:34   ` [PATCH 2/7] sony-laptop: map wireless switch events to KEY_WLAN Mattia Dongili
2007-07-15 17:34     ` [PATCH 3/7] Add support for recent Vaios Fn keys (C series for now) Mattia Dongili
2007-07-15 17:34       ` [PATCH 4/7] Invoke _INI for SNC devices that provide it Mattia Dongili
2007-07-15 17:34         ` [PATCH 5/7] Make the driver use MSC_SCAN and a setkeycode and getkeycode key table Mattia Dongili
2007-07-15 17:34           ` [PATCH 6/7] Add Vaio FE to the special init sequence Mattia Dongili
2007-07-15 17:34             ` Mattia Dongili [this message]
2007-07-15 21:11           ` [PATCH 5/7] Make the driver use MSC_SCAN and a setkeycode and getkeycode key table Matthew Garrett
2007-07-16 17:06             ` Richard Hughes
2007-07-16 18:09               ` Matthew Garrett
2007-07-17 10:37                 ` Richard Hughes
2007-07-17 10:46                   ` Matthew Garrett
2007-07-18 11:45                   ` Mattia Dongili
2007-07-18 14:28                     ` Matthew Garrett
2007-07-18 15:05                       ` Dmitry Torokhov
2007-07-18 15:17                         ` Richard Hughes
2007-07-18 16:02                           ` Dmitry Torokhov
2007-07-18 16:20                             ` Richard Hughes
2007-07-18 16:25                           ` Matthew Garrett
2007-07-18 16:39                             ` Dmitry Torokhov
2007-07-18 16:44                             ` Richard Hughes
2007-07-18 16:56                               ` Matthew Garrett
2007-07-19 15:51                       ` Mattia Dongili
2007-07-16 13:22           ` Dmitry Torokhov
2007-07-18 11:33             ` Mattia Dongili
2007-07-19 17:01               ` Mattia Dongili
2007-07-22  4:36                 ` Len Brown
2007-07-18 11:45             ` Mattia Dongili
2007-07-22  4:37 ` [PATCH 0/7] sony-laptop for 2.6.23 (updated) Len Brown

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=1184520880267-git-send-email-malattia@linux.it \
    --to=malattia@linux.it \
    --cc=andrei@capet.iut-fbleau.fr \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=stelian@popies.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox