static int imx135_platform_init(struct i2c_client *client) { int ret; if (is_ctp()) { vemmc1_reg = regulator_get(&client->dev, "vemmc1"); if (IS_ERR(vemmc1_reg)) { dev_err(&client->dev, "regulator_get failed\n"); return PTR_ERR(vemmc1_reg); } } if (!is_victoriabay() && !is_moorefield()) { vprog1_reg = regulator_get(&client->dev, "vprog1"); if (IS_ERR(vprog1_reg)) { dev_err(&client->dev, "regulator_get failed\n"); return PTR_ERR(vprog1_reg); } ret = regulator_set_voltage(vprog1_reg, VPROG1_VAL, VPROG1_VAL); if (ret) { dev_err(&client->dev, "regulator voltage set failed\n"); regulator_put(vprog1_reg); } } return 0; }
static int imx135_platform_deinit(void) { if (!is_victoriabay() && !is_moorefield()) regulator_put(vprog1_reg); if (is_ctp()) regulator_put(vemmc1_reg); return 0; }
static int imx135_power_ctrl(struct v4l2_subdev *sd, int flag) { struct i2c_client *client = v4l2_get_subdevdata(sd); int ret = 0; if (is_moorefield()) { #ifdef CONFIG_INTEL_SCU_IPC_UTIL ret = intel_scu_ipc_msic_vprog1(flag); if (ret) { pr_err("imx135 power failed\n"); return ret; } ret = intel_scu_ipc_msic_vprog3(flag); #else ret = -ENODEV; #endif if (ret) pr_err("imx135 power failed\n"); if (flag) usleep_range(1000, 1200); return ret; } if (flag) { if (is_ctp()) { if (!camera_vemmc1_on) { camera_vemmc1_on = 1; ret = regulator_enable(vemmc1_reg); if (ret) { dev_err(&client->dev, "Failed to enable regulator vemmc1\n"); return ret; } } if (vprog1_reg && !camera_vprog1_on) { camera_vprog1_on = 1; ret = regulator_enable(vprog1_reg); if (ret) { dev_err(&client->dev, "Failed to enable regulator vprog1\n"); return ret; } } if (!is_victoriabay()) { if (camera_power < 0) { ret = camera_sensor_gpio(-1, GP_CAMERA_1_POWER_DOWN, GPIOF_DIR_OUT, 1); if (ret < 0) return ret; camera_power = ret; } gpio_set_value(camera_power, 1); } /* min 250us -Initializing time of silicon */ usleep_range(250, 300); } else { if (!camera_vprog1_on) { ret = regulator_enable(vprog1_reg); if (!ret) { /* imx1x5 VDIG rise to XCLR release */ usleep_range(1000, 1200); camera_vprog1_on = 1; } return ret; } } } else { if (is_ctp()) { if (camera_vemmc1_on) { camera_vemmc1_on = 0; ret = regulator_disable(vemmc1_reg); if (ret) { dev_err(&client->dev, "Failed to disable regulator vemmc1\n"); return ret; } } if (vprog1_reg && camera_vprog1_on) { camera_vprog1_on = 0; ret = regulator_disable(vprog1_reg); if (ret) { dev_err(&client->dev, "Failed to disable regulator vprog1\n"); return ret; } } } else { if (camera_vprog1_on) { ret = regulator_disable(vprog1_reg); if (!ret) camera_vprog1_on = 0; return ret; } } } return 0; }
static int t4k35_power_ctrl(struct v4l2_subdev *sd, int flag) { struct i2c_client *client = v4l2_get_subdevdata(sd); int ret = 0; int reset_gpio_pin, vcm_pd_gpio_pin; if (first_open) { camera_reset = -1; camera_power = -1; camera_vcm_pd = -1; camera_sensor_2_8v = -1; HW_ID = Read_HW_ID(); first_open = false; } reset_gpio_pin = 177; vcm_pd_gpio_pin = 175; if (camera_reset < 0) { gpio_free(reset_gpio_pin); ret = camera_sensor_gpio(reset_gpio_pin, GP_CAMERA_0_RESET, GPIOF_DIR_OUT, 0); if (ret < 0) { pr_err("%s error\n", GP_CAMERA_0_RESET); return ret; } camera_reset = reset_gpio_pin; } if (camera_vcm_pd < 0) { ret = camera_sensor_gpio(vcm_pd_gpio_pin, GP_CAMERA_0_POWER_DOWN, GPIOF_DIR_OUT, 0); if (ret < 0) { pr_err("%s error\n", GP_CAMERA_0_POWER_DOWN); return ret; } camera_vcm_pd = reset_gpio_pin; } pr_info("[t4k35_platform] HW_ID = %d\n", HW_ID); if (camera_sensor_2_8v < 0 && HW_ID >= 3) { /*for PR HW change 2.8V*/ ret = camera_sensor_gpio(-1, GP_CAMERA_1_2_8v, GPIOF_DIR_OUT, 0); if (ret < 0) { pr_err("%s not available.\n", GP_CAMERA_1_2_8v); return ret; } camera_sensor_2_8v = GP_CORE_012; } #if 0 if (is_moorefield()) { #ifdef CONFIG_INTEL_SCU_IPC_UTIL ret = intel_scu_ipc_msic_vprog1(flag); if (ret) { pr_err("t4k35 power failed\n"); return ret; } ret = intel_scu_ipc_msic_vprog3(flag); #else ret = -ENODEV; #endif if (ret) pr_err("t4k35 power failed\n"); if (flag) usleep_range(1000, 1200); return ret; } #endif if (flag) { gpio_set_value(camera_reset, 0); usleep_range(200, 300); pr_info("%s camera_reset is low\n", __func__); /* turn on VCM power 2.85V */ if (!camera_vemmc1_on) { camera_vemmc1_on = 1; ret = regulator_enable(vemmc1_reg); /* ret = regulator_enable(vemmc1_reg); */ if (!ret) { pr_info("%s enable regulator vemmc1 2.85V\n", __func__); } else { pr_err("%s Failed to enable regulator vemmc1\n", __func__); return ret; } } if (!camera_vprog2_on) { camera_vprog2_on = 1; ret = regulator_enable(vprog2_reg); if (!ret) { pr_info("%s enable regulator vprog2 1.2V\n", __func__); } else { pr_err("%s Failed to enable regulator vprog2\n", __func__); return ret; } } if (!camera_vprog1_on) { camera_vprog1_on = 1; ret = regulator_enable(vprog1_reg); if (!ret) { pr_info("%s enable regulator vprog1 1.8V\n", __func__); } else { pr_err("%s Failed to enable regulator vprog1\n", __func__); return ret; } } if (camera_sensor_2_8v >= 0) { gpio_set_value(camera_sensor_2_8v, 1); pr_err("<<< 2.8v = 1\n"); } } else { if (camera_sensor_2_8v >= 0) { gpio_set_value(camera_sensor_2_8v, 0); pr_err("<<< 2.8v = 0\n"); gpio_free(camera_sensor_2_8v); camera_sensor_2_8v = -1; } if (camera_vprog1_on) { camera_vprog1_on = 0; ret = regulator_disable(vprog1_reg); if (!ret) { pr_info("%s disable regulator vprog1 1.8V\n", __func__); } else { pr_err("%s Failed to disable regulator vprog1\n", __func__); return ret; } } if (camera_vprog2_on) { camera_vprog2_on = 0; ret = regulator_disable(vprog2_reg); if (!ret) { pr_info("%s disable regulator vprog2 1.2V\n", __func__); } else { pr_err("%s Failed to disable regulator vprog2\n", __func__); return ret; } } /* turn off VCM power 2.85V */ if (camera_vemmc1_on) { camera_vemmc1_on = 0; ret = regulator_disable(vemmc1_reg); if (!ret) { pr_info("%s disable regulator vemmc1 2.85V\n", __func__); } else { pr_err("%s Failed to disable regulator vemmc1\n", __func__); return ret; } } } return 0; }