基本LED驱动

[复制链接]
2132|1
 楼主| tao180539 发表于 2022-2-8 22:18 | 显示全部楼层 |阅读模式

static unsigned long led_table [] = {
        S3C2410_GPB(5),
        S3C2410_GPB(6),
        S3C2410_GPB(7),
        S3C2410_GPB(8),
};

static unsigned int led_cfg_table [] = {
        S3C2410_GPIO_OUTPUT,
        S3C2410_GPIO_OUTPUT,
        S3C2410_GPIO_OUTPUT,
        S3C2410_GPIO_OUTPUT,
};

static int sbc2440_leds_ioctl(
        struct inode *inode,
        struct file *file,
        unsigned int cmd,
        unsigned long arg)
{
        switch(cmd) {
        case 0:
        case 1:
                if (arg > 4) {
                        return -EINVAL;
                }
                s3c2410_gpio_setpin(led_table[arg], !cmd);
                return 0;
        default:
                return -EINVAL;
        }
}

static struct file_operations dev_fops = {
        .owner        =        THIS_MODULE,
        .ioctl        =        sbc2440_leds_ioctl,
};

static struct miscdevice misc = {
        .minor = MISC_DYNAMIC_MINOR,
        .name = DEVICE_NAME,
        .fops = &dev_fops,
};

static int __init led_test_dev_init(void)
{
        int ret;

        int i;
       
        for (i = 0; i < 4; i++) {
                s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
                s3c2410_gpio_setpin(led_table[i], 0);
        }

        ret = misc_register(&misc);

        printk (DEVICE_NAME"\tinitialized\n");

        return ret;
}

static void __exit led_test_dev_exit(void)
{
        misc_deregister(&misc);
}

module_init(led_test_dev_init);
module_exit(led_test_dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("FriendlyARM Inc.");
一个例子中的LED驱动,看着和网络上大部分不同呢,也没有虚拟内存映射,也没有write函数
mcai724 发表于 2022-3-2 16:44 | 显示全部楼层
fops的成员不是必须的,不用的留空就可以,你这个例子不是用ioctl替代的write功能吗。欢迎交流QQ398515912
您需要登录后才可以回帖 登录 | 注册

本版积分规则

321

主题

515

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部