Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 62540
b: refs/heads/master
c: 22a1778
h: refs/heads/master
v: v3
  • Loading branch information
Mattia Dongili authored and Len Brown committed Jul 22, 2007
1 parent d7499ff commit bafda8f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 89892d153d0d46018241afc7944910912bcd9688
refs/heads/master: 22a17780584173635dae11bb83884952b00e5181
30 changes: 22 additions & 8 deletions trunk/drivers/misc/sony-laptop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1142,7 +1142,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;
Expand All @@ -1156,6 +1158,7 @@ struct sony_pic_irq {

struct sony_pic_dev {
int model;
u16 evport_offset;
u8 camera_power;
u8 bluetooth_power;
u8 wwan_power;
Expand Down Expand Up @@ -2233,20 +2236,17 @@ static int sony_pic_enable(struct acpi_device *device,
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;
Expand Down Expand Up @@ -2337,6 +2337,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) {
Expand Down

0 comments on commit bafda8f

Please sign in to comment.