Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/cam_actuator_dev.c +17 −15 Original line number Diff line number Diff line Loading @@ -217,9 +217,6 @@ static int32_t cam_actuator_driver_i2c_probe(struct i2c_client *client, a_ctrl->bridge_intf.ops.apply_req = cam_actuator_apply_request; a_ctrl->last_flush_req = 0; v4l2_set_subdevdata(&(a_ctrl->v4l2_dev_str.sd), a_ctrl); a_ctrl->cam_act_state = CAM_ACTUATOR_INIT; return rc; Loading @@ -246,19 +243,24 @@ static int32_t cam_actuator_platform_remove(struct platform_device *pdev) return 0; } CAM_INFO(CAM_ACTUATOR, "platform remove invoked"); mutex_lock(&(a_ctrl->actuator_mutex)); cam_actuator_shutdown(a_ctrl); mutex_unlock(&(a_ctrl->actuator_mutex)); cam_unregister_subdev(&(a_ctrl->v4l2_dev_str)); soc_private = (struct cam_actuator_soc_private *)a_ctrl->soc_info.soc_private; power_info = &soc_private->power_info; kfree(a_ctrl->io_master_info.cci_client); a_ctrl->io_master_info.cci_client = NULL; kfree(power_info->power_setting); kfree(power_info->power_down_setting); power_info->power_setting = NULL; power_info->power_down_setting = NULL; kfree(a_ctrl->soc_info.soc_private); a_ctrl->soc_info.soc_private = NULL; kfree(a_ctrl->i2c_data.per_frame); a_ctrl->i2c_data.per_frame = NULL; v4l2_set_subdevdata(&a_ctrl->v4l2_dev_str.sd, NULL); platform_set_drvdata(pdev, NULL); devm_kfree(&pdev->dev, a_ctrl); return rc; Loading @@ -266,7 +268,6 @@ static int32_t cam_actuator_platform_remove(struct platform_device *pdev) static int32_t cam_actuator_driver_i2c_remove(struct i2c_client *client) { int32_t rc = 0; struct cam_actuator_ctrl_t *a_ctrl = i2c_get_clientdata(client); struct cam_actuator_soc_private *soc_private; Loading @@ -278,6 +279,11 @@ static int32_t cam_actuator_driver_i2c_remove(struct i2c_client *client) return -EINVAL; } CAM_INFO(CAM_ACTUATOR, "i2c remove invoked"); mutex_lock(&(a_ctrl->actuator_mutex)); cam_actuator_shutdown(a_ctrl); mutex_unlock(&(a_ctrl->actuator_mutex)); cam_unregister_subdev(&(a_ctrl->v4l2_dev_str)); soc_private = (struct cam_actuator_soc_private *)a_ctrl->soc_info.soc_private; power_info = &soc_private->power_info; Loading @@ -285,14 +291,11 @@ static int32_t cam_actuator_driver_i2c_remove(struct i2c_client *client) /*Free Allocated Mem */ kfree(a_ctrl->i2c_data.per_frame); a_ctrl->i2c_data.per_frame = NULL; kfree(power_info->power_setting); kfree(power_info->power_down_setting); kfree(a_ctrl->soc_info.soc_private); power_info->power_setting = NULL; power_info->power_down_setting = NULL; a_ctrl->soc_info.soc_private = NULL; v4l2_set_subdevdata(&a_ctrl->v4l2_dev_str.sd, NULL); kfree(a_ctrl); return rc; return 0; } static const struct of_device_id cam_actuator_driver_dt_match[] = { Loading Loading @@ -377,7 +380,6 @@ static int32_t cam_actuator_driver_platform_probe( a_ctrl->last_flush_req = 0; platform_set_drvdata(pdev, a_ctrl); v4l2_set_subdevdata(&a_ctrl->v4l2_dev_str.sd, a_ctrl); a_ctrl->cam_act_state = CAM_ACTUATOR_INIT; return rc; Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_csiphy/cam_csiphy_dev.c +8 −1 Original line number Diff line number Diff line Loading @@ -165,7 +165,6 @@ static int32_t cam_csiphy_platform_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, &(new_csiphy_dev->v4l2_dev_str.sd)); v4l2_set_subdevdata(&(new_csiphy_dev->v4l2_dev_str.sd), new_csiphy_dev); new_csiphy_dev->bridge_intf.device_hdl[0] = -1; new_csiphy_dev->bridge_intf.device_hdl[1] = -1; Loading Loading @@ -211,9 +210,17 @@ static int32_t cam_csiphy_device_remove(struct platform_device *pdev) struct csiphy_device *csiphy_dev = v4l2_get_subdevdata(subdev); CAM_INFO(CAM_CSIPHY, "device remove invoked"); cam_cpas_unregister_client(csiphy_dev->cpas_handle); cam_csiphy_soc_release(csiphy_dev); mutex_lock(&csiphy_dev->mutex); cam_csiphy_shutdown(csiphy_dev); mutex_unlock(&csiphy_dev->mutex); cam_unregister_subdev(&(csiphy_dev->v4l2_dev_str)); kfree(csiphy_dev->ctrl_reg); csiphy_dev->ctrl_reg = NULL; platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&(csiphy_dev->v4l2_dev_str.sd), NULL); devm_kfree(&pdev->dev, csiphy_dev); return 0; Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c +20 −6 Original line number Diff line number Diff line Loading @@ -219,7 +219,6 @@ static int cam_eeprom_i2c_driver_probe(struct i2c_client *client, e_ctrl->bridge_intf.ops.get_dev_info = NULL; e_ctrl->bridge_intf.ops.link_setup = NULL; e_ctrl->bridge_intf.ops.apply_req = NULL; v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, e_ctrl); e_ctrl->cam_eeprom_state = CAM_EEPROM_INIT; return rc; Loading Loading @@ -257,13 +256,17 @@ static int cam_eeprom_i2c_driver_remove(struct i2c_client *client) return -EINVAL; } CAM_INFO(CAM_EEPROM, "i2c driver remove invoked"); soc_info = &e_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(e_ctrl->eeprom_mutex)); cam_eeprom_shutdown(e_ctrl); mutex_unlock(&(e_ctrl->eeprom_mutex)); mutex_destroy(&(e_ctrl->eeprom_mutex)); cam_unregister_subdev(&(e_ctrl->v4l2_dev_str)); kfree(soc_private); kfree(e_ctrl->io_master_info.cci_client); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL); kfree(e_ctrl); Loading Loading @@ -388,14 +391,21 @@ static int cam_eeprom_spi_driver_remove(struct spi_device *sdev) for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(e_ctrl->eeprom_mutex)); cam_eeprom_shutdown(e_ctrl); mutex_unlock(&(e_ctrl->eeprom_mutex)); mutex_destroy(&(e_ctrl->eeprom_mutex)); cam_unregister_subdev(&(e_ctrl->v4l2_dev_str)); kfree(e_ctrl->io_master_info.spi_client); e_ctrl->io_master_info.spi_client = NULL; soc_private = (struct cam_eeprom_soc_private *)e_ctrl->soc_info.soc_private; if (soc_private) { kfree(soc_private->power_info.gpio_num_info); soc_private->power_info.gpio_num_info = NULL; kfree(soc_private); soc_private = NULL; } mutex_destroy(&(e_ctrl->eeprom_mutex)); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL); kfree(e_ctrl); Loading Loading @@ -459,10 +469,7 @@ static int32_t cam_eeprom_platform_driver_probe( e_ctrl->bridge_intf.ops.get_dev_info = NULL; e_ctrl->bridge_intf.ops.link_setup = NULL; e_ctrl->bridge_intf.ops.apply_req = NULL; platform_set_drvdata(pdev, e_ctrl); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, e_ctrl); e_ctrl->cam_eeprom_state = CAM_EEPROM_INIT; return rc; Loading @@ -472,6 +479,7 @@ static int32_t cam_eeprom_platform_driver_probe( kfree(e_ctrl->io_master_info.cci_client); free_e_ctrl: kfree(e_ctrl); return rc; } Loading @@ -487,17 +495,23 @@ static int cam_eeprom_platform_driver_remove(struct platform_device *pdev) return -EINVAL; } CAM_INFO(CAM_EEPROM, "Platform driver remove invoked"); soc_info = &e_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(e_ctrl->eeprom_mutex)); cam_eeprom_shutdown(e_ctrl); mutex_unlock(&(e_ctrl->eeprom_mutex)); mutex_destroy(&(e_ctrl->eeprom_mutex)); cam_unregister_subdev(&(e_ctrl->v4l2_dev_str)); kfree(soc_info->soc_private); kfree(e_ctrl->io_master_info.cci_client); platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL); kfree(e_ctrl); return 0; } Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_dev.c +10 −1 Original line number Diff line number Diff line Loading @@ -320,7 +320,14 @@ static int cam_flash_platform_remove(struct platform_device *pdev) return 0; } devm_kfree(&pdev->dev, fctrl); CAM_INFO(CAM_FLASH, "Platform remove invoked"); mutex_lock(&fctrl->flash_mutex); cam_flash_shutdown(fctrl); mutex_unlock(&fctrl->flash_mutex); cam_unregister_subdev(&(fctrl->v4l2_dev_str)); platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&fctrl->v4l2_dev_str.sd, NULL); kfree(fctrl); return 0; } Loading @@ -334,6 +341,8 @@ static int32_t cam_flash_i2c_driver_remove(struct i2c_client *client) CAM_ERR(CAM_FLASH, "Flash device is NULL"); return -EINVAL; } CAM_INFO(CAM_FLASH, "i2c driver remove invoked"); /*Free Allocated Mem */ kfree(fctrl->i2c_data.per_frame); fctrl->i2c_data.per_frame = NULL; Loading drivers/media/platform/msm/camera/cam_sensor_module/cam_ois/cam_ois_dev.c +16 −10 Original line number Diff line number Diff line Loading @@ -229,20 +229,23 @@ static int cam_ois_i2c_driver_remove(struct i2c_client *client) return -EINVAL; } CAM_INFO(CAM_OIS, "i2c driver remove invoked"); soc_info = &o_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(o_ctrl->ois_mutex)); cam_ois_shutdown(o_ctrl); mutex_unlock(&(o_ctrl->ois_mutex)); cam_unregister_subdev(&(o_ctrl->v4l2_dev_str)); soc_private = (struct cam_ois_soc_private *)soc_info->soc_private; power_info = &soc_private->power_info; kfree(power_info->power_setting); kfree(power_info->power_down_setting); power_info->power_setting = NULL; power_info->power_down_setting = NULL; kfree(o_ctrl->soc_info.soc_private); v4l2_set_subdevdata(&o_ctrl->v4l2_dev_str.sd, NULL); kfree(o_ctrl); return 0; Loading Loading @@ -303,8 +306,6 @@ static int32_t cam_ois_platform_driver_probe( o_ctrl->bridge_intf.device_hdl = -1; platform_set_drvdata(pdev, o_ctrl); v4l2_set_subdevdata(&o_ctrl->v4l2_dev_str.sd, o_ctrl); o_ctrl->cam_ois_state = CAM_OIS_INIT; return rc; Loading Loading @@ -333,21 +334,26 @@ static int cam_ois_platform_driver_remove(struct platform_device *pdev) return -EINVAL; } CAM_INFO(CAM_OIS, "platform driver remove invoked"); soc_info = &o_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(o_ctrl->ois_mutex)); cam_ois_shutdown(o_ctrl); mutex_unlock(&(o_ctrl->ois_mutex)); cam_unregister_subdev(&(o_ctrl->v4l2_dev_str)); soc_private = (struct cam_ois_soc_private *)o_ctrl->soc_info.soc_private; power_info = &soc_private->power_info; kfree(power_info->power_setting); kfree(power_info->power_down_setting); power_info->power_setting = NULL; power_info->power_down_setting = NULL; kfree(o_ctrl->soc_info.soc_private); kfree(o_ctrl->io_master_info.cci_client); platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&o_ctrl->v4l2_dev_str.sd, NULL); kfree(o_ctrl); return 0; } Loading Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/cam_actuator_dev.c +17 −15 Original line number Diff line number Diff line Loading @@ -217,9 +217,6 @@ static int32_t cam_actuator_driver_i2c_probe(struct i2c_client *client, a_ctrl->bridge_intf.ops.apply_req = cam_actuator_apply_request; a_ctrl->last_flush_req = 0; v4l2_set_subdevdata(&(a_ctrl->v4l2_dev_str.sd), a_ctrl); a_ctrl->cam_act_state = CAM_ACTUATOR_INIT; return rc; Loading @@ -246,19 +243,24 @@ static int32_t cam_actuator_platform_remove(struct platform_device *pdev) return 0; } CAM_INFO(CAM_ACTUATOR, "platform remove invoked"); mutex_lock(&(a_ctrl->actuator_mutex)); cam_actuator_shutdown(a_ctrl); mutex_unlock(&(a_ctrl->actuator_mutex)); cam_unregister_subdev(&(a_ctrl->v4l2_dev_str)); soc_private = (struct cam_actuator_soc_private *)a_ctrl->soc_info.soc_private; power_info = &soc_private->power_info; kfree(a_ctrl->io_master_info.cci_client); a_ctrl->io_master_info.cci_client = NULL; kfree(power_info->power_setting); kfree(power_info->power_down_setting); power_info->power_setting = NULL; power_info->power_down_setting = NULL; kfree(a_ctrl->soc_info.soc_private); a_ctrl->soc_info.soc_private = NULL; kfree(a_ctrl->i2c_data.per_frame); a_ctrl->i2c_data.per_frame = NULL; v4l2_set_subdevdata(&a_ctrl->v4l2_dev_str.sd, NULL); platform_set_drvdata(pdev, NULL); devm_kfree(&pdev->dev, a_ctrl); return rc; Loading @@ -266,7 +268,6 @@ static int32_t cam_actuator_platform_remove(struct platform_device *pdev) static int32_t cam_actuator_driver_i2c_remove(struct i2c_client *client) { int32_t rc = 0; struct cam_actuator_ctrl_t *a_ctrl = i2c_get_clientdata(client); struct cam_actuator_soc_private *soc_private; Loading @@ -278,6 +279,11 @@ static int32_t cam_actuator_driver_i2c_remove(struct i2c_client *client) return -EINVAL; } CAM_INFO(CAM_ACTUATOR, "i2c remove invoked"); mutex_lock(&(a_ctrl->actuator_mutex)); cam_actuator_shutdown(a_ctrl); mutex_unlock(&(a_ctrl->actuator_mutex)); cam_unregister_subdev(&(a_ctrl->v4l2_dev_str)); soc_private = (struct cam_actuator_soc_private *)a_ctrl->soc_info.soc_private; power_info = &soc_private->power_info; Loading @@ -285,14 +291,11 @@ static int32_t cam_actuator_driver_i2c_remove(struct i2c_client *client) /*Free Allocated Mem */ kfree(a_ctrl->i2c_data.per_frame); a_ctrl->i2c_data.per_frame = NULL; kfree(power_info->power_setting); kfree(power_info->power_down_setting); kfree(a_ctrl->soc_info.soc_private); power_info->power_setting = NULL; power_info->power_down_setting = NULL; a_ctrl->soc_info.soc_private = NULL; v4l2_set_subdevdata(&a_ctrl->v4l2_dev_str.sd, NULL); kfree(a_ctrl); return rc; return 0; } static const struct of_device_id cam_actuator_driver_dt_match[] = { Loading Loading @@ -377,7 +380,6 @@ static int32_t cam_actuator_driver_platform_probe( a_ctrl->last_flush_req = 0; platform_set_drvdata(pdev, a_ctrl); v4l2_set_subdevdata(&a_ctrl->v4l2_dev_str.sd, a_ctrl); a_ctrl->cam_act_state = CAM_ACTUATOR_INIT; return rc; Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_csiphy/cam_csiphy_dev.c +8 −1 Original line number Diff line number Diff line Loading @@ -165,7 +165,6 @@ static int32_t cam_csiphy_platform_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, &(new_csiphy_dev->v4l2_dev_str.sd)); v4l2_set_subdevdata(&(new_csiphy_dev->v4l2_dev_str.sd), new_csiphy_dev); new_csiphy_dev->bridge_intf.device_hdl[0] = -1; new_csiphy_dev->bridge_intf.device_hdl[1] = -1; Loading Loading @@ -211,9 +210,17 @@ static int32_t cam_csiphy_device_remove(struct platform_device *pdev) struct csiphy_device *csiphy_dev = v4l2_get_subdevdata(subdev); CAM_INFO(CAM_CSIPHY, "device remove invoked"); cam_cpas_unregister_client(csiphy_dev->cpas_handle); cam_csiphy_soc_release(csiphy_dev); mutex_lock(&csiphy_dev->mutex); cam_csiphy_shutdown(csiphy_dev); mutex_unlock(&csiphy_dev->mutex); cam_unregister_subdev(&(csiphy_dev->v4l2_dev_str)); kfree(csiphy_dev->ctrl_reg); csiphy_dev->ctrl_reg = NULL; platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&(csiphy_dev->v4l2_dev_str.sd), NULL); devm_kfree(&pdev->dev, csiphy_dev); return 0; Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c +20 −6 Original line number Diff line number Diff line Loading @@ -219,7 +219,6 @@ static int cam_eeprom_i2c_driver_probe(struct i2c_client *client, e_ctrl->bridge_intf.ops.get_dev_info = NULL; e_ctrl->bridge_intf.ops.link_setup = NULL; e_ctrl->bridge_intf.ops.apply_req = NULL; v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, e_ctrl); e_ctrl->cam_eeprom_state = CAM_EEPROM_INIT; return rc; Loading Loading @@ -257,13 +256,17 @@ static int cam_eeprom_i2c_driver_remove(struct i2c_client *client) return -EINVAL; } CAM_INFO(CAM_EEPROM, "i2c driver remove invoked"); soc_info = &e_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(e_ctrl->eeprom_mutex)); cam_eeprom_shutdown(e_ctrl); mutex_unlock(&(e_ctrl->eeprom_mutex)); mutex_destroy(&(e_ctrl->eeprom_mutex)); cam_unregister_subdev(&(e_ctrl->v4l2_dev_str)); kfree(soc_private); kfree(e_ctrl->io_master_info.cci_client); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL); kfree(e_ctrl); Loading Loading @@ -388,14 +391,21 @@ static int cam_eeprom_spi_driver_remove(struct spi_device *sdev) for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(e_ctrl->eeprom_mutex)); cam_eeprom_shutdown(e_ctrl); mutex_unlock(&(e_ctrl->eeprom_mutex)); mutex_destroy(&(e_ctrl->eeprom_mutex)); cam_unregister_subdev(&(e_ctrl->v4l2_dev_str)); kfree(e_ctrl->io_master_info.spi_client); e_ctrl->io_master_info.spi_client = NULL; soc_private = (struct cam_eeprom_soc_private *)e_ctrl->soc_info.soc_private; if (soc_private) { kfree(soc_private->power_info.gpio_num_info); soc_private->power_info.gpio_num_info = NULL; kfree(soc_private); soc_private = NULL; } mutex_destroy(&(e_ctrl->eeprom_mutex)); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL); kfree(e_ctrl); Loading Loading @@ -459,10 +469,7 @@ static int32_t cam_eeprom_platform_driver_probe( e_ctrl->bridge_intf.ops.get_dev_info = NULL; e_ctrl->bridge_intf.ops.link_setup = NULL; e_ctrl->bridge_intf.ops.apply_req = NULL; platform_set_drvdata(pdev, e_ctrl); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, e_ctrl); e_ctrl->cam_eeprom_state = CAM_EEPROM_INIT; return rc; Loading @@ -472,6 +479,7 @@ static int32_t cam_eeprom_platform_driver_probe( kfree(e_ctrl->io_master_info.cci_client); free_e_ctrl: kfree(e_ctrl); return rc; } Loading @@ -487,17 +495,23 @@ static int cam_eeprom_platform_driver_remove(struct platform_device *pdev) return -EINVAL; } CAM_INFO(CAM_EEPROM, "Platform driver remove invoked"); soc_info = &e_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(e_ctrl->eeprom_mutex)); cam_eeprom_shutdown(e_ctrl); mutex_unlock(&(e_ctrl->eeprom_mutex)); mutex_destroy(&(e_ctrl->eeprom_mutex)); cam_unregister_subdev(&(e_ctrl->v4l2_dev_str)); kfree(soc_info->soc_private); kfree(e_ctrl->io_master_info.cci_client); platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL); kfree(e_ctrl); return 0; } Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_dev.c +10 −1 Original line number Diff line number Diff line Loading @@ -320,7 +320,14 @@ static int cam_flash_platform_remove(struct platform_device *pdev) return 0; } devm_kfree(&pdev->dev, fctrl); CAM_INFO(CAM_FLASH, "Platform remove invoked"); mutex_lock(&fctrl->flash_mutex); cam_flash_shutdown(fctrl); mutex_unlock(&fctrl->flash_mutex); cam_unregister_subdev(&(fctrl->v4l2_dev_str)); platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&fctrl->v4l2_dev_str.sd, NULL); kfree(fctrl); return 0; } Loading @@ -334,6 +341,8 @@ static int32_t cam_flash_i2c_driver_remove(struct i2c_client *client) CAM_ERR(CAM_FLASH, "Flash device is NULL"); return -EINVAL; } CAM_INFO(CAM_FLASH, "i2c driver remove invoked"); /*Free Allocated Mem */ kfree(fctrl->i2c_data.per_frame); fctrl->i2c_data.per_frame = NULL; Loading
drivers/media/platform/msm/camera/cam_sensor_module/cam_ois/cam_ois_dev.c +16 −10 Original line number Diff line number Diff line Loading @@ -229,20 +229,23 @@ static int cam_ois_i2c_driver_remove(struct i2c_client *client) return -EINVAL; } CAM_INFO(CAM_OIS, "i2c driver remove invoked"); soc_info = &o_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(o_ctrl->ois_mutex)); cam_ois_shutdown(o_ctrl); mutex_unlock(&(o_ctrl->ois_mutex)); cam_unregister_subdev(&(o_ctrl->v4l2_dev_str)); soc_private = (struct cam_ois_soc_private *)soc_info->soc_private; power_info = &soc_private->power_info; kfree(power_info->power_setting); kfree(power_info->power_down_setting); power_info->power_setting = NULL; power_info->power_down_setting = NULL; kfree(o_ctrl->soc_info.soc_private); v4l2_set_subdevdata(&o_ctrl->v4l2_dev_str.sd, NULL); kfree(o_ctrl); return 0; Loading Loading @@ -303,8 +306,6 @@ static int32_t cam_ois_platform_driver_probe( o_ctrl->bridge_intf.device_hdl = -1; platform_set_drvdata(pdev, o_ctrl); v4l2_set_subdevdata(&o_ctrl->v4l2_dev_str.sd, o_ctrl); o_ctrl->cam_ois_state = CAM_OIS_INIT; return rc; Loading Loading @@ -333,21 +334,26 @@ static int cam_ois_platform_driver_remove(struct platform_device *pdev) return -EINVAL; } CAM_INFO(CAM_OIS, "platform driver remove invoked"); soc_info = &o_ctrl->soc_info; for (i = 0; i < soc_info->num_clk; i++) devm_clk_put(soc_info->dev, soc_info->clk[i]); mutex_lock(&(o_ctrl->ois_mutex)); cam_ois_shutdown(o_ctrl); mutex_unlock(&(o_ctrl->ois_mutex)); cam_unregister_subdev(&(o_ctrl->v4l2_dev_str)); soc_private = (struct cam_ois_soc_private *)o_ctrl->soc_info.soc_private; power_info = &soc_private->power_info; kfree(power_info->power_setting); kfree(power_info->power_down_setting); power_info->power_setting = NULL; power_info->power_down_setting = NULL; kfree(o_ctrl->soc_info.soc_private); kfree(o_ctrl->io_master_info.cci_client); platform_set_drvdata(pdev, NULL); v4l2_set_subdevdata(&o_ctrl->v4l2_dev_str.sd, NULL); kfree(o_ctrl); return 0; } Loading