Android drivers/switch驱动详解(用于通过GPIO状态检测耳机、HDMI等的插拔状态)
2016-01-15 11:27
671 查看
一、相关文件:
/drivers/switch/switch_gpio.c
/drivers/switch/switch_class.c
二、节点创建流程:
1、在/sys/class/目录下创建“switch”类,创建完成后出现/sys/class/switch,具体实现如下:
struct class *switch_class;
switch_class = class_create(THIS_MODULE, "switch");
2、在/sys/class/switch目录下创建某个具体设备(比如“h2w”),创建完成后出现/sys/class/switch/h2w,具体实现如下:
struct switch_dev *sdev;
sdev->dev =
device_create(switch_class, NULL,
MKDEV(0, sdev->index), NULL, sdev->name); // 其中sdev->name赋值为“h2w”
3、在/sys/class/switch/h2w目录下创建设备的属性文件(比如“name”和“state”),创建完成后出现/sys/class/switch/h2w/name和/sys/class/switch/h2w/state,具体实现如下:
static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL); // state_show实现对state属性文件读操作
static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, name_show, NULL);//name_show实现对name属性文件读操作
int ret;
ret = device_create_file(sdev->dev, &dev_attr_name);
ret = device_create_file(sdev->dev, &dev_attr_state);
三、节点创建关键函数:
1、class_create
该函数用于创建一个class;
2、device_create
/**
* device_create - 创建一个设备并将它注册到sysfs文件系统里
* @class: 指向class_create函数创建的class
* @parent: pointer to the parent struct device of this new device, if any
* @devt: the dev_t for the char device to be added
* @drvdata: the data to be added to the device for callbacks
* @fmt: 设备名称
*/
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...);
3、device_create_file
/**
* device_create_file - 创建设备的属性文件
* @dev: 指定具体为哪个设备创建属性文件
* @attr: 该设备对应的属性描述
*/
int device_create_file(struct device *dev,
const struct device_attribute *attr);
/drivers/switch/switch_gpio.c
/drivers/switch/switch_class.c
二、节点创建流程:
1、在/sys/class/目录下创建“switch”类,创建完成后出现/sys/class/switch,具体实现如下:
struct class *switch_class;
switch_class = class_create(THIS_MODULE, "switch");
2、在/sys/class/switch目录下创建某个具体设备(比如“h2w”),创建完成后出现/sys/class/switch/h2w,具体实现如下:
struct switch_dev *sdev;
sdev->dev =
device_create(switch_class, NULL,
MKDEV(0, sdev->index), NULL, sdev->name); // 其中sdev->name赋值为“h2w”
3、在/sys/class/switch/h2w目录下创建设备的属性文件(比如“name”和“state”),创建完成后出现/sys/class/switch/h2w/name和/sys/class/switch/h2w/state,具体实现如下:
static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL); // state_show实现对state属性文件读操作
static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, name_show, NULL);//name_show实现对name属性文件读操作
int ret;
ret = device_create_file(sdev->dev, &dev_attr_name);
ret = device_create_file(sdev->dev, &dev_attr_state);
三、节点创建关键函数:
1、class_create
该函数用于创建一个class;
2、device_create
/**
* device_create - 创建一个设备并将它注册到sysfs文件系统里
* @class: 指向class_create函数创建的class
* @parent: pointer to the parent struct device of this new device, if any
* @devt: the dev_t for the char device to be added
* @drvdata: the data to be added to the device for callbacks
* @fmt: 设备名称
*/
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...);
3、device_create_file
/**
* device_create_file - 创建设备的属性文件
* @dev: 指定具体为哪个设备创建属性文件
* @attr: 该设备对应的属性描述
*/
int device_create_file(struct device *dev,
const struct device_attribute *attr);
相关文章推荐
- PHP8新特性之match表达式
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件