Another Way To Register I2C devices

Linux I2C设备驱动编写(二) 在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter、i2c_driver、i2c_client。三者的关系也在上一节进行了描述。应该已经算是对Linux I2C子系统有了初步的了解。下面再对他们之间的关系进行代码层的深入分析,我认为对他们的关系了解的越好,越有助于I2C设备的驱动开发及调试。 带着问题去分析可能会更有帮助吧,通过对(一)的了解后,可能会产生以下的 阅读详情

In embedded Linux, the “classic” mean of registering a device is to add the device’s info into board within arch/ folder. There is another approach to do this, without interfering the arch/ directory but just within the driver/ module.


I needed to add 4 PCA9539 chips to my project, which is based on TCC8900 Linux BSP.
The driver is located at drivers/i2c/chips/tcc_pca953x.c, but i failed to find out the device-register code within arch/arm/mach-tcc8900/, what the hell?

Accidentally, I found below code in driver:

static unsigned short probe_i2c[] = {0, PCA9539_U2_SLAVE_ADDR, I2C_CLIENT_END}; /* { i2c_num, i2c_addr } */

static unsigned short dummy[] = {I2C_CLIENT_END};

static struct i2c_client_address_data addr_data = {
    .normal_i2c = dummy,
    .probe = probe_i2c,
    .ignore = dummy,
};

Turns out the list probe_i2C is used to register devices. The syntax is:
{ adapter/client pairs, I2C_CLIENT_END};
in which, an adaptor/client pair is:
{ adapter No., client’s address}

for example, I can attach 4 PCA9539 clients (which addresses are 0x74 - 0x77) to i2c core 0 like below:

{ 0, 0x74, 0, 0x75, 0, 0x76, 0, 0x77, I2C_CLENT_END }; 

Another example is the RX8025, which driver is drivers/rtc/rtc_rx8025.c

#define RX8025_SLAVE_ADDR   0x32
static unsigned short probe_i2c[] = {1, RX8025_SLAVE_ADDR, I2C_CLIENT_END}; /* { i2c_num, i2c_addr } */
static unsigned short dummy[] = {I2C_CLIENT_END};

static struct i2c_client_address_data addr_data = {
    .normal_i2c = dummy,
    .probe = probe_i2c,
    .ignore = dummy,
};

The driver itself registers a RX8025 device, which is attached to i2c core 1.

Linux I2C(一)之常用的几种实例化(i2c_client ) 前言:因为工作是音频驱动,所以经常涉及到I2C、I2S等常用的总线,想将I2C相关的东西总结一下,让自己更加了解I2C。方式一:使用arch/arm/mach-s3c24xx/mach-mini2440.c举例:static struct i2c_board_info mini2440_i2c_devs[] __initdata = { { /* 遇到与”24c08一样的名称”的驱动就会与之 阅读详情

相关推荐

i2c设备注册(动态注册和静态注册)以及i2c驱动注册过程

一、i2c设备驱动注册 i2c设备驱动注册的调用流程为:xxx_init(设备驱动里所定义)—–>i2c_add_driver—–>i2c_register_driver 下面直接看源码,xxx_init(设备驱动里所定义)源码如下: static int egalax_i2c_ts_init(void) { int result; result = misc_...

wwbbxx的博客 5947

Failed to register i2c client错误之解决

Failed to register i2c client错误     最近最韦东山的I2C实验,用的是3.4.2内核 # insmod at24cxx_dev.ko出错提示 i2c i2c-0: Failed to register i2c clientat24c08 at 0x50 (-16)   打log跟踪,是i2c_new_device函数中i2c_check_addr_b

guocaigao的专栏 1万+

【信息科学与工程学】计算机科学与自动化——第一百八十九篇 计算机硬件 系列一 微处理器01

在金融行业CDN流推送场景中,结合WebRTC over SD-RTN与SD-WAN Branch方案,需兼顾​​要求。

weixin_49199313的博客 1056

Linux设备驱动剖析之IIC(二)

回到i2cdev_attach_adapter函数,544行,创建设备节点,主设备号为I2C_MAJOR,次设备号为适配器的编号,设备节点的名字为i2c-x,x的值就是适配器的编号。如果适配器的编号为0,那么就会在/dev下创建一个名为i2c-0的文件,即/dev/i2c-0,但在某些嵌入式Linux平台上没有看到这个文件,而是/dev/i2c/0这种形式,原因在于在启动文件里调用了mdev –s这条命令,导致/dev/i2c-0变成了/dev/i2c/0,不信?之所以会造成那样是因为字符‘-’引起的。

m0_74282605的博客 326

MG-SOFT.MIB.Browser.v10 & KEY

大名鼎鼎的MG-SOFT MIB BROWSER, KEY可用,安装的时候记得选择key文件的目录。

Ubuntu22.04安装ROS2 —— ROS2 humble 详细图文教程

本文详细介绍了如何在Ubuntu22.04(Jammy)系统下配置ROS2环境,安装RO2软件包,并验证安装成功。ROS2的版本是Humble Hawksbill。:ROS是一个开源的,提供硬件抽象、设备驱动、库、工具和通信机制,支持模块化开发与集成,广泛用于机器人控制和自动化应用。ROS2 相较于 ROS1 在架构设计、通信机制和平台支持等方面做出了改进。ROS1 采用集中式主节点(Master)进行节点间通信,存在单点故障风险,且实时性和跨平台支持较弱。

weixin_49649078的博客 8808

i2c注册流程

linux下i2c驱动笔记 https://www.cnblogs.com/shmily-linux/archive/2013/10/07/3356306.html 1.几个基本概念 1.1.设备模型 由总线(bus_type)+设备(device)+驱动(device_driver)组成,在该模型下,所有的设备通过总线连接起来,即使有些设备没有连接到一根物理总线上,linux为其设置了一个内部的、虚拟的platform总线,用以维持总线、驱动、设备的关系。 因此,对于实现一个...

u014426028的博客 1218

ROS四旋翼无人机快速上手指南(4):阿木实验室PX4功能包飞行控制分析与讲解(重点章节)

成就更好的自己 这一章详细讲解一下阿木实验室(AMOV)的开源项目px4_command功能包,此功能包通过mavlink协议直接控制烧录px4固件的自驾仪,还融合了来自各个传感器的位姿,距离等信息,此外,功能包提供的接口向上对接应用层算法级的程序例如SLAM,kfc目标检测引导,路径规划等算法,因此,在整个无人机控制中起到了承上启下至关重要的作用。 用到的文件及工具包链接如下: AMOV实验室源码如下: https://gitee.com/theroadofengineers/px4_comman

The Road of Engineer 6171

i2c设备驱动1

i2c设备驱动,在i2c子系统中的实现分为三部分,最上层是i2c驱动,中间层是i2c核心层,底层是i2c的总线,如果细分,底层i2c的总线还可以分离出i2c的适配器,所以也可以将i2c设备驱动的子系统分为四个部分,i2c驱动,i2c核心层,i2c的总线,i2c适配器。  I2C 核心提供了I2C 总线驱动和设备驱动的注册、注销方法,I2C 通信方法;I2C 总线驱动主要包含了I2C 适配器数据结

王牧天的博客 1159

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

C#实现每日定时执行制定程序(附完整源码)

C#实现每日定时执行制定程序(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 865

Debugging Embedded Linux

Section #6. Debugging Embedded Linux From a device driver perspective, embedded software developers often face interfaces not commonly found on conventional computers. Figure 1.3 shows a hypothetical...

mounter625的专栏 1161

如何绘制电气绝缘图(GB9706.1-2007和GB9706.1-2020差异)

是用来描述要考虑设备的绝缘状况和它们的值 ,从而便于和相关部门交流和沟通,如权威机构和检测实验室等。本文为绝缘图的实例, 包括所有相关的绝缘路径以及介电强度,爬电距离和电气间隙的值。

学海无涯的专栏 1万+

Xilinx FPGA PCIe | XDMA IP 核 / 应用 / 测试 / 实践

……

u013669912的博客 7926

RK3588 buildroot 制作的系统增加 docker 支持

RK3588 使用buildroot制作的系统添加 docker 和 docker-compose 的功能

荻夜的博客 1567

Diffusion Models扩散模型与深度学习(数学原理和代码解读)

​ 此前GANs霸占各大顶会很多年,DDPM的出现让人耳目一新!经过这两年的发展,Diffusion Models能在图像生成、超分辨率重建、点云生成、语音生成等领域达到SOTA。这篇文章旨在帮助没有了解过的读者入门,《Diffusion Models与深度学习专栏》已经写了将近三十篇文章,既有原理公式和必备基础知识的讲解,也有代码详细实战解读,还有前沿热门应用,欢迎读者订阅。

沉迷单车的追风少年 4万+

Linux设备驱动模型与 sysfs实现分析以及设计模式应用

这个问题和上一节模块依赖有关,简单点说,建立模块依赖引用计数机制需要在驱动结构体中记录一个struct module指针指向THIS_MODULE,而如果将驱动注册接口定义为纯函数,将无法把环境中的THIS_MODULE带入LINUX驱动核心层赋值给对应字段(不能使用参数的形式传入核心层,因为驱动开发者无需关心THIS_MODULE).距几个例子:而对于那些没有定义成宏的核心驱动注册接口,比如isa_register_driver,用户手填THIS_MODULE是标准做法。

tugouxp的专栏 2103

PyTorch深度学习实战(29)——变分自编码器(Variational Autoencoder, VAE)

变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。

盼小辉丶的博客 1万+

Linux内核学习4--Pinctrl子系统

本文系统介绍了Linux内核中Pinctrl子系统的原理与使用方法。文章首先阐述了Pinctrl的硬件基础,即通过引脚复用矩阵动态配置管脚连接不同控制器(UART/I2C/SPI等)的原理。随后详细讲解了四种配置方法:设备树配置(开机生效)、驱动代码修改(运行时动态切换)、寄存器直接写入(调试用)以及内核调试接口使用。重点介绍了设备树节点定义和驱动代码中pinctrl_get()、pinctrl_lookup_state()等API的调用流程,并提供了完整的代码示例。最后给出了日常调试Pinctrl问题的排

fanged的专栏 664

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux I2C 驱动之----i2c_client 的注册

分类: 驱动 linux2012-04-1923:24 535人阅读 评论(0) 收藏 举报       我们知道,linux的设备模型将设备分成了driver,device两大部分,driver即是设备的驱动,device即是硬件设备的具体描述,比如说:设备所拥有的中断,地址等,这里分析一下I2C驱动中device,也即i2c_client的注册。       (注:这里所说明的是linux

zclongembedded的专栏 2254

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何debug通信协议 I2C 子系统

I2C 常见有两种错误:I2C ACK error、I2C timeout一、I2C ACK error在应该收到 ACK 信号的时候没有收到 ACK 信号,i2c controller 就会产生一个 ACK error 的中断,告诉 i2c driver 发生了 ACK error。通常情况是 slave 本身的问题。1、检查 device 是否存在,i2c bus number 和 device address 是否正确。示例如下:i2c number 为 6,addr 为 0x28: [31.0929

Free雅轩的博客 2644

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

linux处理i2c从设备,Linux I2C驱动分析(二)----I2C板级设备扫描和数据传输

一、板级设备扫描针对上一篇博客最后的i2c_scan_static_board_info(adap)函数处,首先先看下在系统启动的时候板级设备的注册。针对我现在使用的开发板,对于I2C设备注册程序如下:点击(此处)折叠或打开static struct i2c_board_info i2c_devices_info[] = {#ifdef CONFIG_SND_SOC_ALC5623{I2C_BO...

weixin_36011546的博客 651

嵌入式Linux系统之I.MX6触摸屏驱动程序TSC2007.C的分析、移植与校准

今天来记录一下I.MX6开发板移植触摸屏驱动程序的过程分析。在移植驱动程序之前,为了学习,先去分析一下触摸屏驱动程序的框架。加qq1126137994 一起学习更多技术。 1、tsc2007.c触摸屏驱动程序的分析 I.MX6的触摸屏驱动程序的文件名为:TSC2007.C。 在tsc2007.c文件中初始化tsc2007_init函数注册tsc2007_driver结构体,当tsc200...

厚积薄发 5845

linux i2c子系统代码分析5 ---操作函数i2c_new_device i2c_new_probed_device i2c_register_board_info介绍

下面介绍i2c设备操作相关函数 1、 kernel/driver/linux/i2c/i2c-core.c struct i2c_client * i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)      i2c适配器静态增加新i2c设备,根据 i2c_board_info 静态设备声明

xiaoaide01的专栏 6114

Linux下I2C接口触摸屏驱动分析

linux下触摸屏驱动的移植主要包括这几个步骤:     (1)确定触摸屏IC接口,了解对应接口的API函数,注册设备并加入到相应总线上     (2)关联设备与驱动,并编写具体的驱动代码     (3)熟悉linux 输入设备驱动,在驱动代码中分配一个输入设备并初始化相应数据结构,在驱动实现中引用     这里对应上面几部分,分析I2C接口下触摸屏驱动的实现。先介绍lin

霹雳游侠 7863

ko驱动模块rmmod 后insmod 异常问题解决

insmod xxx.ko ldo6: Failed to create debugfs directory -->set voltage ret 0 min_uV=3300000, max_uV=3300000 -->***set xxx cvbs voltage to 3.0v xxx_init() nr 2 i2c i2c-2: Failed to register i2c cl

lqxandroid2012的专栏 3517
上一篇: Things Need To Be Done in 2016
下一篇: TTY 和 X窗口系统:在Unix上的进化史
TechMax
博客等级 码龄16年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值