Tiny6410-LED驱动


想写一个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.。成功。。

相关内容