首页 > 其他分享 >31 IIC(九)iic adapter

31 IIC(九)iic adapter

时间:2023-06-24 15:46:41浏览次数:50  
标签:xfer struct int adapter iic smbus i2c 31

代码

1 iic adapter驱动架构

i2c adapter设备是挂载于platform bus

整体重点架构如下

  • 分配

    struct i2c_adapter *adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
    
  • 设置

    adapter->owner = THIS_MODULE;
    adapter->algo = &i2c_algo;
    
  • 注册

    ret = i2c_add_adapter(adapter);           // 动态分配nr
    ret = i2c_add_numbered_adapter(adapter);  // nr = -1则动态分配nr,否则则指定nr
    
  • 卸载

    i2c_del_adapter(adapter);
    

2 常用数据结构解析

2.1 i2c_adapter

struct i2c_adapter {
        struct module *owner;
        unsigned int class;               /* classes to allow probing for */
        const struct i2c_algorithm *algo; /* the algorithm to access the bus */
        void *algo_data;

        /* data fields that are valid for all devices   */
        const struct i2c_lock_operations *lock_ops;
        struct rt_mutex bus_lock;
        struct rt_mutex mux_lock;

        int timeout;                    /* in jiffies */
        int retries;
        struct device dev;              /* the adapter device */
        unsigned long locked_flags;     /* owned by the I2C core */
#define I2C_ALF_IS_SUSPENDED            0
#define I2C_ALF_SUSPEND_REPORTED        1

        int nr;
        char name[48];
        struct completion dev_released;

        struct mutex userspace_clients_lock;
        struct list_head userspace_clients;

        struct i2c_bus_recovery_info *bus_recovery_info;
        const struct i2c_adapter_quirks *quirks;

        struct irq_domain *host_notify_domain;
};

2.2 i2c_algorithm

struct i2c_algorithm {
        /*
         * If an adapter algorithm can't do I2C-level access, set master_xfer
         * to NULL. If an adapter algorithm can do SMBus access, set
         * smbus_xfer. If set to NULL, the SMBus protocol is simulated
         * using common I2C messages.
         *
         * master_xfer should return the number of messages successfully
         * processed, or a negative value on error
         */
        int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
                           int num);
        int (*master_xfer_atomic)(struct i2c_adapter *adap,
                                   struct i2c_msg *msgs, int num);
        int (*smbus_xfer)(struct i2c_adapter *adap, u16 addr,
                          unsigned short flags, char read_write,
                          u8 command, int size, union i2c_smbus_data *data);
        int (*smbus_xfer_atomic)(struct i2c_adapter *adap, u16 addr,
                                 unsigned short flags, char read_write,
                                 u8 command, int size, union i2c_smbus_data *data);

        /* To determine what the adapter supports */
        u32 (*functionality)(struct i2c_adapter *adap);

#if IS_ENABLED(CONFIG_I2C_SLAVE)
        int (*reg_slave)(struct i2c_client *client);
        int (*unreg_slave)(struct i2c_client *client);
#endif
};
  • master_xfer

    i2c传输

  • mas_terxfer_atomic

    原子传输

  • smbus_xfer

    smbus传输,如果没有提供此函数。则回使用master_xfer来进行模拟

  • smbus_xfer_atomic

    smbus的原子传输

  • functionality

    返回此algo支持的功能

  • reg_slave/unreg_slave

    reg_slave将一个i2c client注册到i2c adapter。即让i2c adapter模拟i2c client

    unreg_slave卸载i2c adapter模拟的i2c client

3. 示例

标签:xfer,struct,int,adapter,iic,smbus,i2c,31
From: https://www.cnblogs.com/burnk/p/17501174.html

相关文章

  • COMP9319 2023T2
    13:26COMP93192023T2Assignment11/7COMP93192023T2Assignment1:LZWEncodingandDecodingYourtaskinthisassignmentistoimplementanLZWencoderanditsdecoderwith15-bit32768dictionaryentries(excludingthoseentriesfortheindividualASCIIc......
  • SPSS Modeler用K-means(K-均值)聚类、CHAID、CART决策树分析31省市土地利用情况和GDP数
    全文链接:http://tecdat.cn/?p=32840原文出处:拓端数据部落公众号随着经济的快速发展和城市化进程的不断推进,土地资源的利用和管理成为了一项极为重要的任务。而对于全国各省市而言,如何合理利用土地资源,通过科学的方法进行规划和管理,是提高土地利用效率的关键。本文旨在应用SPSS......
  • 20230314 3.1. 树
    树的定义树(Tree):n(n≥0)个结点构成的有限集合。当n=0时,称为空树;对于任一棵非空树(n>0),它具备以下性质:树中有一个称为“根(Root)”的特殊结点,用r表示;其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每个集合本身又是一棵树,称为原来树的“子树(SubTree)”子树是不相交的;......
  • 20230314 3.2. 二叉树
    二叉树的定义二叉树T:一个有穷的结点集合。这个集合可以为空若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。二叉树具体五种基本形态:空二叉树;只有根结点的二叉树;只有根结点和左子树TL的二叉树;只有根结点和右子树TR的二叉树;具有根结点、左......
  • 【热门博客文章31】元宇宙与增强现实虚拟现实娱乐:打造全新娱乐方式
    目录引言随着信息技术的不断发展,虚拟现实(VR)和增强现实(AR)技术逐渐成为人们越来越关注的话题。这些技术不仅可以为用户提供全新的娱乐体验,也可以用于游戏、教育、医疗等多个领域。本文将介绍元宇宙与增强现实虚拟现实娱乐的技术原理和实现步骤,并分析其在未来的发展趋势和挑战。......
  • React - 31 redux和react-redux的归纳梳理
    如果使用redux1.把reducer/状态按照模块进行划分和管理;把所有模块的reducer合并为一个即可!!2.每一次任务派发,都会把所有模块的reducer,依次去执行,派发时候传递的行为对象(行为标识)是统一的!!所以我们要保证各个模块之间,派发的行为标识的唯一性!!>派发行为标识的统一管理!!3.需......
  • ImageAdapter和PopupWindow的使用
    publicclassSamplePopupextendsActivity{ PopupWindowpopup; //GridViewgView; GridViewgView;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);......
  • 最完美WIN11_Pro_22H2.22631.1900软件选装纯净版VIP50.3
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_PRO_22H2.22631.1900。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.1900。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • Java面试题集(131-135)
    131、请对以下JavaEE中的名词进行解释答:容器:容器为JavaEE应用程序组件提供了运行时支持。容器提供了一份从底层JavaEEAPI到应用程序组件的联合视图。JavaEE应用程序组件不能直接地与其它JavaEE应用程序组件交互。它们通过容器的协议和方法来达成它们之间以及它们与平台服......
  • 20230313 java.util.LinkedList
    简介java.util.LinkedListLinkedList相对ArrayList要复杂一些,不是因为链表操作比数组操作复杂,而是LinkedList实现了更多接口LinkedList除了实现List接口外,还实现了Queue和Deque接口,也就意味着可以作为队列或双向队列使用对链表的学习非常有帮助感悟对于接口的认......