New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Impossible to use GPIO interrupts for multiple I2C devices #435
Comments
iirc I have both my I2C devices (I2C0->TPD0, I2C1->TPL1, I2C3->SHUB) set to GPIO interrupt before and at least the previous two work simultaneously. (Currently don't have time to get the sensor hub working) EDIT: just re-enabled a patch that replaces all
|
@ben9923 I just find a commit in my git stash Goshin/VoodooGPIO@5c7b5e3. It might be helpful for this issue but not tested for the multi-pin usage, in which I move enabling/disabling of device interrupts into registering/unregistering, so a pin will not interfere with others when the interrupts trigger simultaneously. |
@Goshin I'm not sure it would resolve the issue (I mean, why would they interfere in the first place?), but really do want someone with this issue to check out those changes. |
@ben9923 The interrupt needs to be temporarily disabled during the process of polling data from I2C. On Linux it is done by masking the corresponding pin but VoodooGPIO also disables the interrupt of the GPIO device, which I thought could also block interrupts for the other active pins. Indeed the effect should be minor because ideally it only happens when two devices are used simultaneously. |
try to change another GPIO device |
Would the question here, what changed above 2.4.4 which break interrupt mode for 2 devices. |
I have an HP laptop with 10th generation CPU (Comet Lake), with touchpad and touchscreen both on I2C. respectively:
both work correctly but NOT at the same time: in both cases I had confirmation of the correct functioning of both devices through FingerMgmt, but, as I have already said, not at the same time The DSDT is original (except for a small change for the mapping of the buttons for adjusting the brightness of the screen, in any case, I did some tests with the DSDT 100% clean and nothing has changed); I haven’t applied any modifications to the GPIO in the DSDT since the value of “IOInterruptSpecifiers” are respectively "10" and "11”. The current config is:
Kext order:
trackpad/mouse PlugIns of VoodooPS2 are disabled. IOReg: dmesg ELAN2514 (while only touchscreen works): dmesg SYNA328B (while trackpad only works): DSDT: |
Only happens on cases where the two pins are in the same padgroup? |
I meet a similar issue on Huawei Matebook X Pro 2020 laptop. The details are available at #509. |
Merely forcing polling mode may still meet the no response issue from the trackpad. In summary, there are three steps to fix the issue:
|
On some machines, when multiple devices are using GPIO interrupts as their event source, only one of them is actually usable. Others are dead.
When putting either/both in polling mode, both of them work properly.
Are we clearing one pin's interrupt status while handling the other one?
Request for community: Anyone experiencing such issue - Please attach a full troubleshooting archive + clear description.
If you have multiple devices using GPIO and all of them work at the same time, please report it works.
We only have untracked Gitter reports, a fix requires proper tracking and debug information.
The text was updated successfully, but these errors were encountered: