probe is not getting called in i2c driver

1.4k views Asked by At

I am trying to learn to write a i2c driver on raspberry pi board and i have taken groove LCD back-light.Here driver.probe is not getting called whereas driver's inserted in system as i can see in dmesg.

Init code of driver is getting called, and code =>

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));
}

and dmesg =>

[    1.971009] lcd_init : calling init

But driver.probe is not registering in i2c subsystem. board file initialization =>

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,
    },
};

i added debugs in i2c_register_device and i found driver prove device is not getting called. dmesg i have linked dmesg link

It seems that i need to register in platform also ..

How probe gets called in i2c ... ? Any help will be appreciated. Thank you...!!!

0

There are 0 answers