想寫一個tiny6410驅動,通過該驅動可以查看led的開關狀態和設置開關。代碼是在tiny6410-led驅動代碼原有的代碼的基礎上改的,先貼出一部分關鍵代碼。
static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int ioarg,ret;
switch(cmd) {
unsigned tmp;
case 0:
ioarg = ((readl(S3C64XX_GPKDAT) >> 4) & 0XF);
ret = __put_user(ioarg,(int *)arg);
break;
case 1:
tmp = readl(S3C64XX_GPKDAT);
tmp &= ~(1 << (4 + (arg/10)));
tmp |= ( (!(arg%10)) << (4 + (arg/10)) );
writel(tmp, S3C64XX_GPKDAT);
//printk (DEVICE_NAME": %d %d\n", arg, cmd);
return 0;
default:
return -EINVAL;
}
}
應用測試程序關鍵代碼如下
if(argc == 1)
{
ioctl(fd,0,&arg);
printf("led dat: %d\n",arg);
}
else
{
arg=atoi(argv[1]);
ioctl(fd,1,arg);
}
效果圖:
把開發板上第二個燈點亮,,讀取值為13:即1101.。成功。。