主题 : linux-2.6.32.2内核中LED驱动疑问 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 1970
精华: 0
发帖: 34
金钱: 175 两
威望: 43 点
综合积分: 68 分
注册时间: 2008-10-15
最后登录: 2019-10-25
楼主  发表于: 2010-06-24 11:53

 linux-2.6.32.2内核中LED驱动疑问

在开发板内核中有一个LED的驱动如下:
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;
    }
}

那么s3c2410_gpio_setpin(led_table[arg], !cmd);函数中的led_table[arg],值为多少?
我进行了如下的跟踪:

static unsigned long led_table [] = {
    S3C2410_GPB(5),
    S3C2410_GPB(6),
    S3C2410_GPB(7),
    S3C2410_GPB(8),
};
如果led_table[arg],中的arg为0则led_table[0]为S3C2410_GPB(5),,那么S3C2410_GPB(5),对应的数据是多少?以下为找到的每一层定义:
#define S3C2410_GPB(_nr)    (S3C2410_GPIO_B_START + (_nr))

S3C2410_GPIO_B_START = S3C2410_GPIO_NEXT(S3C2410_GPIO_A),

#define S3C2410_GPIO_NEXT(__gpio) \
    ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 0)

由于S3C2410_GPIO_A这个定义在内核中找不到,所以S3C2410_GPIO_NEXT函数无解同时
#define S3C2410_GPIO_NEXT(__gpio) \
    ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 0)
这个定义我不不知如何求解

请大家指点一下这个
S3C2410_GPB(5),的值是如何求解出来的?因为我是初学者希望详细解答,谢绝精简
级别: 新手上路
UID: 16965
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-03-23
最后登录: 2010-09-09
1楼  发表于: 2010-06-28 23:42

 回 楼主(xjdx051) 的帖子

S3C2410_GPIO_A在内核文件中试可以找到的,如果不出意外的话应该为0。
24xx结构的我就不太清楚了,Samsung S3C6410的路径好像是在arch/arm/mach-s3c6410/include/mach/gpio.h出有定义