Rockchip-linux驱动 --- IIC

news/2024/12/2 16:33:42/

文章目录

  • 一、IIC子系统编程
    • (一)分配并初始化对象
    • (二)IIC驱动框架
    • (三)IIC的regmap函数
      • 1. 初始化IIC的寄存器映射
      • 2. 写入寄存器
      • 3.读取寄存器
    • (二)打印调试信息

IIC_1">一、IIC子系统编程

(一)分配并初始化对象

struct i2c_driver {//入口函数int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);//出口函数void (*remove)(struct i2c_client *client);//关闭设备执行的函数void (*shutdown)(struct i2c_client *client);struct device_driver driver;
};

IIC_14">(二)IIC驱动框架

//入口函数
int myiic_probe(struct i2c_client *client, const struct i2c_device_id *id){return 0;
}//出口函数
void myiic_remove(struct i2c_client *client){}static struct i2c_driver myiic_driver = {.probe = myiic_probe,.remove = myiic_remove,.shutdown = myiic_shutdown,.driver = {.name = "myiic",.of_match_table = myiic_dt_ids,},
};module_i2c_driver(myiic_driver);
MODULE_LICENSE("GPL v2");

IICregmap_37">(三)IIC的regmap函数

IIC_38">1. 初始化IIC的寄存器映射

#define devm_regmap_init_i2c(i2c, config) __regmap_lockdep_wrapper(__devm_regmap_init_i2c, #config, i2c, config)
功能:初始化一个专用于IIC设备的寄存器映射
参数:@i2c:指向 struct i2c_client 的指针,表示要与之交互的 I2C 设备@config:指向remap_config结构体
返回值:成功,返回一个指向regmap的指针失败,返回一个错误码指针
备注:可以直接使用regmap的API,而无需直接操作IIC接口
寄存器映射配置信息结构体
struct regmap_config {int reg_bits;int val_bits;const struct regmap_access_table *volatile_table;enum regcache_type cache_type;...
}结构体成员 --- volatile_table
指定哪些寄存器是易变的结构体成员 --- cache_typeenum regcache_type {REGCACHE_NONE,REGCACHE_RBTREE,REGCACHE_COMPRESSED,REGCACHE_FLAT,};

2. 写入寄存器

int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
功能:将指定的值写入到硬件设备的寄存器
参数:@map:remap实例的指针@reg:要写入的寄存器的地址@val:要写入的寄存器的值
返回值:成功,返回0失败,返回错误码
备注:需要先初始化regmap实例

3.读取寄存器

int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
功能:读取指定寄存器的值
参数:@map:指向regmap实例的指针@reg:要读的寄存器地址@val:指向变量的指针,存储从寄存器读取的值
返回值:成功,返回0失败,返回错误码

(二)打印调试信息

dev_emerg(dev, fmt, ...) 
dev_crit(dev, fmt, ...)
dev_alert(dev, fmt, ...)
dev_err(dev, fmt, ...) 
dev_warn(dev, fmt, ...)
dev_notice(dev, fmt, ...) 
dev_info(dev, fmt, ...) 
功能:打印日志信息,日志级别从上到下优先级递减
参数:@dev:指向 struct device 的指针,用于指定日志消息关联的设备。@fmt:格式化字符串,遵循 printf 风格的格式。@...:可变参数列表,用于 fmt 字符串中的格式化。

http://www.ppmy.cn/news/1551796.html

相关文章

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模,采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声(无回波)特性,仿胎儿超声影像呈对比明显…

Oracle12.2 RAC集群管理修改IP地址(DNS解析)

Oracle12.2 RAC集群管理之修改IP地址 该章节实验是基于此章节基础上操作: Oracle LinuxR7安装Oracle 12.2 RAC集群实施(DNS解析)-CSDN博客 环境 改前IP: 172.30.21.101 hefei1 hefei1.hefeidb.com 172.30.21.102 hefei2 …

微距动物和植物摄影后期森系风格Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 微距动物和植物摄影后期采用森系风格的 Lightroom 调色,将微距下的动植物世界打造成充满自然气息和梦幻感的画面。这种调色风格旨在突出动植物的细腻之美,同时营造出宁静、清新的森林氛围。 预设信息 调色风格:森系风格预设适合类…

蓝牙定位的MATLAB程序,四个锚点、三维空间

这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…

【大数据学习 | Spark调优篇】Spark之内存调优

1. 内存的花费 1)每个Java对象,都有一个对象头,会占用16个字节,主要是包括了一些对象的元信息,比如指向它的类的指针。如果一个对象本身很小,比如就包括了一个int类型的field,那么它的对象头实…

【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成

问题描述 在Azure Redis的导出页面,突然不能配置Storage Account的SAS作为授权方式。 image.png 那么是否可以通过AZ CLI或者是Powershell来实现SAS的配置呢? 问题解答 可以的。使用 az redis export 可以实现 az redis export --container --prefix[--a…

YOLOv8-ultralytics-8.2.103部分代码阅读笔记-files.py

files.py ultralytics\utils\files.py 目录 files.py 1.所需的库和模块 2.class WorkingDirectory(contextlib.ContextDecorator): 3.def spaces_in_path(path): 4.def increment_path(path, exist_okFalse, sep"", mkdirFalse): 5.def file_age(path__fi…

工业网络安全 智能电网,SCADA和其他工业控制系统等关键基础设施的网络安全(总结)

1、工业网络的安全势必是未来安全方向必须要做的一个重要的方面 工业网络的概念:简单的说就是控制控制系统的网络,其可以进行基于网络的数字通信。 关键的基础设施:包括直接操作任何系统的设施 了解工业网络的安全势必要了解工业网络使用的通…