主题 : 有人改过6410的驱动吗?我用2440的结构修改一下LED驱动有点问题 分析以下 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 21580
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-05-18
最后登录: 2015-08-02
楼主  发表于: 2011-05-23 22:20

 有人改过6410的驱动吗?我用2440的结构修改一下LED驱动有点问题 分析以下

有人改过6410的驱动吗?我看他的led驱动写的方式有点复杂不宜于扩展,所以照着2440的结构改了一下 编译通过但是有点问题 谁给看看?

代码如下:
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <mach/regs-gpio.h>
#include <mach/hardware.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/unistd.h>
#include <mach/map.h>
#include <mach/regs-clock.h>
#include <plat/gpio-cfg.h>
#include <mach/gpio-bank-e.h>
#include <mach/gpio-bank-k.h>
#include <linux/gpio.h>//////

#define DEVICE_NAME "step"
static unsigned long step_table [] = {
    S3C64XX_GPK(4),
    S3C64XX_GPK(5),
    S3C64XX_GPK(6),
    S3C64XX_GPK(7),
};

static unsigned int step_cfg_table [] = {
    S3C64XX_GPK_OUTPUT(4),
    S3C64XX_GPK_OUTPUT(5),
    S3C64XX_GPK_OUTPUT(6),
    S3C64XX_GPK_OUTPUT(7),
};

static long step_ioctl(
    struct file *file,
    unsigned int cmd,
    unsigned long arg)
{
    switch(cmd) {
    case 0:
    case 1:
        if (arg > 3) {
            return -EINVAL;
        }
        gpio_set_value(step_table[arg], !cmd);
        return 0;
    default:
        return -EINVAL;
    }
}

static struct file_operations dev_fops = {
    .owner    =     THIS_MODULE,
     .unlocked_ioctl = step_ioctl,
};

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

static int __init dev_init(void)
{
    int ret;

    int i;
    
    for (i = 0; i < 4; i++) {
        s3c_gpio_cfgpin(step_table, step_cfg_table);
        gpio_set_value(step_table, 1);
    }

    ret = misc_register(&misc);

    printk (DEVICE_NAME"\tinitialized\n");

    return ret;
}

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

module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("FriendlyARM Inc.");
级别: 新手上路
UID: 21580
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-05-18
最后登录: 2015-08-02
1楼  发表于: 2011-05-23 22:24
加载之后LED全部有一点亮度 操作不起作用
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
2楼  发表于: 2011-05-24 09:34
for (i = 0; i < 4; i++) {
        s3c_gpio_cfgpin(step_table[ i ], step_cfg_table[ i ]);
        gpio_set_value(step_table[ i ], 1);
}
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
3楼  发表于: 2011-05-24 09:38
多用printk调试一下就能找到问题的
级别: 新手上路
UID: 21580
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-05-18
最后登录: 2015-08-02
4楼  发表于: 2011-05-24 11:46

 回 2楼(911gt3) 的帖子

我的代码里有[i]贴过来时候丢了 我现在就不知设置寄存器的定义是什么,我对这6410定义的头文件找了半天好像还是不对
就是s3c_gpio_cfgpin(step_table[ i ], step_cfg_table[ i ]);
        gpio_set_value(step_table[ i ], 1);
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
5楼  发表于: 2011-05-24 12:53
检查一下会不会有其它的driver修改了GPIO的配置, 如果此driver初始化后其它driver把这些GPIO配置成了其它的功能, 那么就会在ioctl时控制不了