TI中文支持网
TI专业的中文技术问题搜集分享网站

如何自定义 AM437X_GP_EVM 开发板 按键驱动

设备树配置如下

/{

…………………….

button_x{
   compatible="gpio-keys"; 

   pinctrl-names = "default", "sleep";
   pinctrl-0 = <&button1>;
   pinctrl-1 = <&button2>;

   sw@1{
      label="sw1";
      linux,code = <0x103>;
      gpios=<&gpio3 21 GPIO_ACTIVE_HIGH>;//gpio3_21,mode7
   };
   sw@2{
      label="sw2";
      linux,code = <0x104>;
      gpios=<&gpio4 3 GPIO_ACTIVE_HIGH>;//gpio4_3,mode7
  } ;
};

};

&am43xx_pinmux {

………………..

   button1: button1 { 
   pinctrl-single,pins = <
   AM4372_IOPAD(0x9ac, PIN_INPUT | MUX_MODE7) //gpio3_21,mode7 gpio0_3,mode9
   AM4372_IOPAD(0x9bc, PIN_INPUT | MUX_MODE7) //gpio4_3,mode7
   >;
};

button2: button2 {
   pinctrl-single,pins = <
   AM4372_IOPAD(0x9ac, PIN_INPUT | MUX_MODE7) //gpio3_21,mode7 gpio0_3,mode9
   AM4372_IOPAD(0x9bc, PIN_INPUT | MUX_MODE7) //gpio4_3,mode7
   >;
};

……………….

};

开发板启动后在  cat  /sys/class/input/event0/device/name ,显示button_x

编写应用程序测试

int main(void){
   struct input_event key_evt;
   int ret,ret_x;
   int f_key = open("/dev/input/event0",O_RDWR);
   if(f_key < 0){
      printf("error in open /dev/input/event0\n");
   return -1;
   }
while (1){
   ret=read(ret_x,(unsigned char*)&key_evt,sizeof(struct input_event));
   if(ret<0){
      printf("read key event failed:%d",ret);
   }else if(key_evt.code != 0x103 &&
      key_evt.code != 0x104){
      printf("unknown key code:%d",key_evt.code);
   }else{
      printf("get key event code:%x, value:%x,type:%x",key_evt.code,key_evt.value,key_evt.type);
   }
   }

}

编译后运行应用程序,但是按对应的按键,却没任何反应,串口不打印任何信息。

是哪里出错了吗?设备树没配好?还是?

yongqing wang:

在写的应用程序之前可以先用test_event 测试一下

赞(0)
未经允许不得转载:TI中文支持网 » 如何自定义 AM437X_GP_EVM 开发板 按键驱动
分享到: 更多 (0)