of_get_named_gpio() /* 返回 GPIO编号 */
gpio_request () /* 申请一个GPIO管脚 */
gpio_free() /* 释放GPIO */
gpio_direction_input() /* 设置GPIO为输入 */
gpio_direction_output /* 设置GPIO为输出 */
gpio_get_value() /* 获取GPIO的值 */
gpio_set_value() /* 设置GPIO的值 */
/* code */
#include <linux/module.h>
#include <linux/configfs.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#define PWM_LED_GPIO 75 // gpio2 B3
#define PWM_LED_GPIO_LABER "pwm_led_gpio"
#define BLUE_TOOTH_SLEEP_GPIO 80 // gpio2 C0
#define BLUE_TOOTH_SLEEPGPIO_LABER "blue_tooth_sleep_gpio"
static int __init hello_init(void)
{
int ret = 0;
ret = gpio_request(PWM_LED_GPIO, PWM_LED_GPIO_LABER);
if (ret) {
printk("%s: failed to request GPIO r: %d\n", __func__, ret);
return -1;
}
gpio_direction_output(PWM_LED_GPIO, 1);
gpio_set_value(PWM_LED_GPIO, 1);
ret = gpio_request(BLUE_TOOTH_SLEEP_GPIO, BLUE_TOOTH_SLEEPGPIO_LABER);
if (ret) {
printk("%s: failed to request GPIO r: %d\n", __func__, ret);
return -1;
}
gpio_direction_output(BLUE_TOOTH_SLEEP_GPIO, 1);
gpio_set_value(BLUE_TOOTH_SLEEP_GPIO, 1);
return 0;
}
static void __exit hello_exit(void)
{
gpio_direction_output(PWM_LED_GPIO, 1);
gpio_set_value(PWM_LED_GPIO, 0);
gpio_direction_output(BLUE_TOOTH_SLEEP_GPIO, 1);
gpio_set_value(BLUE_TOOTH_SLEEP_GPIO, 0);
gpio_free(PWM_LED_GPIO);
gpio_free(BLUE_TOOTH_SLEEP_GPIO);
printk("Goodbye, ac!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("ac");
MODULE_LICENSE("Dual BSD/GPL");
该代码示例展示了在Linux内核中如何使用GPIO功能。它首先通过of_get_named_gpio获取GPIO编号,然后请求GPIO资源,设置方向为输出,并设置其值。在退出时,释放GPIO资源并重置值。涉及的GPIO包括PWM_LED_GPIO75和BLUE_TOOTH_SLEEP_GPIO80。

8911

被折叠的 条评论
为什么被折叠?



