/* ------------------------------------------------------------------------- */ static ssize_t shcamled_torch_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { ssize_t ret = -EINVAL; int proc_ret; char *after; unsigned long val = simple_strtoul(buf, &after, 10); size_t count = after - buf; SHCAMLED_TRACE("%s in\n", __FUNCTION__); /* count written bytes size and check size */ if (isspace(*after)) count++; if(count == size) { ret = count; proc_ret = shcamled_pmic_set_torch_led_2_current(val); if(proc_ret) { ret = -EFAULT; SHCAMLED_ERROR("%s failed ret:%d\n", __FUNCTION__, proc_ret); } SHCAMLED_TRACE("%s done ret:%d\n", __FUNCTION__, proc_ret); } SHCAMLED_TRACE("%s done ret:%d\n", __FUNCTION__, ret); return ret; }
/* ------------------------------------------------------------------------- */ static int __init shcamled_torch_driver_init(void) { int ret; SHCAMLED_TRACE("%s in\n", __FUNCTION__); /* torch 1. register platform-driver for device */ ret = platform_driver_register(&shcamled_torch_driver); if (ret) { SHCAMLED_ERROR("%s failed! L.%d ret=%d\n", __FUNCTION__, __LINE__, ret); return ret; } /* torch 2. register platform-device */ ret = platform_device_register(&shcamled_torch_dev); if (ret) { SHCAMLED_ERROR("%s failed! L.%d ret=%d\n", __FUNCTION__, __LINE__, ret); platform_driver_unregister(&shcamled_torch_driver); return ret; } SHCAMLED_TRACE("%s done\n", __FUNCTION__); return 0; }
/* ------------------------------------------------------------------------- */ static int shcamled_torch_probe(struct platform_device *pdev) { int ret; SHCAMLED_TRACE("%s in\n", __FUNCTION__); led_trigger_register_simple("torch_trigger", &cam_torch_led_1_trigger); ret = device_create_file(&pdev->dev, &dev_attr_shcamled_torch); if (ret) { SHCAMLED_ERROR("%s failed create file \n", __FUNCTION__); return ret; } SHCAMLED_TRACE("%s done ret:%d\n", __FUNCTION__, ret); return ret; }
/* ------------------------------------------------------------------------- */ static int shcamled_torch_probe(struct platform_device *pdev) { int ret; SHCAMLED_TRACE("%s in\n", __FUNCTION__); led_trigger_register_simple("flash0_trigger", &cam_torch_flash_0_trigger); led_trigger_register_simple("flash1_trigger", &cam_torch_flash_1_trigger); led_trigger_register_simple("torch_trigger", &cam_torch_led_1_trigger); ret = device_create_file(&pdev->dev, &dev_attr_shcamled_torch); if (ret) { SHCAMLED_ERROR("%s failed create file \n", __FUNCTION__); return ret; } init_waitqueue_head(&shcamled_msg_off_wait); init_waitqueue_head(&shcamled_msg_on_wait); p_flash_off_thread = kthread_create(flash_off_thread, &shcamled_mut, "flash_off_thread"); if(p_flash_off_thread != NULL){ wake_up_process(p_flash_off_thread); SHCAMLED_TRACE("%s %d wake_up_process\n", __FUNCTION__, __LINE__); } else { SHCAMLED_TRACE("%s %d p_flash_off_thread =%p\n", __FUNCTION__, __LINE__, p_flash_off_thread); } p_flash_on_thread = kthread_create(flash_on_thread, &shcamled_mut, "flash_on_thread"); if(p_flash_on_thread != NULL){ wake_up_process(p_flash_on_thread); SHCAMLED_TRACE("%s %d wake_up_process\n", __FUNCTION__, __LINE__); } else { SHCAMLED_TRACE("%s %d p_flash_on_thread =%p\n", __FUNCTION__, __LINE__, p_flash_on_thread); } atomic_set(&flash_on_prepare, 0); SHCAMLED_TRACE("%s done ret:%d\n", __FUNCTION__, ret); return ret; }