Lines Matching refs:sc200ai
148 struct sc200ai { struct
184 #define to_sc200ai(sd) container_of(sd, struct sc200ai, subdev) argument
747 static int sc200ai_set_gain_reg(struct sc200ai *sc200ai, u32 gain, int mode) in sc200ai_set_gain_reg() argument
856 ret = sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
860 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
864 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
868 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
873 ret = sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
877 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
881 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
885 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
892 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
897 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_gain_reg()
905 static int sc200ai_set_hdrae(struct sc200ai *sc200ai, in sc200ai_set_hdrae() argument
912 if (!sc200ai->has_init_exp && !sc200ai->streaming) { in sc200ai_set_hdrae()
913 sc200ai->init_hdrae_exp = *ae; in sc200ai_set_hdrae()
914 sc200ai->has_init_exp = true; in sc200ai_set_hdrae()
915 dev_dbg(&sc200ai->client->dev, "sc200ai don't stream, record exp for hdr!\n"); in sc200ai_set_hdrae()
925 dev_dbg(&sc200ai->client->dev, in sc200ai_set_hdrae()
930 if (sc200ai->cur_mode->hdr_mode == HDR_X2) { in sc200ai_set_hdrae()
944 ret = sc200ai_write_reg(sc200ai->client, in sc200ai_set_hdrae()
948 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_hdrae()
952 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_hdrae()
956 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_hdrae()
960 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_hdrae()
965 ret |= sc200ai_set_gain_reg(sc200ai, l_a_gain, SC200AI_LGAIN); in sc200ai_set_hdrae()
966 ret |= sc200ai_set_gain_reg(sc200ai, s_a_gain, SC200AI_SGAIN); in sc200ai_set_hdrae()
1001 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_set_fmt() local
1005 mutex_lock(&sc200ai->mutex); in sc200ai_set_fmt()
1016 mutex_unlock(&sc200ai->mutex); in sc200ai_set_fmt()
1020 sc200ai->cur_mode = mode; in sc200ai_set_fmt()
1022 __v4l2_ctrl_modify_range(sc200ai->hblank, h_blank, in sc200ai_set_fmt()
1025 __v4l2_ctrl_modify_range(sc200ai->vblank, vblank_def, in sc200ai_set_fmt()
1028 sc200ai->cur_fps = mode->max_fps; in sc200ai_set_fmt()
1029 sc200ai->cur_vts = mode->vts_def; in sc200ai_set_fmt()
1032 mutex_unlock(&sc200ai->mutex); in sc200ai_set_fmt()
1041 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_get_fmt() local
1042 const struct sc200ai_mode *mode = sc200ai->cur_mode; in sc200ai_get_fmt()
1044 mutex_lock(&sc200ai->mutex); in sc200ai_get_fmt()
1049 mutex_unlock(&sc200ai->mutex); in sc200ai_get_fmt()
1063 mutex_unlock(&sc200ai->mutex); in sc200ai_get_fmt()
1072 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_enum_mbus_code() local
1076 code->code = sc200ai->cur_mode->bus_fmt; in sc200ai_enum_mbus_code()
1099 static int sc200ai_enable_test_pattern(struct sc200ai *sc200ai, u32 pattern) in sc200ai_enable_test_pattern() argument
1104 ret = sc200ai_read_reg(sc200ai->client, SC200AI_REG_TEST_PATTERN, in sc200ai_enable_test_pattern()
1111 ret |= sc200ai_write_reg(sc200ai->client, SC200AI_REG_TEST_PATTERN, in sc200ai_enable_test_pattern()
1119 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_g_frame_interval() local
1120 const struct sc200ai_mode *mode = sc200ai->cur_mode; in sc200ai_g_frame_interval()
1122 if (sc200ai->streaming) in sc200ai_g_frame_interval()
1123 fi->interval = sc200ai->cur_fps; in sc200ai_g_frame_interval()
1133 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_g_mbus_config() local
1134 const struct sc200ai_mode *mode = sc200ai->cur_mode; in sc200ai_g_mbus_config()
1150 static void sc200ai_get_module_inf(struct sc200ai *sc200ai, in sc200ai_get_module_inf() argument
1155 strlcpy(inf->base.module, sc200ai->module_name, in sc200ai_get_module_inf()
1157 strlcpy(inf->base.lens, sc200ai->len_name, sizeof(inf->base.lens)); in sc200ai_get_module_inf()
1160 static int sc200ai_get_channel_info(struct sc200ai *sc200ai, struct rkmodule_channel_info *ch_info) in sc200ai_get_channel_info() argument
1164 ch_info->vc = sc200ai->cur_mode->vc[ch_info->index]; in sc200ai_get_channel_info()
1165 ch_info->width = sc200ai->cur_mode->width; in sc200ai_get_channel_info()
1166 ch_info->height = sc200ai->cur_mode->height; in sc200ai_get_channel_info()
1167 ch_info->bus_fmt = sc200ai->cur_mode->bus_fmt; in sc200ai_get_channel_info()
1173 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_ioctl() local
1182 sc200ai_get_module_inf(sc200ai, (struct rkmodule_inf *)arg); in sc200ai_ioctl()
1187 hdr->hdr_mode = sc200ai->cur_mode->hdr_mode; in sc200ai_ioctl()
1191 w = sc200ai->cur_mode->width; in sc200ai_ioctl()
1192 h = sc200ai->cur_mode->height; in sc200ai_ioctl()
1197 sc200ai->cur_mode = &supported_modes[i]; in sc200ai_ioctl()
1202 dev_err(&sc200ai->client->dev, in sc200ai_ioctl()
1207 w = sc200ai->cur_mode->hts_def - sc200ai->cur_mode->width; in sc200ai_ioctl()
1208 h = sc200ai->cur_mode->vts_def - sc200ai->cur_mode->height; in sc200ai_ioctl()
1209 __v4l2_ctrl_modify_range(sc200ai->hblank, w, w, 1, w); in sc200ai_ioctl()
1210 __v4l2_ctrl_modify_range(sc200ai->vblank, h, in sc200ai_ioctl()
1211 SC200AI_VTS_MAX - sc200ai->cur_mode->height, 1, h); in sc200ai_ioctl()
1212 sc200ai->cur_fps = sc200ai->cur_mode->max_fps; in sc200ai_ioctl()
1213 sc200ai->cur_vts = sc200ai->cur_mode->vts_def; in sc200ai_ioctl()
1217 sc200ai_set_hdrae(sc200ai, arg); in sc200ai_ioctl()
1224 ret = sc200ai_write_reg(sc200ai->client, SC200AI_REG_CTRL_MODE, in sc200ai_ioctl()
1227 ret = sc200ai_write_reg(sc200ai->client, SC200AI_REG_CTRL_MODE, in sc200ai_ioctl()
1232 ret = sc200ai_get_channel_info(sc200ai, ch_info); in sc200ai_ioctl()
1359 static int __sc200ai_start_stream(struct sc200ai *sc200ai) in __sc200ai_start_stream() argument
1363 dev_info(&sc200ai->client->dev, in __sc200ai_start_stream()
1365 sc200ai->cur_mode->width, in __sc200ai_start_stream()
1366 sc200ai->cur_mode->height, in __sc200ai_start_stream()
1367 sc200ai->cur_fps.denominator / sc200ai->cur_fps.numerator, in __sc200ai_start_stream()
1368 sc200ai->cur_mode->hdr_mode, in __sc200ai_start_stream()
1369 sc200ai->cur_vts); in __sc200ai_start_stream()
1370 if (!sc200ai->is_thunderboot) { in __sc200ai_start_stream()
1371 ret = sc200ai_write_array(sc200ai->client, sc200ai->cur_mode->reg_list); in __sc200ai_start_stream()
1376 ret = __v4l2_ctrl_handler_setup(&sc200ai->ctrl_handler); in __sc200ai_start_stream()
1379 if (sc200ai->has_init_exp && sc200ai->cur_mode->hdr_mode != NO_HDR) { in __sc200ai_start_stream()
1380 ret = sc200ai_ioctl(&sc200ai->subdev, PREISP_CMD_SET_HDRAE_EXP, in __sc200ai_start_stream()
1381 &sc200ai->init_hdrae_exp); in __sc200ai_start_stream()
1383 dev_err(&sc200ai->client->dev, in __sc200ai_start_stream()
1390 return sc200ai_write_reg(sc200ai->client, SC200AI_REG_CTRL_MODE, in __sc200ai_start_stream()
1394 static int __sc200ai_stop_stream(struct sc200ai *sc200ai) in __sc200ai_stop_stream() argument
1396 sc200ai->has_init_exp = false; in __sc200ai_stop_stream()
1397 if (sc200ai->is_thunderboot) { in __sc200ai_stop_stream()
1398 sc200ai->is_first_streamoff = true; in __sc200ai_stop_stream()
1399 pm_runtime_put(&sc200ai->client->dev); in __sc200ai_stop_stream()
1401 return sc200ai_write_reg(sc200ai->client, SC200AI_REG_CTRL_MODE, in __sc200ai_stop_stream()
1405 static int __sc200ai_power_on(struct sc200ai *sc200ai);
1408 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_s_stream() local
1409 struct i2c_client *client = sc200ai->client; in sc200ai_s_stream()
1412 mutex_lock(&sc200ai->mutex); in sc200ai_s_stream()
1414 if (on == sc200ai->streaming) in sc200ai_s_stream()
1418 if (sc200ai->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in sc200ai_s_stream()
1419 sc200ai->is_thunderboot = false; in sc200ai_s_stream()
1420 __sc200ai_power_on(sc200ai); in sc200ai_s_stream()
1428 ret = __sc200ai_start_stream(sc200ai); in sc200ai_s_stream()
1435 __sc200ai_stop_stream(sc200ai); in sc200ai_s_stream()
1439 sc200ai->streaming = on; in sc200ai_s_stream()
1442 mutex_unlock(&sc200ai->mutex); in sc200ai_s_stream()
1449 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_s_power() local
1450 struct i2c_client *client = sc200ai->client; in sc200ai_s_power()
1453 mutex_lock(&sc200ai->mutex); in sc200ai_s_power()
1456 if (sc200ai->power_on == !!on) in sc200ai_s_power()
1466 if (!sc200ai->is_thunderboot) { in sc200ai_s_power()
1467 ret = sc200ai_write_array(sc200ai->client, sc200ai_global_regs); in sc200ai_s_power()
1475 sc200ai->power_on = true; in sc200ai_s_power()
1478 sc200ai->power_on = false; in sc200ai_s_power()
1482 mutex_unlock(&sc200ai->mutex); in sc200ai_s_power()
1493 static int __sc200ai_power_on(struct sc200ai *sc200ai) in __sc200ai_power_on() argument
1497 struct device *dev = &sc200ai->client->dev; in __sc200ai_power_on()
1499 if (!IS_ERR_OR_NULL(sc200ai->pins_default)) { in __sc200ai_power_on()
1500 ret = pinctrl_select_state(sc200ai->pinctrl, in __sc200ai_power_on()
1501 sc200ai->pins_default); in __sc200ai_power_on()
1505 ret = clk_set_rate(sc200ai->xvclk, SC200AI_XVCLK_FREQ); in __sc200ai_power_on()
1508 if (clk_get_rate(sc200ai->xvclk) != SC200AI_XVCLK_FREQ) in __sc200ai_power_on()
1510 ret = clk_prepare_enable(sc200ai->xvclk); in __sc200ai_power_on()
1515 if (sc200ai->is_thunderboot) in __sc200ai_power_on()
1518 if (!IS_ERR(sc200ai->reset_gpio)) in __sc200ai_power_on()
1519 gpiod_set_value_cansleep(sc200ai->reset_gpio, 0); in __sc200ai_power_on()
1521 ret = regulator_bulk_enable(SC200AI_NUM_SUPPLIES, sc200ai->supplies); in __sc200ai_power_on()
1527 if (!IS_ERR(sc200ai->reset_gpio)) in __sc200ai_power_on()
1528 gpiod_set_value_cansleep(sc200ai->reset_gpio, 1); in __sc200ai_power_on()
1531 if (!IS_ERR(sc200ai->pwdn_gpio)) in __sc200ai_power_on()
1532 gpiod_set_value_cansleep(sc200ai->pwdn_gpio, 1); in __sc200ai_power_on()
1534 if (!IS_ERR(sc200ai->reset_gpio)) in __sc200ai_power_on()
1546 clk_disable_unprepare(sc200ai->xvclk); in __sc200ai_power_on()
1551 static void __sc200ai_power_off(struct sc200ai *sc200ai) in __sc200ai_power_off() argument
1554 struct device *dev = &sc200ai->client->dev; in __sc200ai_power_off()
1556 clk_disable_unprepare(sc200ai->xvclk); in __sc200ai_power_off()
1557 if (sc200ai->is_thunderboot) { in __sc200ai_power_off()
1558 if (sc200ai->is_first_streamoff) { in __sc200ai_power_off()
1559 sc200ai->is_thunderboot = false; in __sc200ai_power_off()
1560 sc200ai->is_first_streamoff = false; in __sc200ai_power_off()
1565 if (!IS_ERR(sc200ai->pwdn_gpio)) in __sc200ai_power_off()
1566 gpiod_set_value_cansleep(sc200ai->pwdn_gpio, 0); in __sc200ai_power_off()
1567 clk_disable_unprepare(sc200ai->xvclk); in __sc200ai_power_off()
1568 if (!IS_ERR(sc200ai->reset_gpio)) in __sc200ai_power_off()
1569 gpiod_set_value_cansleep(sc200ai->reset_gpio, 0); in __sc200ai_power_off()
1570 if (!IS_ERR_OR_NULL(sc200ai->pins_sleep)) { in __sc200ai_power_off()
1571 ret = pinctrl_select_state(sc200ai->pinctrl, in __sc200ai_power_off()
1572 sc200ai->pins_sleep); in __sc200ai_power_off()
1576 regulator_bulk_disable(SC200AI_NUM_SUPPLIES, sc200ai->supplies); in __sc200ai_power_off()
1583 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_runtime_resume() local
1585 return __sc200ai_power_on(sc200ai); in sc200ai_runtime_resume()
1592 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_runtime_suspend() local
1594 __sc200ai_power_off(sc200ai); in sc200ai_runtime_suspend()
1602 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_open() local
1607 mutex_lock(&sc200ai->mutex); in sc200ai_open()
1614 mutex_unlock(&sc200ai->mutex); in sc200ai_open()
1675 static void sc200ai_modify_fps_info(struct sc200ai *sc200ai) in sc200ai_modify_fps_info() argument
1677 const struct sc200ai_mode *mode = sc200ai->cur_mode; in sc200ai_modify_fps_info()
1679 sc200ai->cur_fps.denominator = mode->max_fps.denominator * mode->vts_def/ in sc200ai_modify_fps_info()
1680 sc200ai->cur_vts; in sc200ai_modify_fps_info()
1685 struct sc200ai *sc200ai = container_of(ctrl->handler, in sc200ai_set_ctrl() local
1686 struct sc200ai, ctrl_handler); in sc200ai_set_ctrl()
1687 struct i2c_client *client = sc200ai->client; in sc200ai_set_ctrl()
1697 max = sc200ai->cur_mode->height + ctrl->val - 4; in sc200ai_set_ctrl()
1698 __v4l2_ctrl_modify_range(sc200ai->exposure, in sc200ai_set_ctrl()
1699 sc200ai->exposure->minimum, max, in sc200ai_set_ctrl()
1700 sc200ai->exposure->step, in sc200ai_set_ctrl()
1701 sc200ai->exposure->default_value); in sc200ai_set_ctrl()
1711 if (sc200ai->cur_mode->hdr_mode == NO_HDR) { in sc200ai_set_ctrl()
1714 ret = sc200ai_write_reg(sc200ai->client, in sc200ai_set_ctrl()
1718 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_ctrl()
1722 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_ctrl()
1730 if (sc200ai->cur_mode->hdr_mode == NO_HDR) in sc200ai_set_ctrl()
1731 ret = sc200ai_set_gain_reg(sc200ai, ctrl->val, SC200AI_LGAIN); in sc200ai_set_ctrl()
1735 ret = sc200ai_write_reg(sc200ai->client, in sc200ai_set_ctrl()
1738 (ctrl->val + sc200ai->cur_mode->height) in sc200ai_set_ctrl()
1740 ret |= sc200ai_write_reg(sc200ai->client, in sc200ai_set_ctrl()
1743 (ctrl->val + sc200ai->cur_mode->height) in sc200ai_set_ctrl()
1746 sc200ai->cur_vts = ctrl->val + sc200ai->cur_mode->height; in sc200ai_set_ctrl()
1747 sc200ai_modify_fps_info(sc200ai); in sc200ai_set_ctrl()
1750 ret = sc200ai_enable_test_pattern(sc200ai, ctrl->val); in sc200ai_set_ctrl()
1753 ret = sc200ai_read_reg(sc200ai->client, SC200AI_FLIP_MIRROR_REG, in sc200ai_set_ctrl()
1755 ret |= sc200ai_write_reg(sc200ai->client, SC200AI_FLIP_MIRROR_REG, in sc200ai_set_ctrl()
1760 ret = sc200ai_read_reg(sc200ai->client, SC200AI_FLIP_MIRROR_REG, in sc200ai_set_ctrl()
1762 ret |= sc200ai_write_reg(sc200ai->client, SC200AI_FLIP_MIRROR_REG, in sc200ai_set_ctrl()
1781 static int sc200ai_initialize_controls(struct sc200ai *sc200ai) in sc200ai_initialize_controls() argument
1790 handler = &sc200ai->ctrl_handler; in sc200ai_initialize_controls()
1791 mode = sc200ai->cur_mode; in sc200ai_initialize_controls()
1795 handler->lock = &sc200ai->mutex; in sc200ai_initialize_controls()
1806 sc200ai->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in sc200ai_initialize_controls()
1808 if (sc200ai->hblank) in sc200ai_initialize_controls()
1809 sc200ai->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in sc200ai_initialize_controls()
1810 sc200ai->cur_fps = mode->max_fps; in sc200ai_initialize_controls()
1812 sc200ai->cur_vts = mode->vts_def; in sc200ai_initialize_controls()
1813 sc200ai->vblank = v4l2_ctrl_new_std(handler, &sc200ai_ctrl_ops, in sc200ai_initialize_controls()
1818 sc200ai->exposure = v4l2_ctrl_new_std(handler, &sc200ai_ctrl_ops, in sc200ai_initialize_controls()
1822 sc200ai->anal_gain = v4l2_ctrl_new_std(handler, &sc200ai_ctrl_ops, in sc200ai_initialize_controls()
1826 sc200ai->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in sc200ai_initialize_controls()
1839 dev_err(&sc200ai->client->dev, in sc200ai_initialize_controls()
1844 sc200ai->subdev.ctrl_handler = handler; in sc200ai_initialize_controls()
1845 sc200ai->has_init_exp = false; in sc200ai_initialize_controls()
1855 static int sc200ai_check_sensor_id(struct sc200ai *sc200ai, in sc200ai_check_sensor_id() argument
1858 struct device *dev = &sc200ai->client->dev; in sc200ai_check_sensor_id()
1862 if (sc200ai->is_thunderboot) { in sc200ai_check_sensor_id()
1879 static int sc200ai_configure_regulators(struct sc200ai *sc200ai) in sc200ai_configure_regulators() argument
1884 sc200ai->supplies[i].supply = sc200ai_supply_names[i]; in sc200ai_configure_regulators()
1886 return devm_regulator_bulk_get(&sc200ai->client->dev, in sc200ai_configure_regulators()
1888 sc200ai->supplies); in sc200ai_configure_regulators()
1954 static void find_terminal_resolution(struct sc200ai *sc200ai) in find_terminal_resolution() argument
1974 sc200ai->cur_mode = mode; in find_terminal_resolution()
1989 sc200ai->cur_mode = fit_mode; in find_terminal_resolution()
1993 dev_err(&sc200ai->client->dev, "not match %dx%d@%dfps mode %d\n!", in find_terminal_resolution()
1995 sc200ai->cur_mode = &supported_modes[0]; in find_terminal_resolution()
1998 static void find_terminal_resolution(struct sc200ai *sc200ai) in find_terminal_resolution() argument
2001 struct device_node *node = sc200ai->client->dev.of_node; in find_terminal_resolution()
2007 sc200ai->cur_mode = &supported_modes[i]; in find_terminal_resolution()
2012 sc200ai->cur_mode = &supported_modes[0]; in find_terminal_resolution()
2022 struct sc200ai *sc200ai; in sc200ai_probe() local
2032 sc200ai = devm_kzalloc(dev, sizeof(*sc200ai), GFP_KERNEL); in sc200ai_probe()
2033 if (!sc200ai) in sc200ai_probe()
2037 &sc200ai->module_index); in sc200ai_probe()
2039 &sc200ai->module_facing); in sc200ai_probe()
2041 &sc200ai->module_name); in sc200ai_probe()
2043 &sc200ai->len_name); in sc200ai_probe()
2049 sc200ai->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in sc200ai_probe()
2050 sc200ai->client = client; in sc200ai_probe()
2052 find_terminal_resolution(sc200ai); in sc200ai_probe()
2054 sc200ai->xvclk = devm_clk_get(dev, "xvclk"); in sc200ai_probe()
2055 if (IS_ERR(sc200ai->xvclk)) { in sc200ai_probe()
2060 sc200ai->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in sc200ai_probe()
2061 if (IS_ERR(sc200ai->reset_gpio)) in sc200ai_probe()
2064 sc200ai->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in sc200ai_probe()
2065 if (IS_ERR(sc200ai->pwdn_gpio)) in sc200ai_probe()
2068 sc200ai->pinctrl = devm_pinctrl_get(dev); in sc200ai_probe()
2069 if (!IS_ERR(sc200ai->pinctrl)) { in sc200ai_probe()
2070 sc200ai->pins_default = in sc200ai_probe()
2071 pinctrl_lookup_state(sc200ai->pinctrl, in sc200ai_probe()
2073 if (IS_ERR(sc200ai->pins_default)) in sc200ai_probe()
2076 sc200ai->pins_sleep = in sc200ai_probe()
2077 pinctrl_lookup_state(sc200ai->pinctrl, in sc200ai_probe()
2079 if (IS_ERR(sc200ai->pins_sleep)) in sc200ai_probe()
2085 ret = sc200ai_configure_regulators(sc200ai); in sc200ai_probe()
2091 mutex_init(&sc200ai->mutex); in sc200ai_probe()
2093 sd = &sc200ai->subdev; in sc200ai_probe()
2095 ret = sc200ai_initialize_controls(sc200ai); in sc200ai_probe()
2099 ret = __sc200ai_power_on(sc200ai); in sc200ai_probe()
2103 ret = sc200ai_check_sensor_id(sc200ai, client); in sc200ai_probe()
2113 sc200ai->pad.flags = MEDIA_PAD_FL_SOURCE; in sc200ai_probe()
2115 ret = media_entity_pads_init(&sd->entity, 1, &sc200ai->pad); in sc200ai_probe()
2121 if (strcmp(sc200ai->module_facing, "back") == 0) in sc200ai_probe()
2127 sc200ai->module_index, facing, in sc200ai_probe()
2137 if (sc200ai->is_thunderboot) in sc200ai_probe()
2149 __sc200ai_power_off(sc200ai); in sc200ai_probe()
2151 v4l2_ctrl_handler_free(&sc200ai->ctrl_handler); in sc200ai_probe()
2153 mutex_destroy(&sc200ai->mutex); in sc200ai_probe()
2161 struct sc200ai *sc200ai = to_sc200ai(sd); in sc200ai_remove() local
2167 v4l2_ctrl_handler_free(&sc200ai->ctrl_handler); in sc200ai_remove()
2168 mutex_destroy(&sc200ai->mutex); in sc200ai_remove()
2172 __sc200ai_power_off(sc200ai); in sc200ai_remove()