MT6735平臺GPIO中斷除錯記錄
dws檔案配置:kernel-3.10/tools/dct/drvgen.exe
bootable/bootloader/lk/target/mt6735_66t_a19/dct/dct/codegen.dws
bootable/bootloader/preloader/custom/mt6735_66t_a19/dct/dct/codegen.dws
kernel-3.10/drivers/misc/mediatek/mach/mt6735/mt6735_66t_a19/dct/dct/codegen.dws
vendor/mediatek/proprietary/custom/mt6735_66t_a19/kernel/dct/dct/codegen.dws
MTK中斷IC驅動:kernel-3.10/drivers/irqchip/irq-mt-eic.c
函式:mt_eint_irq_set_type 即設定中斷到暫存器。
struct irq_chip mt_irq_eint = {
.name = "mt-eint",
.irq_mask = mt_eint_irq_mask,
.irq_unmask = mt_eint_irq_unmask,
.irq_ack = mt_eint_irq_ack,
.irq_set_type = mt_eint_irq_set_type,
};
linux 驅動設定介面:kernel-3.10/kernel/irq/manage.c
主要流程:request_irq --> request_threaded_irq --> __irq_set_trigger
MTK平臺似乎不支援同時上升沿及下降沿觸發。
switch_data->irq = gpio_to_irq(switch_data->gpio);
if (switch_data->irq < 0) {
ret = switch_data->irq;
goto err_detect_irq_num_failed;
}
flags = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | 0;
irq_set_irq_type(switch_data->irq, IRQ_TYPE_EDGE_BOTH);
DBLOG("request_irq: irq=%d, flag=%lu\n", switch_data->irq, flags);
ret = request_irq(switch_data->irq, gpio_irq_handler, flags, pdata->name, switch_data);
if (ret < 0) {
DBLOG("%s: request_irq fail ret=%d\n", __func__, ret);
goto err_request_irq;
}
enable_irq_wake(switch_data->irq);
/* Perform initial detection */
// gpio_switch_work(&switch_data->work);
移除驅動時注意input devices 裝置 input_unregister_device後再/input_free_device會有問題。
static int dbatt_switch_remove(struct platform_device *pdev) {
struct gpio_switch_data *switch_data = platform_get_drvdata(pdev);
DBLOG("%s: entry\n", __func__);
disable_irq_wake(switch_data->irq);
free_irq(switch_data->irq, switch_data);
gpio_free(switch_data->gpio);
gpio_free(DBATT_MBATID_DET_PIN);
gpio_free(DBATT_SWITCH_EN_PIN);
input_unregister_device(switch_data->input_dev);
//input_free_device(switch_data->input_dev);
kfree(switch_data);
#ifdef DBATT_HALL_STATUS_NOTIFY
device_remove_file(&pdev->dev, &hall_dev_attr);
#endif
return 0;
}
相關文章
- baremetal GPIO中斷REM
- 3.外設GPIO、中斷
- GDB除錯使用記錄除錯
- GitHub學習除錯記錄Github除錯
- VS斷點除錯簡單筆記斷點除錯筆記
- 軟體除錯斷點之小記除錯斷點
- Supervisor 安裝除錯記錄除錯
- Python 學習除錯記錄Python除錯
- AS斷點除錯斷點除錯
- 除錯模式file.exits判斷目錄異常除錯模式
- FCoE測試重啟除錯記錄除錯
- 跨平臺web除錯代理工具---whistleWeb除錯
- Java平臺除錯架構簡介 (轉)Java除錯架構
- webstorm 斷點除錯WebORM斷點除錯
- 微信開放平臺高效開發除錯方法除錯
- 在 Python 除錯過程中設定不中斷的斷點Python除錯斷點
- Pycharm的斷點除錯PyCharm斷點除錯
- js斷點除錯心得JS斷點除錯
- 除錯——條件斷點除錯斷點
- Django實現教育平臺全程記錄-----後臺管理Django
- [譯] 使用Docker安裝Sentry(一個錯誤記錄和聚合平臺)Docker
- mt6735/mt8735平臺與電池相關資料解析
- [翻譯] 除錯 Rxjs(二):日誌記錄除錯JS
- 記錄一次非常麻煩的除錯除錯
- 除錯記錄:The public type must be defined in its own file除錯
- BCM4330 BlueTooth 除錯記錄除錯
- 找回Oracle中Delete刪除的記錄Oracledelete
- VS code中斷點除錯Vue CLI 3專案斷點除錯Vue
- Chrome 中的 JavaScript 斷點設定和除錯技巧ChromeJavaScript斷點除錯
- Apache Hop新執行資訊記錄平臺Apache
- 【前端除錯】- 斷點除錯的正確開啟方式前端除錯斷點
- VS - 打斷點/本地除錯/遠端除錯 問題斷點除錯
- Vscode斷點除錯VSCode斷點除錯
- 一個安卓手機遠端真機除錯平臺安卓除錯
- MT6763平臺Camera_AF除錯資料除錯
- godebug:一個跨平臺的Go程式除錯工具Go除錯
- Oracle如何刪除表中重複記錄Oracle
- 如何刪除oracle庫中相同的記錄Oracle