Lines Matching refs:os04a10
147 struct os04a10 { struct
194 #define to_os04a10(sd) container_of(sd, struct os04a10, subdev) argument
1328 static int __os04a10_power_on(struct os04a10 *os04a10);
1417 os04a10_find_best_fit(struct os04a10 *os04a10, struct v4l2_subdev_format *fmt) in os04a10_find_best_fit() argument
1425 for (i = 0; i < os04a10->cfg_num; i++) { in os04a10_find_best_fit()
1426 dist = os04a10_get_reso_dist(&os04a10->supported_modes[i], framefmt); in os04a10_find_best_fit()
1428 (os04a10->supported_modes[i].bus_fmt == framefmt->code)) { in os04a10_find_best_fit()
1434 return &os04a10->supported_modes[cur_best_fit]; in os04a10_find_best_fit()
1441 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_set_fmt() local
1446 u8 lanes = os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes; in os04a10_set_fmt()
1448 mutex_lock(&os04a10->mutex); in os04a10_set_fmt()
1450 mode = os04a10_find_best_fit(os04a10, fmt); in os04a10_set_fmt()
1459 mutex_unlock(&os04a10->mutex); in os04a10_set_fmt()
1463 os04a10->cur_mode = mode; in os04a10_set_fmt()
1465 __v4l2_ctrl_modify_range(os04a10->hblank, h_blank, in os04a10_set_fmt()
1468 __v4l2_ctrl_modify_range(os04a10->vblank, vblank_def, in os04a10_set_fmt()
1474 __v4l2_ctrl_s_ctrl_int64(os04a10->pixel_rate, in os04a10_set_fmt()
1476 __v4l2_ctrl_s_ctrl(os04a10->link_freq, in os04a10_set_fmt()
1480 mutex_unlock(&os04a10->mutex); in os04a10_set_fmt()
1489 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_get_fmt() local
1490 const struct os04a10_mode *mode = os04a10->cur_mode; in os04a10_get_fmt()
1492 mutex_lock(&os04a10->mutex); in os04a10_get_fmt()
1497 mutex_unlock(&os04a10->mutex); in os04a10_get_fmt()
1510 mutex_unlock(&os04a10->mutex); in os04a10_get_fmt()
1519 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_enum_mbus_code() local
1523 code->code = os04a10->cur_mode->bus_fmt; in os04a10_enum_mbus_code()
1532 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_enum_frame_sizes() local
1534 if (fse->index >= os04a10->cfg_num) in os04a10_enum_frame_sizes()
1537 if (fse->code != os04a10->supported_modes[fse->index].bus_fmt) in os04a10_enum_frame_sizes()
1540 fse->min_width = os04a10->supported_modes[fse->index].width; in os04a10_enum_frame_sizes()
1541 fse->max_width = os04a10->supported_modes[fse->index].width; in os04a10_enum_frame_sizes()
1542 fse->max_height = os04a10->supported_modes[fse->index].height; in os04a10_enum_frame_sizes()
1543 fse->min_height = os04a10->supported_modes[fse->index].height; in os04a10_enum_frame_sizes()
1548 static int os04a10_enable_test_pattern(struct os04a10 *os04a10, u32 pattern) in os04a10_enable_test_pattern() argument
1557 ret = os04a10_write_reg(os04a10->client, OS04A10_REG_TEST_PATTERN, in os04a10_enable_test_pattern()
1559 ret |= os04a10_write_reg(os04a10->client, OS04A10_REG_TEST_PATTERN + 0x40, in os04a10_enable_test_pattern()
1567 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_g_frame_interval() local
1568 const struct os04a10_mode *mode = os04a10->cur_mode; in os04a10_g_frame_interval()
1578 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_g_mbus_config() local
1579 const struct os04a10_mode *mode = os04a10->cur_mode; in os04a10_g_mbus_config()
1581 u8 lanes = os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes; in os04a10_g_mbus_config()
1599 static void os04a10_get_module_inf(struct os04a10 *os04a10, in os04a10_get_module_inf() argument
1604 strscpy(inf->base.module, os04a10->module_name, in os04a10_get_module_inf()
1606 strscpy(inf->base.lens, os04a10->len_name, sizeof(inf->base.lens)); in os04a10_get_module_inf()
1609 static int os04a10_set_hdrae(struct os04a10 *os04a10, in os04a10_set_hdrae() argument
1624 if (!os04a10->has_init_exp && !os04a10->streaming) { in os04a10_set_hdrae()
1625 os04a10->init_hdrae_exp = *ae; in os04a10_set_hdrae()
1626 os04a10->has_init_exp = true; in os04a10_set_hdrae()
1627 if (os04a10->init_hdrae_exp.short_exp_reg >= 0x90) { in os04a10_set_hdrae()
1628 dev_err(&os04a10->client->dev, "short exposure must less than 0x90 before start stream!\n"); in os04a10_set_hdrae()
1631 dev_dbg(&os04a10->client->dev, "os04a10 don't stream, record exp for hdr!\n"); in os04a10_set_hdrae()
1643 dev_dbg(&os04a10->client->dev, in os04a10_set_hdrae()
1649 if (os04a10->cur_mode->hdr_mode == HDR_X2) { in os04a10_set_hdrae()
1658 ret = os04a10_read_reg(os04a10->client, OS04A10_REG_HCG_SWITCH, in os04a10_set_hdrae()
1661 if (os04a10->long_hcg && l_cg_mode == GAIN_MODE_LCG) { in os04a10_set_hdrae()
1663 os04a10->long_hcg = false; in os04a10_set_hdrae()
1665 } else if (!os04a10->long_hcg && l_cg_mode == GAIN_MODE_HCG) { in os04a10_set_hdrae()
1667 os04a10->long_hcg = true; in os04a10_set_hdrae()
1670 if (os04a10->middle_hcg && m_cg_mode == GAIN_MODE_LCG) { in os04a10_set_hdrae()
1672 os04a10->middle_hcg = false; in os04a10_set_hdrae()
1674 } else if (!os04a10->middle_hcg && m_cg_mode == GAIN_MODE_HCG) { in os04a10_set_hdrae()
1676 os04a10->middle_hcg = true; in os04a10_set_hdrae()
1687 if (os04a10->cur_mode->hdr_mode == HDR_X3 && s_a_gain > 248) { in os04a10_set_hdrae()
1692 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1696 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1700 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1704 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1708 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1712 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1716 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1720 if (os04a10->cur_mode->hdr_mode == HDR_X3) { in os04a10_set_hdrae()
1722 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1726 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1730 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1734 if (os04a10->short_hcg && s_cg_mode == GAIN_MODE_LCG) { in os04a10_set_hdrae()
1736 os04a10->short_hcg = false; in os04a10_set_hdrae()
1738 } else if (!os04a10->short_hcg && s_cg_mode == GAIN_MODE_HCG) { in os04a10_set_hdrae()
1740 os04a10->short_hcg = true; in os04a10_set_hdrae()
1745 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1749 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1753 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_hdrae()
1760 static int os04a10_set_conversion_gain(struct os04a10 *os04a10, u32 *cg) in os04a10_set_conversion_gain() argument
1763 struct i2c_client *client = os04a10->client; in os04a10_set_conversion_gain()
1768 dev_dbg(&os04a10->client->dev, "set conversion gain %d\n", cur_cg); in os04a10_set_conversion_gain()
1769 if (os04a10->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in os04a10_set_conversion_gain()
1770 os04a10->is_thunderboot = false; in os04a10_set_conversion_gain()
1771 os04a10->is_thunderboot_ng = true; in os04a10_set_conversion_gain()
1772 __os04a10_power_on(os04a10); in os04a10_set_conversion_gain()
1779 if (os04a10->long_hcg && cur_cg == GAIN_MODE_LCG) { in os04a10_set_conversion_gain()
1782 os04a10->long_hcg = false; in os04a10_set_conversion_gain()
1783 } else if (!os04a10->long_hcg && cur_cg == GAIN_MODE_HCG) { in os04a10_set_conversion_gain()
1786 os04a10->long_hcg = true; in os04a10_set_conversion_gain()
1817 struct os04a10 *os04a10 = to_os04a10(sd); in set_conversion_gain_status() local
1823 os04a10_set_conversion_gain(os04a10, &status); in set_conversion_gain_status()
1851 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_ioctl() local
1859 u8 lanes = os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes; in os04a10_ioctl()
1864 return os04a10_set_hdrae(os04a10, arg); in os04a10_ioctl()
1867 w = os04a10->cur_mode->width; in os04a10_ioctl()
1868 h = os04a10->cur_mode->height; in os04a10_ioctl()
1869 for (i = 0; i < os04a10->cfg_num; i++) { in os04a10_ioctl()
1870 if (w == os04a10->supported_modes[i].width && in os04a10_ioctl()
1871 h == os04a10->supported_modes[i].height && in os04a10_ioctl()
1872 os04a10->supported_modes[i].hdr_mode == hdr_cfg->hdr_mode) { in os04a10_ioctl()
1873 os04a10->cur_mode = &os04a10->supported_modes[i]; in os04a10_ioctl()
1877 if (i == os04a10->cfg_num) { in os04a10_ioctl()
1878 dev_err(&os04a10->client->dev, in os04a10_ioctl()
1883 mode = os04a10->cur_mode; in os04a10_ioctl()
1886 __v4l2_ctrl_modify_range(os04a10->hblank, w, w, 1, w); in os04a10_ioctl()
1887 __v4l2_ctrl_modify_range(os04a10->vblank, h, in os04a10_ioctl()
1888 OS04A10_VTS_MAX - os04a10->cur_mode->height, in os04a10_ioctl()
1893 __v4l2_ctrl_s_ctrl_int64(os04a10->pixel_rate, in os04a10_ioctl()
1895 __v4l2_ctrl_s_ctrl(os04a10->link_freq, in os04a10_ioctl()
1897 dev_info(&os04a10->client->dev, in os04a10_ioctl()
1899 os04a10->cur_mode->hdr_mode); in os04a10_ioctl()
1903 os04a10_get_module_inf(os04a10, (struct rkmodule_inf *)arg); in os04a10_ioctl()
1908 hdr_cfg->hdr_mode = os04a10->cur_mode->hdr_mode; in os04a10_ioctl()
1911 ret = os04a10_set_conversion_gain(os04a10, (u32 *)arg); in os04a10_ioctl()
1918 ret = os04a10_write_reg(os04a10->client, OS04A10_REG_CTRL_MODE, in os04a10_ioctl()
1921 ret = os04a10_write_reg(os04a10->client, OS04A10_REG_CTRL_MODE, in os04a10_ioctl()
1925 if (os04a10->dcg_ratio == 0) in os04a10_ioctl()
1928 dcg->integer = (os04a10->dcg_ratio >> 8) & 0xff; in os04a10_ioctl()
1929 dcg->decimal = os04a10->dcg_ratio & 0xff; in os04a10_ioctl()
1931 dev_info(&os04a10->client->dev, in os04a10_ioctl()
2049 static int os04a10_init_conversion_gain(struct os04a10 *os04a10) in os04a10_init_conversion_gain() argument
2052 struct i2c_client *client = os04a10->client; in os04a10_init_conversion_gain()
2060 if (!os04a10->long_hcg) in os04a10_init_conversion_gain()
2062 if (!os04a10->middle_hcg) in os04a10_init_conversion_gain()
2064 if (!os04a10->short_hcg) in os04a10_init_conversion_gain()
2073 static int __os04a10_start_stream(struct os04a10 *os04a10) in __os04a10_start_stream() argument
2077 if (!os04a10->is_thunderboot) { in __os04a10_start_stream()
2078 ret = os04a10_write_array(os04a10->client, os04a10->cur_mode->reg_list); in __os04a10_start_stream()
2083 ret = os04a10_init_conversion_gain(os04a10); in __os04a10_start_stream()
2088 ret = __v4l2_ctrl_handler_setup(&os04a10->ctrl_handler); in __os04a10_start_stream()
2091 if (os04a10->has_init_exp && os04a10->cur_mode->hdr_mode != NO_HDR) { in __os04a10_start_stream()
2092 ret = os04a10_ioctl(&os04a10->subdev, PREISP_CMD_SET_HDRAE_EXP, &os04a10->init_hdrae_exp); in __os04a10_start_stream()
2094 dev_err(&os04a10->client->dev, in __os04a10_start_stream()
2099 return os04a10_write_reg(os04a10->client, OS04A10_REG_CTRL_MODE, in __os04a10_start_stream()
2103 static int __os04a10_stop_stream(struct os04a10 *os04a10) in __os04a10_stop_stream() argument
2105 os04a10->has_init_exp = false; in __os04a10_stop_stream()
2106 if (os04a10->is_thunderboot) in __os04a10_stop_stream()
2107 os04a10->is_first_streamoff = true; in __os04a10_stop_stream()
2108 return os04a10_write_reg(os04a10->client, OS04A10_REG_CTRL_MODE, in __os04a10_stop_stream()
2114 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_s_stream() local
2115 struct i2c_client *client = os04a10->client; in os04a10_s_stream()
2118 mutex_lock(&os04a10->mutex); in os04a10_s_stream()
2120 if (on == os04a10->streaming) in os04a10_s_stream()
2124 if (os04a10->is_thunderboot && rkisp_tb_get_state() == RKISP_TB_NG) { in os04a10_s_stream()
2125 os04a10->is_thunderboot = false; in os04a10_s_stream()
2126 __os04a10_power_on(os04a10); in os04a10_s_stream()
2134 ret = __os04a10_start_stream(os04a10); in os04a10_s_stream()
2141 __os04a10_stop_stream(os04a10); in os04a10_s_stream()
2145 os04a10->streaming = on; in os04a10_s_stream()
2148 mutex_unlock(&os04a10->mutex); in os04a10_s_stream()
2155 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_s_power() local
2156 struct i2c_client *client = os04a10->client; in os04a10_s_power()
2159 mutex_lock(&os04a10->mutex); in os04a10_s_power()
2162 if (os04a10->power_on == !!on) in os04a10_s_power()
2172 if (!os04a10->is_thunderboot) { in os04a10_s_power()
2173 ret |= os04a10_write_reg(os04a10->client, in os04a10_s_power()
2178 ret |= os04a10_write_array(os04a10->client, in os04a10_s_power()
2179 os04a10->cur_mode->global_reg_list); in os04a10_s_power()
2181 dev_err(&os04a10->client->dev, in os04a10_s_power()
2187 os04a10->power_on = true; in os04a10_s_power()
2190 os04a10->power_on = false; in os04a10_s_power()
2194 mutex_unlock(&os04a10->mutex); in os04a10_s_power()
2205 static int __os04a10_power_on(struct os04a10 *os04a10) in __os04a10_power_on() argument
2209 struct device *dev = &os04a10->client->dev; in __os04a10_power_on()
2211 if (os04a10->is_thunderboot) in __os04a10_power_on()
2214 if (!IS_ERR_OR_NULL(os04a10->pins_default)) { in __os04a10_power_on()
2215 ret = pinctrl_select_state(os04a10->pinctrl, in __os04a10_power_on()
2216 os04a10->pins_default); in __os04a10_power_on()
2220 ret = clk_set_rate(os04a10->xvclk, OS04A10_XVCLK_FREQ); in __os04a10_power_on()
2223 if (clk_get_rate(os04a10->xvclk) != OS04A10_XVCLK_FREQ) in __os04a10_power_on()
2225 ret = clk_prepare_enable(os04a10->xvclk); in __os04a10_power_on()
2230 if (!IS_ERR(os04a10->reset_gpio)) in __os04a10_power_on()
2231 gpiod_direction_output(os04a10->reset_gpio, 1); in __os04a10_power_on()
2233 ret = regulator_bulk_enable(OS04A10_NUM_SUPPLIES, os04a10->supplies); in __os04a10_power_on()
2239 if (!IS_ERR(os04a10->reset_gpio)) in __os04a10_power_on()
2240 gpiod_direction_output(os04a10->reset_gpio, 0); in __os04a10_power_on()
2243 if (!IS_ERR(os04a10->pwdn_gpio)) in __os04a10_power_on()
2244 gpiod_direction_output(os04a10->pwdn_gpio, 1); in __os04a10_power_on()
2249 if (!IS_ERR(os04a10->reset_gpio)) in __os04a10_power_on()
2261 clk_disable_unprepare(os04a10->xvclk); in __os04a10_power_on()
2266 static void __os04a10_power_off(struct os04a10 *os04a10) in __os04a10_power_off() argument
2269 struct device *dev = &os04a10->client->dev; in __os04a10_power_off()
2271 if (os04a10->is_thunderboot) { in __os04a10_power_off()
2272 if (os04a10->is_first_streamoff) { in __os04a10_power_off()
2273 os04a10->is_thunderboot = false; in __os04a10_power_off()
2274 os04a10->is_first_streamoff = false; in __os04a10_power_off()
2280 if (!IS_ERR(os04a10->pwdn_gpio)) in __os04a10_power_off()
2281 gpiod_direction_output(os04a10->pwdn_gpio, 0); in __os04a10_power_off()
2283 clk_disable_unprepare(os04a10->xvclk); in __os04a10_power_off()
2285 if (!IS_ERR(os04a10->reset_gpio)) in __os04a10_power_off()
2286 gpiod_direction_output(os04a10->reset_gpio, 0); in __os04a10_power_off()
2287 if (!IS_ERR_OR_NULL(os04a10->pins_sleep)) { in __os04a10_power_off()
2288 ret = pinctrl_select_state(os04a10->pinctrl, in __os04a10_power_off()
2289 os04a10->pins_sleep); in __os04a10_power_off()
2294 if (os04a10->is_thunderboot_ng) { in __os04a10_power_off()
2295 os04a10->is_thunderboot_ng = false; in __os04a10_power_off()
2296 regulator_bulk_disable(OS04A10_NUM_SUPPLIES, os04a10->supplies); in __os04a10_power_off()
2305 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_runtime_resume() local
2307 return __os04a10_power_on(os04a10); in os04a10_runtime_resume()
2314 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_runtime_suspend() local
2316 __os04a10_power_off(os04a10); in os04a10_runtime_suspend()
2324 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_open() local
2327 const struct os04a10_mode *def_mode = &os04a10->supported_modes[0]; in os04a10_open()
2329 mutex_lock(&os04a10->mutex); in os04a10_open()
2336 mutex_unlock(&os04a10->mutex); in os04a10_open()
2347 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_enum_frame_interval() local
2349 if (fie->index >= os04a10->cfg_num) in os04a10_enum_frame_interval()
2352 fie->code = os04a10->supported_modes[fie->index].bus_fmt; in os04a10_enum_frame_interval()
2353 fie->width = os04a10->supported_modes[fie->index].width; in os04a10_enum_frame_interval()
2354 fie->height = os04a10->supported_modes[fie->index].height; in os04a10_enum_frame_interval()
2355 fie->interval = os04a10->supported_modes[fie->index].max_fps; in os04a10_enum_frame_interval()
2356 fie->reserved[0] = os04a10->supported_modes[fie->index].hdr_mode; in os04a10_enum_frame_interval()
2401 struct os04a10 *os04a10 = container_of(ctrl->handler, in os04a10_set_ctrl() local
2402 struct os04a10, ctrl_handler); in os04a10_set_ctrl()
2403 struct i2c_client *client = os04a10->client; in os04a10_set_ctrl()
2413 max = os04a10->cur_mode->height + ctrl->val - 4; in os04a10_set_ctrl()
2414 __v4l2_ctrl_modify_range(os04a10->exposure, in os04a10_set_ctrl()
2415 os04a10->exposure->minimum, max, in os04a10_set_ctrl()
2416 os04a10->exposure->step, in os04a10_set_ctrl()
2417 os04a10->exposure->default_value); in os04a10_set_ctrl()
2426 ret = os04a10_write_reg(os04a10->client, in os04a10_set_ctrl()
2441 ret = os04a10_write_reg(os04a10->client, in os04a10_set_ctrl()
2445 ret |= os04a10_write_reg(os04a10->client, in os04a10_set_ctrl()
2453 ret = os04a10_write_reg(os04a10->client, OS04A10_REG_VTS, in os04a10_set_ctrl()
2455 ctrl->val + os04a10->cur_mode->height); in os04a10_set_ctrl()
2460 ret = os04a10_enable_test_pattern(os04a10, ctrl->val); in os04a10_set_ctrl()
2463 ret = os04a10_read_reg(os04a10->client, OS04A10_FLIP_REG, in os04a10_set_ctrl()
2470 ret |= os04a10_write_reg(os04a10->client, OS04A10_FLIP_REG, in os04a10_set_ctrl()
2474 os04a10->flip = val; in os04a10_set_ctrl()
2477 ret = os04a10_read_reg(os04a10->client, OS04A10_FLIP_REG, in os04a10_set_ctrl()
2484 ret |= os04a10_write_reg(os04a10->client, OS04A10_FLIP_REG, in os04a10_set_ctrl()
2488 os04a10->flip = val; in os04a10_set_ctrl()
2505 static int os04a10_initialize_controls(struct os04a10 *os04a10) in os04a10_initialize_controls() argument
2514 u8 lanes = os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes; in os04a10_initialize_controls()
2516 handler = &os04a10->ctrl_handler; in os04a10_initialize_controls()
2517 mode = os04a10->cur_mode; in os04a10_initialize_controls()
2521 handler->lock = &os04a10->mutex; in os04a10_initialize_controls()
2523 os04a10->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in os04a10_initialize_controls()
2531 os04a10->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in os04a10_initialize_controls()
2536 __v4l2_ctrl_s_ctrl(os04a10->link_freq, dst_link_freq); in os04a10_initialize_controls()
2539 os04a10->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in os04a10_initialize_controls()
2541 if (os04a10->hblank) in os04a10_initialize_controls()
2542 os04a10->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in os04a10_initialize_controls()
2545 os04a10->vblank = v4l2_ctrl_new_std(handler, &os04a10_ctrl_ops, in os04a10_initialize_controls()
2551 os04a10->exposure = v4l2_ctrl_new_std(handler, &os04a10_ctrl_ops, in os04a10_initialize_controls()
2556 os04a10->anal_gain = v4l2_ctrl_new_std(handler, &os04a10_ctrl_ops, in os04a10_initialize_controls()
2561 os04a10->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in os04a10_initialize_controls()
2566 os04a10->h_flip = v4l2_ctrl_new_std(handler, &os04a10_ctrl_ops, in os04a10_initialize_controls()
2569 os04a10->v_flip = v4l2_ctrl_new_std(handler, &os04a10_ctrl_ops, in os04a10_initialize_controls()
2571 os04a10->flip = 0; in os04a10_initialize_controls()
2574 dev_err(&os04a10->client->dev, in os04a10_initialize_controls()
2579 os04a10->subdev.ctrl_handler = handler; in os04a10_initialize_controls()
2580 os04a10->has_init_exp = false; in os04a10_initialize_controls()
2581 os04a10->long_hcg = false; in os04a10_initialize_controls()
2582 os04a10->middle_hcg = false; in os04a10_initialize_controls()
2583 os04a10->short_hcg = false; in os04a10_initialize_controls()
2584 if (!os04a10->is_thunderboot) in os04a10_initialize_controls()
2585 os04a10->is_thunderboot_ng = true; in os04a10_initialize_controls()
2595 static int os04a10_check_sensor_id(struct os04a10 *os04a10, in os04a10_check_sensor_id() argument
2598 struct device *dev = &os04a10->client->dev; in os04a10_check_sensor_id()
2602 if (os04a10->is_thunderboot) { in os04a10_check_sensor_id()
2619 static int os04a10_configure_regulators(struct os04a10 *os04a10) in os04a10_configure_regulators() argument
2624 os04a10->supplies[i].supply = os04a10_supply_names[i]; in os04a10_configure_regulators()
2626 return devm_regulator_bulk_get(&os04a10->client->dev, in os04a10_configure_regulators()
2628 os04a10->supplies); in os04a10_configure_regulators()
2631 static int os04a10_get_dcg_ratio(struct os04a10 *os04a10) in os04a10_get_dcg_ratio() argument
2633 struct device *dev = &os04a10->client->dev; in os04a10_get_dcg_ratio()
2637 if (os04a10->is_thunderboot) { in os04a10_get_dcg_ratio()
2638 ret = os04a10_read_reg(os04a10->client, 0x77fe, in os04a10_get_dcg_ratio()
2641 ret = os04a10_write_reg(os04a10->client, OS04A10_REG_CTRL_MODE, in os04a10_get_dcg_ratio()
2644 ret |= os04a10_read_reg(os04a10->client, 0x77fe, in os04a10_get_dcg_ratio()
2646 ret |= os04a10_write_reg(os04a10->client, OS04A10_REG_CTRL_MODE, in os04a10_get_dcg_ratio()
2651 os04a10->dcg_ratio = 0; in os04a10_get_dcg_ratio()
2654 os04a10->dcg_ratio = val; in os04a10_get_dcg_ratio()
2666 struct os04a10 *os04a10; in os04a10_probe() local
2678 os04a10 = devm_kzalloc(dev, sizeof(*os04a10), GFP_KERNEL); in os04a10_probe()
2679 if (!os04a10) in os04a10_probe()
2683 &os04a10->module_index); in os04a10_probe()
2685 &os04a10->module_facing); in os04a10_probe()
2687 &os04a10->module_name); in os04a10_probe()
2689 &os04a10->len_name); in os04a10_probe()
2695 os04a10->is_thunderboot = IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP); in os04a10_probe()
2709 &os04a10->bus_cfg); in os04a10_probe()
2714 if (os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes == 4) { in os04a10_probe()
2715 os04a10->supported_modes = supported_modes; in os04a10_probe()
2716 os04a10->cfg_num = ARRAY_SIZE(supported_modes); in os04a10_probe()
2718 os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes); in os04a10_probe()
2720 os04a10->supported_modes = supported_modes_2lane; in os04a10_probe()
2721 os04a10->cfg_num = ARRAY_SIZE(supported_modes_2lane); in os04a10_probe()
2723 os04a10->bus_cfg.bus.mipi_csi2.num_data_lanes); in os04a10_probe()
2726 for (i = 0; i < os04a10->cfg_num; i++) { in os04a10_probe()
2728 os04a10->cur_mode = &os04a10->supported_modes[i]; in os04a10_probe()
2732 os04a10->client = client; in os04a10_probe()
2734 os04a10->xvclk = devm_clk_get(dev, "xvclk"); in os04a10_probe()
2735 if (IS_ERR(os04a10->xvclk)) { in os04a10_probe()
2740 os04a10->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); in os04a10_probe()
2741 if (IS_ERR(os04a10->reset_gpio)) in os04a10_probe()
2744 os04a10->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS); in os04a10_probe()
2745 if (IS_ERR(os04a10->pwdn_gpio)) in os04a10_probe()
2748 os04a10->pinctrl = devm_pinctrl_get(dev); in os04a10_probe()
2749 if (!IS_ERR(os04a10->pinctrl)) { in os04a10_probe()
2750 os04a10->pins_default = in os04a10_probe()
2751 pinctrl_lookup_state(os04a10->pinctrl, in os04a10_probe()
2753 if (IS_ERR(os04a10->pins_default)) in os04a10_probe()
2756 os04a10->pins_sleep = in os04a10_probe()
2757 pinctrl_lookup_state(os04a10->pinctrl, in os04a10_probe()
2759 if (IS_ERR(os04a10->pins_sleep)) in os04a10_probe()
2765 ret = os04a10_configure_regulators(os04a10); in os04a10_probe()
2771 mutex_init(&os04a10->mutex); in os04a10_probe()
2773 sd = &os04a10->subdev; in os04a10_probe()
2775 ret = os04a10_initialize_controls(os04a10); in os04a10_probe()
2779 ret = __os04a10_power_on(os04a10); in os04a10_probe()
2783 ret = os04a10_check_sensor_id(os04a10, client); in os04a10_probe()
2787 ret = os04a10_get_dcg_ratio(os04a10); in os04a10_probe()
2796 os04a10->pad.flags = MEDIA_PAD_FL_SOURCE; in os04a10_probe()
2798 ret = media_entity_pads_init(&sd->entity, 1, &os04a10->pad); in os04a10_probe()
2804 if (strcmp(os04a10->module_facing, "back") == 0) in os04a10_probe()
2810 os04a10->module_index, facing, in os04a10_probe()
2831 __os04a10_power_off(os04a10); in os04a10_probe()
2833 v4l2_ctrl_handler_free(&os04a10->ctrl_handler); in os04a10_probe()
2835 mutex_destroy(&os04a10->mutex); in os04a10_probe()
2843 struct os04a10 *os04a10 = to_os04a10(sd); in os04a10_remove() local
2849 v4l2_ctrl_handler_free(&os04a10->ctrl_handler); in os04a10_remove()
2850 mutex_destroy(&os04a10->mutex); in os04a10_remove()
2854 __os04a10_power_off(os04a10); in os04a10_remove()