Тестовая проблема при записи драйвера устройства I2C

Я - новичок в записи драйвера устройства Linux, прощаю мне если что-либо глупое спрошенный и мой плохой English^^
Я пытаюсь записать драйвер для сенсорной панели, которые общаются с ЦП через I2C.
Я пытался добавить драйвер устройства в платформу Linux, и регистр был успехом, я подразумеваю, что драйвер был загружен, но тестовая функция не сделала разожженный!!

Выше частичный код драйвера, который я записал.

static int i2c_ts_probe(struct i2c_client *client, const struct i2c_device_id * id) {  
    /* ... */  
}

static int i2c_ts_remove(struct i2c_client *client) {  
    /* ... */  
}

static const struct i2c_device_id i2c_ts_id[] = {  
    {"Capacitive TS", 0},  
    { }  
};  
MODULE_DEVICE_TABLE(i2c, i2c_ts_id);  

static struct i2c_driver i2c_ts = {  
    .id_table = i2c_ts_id,  
    .probe = i2c_ts_probe,  
    .remove = i1c_ts_remobe,  
    .driver = {  
        .name = "i2c_ts",  
    },  
};

static int __init i2c_ts_init(void) {  
    return i2c_add_driver(&i2c_ts);  
}

static int __init i2c_ts_exit(void) {  
    return i2c_del_driver(&i2c_ts);  
}  

module_init(i2c_ts_init);
module_exit(i2c_ts_exit);

Выше частичный код в платформе (/kernel/arch/arm/mach-pxa/saarb.c) используемой для регистрации i2c устройства.

static struct i2c_board_info i2c_board_info_ts[] = {
    {  
        .type = i2c_ts,  
        .irq = IRQ_GPIO(mfp_to_gpio(MFP_PIN_GPIO0)),  
    },  
};

static void __init saarb_init(void) {  
    ...  
    i2c_register_board_info(0, ARRAY_AND_SIZE(i2c_board_info_ts));  
    ...  
}

любое предложение и комментарий будут приветствоваться, thanks^^

6
задан ChengYing 10 June 2010 в 13:12
поделиться

1 ответ

Чтобы модель устройства / драйвера Linux могла исследовать ваш драйвер, должно быть устройство, запрашивающее его: это достигается путем сравнения имени драйвера («i2c_ts») и типа устройство в структуре i2c_board_info. В вашем случае я предполагаю, что тип не равен «i2c_ts».

Поэтому я бы посоветовал вам использовать макрос I2C_BOARD_INFO для создания экземпляра вашего устройства, как описано в Documentation / i2c / instantiating_devices.

static struct i2c_board_info i2c_board_info_ts[] = {
    {  
         I2C_BOARD_INFO("i2c_ts", 0x12),  
         .irq = IRQ_GPIO(mfp_to_gpio(MFP_PIN_GPIO0)),  
    },
};

static void __init saarb_init(void) {  
    ...  
    i2c_register_board_info(0, ARRAY_AND_SIZE(i2c_board_info_ts));  
    ... 
}

Вы также не указали адрес своему устройству, и он нужен I2C_BOARD_INFO. Прочтите техническое описание вашего сенсорного экрана, чтобы узнать, что это за адрес.

Наконец, как было предложено выше, убедитесь, что i2c_ts_id правильный. Я не уверен, что это играет роль в механизме ассоциации устройства / модуля в ядре, но я бы сказал, что это гораздо менее запутанно, поскольку все они имеют одно и то же имя.

7
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: