Я пытаюсь научиться писать драйвер i2c на плате Raspberry Pi, и у меня есть подсветка ЖК-дисплея. Здесь 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. инициализация файла платы =>
Код инициализации платы =>
/** 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 =>
/** aaryaa i2c lcd struct */
static struct i2c_board_info __initdata lcd_i2c_devices[] = {
{
.type = "lcd",
.addr = 0x62,
},
};
Я добавил отладки в i2c_register_device и обнаружил, что устройство, подтверждающее драйвер, не вызывается. dmesg я привязал ссылку dmesg
Кажется, мне также нужно зарегистрироваться на платформе ..
Как вызывается зонд в i2c...? Любая помощь будет оценена. Спасибо...!!!