android switch (linux3.0.0)

1 路径:

   drivers/switch/switch_class.c

   drivers/switch/switch_gpio.c

   include/linux/switch.h


2 代码分析:

113 int switch_dev_register(struct switch_dev *sdev)
114 {
115         int ret;
116 
117         if (!switch_class) {
118                 ret = create_switch_class();
119                 if (ret < 0)
120                         return ret;
121         }
122 
123         sdev->index = atomic_inc_return(&device_count);
124         sdev->dev = device_create(switch_class, NULL,
125                 MKDEV(0, sdev->index), NULL, sdev->name);
126         if (IS_ERR(sdev->dev))
127                 return PTR_ERR(sdev->dev);
128 
129         ret = device_create_file(sdev->dev, &dev_attr_state);
130         if (ret < 0)
131                 goto err_create_file_1;
132         ret = device_create_file(sdev->dev, &dev_attr_name);
133         if (ret < 0)
134                 goto err_create_file_2;
135 
136         dev_set_drvdata(sdev->dev, sdev);
137         sdev->state = 0;
138         return 0;
139 
140 err_create_file_2:
141         device_remove_file(sdev->dev, &dev_attr_state);
142 err_create_file_1:
143         device_destroy(switch_class, MKDEV(0, sdev->index));
144         printk(KERN_ERR "switch: Failed to register driver %s\n", sdev->name);
145 
146         return ret;
147 }

 

具体流程如下:

首先,判断是否已经创建switch_class,如果没有,则创建switch_class,
其次,取得要创建的设备的索引,然后通过device_create创建设备;
最后,通过device_create_file函数在sysfs中分别创建两个entry,如果创建失败,则分别删除已经创建的文件或switch_class,
一个用于输出设备状态,另一个用于输出设备名称name.


其中:dev_attr_state的定义如下:

          57 static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL);
          58 static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, name_show, NULL);


432 #define DEVICE_ATTR(_name, _mode, _show, _store) \
433 struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)


3  察看设备的名字和状态:

    cat /sys/class/switch/hdmi/name

    cat /sys/class/switch/hdmi/state



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值