主题 : 关于mini6410_leds驱动ioctl语法问题,不能理解 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 50470
精华: 0
发帖: 29
金钱: 150 两
威望: 30 点
综合积分: 58 分
注册时间: 2011-06-22
最后登录: 2017-09-13
楼主  发表于: 2012-04-04 13:39

 关于mini6410_leds驱动ioctl语法问题,不能理解

图片:
源文件在光盘A的Linux-2.6.38/drivers/char下的mini6410_leds,貌似那个switch语句没有break,不管cmd是什么都执行到底吧,到底出于什么考虑这样写呢?
级别: 新手上路
UID: 50470
精华: 0
发帖: 29
金钱: 150 两
威望: 30 点
综合积分: 58 分
注册时间: 2011-06-22
最后登录: 2017-09-13
1楼  发表于: 2012-04-04 19:07
cmd=0或=1都会执行case1,这是为什么呢?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2012-04-05 13:38
引用第2楼632695319于2012-04-04 19:07发表的  :
cmd=0或=1都会执行case1,这是为什么呢?

原因在于下面的
复制代码
  1. tmp &= ~(1 << (4 + arg));
  2. tmp |= ((!cmd) << (4 + arg));
  3. writel(tmp, S3C64XX_GPKDAT);

当cmd = 0时,相应的GPIO会输出高电平,cmd = 1时,输出低电平。
另外,不要用截图的方式贴code。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
菜鸟在路上
级别: 圣骑士
UID: 42749
精华: 6
发帖: 241
金钱: 1530 两
威望: 306 点
综合积分: 602 分
注册时间: 2011-04-11
最后登录: 2016-07-19
3楼  发表于: 2012-04-05 13:58
这个这个,慢慢理解