任务 : 基于platform驱动模型完成LED驱动的编写,实现三盏灯的点亮
驱动代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mod_devicetable.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/gpio.h>struct resource *res;
int irqnum;
struct gpio_desc *gpionum1;
struct gpio_desc *gpionum2;
struct gpio_desc *gpionum3;struct of_device_id of_tab[] ={{.compatible = "hqyj,myplatform",},{.compatible = "hqyj,myplatform1",},{},
};// 匹配成功函数
int pdri_probe(struct platform_device *pdev)
{printk("%s : %s : %d\n", __FILE__, __func__, __LINE__);// 获取设备信息res = platform_get_resource(pdev, IORESOURCE_MEM, 0);if (res == NULL){printk("MEM : platform_get_resource failed\n");return -1;}printk("MEN : %x\n", res->start);// 获取中断号信息irqnum = platform_get_irq(pdev, 0);if (irqnum < 0){printk("IRQ : platform_get_irq failed\n");return -1;}printk("IRQ : %d\n", irqnum);// 获取LED1gpio信息gpionum1 = gpiod_get_from_of_node(pdev->dev.of_node, "led1-gpioe", 0, GPIOD_OUT_HIGH, NULL);if (IS_ERR(gpionum1)){printk("gpiod_get_from_of_node failed\n");return PTR_ERR(gpionum1);}printk("gpiod_get_from_of_node success\n");// 获取LED2gpio信息gpionum2 = gpiod_get_from_of_node(pdev->dev.of_node, "led2-gpiof", 0, GPIOD_OUT_HIGH, NULL);if (IS_ERR(gpionum2)){printk("gpiod_get_from_of_node failed\n");return PTR_ERR(gpionum2);}printk("gpiod_get_from_of_node success\n");// 获取LED3gpio信息gpionum3 = gpiod_get_from_of_node(pdev->dev.of_node, "led3-gpioe", 0, GPIOD_OUT_HIGH, NULL);if (IS_ERR(gpionum3)){printk("gpiod_get_from_of_node failed\n");return PTR_ERR(gpionum3);}printk("gpiod_get_from_of_node success\n");return 0;
}// 分离函数
int pdri_remove(struct platform_device *pdev)
{gpiod_set_value(gpionum1, 0);gpiod_set_value(gpionum2, 0);gpiod_set_value(gpionum3, 0);gpiod_put(gpionum1);gpiod_put(gpionum2);gpiod_put(gpionum3);printk("%s : %s : %d\n", __FILE__, __func__, __LINE__);return 0;
}// 给驱动对象分配空间
struct platform_driver pdri = {.probe = pdri_probe,.remove = pdri_remove,.driver.name = "a",.driver.of_match_table = of_tab,
};module_platform_driver(pdri);MODULE_LICENSE("GPL");