int16_t fimc_is_af_enable(void *device, bool onoff) { int ret = 0; struct fimc_is_device_af *af_device = (struct fimc_is_device_af *)device; struct fimc_is_core *core; core = (struct fimc_is_core *)dev_get_drvdata(fimc_is_dev); if (!core) { err("core is NULL"); return -ENODEV; } pr_info("af_noise is_camera_run = %d, onoff = %d\n", core->is_camera_run, onoff); if (!core->is_camera_run) { if (onoff) { fimc_is_af_power(true); ret = fimc_is_af_i2c_write(af_device->client, 0x02, 0x00); if (ret) { err("i2c write fail\n"); goto power_off; } ret = fimc_is_af_i2c_write(af_device->client, 0x00, 0x00); if (ret) { err("i2c write fail\n"); goto power_off; } ret = fimc_is_af_i2c_write(af_device->client, 0x01, 0x00); if (ret) { err("i2c write fail\n"); goto power_off; } } else { ret = fimc_is_af_i2c_write(af_device->client, 0x02, 0x40); if (ret) { err("i2c write fail\n"); } fimc_is_af_power(false); } } return ret; power_off: fimc_is_af_power(false); return ret; }
int16_t fimc_is_af_enable(void *device, bool onoff) { int ret = 0; struct fimc_is_device_af *af_device = (struct fimc_is_device_af *)device; struct fimc_is_core *core; bool af_regulator = false, io_regulator = false; struct exynos_platform_fimc_is *core_pdata = dev_get_platdata(fimc_is_dev); core = (struct fimc_is_core *)dev_get_drvdata(fimc_is_dev); if (!core) { err("core is NULL"); return -ENODEV; } pr_info("af_noise : running_rear_camera = %d, onoff = %d\n", core->running_rear_camera, onoff); if (!core->running_rear_camera) { if (core_pdata->use_ois_hsi2c) { fimc_is_af_i2c_config(af_device->client, true); } if (onoff) { fimc_is_af_power(af_device, true); ret = fimc_is_af_i2c_write(af_device->client, 0x02, 0x00); if (ret) { err("i2c write fail\n"); goto power_off; } ret = fimc_is_af_i2c_write(af_device->client, 0x00, 0x00); if (ret) { err("i2c write fail\n"); goto power_off; } ret = fimc_is_af_i2c_write(af_device->client, 0x01, 0x00); if (ret) { err("i2c write fail\n"); goto power_off; } af_noise_count++; pr_info("af_noise : count = %d\n", af_noise_count); } else { /* Check the Power Pins */ af_regulator = fimc_is_check_regulator_status("CAM_AF_2.8V_AP"); io_regulator = fimc_is_check_regulator_status("CAM_IO_1.8V_AP"); if (af_regulator && io_regulator) { ret = fimc_is_af_i2c_write(af_device->client, 0x02, 0x40); if (ret) { err("i2c write fail\n"); } fimc_is_af_power(af_device, false); } else { pr_info("already power off.(%d)\n", __LINE__); } } if (core_pdata->use_ois_hsi2c) { fimc_is_af_i2c_config(af_device->client, false); } } return ret; power_off: if (!core->running_rear_camera) { if (core_pdata->use_ois_hsi2c) { fimc_is_af_i2c_config(af_device->client, false); } af_regulator = fimc_is_check_regulator_status("CAM_AF_2.8V_AP"); io_regulator = fimc_is_check_regulator_status("CAM_IO_1.8V_AP"); if (af_regulator && io_regulator) { fimc_is_af_power(af_device, false); } else { pr_info("already power off.(%d)\n", __LINE__); } } return ret; }