Lines Matching refs:sc4210
161 struct sc4210 { struct
198 #define to_sc4210(sd) container_of(sd, struct sc4210, subdev) argument
1514 sc4210_find_best_fit(struct sc4210 *sc4210, struct v4l2_subdev_format *fmt) in sc4210_find_best_fit() argument
1522 for (i = 0; i < sc4210->support_modes_num; i++) { in sc4210_find_best_fit()
1523 dist = sc4210_get_reso_dist(&sc4210->support_modes[i], framefmt); in sc4210_find_best_fit()
1530 return &sc4210->support_modes[cur_best_fit]; in sc4210_find_best_fit()
1537 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_set_fmt() local
1542 mutex_lock(&sc4210->mutex); in sc4210_set_fmt()
1544 mode = sc4210_find_best_fit(sc4210, fmt); in sc4210_set_fmt()
1553 mutex_unlock(&sc4210->mutex); in sc4210_set_fmt()
1557 sc4210->cur_mode = mode; in sc4210_set_fmt()
1560 __v4l2_ctrl_modify_range(sc4210->hblank, h_blank, in sc4210_set_fmt()
1563 __v4l2_ctrl_modify_range(sc4210->vblank, vblank_def, in sc4210_set_fmt()
1567 __v4l2_ctrl_s_ctrl(sc4210->link_freq, mode->mipi_freq_idx); in sc4210_set_fmt()
1569 mode->bpp * 2 * sc4210->lane_num; in sc4210_set_fmt()
1570 __v4l2_ctrl_s_ctrl_int64(sc4210->pixel_rate, pixel_rate); in sc4210_set_fmt()
1571 sc4210->cur_fps = mode->max_fps; in sc4210_set_fmt()
1574 mutex_unlock(&sc4210->mutex); in sc4210_set_fmt()
1583 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_get_fmt() local
1584 const struct sc4210_mode *mode = sc4210->cur_mode; in sc4210_get_fmt()
1586 mutex_lock(&sc4210->mutex); in sc4210_get_fmt()
1591 mutex_unlock(&sc4210->mutex); in sc4210_get_fmt()
1605 mutex_unlock(&sc4210->mutex); in sc4210_get_fmt()
1614 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_enum_mbus_code() local
1618 code->code = sc4210->cur_mode->bus_fmt; in sc4210_enum_mbus_code()
1627 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_enum_frame_sizes() local
1629 if (fse->index >= sc4210->support_modes_num) in sc4210_enum_frame_sizes()
1632 if (fse->code != sc4210->support_modes[fse->index].bus_fmt) in sc4210_enum_frame_sizes()
1635 fse->min_width = sc4210->support_modes[fse->index].width; in sc4210_enum_frame_sizes()
1636 fse->max_width = sc4210->support_modes[fse->index].width; in sc4210_enum_frame_sizes()
1637 fse->max_height = sc4210->support_modes[fse->index].height; in sc4210_enum_frame_sizes()
1638 fse->min_height = sc4210->support_modes[fse->index].height; in sc4210_enum_frame_sizes()
1646 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_g_frame_interval() local
1647 const struct sc4210_mode *mode = sc4210->cur_mode; in sc4210_g_frame_interval()
1649 if (sc4210->streaming) in sc4210_g_frame_interval()
1650 fi->interval = sc4210->cur_fps; in sc4210_g_frame_interval()
1660 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_g_mbus_config() local
1661 const struct sc4210_mode *mode = sc4210->cur_mode; in sc4210_g_mbus_config()
1662 u32 val = 1 << (sc4210->lane_num - 1) | in sc4210_g_mbus_config()
1677 static void sc4210_get_module_inf(struct sc4210 *sc4210, in sc4210_get_module_inf() argument
1682 strscpy(inf->base.module, sc4210->module_name, in sc4210_get_module_inf()
1684 strscpy(inf->base.lens, sc4210->len_name, sizeof(inf->base.lens)); in sc4210_get_module_inf()
1757 static int sc4210_set_hdrae(struct sc4210 *sc4210, in sc4210_set_hdrae() argument
1766 if (!sc4210->has_init_exp && !sc4210->streaming) { in sc4210_set_hdrae()
1767 sc4210->init_hdrae_exp = *ae; in sc4210_set_hdrae()
1768 sc4210->has_init_exp = true; in sc4210_set_hdrae()
1769 dev_dbg(&sc4210->client->dev, in sc4210_set_hdrae()
1781 if (sc4210->cur_mode->hdr_mode == HDR_X2) { in sc4210_set_hdrae()
1791 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1795 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1799 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1807 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1811 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1820 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1824 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1828 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1832 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1837 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1841 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1845 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1849 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_hdrae()
1856 static int sc4210_get_channel_info(struct sc4210 *sc4210, struct rkmodule_channel_info *ch_info) in sc4210_get_channel_info() argument
1860 ch_info->vc = sc4210->cur_mode->vc[ch_info->index]; in sc4210_get_channel_info()
1861 ch_info->width = sc4210->cur_mode->width; in sc4210_get_channel_info()
1862 ch_info->height = sc4210->cur_mode->height; in sc4210_get_channel_info()
1863 ch_info->bus_fmt = sc4210->cur_mode->bus_fmt; in sc4210_get_channel_info()
1869 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_ioctl() local
1880 sc4210_get_module_inf(sc4210, (struct rkmodule_inf *)arg); in sc4210_ioctl()
1885 hdr->hdr_mode = sc4210->cur_mode->hdr_mode; in sc4210_ioctl()
1889 w = sc4210->cur_mode->width; in sc4210_ioctl()
1890 h = sc4210->cur_mode->height; in sc4210_ioctl()
1891 for (i = 0; i < sc4210->support_modes_num; i++) { in sc4210_ioctl()
1892 if (w == sc4210->support_modes[i].width && in sc4210_ioctl()
1893 h == sc4210->support_modes[i].height && in sc4210_ioctl()
1894 sc4210->support_modes[i].hdr_mode == hdr->hdr_mode) { in sc4210_ioctl()
1895 sc4210->cur_mode = &sc4210->support_modes[i]; in sc4210_ioctl()
1899 if (i == sc4210->support_modes_num) { in sc4210_ioctl()
1900 dev_err(&sc4210->client->dev, in sc4210_ioctl()
1905 mode = sc4210->cur_mode; in sc4210_ioctl()
1906 w = sc4210->cur_mode->hts_def - in sc4210_ioctl()
1907 sc4210->cur_mode->width; in sc4210_ioctl()
1908 h = sc4210->cur_mode->vts_def - in sc4210_ioctl()
1909 sc4210->cur_mode->height; in sc4210_ioctl()
1910 __v4l2_ctrl_modify_range(sc4210->hblank, w, w, 1, w); in sc4210_ioctl()
1911 __v4l2_ctrl_modify_range(sc4210->vblank, h, in sc4210_ioctl()
1913 sc4210->cur_mode->height, in sc4210_ioctl()
1916 __v4l2_ctrl_s_ctrl(sc4210->link_freq, in sc4210_ioctl()
1920 / mode->bpp * 2 * sc4210->lane_num; in sc4210_ioctl()
1922 __v4l2_ctrl_s_ctrl_int64(sc4210->pixel_rate, in sc4210_ioctl()
1925 dev_info(&sc4210->client->dev, "sensor mode: %d\n", in sc4210_ioctl()
1926 sc4210->cur_mode->hdr_mode); in sc4210_ioctl()
1930 if (sc4210->cur_mode->hdr_mode == HDR_X2) in sc4210_ioctl()
1931 ret = sc4210_set_hdrae(sc4210, arg); in sc4210_ioctl()
1936 ret = sc4210_write_reg(sc4210->client, in sc4210_ioctl()
1941 ret = sc4210_write_reg(sc4210->client, in sc4210_ioctl()
1948 ret = sc4210_get_channel_info(sc4210, ch_info); in sc4210_ioctl()
2061 static int __sc4210_start_stream(struct sc4210 *sc4210) in __sc4210_start_stream() argument
2065 ret = sc4210_write_array(sc4210->client, sc4210->cur_mode->reg_list); in __sc4210_start_stream()
2070 ret = __v4l2_ctrl_handler_setup(&sc4210->ctrl_handler); in __sc4210_start_stream()
2073 if (sc4210->has_init_exp && sc4210->cur_mode->hdr_mode != NO_HDR) { in __sc4210_start_stream()
2074 ret = sc4210_ioctl(&sc4210->subdev, PREISP_CMD_SET_HDRAE_EXP, in __sc4210_start_stream()
2075 &sc4210->init_hdrae_exp); in __sc4210_start_stream()
2077 dev_err(&sc4210->client->dev, in __sc4210_start_stream()
2082 return sc4210_write_reg(sc4210->client, SC4210_REG_CTRL_MODE, in __sc4210_start_stream()
2087 static int __sc4210_stop_stream(struct sc4210 *sc4210) in __sc4210_stop_stream() argument
2089 sc4210->has_init_exp = false; in __sc4210_stop_stream()
2090 return sc4210_write_reg(sc4210->client, SC4210_REG_CTRL_MODE, in __sc4210_stop_stream()
2097 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_s_stream() local
2098 struct i2c_client *client = sc4210->client; in sc4210_s_stream()
2101 mutex_lock(&sc4210->mutex); in sc4210_s_stream()
2103 if (on == sc4210->streaming) in sc4210_s_stream()
2111 ret = __sc4210_start_stream(sc4210); in sc4210_s_stream()
2118 __sc4210_stop_stream(sc4210); in sc4210_s_stream()
2122 sc4210->streaming = on; in sc4210_s_stream()
2125 mutex_unlock(&sc4210->mutex); in sc4210_s_stream()
2132 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_s_power() local
2133 struct i2c_client *client = sc4210->client; in sc4210_s_power()
2136 mutex_lock(&sc4210->mutex); in sc4210_s_power()
2139 if (sc4210->power_on == !!on) in sc4210_s_power()
2149 sc4210->power_on = true; in sc4210_s_power()
2152 sc4210->power_on = false; in sc4210_s_power()
2156 mutex_unlock(&sc4210->mutex); in sc4210_s_power()
2161 static int __sc4210_power_on(struct sc4210 *sc4210) in __sc4210_power_on() argument
2164 struct device *dev = &sc4210->client->dev; in __sc4210_power_on()
2166 if (!IS_ERR_OR_NULL(sc4210->pins_default)) { in __sc4210_power_on()
2167 ret = pinctrl_select_state(sc4210->pinctrl, in __sc4210_power_on()
2168 sc4210->pins_default); in __sc4210_power_on()
2172 ret = clk_set_rate(sc4210->xvclk, SC4210_XVCLK_FREQ); in __sc4210_power_on()
2175 if (clk_get_rate(sc4210->xvclk) != SC4210_XVCLK_FREQ) in __sc4210_power_on()
2177 ret = clk_prepare_enable(sc4210->xvclk); in __sc4210_power_on()
2182 if (!IS_ERR(sc4210->reset_gpio)) in __sc4210_power_on()
2183 gpiod_set_value_cansleep(sc4210->reset_gpio, 0); in __sc4210_power_on()
2185 ret = regulator_bulk_enable(sc4210_NUM_SUPPLIES, sc4210->supplies); in __sc4210_power_on()
2191 if (!IS_ERR(sc4210->reset_gpio)) in __sc4210_power_on()
2192 gpiod_set_value_cansleep(sc4210->reset_gpio, 1); in __sc4210_power_on()
2195 if (!IS_ERR(sc4210->pwdn_gpio)) in __sc4210_power_on()
2196 gpiod_set_value_cansleep(sc4210->pwdn_gpio, 1); in __sc4210_power_on()
2202 clk_disable_unprepare(sc4210->xvclk); in __sc4210_power_on()
2207 static void __sc4210_power_off(struct sc4210 *sc4210) in __sc4210_power_off() argument
2210 struct device *dev = &sc4210->client->dev; in __sc4210_power_off()
2212 if (!IS_ERR(sc4210->pwdn_gpio)) in __sc4210_power_off()
2213 gpiod_set_value_cansleep(sc4210->pwdn_gpio, 0); in __sc4210_power_off()
2214 clk_disable_unprepare(sc4210->xvclk); in __sc4210_power_off()
2215 if (!IS_ERR(sc4210->reset_gpio)) in __sc4210_power_off()
2216 gpiod_set_value_cansleep(sc4210->reset_gpio, 0); in __sc4210_power_off()
2217 if (!IS_ERR_OR_NULL(sc4210->pins_sleep)) { in __sc4210_power_off()
2218 ret = pinctrl_select_state(sc4210->pinctrl, in __sc4210_power_off()
2219 sc4210->pins_sleep); in __sc4210_power_off()
2223 regulator_bulk_disable(sc4210_NUM_SUPPLIES, sc4210->supplies); in __sc4210_power_off()
2230 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_runtime_resume() local
2232 return __sc4210_power_on(sc4210); in sc4210_runtime_resume()
2239 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_runtime_suspend() local
2241 __sc4210_power_off(sc4210); in sc4210_runtime_suspend()
2249 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_open() local
2252 const struct sc4210_mode *def_mode = &sc4210->support_modes[0]; in sc4210_open()
2254 mutex_lock(&sc4210->mutex); in sc4210_open()
2261 mutex_unlock(&sc4210->mutex); in sc4210_open()
2272 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_enum_frame_interval() local
2274 if (fie->index >= sc4210->support_modes_num) in sc4210_enum_frame_interval()
2277 fie->code = sc4210->support_modes[fie->index].bus_fmt; in sc4210_enum_frame_interval()
2278 fie->width = sc4210->support_modes[fie->index].width; in sc4210_enum_frame_interval()
2279 fie->height = sc4210->support_modes[fie->index].height; in sc4210_enum_frame_interval()
2280 fie->interval = sc4210->support_modes[fie->index].max_fps; in sc4210_enum_frame_interval()
2281 fie->reserved[0] = sc4210->support_modes[fie->index].hdr_mode; in sc4210_enum_frame_interval()
2324 static void sc4210_modify_fps_info(struct sc4210 *sc4210) in sc4210_modify_fps_info() argument
2326 const struct sc4210_mode *mode = sc4210->cur_mode; in sc4210_modify_fps_info()
2328 sc4210->cur_fps.denominator = mode->max_fps.denominator * mode->vts_def / in sc4210_modify_fps_info()
2329 sc4210->cur_vts; in sc4210_modify_fps_info()
2334 struct sc4210 *sc4210 = container_of(ctrl->handler, in sc4210_set_ctrl() local
2335 struct sc4210, ctrl_handler); in sc4210_set_ctrl()
2336 struct i2c_client *client = sc4210->client; in sc4210_set_ctrl()
2346 max = sc4210->cur_mode->height + ctrl->val - 2; in sc4210_set_ctrl()
2347 __v4l2_ctrl_modify_range(sc4210->exposure, in sc4210_set_ctrl()
2348 sc4210->exposure->minimum, max, in sc4210_set_ctrl()
2349 sc4210->exposure->step, in sc4210_set_ctrl()
2350 sc4210->exposure->default_value); in sc4210_set_ctrl()
2359 if (sc4210->cur_mode->hdr_mode != NO_HDR) in sc4210_set_ctrl()
2362 ret = sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2366 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2370 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2378 if (sc4210->cur_mode->hdr_mode != NO_HDR) in sc4210_set_ctrl()
2382 ret = sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2386 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2390 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2394 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2401 vts = ctrl->val + sc4210->cur_mode->height; in sc4210_set_ctrl()
2402 ret = sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2406 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2410 sc4210->cur_vts = ctrl->val + sc4210->cur_mode->height; in sc4210_set_ctrl()
2411 sc4210_modify_fps_info(sc4210); in sc4210_set_ctrl()
2415 ret = sc4210_read_reg(sc4210->client, SC4210_FLIP_MIRROR_REG, in sc4210_set_ctrl()
2424 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2429 ret = sc4210_read_reg(sc4210->client, in sc4210_set_ctrl()
2439 ret |= sc4210_write_reg(sc4210->client, in sc4210_set_ctrl()
2460 static int sc4210_parse_of(struct sc4210 *sc4210) in sc4210_parse_of() argument
2462 struct device *dev = &sc4210->client->dev; in sc4210_parse_of()
2479 sc4210->lane_num = rval; in sc4210_parse_of()
2480 dev_info(dev, "lane_num = %d\n", sc4210->lane_num); in sc4210_parse_of()
2482 if (sc4210->lane_num == 2) { in sc4210_parse_of()
2483 sc4210->support_modes = supported_modes_2lane; in sc4210_parse_of()
2484 sc4210->support_modes_num = ARRAY_SIZE(supported_modes_2lane); in sc4210_parse_of()
2485 } else if (sc4210->lane_num == 4) { in sc4210_parse_of()
2486 sc4210->support_modes = supported_modes_4lane; in sc4210_parse_of()
2487 sc4210->support_modes_num = ARRAY_SIZE(supported_modes_4lane); in sc4210_parse_of()
2490 sc4210->cur_mode = &sc4210->support_modes[0]; in sc4210_parse_of()
2495 static int sc4210_initialize_controls(struct sc4210 *sc4210) in sc4210_initialize_controls() argument
2504 handler = &sc4210->ctrl_handler; in sc4210_initialize_controls()
2505 mode = sc4210->cur_mode; in sc4210_initialize_controls()
2509 handler->lock = &sc4210->mutex; in sc4210_initialize_controls()
2511 sc4210->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in sc4210_initialize_controls()
2515 __v4l2_ctrl_s_ctrl(sc4210->link_freq, mode->mipi_freq_idx); in sc4210_initialize_controls()
2526 sc4210->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in sc4210_initialize_controls()
2532 sc4210->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in sc4210_initialize_controls()
2534 if (sc4210->hblank) in sc4210_initialize_controls()
2535 sc4210->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in sc4210_initialize_controls()
2538 sc4210->vblank = v4l2_ctrl_new_std(handler, &sc4210_ctrl_ops, in sc4210_initialize_controls()
2542 sc4210->cur_fps = mode->max_fps; in sc4210_initialize_controls()
2544 sc4210->exposure = v4l2_ctrl_new_std(handler, &sc4210_ctrl_ops, in sc4210_initialize_controls()
2551 sc4210->anal_gain = v4l2_ctrl_new_std(handler, &sc4210_ctrl_ops, in sc4210_initialize_controls()
2566 dev_err(&sc4210->client->dev, in sc4210_initialize_controls()
2570 sc4210->subdev.ctrl_handler = handler; in sc4210_initialize_controls()
2571 sc4210->has_init_exp = false; in sc4210_initialize_controls()
2580 static int sc4210_check_sensor_id(struct sc4210 *sc4210, in sc4210_check_sensor_id() argument
2583 struct device *dev = &sc4210->client->dev; in sc4210_check_sensor_id()
2599 static int sc4210_configure_regulators(struct sc4210 *sc4210) in sc4210_configure_regulators() argument
2604 sc4210->supplies[i].supply = sc4210_supply_names[i]; in sc4210_configure_regulators()
2606 return devm_regulator_bulk_get(&sc4210->client->dev, in sc4210_configure_regulators()
2608 sc4210->supplies); in sc4210_configure_regulators()
2616 struct sc4210 *sc4210; in sc4210_probe() local
2627 sc4210 = devm_kzalloc(dev, sizeof(*sc4210), GFP_KERNEL); in sc4210_probe()
2628 if (!sc4210) in sc4210_probe()
2633 &sc4210->module_index); in sc4210_probe()
2635 &sc4210->module_facing); in sc4210_probe()
2637 &sc4210->module_name); in sc4210_probe()
2639 &sc4210->len_name); in sc4210_probe()
2645 sc4210->client = client; in sc4210_probe()
2647 ret = sc4210_parse_of(sc4210); in sc4210_probe()
2651 sc4210->xvclk = devm_clk_get(dev, "xvclk"); in sc4210_probe()
2652 if (IS_ERR(sc4210->xvclk)) { in sc4210_probe()
2657 sc4210->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in sc4210_probe()
2658 if (IS_ERR(sc4210->reset_gpio)) in sc4210_probe()
2661 sc4210->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in sc4210_probe()
2662 if (IS_ERR(sc4210->pwdn_gpio)) in sc4210_probe()
2665 sc4210->pinctrl = devm_pinctrl_get(dev); in sc4210_probe()
2666 if (!IS_ERR(sc4210->pinctrl)) { in sc4210_probe()
2667 sc4210->pins_default = in sc4210_probe()
2668 pinctrl_lookup_state(sc4210->pinctrl, in sc4210_probe()
2670 if (IS_ERR(sc4210->pins_default)) in sc4210_probe()
2673 sc4210->pins_sleep = in sc4210_probe()
2674 pinctrl_lookup_state(sc4210->pinctrl, in sc4210_probe()
2676 if (IS_ERR(sc4210->pins_sleep)) in sc4210_probe()
2682 ret = sc4210_configure_regulators(sc4210); in sc4210_probe()
2688 mutex_init(&sc4210->mutex); in sc4210_probe()
2690 sd = &sc4210->subdev; in sc4210_probe()
2692 ret = sc4210_initialize_controls(sc4210); in sc4210_probe()
2696 ret = __sc4210_power_on(sc4210); in sc4210_probe()
2700 ret = sc4210_check_sensor_id(sc4210, client); in sc4210_probe()
2710 sc4210->pad.flags = MEDIA_PAD_FL_SOURCE; in sc4210_probe()
2712 ret = media_entity_pads_init(&sd->entity, 1, &sc4210->pad); in sc4210_probe()
2718 if (strcmp(sc4210->module_facing, "back") == 0) in sc4210_probe()
2724 sc4210->module_index, facing, in sc4210_probe()
2728 dev_err(&sc4210->client->dev, in sc4210_probe()
2744 __sc4210_power_off(sc4210); in sc4210_probe()
2746 v4l2_ctrl_handler_free(&sc4210->ctrl_handler); in sc4210_probe()
2748 mutex_destroy(&sc4210->mutex); in sc4210_probe()
2756 struct sc4210 *sc4210 = to_sc4210(sd); in sc4210_remove() local
2762 v4l2_ctrl_handler_free(&sc4210->ctrl_handler); in sc4210_remove()
2763 mutex_destroy(&sc4210->mutex); in sc4210_remove()
2767 __sc4210_power_off(sc4210); in sc4210_remove()