首先配置设备树
mytest {
compatible = "rockchip,gpio_test";
gpio_led = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
status = "okay";
};
驱动程序
/* gpio init */
gpio_dev.nd = of_find_node_by_path("/mytest");
if(gpio_dev.nd == NULL) {
printk(KERN_EMERG"can't find mytest\r\n");
goto err3;
}
gpio_dev.gpio_test = of_get_named_gpio(gpio_dev.nd,"gpio_led", 0);
if(gpio_dev.gpio_test < 0) {
printk(KERN_EMERG"can't get gpio_led");
goto err3;
}
printk(KERN_EMERG"gpio test number = %d /\r\n",gpio_dev.gpio_test);
ret = gpio_request(gpio_dev.gpio_test,"gpio_led");
if(ret) {
printk(KERN_EMERG"can't request gpio_led\r\n");
goto err3;
}
ret = gpio_direction_output(gpio_dev.gpio_test,1);
if(ret) {
goto err4;
}
gpio_set_value(gpio_dev.gpio_test,0);输出低电平
//中断申请
// irqnum = gpio_to_irq(gpio_dev.gpio_test);//gpio中断
//irqnum = irq_of_parse_and_map(gpio_dev.nd,index);//普通中断获取
//request_irq(irqnum/*中断号*/, irq_handler/*中断处理函数*/, IRQF_TRIGGER_RISING/*触发方式*/, "irq_name", &gpio_dev/*传递给中断处理函数的参数*/);
// struct irq{
// irqreturn_t (*handler) (int, void *);
// };
//定时器初始化
init_timer(&gpio_dev.timer);
// gpio_dev.timer.function = timer_func;
// gpio_dev.timer.data = (unsigned long)&gpio_dev;
使用示波器验证结果成功