All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastien Bourdeauducq <sb@m-labs.hk>
To: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Cc: linux-input <linux-input@vger.kernel.org>,
	Mika Westerberg <mika.westerberg@linux.intel.com>
Subject: Re: "i2c_hid: Could not register for interrupt, irq = -1" on Thinkpad Tablet 10
Date: Sun, 01 Feb 2015 11:27:09 +0800	[thread overview]
Message-ID: <54CD9D0D.20402@m-labs.hk> (raw)
In-Reply-To: <CAN+gG=Gzi-gm1Hxvb1dt8xjLe4d_tBXEruu9HAru0x73dMAMCw@mail.gmail.com>

Hi,

On Sunday, February 01, 2015 04:39 AM, Benjamin Tissoires wrote:
> Mika sent a patch recently which should solve your problem.
> Can you give a try to the following patch?
> https://patchwork.kernel.org/patch/5709961/

With this patch and IRQF_TRIGGER_LOW | IRQF_ONESHOT, I get an interrupt 
flood and the kernel disables the interrupt line. I have reverted it to 
IRQF_TRIGGER_FALLING | IRQF_ONESHOT, and the i2c_hid initialization 
completes successfully.

The next problem is that the tablet has product ID 0x0114 and this is 
not recognized by the wacom_wac driver. I have added those entries in it:

static const struct wacom_features wacom_features_0x114 =
	{ "Wacom ISDv4 114", 26202, 16325, 255, 0,
	  TABLETPCE, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
...
#define ANY_DEVICE_WACOM(prod)						\
	HID_DEVICE(HID_BUS_ANY, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\
	.driver_data = (kernel_ulong_t)&wacom_features_##prod
...
{ ANY_DEVICE_WACOM(0x114) },

I am just guessing here and copied the existing entry for product ID 
0x116. I don't know if those numbers are correct - also, should I have 
used the existing USB_DEVICE_WACOM macro instead of defining 
ANY_DEVICE_WACOM?

After those changes, I'm able to move the mouse pointer only once (and 
to the correct position) using the stylus, after which the digitizer 
crashes and becomes inoperable until a reboot. Unloading and reloading 
i2c_hid results in a "failed to reset device" message.

I have copied my DSDT entry below.

Thanks,
Sebastien

Device (DIGI)
{
     Name (_ADR, Zero)  // _ADR: Address
     Name (_HID, "WCOM0008")  // _HID: Hardware ID
     Name (_CID, "PNP0C50")  // _CID: Compatible ID
     Name (_DDN, "Digitizer")  // _DDN: DOS Device Name
     Name (_UID, One)  // _UID: Unique ID
     Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
     {
         Name (RBUF, ResourceTemplate ()
         {
             I2cSerialBus (0x0009, ControllerInitiated, 0x00061A80,
                 AddressingMode7Bit, "\\_SB.I2C3",
                 0x00, ResourceConsumer, ,
                 )
             GpioInt (Level, ActiveLow, Exclusive, PullUp, 0x0000,
                 "\\_SB.GPO0", 0x00, ResourceConsumer, ,
                 )
                 {   // Pin list
                     0x0038
                 }
         })
         Return (RBUF)
     }

     Method (_STA, 0, NotSerialized)  // _STA: Status
     {
         If (LEqual (And (COMP, 0x04), 0x04))
         {
             Return (0x0F)
         }
         Else
         {
             Return (Zero)
         }
     }

     Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
     {
         Store ("Method _DSM begin", Debug)
         While (One)
         {
             Name (_T_0, Buffer (One)  // _T_x: Emitted by ASL Compiler
             {
                  0x00
             })
             CopyObject (ToBuffer (Arg0), _T_0)
             If (LEqual (_T_0, Buffer (0x10)
                     {
                         /* 0000 */   0xF7, 0xF6, 0xDF, 0x3C, 0x67, 
0x42, 0x55, 0x45,
                         /* 0008 */   0xAD, 0x05, 0xB3, 0x0A, 0x3D, 
0x89, 0x38, 0xDE
                     }))
             {
                 While (One)
                 {
                     Name (_T_1, Zero)  // _T_x: Emitted by ASL Compiler
                     Store (ToInteger (Arg2), _T_1)
                     If (LEqual (_T_1, Zero))
                     {
                         While (One)
                         {
                             Name (_T_2, Zero)  // _T_x: Emitted by ASL 
Compiler
                             Store (ToInteger (Arg1), _T_2)
                             If (LEqual (_T_2, One))
                             {
                                 Store ("Method _DSM Function Query", Debug)
                                 Return (Buffer (One)
                                 {
                                      0x03
                                 })
                             }
                             Else
                             {
                                 Return (Buffer (One)
                                 {
                                      0x00
                                 })
                             }

                             Break
                         }
                     }
                     Else
                     {
                         If (LEqual (_T_1, One))
                         {
                             Store ("Method _DSM Function HID", Debug)
                             Return (One)
                         }
                         Else
                         {
                             Return (Zero)
                         }
                     }

                     Break
                 }
             }
             Else
             {
                 Return (Buffer (One)
                 {
                      0x00
                 })
             }

             Break
         }
     }
}

  reply	other threads:[~2015-02-01  3:27 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-31 15:01 "i2c_hid: Could not register for interrupt, irq = -1" on Thinkpad Tablet 10 Sebastien Bourdeauducq
2015-01-31 20:39 ` Benjamin Tissoires
2015-02-01  3:27   ` Sebastien Bourdeauducq [this message]
2015-02-02 10:00     ` Mika Westerberg
2015-02-02 13:19       ` Sebastien Bourdeauducq
2015-02-02 13:48         ` Mika Westerberg
2015-02-02 15:32           ` Sébastien Bourdeauducq
2015-02-02 15:42             ` Benjamin Tissoires
2015-02-02 15:55               ` Sébastien Bourdeauducq
2015-02-02 15:57             ` Mika Westerberg
2015-02-03  8:53               ` Sébastien Bourdeauducq
2015-02-03 11:25                 ` Mika Westerberg

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=54CD9D0D.20402@m-labs.hk \
    --to=sb@m-labs.hk \
    --cc=benjamin.tissoires@gmail.com \
    --cc=linux-input@vger.kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    /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.