gpio子系统与pinctrl子系统四:使用

主要是如何使用gpiolib相关接口,进行其他的驱动开发。

这块主要是针对“驱动工程师”而言的,不是针对原厂的BSP工程师。

几个gpiolib常用的经典接口包括:

  • gpio_request: 驱动中要想使用某一个gpio,就必须先调用gpio_request接口来向内核申请,得到允许后才可以去使用这个gpio。
  • gpio_free: 对应gpio_request,用来释放申请后用完了的gpio。
  • gpiochip_is_requested: 接口用来判断某一个gpio是否已经被申请了。
  • gpio_direction_input: 接口用来设置GPIO为输入模式。
  • gpio_direction_output: 接口用来设置GPIO为输出模式。

另外几个新接口包括:

  • devm_gpio_request_one: 申请并将gpio初始为高电平。
  • gpio_get_value: //读取gpio电平值
  • gpio_set_value:  //设置gpio电平值

另外就是获取设备树引脚定义的接口包括:

  • of_get_named_gpio:// 根据函数返回值来得到gpio号

引用一张图:

 典型应用

    /* 从设备树获取引脚编号 */ 
    gpio_cs = of_get_named_gpio(nd, "spi_cs", 0);    
    if(!gpio_is_valid(gpio_cs )) {        
        printk("get gpio_cs failed !\r\n");        
        return -EINVAL;    
    } else {
        printk("gpio_cs = %d gpio ok !\r\n", gpio_cs  );
        ret = gpio_request(gpio_cs, "spi_cs");    
        if(ret < 0) {
            printk("request gpio spi_cs failed !\r\n");        
            gpio_free(gpio_cs);    
            return -EINVAL;   
        }

        /* 设置gpio_cs 引脚方向 */ 
        ret = gpio_direction_output(gpio_cs, 0);// 片选:低有效
    	if (ret < 0) {
    		printk("can't request output direction spi_cs gpio %d\n", gpio_cs);
    		return ret;
    	} else {
            printk("spi_cs gpio_direction_output ok !\r\n");        
        }
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值