在i2c驱动程序

时间:2016-12-17 11:11:05

标签: linux-kernel raspberry-pi linux-device-driver embedded-linux archlinux

我正在尝试学习在覆盆子pi板上写一个i2c驱动程序,我已经采用了凹槽LCD背光。这里没有调用driver.probe,而驱动程序插入系统中,我可以在dmesg中看到。

调用驱动程序的初始化代码,代码=>

static int lcd_probe(struct i2c_client *i2c_client, const struct i2c_device_id *i2c_id)
{
    int ret  = 0;
    //struct        lcd_data *lcd_data;
    // struct device *dev = &i2c_client->dev;
    // lcd_data->client = i2c_client;

    pr_debug("lcd_probe : calling the probe\n");
    pr_debug("lcd_probe : i2c_client->addr = %d, i2c_client_name = %s\n",
            i2c_client->addr, i2c_client->name);

    return ret;
}

static struct i2c_device_id lcd_id[] = {
    {"lcd", 0},
    {}
};
MODULE_DEVICE_TABLE(i2c, lcd_id);

static struct i2c_driver lcd_driver = {
    .driver = {
            .name = "lcd",
            .owner = THIS_MODULE,
    },
    .probe = lcd_probe,
    // .remove = lcd_remove,
    // .attach_adapter = lcd_attach,
    .detect = lcd_detect,
    .id_table = lcd_id,
};
static int __init lcd_init(void)
{
    pr_debug("lcd_init : calling init\n");
    return (i2c_add_driver(&lcd_driver));
}

和dmesg =>

[    1.971009] lcd_init : calling init

但是driver.probe没有在i2c子系统中注册。 电路板文件初始化=>

Board init code =>

/** start aartyaa lcd i2c driver */
printk(KERN_INFO "board file registering i2c lcd device\n");
i2c_register_board_info_dt(1, lcd_i2c_devices, ARRAY_SIZE(lcd_i2c_devices));

i2c_board_info code =>

/** aaryaa i2c lcd struct */
static struct i2c_board_info __initdata lcd_i2c_devices[] = {
    {
            .type = "lcd",
            .addr = 0x62,
    },
};

我在i2c_register_device中添加了调试 我发现司机证明设备没有被调用。 dmesg我已经联系了 dmesg link

似乎我还需要在平台上注册..

如何在i2c中调用探针...? 任何帮助将不胜感激。 谢谢...!!!

0 个答案:

没有答案