Lines Matching refs:s5kjn1

141 struct s5kjn1 {  struct
183 #define to_s5kjn1(sd) container_of(sd, struct s5kjn1, subdev) argument
907 static int __s5kjn1_power_on(struct s5kjn1 *s5kjn1);
1044 s5kjn1_find_best_fit(struct s5kjn1 *s5kjn1, struct v4l2_subdev_format *fmt) in s5kjn1_find_best_fit() argument
1052 for (i = 0; i < s5kjn1->cfg_num; i++) { in s5kjn1_find_best_fit()
1053 dist = s5kjn1_get_reso_dist(&s5kjn1->support_modes[i], framefmt); in s5kjn1_find_best_fit()
1055 (s5kjn1->support_modes[i].bus_fmt == framefmt->code)) { in s5kjn1_find_best_fit()
1060 dev_info(&s5kjn1->client->dev, "%s: cur_best_fit(%d)", in s5kjn1_find_best_fit()
1062 return &s5kjn1->support_modes[cur_best_fit]; in s5kjn1_find_best_fit()
1069 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_set_fmt() local
1073 u32 lane_num = s5kjn1->bus_cfg.bus.mipi_csi2.num_data_lanes; in s5kjn1_set_fmt()
1075 mutex_lock(&s5kjn1->mutex); in s5kjn1_set_fmt()
1077 mode = s5kjn1_find_best_fit(s5kjn1, fmt); in s5kjn1_set_fmt()
1086 mutex_unlock(&s5kjn1->mutex); in s5kjn1_set_fmt()
1090 s5kjn1->cur_mode = mode; in s5kjn1_set_fmt()
1092 __v4l2_ctrl_modify_range(s5kjn1->hblank, h_blank, in s5kjn1_set_fmt()
1095 __v4l2_ctrl_modify_range(s5kjn1->vblank, vblank_def, in s5kjn1_set_fmt()
1098 __v4l2_ctrl_s_ctrl(s5kjn1->vblank, vblank_def); in s5kjn1_set_fmt()
1100 __v4l2_ctrl_s_ctrl_int64(s5kjn1->pixel_rate, in s5kjn1_set_fmt()
1102 __v4l2_ctrl_s_ctrl(s5kjn1->link_freq, in s5kjn1_set_fmt()
1106 __v4l2_ctrl_modify_range(s5kjn1->anal_gain, S5KJN1_GAIN_MIN, in s5kjn1_set_fmt()
1110 __v4l2_ctrl_modify_range(s5kjn1->anal_gain, S5KJN1_GAIN_MIN, in s5kjn1_set_fmt()
1115 dev_info(&s5kjn1->client->dev, "%s: mode->mipi_freq_idx(%d)", in s5kjn1_set_fmt()
1118 mutex_unlock(&s5kjn1->mutex); in s5kjn1_set_fmt()
1127 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_get_fmt() local
1128 const struct s5kjn1_mode *mode = s5kjn1->cur_mode; in s5kjn1_get_fmt()
1130 mutex_lock(&s5kjn1->mutex); in s5kjn1_get_fmt()
1135 mutex_unlock(&s5kjn1->mutex); in s5kjn1_get_fmt()
1144 mutex_unlock(&s5kjn1->mutex); in s5kjn1_get_fmt()
1153 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_enum_mbus_code() local
1157 code->code = s5kjn1->cur_mode->bus_fmt; in s5kjn1_enum_mbus_code()
1166 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_enum_frame_sizes() local
1168 if (fse->index >= s5kjn1->cfg_num) in s5kjn1_enum_frame_sizes()
1171 if (fse->code != s5kjn1->support_modes[fse->index].bus_fmt) in s5kjn1_enum_frame_sizes()
1174 fse->min_width = s5kjn1->support_modes[fse->index].width; in s5kjn1_enum_frame_sizes()
1175 fse->max_width = s5kjn1->support_modes[fse->index].width; in s5kjn1_enum_frame_sizes()
1176 fse->max_height = s5kjn1->support_modes[fse->index].height; in s5kjn1_enum_frame_sizes()
1177 fse->min_height = s5kjn1->support_modes[fse->index].height; in s5kjn1_enum_frame_sizes()
1182 static int s5kjn1_enable_test_pattern(struct s5kjn1 *s5kjn1, u32 pattern) in s5kjn1_enable_test_pattern() argument
1191 ret = s5kjn1_write_reg(s5kjn1->client, S5KJN1_REG_TEST_PATTERN, in s5kjn1_enable_test_pattern()
1199 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_g_frame_interval() local
1200 const struct s5kjn1_mode *mode = s5kjn1->cur_mode; in s5kjn1_g_frame_interval()
1210 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_g_mbus_config() local
1211 u32 lane_num = s5kjn1->bus_cfg.bus.mipi_csi2.num_data_lanes; in s5kjn1_g_mbus_config()
1218 config->type = s5kjn1->bus_cfg.bus_type; in s5kjn1_g_mbus_config()
1303 static void s5kjn1_get_module_inf(struct s5kjn1 *s5kjn1, in s5kjn1_get_module_inf() argument
1306 struct otp_info *otp = s5kjn1->otp; in s5kjn1_get_module_inf()
1310 strscpy(inf->base.module, s5kjn1->module_name, in s5kjn1_get_module_inf()
1312 strscpy(inf->base.lens, s5kjn1->len_name, sizeof(inf->base.lens)); in s5kjn1_get_module_inf()
1317 static int s5kjn1_get_channel_info(struct s5kjn1 *s5kjn1, struct rkmodule_channel_info *ch_info) in s5kjn1_get_channel_info() argument
1319 const struct s5kjn1_mode *mode = s5kjn1->cur_mode; in s5kjn1_get_channel_info()
1324 if (ch_info->index == s5kjn1->spd_id && mode->spd) { in s5kjn1_get_channel_info()
1332 ch_info->vc = s5kjn1->cur_mode->vc[ch_info->index]; in s5kjn1_get_channel_info()
1333 ch_info->width = s5kjn1->cur_mode->width; in s5kjn1_get_channel_info()
1334 ch_info->height = s5kjn1->cur_mode->height; in s5kjn1_get_channel_info()
1335 ch_info->bus_fmt = s5kjn1->cur_mode->bus_fmt; in s5kjn1_get_channel_info()
1342 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_ioctl() local
1352 w = s5kjn1->cur_mode->width; in s5kjn1_ioctl()
1353 h = s5kjn1->cur_mode->height; in s5kjn1_ioctl()
1354 for (i = 0; i < s5kjn1->cfg_num; i++) { in s5kjn1_ioctl()
1355 if (w == s5kjn1->support_modes[i].width && in s5kjn1_ioctl()
1356 h == s5kjn1->support_modes[i].height && in s5kjn1_ioctl()
1357 s5kjn1->support_modes[i].hdr_mode == hdr_cfg->hdr_mode) { in s5kjn1_ioctl()
1358 s5kjn1->cur_mode = &s5kjn1->support_modes[i]; in s5kjn1_ioctl()
1362 if (i == s5kjn1->cfg_num) { in s5kjn1_ioctl()
1363 dev_err(&s5kjn1->client->dev, in s5kjn1_ioctl()
1368 w = s5kjn1->cur_mode->hts_def - s5kjn1->cur_mode->width; in s5kjn1_ioctl()
1369 h = s5kjn1->cur_mode->vts_def - s5kjn1->cur_mode->height; in s5kjn1_ioctl()
1370 __v4l2_ctrl_modify_range(s5kjn1->hblank, w, w, 1, w); in s5kjn1_ioctl()
1371 __v4l2_ctrl_modify_range(s5kjn1->vblank, h, in s5kjn1_ioctl()
1372 S5KJN1_VTS_MAX - s5kjn1->cur_mode->height, in s5kjn1_ioctl()
1374 dev_info(&s5kjn1->client->dev, in s5kjn1_ioctl()
1376 s5kjn1->cur_mode->hdr_mode); in s5kjn1_ioctl()
1378 dev_info(&s5kjn1->client->dev, "%s: matched mode index(%d)", in s5kjn1_ioctl()
1382 s5kjn1_get_module_inf(s5kjn1, (struct rkmodule_inf *)arg); in s5kjn1_ioctl()
1387 hdr_cfg->hdr_mode = s5kjn1->cur_mode->hdr_mode; in s5kjn1_ioctl()
1394 ret = s5kjn1_write_reg(s5kjn1->client, S5KJN1_REG_CTRL_MODE, in s5kjn1_ioctl()
1397 ret = s5kjn1_write_reg(s5kjn1->client, S5KJN1_REG_CTRL_MODE, in s5kjn1_ioctl()
1402 ret = s5kjn1_get_channel_info(s5kjn1, ch_info); in s5kjn1_ioctl()
1518 static int __s5kjn1_start_stream(struct s5kjn1 *s5kjn1) in __s5kjn1_start_stream() argument
1522 if (!s5kjn1->is_thunderboot) { in __s5kjn1_start_stream()
1523 ret = s5kjn1_write_array(s5kjn1->client, s5kjn1->cur_mode->reg_list); in __s5kjn1_start_stream()
1531 dev_info(&s5kjn1->client->dev, "%s:Check register value!\n", __func__); in __s5kjn1_start_stream()
1532 ret = s5kjn1_reg_verify(s5kjn1->client, s5kjn1->cur_mode->reg_list); in __s5kjn1_start_stream()
1537 ret = __v4l2_ctrl_handler_setup(&s5kjn1->ctrl_handler); in __s5kjn1_start_stream()
1541 return s5kjn1_write_reg(s5kjn1->client, S5KJN1_REG_CTRL_MODE, in __s5kjn1_start_stream()
1545 static int __s5kjn1_stop_stream(struct s5kjn1 *s5kjn1) in __s5kjn1_stop_stream() argument
1547 if (s5kjn1->is_thunderboot) in __s5kjn1_stop_stream()
1548 s5kjn1->is_first_streamoff = true; in __s5kjn1_stop_stream()
1549 return s5kjn1_write_reg(s5kjn1->client, S5KJN1_REG_CTRL_MODE, in __s5kjn1_stop_stream()
1555 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_s_stream() local
1556 struct i2c_client *client = s5kjn1->client; in s5kjn1_s_stream()
1560 s5kjn1->cur_mode->width, in s5kjn1_s_stream()
1561 s5kjn1->cur_mode->height, in s5kjn1_s_stream()
1562 DIV_ROUND_CLOSEST(s5kjn1->cur_mode->max_fps.denominator, in s5kjn1_s_stream()
1563 s5kjn1->cur_mode->max_fps.numerator)); in s5kjn1_s_stream()
1565 mutex_lock(&s5kjn1->mutex); in s5kjn1_s_stream()
1567 if (on == s5kjn1->streaming) in s5kjn1_s_stream()
1571 if (s5kjn1->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in s5kjn1_s_stream()
1572 s5kjn1->is_thunderboot = false; in s5kjn1_s_stream()
1573 __s5kjn1_power_on(s5kjn1); in s5kjn1_s_stream()
1581 ret = __s5kjn1_start_stream(s5kjn1); in s5kjn1_s_stream()
1588 __s5kjn1_stop_stream(s5kjn1); in s5kjn1_s_stream()
1592 s5kjn1->streaming = on; in s5kjn1_s_stream()
1595 mutex_unlock(&s5kjn1->mutex); in s5kjn1_s_stream()
1602 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_s_power() local
1603 struct i2c_client *client = s5kjn1->client; in s5kjn1_s_power()
1606 mutex_lock(&s5kjn1->mutex); in s5kjn1_s_power()
1609 if (s5kjn1->power_on == !!on) in s5kjn1_s_power()
1619 if (!s5kjn1->is_thunderboot) { in s5kjn1_s_power()
1620 ret |= s5kjn1_write_reg(s5kjn1->client, in s5kjn1_s_power()
1627 s5kjn1->power_on = true; in s5kjn1_s_power()
1630 s5kjn1->power_on = false; in s5kjn1_s_power()
1634 mutex_unlock(&s5kjn1->mutex); in s5kjn1_s_power()
1645 static int s5kjn1_enable_regulators(struct s5kjn1 *s5kjn1, in s5kjn1_enable_regulators() argument
1650 struct device *dev = &s5kjn1->client->dev; in s5kjn1_enable_regulators()
1670 static int __s5kjn1_power_on(struct s5kjn1 *s5kjn1) in __s5kjn1_power_on() argument
1674 struct device *dev = &s5kjn1->client->dev; in __s5kjn1_power_on()
1676 if (s5kjn1->is_thunderboot) in __s5kjn1_power_on()
1679 if (!IS_ERR_OR_NULL(s5kjn1->pins_default)) { in __s5kjn1_power_on()
1680 ret = pinctrl_select_state(s5kjn1->pinctrl, in __s5kjn1_power_on()
1681 s5kjn1->pins_default); in __s5kjn1_power_on()
1685 ret = clk_set_rate(s5kjn1->xvclk, S5KJN1_XVCLK_FREQ); in __s5kjn1_power_on()
1688 if (clk_get_rate(s5kjn1->xvclk) != S5KJN1_XVCLK_FREQ) in __s5kjn1_power_on()
1690 ret = clk_prepare_enable(s5kjn1->xvclk); in __s5kjn1_power_on()
1695 if (!IS_ERR(s5kjn1->reset_gpio)) in __s5kjn1_power_on()
1696 gpiod_direction_output(s5kjn1->reset_gpio, 0); in __s5kjn1_power_on()
1698 ret = s5kjn1_enable_regulators(s5kjn1, s5kjn1->supplies); in __s5kjn1_power_on()
1704 if (!IS_ERR(s5kjn1->reset_gpio)) in __s5kjn1_power_on()
1705 gpiod_direction_output(s5kjn1->reset_gpio, 1); in __s5kjn1_power_on()
1708 if (!IS_ERR(s5kjn1->pwdn_gpio)) in __s5kjn1_power_on()
1709 gpiod_direction_output(s5kjn1->pwdn_gpio, 1); in __s5kjn1_power_on()
1714 if (!IS_ERR(s5kjn1->reset_gpio)) in __s5kjn1_power_on()
1726 clk_disable_unprepare(s5kjn1->xvclk); in __s5kjn1_power_on()
1731 static void __s5kjn1_power_off(struct s5kjn1 *s5kjn1) in __s5kjn1_power_off() argument
1734 struct device *dev = &s5kjn1->client->dev; in __s5kjn1_power_off()
1736 if (s5kjn1->is_thunderboot) { in __s5kjn1_power_off()
1737 if (s5kjn1->is_first_streamoff) { in __s5kjn1_power_off()
1738 s5kjn1->is_thunderboot = false; in __s5kjn1_power_off()
1739 s5kjn1->is_first_streamoff = false; in __s5kjn1_power_off()
1745 if (!IS_ERR(s5kjn1->pwdn_gpio)) in __s5kjn1_power_off()
1746 gpiod_direction_output(s5kjn1->pwdn_gpio, 0); in __s5kjn1_power_off()
1748 clk_disable_unprepare(s5kjn1->xvclk); in __s5kjn1_power_off()
1750 if (!IS_ERR(s5kjn1->reset_gpio)) in __s5kjn1_power_off()
1751 gpiod_direction_output(s5kjn1->reset_gpio, 0); in __s5kjn1_power_off()
1752 if (!IS_ERR_OR_NULL(s5kjn1->pins_sleep)) { in __s5kjn1_power_off()
1753 ret = pinctrl_select_state(s5kjn1->pinctrl, in __s5kjn1_power_off()
1754 s5kjn1->pins_sleep); in __s5kjn1_power_off()
1759 if (s5kjn1->is_thunderboot_ng) in __s5kjn1_power_off()
1760 s5kjn1->is_thunderboot_ng = false; in __s5kjn1_power_off()
1762 regulator_bulk_disable(S5KJN1_NUM_SUPPLIES, s5kjn1->supplies); in __s5kjn1_power_off()
1769 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_runtime_resume() local
1771 return __s5kjn1_power_on(s5kjn1); in s5kjn1_runtime_resume()
1778 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_runtime_suspend() local
1780 __s5kjn1_power_off(s5kjn1); in s5kjn1_runtime_suspend()
1788 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_open() local
1791 const struct s5kjn1_mode *def_mode = &s5kjn1->support_modes[0]; in s5kjn1_open()
1793 mutex_lock(&s5kjn1->mutex); in s5kjn1_open()
1800 mutex_unlock(&s5kjn1->mutex); in s5kjn1_open()
1811 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_enum_frame_interval() local
1813 if (fie->index >= s5kjn1->cfg_num) in s5kjn1_enum_frame_interval()
1816 fie->code = s5kjn1->support_modes[fie->index].bus_fmt; in s5kjn1_enum_frame_interval()
1817 fie->width = s5kjn1->support_modes[fie->index].width; in s5kjn1_enum_frame_interval()
1818 fie->height = s5kjn1->support_modes[fie->index].height; in s5kjn1_enum_frame_interval()
1819 fie->interval = s5kjn1->support_modes[fie->index].max_fps; in s5kjn1_enum_frame_interval()
1820 fie->reserved[0] = s5kjn1->support_modes[fie->index].hdr_mode; in s5kjn1_enum_frame_interval()
1831 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_get_selection() local
1835 if (s5kjn1->cur_mode->width == 4080) { in s5kjn1_get_selection()
1836 sel->r.left = CROP_START(s5kjn1->cur_mode->width, DST_WIDTH); in s5kjn1_get_selection()
1838 sel->r.top = CROP_START(s5kjn1->cur_mode->height, DST_HEIGHT); in s5kjn1_get_selection()
1841 sel->r.left = CROP_START(s5kjn1->cur_mode->width, s5kjn1->cur_mode->width); in s5kjn1_get_selection()
1842 sel->r.width = s5kjn1->cur_mode->width; in s5kjn1_get_selection()
1843 sel->r.top = CROP_START(s5kjn1->cur_mode->height, s5kjn1->cur_mode->height); in s5kjn1_get_selection()
1844 sel->r.height = s5kjn1->cur_mode->height; in s5kjn1_get_selection()
1893 struct s5kjn1 *s5kjn1 = container_of(ctrl->handler, in s5kjn1_set_ctrl() local
1894 struct s5kjn1, ctrl_handler); in s5kjn1_set_ctrl()
1895 struct i2c_client *client = s5kjn1->client; in s5kjn1_set_ctrl()
1903 max = s5kjn1->cur_mode->height + ctrl->val - 4; in s5kjn1_set_ctrl()
1904 __v4l2_ctrl_modify_range(s5kjn1->exposure, in s5kjn1_set_ctrl()
1905 s5kjn1->exposure->minimum, max, in s5kjn1_set_ctrl()
1906 s5kjn1->exposure->step, in s5kjn1_set_ctrl()
1907 s5kjn1->exposure->default_value); in s5kjn1_set_ctrl()
1916 ret = s5kjn1_write_reg(s5kjn1->client, in s5kjn1_set_ctrl()
1924 ret = s5kjn1_write_reg(s5kjn1->client, in s5kjn1_set_ctrl()
1932 ret = s5kjn1_write_reg(s5kjn1->client, S5KJN1_REG_VTS, in s5kjn1_set_ctrl()
1934 ctrl->val + s5kjn1->cur_mode->height); in s5kjn1_set_ctrl()
1939 ret = s5kjn1_enable_test_pattern(s5kjn1, ctrl->val); in s5kjn1_set_ctrl()
1956 static int s5kjn1_initialize_controls(struct s5kjn1 *s5kjn1) in s5kjn1_initialize_controls() argument
1964 u32 lane_num = s5kjn1->bus_cfg.bus.mipi_csi2.num_data_lanes; in s5kjn1_initialize_controls()
1966 handler = &s5kjn1->ctrl_handler; in s5kjn1_initialize_controls()
1967 mode = s5kjn1->cur_mode; in s5kjn1_initialize_controls()
1971 handler->lock = &s5kjn1->mutex; in s5kjn1_initialize_controls()
1973 s5kjn1->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in s5kjn1_initialize_controls()
1979 s5kjn1->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in s5kjn1_initialize_controls()
1984 __v4l2_ctrl_s_ctrl(s5kjn1->link_freq, in s5kjn1_initialize_controls()
1988 s5kjn1->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in s5kjn1_initialize_controls()
1990 if (s5kjn1->hblank) in s5kjn1_initialize_controls()
1991 s5kjn1->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in s5kjn1_initialize_controls()
1994 s5kjn1->vblank = v4l2_ctrl_new_std(handler, &s5kjn1_ctrl_ops, in s5kjn1_initialize_controls()
2003 s5kjn1->exposure = v4l2_ctrl_new_std(handler, &s5kjn1_ctrl_ops, in s5kjn1_initialize_controls()
2008 s5kjn1->anal_gain = v4l2_ctrl_new_std(handler, &s5kjn1_ctrl_ops, in s5kjn1_initialize_controls()
2013 s5kjn1->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in s5kjn1_initialize_controls()
2020 dev_err(&s5kjn1->client->dev, in s5kjn1_initialize_controls()
2025 s5kjn1->subdev.ctrl_handler = handler; in s5kjn1_initialize_controls()
2035 static int s5kjn1_check_sensor_id(struct s5kjn1 *s5kjn1, in s5kjn1_check_sensor_id() argument
2038 struct device *dev = &s5kjn1->client->dev; in s5kjn1_check_sensor_id()
2042 if (s5kjn1->is_thunderboot) { in s5kjn1_check_sensor_id()
2059 static int s5kjn1_configure_regulators(struct s5kjn1 *s5kjn1) in s5kjn1_configure_regulators() argument
2064 s5kjn1->supplies[i].supply = s5kjn1_supply_names[i]; in s5kjn1_configure_regulators()
2066 return devm_regulator_bulk_get(&s5kjn1->client->dev, in s5kjn1_configure_regulators()
2068 s5kjn1->supplies); in s5kjn1_configure_regulators()
2076 struct s5kjn1 *s5kjn1; in s5kjn1_probe() local
2091 s5kjn1 = devm_kzalloc(dev, sizeof(*s5kjn1), GFP_KERNEL); in s5kjn1_probe()
2092 if (!s5kjn1) in s5kjn1_probe()
2096 &s5kjn1->module_index); in s5kjn1_probe()
2098 &s5kjn1->module_facing); in s5kjn1_probe()
2100 &s5kjn1->module_name); in s5kjn1_probe()
2102 &s5kjn1->len_name); in s5kjn1_probe()
2108 s5kjn1->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in s5kjn1_probe()
2116 &s5kjn1->bus_cfg); in s5kjn1_probe()
2121 if (s5kjn1->bus_cfg.bus_type == V4L2_MBUS_CSI2_DPHY) { in s5kjn1_probe()
2122 s5kjn1->support_modes = supported_modes_dphy; in s5kjn1_probe()
2123 s5kjn1->cfg_num = ARRAY_SIZE(supported_modes_dphy); in s5kjn1_probe()
2128 s5kjn1->client = client; in s5kjn1_probe()
2129 s5kjn1->cur_mode = &s5kjn1->support_modes[0]; in s5kjn1_probe()
2131 s5kjn1->xvclk = devm_clk_get(dev, "xvclk"); in s5kjn1_probe()
2132 if (IS_ERR(s5kjn1->xvclk)) { in s5kjn1_probe()
2137 s5kjn1->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in s5kjn1_probe()
2138 if (IS_ERR(s5kjn1->reset_gpio)) in s5kjn1_probe()
2141 s5kjn1->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in s5kjn1_probe()
2142 if (IS_ERR(s5kjn1->pwdn_gpio)) in s5kjn1_probe()
2147 &s5kjn1->spd_id); in s5kjn1_probe()
2149 s5kjn1->spd_id = PAD_MAX; in s5kjn1_probe()
2154 s5kjn1->pinctrl = devm_pinctrl_get(dev); in s5kjn1_probe()
2155 if (!IS_ERR(s5kjn1->pinctrl)) { in s5kjn1_probe()
2156 s5kjn1->pins_default = in s5kjn1_probe()
2157 pinctrl_lookup_state(s5kjn1->pinctrl, in s5kjn1_probe()
2159 if (IS_ERR(s5kjn1->pins_default)) in s5kjn1_probe()
2162 s5kjn1->pins_sleep = in s5kjn1_probe()
2163 pinctrl_lookup_state(s5kjn1->pinctrl, in s5kjn1_probe()
2165 if (IS_ERR(s5kjn1->pins_sleep)) in s5kjn1_probe()
2171 ret = s5kjn1_configure_regulators(s5kjn1); in s5kjn1_probe()
2177 mutex_init(&s5kjn1->mutex); in s5kjn1_probe()
2179 sd = &s5kjn1->subdev; in s5kjn1_probe()
2181 ret = s5kjn1_initialize_controls(s5kjn1); in s5kjn1_probe()
2184 ret = __s5kjn1_power_on(s5kjn1); in s5kjn1_probe()
2188 ret = s5kjn1_check_sensor_id(s5kjn1, client); in s5kjn1_probe()
2210 s5kjn1->otp = otp_ptr; in s5kjn1_probe()
2212 s5kjn1->otp = NULL; in s5kjn1_probe()
2224 s5kjn1->pad.flags = MEDIA_PAD_FL_SOURCE; in s5kjn1_probe()
2226 ret = media_entity_pads_init(&sd->entity, 1, &s5kjn1->pad); in s5kjn1_probe()
2232 if (strcmp(s5kjn1->module_facing, "back") == 0) in s5kjn1_probe()
2238 s5kjn1->module_index, facing, in s5kjn1_probe()
2256 __s5kjn1_power_off(s5kjn1); in s5kjn1_probe()
2258 v4l2_ctrl_handler_free(&s5kjn1->ctrl_handler); in s5kjn1_probe()
2260 mutex_destroy(&s5kjn1->mutex); in s5kjn1_probe()
2268 struct s5kjn1 *s5kjn1 = to_s5kjn1(sd); in s5kjn1_remove() local
2274 v4l2_ctrl_handler_free(&s5kjn1->ctrl_handler); in s5kjn1_remove()
2275 mutex_destroy(&s5kjn1->mutex); in s5kjn1_remove()
2279 __s5kjn1_power_off(s5kjn1); in s5kjn1_remove()