fix spin_unlock error use and some potential problems.
Change-Id: I860c225f2acb5e28827ad3f6b702b0dc7828bb0f
Signed-off-by: xcq <shawn.xu@rock-chips.com>
for (i = (CamSys_Gpio_Start_Tag+1); i < CamSys_Gpio_End_Tag; i++) {
if (strcmp(gpio_info->name, "NC")) {
gpio->io = camsys_gpio_get(gpio_info->name);
- if (gpio->io < 0) {
+ if (!gpio_is_valid(gpio->io)) {
camsys_err(
"Get %s gpio for dev_id 0x%x failed!",
gpio_info->name,
continue;
extdev = camsys_find_extdev((1 << (i+24)), camsys_dev);
- if (extdev == NULL)
+ if (!extdev) {
camsys_err("Can not find dev_id 0x%x device in %s!",
(1<<(i+24)),
dev_name(camsys_dev->miscdev.this_device));
-
+ return -EINVAL;
+ }
camsys_sysctl_extdev(
extdev, devctl, camsys_dev);
list_for_each_entry(irqpool, &camsys_dev->irq.irq_pool, list) {
if (irqpool->pid == irqcnnt->pid) {
camsys_warn("this thread(pid: %d) had been connect irq!",
- current->pid);
- spin_unlock(&camsys_dev->irq.lock);
+ current->pid);
+ spin_unlock_irqrestore(&camsys_dev->irq.lock,
+ flags);
goto end;
}
}
spin_unlock_irqrestore(&camsys_dev->irq.lock, flags);
irqpool = kzalloc(sizeof(camsys_irqpool_t), GFP_KERNEL);
+ if (!irqpool) {
+ err = -ENOMEM;
+ goto end;
+ }
if (irqpool) {
spin_lock_init(&irqpool->lock);
irqpool->pid = irqcnnt->pid;
"iommu status not consistent,"
"check the dts file !isp:%d,vpu:%d",
iommu_enabled, vpu_iommu_enabled);
- return -EFAULT;
+ return -EFAULT;
}
}
struct resource register_res;
struct device *dev = &pdev->dev;
unsigned long i2cmem;
- camsys_meminfo_t *meminfo;
+ camsys_meminfo_t *meminfo, *meminfo_fail;
unsigned int irq_id;
const char *compatible = NULL;
/* map irqs */
irq_id = irq_of_parse_and_map(dev->of_node, 0);
- if (irq_id < 0) {
+ if (!irq_id) {
camsys_err("Get irq resource from %s platform device failed!",
- pdev->name);
+ pdev->name);
err = -ENODEV;
goto fail_end;
}
request_mem_fail:
if (camsys_dev != NULL) {
while (!list_empty(&camsys_dev->devmems.memslist)) {
- meminfo = list_first_entry(
+ meminfo_fail = list_first_entry(
&camsys_dev->devmems.memslist,
camsys_meminfo_t, list);
- if (!meminfo)
+ if (!meminfo_fail)
continue;
- list_del_init(&meminfo->list);
- if (strcmp(meminfo->name,
- CAMSYS_REGISTER_MEM_NAME) == 0) {
- iounmap((void __iomem *)meminfo->vir_base);
+ list_del_init(&meminfo_fail->list);
+ if (strcmp(meminfo_fail->name,
+ CAMSYS_REGISTER_MEM_NAME) == 0) {
+ iounmap((void __iomem *)meminfo_fail->vir_base);
release_mem_region(
- meminfo->phy_base,
- meminfo->size);
- } else if (strcmp(meminfo->name,
+ meminfo_fail->phy_base,
+ meminfo_fail->size);
+ } else if (strcmp(meminfo_fail->name,
CAMSYS_I2C_MEM_NAME) == 0) {
- kfree((void *)meminfo->vir_base);
+ kfree((void *)meminfo_fail->vir_base);
}
- kfree(meminfo);
- meminfo = NULL;
+ kfree(meminfo_fail);
+ meminfo_fail = NULL;
}
kfree(camsys_dev);
meminfo = list_first_entry(
&camsys_dev->devmems.memslist,
camsys_meminfo_t, list);
- if (meminfo)
+ if (!meminfo)
continue;
list_del_init(&meminfo->list);
clk_prepare_enable(clk->pclk_dphy_ref);
}
- clk->in_on = true;
+ clk->in_on = true;
- camsys_trace(1, "%s clock(f: %ld Hz) in turn on",
- dev_name(camsys_dev->miscdev.this_device), isp_clk);
- camsys_mrv_reset_cb(ptr, 1);
- udelay(100);
- camsys_mrv_reset_cb(ptr, 0);
+ camsys_trace(1, "%s clock(f: %ld Hz) in turn on",
+ dev_name(camsys_dev->miscdev.this_device),
+ isp_clk);
+ camsys_mrv_reset_cb(ptr, 1);
+ udelay(100);
+ camsys_mrv_reset_cb(ptr, 0);
} else if (!on && clk->in_on) {
if (strstr(camsys_dev->miscdev.name,
"camsys_marvin1")) {
clk_disable_unprepare(clk->pclk_dphy_ref);
}
- /* rockchip_clear_system_status(SYS_STATUS_ISP); */
- clk->in_on = false;
- camsys_trace(1, "%s clock in turn off",
- dev_name(camsys_dev->miscdev.this_device));
- }
+ /* rockchip_clear_system_status(SYS_STATUS_ISP); */
+ clk->in_on = false;
+ camsys_trace(1, "%s clock in turn off",
+ dev_name(camsys_dev->miscdev.this_device));
+ }
} else{
if (on && !clk->in_on) {
/* rockchip_set_system_status(SYS_STATUS_ISP); */
} else {
clk_prepare_enable(clk->clk_mipi_24m);
}
- clk->in_on = true;
+ clk->in_on = true;
camsys_trace(1, "%s clock(f: %ld Hz) in turn on",
dev_name(camsys_dev->miscdev.this_device), isp_clk);
if (!IS_ERR_OR_NULL(mrv_clk->cif_clk_out))
clk_put(mrv_clk->cif_clk_out);
- if (CHIP_TYPE == 3368 || CHIP_TYPE == 3366) {
- if (!IS_ERR_OR_NULL(mrv_clk->pclk_dphyrx))
- clk_put(mrv_clk->pclk_dphyrx);
+ if (CHIP_TYPE == 3368 || CHIP_TYPE == 3366) {
+ if (!IS_ERR_OR_NULL(mrv_clk->pclk_dphyrx))
+ clk_put(mrv_clk->pclk_dphyrx);
- if (!IS_ERR_OR_NULL(mrv_clk->clk_vio0_noc))
- clk_put(mrv_clk->clk_vio0_noc);
- }
+ if (!IS_ERR_OR_NULL(mrv_clk->clk_vio0_noc))
+ clk_put(mrv_clk->clk_vio0_noc);
+ }
kfree(mrv_clk);
mrv_clk = NULL;
static struct ext_fsh_dev_list_s g_ext_fsh_devs;
-int camsys_init_ext_fsh_module()
+int camsys_init_ext_fsh_module(void)
{
camsys_trace(1,"init external flash module");
INIT_LIST_HEAD(&g_ext_fsh_devs.dev_list);
return 0;
}
-int camsys_deinit_ext_fsh_module()
+int camsys_deinit_ext_fsh_module(void)
{
ext_fsh_info_t* cur_fsh_info = NULL;
camsys_trace(1,"deinit external flash module");
goto fail0;
}
- new_rt_dev = kzalloc(sizeof(*new_rt_dev), GFP_KERNEL);
+ new_rt_dev = kzalloc(sizeof(*new_rt_dev), GFP_KERNEL);
if(!new_rt_dev){
camsys_err("register new ext flash dev erro !");
goto fail1;
new_dev->pdev.id = -1;
new_dev->pdev.name = fsh_info->fl_drv_name;
- new_dev->pdev.dev.release = camsys_ext_fsh_release;
+ new_dev->pdev.dev.release = camsys_ext_fsh_release;
new_dev->pdev.dev.platform_data = (void*)new_rt_dev;
new_dev->dev_model = "rt-flash-led";
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);
new_rt_dev->ctl_gpio = -1;
new_rt_dev->def_lvp = RT8547_LVP_3V;
- new_rt_dev->def_tol = RT8547_TOL_100mA;
+ new_rt_dev->def_tol = RT8547_TOL_100mA;
// new_rt_dev->def_lvp = RT8547_LVP_MAX;
// new_rt_dev->def_tol = RT8547_TOL_MAX;
/* free after unregister device ?*/
kfree(cur_fsh_info->pdev.dev.platform_data);
kfree(cur_fsh_info);
- return 0;
+ return 0;
}
}
}
}
}
if(cur_fsh_info == NULL){
- camsys_err("this flash dev have not been registered !");
- return -1;
+ camsys_err("this flash dev have not been registered !");
+ return -1;
}
fled_dev = find_flashlight_by_name(cur_fsh_info->dev_model);
/* set flashlight mode to Strobe */
flashlight_set_mode(fled_dev, FLASHLIGHT_MODE_FLASH);
flashlight_strobe(fled_dev);
- break;
+ break;
case 5: /* torch */
/* set the torch brightness index 2 (75mA), refer to the datasheet for index current value. */
flashlight_set_torch_brightness(fled_dev, 2);