아이디어패드 S340-14iwl I2C 터치패드 잡기(내용오류, 수정, 그냥 polling 모드)
- 영혼의구슬
- 815
- 9
영혼의구슬님의 기기정보
시스템 사양 선택 | 2번 |
---|
아래의 방법은 틀렸습니다...interrupt 모드 사용은 사실상 포기하기로 했습니다.
살짝 부연설명하자면, irq 0x0e 값으로 부팅했을때 처음에는 polling 이란 문구가 로그에서 사라졌으나 어느순간 다시 생겼습니다.
그래서 다른 시도도 몇번 해보았습니다..0x2f 보다 작은 값으로....일반적으로 사용되지 않는 irq 값으로 대체해보는거죠..
예를 들면 시리얼포트에 쓰는 03, 04 와 플로피디스크 컨트롤러에 쓰인다는 06, 프린터포트 07 그리고 ps2 마우스포트인 12(0x0C)
모두 정상인식하긴 합니다..ioreg를 보면 interruptspecifier에 해당 irq 값이 표시되기도 하구요..
interrupt가 제대로 작동할때에 생기는 것으로 보이는 ioreportlegend 라는 항목도 생겼어요..
이렇게 polling 모드가 아닌 interrupt 모드로 작동하는 경우에
1. CPU 주파수가 최대가 됩니다..
2. 커서의 움직임은 손끝으로 느껴지는 것과 눈으로 쫓는것 간에 아주 미세하게 싱크가 맞지 않는것 같은 느낌이 들 정도로 버벅임이 있습니다.
....그래도 이건 gpio pinning 가이드에 있는 방법으로 pin list를 맞춰주고 SBFG를 이용해 잡았을때 보다는 훨~씬 부드럽긴 합니다..
3. 이렇게 대략 10여분 이내로 사용하다가 보면...중간중간 잠깐 멈춤의 순간이 있다가 어느순간 터치패드와 키보드가 작동하지 않습니다.
....메뉴바에 온도나 CPU 주파수가 변화되는 것 보면 시스템이 멈춘건 아닌것 같습니다...전원버튼을 길게 누르면 종료팝업도 뜹니다..
그러나 터치패드로 선택할 수 없고, 키보드로 재부팅을 선택할수도 없어서 결국 계속 전원버튼을 눌러 꺼야됩니다.
.....1, 3번 문제는 물론 정상적으로 작동하는 경우가 아니니까 그렇다고 치고....
interrupt 모드의 사용감이 2번과 같아서 실 사용감은 polling 모드가 더 부드럽다고 느낀관계로...
그냥 polling 모드로 쓰기로 했습니다...interrupt 나빠요~
(아래 내용을 지우지는 않겠습니다...시행착오를 겪으실 다른 분들을 위하여...)
터치패드는 voodooi2c 관련 kext로 잡을 수 있었습니다..그러나
https://voodooi2c.github.io/#GPIO%20Pinning/GPIO%20Pinning
그러나 위 방법처럼 해도 이 노트북의 터치패드는 위의 방법처럼 interrupt 모드로 잡히지 않고 polling 모드로만 잡힙니다..
위 방법으로 irq 0x50에 해당하는 pin list 0x0108 로 설정하면 CPU 속도로 최고 속도로 고정되며 포인터가 점핑하여 실사용이 어려워
그동안은 pin list에 범용으로 쓰인다고 가이드에 되어있는 0x055를 주고 polling 모드로 사용하는 수밖에 없었습니다.
이렇게요..
그런데 이게 잘 되다가 voodooi2c.kext 2.3 버전부터는 작동하지 않았어요...그래서 그냥 2.2 버전 쓰다가 몇가지 시도를 해봤습니다.
DSDT를 뒤지다보니 이런 내용을 발견했습니다.
device GPIO에는 interrupt 값이 0x0000000E로 되어있네요...
이 노트북의 터치패드 장치엔 원래 아래와 같이 되어있었죠..
보이시나요? interrupt 값 0x00000050..
원래 가이드를 대충 요약해보면...저 irq 값이 2f 보다 크면 macos에서 인식을 못하니 gpio pinning을 해줘야한다.
그렇게 하려면 저 interrupt 항목을 지우고 SBFG에 있는 pin list를 찾아서 고쳐준다음에(irq 0x50에 해당하는 값은 0x0108)
CRS 메소드에서 SBFI를 SBFB로 바꿔줘라...였거든요..
그런데 위에 GPIO에 있는 irq 값은 0x0000000E 였잖아요? 그래서 그 값을 한번 써봤습니다..
이렇게요...
그리고 _CRS 메소드도 원래대로 바꿔줬습니다..(가이드에는 SBFI를 SBFB로 바꾸라고 되어있었죠..)
이렇게 해주고 나니 로그에도 polling mode 어쩌고 하는 메세지가 사라졌습니다. 그리고 터치패드도 정상적으로 작동하네요
GPIO니 interrupt니..사실 뭔진 잘 모르겠지만...여튼 잘 잘되고 있습니다..
물론 voodooi2c.kext 2.3 버전으로 작동하고 있습니다..S340 유저분들은 참고하시면 될것같아요
#pin_list_0x0108,#irq_0x50,#SBFI,#터치패드,#SBFB
영혼의구슬
댓글 9
log show --predicate 'process == "kernel"' --last 10m
입력하실 때 polling이라는 단어가 아예 안나오시나요?
터치패드 부분에 If (Zero)라서 SBFG는 아예 활용 안 되실거구 끝에 SBFB랑 SBFI가 같이 Return되는데 VoodooI2C Interrupts는 SBFB랑 SBFG가 같이 Return해야되는걸로 Documentation에 적혀 있어서...
네..안나옵니다..아마도 추정컨데..SBFI를 사용하지 않는경우에 SBFB와 SBFG를 concatenate 하여 return 하게 되어있는것 같고..저는 0x2f 보다 작은 값인 0xe 가 irq로 사용되어 SBFI로 이용하게되는 것 같네요
로그파일 첨부합니다.
If (Zero)는 아무 의미 없는 코드에요. If는 조건의 결과가 One(True)여야지 해당 내용이 실행되는데, Zero(False)면 실행되지 않습니다. 그래서 If (Zero) {Return (SBFB,SBFG)}는 실행되지 않고 아래 Return (SBFB,SBFI)가 실행되는건데요...
어찌되었던 Polling Mode가 아닌게 신기할 따름입니다. VoodooI2C가 Return과 상관 없이 트랙패드 코드를 읽어서 SBFG를 알아보는건지...
제 트랙패드도 저렇게 패치해놓고 무슨 결과 나오는지 한 번 보고싶네요. 몇시간째인지 이놈의 10.15.4 업데이트 다운로드만 끝나면...
정보공유 감사합니다~
코드를 보면 제 경우에는 SBFG를 이용하지 않습니다...SBFG의 pin list 0x0038이 오리지널 값이긴 한데,
현재 상태에서는 저 값을 무엇으로 변경하던 상관이 없어졌습니다.
SBFB와 SBFI만을 concatenate 할 뿐...
가이드를 읽어보면...voodooi2c가 interrupt를 사용할 수 없는 경우에 GPIO pin을 ACPI와 pin과 일치시켜주기 위해 pinning을 해야한다는 것 같은데...저는 그냥 interrupt 값으로 2f보다 작은 0x0000000E를 사용하게 된 거죠..
단지 의문은, 윈도우에서도 TPAD의 irq는 0x50인데 macos에서는 0E를 사용하게 된건지 모르겠다는 거죠..
저는 Interrupts 사용시 하나의 핀 값만 작동하고 자꾸 끊겨서 polling 사용중인데, 영혼의구슬님 방법대로 하면 제 경우도 Interrupts로 간주될지, 그리고 사용감이 개선될지 모르겠어요.
고생하셨구 좋은 주말 되세요~