在开发板内核中有一个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),的值是如何求解出来的?因为我是初学者希望详细解答,谢绝精简