1 #include "rk_ext_fshled_ctl.h"
2 #include "../camsys_gpio.h"
3 #include "flashlight.h"
4 #include "leds-rt8547.h"
6 typedef struct ext_fsh_info_s{
7 struct platform_device pdev;
12 struct ext_fsh_dev_list_s{
13 struct list_head dev_list;
16 static struct ext_fsh_dev_list_s g_ext_fsh_devs;
18 int camsys_init_ext_fsh_module()
20 camsys_trace(1,"init external flash module");
21 INIT_LIST_HEAD(&g_ext_fsh_devs.dev_list);
25 int camsys_deinit_ext_fsh_module()
27 ext_fsh_info_t* cur_fsh_info = NULL;
28 camsys_trace(1,"deinit external flash module");
29 if (!list_empty(&g_ext_fsh_devs.dev_list)) {
30 list_for_each_entry(cur_fsh_info, &g_ext_fsh_devs.dev_list, list) {
32 platform_device_unregister(&cur_fsh_info->pdev);
33 list_del_init(&cur_fsh_info->list);
34 /* free after unregister device ?*/
35 kfree(cur_fsh_info->pdev.dev.platform_data);
42 INIT_LIST_HEAD(&g_ext_fsh_devs.dev_list);
45 void* camsys_register_ext_fsh_dev(camsys_flash_info_t *fsh_info)
47 ext_fsh_info_t* new_dev = NULL;
48 if(strcmp(fsh_info->fl_drv_name,"rt8547") == 0){
49 struct rt8547_platform_data* new_rt_dev = NULL;
50 new_dev = kzalloc(sizeof(ext_fsh_info_t),GFP_KERNEL);
52 camsys_err("register new ext flash dev erro !");
56 new_rt_dev = kzalloc(sizeof(ext_fsh_info_t),GFP_KERNEL);
58 camsys_err("register new ext flash dev erro !");
62 new_dev->pdev.id = -1;
63 new_dev->pdev.name = fsh_info->fl_drv_name;
64 new_dev->pdev.dev.platform_data = (void*)new_rt_dev;
65 new_dev->dev_model = "rt-flash-led";
67 new_rt_dev->flen_gpio = camsys_gpio_get(fsh_info->fl_en.name);
68 new_rt_dev->flen_active = fsh_info->fl_en.active;
69 camsys_trace(1,"flen name :%s,gpio %d,active %d \n",fsh_info->fl_en.name,new_rt_dev->flen_gpio,new_rt_dev->flen_active);
70 new_rt_dev->flset_gpio = camsys_gpio_get(fsh_info->fl.name );
71 new_rt_dev->flset_active = fsh_info->fl.active;
72 camsys_trace(1,"flset name :%s, gpio %d, active %d \n",fsh_info->fl.name,new_rt_dev->flset_gpio,new_rt_dev->flset_active);
73 new_rt_dev->ctl_gpio = -1;
74 new_rt_dev->def_lvp = RT8547_LVP_3V;
75 new_rt_dev->def_tol = RT8547_TOL_100mA;
77 // new_rt_dev->def_lvp = RT8547_LVP_MAX;
78 // new_rt_dev->def_tol = RT8547_TOL_MAX;
80 if(platform_device_register(&new_dev->pdev) < 0){
81 camsys_err("register rtfled fail\n");
86 list_add_tail(&new_dev->list, &g_ext_fsh_devs.dev_list);
87 camsys_trace(1,"register new rt led dev success !");
90 return (void*)new_dev;
98 int camsys_deregister_ext_fsh_dev(void* dev)
100 ext_fsh_info_t* cur_fsh_info = NULL;
101 if (!list_empty(&g_ext_fsh_devs.dev_list)) {
102 list_for_each_entry(cur_fsh_info, &g_ext_fsh_devs.dev_list, list) {
103 if (dev == cur_fsh_info) {
104 camsys_trace(1,"unregister ext flsh dev !");
105 platform_device_unregister(&cur_fsh_info->pdev);
106 list_del_init(&cur_fsh_info->list);
107 /* free after unregister device ?*/
108 kfree(cur_fsh_info->pdev.dev.platform_data);
116 /*******************************
118 0: CAM_ENGINE_FLASH_OFF = 0x00,
119 1: CAM_ENGINE_FLASH_AUTO = 0x01,
120 2: CAM_ENGINE_FLASH_ON = 0x02,
121 3: CAM_ENGINE_FLASH_RED_EYE = 0x03,
122 5: CAM_ENGINE_FLASH_TORCH = 0x05
123 ********************************/
124 int camsys_ext_fsh_ctrl(void* dev,int mode,unsigned int on)
126 ext_fsh_info_t* cur_fsh_info = NULL;
127 struct flashlight_device *fled_dev = NULL;
128 if (!list_empty(&g_ext_fsh_devs.dev_list)) {
129 list_for_each_entry(cur_fsh_info, &g_ext_fsh_devs.dev_list, list) {
130 if (dev == cur_fsh_info) {
135 if(cur_fsh_info == NULL){
136 camsys_err("this flash dev have not been registered !");
140 fled_dev = find_flashlight_by_name(cur_fsh_info->dev_model);
141 if(fled_dev == NULL){
142 camsys_err("--find_flashlight_by_name return NULL!--");
147 /* set flashlight mode to Off */
148 flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_OFF);
150 case 2: /* flash on */
151 /* set strobe timeout to 256ms */
152 //flashlight_set_strobe_timeout(fled_dev, 256, 256);
153 flashlight_set_strobe_timeout(fled_dev, 512, 512);
154 /* set strobe brightness to to index 18 (1A), refer to the datasheet for the others */
155 flashlight_set_strobe_brightness(fled_dev, 18);
156 /* set flashlight mode to Strobe */
157 flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_FLASH);
158 flashlight_strobe(fled_dev);
161 /* set the torch brightness index 2 (75mA), refer to the datasheet for index current value. */
162 flashlight_set_torch_brightness(fled_dev, 2);
163 /* set flashlight mode to Torch */
164 flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_TORCH);
167 camsys_err("not support this mode %d !",mode);