从Tiny4412--mma7660 gsensor驱动探索Linux内核I2C总线驱动框架
2023-09-27 14:28:47 时间
源码位于: driver/hwmon/mma7660.c
参考博客:http://www.cnblogs.com/pengdonglin137/p/5240416.html
参考博客:http://www.cnblogs.com/pengdonglin137/p/5240416.html
参考mma7660的芯片数据手册:https://wenku.baidu.com/view/3ef59c28ed630b1c59eeb521.html
那么驱动分析完了,设备板级配置文件配置在哪里呢?
代码位置:/arch/arm/mach-exynos/mach-tiny4412.c
在大约2856行的地方,可以看到:
这里通过CONFIG_SENSORS_MMA7660来识别是否有在内核中配置这个sensor,这个配置在源码根目录下的tiny4412_android_defconfig中:
可以搜索到:CONFIG_SENSORS_MMA7660=y
//判断是否有配置CONFIG_SENSORS_MMA7660 #ifdef CONFIG_SENSORS_MMA7660 //如果配置了,就包含7660驱动相关的头文件,并配置板级信息 #include linux/mma7660.h static struct mma7660_platform_data mma7660_pdata = { .irq = IRQ_EINT(25), //设置外部中断号 .poll_interval = 100, .input_fuzz = 4, .input_flat = 4, #endif static struct s3c2410_platform_i2c tiny4412_i2c3_data __initdata = { .flags = 0, .bus_num = 3, .slave_addr = 0x10, .frequency = 200*1000, .sda_delay = 100, static struct i2c_board_info i2c_devs3[] __initdata = { #ifdef CONFIG_SENSORS_MMA7660 //这就是所谓的i2c_client的信息,在驱动中可以获取 I2C_BOARD_INFO("mma7660", 0x4c), //I2C板级注册信息 .platform_data = mma7660_pdata, //将信息存储在platform_data中: #endif };以下为I2C_BOARD_INFO的原型:
/** * I2C_BOARD_INFO - macro used to list an i2c device and its address * @dev_type: identifies the device type * @dev_addr: the devices address on the bus. * This macro initializes essential fields of a struct i2c_board_info, * declaring what has been provided on a particular board. Optional * fields (such as associated irq, or device-specific platform_data) * are provided using conventional syntax. #define I2C_BOARD_INFO(dev_type, dev_addr) \ .type = dev_type, .addr = (dev_addr)
static void __init smdk4x12_machine_init(void) 大约4147行可以看到,在初始化硬件信息的时候向i2c注册了板级信息: s3c_i2c3_set_platdata( tiny4412_i2c3_data); i2c_register_board_info(3, i2c_devs3, ARRAY_SIZE(i2c_devs3));
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
相关文章
- Linux LCD 驱动实验
- STM32MP157 Linux系统移植开发篇10:Linux内核网卡驱动移植
- STM32MP157 Linux系统移植开发篇9:Linux内核eMMC驱动移植
- 永远不要在Linux执行的10个最危险的命令
- 如何备份及恢复 Linux 文件权限
- 谈谈为 Linux 内核写驱动的编码规范
- Linux驱动开发环境配置
- linux内核中i2c驱动中slave模式接口的调用
- 如何在linux中测试i2c slave模式驱动的功能?
- 如何查看linux内核中驱动的初始化顺序?
- 4.9版本的linux内核中实时时钟芯片pcf85263的驱动源码在哪里
- arm linux利用alsa驱动并使用usb音频设备
- Linux 内核USB 驱动
- linux设备驱动文件结构
- 对于linux操作系统的认识和了解
- 【嵌入式Linux驱动开发】二十、一文快速上手 Linux INPUT 子系统,按键驱动的第三种姿势
- 【嵌入式Linux驱动开发】十七、深入学习异步通知,了解按键驱动的另一种方式
- 【嵌入式Linux驱动开发】三、点亮LED,初探驱动与硬件交互
- 【正点原子MP157连载】第三十章 Linux 内核定时器实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 【正点原子Linux连载】第十三章BSP工程管理实验--摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0