当前位置: 首页 > news >正文

hid-ft260驱动学习笔记 5 - ft260_i2c_probe

目录

1. 保存ft260_device到私有数据

2. 初始化I2C设备分配属性

3. 添加I2C适配器

4. 初始化GPIO

5. ft260_i2c_algo

5.1 ft260_functionality

5.2 ft260_i2c_xfer

5.3 ft260_smbus_xfer

6. ft260_i2c_quirks


这个函数是i2c的接口probe函数。

1. 保存ft260_device到私有数据

将ft260_device类型的指针保存到hdev设备指针的私有数据。

hid_set_drvdata(hdev, dev);
dev->hdev = hdev;

这一步的意义是在hid的接口函数中能够获取到FT260的设备信息。 

然后把hdev设备指针也保存到FT260的设备结构体中。

2. 初始化I2C设备分配属性

dev->adap.owner = THIS_MODULE;
dev->adap.class = I2C_CLASS_HWMON;
dev->adap.algo = &ft260_i2c_algo;
dev->adap.quirks = &ft260_i2c_quirks;
dev->adap.dev.parent = &hdev->dev;
snprintf(dev->adap.name, sizeof(dev->adap.name),"FT260 usb-i2c bridge");

将设备的所有者设置为当前模块,设备类别设置为硬件监控类,算法设置为ft260_i2c_algo,特性设置为ft260_i2c_quirks,父设备设置为hdev->dev,设备名称设置为"FT260 usb-i2c bridge"。

在初始化I2C设备前,先确认一下FT260的I2C状态是否为忙,如果处于忙的状态则复位一下i2c

ret = ft260_xfer_status(dev, FT260_I2C_STATUS_BUS_BUSY);
if (ret)ft260_i2c_reset(hdev);

3. 添加I2C适配器

i2c_set_adapdata(&dev->adap, dev);
ret = i2c_add_adapter(&dev->adap);
if (ret) {hid_err(hdev, "failed to add i2c adapter\n");return ret;
}

首先,通过i2c_set_adapdata函数将设备结构体dev的I2C适配器指针设置为&dev->adap。 然后,通过i2c_add_adapter函数将该适配器添加到I2C总线上。 如果添加适配器失败,函数会返回错误码,并通过hid_err函数输出错误信息。

4. 初始化GPIO

和uart probe里面probe是一样的。

5. ft260_i2c_algo

这部分是i2c读写的实现部分。

static const struct i2c_algorithm ft260_i2c_algo = {.master_xfer = ft260_i2c_xfer,.smbus_xfer = ft260_smbus_xfer,.functionality = ft260_functionality,
};

5.1 ft260_functionality

用于查询FT260芯片的功能。

static u32 ft260_functionality(struct i2c_adapter *adap)
{return I2C_FUNC_I2C | I2C_FUNC_SMBUS_BYTE |I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_I2C_BLOCK;
}

该函数用于设置i2c_adapter的功能。返回一个u32类型的值,该值表示支持的I2C功能的位掩码。具体支持的功能有:I2C传输、SMBus字节传输、SMBus字节数据传输、SMBus字数据传输、SMBus块数据传输和SMBus I2C块传输。

5.2 ft260_i2c_xfer

用于实现主模式下的I2C传输。

函数首先获取FT260设备指针,然后通过互斥锁锁定设备。接下来,函数将设备的电源模式设置为FULLON。如果设置失败,则函数释放互斥锁并返回错误码。如果只有一个消息需要传输,函数根据消息的读写标志调用相应的读或写函数进行数据传输。如果有多条消息,则调用写读函数进行组合传输。无论传输成功与否,函数都会将设备的电源模式恢复为NORMAL,并释放互斥锁,最后返回传输的消息数量。

5.3 ft260_smbus_xfer

用于实现SMBus模式下的I2C传输。

该函数接收I2C适配器、地址、标志、读写模式、命令、大小和数据作为参数。在函数内部,它首先获取适配器的数据结构指针,然后锁定设备的互斥锁。接下来,它为设备设置全开电源管理状态。然后根据传输的大小和读写模式,执行相应的I2C读写操作。如果传输大小不受支持,则返回错误。最后,它恢复设备的电源管理状态,解锁互斥锁,并返回执行结果。

6. ft260_i2c_quirks

用于描述I2C适配器的特殊行为。结构体中的flags成员设置了组合写然后读的操作标志,max_comb_1st_msg_len成员指定了在组合消息中第一个消息的最大长度。

相关文章:

hid-ft260驱动学习笔记 5 - ft260_i2c_probe

目录 1. 保存ft260_device到私有数据 2. 初始化I2C设备分配属性 3. 添加I2C适配器 4. 初始化GPIO 5. ft260_i2c_algo 5.1 ft260_functionality 5.2 ft260_i2c_xfer 5.3 ft260_smbus_xfer 6. ft260_i2c_quirks 这个函数是i2c的接口probe函数。 1. 保存ft260_device到私…...

Android上如何使用perfetto分析systrace

Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具,提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具,提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…...

React Hooks学习笔记

一、usestate的使用方法-初始化state函数 import React, { useState } from "react"; function App() {const [count, setCount] useState(0);return (<div><p>点击{count}次</p><button onClick{() > setCount(count 1)}>点击</bu…...

BGP第二日

上图为今日所用拓扑 &#xff0c;其中R1和R4&#xff0c;R3和R5为EBGP邻居&#xff0c;R1和R3为IBGP邻居&#xff0c;AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态&#xff1a;建立邻居最初的状态 2.Connect 连接状态&#xff1a;在…...

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述&#xff1a; 因业务需要使用的rabbitmq是3.7.8版本的&#xff0c;rabbitmq在3.3.0之后就允许使用guest账号的权限了&#xff0c;所以需要创建一个administrator标签的用户。 如下操作创建的用户&#xff1a; 创建完成之后就提示如下的报错&#xff1a; 注&#xff1a…...

ARM功耗管理之多核处理器启动

安全之安全(security)博客目录导读 思考&#xff1a;SecureBoot&#xff1f;多核处理器启动流程&#xff1f;PSCI启动方式&#xff1f; 一般嵌入式系统使用的都是对称多处理器&#xff08;Symmetric Multi-Processor, SMP&#xff09;系统&#xff0c;包含了多个cpu, 这几个cp…...

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…...

Android 内部保持数据的方式

Android内部保持数据的方式主要有五种&#xff0c;每种方式都有其特定的用途和优点。以下是详细的介绍&#xff1a; SQLite数据库 定义&#xff1a;SQLite是一个轻量级的、跨平台的数据库&#xff0c;所有的信息都存储在单一文件内&#xff0c;占用内存小&#xff0c;并且支持…...

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…...

beyond Compare连接 openWrt 和 VsCode

连接步骤总结 1. 新建会话 -> 文件夹比较 2.点击浏览文件夹 3.在弹出页面 配置 ftp 3.1&#xff09;选中ftp 配置文件 3.2)选中ssh2 3.3)填写我们需要远端连接的主机信息 先点击连接并浏览 得到下方文件夹 弹出无效登录&#xff0c;说明需要密码 我们返回右键刚刚创建的新 …...

量化机器人能否识别市场机会?

量化机器人的设计和应用是为了通过高级算法和大数据分析&#xff0c;精确地识别和把握市场中的交易机会。这些机器人的能力不仅仅局限于执行预定的交易策略&#xff0c;更包括在复杂和快速变化的市场环境中识别利润机会。 首先&#xff0c;量化机器人能够处理和分析大量的市场…...

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别

OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板&#xff0c;自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力&#xff0c;堪称目前开发板市场中的顶尖性能&#xff0c;实在令人垂涎三尺。如此强大的板子&#xff0c;当然要亲自体验一番。今天非常荣幸地拿到…...

MongoDB教程(二):mongoDB引用shell

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…...

A133 Android10 root修改

1.前言 客户应用需求root相关的权限&#xff0c;我们需要修改系统的权限才可以满足客户需求 2.修改方法 frameworks层&#xff1a;注释掉 diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_…...

实验场:在几分钟内使用 Bedrock Anthropic Models 和 Elasticsearch 进行 RAG 实验

作者&#xff1a;来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground&#xff0c;这是一个新的低代码界面&#xff0c;开发人员可以通过 A/B 测试 LLM、调整提示&#xff08;prompt&#xff09;和分块数据来迭代和构建生产 RAG 应用程序。今天…...

代理详解之静态代理、动态代理、SpringAOP实现

1、代理介绍 代理是指一个对象A通过持有另一个对象B&#xff0c;可以具有B同样的行为的模式。为了对外开放协议&#xff0c;B往往实现了一个接口&#xff0c;A也会去实现接口。但是B是“真正”实现类&#xff0c;A则比较“虚”&#xff0c;他借用了B的方法去实现接口的方法。A…...

Laravel - laravel-websockets 开发详解

1.我laravel-websockets 的开发环境 Laravel 9.0Laravel WebSockets &#xff08;最新版&#xff09;Laravel Vite 2. 安装服务器端包 beyondcode/laravel-websockets 运行以下命令安装laravel-websockets composer require beyondcode/laravel-websockets 安装完后&#…...

vue3 学习笔记04 -- axios的使用及封装

vue3 学习笔记04 – axios的使用及封装 安装 Axios 和 TypeScript 类型定义 npm install axios npm install -D types/axios创建一个 Axios 实例并封装成一个可复用的模块&#xff0c;这样可以在整个应用中轻松地进行 API 请求管理。 在 src 目录下创建一个 services 文件夹&…...

键盘快捷键设置录入

效果图&#xff1a; 代码&#xff1a; import React, {useContext, useEffect, useRef} from react import {message} from "antd"; import lodash from "lodash"; import {StateContext} from ../../index.tsx import {useUpdateEffect} from "ahoo…...

刷题Day49|647. 回文子串、516.最长回文子序列

647. 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;递推公式的含义是[i, j]内的子串是否为回文子串&#xff08;bolean[][])。一共两种情况&#xff1a;s[i] s[j]&#xff0c;i和j相差1以外就得判断中间包含的的字符串是否为回文了&…...

高纯水系统如何保障锂电池生产良率?

在锂电池制造过程中&#xff0c;生产用水纯度直接关联产品性能与安全。随着新能源汽车与储能产业快速发展&#xff0c;行业对电池一致性与稳定性的要求持续提升&#xff0c;超纯水已成为核心制程环节的关键辅材。一、锂电池生产用水标准 锂电池生产涉及正负材料制备、浆料调配、…...

本科论文知网AI率高的原因和解决方法全在这里

知网AIGC检测出来AI率高&#xff0c;很多同学第一反应是"我没有全程用AI写啊&#xff0c;为什么这么高&#xff1f;"这个问题确实需要好好解释一下——知网检测到的AI率高&#xff0c;未必是因为你完全靠AI写的。 知网AIGC检测是怎么工作的 知网的AIGC检测系统会分…...

2025届最火的五大降AI率平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一款基于自然语言处理技术的智能工具&#xff0c;是AI写作软件&#xff0c;它能够辅助用户自…...

新手入门网络安全:用快马AI生成你的第一个密码强度检测器

最近在自学网络安全基础知识&#xff0c;发现密码强度检测是个很好的入门实践。作为新手&#xff0c;我尝试用InsCode(快马)平台的AI辅助功能&#xff0c;快速生成了一个密码强度检测器&#xff0c;整个过程特别适合零基础学习者。这里记录下实现思路和关键要点&#xff1a; 密…...

基于Qwen3.5-2B的MySQL智能运维助手:自动SQL优化与故障排查

基于Qwen3.5-2B的MySQL智能运维助手&#xff1a;自动SQL优化与故障排查 1. 引言&#xff1a;当数据库运维遇上AI助手 最近跟几位DBA朋友聊天&#xff0c;发现他们每天要花大量时间处理两类重复性工作&#xff1a;分析慢SQL和排查数据库故障。一位在电商公司工作的朋友吐槽&am…...

3分钟焕新网易云音乐:BetterNCM Installer插件框架一键部署方案

3分钟焕新网易云音乐&#xff1a;BetterNCM Installer插件框架一键部署方案 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM Installer是一款专为网易云音乐PC版设计的开源插…...

南麟 SA9120 单通道 H 桥直流有刷电机驱动专用芯片 SOP8封装

产品描述南麟 SA9120 是上海南麟电子推出的单通道 H 桥直流有刷电机驱动专用芯片&#xff0c;采用成熟高压工艺设计&#xff0c;集成度高、外围电路简单&#xff0c;可直接驱动中小功率直流电机、步进电机绕组及电磁阀等感性负载&#xff0c;具备优异的抗干扰与带载能力&#x…...

MogFace-large效果对比:在遮挡/小脸/密集场景下超越YOLOv8与RetinaFace实测

MogFace-large效果对比&#xff1a;在遮挡/小脸/密集场景下超越YOLOv8与RetinaFace实测 1. 引言&#xff1a;人脸检测的现实挑战 在实际应用中&#xff0c;人脸检测面临着三大难题&#xff1a;遮挡、小脸和密集场景。当人脸被口罩、眼镜或其他人遮挡时&#xff0c;传统检测器…...

企微私域工具数据安全与合规:5个必查项

某公司用了半年企微私域工具&#xff0c;突然发现客户手机号被工具厂商用来发营销短信。法务一查&#xff0c;原来是协议里写了“数据可用于优化产品”。选【企微私域工具】&#xff0c;数据安全比功能更重要。今天列出5个必须检查的安全合规点。企微工具选择要把安全放第一位&…...

Pixel Couplet Gen实战案例:基于Retro Game UI的微信小程序春联H5页

Pixel Couplet Gen实战案例&#xff1a;基于Retro Game UI的微信小程序春联H5页 1. 项目背景与设计理念 1.1 传统与数字的碰撞 春节作为中国最重要的传统节日&#xff0c;春联文化已有千年历史。然而在数字时代&#xff0c;传统春联形式面临着与年轻群体脱节的问题。Pixel C…...