0

BeagleboneBlack에서 gpio 인터럽트가있는 드라이버를 사용하려고합니다.am335x GPIO는 장치 트리에서 어떻게 번호가 매겨 집니까?

&i2c1{... 

mydevice: [email protected] { 
    compatible = "mydevice,mydeice"; 
    reg = <0x0c>; 
    mag_irq_gpio = <&gpio1 13 0>; /* INT line */ 
}; 
...} 

그것의 드라이버 대응이 있습니다 :

static int parse_dt(struct i2c_client *client) 
{ 
    struct device_node *node = client->dev.of_node; 
    struct mydev_data *data = i2c_get_clientdata(client); 

    return of_property_read_u32(node, "mag_irq_gpio", &data->gpio); 
} 

드라이버로드 및 GPIO 번호가 완전히 잘못을 제외하고 잘 작동 내 장치 트리 내 사용자 정의 장치에 대한 다음과 같은 항목이 있습니다. 속성 읽기 함수는 성공을 반환하고 장치 트리에 다른 숫자를 입력하더라도 8을 gpio 번호로 읽습니다.

일반 데이터로 GPIO 번호를 전달하려면 어떻게해야합니까? 내 드라이버 내에서 GPIO 번호를 수동으로 무시하면 인터럽트가 작동합니다. @sawdust

<&gpio1 13 0> 

의해 주석으로 당

+1

세 항목의 벡터로 'mag_irq_gpio' 항목을 정의했습니다. 숫자는 (1) PIO 컨트롤러 'gpio1', (2) _relative_ 핀 번호, (13) 및 (3) 핀 옵션 (지정되지 않은 경우 '0')을 나타내는 것으로 나타납니다. . 드라이버가이 항목을 검색 할 때 드라이버는 하나가 아닌 세 가지 값을 모두 가져와야합니다. 드라이버가 컨트롤러 번호와 상대 핀 번호를 "절대"핀 번호로 변환해야 할 수 있습니다. – sawdust

답변

1

세 값의 배열을 나타낸다. GPIO 번호를 수동으로 계산하여 하나의 번호로 전달하여 문제를 해결했습니다 :

<14> 
+0

기본 상태는 무엇입니까? 낮은? – Raulp

+0

나는 드라이버에서 실제 초기화를 수행했으며 입력입니다. –

+0

같은 코드를 붙여 넣을 수 있습니까? GPIO를 어떻게 가져 왔습니까? 또한 다른 드라이버에서 gpio를 사용하면 오류 = -ENOENT 또는 다른 것을 얻을 수 있습니다. – Raulp