pxa27x 키패드 디아비스 드라이버 소스를 보는데요~ 궁금증 해결해 주세요~ㅠ

cho6005의 이미지

pxa27x 키패드 드라이버 소스 보고잇는데요~

디바이스 드라이버소스를 처음 보는거라 해석하기 힘이 드네요 ㅎ 고수님들 도와주세요~!

먼저 먼저 드라이버가 커널에 올라가면 pxa27x_keypad_init() 함수가 실행되면서 드라이버를 등록하고

요 init() 함수가 호출될때 probe() 함수도 호출되는 것으로 알고있습니다~

이 probe()함수에서 keypad 구조체도 세팅하고 I/O 메모리 영역도 할당 받고, request_irq() 함수로 irq도 등록하고

input_register_device() 함수를 통해 input device도 등록합니다.

(위 과정설명이 맞는지모르겠구요; 깔끔하게 과정설명 부탁드려요 ㅎ probe()함수에서 무슨일을 하는지..)

그리고 이 probe함수에서 void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) 함수를 호출하는데

정확히 무슨일을 하는지는 잘모르겠습니다~ 무슨 키코드를 설정하는거 같은데; 키패드에 대한 개념이 아직 없어서요 ㅎ

그리고 인터럽트 핸들러 부분!

키패드 키가 눌리면 irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id) 이 함수가 호출되어서

수행되는 것으로 알고 있는데, 소스에 보면 자세히는 모르겠지만 direct key 인지 matrix key 인지 구분을 해서

scan 하는 함수를 구분하여 호출하는것이 보이는데 matrix key scan 방법과 direct key scan 방법에 대해서 알고싶습니다(소스위주로)

소스는 길지만 아래 첨부하구요..ㅎ 왕초보에서 자비로운 설명부탁드립니다 ㅠ

File attachments: 
첨부파일 크기
Plain text icon pxa27x_keypad.txt20.69 KB
drinkme의 이미지

너무 많은 답이 필요한 질문이군요. 욕심이 많으십니다.
우선은 따로 공부하셔야 할 것이 많구요.

간단히 말씀드리면

1. init()은 module이 적재되면 자동적으로 불립니다.
이 경우, platform driver로 등록했는습니다.

2. 일단 등록된 platform driver에서 probe는 kernel에서 알아서 호출합니다.
가령, 새로운 driver가 적재되었을 경우, 그 driver의 probe()를 호출해 주고,
새로운 device가 감지되었을 경우, 호출되고...

3. probe()에서는 해당 device를 검사해서 맞으면 작업하고, 아니면 넘어가고.. .그러면 됩니다.

4. direct key라는 것은 입력신호 하나가 key 하나 자체입니다.
가령, GPIO43번을 camera key로 한다던가....
matrix key는 ...
가령, 컴퓨터의 키보드나 휴대폰의 숫자키처럼, 키가 많으면 일일이 GPIO등에 할당하기 좀 아깝습니다.
그리고, row와 col으로 정의된 array로 구성하는 거죠.
가령, row에 4줄. col에 4줄이면, 16개의 버튼을 정의할 수 있겠죠.
row를 몽땅 연결하고, col의 4개 line에 interrupt를 걸면,
임의의 키가 눌렸을 때에, interrupt가 뜹니다.
ISR에서는 row를 한개씩만 연결시키면서, col의 값을 읽어봅니다.
그러면, 눌린 키를 알 수 있겠죠.
이렇게 하는 것을 말합니다.

5. keypad_build_keycode()는 위에서 말한 것을 처리해 주는 부분인 듯 하군요.

cho6005의 이미지

댓글 감사합니다^^;
한ㄲㅓ번에 많은걸 보려다 보니; 질문이 많아졌어요 ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.