Lines Matching refs:gc4c33

128 struct gc4c33 {  struct
163 #define to_gc4c33(sd) container_of(sd, struct gc4c33, subdev) argument
1240 gc4c33_find_best_fit(struct gc4c33 *gc4c33, struct v4l2_subdev_format *fmt) in gc4c33_find_best_fit() argument
1248 for (i = 0; i < gc4c33->cfg_num; i++) { in gc4c33_find_best_fit()
1263 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_set_fmt() local
1267 mutex_lock(&gc4c33->mutex); in gc4c33_set_fmt()
1269 mode = gc4c33_find_best_fit(gc4c33, fmt); in gc4c33_set_fmt()
1278 mutex_unlock(&gc4c33->mutex); in gc4c33_set_fmt()
1282 gc4c33->cur_mode = mode; in gc4c33_set_fmt()
1284 __v4l2_ctrl_modify_range(gc4c33->hblank, h_blank, in gc4c33_set_fmt()
1287 __v4l2_ctrl_modify_range(gc4c33->vblank, vblank_def, in gc4c33_set_fmt()
1292 mutex_unlock(&gc4c33->mutex); in gc4c33_set_fmt()
1301 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_get_fmt() local
1302 const struct gc4c33_mode *mode = gc4c33->cur_mode; in gc4c33_get_fmt()
1304 mutex_lock(&gc4c33->mutex); in gc4c33_get_fmt()
1309 mutex_unlock(&gc4c33->mutex); in gc4c33_get_fmt()
1318 mutex_unlock(&gc4c33->mutex); in gc4c33_get_fmt()
1327 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_enum_mbus_code() local
1331 code->code = gc4c33->cur_mode->bus_fmt; in gc4c33_enum_mbus_code()
1340 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_enum_frame_sizes() local
1342 if (fse->index >= gc4c33->cfg_num) in gc4c33_enum_frame_sizes()
1356 static int gc4c33_enable_test_pattern(struct gc4c33 *gc4c33, u32 pattern) in gc4c33_enable_test_pattern() argument
1365 return gc4c33_write_reg(gc4c33->client, GC4C33_REG_TEST_PATTERN, in gc4c33_enable_test_pattern()
1369 static int gc4c33_set_gain_reg(struct gc4c33 *gc4c33, u32 gain) in gc4c33_set_gain_reg() argument
1386 gc4c33_write_reg(gc4c33->client, 0x31d, GC4C33_REG_VALUE_08BIT, 0x2a); in gc4c33_set_gain_reg()
1387 gc4c33_write_reg(gc4c33->client, 0x2fd, in gc4c33_set_gain_reg()
1389 gc4c33_write_reg(gc4c33->client, 0x2fc, in gc4c33_set_gain_reg()
1391 gc4c33_write_reg(gc4c33->client, 0x263, in gc4c33_set_gain_reg()
1393 gc4c33_write_reg(gc4c33->client, 0x267, in gc4c33_set_gain_reg()
1396 gc4c33_write_reg(gc4c33->client, 0x31d, GC4C33_REG_VALUE_08BIT, 0x28); in gc4c33_set_gain_reg()
1398 gc4c33_write_reg(gc4c33->client, 0x2b3, in gc4c33_set_gain_reg()
1400 gc4c33_write_reg(gc4c33->client, 0x2b4, in gc4c33_set_gain_reg()
1402 gc4c33_write_reg(gc4c33->client, 0x2b8, in gc4c33_set_gain_reg()
1404 gc4c33_write_reg(gc4c33->client, 0x2b9, in gc4c33_set_gain_reg()
1406 gc4c33_write_reg(gc4c33->client, 0x515, in gc4c33_set_gain_reg()
1409 gc4c33_write_reg(gc4c33->client, 0x20e, in gc4c33_set_gain_reg()
1411 gc4c33_write_reg(gc4c33->client, 0x20f, in gc4c33_set_gain_reg()
1416 static int gc4c33_set_gain_reg_720P(struct gc4c33 *gc4c33, u32 gain) in gc4c33_set_gain_reg_720P() argument
1431 gc4c33_write_reg(gc4c33->client, 0x2b3, in gc4c33_set_gain_reg_720P()
1433 gc4c33_write_reg(gc4c33->client, 0x2b4, in gc4c33_set_gain_reg_720P()
1435 gc4c33_write_reg(gc4c33->client, 0x2b8, in gc4c33_set_gain_reg_720P()
1437 gc4c33_write_reg(gc4c33->client, 0x2b9, in gc4c33_set_gain_reg_720P()
1439 gc4c33_write_reg(gc4c33->client, 0x515, in gc4c33_set_gain_reg_720P()
1441 gc4c33_write_reg(gc4c33->client, 0x20e, in gc4c33_set_gain_reg_720P()
1443 gc4c33_write_reg(gc4c33->client, 0x20f, in gc4c33_set_gain_reg_720P()
1448 static int gc4c33_set_dpcc_cfg(struct gc4c33 *gc4c33, in gc4c33_set_dpcc_cfg() argument
1455 ret = gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1460 ret |= gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1466 ret |= gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1472 ret = gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1477 ret |= gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1482 ret |= gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1488 ret = gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1493 ret |= gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1498 ret |= gc4c33_write_reg(gc4c33->client, in gc4c33_set_dpcc_cfg()
1510 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_g_frame_interval() local
1511 const struct gc4c33_mode *mode = gc4c33->cur_mode; in gc4c33_g_frame_interval()
1521 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_g_mbus_config() local
1522 const struct gc4c33_mode *mode = gc4c33->cur_mode; in gc4c33_g_mbus_config()
1538 static void gc4c33_get_module_inf(struct gc4c33 *gc4c33, in gc4c33_get_module_inf() argument
1543 strlcpy(inf->base.module, gc4c33->module_name, in gc4c33_get_module_inf()
1545 strlcpy(inf->base.lens, gc4c33->len_name, sizeof(inf->base.lens)); in gc4c33_get_module_inf()
1548 static int gc4c33_get_channel_info(struct gc4c33 *gc4c33, struct rkmodule_channel_info *ch_info) in gc4c33_get_channel_info() argument
1552 ch_info->vc = gc4c33->cur_mode->vc[ch_info->index]; in gc4c33_get_channel_info()
1553 ch_info->width = gc4c33->cur_mode->width; in gc4c33_get_channel_info()
1554 ch_info->height = gc4c33->cur_mode->height; in gc4c33_get_channel_info()
1555 ch_info->bus_fmt = gc4c33->cur_mode->bus_fmt; in gc4c33_get_channel_info()
1561 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_ioctl() local
1571 gc4c33_get_module_inf(gc4c33, (struct rkmodule_inf *)arg); in gc4c33_ioctl()
1576 hdr->hdr_mode = gc4c33->cur_mode->hdr_mode; in gc4c33_ioctl()
1580 w = gc4c33->cur_mode->width; in gc4c33_ioctl()
1581 h = gc4c33->cur_mode->height; in gc4c33_ioctl()
1582 for (i = 0; i < gc4c33->cfg_num; i++) { in gc4c33_ioctl()
1586 gc4c33->cur_mode = &supported_modes[i]; in gc4c33_ioctl()
1590 if (i == gc4c33->cfg_num) { in gc4c33_ioctl()
1591 dev_err(&gc4c33->client->dev, in gc4c33_ioctl()
1596 w = gc4c33->cur_mode->hts_def - in gc4c33_ioctl()
1597 gc4c33->cur_mode->width; in gc4c33_ioctl()
1598 h = gc4c33->cur_mode->vts_def - in gc4c33_ioctl()
1599 gc4c33->cur_mode->height; in gc4c33_ioctl()
1600 __v4l2_ctrl_modify_range(gc4c33->hblank, w, w, 1, w); in gc4c33_ioctl()
1601 __v4l2_ctrl_modify_range(gc4c33->vblank, h, in gc4c33_ioctl()
1603 gc4c33->cur_mode->height, in gc4c33_ioctl()
1610 ret = gc4c33_set_dpcc_cfg(gc4c33, (struct rkmodule_dpcc_cfg *)arg); in gc4c33_ioctl()
1623 ret = gc4c33_write_reg(gc4c33->client, GC4C33_REG_CTRL_MODE, in gc4c33_ioctl()
1626 ret = gc4c33_write_reg(gc4c33->client, GC4C33_REG_CTRL_MODE, in gc4c33_ioctl()
1631 ret = gc4c33_get_channel_info(gc4c33, ch_info); in gc4c33_ioctl()
1790 static int gc4c33_sensor_dpc_otp_dd(struct gc4c33 *gc4c33) in gc4c33_sensor_dpc_otp_dd() argument
1795 ret = gc4c33_write_reg(gc4c33->client, 0x0a70, in gc4c33_sensor_dpc_otp_dd()
1797 ret |= gc4c33_write_reg(gc4c33->client, 0x0317, in gc4c33_sensor_dpc_otp_dd()
1799 ret |= gc4c33_write_reg(gc4c33->client, 0x0a67, in gc4c33_sensor_dpc_otp_dd()
1801 ret |= gc4c33_write_reg(gc4c33->client, 0x0a4f, in gc4c33_sensor_dpc_otp_dd()
1803 ret |= gc4c33_write_reg(gc4c33->client, 0x0a54, in gc4c33_sensor_dpc_otp_dd()
1805 ret |= gc4c33_write_reg(gc4c33->client, 0x0a66, in gc4c33_sensor_dpc_otp_dd()
1807 ret |= gc4c33_write_reg(gc4c33->client, 0x0a69, in gc4c33_sensor_dpc_otp_dd()
1809 ret |= gc4c33_write_reg(gc4c33->client, 0x0a6a, in gc4c33_sensor_dpc_otp_dd()
1811 ret |= gc4c33_write_reg(gc4c33->client, 0x0313, in gc4c33_sensor_dpc_otp_dd()
1813 ret |= gc4c33_read_reg(gc4c33->client, 0x0a6c, in gc4c33_sensor_dpc_otp_dd()
1815 ret |= gc4c33_write_reg(gc4c33->client, 0x0a69, in gc4c33_sensor_dpc_otp_dd()
1817 ret |= gc4c33_write_reg(gc4c33->client, 0x0a6a, in gc4c33_sensor_dpc_otp_dd()
1819 ret |= gc4c33_write_reg(gc4c33->client, 0x0313, in gc4c33_sensor_dpc_otp_dd()
1823 ret |= gc4c33_write_reg(gc4c33->client, 0x0317, in gc4c33_sensor_dpc_otp_dd()
1825 ret |= gc4c33_write_reg(gc4c33->client, 0x0a67, in gc4c33_sensor_dpc_otp_dd()
1827 ret |= gc4c33_write_reg(gc4c33->client, 0x0a66, in gc4c33_sensor_dpc_otp_dd()
1829 ret |= gc4c33_write_reg(gc4c33->client, 0x0a70, in gc4c33_sensor_dpc_otp_dd()
1831 ret |= gc4c33_write_reg(gc4c33->client, 0x0a71, in gc4c33_sensor_dpc_otp_dd()
1833 ret |= gc4c33_write_reg(gc4c33->client, 0x0a72, in gc4c33_sensor_dpc_otp_dd()
1835 ret |= gc4c33_write_reg(gc4c33->client, 0x0a73, in gc4c33_sensor_dpc_otp_dd()
1837 ret |= gc4c33_write_reg(gc4c33->client, 0x0a74, in gc4c33_sensor_dpc_otp_dd()
1839 ret |= gc4c33_write_reg(gc4c33->client, 0x0a75, in gc4c33_sensor_dpc_otp_dd()
1841 ret |= gc4c33_write_reg(gc4c33->client, 0x05be, in gc4c33_sensor_dpc_otp_dd()
1843 ret |= gc4c33_write_reg(gc4c33->client, 0x05a9, in gc4c33_sensor_dpc_otp_dd()
1846 ret |= gc4c33_write_reg(gc4c33->client, 0x0313, in gc4c33_sensor_dpc_otp_dd()
1850 ret |= gc4c33_write_reg(gc4c33->client, 0x0080, in gc4c33_sensor_dpc_otp_dd()
1852 ret |= gc4c33_write_reg(gc4c33->client, 0x05be, in gc4c33_sensor_dpc_otp_dd()
1854 ret |= gc4c33_write_reg(gc4c33->client, 0x0a70, in gc4c33_sensor_dpc_otp_dd()
1856 ret |= gc4c33_write_reg(gc4c33->client, 0x0a69, in gc4c33_sensor_dpc_otp_dd()
1858 ret |= gc4c33_write_reg(gc4c33->client, 0x0a6a, in gc4c33_sensor_dpc_otp_dd()
1860 ret |= gc4c33_write_reg(gc4c33->client, 0x0313, in gc4c33_sensor_dpc_otp_dd()
1863 ret |= gc4c33_write_reg(gc4c33->client, 0x0317, in gc4c33_sensor_dpc_otp_dd()
1865 ret |= gc4c33_write_reg(gc4c33->client, 0x0a67, in gc4c33_sensor_dpc_otp_dd()
1867 ret |= gc4c33_write_reg(gc4c33->client, 0x0a4f, in gc4c33_sensor_dpc_otp_dd()
1869 ret |= gc4c33_write_reg(gc4c33->client, 0x0a54, in gc4c33_sensor_dpc_otp_dd()
1871 ret |= gc4c33_write_reg(gc4c33->client, 0x0a66, in gc4c33_sensor_dpc_otp_dd()
1873 ret |= gc4c33_write_reg(gc4c33->client, 0x0a69, in gc4c33_sensor_dpc_otp_dd()
1875 ret |= gc4c33_write_reg(gc4c33->client, 0x0a6a, in gc4c33_sensor_dpc_otp_dd()
1877 ret |= gc4c33_write_reg(gc4c33->client, 0x0313, in gc4c33_sensor_dpc_otp_dd()
1882 ret |= gc4c33_write_reg(gc4c33->client, 0x0080, in gc4c33_sensor_dpc_otp_dd()
1884 ret |= gc4c33_write_reg(gc4c33->client, 0x0090, in gc4c33_sensor_dpc_otp_dd()
1886 ret |= gc4c33_write_reg(gc4c33->client, 0x05be, in gc4c33_sensor_dpc_otp_dd()
1894 static int __gc4c33_start_stream(struct gc4c33 *gc4c33) in __gc4c33_start_stream() argument
1898 ret = gc4c33_write_array(gc4c33->client, gc4c33->cur_mode->reg_list); in __gc4c33_start_stream()
1903 ret = gc4c33_sensor_dpc_otp_dd(gc4c33); in __gc4c33_start_stream()
1909 mutex_unlock(&gc4c33->mutex); in __gc4c33_start_stream()
1910 ret = v4l2_ctrl_handler_setup(&gc4c33->ctrl_handler); in __gc4c33_start_stream()
1911 mutex_lock(&gc4c33->mutex); in __gc4c33_start_stream()
1915 return gc4c33_write_reg(gc4c33->client, GC4C33_REG_CTRL_MODE, in __gc4c33_start_stream()
1919 static int __gc4c33_stop_stream(struct gc4c33 *gc4c33) in __gc4c33_stop_stream() argument
1921 return gc4c33_write_reg(gc4c33->client, GC4C33_REG_CTRL_MODE, in __gc4c33_stop_stream()
1927 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_s_stream() local
1928 struct i2c_client *client = gc4c33->client; in gc4c33_s_stream()
1931 mutex_lock(&gc4c33->mutex); in gc4c33_s_stream()
1933 if (on == gc4c33->streaming) in gc4c33_s_stream()
1943 ret = __gc4c33_start_stream(gc4c33); in gc4c33_s_stream()
1950 __gc4c33_stop_stream(gc4c33); in gc4c33_s_stream()
1954 gc4c33->streaming = on; in gc4c33_s_stream()
1957 mutex_unlock(&gc4c33->mutex); in gc4c33_s_stream()
1964 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_s_power() local
1965 struct i2c_client *client = gc4c33->client; in gc4c33_s_power()
1968 mutex_lock(&gc4c33->mutex); in gc4c33_s_power()
1971 if (gc4c33->power_on == !!on) in gc4c33_s_power()
1981 ret = gc4c33_write_array(gc4c33->client, gc4c33_global_regs); in gc4c33_s_power()
1988 gc4c33->power_on = true; in gc4c33_s_power()
1991 gc4c33->power_on = false; in gc4c33_s_power()
1995 mutex_unlock(&gc4c33->mutex); in gc4c33_s_power()
2006 static int __gc4c33_power_on(struct gc4c33 *gc4c33) in __gc4c33_power_on() argument
2010 struct device *dev = &gc4c33->client->dev; in __gc4c33_power_on()
2012 if (!IS_ERR_OR_NULL(gc4c33->pins_default)) { in __gc4c33_power_on()
2013 ret = pinctrl_select_state(gc4c33->pinctrl, in __gc4c33_power_on()
2014 gc4c33->pins_default); in __gc4c33_power_on()
2018 ret = clk_set_rate(gc4c33->xvclk, GC4C33_XVCLK_FREQ); in __gc4c33_power_on()
2021 if (clk_get_rate(gc4c33->xvclk) != GC4C33_XVCLK_FREQ) in __gc4c33_power_on()
2023 ret = clk_prepare_enable(gc4c33->xvclk); in __gc4c33_power_on()
2028 if (!IS_ERR(gc4c33->reset_gpio)) in __gc4c33_power_on()
2029 gpiod_set_value_cansleep(gc4c33->reset_gpio, 0); in __gc4c33_power_on()
2031 if (!IS_ERR(gc4c33->pwdn_gpio)) in __gc4c33_power_on()
2032 gpiod_set_value_cansleep(gc4c33->pwdn_gpio, 0); in __gc4c33_power_on()
2035 ret = regulator_bulk_enable(GC4C33_NUM_SUPPLIES, gc4c33->supplies); in __gc4c33_power_on()
2042 if (!IS_ERR(gc4c33->pwren_gpio)) in __gc4c33_power_on()
2043 gpiod_set_value_cansleep(gc4c33->pwren_gpio, 1); in __gc4c33_power_on()
2046 if (!IS_ERR(gc4c33->pwdn_gpio)) in __gc4c33_power_on()
2047 gpiod_set_value_cansleep(gc4c33->pwdn_gpio, 1); in __gc4c33_power_on()
2049 if (!IS_ERR(gc4c33->reset_gpio)) in __gc4c33_power_on()
2050 gpiod_set_value_cansleep(gc4c33->reset_gpio, 1); in __gc4c33_power_on()
2059 clk_disable_unprepare(gc4c33->xvclk); in __gc4c33_power_on()
2064 static void __gc4c33_power_off(struct gc4c33 *gc4c33) in __gc4c33_power_off() argument
2067 struct device *dev = &gc4c33->client->dev; in __gc4c33_power_off()
2069 if (!IS_ERR(gc4c33->pwdn_gpio)) in __gc4c33_power_off()
2070 gpiod_set_value_cansleep(gc4c33->pwdn_gpio, 0); in __gc4c33_power_off()
2071 clk_disable_unprepare(gc4c33->xvclk); in __gc4c33_power_off()
2072 if (!IS_ERR(gc4c33->reset_gpio)) in __gc4c33_power_off()
2073 gpiod_set_value_cansleep(gc4c33->reset_gpio, 0); in __gc4c33_power_off()
2074 if (!IS_ERR_OR_NULL(gc4c33->pins_sleep)) { in __gc4c33_power_off()
2075 ret = pinctrl_select_state(gc4c33->pinctrl, in __gc4c33_power_off()
2076 gc4c33->pins_sleep); in __gc4c33_power_off()
2080 regulator_bulk_disable(GC4C33_NUM_SUPPLIES, gc4c33->supplies); in __gc4c33_power_off()
2081 if (!IS_ERR(gc4c33->pwren_gpio)) in __gc4c33_power_off()
2082 gpiod_set_value_cansleep(gc4c33->pwren_gpio, 0); in __gc4c33_power_off()
2089 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_runtime_resume() local
2091 return __gc4c33_power_on(gc4c33); in gc4c33_runtime_resume()
2098 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_runtime_suspend() local
2100 __gc4c33_power_off(gc4c33); in gc4c33_runtime_suspend()
2108 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_open() local
2113 mutex_lock(&gc4c33->mutex); in gc4c33_open()
2120 mutex_unlock(&gc4c33->mutex); in gc4c33_open()
2131 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_enum_frame_interval() local
2133 if (fie->index >= gc4c33->cfg_num) in gc4c33_enum_frame_interval()
2185 struct gc4c33 *gc4c33 = container_of(ctrl->handler, in gc4c33_set_ctrl() local
2186 struct gc4c33, ctrl_handler); in gc4c33_set_ctrl()
2187 struct i2c_client *client = gc4c33->client; in gc4c33_set_ctrl()
2196 max = gc4c33->cur_mode->height + ctrl->val - 4; in gc4c33_set_ctrl()
2197 __v4l2_ctrl_modify_range(gc4c33->exposure, in gc4c33_set_ctrl()
2198 gc4c33->exposure->minimum, in gc4c33_set_ctrl()
2200 gc4c33->exposure->step, in gc4c33_set_ctrl()
2201 gc4c33->exposure->default_value); in gc4c33_set_ctrl()
2211 ret = gc4c33_write_reg(gc4c33->client, GC4C33_REG_EXPOSURE_H, in gc4c33_set_ctrl()
2214 ret |= gc4c33_write_reg(gc4c33->client, GC4C33_REG_EXPOSURE_L, in gc4c33_set_ctrl()
2219 if (gc4c33->cur_mode->height == 720) in gc4c33_set_ctrl()
2220 ret = gc4c33_set_gain_reg_720P(gc4c33, ctrl->val); in gc4c33_set_ctrl()
2222 ret = gc4c33_set_gain_reg(gc4c33, ctrl->val); in gc4c33_set_ctrl()
2225 ret = gc4c33_write_reg(gc4c33->client, GC4C33_REG_VTS_H, in gc4c33_set_ctrl()
2227 (ctrl->val + gc4c33->cur_mode->height) in gc4c33_set_ctrl()
2229 ret |= gc4c33_write_reg(gc4c33->client, GC4C33_REG_VTS_L, in gc4c33_set_ctrl()
2231 (ctrl->val + gc4c33->cur_mode->height) in gc4c33_set_ctrl()
2235 ret = gc4c33_read_reg(gc4c33->client, GC4C33_FLIP_MIRROR_REG, in gc4c33_set_ctrl()
2241 ret |= gc4c33_write_reg(gc4c33->client, GC4C33_FLIP_MIRROR_REG, in gc4c33_set_ctrl()
2244 gc4c33->flip = val; in gc4c33_set_ctrl()
2247 ret = gc4c33_read_reg(gc4c33->client, GC4C33_FLIP_MIRROR_REG, in gc4c33_set_ctrl()
2253 ret |= gc4c33_write_reg(gc4c33->client, GC4C33_FLIP_MIRROR_REG, in gc4c33_set_ctrl()
2256 gc4c33->flip = val; in gc4c33_set_ctrl()
2259 ret = gc4c33_enable_test_pattern(gc4c33, ctrl->val); in gc4c33_set_ctrl()
2276 static int gc4c33_initialize_controls(struct gc4c33 *gc4c33) in gc4c33_initialize_controls() argument
2285 handler = &gc4c33->ctrl_handler; in gc4c33_initialize_controls()
2286 mode = gc4c33->cur_mode; in gc4c33_initialize_controls()
2290 handler->lock = &gc4c33->mutex; in gc4c33_initialize_controls()
2301 gc4c33->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in gc4c33_initialize_controls()
2303 if (gc4c33->hblank) in gc4c33_initialize_controls()
2304 gc4c33->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in gc4c33_initialize_controls()
2307 gc4c33->vblank = v4l2_ctrl_new_std(handler, &gc4c33_ctrl_ops, in gc4c33_initialize_controls()
2313 gc4c33->exposure = v4l2_ctrl_new_std(handler, &gc4c33_ctrl_ops, in gc4c33_initialize_controls()
2320 gc4c33->anal_gain = v4l2_ctrl_new_std(handler, &gc4c33_ctrl_ops, in gc4c33_initialize_controls()
2327 gc4c33->test_pattern = in gc4c33_initialize_controls()
2333 gc4c33->h_flip = v4l2_ctrl_new_std(handler, &gc4c33_ctrl_ops, in gc4c33_initialize_controls()
2336 gc4c33->v_flip = v4l2_ctrl_new_std(handler, &gc4c33_ctrl_ops, in gc4c33_initialize_controls()
2338 gc4c33->flip = 0; in gc4c33_initialize_controls()
2342 dev_err(&gc4c33->client->dev, in gc4c33_initialize_controls()
2347 gc4c33->subdev.ctrl_handler = handler; in gc4c33_initialize_controls()
2357 static int gc4c33_check_sensor_id(struct gc4c33 *gc4c33, in gc4c33_check_sensor_id() argument
2360 struct device *dev = &gc4c33->client->dev; in gc4c33_check_sensor_id()
2379 static int gc4c33_configure_regulators(struct gc4c33 *gc4c33) in gc4c33_configure_regulators() argument
2384 gc4c33->supplies[i].supply = gc4c33_supply_names[i]; in gc4c33_configure_regulators()
2386 return devm_regulator_bulk_get(&gc4c33->client->dev, in gc4c33_configure_regulators()
2388 gc4c33->supplies); in gc4c33_configure_regulators()
2396 struct gc4c33 *gc4c33; in gc4c33_probe() local
2407 gc4c33 = devm_kzalloc(dev, sizeof(*gc4c33), GFP_KERNEL); in gc4c33_probe()
2408 if (!gc4c33) in gc4c33_probe()
2413 &gc4c33->module_index); in gc4c33_probe()
2415 &gc4c33->module_facing); in gc4c33_probe()
2417 &gc4c33->module_name); in gc4c33_probe()
2419 &gc4c33->len_name); in gc4c33_probe()
2425 gc4c33->client = client; in gc4c33_probe()
2426 gc4c33->cfg_num = ARRAY_SIZE(supported_modes); in gc4c33_probe()
2427 for (i = 0; i < gc4c33->cfg_num; i++) { in gc4c33_probe()
2429 gc4c33->cur_mode = &supported_modes[i]; in gc4c33_probe()
2433 if (i == gc4c33->cfg_num) in gc4c33_probe()
2434 gc4c33->cur_mode = &supported_modes[0]; in gc4c33_probe()
2436 gc4c33->xvclk = devm_clk_get(dev, "xvclk"); in gc4c33_probe()
2437 if (IS_ERR(gc4c33->xvclk)) { in gc4c33_probe()
2442 gc4c33->pwren_gpio = devm_gpiod_get(dev, "pwren", GPIOD_OUT_LOW); in gc4c33_probe()
2443 if (IS_ERR(gc4c33->pwren_gpio)) in gc4c33_probe()
2446 gc4c33->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in gc4c33_probe()
2447 if (IS_ERR(gc4c33->reset_gpio)) in gc4c33_probe()
2450 gc4c33->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in gc4c33_probe()
2451 if (IS_ERR(gc4c33->pwdn_gpio)) in gc4c33_probe()
2454 gc4c33->pinctrl = devm_pinctrl_get(dev); in gc4c33_probe()
2455 if (!IS_ERR(gc4c33->pinctrl)) { in gc4c33_probe()
2456 gc4c33->pins_default = in gc4c33_probe()
2457 pinctrl_lookup_state(gc4c33->pinctrl, in gc4c33_probe()
2459 if (IS_ERR(gc4c33->pins_default)) in gc4c33_probe()
2462 gc4c33->pins_sleep = in gc4c33_probe()
2463 pinctrl_lookup_state(gc4c33->pinctrl, in gc4c33_probe()
2465 if (IS_ERR(gc4c33->pins_sleep)) in gc4c33_probe()
2471 ret = gc4c33_configure_regulators(gc4c33); in gc4c33_probe()
2477 mutex_init(&gc4c33->mutex); in gc4c33_probe()
2479 sd = &gc4c33->subdev; in gc4c33_probe()
2481 ret = gc4c33_initialize_controls(gc4c33); in gc4c33_probe()
2485 ret = __gc4c33_power_on(gc4c33); in gc4c33_probe()
2489 ret = gc4c33_check_sensor_id(gc4c33, client); in gc4c33_probe()
2499 gc4c33->pad.flags = MEDIA_PAD_FL_SOURCE; in gc4c33_probe()
2501 ret = media_entity_pads_init(&sd->entity, 1, &gc4c33->pad); in gc4c33_probe()
2507 if (strcmp(gc4c33->module_facing, "back") == 0) in gc4c33_probe()
2513 gc4c33->module_index, facing, in gc4c33_probe()
2532 __gc4c33_power_off(gc4c33); in gc4c33_probe()
2534 v4l2_ctrl_handler_free(&gc4c33->ctrl_handler); in gc4c33_probe()
2536 mutex_destroy(&gc4c33->mutex); in gc4c33_probe()
2544 struct gc4c33 *gc4c33 = to_gc4c33(sd); in gc4c33_remove() local
2550 v4l2_ctrl_handler_free(&gc4c33->ctrl_handler); in gc4c33_remove()
2551 mutex_destroy(&gc4c33->mutex); in gc4c33_remove()
2555 __gc4c33_power_off(gc4c33); in gc4c33_remove()