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) { regulator_put(vprog1_reg); if (is_ctp()) regulator_put(vemmc1_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; }