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);
46 static void camsys_ext_fsh_release(struct device *dev)
50 void* camsys_register_ext_fsh_dev(camsys_flash_info_t *fsh_info)
52 ext_fsh_info_t* new_dev = NULL;
53 if(strcmp(fsh_info->fl_drv_name,"rt8547") == 0){
54 struct rt8547_platform_data* new_rt_dev = NULL;
55 new_dev = kzalloc(sizeof(ext_fsh_info_t),GFP_KERNEL);
57 camsys_err("register new ext flash dev erro !");
61 new_rt_dev = kzalloc(sizeof(*new_rt_dev), GFP_KERNEL);
63 camsys_err("register new ext flash dev erro !");
67 new_dev->pdev.id = -1;
68 new_dev->pdev.name = fsh_info->fl_drv_name;
69 new_dev->pdev.dev.release = camsys_ext_fsh_release;
70 new_dev->pdev.dev.platform_data = (void*)new_rt_dev;
71 new_dev->dev_model = "rt-flash-led";
73 new_rt_dev->flen_gpio = camsys_gpio_get(fsh_info->fl_en.name);
74 new_rt_dev->flen_active = fsh_info->fl_en.active;
75 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);
76 new_rt_dev->flset_gpio = camsys_gpio_get(fsh_info->fl.name );
77 new_rt_dev->flset_active = fsh_info->fl.active;
78 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);
79 new_rt_dev->ctl_gpio = -1;
80 new_rt_dev->def_lvp = RT8547_LVP_3V;
81 new_rt_dev->def_tol = RT8547_TOL_100mA;
83 // new_rt_dev->def_lvp = RT8547_LVP_MAX;
84 // new_rt_dev->def_tol = RT8547_TOL_MAX;
86 if(platform_device_register(&new_dev->pdev) < 0){
87 camsys_err("register rtfled fail\n");
92 list_add_tail(&new_dev->list, &g_ext_fsh_devs.dev_list);
93 camsys_trace(1,"register new rt led dev success !");
96 return (void*)new_dev;
104 int camsys_deregister_ext_fsh_dev(void* dev)
106 ext_fsh_info_t* cur_fsh_info = NULL;
107 if (!list_empty(&g_ext_fsh_devs.dev_list)) {
108 list_for_each_entry(cur_fsh_info, &g_ext_fsh_devs.dev_list, list) {
109 if (dev == cur_fsh_info) {
110 camsys_trace(1,"unregister ext flsh dev !");
111 platform_device_unregister(&cur_fsh_info->pdev);
112 list_del_init(&cur_fsh_info->list);
113 /* free after unregister device ?*/
114 kfree(cur_fsh_info->pdev.dev.platform_data);
123 /*******************************
125 0: CAM_ENGINE_FLASH_OFF = 0x00,
126 1: CAM_ENGINE_FLASH_AUTO = 0x01,
127 2: CAM_ENGINE_FLASH_ON = 0x02,
128 3: CAM_ENGINE_FLASH_RED_EYE = 0x03,
129 5: CAM_ENGINE_FLASH_TORCH = 0x05
130 ********************************/
131 int camsys_ext_fsh_ctrl(void* dev,int mode,unsigned int on)
133 ext_fsh_info_t* cur_fsh_info = NULL;
134 struct flashlight_device *fled_dev = NULL;
135 if (!list_empty(&g_ext_fsh_devs.dev_list)) {
136 list_for_each_entry(cur_fsh_info, &g_ext_fsh_devs.dev_list, list) {
137 if (dev == cur_fsh_info) {
142 if(cur_fsh_info == NULL){
143 camsys_err("this flash dev have not been registered !");
147 fled_dev = find_flashlight_by_name(cur_fsh_info->dev_model);
148 if(fled_dev == NULL){
149 camsys_err("--find_flashlight_by_name return NULL!--");
154 /* set flashlight mode to Off */
155 flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_OFF);
157 case 2: /* flash on */
158 /* set strobe timeout to 256ms */
159 //flashlight_set_strobe_timeout(fled_dev, 256, 256);
160 flashlight_set_strobe_timeout(fled_dev, 512, 512);
161 /* set strobe brightness to to index 18 (1A), refer to the datasheet for the others */
162 flashlight_set_strobe_brightness(fled_dev, 18);
163 /* set flashlight mode to Strobe */
164 flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_FLASH);
165 flashlight_strobe(fled_dev);
168 /* set the torch brightness index 2 (75mA), refer to the datasheet for index current value. */
169 flashlight_set_torch_brightness(fled_dev, 2);
170 /* set flashlight mode to Torch */
171 flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_TORCH);
174 camsys_err("not support this mode %d !",mode);