static int32_t msm_led_trigger_probe(struct platform_device *pdev) { int32_t rc = 0, i = 0; struct device_node *of_node = pdev->dev.of_node; struct device_node *flash_src_node = NULL; uint32_t count = 0; CDBG("called\n"); if (!of_node) { pr_err("of_node NULL\n"); return -EINVAL; } fctrl.pdev = pdev; rc = of_property_read_u32(of_node, "cell-index", &pdev->id); if (rc < 0) { pr_err("failed\n"); return -EINVAL; } CDBG("pdev id %d\n", pdev->id); if (of_get_property(of_node, "qcom,flash-source", &count)) { count /= sizeof(uint32_t); CDBG("count %d\n", count); if (count > MAX_LED_TRIGGERS) { pr_err("failed\n"); return -EINVAL; } for (i = 0; i < count; i++) { flash_src_node = of_parse_phandle(of_node, "qcom,flash-source", i); if (!flash_src_node) { pr_err("flash_src_node NULL\n"); continue; } rc = of_property_read_string(flash_src_node, "linux,default-trigger", &fctrl.led_trigger_name[i]); if (rc < 0) { pr_err("failed\n"); of_node_put(flash_src_node); continue; } CDBG("default trigger %s\n", fctrl.led_trigger_name[i]); rc = of_property_read_u32(flash_src_node, "qcom,max-current", &fctrl.max_current[i]); if (rc < 0) { pr_err("failed rc %d\n", rc); of_node_put(flash_src_node); continue; } of_node_put(flash_src_node); CDBG("max_current[%d] %d\n", i, fctrl.max_current[i]); led_trigger_register_simple(fctrl.led_trigger_name[i], &fctrl.led_trigger[i]); } } rc = msm_led_flash_create_v4lsubdev(pdev, &fctrl); // Implementation KTD2692 flashIC #if defined(CONFIG_MACH_VIENNA_LTE) || defined(CONFIG_MACH_PICASSO)\ || defined(CONFIG_MACH_MONDRIAN) || defined(CONFIG_MACH_V2_LTE) if (!IS_ERR(camera_class)) { flash_dev = device_create(camera_class, NULL, 0, NULL, "flash"); if (flash_dev < 0) pr_err("Failed to create device(flash)!\n"); if (device_create_file(flash_dev, &dev_attr_rear_flash) < 0) { pr_err("failed to create device file, %s\n", dev_attr_rear_flash.attr.name); } } else pr_err("Failed to create device(flash) because of nothing camera class!\n"); #endif return rc; }
static int32_t msm_led_trigger_probe(struct platform_device *pdev) { int32_t rc = 0, rc_1 = 0, i = 0; struct device_node *of_node = pdev->dev.of_node; struct device_node *flash_src_node = NULL; uint32_t count = 0; struct led_trigger *temp = NULL; CDBG("called\n"); if (!of_node) { pr_err("of_node NULL\n"); return -EINVAL; } fctrl.pdev = pdev; fctrl.num_sources = 0; rc = of_property_read_u32(of_node, "cell-index", &pdev->id); if (rc < 0) { pr_err("failed\n"); return -EINVAL; } CDBG("pdev id %d\n", pdev->id); rc = of_property_read_u32(of_node, "qcom,flash-type", &flashtype); if (rc < 0) { pr_err("flash-type: read failed\n"); return -EINVAL; } if (of_get_property(of_node, "qcom,flash-source", &count)) { count /= sizeof(uint32_t); CDBG("count %d\n", count); if (count > MAX_LED_TRIGGERS) { pr_err("invalid count\n"); return -EINVAL; } fctrl.num_sources = count; for (i = 0; i < count; i++) { flash_src_node = of_parse_phandle(of_node, "qcom,flash-source", i); if (!flash_src_node) { pr_err("flash_src_node NULL\n"); continue; } rc = of_property_read_string(flash_src_node, "linux,default-trigger", &fctrl.flash_trigger_name[i]); if (rc < 0) { pr_err("default-trigger: read failed\n"); of_node_put(flash_src_node); continue; } CDBG("default trigger %s\n", fctrl.flash_trigger_name[i]); if (flashtype == GPIO_FLASH) { /* use fake current */ fctrl.flash_op_current[i] = LED_FULL; } else { rc = of_property_read_u32(flash_src_node, "qcom,current", &fctrl.flash_op_current[i]); rc_1 = of_property_read_u32(flash_src_node, "qcom,max-current", &fctrl.flash_max_current[i]); if ((rc < 0) || (rc_1 < 0)) { pr_err("current: read failed\n"); of_node_put(flash_src_node); continue; } } of_node_put(flash_src_node); CDBG("max_current[%d] %d\n", i, fctrl.flash_op_current[i]); led_trigger_register_simple(fctrl.flash_trigger_name[i], &fctrl.flash_trigger[i]); if (flashtype == GPIO_FLASH) if (fctrl.flash_trigger[i]) temp = fctrl.flash_trigger[i]; } /* Torch source */ flash_src_node = of_parse_phandle(of_node, "qcom,torch-source", 0); if (flash_src_node) { rc = of_property_read_string(flash_src_node, "linux,default-trigger", &fctrl.torch_trigger_name); if (rc < 0) { pr_err("default-trigger: read failed\n"); goto torch_failed; } CDBG("default trigger %s\n", fctrl.torch_trigger_name); if (flashtype == GPIO_FLASH) { /* use fake current */ fctrl.torch_op_current = LED_FULL; if (temp) fctrl.torch_trigger = temp; else led_trigger_register_simple( fctrl.torch_trigger_name, &fctrl.torch_trigger); } else { rc = of_property_read_u32(flash_src_node, "qcom,current", &fctrl.torch_op_current); rc_1 = of_property_read_u32(flash_src_node, "qcom,max-current", &fctrl.torch_max_current); if ((rc < 0) || (rc_1 < 0)) { pr_err("current: read failed\n"); goto torch_failed; } CDBG("torch max_current %d\n", fctrl.torch_op_current); led_trigger_register_simple( fctrl.torch_trigger_name, &fctrl.torch_trigger); } torch_failed: of_node_put(flash_src_node); } } rc = msm_led_flash_create_v4lsubdev(pdev, &fctrl); if (!rc) msm_led_torch_create_classdev(pdev, &fctrl); return rc; }
int32_t msm_led_cci_trigger_probe(struct platform_device *pdev) { struct device_node *of_node = pdev->dev.of_node; struct msm_led_flash_ctrl_t *pfctrl = &fctrl_t; struct msm_camera_cci_client *cci_client = NULL; int32_t rc = 0; if (!of_node) { pr_err("%s: of_node NULL\n", __func__); return -EINVAL; } pfctrl->pdev = pdev; rc = msm_led_trigger_get_dt_data(of_node, pfctrl); if (rc < 0) { pr_err("%s: failed line %d\n", __func__, __LINE__); return rc; } pfctrl->flash_i2c_client->i2c_func_tbl = &msm_led_trigger_cci_func_tbl; pfctrl->flash_i2c_client->cci_client = kzalloc(sizeof(struct msm_camera_cci_client), GFP_KERNEL); if (!pfctrl->flash_i2c_client->cci_client) { pr_err("%s: failed line %d\n", __func__, __LINE__); return rc; } cci_client = pfctrl->flash_i2c_client->cci_client; cci_client->cci_subdev = msm_cci_get_subdev(); cci_client->cci_i2c_master = pfctrl->cci_i2c_master; cci_client->sid = pfctrl->board_info.slave_info->flash_slave_addr >> 1; cci_client->retries = 3; cci_client->id_map = 0; rc = msm_led_flash_create_v4lsubdev(pdev, pfctrl); if (rc < 0) { pr_err("%s: failed line %d\n", __func__, __LINE__); goto msm_led_trigger_probe_failed; } #if defined(CONFIG_MSM_CAMERA_EMODE) (void)msm_led_trigger_register_sysdev(pfctrl); #endif /* CONFIG_MSM_CAMERA_EMODE */ pr_info("%s %s probe succeeded\n", __func__, pfctrl->board_info.flash_name); return 0; msm_led_trigger_probe_failed: if (!cci_client) { kfree(cci_client); cci_client = NULL; } return rc; }
int msm_flash_probe(struct platform_device *pdev, const void *data) { int rc = 0; struct msm_led_flash_ctrl_t *fctrl = (struct msm_led_flash_ctrl_t *)data; struct device_node *of_node = pdev->dev.of_node; struct msm_camera_cci_client *cci_client = NULL; if (!of_node) { pr_err("of_node NULL\n"); goto probe_failure; } fctrl->pdev = pdev; rc = msm_led_get_dt_data(pdev->dev.of_node, fctrl); if (rc < 0) { pr_err("%s failed line %d rc = %d\n", __func__, __LINE__, rc); return rc; } /* Assign name for sub device */ snprintf(fctrl->msm_sd.sd.name, sizeof(fctrl->msm_sd.sd.name), "%s", fctrl->flashdata->sensor_name); /* Set device type as Platform*/ fctrl->flash_device_type = MSM_CAMERA_PLATFORM_DEVICE; if (NULL == fctrl->flash_i2c_client) { pr_err("%s flash_i2c_client NULL\n", __func__); rc = -EFAULT; goto probe_failure; } fctrl->flash_i2c_client->cci_client = kzalloc(sizeof( struct msm_camera_cci_client), GFP_KERNEL); if (!fctrl->flash_i2c_client->cci_client) { pr_err("%s failed line %d kzalloc failed\n", __func__, __LINE__); return rc; } cci_client = fctrl->flash_i2c_client->cci_client; cci_client->cci_subdev = msm_cci_get_subdev(); cci_client->cci_i2c_master = fctrl->cci_i2c_master; if (fctrl->flashdata->slave_info->sensor_slave_addr) cci_client->sid = fctrl->flashdata->slave_info->sensor_slave_addr >> 1; cci_client->retries = 3; cci_client->id_map = 0; if (!fctrl->flash_i2c_client->i2c_func_tbl) fctrl->flash_i2c_client->i2c_func_tbl = &msm_sensor_cci_func_tbl; rc = msm_led_flash_create_v4lsubdev(pdev, fctrl); CDBG("%s: probe success\n", __func__); return 0; probe_failure: CDBG("%s probe failed\n", __func__); return rc; }
int msm_flash_probe(struct platform_device *pdev, const void *data) { int rc = 0; struct msm_led_flash_ctrl_t *fctrl = (struct msm_led_flash_ctrl_t *)data; struct device_node *of_node = pdev->dev.of_node; struct msm_camera_cci_client *cci_client = NULL; #ifdef CONFIG_DEBUG_FS struct dentry *dentry; #endif if (!of_node) { pr_err("of_node NULL\n"); goto probe_failure; } fctrl->pdev = pdev; /* Set device type as Platform*/ fctrl->flash_device_type = MSM_CAMERA_PLATFORM_DEVICE; rc = msm_led_get_dt_data(pdev->dev.of_node, fctrl); if (rc < 0) { pr_err("%s failed line %d\n", __func__, __LINE__); return rc; } /* Assign name for sub device */ snprintf(fctrl->msm_sd.sd.name, sizeof(fctrl->msm_sd.sd.name), "%s", fctrl->flashdata->sensor_name); if (NULL == fctrl->flash_i2c_client) { pr_err("%s flash_i2c_client NULL\n", __func__); rc = -EFAULT; } fctrl->flash_i2c_client->cci_client = kzalloc(sizeof( struct msm_camera_cci_client), GFP_KERNEL); if (!fctrl->flash_i2c_client->cci_client) { pr_err("%s failed line %d\n", __func__, __LINE__); return rc; } cci_client = fctrl->flash_i2c_client->cci_client; cci_client->cci_subdev = msm_cci_get_subdev(); cci_client->cci_i2c_master = fctrl->cci_i2c_master; if (fctrl->flashdata->slave_info->sensor_slave_addr) cci_client->sid = fctrl->flashdata->slave_info->sensor_slave_addr >> 1; cci_client->retries = 3; cci_client->id_map = 0; if (!fctrl->flash_i2c_client->i2c_func_tbl) fctrl->flash_i2c_client->i2c_func_tbl = &msm_sensor_cci_func_tbl; rc = msm_led_flash_create_v4lsubdev(pdev, fctrl); #ifdef CONFIG_DEBUG_FS dentry = debugfs_create_file("ledflash", S_IRUGO, NULL, (void *)fctrl, &ledflashdbg_fops); if (!dentry) pr_err("Failed to create the debugfs ledflash file"); #endif CDBG("%s:%d probe success\n", __func__, __LINE__); return 0; probe_failure: CDBG("%s:%d probe failed\n", __func__, __LINE__); return rc; }
static int32_t msm_led_trigger_probe(struct platform_device *pdev) { int32_t rc = 0, i = 0; struct device_node *of_node = pdev->dev.of_node; struct device_node *flash_src_node = NULL; CDBG("called\n"); if (!of_node) { pr_err("of_node NULL\n"); return -EINVAL; } fctrl.pdev = pdev; rc = of_property_read_u32(of_node, "cell-index", &pdev->id); if (rc < 0) { pr_err("failed\n"); return -EINVAL; } CDBG("pdev id %d\n", pdev->id); if (of_get_property(of_node, "qcom,flash-source", &fctrl.num_sources)) { fctrl.num_sources /= sizeof(uint32_t); CDBG("count %d\n", fctrl.num_sources); if (fctrl.num_sources > MAX_LED_TRIGGERS) { pr_err("failed\n"); return -EINVAL; } for (i = 0; i < fctrl.num_sources; i++) { flash_src_node = of_parse_phandle(of_node, "qcom,flash-source", i); if (!flash_src_node) { pr_err("flash_src_node NULL\n"); continue; } rc = of_property_read_string(flash_src_node, "linux,default-trigger", &fctrl.flash_trigger_name[i]); if (rc < 0) { pr_err("failed\n"); of_node_put(flash_src_node); continue; } CDBG("default trigger %s\n", fctrl.flash_trigger_name[i]); rc = of_property_read_u32(flash_src_node, "qcom,current", &fctrl.flash_op_current[i]); if (rc < 0) { pr_err("failed rc %d\n", rc); of_node_put(flash_src_node); continue; } of_node_put(flash_src_node); CDBG("max_current[%d] %d\n", i, fctrl.flash_op_current[i]); led_trigger_register_simple(fctrl.flash_trigger_name[i], &fctrl.flash_trigger[i]); } /* Torch source */ flash_src_node = of_parse_phandle(of_node, "qcom,torch-source", 0); if (flash_src_node) { rc = of_property_read_string(flash_src_node, "linux,default-trigger", &fctrl.torch_trigger_name); if (rc < 0) { pr_err("failed\n"); } else { CDBG("default trigger %s\n", fctrl.torch_trigger_name); rc = of_property_read_u32(flash_src_node, "qcom,current", &fctrl.torch_op_current); if (rc < 0) { pr_err("failed rc %d\n", rc); } else { CDBG("torch max_current %d\n", fctrl.torch_op_current); led_trigger_register_simple( fctrl.torch_trigger_name, &fctrl.torch_trigger); } } of_node_put(flash_src_node); } } rc = msm_led_flash_create_v4lsubdev(pdev, &fctrl); return rc; }
static int32_t msm_led_trigger_probe(struct platform_device *pdev) { int32_t rc = 0, i = 0; struct device_node *of_node = pdev->dev.of_node; struct device_node *flash_src_node = NULL; uint32_t count = 0; CDBG("called\n"); if (!of_node) { pr_err("of_node NULL\n"); return -EINVAL; } fctrl.pdev = pdev; rc = of_property_read_u32(of_node, "cell-index", &pdev->id); if (rc < 0) { pr_err("failed\n"); return -EINVAL; } CDBG("pdev id %d\n", pdev->id); rc = of_property_read_string(of_node, "flash-driver", &fctrl.flash_driver); pr_info("[%s] Flash driver is %s\n", __FUNCTION__, fctrl.flash_driver); if (rc < 0) { pr_err("%s failed %d\n", __FUNCTION__, __LINE__); return -EINVAL; } if (of_get_property(of_node, "qcom,flash-source", &count)) { count /= sizeof(uint32_t); CDBG("count %d\n", count); if (count > MAX_LED_TRIGGERS) { pr_err("failed\n"); return -EINVAL; } for (i = 0; i < count; i++) { flash_src_node = of_parse_phandle(of_node, "qcom,flash-source", i); if (!flash_src_node) { pr_err("flash_src_node NULL\n"); continue; } rc = of_property_read_string(flash_src_node, "linux,default-trigger", &fctrl.led_trigger_name[i]); if (rc < 0) { pr_err("failed\n"); of_node_put(flash_src_node); continue; } CDBG("default trigger %s\n", fctrl.led_trigger_name[i]); rc = of_property_read_u32(flash_src_node, "qcom,max-current", &fctrl.max_current[i]); if (rc < 0) { pr_err("failed rc %d\n", rc); of_node_put(flash_src_node); continue; } of_node_put(flash_src_node); CDBG("max_current[%d] %d\n", i, fctrl.max_current[i]); led_trigger_register_simple(fctrl.led_trigger_name[i], &fctrl.led_trigger[i]); } } rc = msm_led_flash_create_v4lsubdev(pdev, &fctrl); return rc; }