高通Pmic闪光灯代码架构
msm-kernel
注册一个名为"leds-qti-flash"的驱动,驱动代码在"leds-qti-flash.c"文件中。
对下:实现对pmic芯片更新寄存器,也就是实际控制闪光灯的操作。
对上:提供led_classdev结构体,即flash/switch结点的统一控制接口
leds_list为全局变量,作为链表头串起所有的led_cdev节点
camera-kernel
trigger_list为全局变量,作为链表头串起所有trigger节点,与leds_list互相遍历配对。作为对接msm-kernel的节点。
实现cam_flash_ctrl作为控制中心,对上挂靠在v4l2-subdev上接入V4L2子系统,对下通过trigger实现对闪光灯的控制。
g_dev为全局变量,标记着CRM设备。CRM作为主设备(v4l2-dev)连接着所有如flash、af、sensor等子设备(v4l2-subdev)
hal
先open CRM设备,通过 ioctl MEDIA_IOC_ENUM_ENTITIES获取所有子设备的实体,再通过open 各个实体中记录的设备名获取所有子设备的句柄并记录在CSLInternalKMDDevices[]数组中,后续操作各个device时获取对应的句柄做ioctl操作