Lines Matching refs:imx415
199 struct imx415 { struct
248 #define to_imx415(sd) container_of(sd, struct imx415, subdev) argument
1064 imx415_find_best_fit(struct imx415 *imx415, struct v4l2_subdev_format *fmt) in imx415_find_best_fit() argument
1072 for (i = 0; i < imx415->cfg_num; i++) { in imx415_find_best_fit()
1080 dev_info(&imx415->client->dev, "%s: cur_best_fit(%d)", in imx415_find_best_fit()
1086 static int __imx415_power_on(struct imx415 *imx415);
1088 static void imx415_change_mode(struct imx415 *imx415, const struct imx415_mode *mode) in imx415_change_mode() argument
1090 if (imx415->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in imx415_change_mode()
1091 imx415->is_thunderboot = false; in imx415_change_mode()
1092 imx415->is_thunderboot_ng = true; in imx415_change_mode()
1093 __imx415_power_on(imx415); in imx415_change_mode()
1095 imx415->cur_mode = mode; in imx415_change_mode()
1096 imx415->cur_vts = imx415->cur_mode->vts_def; in imx415_change_mode()
1097 dev_dbg(&imx415->client->dev, "set fmt: cur_mode: %dx%d, hdr: %d\n", in imx415_change_mode()
1105 struct imx415 *imx415 = to_imx415(sd); in imx415_set_fmt() local
1110 mutex_lock(&imx415->mutex); in imx415_set_fmt()
1112 mode = imx415_find_best_fit(imx415, fmt); in imx415_set_fmt()
1121 mutex_unlock(&imx415->mutex); in imx415_set_fmt()
1125 imx415_change_mode(imx415, mode); in imx415_set_fmt()
1127 __v4l2_ctrl_modify_range(imx415->hblank, h_blank, in imx415_set_fmt()
1132 __v4l2_ctrl_modify_range(imx415->vblank, vblank_min, in imx415_set_fmt()
1135 __v4l2_ctrl_s_ctrl(imx415->vblank, vblank_def); in imx415_set_fmt()
1136 __v4l2_ctrl_s_ctrl(imx415->link_freq, mode->mipi_freq_idx); in imx415_set_fmt()
1138 __v4l2_ctrl_s_ctrl_int64(imx415->pixel_rate, in imx415_set_fmt()
1141 dev_info(&imx415->client->dev, "%s: mode->mipi_freq_idx(%d)", in imx415_set_fmt()
1144 mutex_unlock(&imx415->mutex); in imx415_set_fmt()
1153 struct imx415 *imx415 = to_imx415(sd); in imx415_get_fmt() local
1154 const struct imx415_mode *mode = imx415->cur_mode; in imx415_get_fmt()
1156 mutex_lock(&imx415->mutex); in imx415_get_fmt()
1161 mutex_unlock(&imx415->mutex); in imx415_get_fmt()
1174 mutex_unlock(&imx415->mutex); in imx415_get_fmt()
1183 struct imx415 *imx415 = to_imx415(sd); in imx415_enum_mbus_code() local
1185 if (code->index >= imx415->cfg_num) in imx415_enum_mbus_code()
1197 struct imx415 *imx415 = to_imx415(sd); in imx415_enum_frame_sizes() local
1199 if (fse->index >= imx415->cfg_num) in imx415_enum_frame_sizes()
1216 struct imx415 *imx415 = to_imx415(sd); in imx415_g_frame_interval() local
1217 const struct imx415_mode *mode = imx415->cur_mode; in imx415_g_frame_interval()
1227 struct imx415 *imx415 = to_imx415(sd); in imx415_g_mbus_config() local
1228 const struct imx415_mode *mode = imx415->cur_mode; in imx415_g_mbus_config()
1244 static void imx415_get_module_inf(struct imx415 *imx415, in imx415_get_module_inf() argument
1249 strlcpy(inf->base.module, imx415->module_name, in imx415_get_module_inf()
1251 strlcpy(inf->base.lens, imx415->len_name, sizeof(inf->base.lens)); in imx415_get_module_inf()
1254 static int imx415_set_hdrae_3frame(struct imx415 *imx415, in imx415_set_hdrae_3frame() argument
1257 struct i2c_client *client = imx415->client; in imx415_set_hdrae_3frame()
1269 if (!imx415->has_init_exp && !imx415->streaming) { in imx415_set_hdrae_3frame()
1270 imx415->init_hdrae_exp = *ae; in imx415_set_hdrae_3frame()
1271 imx415->has_init_exp = true; in imx415_set_hdrae_3frame()
1272 dev_dbg(&imx415->client->dev, "imx415 is not streaming, save hdr ae!\n"); in imx415_set_hdrae_3frame()
1335 fsc = imx415->cur_vts; in imx415_set_hdrae_3frame()
1343 if (imx415->cur_mode->height == 2192) in imx415_set_hdrae_3frame()
1356 if (imx415->cur_mode->height == 2192) in imx415_set_hdrae_3frame()
1396 if (imx415->cur_mode->height == 2192) in imx415_set_hdrae_3frame()
1510 static int imx415_set_hdrae(struct imx415 *imx415, in imx415_set_hdrae() argument
1513 struct i2c_client *client = imx415->client; in imx415_set_hdrae()
1521 if (!imx415->has_init_exp && !imx415->streaming) { in imx415_set_hdrae()
1522 imx415->init_hdrae_exp = *ae; in imx415_set_hdrae()
1523 imx415->has_init_exp = true; in imx415_set_hdrae()
1524 dev_dbg(&imx415->client->dev, "imx415 is not streaming, save hdr ae!\n"); in imx415_set_hdrae()
1538 if (imx415->cur_mode->hdr_mode == HDR_X2) { in imx415_set_hdrae()
1578 fsc = imx415->cur_vts; in imx415_set_hdrae()
1581 if (imx415->cur_mode->height == 2192) { in imx415_set_hdrae()
1669 static int imx415_get_channel_info(struct imx415 *imx415, struct rkmodule_channel_info *ch_info) in imx415_get_channel_info() argument
1673 ch_info->vc = imx415->cur_mode->vc[ch_info->index]; in imx415_get_channel_info()
1674 ch_info->width = imx415->cur_mode->width; in imx415_get_channel_info()
1675 ch_info->height = imx415->cur_mode->height; in imx415_get_channel_info()
1676 ch_info->bus_fmt = imx415->cur_mode->bus_fmt; in imx415_get_channel_info()
1682 struct imx415 *imx415 = to_imx415(sd); in imx415_ioctl() local
1693 if (imx415->cur_mode->hdr_mode == HDR_X2) in imx415_ioctl()
1694 ret = imx415_set_hdrae(imx415, arg); in imx415_ioctl()
1695 else if (imx415->cur_mode->hdr_mode == HDR_X3) in imx415_ioctl()
1696 ret = imx415_set_hdrae_3frame(imx415, arg); in imx415_ioctl()
1699 imx415_get_module_inf(imx415, (struct rkmodule_inf *)arg); in imx415_ioctl()
1704 hdr->hdr_mode = imx415->cur_mode->hdr_mode; in imx415_ioctl()
1708 w = imx415->cur_mode->width; in imx415_ioctl()
1709 h = imx415->cur_mode->height; in imx415_ioctl()
1710 for (i = 0; i < imx415->cfg_num; i++) { in imx415_ioctl()
1714 imx415_change_mode(imx415, &supported_modes[i]); in imx415_ioctl()
1718 if (i == imx415->cfg_num) { in imx415_ioctl()
1719 dev_err(&imx415->client->dev, in imx415_ioctl()
1724 mode = imx415->cur_mode; in imx415_ioctl()
1725 if (imx415->streaming) { in imx415_ioctl()
1726 ret = imx415_write_reg(imx415->client, IMX415_GROUP_HOLD_REG, in imx415_ioctl()
1729 ret |= imx415_write_array(imx415->client, imx415->cur_mode->reg_list); in imx415_ioctl()
1731 ret |= imx415_write_reg(imx415->client, IMX415_GROUP_HOLD_REG, in imx415_ioctl()
1736 w = mode->hts_def - imx415->cur_mode->width; in imx415_ioctl()
1738 mutex_lock(&imx415->mutex); in imx415_ioctl()
1739 __v4l2_ctrl_modify_range(imx415->hblank, w, w, 1, w); in imx415_ioctl()
1740 __v4l2_ctrl_modify_range(imx415->vblank, h, in imx415_ioctl()
1743 __v4l2_ctrl_s_ctrl(imx415->link_freq, mode->mipi_freq_idx); in imx415_ioctl()
1745 __v4l2_ctrl_s_ctrl_int64(imx415->pixel_rate, in imx415_ioctl()
1747 mutex_unlock(&imx415->mutex); in imx415_ioctl()
1755 ret = imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, in imx415_ioctl()
1758 ret = imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, in imx415_ioctl()
1762 if (imx415->cur_mode->width == 3864 && imx415->cur_mode->height == 2192) in imx415_ioctl()
1769 ret = imx415_get_channel_info(imx415, ch_info); in imx415_ioctl()
1772 if (imx415->cur_mode->hdr_mode == HDR_X2) { in imx415_ioctl()
1776 dev_info(&imx415->client->dev, in imx415_ioctl()
1932 static int __imx415_start_stream(struct imx415 *imx415) in __imx415_start_stream() argument
1936 if (!imx415->is_thunderboot) { in __imx415_start_stream()
1937 ret = imx415_write_array(imx415->client, imx415->cur_mode->global_reg_list); in __imx415_start_stream()
1940 ret = imx415_write_array(imx415->client, imx415->cur_mode->reg_list); in __imx415_start_stream()
1946 ret = __v4l2_ctrl_handler_setup(&imx415->ctrl_handler); in __imx415_start_stream()
1949 if (imx415->has_init_exp && imx415->cur_mode->hdr_mode != NO_HDR) { in __imx415_start_stream()
1950 ret = imx415_ioctl(&imx415->subdev, PREISP_CMD_SET_HDRAE_EXP, in __imx415_start_stream()
1951 &imx415->init_hdrae_exp); in __imx415_start_stream()
1953 dev_err(&imx415->client->dev, in __imx415_start_stream()
1958 return imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, in __imx415_start_stream()
1962 static int __imx415_stop_stream(struct imx415 *imx415) in __imx415_stop_stream() argument
1964 imx415->has_init_exp = false; in __imx415_stop_stream()
1965 if (imx415->is_thunderboot) in __imx415_stop_stream()
1966 imx415->is_first_streamoff = true; in __imx415_stop_stream()
1967 return imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, in __imx415_stop_stream()
1973 struct imx415 *imx415 = to_imx415(sd); in imx415_s_stream() local
1974 struct i2c_client *client = imx415->client; in imx415_s_stream()
1977 dev_info(&imx415->client->dev, "s_stream: %d. %dx%d, hdr: %d, bpp: %d\n", in imx415_s_stream()
1978 on, imx415->cur_mode->width, imx415->cur_mode->height, in imx415_s_stream()
1979 imx415->cur_mode->hdr_mode, imx415->cur_mode->bpp); in imx415_s_stream()
1981 mutex_lock(&imx415->mutex); in imx415_s_stream()
1983 if (on == imx415->streaming) in imx415_s_stream()
1987 if (imx415->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in imx415_s_stream()
1988 imx415->is_thunderboot = false; in imx415_s_stream()
1989 __imx415_power_on(imx415); in imx415_s_stream()
1997 ret = __imx415_start_stream(imx415); in imx415_s_stream()
2004 __imx415_stop_stream(imx415); in imx415_s_stream()
2008 imx415->streaming = on; in imx415_s_stream()
2011 mutex_unlock(&imx415->mutex); in imx415_s_stream()
2018 struct imx415 *imx415 = to_imx415(sd); in imx415_s_power() local
2019 struct i2c_client *client = imx415->client; in imx415_s_power()
2022 mutex_lock(&imx415->mutex); in imx415_s_power()
2024 if (imx415->power_on == !!on) in imx415_s_power()
2033 imx415->power_on = true; in imx415_s_power()
2036 imx415->power_on = false; in imx415_s_power()
2040 mutex_unlock(&imx415->mutex); in imx415_s_power()
2045 int __imx415_power_on(struct imx415 *imx415) in __imx415_power_on() argument
2048 struct device *dev = &imx415->client->dev; in __imx415_power_on()
2050 if (imx415->is_thunderboot) in __imx415_power_on()
2053 if (!IS_ERR_OR_NULL(imx415->pins_default)) { in __imx415_power_on()
2054 ret = pinctrl_select_state(imx415->pinctrl, in __imx415_power_on()
2055 imx415->pins_default); in __imx415_power_on()
2060 ret = regulator_bulk_enable(IMX415_NUM_SUPPLIES, imx415->supplies); in __imx415_power_on()
2065 if (!IS_ERR(imx415->power_gpio)) in __imx415_power_on()
2066 gpiod_direction_output(imx415->power_gpio, 1); in __imx415_power_on()
2070 if (!IS_ERR(imx415->reset_gpio)) in __imx415_power_on()
2071 gpiod_direction_output(imx415->reset_gpio, 0); in __imx415_power_on()
2076 ret = clk_set_rate(imx415->xvclk, IMX415_XVCLK_FREQ_37M); in __imx415_power_on()
2079 if (clk_get_rate(imx415->xvclk) != IMX415_XVCLK_FREQ_37M) in __imx415_power_on()
2081 ret = clk_prepare_enable(imx415->xvclk); in __imx415_power_on()
2093 if (!IS_ERR(imx415->reset_gpio)) in __imx415_power_on()
2094 gpiod_direction_output(imx415->reset_gpio, 1); in __imx415_power_on()
2095 regulator_bulk_disable(IMX415_NUM_SUPPLIES, imx415->supplies); in __imx415_power_on()
2098 if (!IS_ERR_OR_NULL(imx415->pins_sleep)) in __imx415_power_on()
2099 pinctrl_select_state(imx415->pinctrl, imx415->pins_sleep); in __imx415_power_on()
2104 static void __imx415_power_off(struct imx415 *imx415) in __imx415_power_off() argument
2107 struct device *dev = &imx415->client->dev; in __imx415_power_off()
2109 if (imx415->is_thunderboot) { in __imx415_power_off()
2110 if (imx415->is_first_streamoff) { in __imx415_power_off()
2111 imx415->is_thunderboot = false; in __imx415_power_off()
2112 imx415->is_first_streamoff = false; in __imx415_power_off()
2118 if (!IS_ERR(imx415->reset_gpio)) in __imx415_power_off()
2119 gpiod_direction_output(imx415->reset_gpio, 1); in __imx415_power_off()
2120 clk_disable_unprepare(imx415->xvclk); in __imx415_power_off()
2121 if (!IS_ERR_OR_NULL(imx415->pins_sleep)) { in __imx415_power_off()
2122 ret = pinctrl_select_state(imx415->pinctrl, in __imx415_power_off()
2123 imx415->pins_sleep); in __imx415_power_off()
2127 if (!IS_ERR(imx415->power_gpio)) in __imx415_power_off()
2128 gpiod_direction_output(imx415->power_gpio, 0); in __imx415_power_off()
2129 regulator_bulk_disable(IMX415_NUM_SUPPLIES, imx415->supplies); in __imx415_power_off()
2136 struct imx415 *imx415 = to_imx415(sd); in imx415_runtime_resume() local
2138 return __imx415_power_on(imx415); in imx415_runtime_resume()
2145 struct imx415 *imx415 = to_imx415(sd); in imx415_runtime_suspend() local
2147 __imx415_power_off(imx415); in imx415_runtime_suspend()
2155 struct imx415 *imx415 = to_imx415(sd); in imx415_open() local
2160 mutex_lock(&imx415->mutex); in imx415_open()
2167 mutex_unlock(&imx415->mutex); in imx415_open()
2178 struct imx415 *imx415 = to_imx415(sd); in imx415_enum_frame_interval() local
2180 if (fie->index >= imx415->cfg_num) in imx415_enum_frame_interval()
2210 struct imx415 *imx415 = to_imx415(sd); in imx415_get_selection() local
2213 if (imx415->cur_mode->width == 3864) { in imx415_get_selection()
2214 sel->r.left = CROP_START(imx415->cur_mode->width, DST_WIDTH_3840); in imx415_get_selection()
2216 sel->r.top = CROP_START(imx415->cur_mode->height, DST_HEIGHT_2160); in imx415_get_selection()
2218 } else if (imx415->cur_mode->width == 1944) { in imx415_get_selection()
2219 sel->r.left = CROP_START(imx415->cur_mode->width, DST_WIDTH_1920); in imx415_get_selection()
2221 sel->r.top = CROP_START(imx415->cur_mode->height, DST_HEIGHT_1080); in imx415_get_selection()
2224 sel->r.left = CROP_START(imx415->cur_mode->width, imx415->cur_mode->width); in imx415_get_selection()
2225 sel->r.width = imx415->cur_mode->width; in imx415_get_selection()
2226 sel->r.top = CROP_START(imx415->cur_mode->height, imx415->cur_mode->height); in imx415_get_selection()
2227 sel->r.height = imx415->cur_mode->height; in imx415_get_selection()
2276 struct imx415 *imx415 = container_of(ctrl->handler, in imx415_set_ctrl() local
2277 struct imx415, ctrl_handler); in imx415_set_ctrl()
2278 struct i2c_client *client = imx415->client; in imx415_set_ctrl()
2287 if (imx415->cur_mode->hdr_mode == NO_HDR) { in imx415_set_ctrl()
2289 max = imx415->cur_mode->height + ctrl->val - 8; in imx415_set_ctrl()
2290 __v4l2_ctrl_modify_range(imx415->exposure, in imx415_set_ctrl()
2291 imx415->exposure->minimum, max, in imx415_set_ctrl()
2292 imx415->exposure->step, in imx415_set_ctrl()
2293 imx415->exposure->default_value); in imx415_set_ctrl()
2303 if (imx415->cur_mode->hdr_mode != NO_HDR) in imx415_set_ctrl()
2305 shr0 = imx415->cur_vts - ctrl->val; in imx415_set_ctrl()
2306 ret = imx415_write_reg(imx415->client, IMX415_LF_EXPO_REG_L, in imx415_set_ctrl()
2309 ret |= imx415_write_reg(imx415->client, IMX415_LF_EXPO_REG_M, in imx415_set_ctrl()
2312 ret |= imx415_write_reg(imx415->client, IMX415_LF_EXPO_REG_H, in imx415_set_ctrl()
2316 shr0, imx415->cur_vts, ctrl->val); in imx415_set_ctrl()
2319 if (imx415->cur_mode->hdr_mode != NO_HDR) in imx415_set_ctrl()
2321 ret = imx415_write_reg(imx415->client, IMX415_LF_GAIN_REG_H, in imx415_set_ctrl()
2324 ret |= imx415_write_reg(imx415->client, IMX415_LF_GAIN_REG_L, in imx415_set_ctrl()
2331 vts = ctrl->val + imx415->cur_mode->height; in imx415_set_ctrl()
2336 if (imx415->cur_mode->hdr_mode == HDR_X2) { in imx415_set_ctrl()
2338 imx415->cur_vts = vts; in imx415_set_ctrl()
2340 } else if (imx415->cur_mode->hdr_mode == HDR_X3) { in imx415_set_ctrl()
2342 imx415->cur_vts = vts; in imx415_set_ctrl()
2345 imx415->cur_vts = vts; in imx415_set_ctrl()
2347 ret = imx415_write_reg(imx415->client, IMX415_VTS_REG_L, in imx415_set_ctrl()
2350 ret |= imx415_write_reg(imx415->client, IMX415_VTS_REG_M, in imx415_set_ctrl()
2353 ret |= imx415_write_reg(imx415->client, IMX415_VTS_REG_H, in imx415_set_ctrl()
2360 ret = imx415_read_reg(imx415->client, IMX415_FLIP_REG, in imx415_set_ctrl()
2368 ret = imx415_write_reg(imx415->client, IMX415_FLIP_REG, in imx415_set_ctrl()
2372 ret = imx415_read_reg(imx415->client, IMX415_FLIP_REG, in imx415_set_ctrl()
2380 ret = imx415_write_reg(imx415->client, IMX415_FLIP_REG, in imx415_set_ctrl()
2399 static int imx415_initialize_controls(struct imx415 *imx415) in imx415_initialize_controls() argument
2408 handler = &imx415->ctrl_handler; in imx415_initialize_controls()
2409 mode = imx415->cur_mode; in imx415_initialize_controls()
2413 handler->lock = &imx415->mutex; in imx415_initialize_controls()
2415 imx415->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in imx415_initialize_controls()
2419 v4l2_ctrl_s_ctrl(imx415->link_freq, mode->mipi_freq_idx); in imx415_initialize_controls()
2423 imx415->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in imx415_initialize_controls()
2428 imx415->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in imx415_initialize_controls()
2430 if (imx415->hblank) in imx415_initialize_controls()
2431 imx415->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in imx415_initialize_controls()
2434 imx415->vblank = v4l2_ctrl_new_std(handler, &imx415_ctrl_ops, in imx415_initialize_controls()
2438 imx415->cur_vts = mode->vts_def; in imx415_initialize_controls()
2441 imx415->exposure = v4l2_ctrl_new_std(handler, &imx415_ctrl_ops, in imx415_initialize_controls()
2446 imx415->anal_a_gain = v4l2_ctrl_new_std(handler, &imx415_ctrl_ops, in imx415_initialize_controls()
2456 dev_err(&imx415->client->dev, in imx415_initialize_controls()
2461 imx415->subdev.ctrl_handler = handler; in imx415_initialize_controls()
2462 imx415->has_init_exp = false; in imx415_initialize_controls()
2472 static int imx415_check_sensor_id(struct imx415 *imx415, in imx415_check_sensor_id() argument
2475 struct device *dev = &imx415->client->dev; in imx415_check_sensor_id()
2479 if (imx415->is_thunderboot) { in imx415_check_sensor_id()
2496 static int imx415_configure_regulators(struct imx415 *imx415) in imx415_configure_regulators() argument
2501 imx415->supplies[i].supply = imx415_supply_names[i]; in imx415_configure_regulators()
2503 return devm_regulator_bulk_get(&imx415->client->dev, in imx415_configure_regulators()
2505 imx415->supplies); in imx415_configure_regulators()
2513 struct imx415 *imx415; in imx415_probe() local
2524 imx415 = devm_kzalloc(dev, sizeof(*imx415), GFP_KERNEL); in imx415_probe()
2525 if (!imx415) in imx415_probe()
2529 &imx415->module_index); in imx415_probe()
2531 &imx415->module_facing); in imx415_probe()
2533 &imx415->module_name); in imx415_probe()
2535 &imx415->len_name); in imx415_probe()
2546 imx415->client = client; in imx415_probe()
2547 imx415->cfg_num = ARRAY_SIZE(supported_modes); in imx415_probe()
2548 for (i = 0; i < imx415->cfg_num; i++) { in imx415_probe()
2550 imx415->cur_mode = &supported_modes[i]; in imx415_probe()
2555 imx415->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in imx415_probe()
2557 imx415->xvclk = devm_clk_get(dev, "xvclk"); in imx415_probe()
2558 if (IS_ERR(imx415->xvclk)) { in imx415_probe()
2563 imx415->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in imx415_probe()
2564 if (IS_ERR(imx415->reset_gpio)) in imx415_probe()
2566 imx415->power_gpio = devm_gpiod_get(dev, "power", GPIOD_ASIS); in imx415_probe()
2567 if (IS_ERR(imx415->power_gpio)) in imx415_probe()
2569 imx415->pinctrl = devm_pinctrl_get(dev); in imx415_probe()
2570 if (!IS_ERR(imx415->pinctrl)) { in imx415_probe()
2571 imx415->pins_default = in imx415_probe()
2572 pinctrl_lookup_state(imx415->pinctrl, in imx415_probe()
2574 if (IS_ERR(imx415->pins_default)) in imx415_probe()
2577 imx415->pins_sleep = in imx415_probe()
2578 pinctrl_lookup_state(imx415->pinctrl, in imx415_probe()
2580 if (IS_ERR(imx415->pins_sleep)) in imx415_probe()
2586 ret = imx415_configure_regulators(imx415); in imx415_probe()
2592 mutex_init(&imx415->mutex); in imx415_probe()
2594 sd = &imx415->subdev; in imx415_probe()
2596 ret = imx415_initialize_controls(imx415); in imx415_probe()
2600 ret = __imx415_power_on(imx415); in imx415_probe()
2604 ret = imx415_check_sensor_id(imx415, client); in imx415_probe()
2614 imx415->pad.flags = MEDIA_PAD_FL_SOURCE; in imx415_probe()
2616 ret = media_entity_pads_init(&sd->entity, 1, &imx415->pad); in imx415_probe()
2622 if (strcmp(imx415->module_facing, "back") == 0) in imx415_probe()
2628 imx415->module_index, facing, in imx415_probe()
2647 __imx415_power_off(imx415); in imx415_probe()
2649 v4l2_ctrl_handler_free(&imx415->ctrl_handler); in imx415_probe()
2651 mutex_destroy(&imx415->mutex); in imx415_probe()
2659 struct imx415 *imx415 = to_imx415(sd); in imx415_remove() local
2665 v4l2_ctrl_handler_free(&imx415->ctrl_handler); in imx415_remove()
2666 mutex_destroy(&imx415->mutex); in imx415_remove()
2670 __imx415_power_off(imx415); in imx415_remove()