printk(KERN_ERR"%s: Reset GPIO request failed.\n", __func__);gototouch_gpio_init_fail; } }else{ printk(KERN_ERR"%s: Cannot acquire reset pin.\n", __func__); err = pin;gototouch_gpio_init_fail; } pin =get_gpio_by_name("touch_panel_int");if(pin >=0) { err = gpio_requ...
操作GPIO是通过gpio_set_value、gpio_direction_output之类的函数去做的,即便没有request,一样可以设置GPIO的电平。对于设备驱动来说,应该保证每一个在初始化的时候(一般是probe),对和设备有关的GPIO都进行一次gpio_request,在remove时候时候使用gpio_free。当然,如果probe失败,应该在probe里面free掉已经request过的GPIO...
return ret; } //申请中断: static int pctrltest_request_irq(void) { int ret; int virq = sunxi_ptest_data->irq; int trigger = IRQF_TRIGGER_HIGH; reinit_completion(&sunxi_ptest_data->done); pr_warn("step1: request irq(%s level) for irq:%d.\n", trigger == IRQF_TRIGGER_HIGH ?
pinmux_request_gpio函数的作用主要有两个,一个是在core driver中标记该pin已经用作GPIO了,这样,如果有模块后续request该资源,那么core driver可以拒绝不合理的要求。第二步就是调用底层pin controller driver的callback函数,进行底层寄存器相关的操作。 (2)pinctrl_free_gpio。有申请就有释放,这是pinctrl_request_gpio...
_set_value(unsignedgpio,intvalue)//设置gpio的消抖时间,主要用于按键消抖intgpio_set_debounce(unsignedgpio,unsigneddebounce)//获取gpio对应的中断线路intgpio_to_irq(unsignedgpio)//gpio中断,当产生中断时调用handle函数intrequest_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags,constchar* name,void*...
NT_SUCCESS(status)) { return status; } // // Commit the resource // status = WdfIoTargetSendIoctlSynchronously( resourceHandle, WDF_NO_HANDLE, // WdfRequest IOCTL_GPIO_COMMIT_FUNCTION_CONFIG_PINS, nullptr, // InputBuffer nullptr, // OutputBuffer nullptr, // RequestOptions nullptr); // ...
1、gpio_request函数 gpio_request函数用于申请一个GPIO管脚,在使用一个GPIO之前一定要使用gpio_request进行申请,函数原型如下: int gpio_request(unsigned gpio, const char *label) 函数参数和返回值含义如下: gpio:要申请的gpio标号,使用of_get_named_gpio函数从设备树获取指定GPIO属性信息,此函数会返回这个GPIO的标...
这里,我们首先定义了一个gpiohandle_request结构体,并设置了相应的参数。lineoffsets数组表示要导出的GPIO编号,lines表示要导出的GPIO数量(这里只导出一个GPIO),flags表示GPIO的初始方向(这里设置为输出),consumer_label表示使用这个GPIO的应用程序名称(可以自定义)。
int gpio_request(unsigned gpio, const char *label) gpio:要申请的 gpio 标号,使用 of_get_named_gpio 函数从设备树获取指定 GPIO 属性信息,此函数会返回这个 GPIO 的标号。 label:给 gpio 设置个名字。 2.2.2 gpio_free 对申请的gpio进行释放 void gpio_free(unsigned gpio) 2.2.3 gpio_direction_input...
Pinctrl 框架是 linux 系统为统一各 SoC 厂商 pin 管理,避免各 SoC 厂商各自实现相同 pin 管理子系统而提出的。目的是为了减少 SoC 厂商系统移植工作量。 2.1 模块功能介绍 许多SoC 内部都包含 pin 控制器,通过 pin 控制器,我们可以配置一个或一组引脚的功能和特性。在软件上,Linux 内核 pinctrl 驱动可以操作 ...