首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在i2c上添加x86_64客户端设备

在i2c上添加x86_64客户端设备
EN

Stack Overflow用户
提问于 2017-09-07 12:02:26
回答 1查看 3.8K关注 0票数 1

在我的x86_64板上,有来自MFD设备的i2C总线。这条i2C总线上有一些装置。我能够用i2cdetect程序检测到这些设备。

代码语言:javascript
复制
# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- 4c -- -- -- 
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

我需要内核来自动检测这些设备,所以,我尝试按照下面的代码编写i2c_board_info,但是内核仍然无法自动检测这些设备。

代码语言:javascript
复制
#include <linux/init.h>
#include <linux/i2c.h>

#define BUS_NUMBER      0

static struct __init i2c_board_info tst_i2c0_board_info[]  = {                   
    {
        I2C_BOARD_INFO("ltc2990", 0x4c),
    },
    {
        I2C_BOARD_INFO("24c128", 0x57),
    },
};

static int tst_i2c_board_setup(void)
{
    int ret=-1;
    ret = i2c_register_board_info(BUS_NUMBER, tst_i2c0_board_info, ARRAY_SIZE(tst_i2c0_board_info));
    return ret;
}
device_initcall(tst_i2c_board_setup);

对我如何解决这个问题有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-09-10 07:11:17

在浏览了文档/i2c/实例化-设备之后,我了解到有几种方法可以这样做(例如,建议使用acpi表等),我使用了"i2c_new_probed_device“方法。下面是使用的代码:

代码语言:javascript
复制
#include <linux/init.h>
#include <linux/i2c.h>

#define BUS_NUMBER      0
#define NUM_DEVICE      2

static const unsigned short normal_i2c[][2] = {
    {0x4c, I2C_CLIENT_END},
    {0x57, I2C_CLIENT_END},
};

static struct i2c_board_info tst_i2c0_board_info[2] = {
        {I2C_BOARD_INFO("ltc2990", 0x4c), },
        {I2C_BOARD_INFO("24c128", 0x57), },
};

static int tst_i2c_board_setup(void)
{
    int i = 0;
    struct i2c_adapter *i2c_adap;

    i2c_adap = i2c_get_adapter(BUS_NUMBER);
    for(i = 0; i < NUM_DEVICE; i++)
        i2c_new_probed_device(i2c_adap, &tst_i2c0_board_info[i],
                           normal_i2c[i], NULL);
    i2c_put_adapter(i2c_adap);

    return 0;
}
late_initcall(tst_i2c_board_setup);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46095840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档