观察mt_gpio_set_default,发现相关配置参数是从设备树中获取的,展开mt_gpio_set_default()函数中的mt_gpio_get_default_chip_from_dtb()调用,发现相关设备树节点名字是gpio@10005000,相关属性的名字是gpio_init_default。用adb pull /sys/firmware/fdt,反编译设备树确认存在这个属性和节点。 在kernel中过滤文本搜索gp...
err = -ENODEV;gotoout_irqdesc_free; }/* gpio-mxc can be a generic irq chip */err = mxc_gpio_init_gc(port, irq_base, &pdev->dev);if(err <0)gotoout_irqdomain_remove; list_add_tail(&port->node, &mxc_gpio_ports); platform_set_drvdata(pdev, port); pm_runtime_put(&pdev->...
上图中,pinctrl-names里定义了2种状态:default、sleep。 第0种状态用到的引脚在pinctrl-0中定义,它是state_0_node_a,位于pincontroller节点中。 第1种状态用到的引脚在pinctrl-1中定义,它是state_1_node_a,位于pincontroller节点中。 当这个设备处于default状态时,pinctrl子系统会自动根据上述信息把所用引脚复用...
(5)初始化misc设备信息,注册gpio_misc->misc设备到系统中。 gpio_user_init_default函数实现方式如下: static void gpio_user_init_default(void){int i,ret;struct gpio_user_data *data;data = gpio_misc->data;for(i = 0;i < gpio_misc->gpio_count;i++) {if(!gpio_is_valid(data[i].gpio)) ...
while(((GPIO_Init->Pin) >> position) !=0x00u){/* Get the IO position */ioposition = (0x01uL << position); /* Get the current IO position */iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; if(iocurrent == ioposition...
gpio_hw_init() gpio_hw_release() gpio_hw_set() 就是与GPIO硬件的初始化、释放、状态设置相关的操作。 代码中的注释已经比较完善了,结合前几篇文章中的函数说明,还是比较容易理解的。 从代码中可以看出:驱动程序使用alloc_chrdev_region函数,来动态注册设备号,并且利用了Linux应用层中的 udev 服务,自动在/dev...
当这个设备处于default状态时,pinctrl子系统会自动根据上述信息把所用引脚复用为uart0功能。 当这这个设备处于sleep状态时,pinctrl子系统会自动根据上述信息把所用引脚配置为高电平。 b. groups和function: 一个设备会用到一个或多个引脚,这些引脚就可以归为一组(group); ...
void key_exit_init(void) { GPIO5_IMR = (volatile unsigned int *)(0x20AC014); GPIO5_EDGE_SEL = (volatile unsigned int *)(0x20AC01C); GPIO5_ISR = (volatile unsigned int *)(0x20AC018); GPIO5_DR = (volatile unsigned int *)(0x20AC000); GPIO4_IMR = (volatile unsigned int *)...
/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */...
} // 模块退出函数 static void __exit my_platform_driver_exit(void) { // 注销平台驱动 platform_driver_unregister(&my_platform_driver); printk(KERN_INFO "my_platform_driver: Platform driver exited\n"); } module_init(my_platform_driver_init); module_exit(my_platform_driver_exit); MODULE_...