Lines Matching refs:SC301IOT
141 struct SC301IOT { struct
178 #define to_SC301IOT(sd) container_of(sd, struct SC301IOT, subdev) argument
986 static int SC301IOT_set_gain_reg(struct SC301IOT *SC301IOT, u32 gain, int mode) in SC301IOT_set_gain_reg() argument
1029 ret = SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_gain_reg()
1033 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_gain_reg()
1037 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_gain_reg()
1042 ret = SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_gain_reg()
1046 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_gain_reg()
1050 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_gain_reg()
1058 static int SC301IOT_set_hdrae(struct SC301IOT *SC301IOT, in SC301IOT_set_hdrae() argument
1065 if (!SC301IOT->has_init_exp && !SC301IOT->streaming) { in SC301IOT_set_hdrae()
1066 SC301IOT->init_hdrae_exp = *ae; in SC301IOT_set_hdrae()
1067 SC301IOT->has_init_exp = true; in SC301IOT_set_hdrae()
1068 dev_dbg(&SC301IOT->client->dev, "SC301IOT don't stream, record exp for hdr!\n"); in SC301IOT_set_hdrae()
1078 dev_dbg(&SC301IOT->client->dev, in SC301IOT_set_hdrae()
1083 if (SC301IOT->cur_mode->hdr_mode == HDR_X2) { in SC301IOT_set_hdrae()
1100 ret = SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_hdrae()
1104 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_hdrae()
1108 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_hdrae()
1112 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_hdrae()
1116 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_hdrae()
1122 ret |= SC301IOT_set_gain_reg(SC301IOT, l_a_gain, SC301IOT_LGAIN); in SC301IOT_set_hdrae()
1123 ret |= SC301IOT_set_gain_reg(SC301IOT, s_a_gain, SC301IOT_SGAIN); in SC301IOT_set_hdrae()
1158 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_set_fmt() local
1162 mutex_lock(&SC301IOT->mutex); in SC301IOT_set_fmt()
1173 mutex_unlock(&SC301IOT->mutex); in SC301IOT_set_fmt()
1177 SC301IOT->cur_mode = mode; in SC301IOT_set_fmt()
1179 __v4l2_ctrl_modify_range(SC301IOT->hblank, h_blank, in SC301IOT_set_fmt()
1182 __v4l2_ctrl_modify_range(SC301IOT->vblank, vblank_def, in SC301IOT_set_fmt()
1185 SC301IOT->cur_fps = mode->max_fps; in SC301IOT_set_fmt()
1186 SC301IOT->cur_vts = mode->vts_def; in SC301IOT_set_fmt()
1189 mutex_unlock(&SC301IOT->mutex); in SC301IOT_set_fmt()
1198 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_get_fmt() local
1199 const struct SC301IOT_mode *mode = SC301IOT->cur_mode; in SC301IOT_get_fmt()
1201 mutex_lock(&SC301IOT->mutex); in SC301IOT_get_fmt()
1206 mutex_unlock(&SC301IOT->mutex); in SC301IOT_get_fmt()
1220 mutex_unlock(&SC301IOT->mutex); in SC301IOT_get_fmt()
1228 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_enum_mbus_code() local
1232 code->code = SC301IOT->cur_mode->bus_fmt; in SC301IOT_enum_mbus_code()
1255 static int SC301IOT_enable_test_pattern(struct SC301IOT *SC301IOT, u32 pattern) in SC301IOT_enable_test_pattern() argument
1260 ret = SC301IOT_read_reg(SC301IOT->client, SC301IOT_REG_TEST_PATTERN, in SC301IOT_enable_test_pattern()
1267 ret |= SC301IOT_write_reg(SC301IOT->client, SC301IOT_REG_TEST_PATTERN, in SC301IOT_enable_test_pattern()
1275 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_g_frame_interval() local
1276 const struct SC301IOT_mode *mode = SC301IOT->cur_mode; in SC301IOT_g_frame_interval()
1278 if (SC301IOT->streaming) in SC301IOT_g_frame_interval()
1279 fi->interval = SC301IOT->cur_fps; in SC301IOT_g_frame_interval()
1289 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_g_mbus_config() local
1290 const struct SC301IOT_mode *mode = SC301IOT->cur_mode; in SC301IOT_g_mbus_config()
1306 static void SC301IOT_get_module_inf(struct SC301IOT *SC301IOT, in SC301IOT_get_module_inf() argument
1311 strscpy(inf->base.module, SC301IOT->module_name, in SC301IOT_get_module_inf()
1313 strscpy(inf->base.lens, SC301IOT->len_name, sizeof(inf->base.lens)); in SC301IOT_get_module_inf()
1316 static int SC301IOT_get_channel_info(struct SC301IOT *SC301IOT, in SC301IOT_get_channel_info() argument
1321 ch_info->vc = SC301IOT->cur_mode->vc[ch_info->index]; in SC301IOT_get_channel_info()
1322 ch_info->width = SC301IOT->cur_mode->width; in SC301IOT_get_channel_info()
1323 ch_info->height = SC301IOT->cur_mode->height; in SC301IOT_get_channel_info()
1324 ch_info->bus_fmt = SC301IOT->cur_mode->bus_fmt; in SC301IOT_get_channel_info()
1330 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_ioctl() local
1340 SC301IOT_get_module_inf(SC301IOT, (struct rkmodule_inf *)arg); in SC301IOT_ioctl()
1345 hdr->hdr_mode = SC301IOT->cur_mode->hdr_mode; in SC301IOT_ioctl()
1349 w = SC301IOT->cur_mode->width; in SC301IOT_ioctl()
1350 h = SC301IOT->cur_mode->height; in SC301IOT_ioctl()
1355 SC301IOT->cur_mode = &supported_modes[i]; in SC301IOT_ioctl()
1360 dev_err(&SC301IOT->client->dev, in SC301IOT_ioctl()
1365 w = SC301IOT->cur_mode->hts_def - SC301IOT->cur_mode->width; in SC301IOT_ioctl()
1366 h = SC301IOT->cur_mode->vts_def - SC301IOT->cur_mode->height; in SC301IOT_ioctl()
1367 __v4l2_ctrl_modify_range(SC301IOT->hblank, w, w, 1, w); in SC301IOT_ioctl()
1368 __v4l2_ctrl_modify_range(SC301IOT->vblank, in SC301IOT_ioctl()
1370 SC301IOT_VTS_MAX - SC301IOT->cur_mode->height, 1, h); in SC301IOT_ioctl()
1371 SC301IOT->cur_fps = SC301IOT->cur_mode->max_fps; in SC301IOT_ioctl()
1372 SC301IOT->cur_vts = SC301IOT->cur_mode->vts_def; in SC301IOT_ioctl()
1376 SC301IOT_set_hdrae(SC301IOT, arg); in SC301IOT_ioctl()
1383 ret = SC301IOT_write_reg(SC301IOT->client, SC301IOT_REG_CTRL_MODE, in SC301IOT_ioctl()
1386 ret = SC301IOT_write_reg(SC301IOT->client, SC301IOT_REG_CTRL_MODE, in SC301IOT_ioctl()
1390 *((u32 *)arg) = SC301IOT->sync_mode; in SC301IOT_ioctl()
1396 SC301IOT->sync_mode = sync_mode; in SC301IOT_ioctl()
1397 dev_info(&SC301IOT->client->dev, "sync_mode = [%u]\n", SC301IOT->sync_mode); in SC301IOT_ioctl()
1401 ret = SC301IOT_get_channel_info(SC301IOT, ch_info); in SC301IOT_ioctl()
1528 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_s_frame_interval() local
1537 mutex_lock(&SC301IOT->mutex); in SC301IOT_s_frame_interval()
1539 current_fps = DIV_ROUND_CLOSEST(SC301IOT->cur_mode->max_fps.denominator, in SC301IOT_s_frame_interval()
1540 SC301IOT->cur_mode->max_fps.numerator); in SC301IOT_s_frame_interval()
1541 vblank_def = SC301IOT->cur_mode->vts_def * current_fps / fps_set - in SC301IOT_s_frame_interval()
1542 SC301IOT->cur_mode->height; in SC301IOT_s_frame_interval()
1543 if (SC301IOT->sync_mode == SLAVE_MODE) in SC301IOT_s_frame_interval()
1545 ret = __v4l2_ctrl_s_ctrl(SC301IOT->vblank, vblank_def); in SC301IOT_s_frame_interval()
1546 mutex_unlock(&SC301IOT->mutex); in SC301IOT_s_frame_interval()
1552 static int __SC301IOT_start_stream(struct SC301IOT *SC301IOT) in __SC301IOT_start_stream() argument
1556 if (!SC301IOT->is_thunderboot) { in __SC301IOT_start_stream()
1557 ret = SC301IOT_write_array(SC301IOT->client, SC301IOT->cur_mode->reg_list); in __SC301IOT_start_stream()
1562 ret = __v4l2_ctrl_handler_setup(&SC301IOT->ctrl_handler); in __SC301IOT_start_stream()
1565 if (SC301IOT->has_init_exp && SC301IOT->cur_mode->hdr_mode != NO_HDR) { in __SC301IOT_start_stream()
1566 ret = SC301IOT_ioctl(&SC301IOT->subdev, PREISP_CMD_SET_HDRAE_EXP, in __SC301IOT_start_stream()
1567 &SC301IOT->init_hdrae_exp); in __SC301IOT_start_stream()
1569 dev_err(&SC301IOT->client->dev, in __SC301IOT_start_stream()
1575 if (SC301IOT->sync_mode == SLAVE_MODE) { in __SC301IOT_start_stream()
1576 SC301IOT_write_reg(SC301IOT->client, 0x3222, in __SC301IOT_start_stream()
1578 SC301IOT_write_reg(SC301IOT->client, 0x3223, in __SC301IOT_start_stream()
1580 SC301IOT_write_reg(SC301IOT->client, 0x3225, in __SC301IOT_start_stream()
1582 SC301IOT_write_reg(SC301IOT->client, 0x322e, in __SC301IOT_start_stream()
1583 SC301IOT_REG_VALUE_08BIT, (SC301IOT->cur_vts - 4) >> 8); in __SC301IOT_start_stream()
1584 SC301IOT_write_reg(SC301IOT->client, 0x322f, in __SC301IOT_start_stream()
1585 SC301IOT_REG_VALUE_08BIT, (SC301IOT->cur_vts - 4) & 0xff); in __SC301IOT_start_stream()
1586 } else if (SC301IOT->sync_mode == NO_SYNC_MODE) { in __SC301IOT_start_stream()
1587 SC301IOT_write_reg(SC301IOT->client, 0x3222, in __SC301IOT_start_stream()
1589 SC301IOT_write_reg(SC301IOT->client, 0x3223, in __SC301IOT_start_stream()
1591 SC301IOT_write_reg(SC301IOT->client, 0x3225, in __SC301IOT_start_stream()
1593 SC301IOT_write_reg(SC301IOT->client, 0x322e, in __SC301IOT_start_stream()
1595 SC301IOT_write_reg(SC301IOT->client, 0x322f, in __SC301IOT_start_stream()
1600 dev_dbg(&SC301IOT->client->dev, "start stream\n"); in __SC301IOT_start_stream()
1601 return SC301IOT_write_reg(SC301IOT->client, SC301IOT_REG_CTRL_MODE, in __SC301IOT_start_stream()
1605 static int __SC301IOT_stop_stream(struct SC301IOT *SC301IOT) in __SC301IOT_stop_stream() argument
1607 SC301IOT->has_init_exp = false; in __SC301IOT_stop_stream()
1608 dev_dbg(&SC301IOT->client->dev, "stop stream\n"); in __SC301IOT_stop_stream()
1609 if (SC301IOT->is_thunderboot) in __SC301IOT_stop_stream()
1610 SC301IOT->is_first_streamoff = true; in __SC301IOT_stop_stream()
1611 return SC301IOT_write_reg(SC301IOT->client, SC301IOT_REG_CTRL_MODE, in __SC301IOT_stop_stream()
1615 static int __SC301IOT_power_on(struct SC301IOT *SC301IOT);
1618 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_s_stream() local
1619 struct i2c_client *client = SC301IOT->client; in SC301IOT_s_stream()
1622 mutex_lock(&SC301IOT->mutex); in SC301IOT_s_stream()
1624 if (on == SC301IOT->streaming) in SC301IOT_s_stream()
1628 if (SC301IOT->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in SC301IOT_s_stream()
1629 SC301IOT->is_thunderboot = false; in SC301IOT_s_stream()
1630 __SC301IOT_power_on(SC301IOT); in SC301IOT_s_stream()
1639 ret = __SC301IOT_start_stream(SC301IOT); in SC301IOT_s_stream()
1646 __SC301IOT_stop_stream(SC301IOT); in SC301IOT_s_stream()
1650 SC301IOT->streaming = on; in SC301IOT_s_stream()
1653 mutex_unlock(&SC301IOT->mutex); in SC301IOT_s_stream()
1660 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_s_power() local
1661 struct i2c_client *client = SC301IOT->client; in SC301IOT_s_power()
1664 mutex_lock(&SC301IOT->mutex); in SC301IOT_s_power()
1667 if (SC301IOT->power_on == !!on) in SC301IOT_s_power()
1677 if (!SC301IOT->is_thunderboot) { in SC301IOT_s_power()
1678 ret = SC301IOT_write_array(SC301IOT->client, SC301IOT_global_regs); in SC301IOT_s_power()
1686 SC301IOT->power_on = true; in SC301IOT_s_power()
1689 SC301IOT->power_on = false; in SC301IOT_s_power()
1693 mutex_unlock(&SC301IOT->mutex); in SC301IOT_s_power()
1704 static int __SC301IOT_power_on(struct SC301IOT *SC301IOT) in __SC301IOT_power_on() argument
1708 struct device *dev = &SC301IOT->client->dev; in __SC301IOT_power_on()
1710 if (!IS_ERR_OR_NULL(SC301IOT->pins_default)) { in __SC301IOT_power_on()
1711 ret = pinctrl_select_state(SC301IOT->pinctrl, in __SC301IOT_power_on()
1712 SC301IOT->pins_default); in __SC301IOT_power_on()
1716 ret = clk_set_rate(SC301IOT->xvclk, SC301IOT_XVCLK_FREQ); in __SC301IOT_power_on()
1719 if (clk_get_rate(SC301IOT->xvclk) != SC301IOT_XVCLK_FREQ) in __SC301IOT_power_on()
1721 ret = clk_prepare_enable(SC301IOT->xvclk); in __SC301IOT_power_on()
1726 if (SC301IOT->is_thunderboot) in __SC301IOT_power_on()
1728 if (!IS_ERR(SC301IOT->reset_gpio)) in __SC301IOT_power_on()
1729 gpiod_set_value_cansleep(SC301IOT->reset_gpio, 0); in __SC301IOT_power_on()
1731 ret = regulator_bulk_enable(SC301IOT_NUM_SUPPLIES, SC301IOT->supplies); in __SC301IOT_power_on()
1736 if (!IS_ERR(SC301IOT->reset_gpio)) in __SC301IOT_power_on()
1737 gpiod_set_value_cansleep(SC301IOT->reset_gpio, 1); in __SC301IOT_power_on()
1740 if (!IS_ERR(SC301IOT->pwdn_gpio)) in __SC301IOT_power_on()
1741 gpiod_set_value_cansleep(SC301IOT->pwdn_gpio, 1); in __SC301IOT_power_on()
1744 if (!IS_ERR(SC301IOT->reset_gpio)) in __SC301IOT_power_on()
1756 clk_disable_unprepare(SC301IOT->xvclk); in __SC301IOT_power_on()
1761 static void __SC301IOT_power_off(struct SC301IOT *SC301IOT) in __SC301IOT_power_off() argument
1764 struct device *dev = &SC301IOT->client->dev; in __SC301IOT_power_off()
1766 clk_disable_unprepare(SC301IOT->xvclk); in __SC301IOT_power_off()
1767 if (SC301IOT->is_thunderboot) { in __SC301IOT_power_off()
1768 if (SC301IOT->is_first_streamoff) { in __SC301IOT_power_off()
1769 SC301IOT->is_thunderboot = false; in __SC301IOT_power_off()
1770 SC301IOT->is_first_streamoff = false; in __SC301IOT_power_off()
1776 if (!IS_ERR(SC301IOT->pwdn_gpio)) in __SC301IOT_power_off()
1777 gpiod_set_value_cansleep(SC301IOT->pwdn_gpio, 0); in __SC301IOT_power_off()
1778 if (!IS_ERR(SC301IOT->reset_gpio)) in __SC301IOT_power_off()
1779 gpiod_set_value_cansleep(SC301IOT->reset_gpio, 0); in __SC301IOT_power_off()
1780 if (!IS_ERR_OR_NULL(SC301IOT->pins_sleep)) { in __SC301IOT_power_off()
1781 ret = pinctrl_select_state(SC301IOT->pinctrl, in __SC301IOT_power_off()
1782 SC301IOT->pins_sleep); in __SC301IOT_power_off()
1786 regulator_bulk_disable(SC301IOT_NUM_SUPPLIES, SC301IOT->supplies); in __SC301IOT_power_off()
1793 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_runtime_resume() local
1795 return __SC301IOT_power_on(SC301IOT); in SC301IOT_runtime_resume()
1802 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_runtime_suspend() local
1804 __SC301IOT_power_off(SC301IOT); in SC301IOT_runtime_suspend()
1812 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_open() local
1817 mutex_lock(&SC301IOT->mutex); in SC301IOT_open()
1824 mutex_unlock(&SC301IOT->mutex); in SC301IOT_open()
1886 static void SC301IOT_modify_fps_info(struct SC301IOT *SC301IOT) in SC301IOT_modify_fps_info() argument
1888 const struct SC301IOT_mode *mode = SC301IOT->cur_mode; in SC301IOT_modify_fps_info()
1890 SC301IOT->cur_fps.denominator = mode->max_fps.denominator * mode->vts_def / in SC301IOT_modify_fps_info()
1891 SC301IOT->cur_vts; in SC301IOT_modify_fps_info()
1896 struct SC301IOT *SC301IOT = container_of(ctrl->handler, in SC301IOT_set_ctrl() local
1897 struct SC301IOT, ctrl_handler); in SC301IOT_set_ctrl()
1898 struct i2c_client *client = SC301IOT->client; in SC301IOT_set_ctrl()
1907 max = SC301IOT->cur_mode->height + ctrl->val - 4; in SC301IOT_set_ctrl()
1908 __v4l2_ctrl_modify_range(SC301IOT->exposure, in SC301IOT_set_ctrl()
1909 SC301IOT->exposure->minimum, max, in SC301IOT_set_ctrl()
1910 SC301IOT->exposure->step, in SC301IOT_set_ctrl()
1911 SC301IOT->exposure->default_value); in SC301IOT_set_ctrl()
1920 if (SC301IOT->cur_mode->hdr_mode == NO_HDR) { in SC301IOT_set_ctrl()
1923 ret = SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_ctrl()
1927 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_ctrl()
1931 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_ctrl()
1938 if (SC301IOT->cur_mode->hdr_mode == NO_HDR) in SC301IOT_set_ctrl()
1939 ret = SC301IOT_set_gain_reg(SC301IOT, ctrl->val, SC301IOT_LGAIN); in SC301IOT_set_ctrl()
1942 ret = SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_ctrl()
1945 (ctrl->val + SC301IOT->cur_mode->height) in SC301IOT_set_ctrl()
1947 ret |= SC301IOT_write_reg(SC301IOT->client, in SC301IOT_set_ctrl()
1950 (ctrl->val + SC301IOT->cur_mode->height) in SC301IOT_set_ctrl()
1953 SC301IOT->cur_vts = ctrl->val + SC301IOT->cur_mode->height; in SC301IOT_set_ctrl()
1954 SC301IOT_modify_fps_info(SC301IOT); in SC301IOT_set_ctrl()
1957 ret = SC301IOT_enable_test_pattern(SC301IOT, ctrl->val); in SC301IOT_set_ctrl()
1960 ret = SC301IOT_read_reg(SC301IOT->client, SC301IOT_FLIP_MIRROR_REG, in SC301IOT_set_ctrl()
1962 ret |= SC301IOT_write_reg(SC301IOT->client, SC301IOT_FLIP_MIRROR_REG, in SC301IOT_set_ctrl()
1967 ret = SC301IOT_read_reg(SC301IOT->client, SC301IOT_FLIP_MIRROR_REG, in SC301IOT_set_ctrl()
1969 ret |= SC301IOT_write_reg(SC301IOT->client, SC301IOT_FLIP_MIRROR_REG, in SC301IOT_set_ctrl()
1988 static int SC301IOT_initialize_controls(struct SC301IOT *SC301IOT) in SC301IOT_initialize_controls() argument
1997 handler = &SC301IOT->ctrl_handler; in SC301IOT_initialize_controls()
1998 mode = SC301IOT->cur_mode; in SC301IOT_initialize_controls()
2002 handler->lock = &SC301IOT->mutex; in SC301IOT_initialize_controls()
2013 SC301IOT->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in SC301IOT_initialize_controls()
2015 if (SC301IOT->hblank) in SC301IOT_initialize_controls()
2016 SC301IOT->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in SC301IOT_initialize_controls()
2018 SC301IOT->vblank = v4l2_ctrl_new_std(handler, &SC301IOT_ctrl_ops, in SC301IOT_initialize_controls()
2023 SC301IOT->exposure = v4l2_ctrl_new_std(handler, &SC301IOT_ctrl_ops, in SC301IOT_initialize_controls()
2027 SC301IOT->anal_gain = v4l2_ctrl_new_std(handler, &SC301IOT_ctrl_ops, in SC301IOT_initialize_controls()
2031 SC301IOT->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in SC301IOT_initialize_controls()
2044 dev_err(&SC301IOT->client->dev, in SC301IOT_initialize_controls()
2049 SC301IOT->subdev.ctrl_handler = handler; in SC301IOT_initialize_controls()
2050 SC301IOT->has_init_exp = false; in SC301IOT_initialize_controls()
2051 SC301IOT->cur_fps = mode->max_fps; in SC301IOT_initialize_controls()
2052 SC301IOT->cur_vts = mode->vts_def; in SC301IOT_initialize_controls()
2062 static int SC301IOT_check_sensor_id(struct SC301IOT *SC301IOT, in SC301IOT_check_sensor_id() argument
2065 struct device *dev = &SC301IOT->client->dev; in SC301IOT_check_sensor_id()
2069 if (SC301IOT->is_thunderboot) { in SC301IOT_check_sensor_id()
2086 static int SC301IOT_configure_regulators(struct SC301IOT *SC301IOT) in SC301IOT_configure_regulators() argument
2091 SC301IOT->supplies[i].supply = SC301IOT_supply_names[i]; in SC301IOT_configure_regulators()
2093 return devm_regulator_bulk_get(&SC301IOT->client->dev, in SC301IOT_configure_regulators()
2095 SC301IOT->supplies); in SC301IOT_configure_regulators()
2103 struct SC301IOT *SC301IOT; in SC301IOT_probe() local
2115 SC301IOT = devm_kzalloc(dev, sizeof(*SC301IOT), GFP_KERNEL); in SC301IOT_probe()
2116 if (!SC301IOT) in SC301IOT_probe()
2121 &SC301IOT->module_index); in SC301IOT_probe()
2123 &SC301IOT->module_facing); in SC301IOT_probe()
2125 &SC301IOT->module_name); in SC301IOT_probe()
2127 &SC301IOT->len_name); in SC301IOT_probe()
2133 SC301IOT->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in SC301IOT_probe()
2134 SC301IOT->sync_mode = NO_SYNC_MODE; in SC301IOT_probe()
2138 SC301IOT->sync_mode = EXTERNAL_MASTER_MODE; in SC301IOT_probe()
2140 SC301IOT->sync_mode = INTERNAL_MASTER_MODE; in SC301IOT_probe()
2142 SC301IOT->sync_mode = SLAVE_MODE; in SC301IOT_probe()
2145 switch (SC301IOT->sync_mode) { in SC301IOT_probe()
2147 SC301IOT->sync_mode = NO_SYNC_MODE; break; in SC301IOT_probe()
2157 SC301IOT->client = client; in SC301IOT_probe()
2160 SC301IOT->cur_mode = &supported_modes[i]; in SC301IOT_probe()
2165 SC301IOT->cur_mode = &supported_modes[0]; in SC301IOT_probe()
2167 SC301IOT->xvclk = devm_clk_get(dev, "xvclk"); in SC301IOT_probe()
2168 if (IS_ERR(SC301IOT->xvclk)) { in SC301IOT_probe()
2173 if (SC301IOT->is_thunderboot) { in SC301IOT_probe()
2174 SC301IOT->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in SC301IOT_probe()
2175 if (IS_ERR(SC301IOT->reset_gpio)) in SC301IOT_probe()
2178 SC301IOT->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in SC301IOT_probe()
2179 if (IS_ERR(SC301IOT->pwdn_gpio)) in SC301IOT_probe()
2182 SC301IOT->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in SC301IOT_probe()
2183 if (IS_ERR(SC301IOT->reset_gpio)) in SC301IOT_probe()
2186 SC301IOT->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in SC301IOT_probe()
2187 if (IS_ERR(SC301IOT->pwdn_gpio)) in SC301IOT_probe()
2191 SC301IOT->pinctrl = devm_pinctrl_get(dev); in SC301IOT_probe()
2192 if (!IS_ERR(SC301IOT->pinctrl)) { in SC301IOT_probe()
2193 SC301IOT->pins_default = in SC301IOT_probe()
2194 pinctrl_lookup_state(SC301IOT->pinctrl, in SC301IOT_probe()
2196 if (IS_ERR(SC301IOT->pins_default)) in SC301IOT_probe()
2199 SC301IOT->pins_sleep = in SC301IOT_probe()
2200 pinctrl_lookup_state(SC301IOT->pinctrl, in SC301IOT_probe()
2202 if (IS_ERR(SC301IOT->pins_sleep)) in SC301IOT_probe()
2208 ret = SC301IOT_configure_regulators(SC301IOT); in SC301IOT_probe()
2214 mutex_init(&SC301IOT->mutex); in SC301IOT_probe()
2216 sd = &SC301IOT->subdev; in SC301IOT_probe()
2218 ret = SC301IOT_initialize_controls(SC301IOT); in SC301IOT_probe()
2222 ret = __SC301IOT_power_on(SC301IOT); in SC301IOT_probe()
2226 ret = SC301IOT_check_sensor_id(SC301IOT, client); in SC301IOT_probe()
2236 SC301IOT->pad.flags = MEDIA_PAD_FL_SOURCE; in SC301IOT_probe()
2238 ret = media_entity_pads_init(&sd->entity, 1, &SC301IOT->pad); in SC301IOT_probe()
2244 if (strcmp(SC301IOT->module_facing, "back") == 0) in SC301IOT_probe()
2250 SC301IOT->module_index, facing, in SC301IOT_probe()
2269 __SC301IOT_power_off(SC301IOT); in SC301IOT_probe()
2271 v4l2_ctrl_handler_free(&SC301IOT->ctrl_handler); in SC301IOT_probe()
2273 mutex_destroy(&SC301IOT->mutex); in SC301IOT_probe()
2281 struct SC301IOT *SC301IOT = to_SC301IOT(sd); in SC301IOT_remove() local
2287 v4l2_ctrl_handler_free(&SC301IOT->ctrl_handler); in SC301IOT_remove()
2288 mutex_destroy(&SC301IOT->mutex); in SC301IOT_remove()
2292 __SC301IOT_power_off(SC301IOT); in SC301IOT_remove()