===================================================
8321:
kernel-4.9-lc\drivers\misc\mediatek\power\mt6580\pmic.c
void PMIC_EINT_SETTING(void)
{
pmic_register_interrupt_callback(5, pwrkey_int_handler);
pmic_register_interrupt_callback(10, chrdet_int_handler);
pmic_register_interrupt_callback(17, homekey_int_handler);
#ifdef CONFIG_MTK_ACCDET
pmic_register_interrupt_callback(18, accdet_int_handler);
#endif
#ifdef CONFIG_MTK_RTC
pmic_register_interrupt_callback(20, rtc_int_handler);
#endif
/* Enable pwrkey/homekey interrupt */
pmic_enable_interrupt(5, 1, "PMIC");
pmic_enable_interrupt(10, 1, "PMIC");
pmic_enable_interrupt(17, 1, "PMIC");
#ifdef CONFIG_MTK_ACCDET
pmic_enable_interrupt(18, 1, "PMIC");
#endif
pmic_enable_interrupt(20, 1, "PMIC");
...
}
void chrdet_int_handler(void)
{
...
#ifdef CONFIG_MTK_SMART_BATTERY
do_chrdet_int_task();
#endif
}
===================================================
8167:
\kernel-4.14\arch\arm\boot\dts\mt8167.dtsi
bat_comm: bat_comm {
compatible = "mediatek,battery";
};
\kernel-4.14\arch\arm\boot\dts\tb8167p3_bsp.dts
&bat_comm {
interrupt-parent = <&pmic>;
interrupts = <10 IRQ_TYPE_LEVEL_HIGH>;
};
#ifdef CONFIG_OF
static const struct of_device_id mt_battery_of_match[] = {
{
.compatible = "mediatek,battery",
},
{},
};
MODULE_DEVICE_TABLE(of, mt_battery_of_match);
#endif
static struct platform_driver battery_dts_driver = {
.probe = battery_dts_probe,
.remove = NULL,
.shutdown = NULL,
.driver = {
.name = "battery-dts",
#ifdef CONFIG_OF
.of_match_table = mt_battery_of_match,
#endif
},
};
\kernel-4.14\drivers\power\supply\mediatek\battery_common.c
#ifdef CONFIG_OF
ret = platform_driver_register(&battery_dts_driver);
#endif
#ifdef CONFIG_OF
static int battery_dts_probe(struct platform_device *dev)
{
int ret = 0;
battery_log(BAT_LOG_CRTI, "******** %s!! ********\n", __func__);
chrdet_irq = platform_get_irq(dev, 0);
if (chrdet_irq <= 0)
pr_notice("******** don't support irq from dts ********\n");
else {
ret = request_threaded_irq(chrdet_irq, NULL,
ops_chrdet_int_handler,
IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
"ops_pmic_chrdet", dev);
if (ret) {
pr_notice("%s: request_threaded_irq err = %d\n",
__func__, ret);
return ret;
}
irq_set_irq_wake(chrdet_irq, 1);
}
...
}
irqreturn_t ops_chrdet_int_handler(int irq, void *dev_id)
{
battery_log(BAT_LOG_FULL,
"[Power/Battery][chrdet_bat_int_handler]....\n");
do_chrdet_int_task();
return IRQ_HANDLED;
}