最近在研究led驱动,顺便记录一下,下面将从两个方面来介绍Led的驱动。
一、Led驱动加载过程
mediatek/kernel/drivers/leds/leds_drv.c
module_init(mt65xx_leds_init);
mt65xx_leds_init()函数的具体实现:
static int __init mt65xx_leds_init(void)
{
int ret;
LEDS_DRV_DEBUG("[LED]%s\n", __func__);
#if 0
ret = platform_device_register(&mt65xx_leds_device);
if (ret)
printk("[LED]mt65xx_leds_init:dev:E%d\n", ret);
#endif
ret = platform_driver_register(&mt65xx_leds_driver);
if (ret)
{
LEDS_DRV_DEBUG("[LED]mt65xx_leds_init:drv:E%d\n", ret);
return ret;
}
mt_leds_wake_lock_init();
return ret;
}
上述函数实现调用了platform_driver_register(&mt65xx_leds_driver),对mtk的led平台设备驱动进行注册,平台设备驱动的定义如下所示:
static struct platform_driver mt65xx_leds_driver = {
.driver = {
.name = "leds-mt65xx",
.owner = THIS_MODULE,
},
.probe = mt65xx_leds_probe,
.remove = mt65xx_leds_remove,
//.suspend = mt65xx_leds_suspend,
.shutdown = mt65xx_leds_shutdown,
};
其中,probe被赋值mt65xx_leds_probe,并在发现设备的时候启动,具体看一下其实现: