打印

基本LED驱动

[复制链接]
1828|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

粉丝