Lines Matching full:sensor

966 static int ov5648_read(struct ov5648_sensor *sensor, u16 address, u8 *value)  in ov5648_read()  argument
969 struct i2c_client *client = sensor->i2c_client; in ov5648_read()
989 static int ov5648_write(struct ov5648_sensor *sensor, u16 address, u8 value) in ov5648_write() argument
992 struct i2c_client *client = sensor->i2c_client; in ov5648_write()
1005 static int ov5648_write_sequence(struct ov5648_sensor *sensor, in ov5648_write_sequence() argument
1013 ret = ov5648_write(sensor, sequence[i].address, in ov5648_write_sequence()
1025 static int ov5648_update_bits(struct ov5648_sensor *sensor, u16 address, in ov5648_update_bits() argument
1031 ret = ov5648_read(sensor, address, &value); in ov5648_update_bits()
1038 ret = ov5648_write(sensor, address, value); in ov5648_update_bits()
1045 /* Sensor */
1047 static int ov5648_sw_reset(struct ov5648_sensor *sensor) in ov5648_sw_reset() argument
1049 return ov5648_write(sensor, OV5648_SW_RESET_REG, OV5648_SW_RESET_RESET); in ov5648_sw_reset()
1052 static int ov5648_sw_standby(struct ov5648_sensor *sensor, int standby) in ov5648_sw_standby() argument
1059 return ov5648_write(sensor, OV5648_SW_STANDBY_REG, value); in ov5648_sw_standby()
1062 static int ov5648_chip_id_check(struct ov5648_sensor *sensor) in ov5648_chip_id_check() argument
1071 ret = ov5648_read(sensor, regs[i], &value); in ov5648_chip_id_check()
1076 dev_err(sensor->dev, in ov5648_chip_id_check()
1086 static int ov5648_avdd_internal_power(struct ov5648_sensor *sensor, int on) in ov5648_avdd_internal_power() argument
1088 return ov5648_write(sensor, OV5648_A_PWC_PK_O0_REG, in ov5648_avdd_internal_power()
1092 static int ov5648_pad_configure(struct ov5648_sensor *sensor) in ov5648_pad_configure() argument
1098 ret = ov5648_write(sensor, OV5648_PAD_OEN1_REG, 0); in ov5648_pad_configure()
1102 ret = ov5648_write(sensor, OV5648_PAD_OEN2_REG, 0); in ov5648_pad_configure()
1108 return ov5648_write(sensor, OV5648_PAD_PK_REG, in ov5648_pad_configure()
1113 static int ov5648_mipi_configure(struct ov5648_sensor *sensor) in ov5648_mipi_configure() argument
1116 &sensor->endpoint.bus.mipi_csi2; in ov5648_mipi_configure()
1120 ret = ov5648_write(sensor, OV5648_MIPI_CTRL0_REG, in ov5648_mipi_configure()
1127 return ov5648_write(sensor, OV5648_MIPI_SC_CTRL0_REG, in ov5648_mipi_configure()
1133 static int ov5648_black_level_configure(struct ov5648_sensor *sensor) in ov5648_black_level_configure() argument
1139 ret = ov5648_write(sensor, OV5648_BLC_CTRL1_REG, in ov5648_black_level_configure()
1144 ret = ov5648_write(sensor, OV5648_BLC_CTRL2_REG, in ov5648_black_level_configure()
1150 ret = ov5648_write(sensor, OV5648_BLC_LINE_NUM_REG, in ov5648_black_level_configure()
1155 return ov5648_update_bits(sensor, OV5648_BLC_CTRL5_REG, in ov5648_black_level_configure()
1160 static int ov5648_isp_configure(struct ov5648_sensor *sensor) in ov5648_isp_configure() argument
1169 ret = ov5648_update_bits(sensor, OV5648_ISP_CTRL0_REG, bits, bits); in ov5648_isp_configure()
1174 ret = ov5648_write(sensor, OV5648_ISP_CTRL1_REG, in ov5648_isp_configure()
1180 ret = ov5648_write(sensor, OV5648_ISP_CTRL2_REG, in ov5648_isp_configure()
1187 ret = ov5648_write(sensor, OV5648_ISP_CTRL3_REG, in ov5648_isp_configure()
1193 ret = ov5648_write(sensor, OV5648_ISP_CTRL4_REG, 0); in ov5648_isp_configure()
1197 ret = ov5648_write(sensor, OV5648_ISP_CTRL1F_REG, in ov5648_isp_configure()
1203 ret = ov5648_write(sensor, OV5648_ISP_CTRL4B_REG, in ov5648_isp_configure()
1210 ret = ov5648_write(sensor, OV5648_AEC_CTRL0_REG, in ov5648_isp_configure()
1216 return ov5648_write(sensor, OV5648_MANUAL_CTRL_REG, in ov5648_isp_configure()
1220 static unsigned long ov5648_mode_pll1_rate(struct ov5648_sensor *sensor, in ov5648_mode_pll1_rate() argument
1226 xvclk_rate = clk_get_rate(sensor->xvclk); in ov5648_mode_pll1_rate()
1246 static int ov5648_mode_pll1_configure(struct ov5648_sensor *sensor, in ov5648_mode_pll1_configure() argument
1269 ret = ov5648_write(sensor, OV5648_PLL_CTRL0_REG, value); in ov5648_mode_pll1_configure()
1273 ret = ov5648_write(sensor, OV5648_PLL_DIV_REG, in ov5648_mode_pll1_configure()
1279 ret = ov5648_write(sensor, OV5648_PLL_MUL_REG, in ov5648_mode_pll1_configure()
1284 ret = ov5648_write(sensor, OV5648_PLL_CTRL1_REG, in ov5648_mode_pll1_configure()
1290 return ov5648_write(sensor, OV5648_SRB_CTRL_REG, in ov5648_mode_pll1_configure()
1295 static int ov5648_mode_pll2_configure(struct ov5648_sensor *sensor, in ov5648_mode_pll2_configure() argument
1301 ret = ov5648_write(sensor, OV5648_PLLS_DIV_REG, in ov5648_mode_pll2_configure()
1308 ret = ov5648_write(sensor, OV5648_PLLS_MUL_REG, in ov5648_mode_pll2_configure()
1313 return ov5648_write(sensor, OV5648_PLLS_CTRL_REG, in ov5648_mode_pll2_configure()
1318 static int ov5648_mode_configure(struct ov5648_sensor *sensor, in ov5648_mode_configure() argument
1325 ret = ov5648_write(sensor, OV5648_CROP_START_X_H_REG, in ov5648_mode_configure()
1330 ret = ov5648_write(sensor, OV5648_CROP_START_X_L_REG, in ov5648_mode_configure()
1337 ret = ov5648_write(sensor, OV5648_OFFSET_X_H_REG, in ov5648_mode_configure()
1342 ret = ov5648_write(sensor, OV5648_OFFSET_X_L_REG, in ov5648_mode_configure()
1349 ret = ov5648_write(sensor, OV5648_OUTPUT_SIZE_X_H_REG, in ov5648_mode_configure()
1354 ret = ov5648_write(sensor, OV5648_OUTPUT_SIZE_X_L_REG, in ov5648_mode_configure()
1361 ret = ov5648_write(sensor, OV5648_CROP_END_X_H_REG, in ov5648_mode_configure()
1366 ret = ov5648_write(sensor, OV5648_CROP_END_X_L_REG, in ov5648_mode_configure()
1373 ret = ov5648_write(sensor, OV5648_HTS_H_REG, OV5648_HTS_H(mode->hts)); in ov5648_mode_configure()
1377 ret = ov5648_write(sensor, OV5648_HTS_L_REG, OV5648_HTS_L(mode->hts)); in ov5648_mode_configure()
1383 ret = ov5648_write(sensor, OV5648_CROP_START_Y_H_REG, in ov5648_mode_configure()
1388 ret = ov5648_write(sensor, OV5648_CROP_START_Y_L_REG, in ov5648_mode_configure()
1395 ret = ov5648_write(sensor, OV5648_OFFSET_Y_H_REG, in ov5648_mode_configure()
1400 ret = ov5648_write(sensor, OV5648_OFFSET_Y_L_REG, in ov5648_mode_configure()
1407 ret = ov5648_write(sensor, OV5648_OUTPUT_SIZE_Y_H_REG, in ov5648_mode_configure()
1412 ret = ov5648_write(sensor, OV5648_OUTPUT_SIZE_Y_L_REG, in ov5648_mode_configure()
1419 ret = ov5648_write(sensor, OV5648_CROP_END_Y_H_REG, in ov5648_mode_configure()
1424 ret = ov5648_write(sensor, OV5648_CROP_END_Y_L_REG, in ov5648_mode_configure()
1431 ret = ov5648_write(sensor, OV5648_VTS_H_REG, OV5648_VTS_H(mode->vts)); in ov5648_mode_configure()
1435 ret = ov5648_write(sensor, OV5648_VTS_L_REG, OV5648_VTS_L(mode->vts)); in ov5648_mode_configure()
1445 ret = ov5648_update_bits(sensor, OV5648_TC20_REG, in ov5648_mode_configure()
1453 ret = ov5648_update_bits(sensor, OV5648_TC21_REG, in ov5648_mode_configure()
1460 ret = ov5648_write(sensor, OV5648_SUB_INC_X_REG, in ov5648_mode_configure()
1466 ret = ov5648_write(sensor, OV5648_SUB_INC_Y_REG, in ov5648_mode_configure()
1474 ret = ov5648_mode_pll1_configure(sensor, mode, mbus_code); in ov5648_mode_configure()
1478 ret = ov5648_mode_pll2_configure(sensor, mode); in ov5648_mode_configure()
1485 ret = ov5648_write_sequence(sensor, mode->register_values, in ov5648_mode_configure()
1494 static unsigned long ov5648_mode_mipi_clk_rate(struct ov5648_sensor *sensor, in ov5648_mode_mipi_clk_rate() argument
1512 pll1_rate = ov5648_mode_pll1_rate(sensor, config); in ov5648_mode_mipi_clk_rate()
1519 static int ov5648_exposure_auto_configure(struct ov5648_sensor *sensor, in ov5648_exposure_auto_configure() argument
1522 return ov5648_update_bits(sensor, OV5648_MANUAL_CTRL_REG, in ov5648_exposure_auto_configure()
1527 static int ov5648_exposure_configure(struct ov5648_sensor *sensor, u32 exposure) in ov5648_exposure_configure() argument
1529 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_exposure_configure()
1535 ret = ov5648_write(sensor, OV5648_EXPOSURE_CTRL_HH_REG, in ov5648_exposure_configure()
1540 ret = ov5648_write(sensor, OV5648_EXPOSURE_CTRL_H_REG, in ov5648_exposure_configure()
1545 return ov5648_write(sensor, OV5648_EXPOSURE_CTRL_L_REG, in ov5648_exposure_configure()
1549 static int ov5648_exposure_value(struct ov5648_sensor *sensor, in ov5648_exposure_value() argument
1555 ret = ov5648_read(sensor, OV5648_EXPOSURE_CTRL_HH_REG, &exposure_hh); in ov5648_exposure_value()
1559 ret = ov5648_read(sensor, OV5648_EXPOSURE_CTRL_H_REG, &exposure_h); in ov5648_exposure_value()
1563 ret = ov5648_read(sensor, OV5648_EXPOSURE_CTRL_L_REG, &exposure_l); in ov5648_exposure_value()
1576 static int ov5648_gain_auto_configure(struct ov5648_sensor *sensor, bool enable) in ov5648_gain_auto_configure() argument
1578 return ov5648_update_bits(sensor, OV5648_MANUAL_CTRL_REG, in ov5648_gain_auto_configure()
1583 static int ov5648_gain_configure(struct ov5648_sensor *sensor, u32 gain) in ov5648_gain_configure() argument
1585 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_gain_configure()
1591 ret = ov5648_write(sensor, OV5648_GAIN_CTRL_H_REG, in ov5648_gain_configure()
1596 return ov5648_write(sensor, OV5648_GAIN_CTRL_L_REG, in ov5648_gain_configure()
1600 static int ov5648_gain_value(struct ov5648_sensor *sensor, u32 *gain) in ov5648_gain_value() argument
1605 ret = ov5648_read(sensor, OV5648_GAIN_CTRL_H_REG, &gain_h); in ov5648_gain_value()
1609 ret = ov5648_read(sensor, OV5648_GAIN_CTRL_L_REG, &gain_l); in ov5648_gain_value()
1621 static int ov5648_white_balance_auto_configure(struct ov5648_sensor *sensor, in ov5648_white_balance_auto_configure() argument
1624 return ov5648_write(sensor, OV5648_AWB_CTRL_REG, in ov5648_white_balance_auto_configure()
1628 static int ov5648_white_balance_configure(struct ov5648_sensor *sensor, in ov5648_white_balance_configure() argument
1631 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_white_balance_configure()
1637 ret = ov5648_write(sensor, OV5648_GAIN_RED_MAN_H_REG, in ov5648_white_balance_configure()
1642 ret = ov5648_write(sensor, OV5648_GAIN_RED_MAN_L_REG, in ov5648_white_balance_configure()
1647 ret = ov5648_write(sensor, OV5648_GAIN_BLUE_MAN_H_REG, in ov5648_white_balance_configure()
1652 return ov5648_write(sensor, OV5648_GAIN_BLUE_MAN_L_REG, in ov5648_white_balance_configure()
1658 static int ov5648_flip_vert_configure(struct ov5648_sensor *sensor, bool enable) in ov5648_flip_vert_configure() argument
1663 return ov5648_update_bits(sensor, OV5648_TC20_REG, bits, in ov5648_flip_vert_configure()
1667 static int ov5648_flip_horz_configure(struct ov5648_sensor *sensor, bool enable) in ov5648_flip_horz_configure() argument
1672 return ov5648_update_bits(sensor, OV5648_TC21_REG, bits, in ov5648_flip_horz_configure()
1678 static int ov5648_test_pattern_configure(struct ov5648_sensor *sensor, in ov5648_test_pattern_configure() argument
1684 return ov5648_write(sensor, OV5648_ISP_CTRL3D_REG, in ov5648_test_pattern_configure()
1690 static int ov5648_state_mipi_configure(struct ov5648_sensor *sensor, in ov5648_state_mipi_configure() argument
1694 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_state_mipi_configure()
1696 &sensor->endpoint.bus.mipi_csi2; in ov5648_state_mipi_configure()
1703 mipi_clk_rate = ov5648_mode_mipi_clk_rate(sensor, mode, mbus_code); in ov5648_state_mipi_configure()
1714 for (j = 0; j < sensor->endpoint.nr_of_link_frequencies; j++) { in ov5648_state_mipi_configure()
1715 u64 freq = sensor->endpoint.link_frequencies[j]; in ov5648_state_mipi_configure()
1722 dev_err(sensor->dev, in ov5648_state_mipi_configure()
1725 } else if (j == sensor->endpoint.nr_of_link_frequencies) { in ov5648_state_mipi_configure()
1726 dev_err(sensor->dev, in ov5648_state_mipi_configure()
1752 static int ov5648_state_configure(struct ov5648_sensor *sensor, in ov5648_state_configure() argument
1758 if (sensor->state.streaming) in ov5648_state_configure()
1762 if (pm_runtime_enabled(sensor->dev) && in ov5648_state_configure()
1763 !pm_runtime_suspended(sensor->dev)) { in ov5648_state_configure()
1764 ret = ov5648_mode_configure(sensor, mode, mbus_code); in ov5648_state_configure()
1769 ret = ov5648_state_mipi_configure(sensor, mode, mbus_code); in ov5648_state_configure()
1773 sensor->state.mode = mode; in ov5648_state_configure()
1774 sensor->state.mbus_code = mbus_code; in ov5648_state_configure()
1779 static int ov5648_state_init(struct ov5648_sensor *sensor) in ov5648_state_init() argument
1781 return ov5648_state_configure(sensor, &ov5648_modes[0], in ov5648_state_init()
1785 /* Sensor Base */
1787 static int ov5648_sensor_init(struct ov5648_sensor *sensor) in ov5648_sensor_init() argument
1791 ret = ov5648_sw_reset(sensor); in ov5648_sensor_init()
1793 dev_err(sensor->dev, "failed to perform sw reset\n"); in ov5648_sensor_init()
1797 ret = ov5648_sw_standby(sensor, 1); in ov5648_sensor_init()
1799 dev_err(sensor->dev, "failed to set sensor standby\n"); in ov5648_sensor_init()
1803 ret = ov5648_chip_id_check(sensor); in ov5648_sensor_init()
1805 dev_err(sensor->dev, "failed to check sensor chip id\n"); in ov5648_sensor_init()
1809 ret = ov5648_avdd_internal_power(sensor, !sensor->avdd); in ov5648_sensor_init()
1811 dev_err(sensor->dev, "failed to set internal avdd power\n"); in ov5648_sensor_init()
1815 ret = ov5648_write_sequence(sensor, ov5648_init_sequence, in ov5648_sensor_init()
1818 dev_err(sensor->dev, "failed to write init sequence\n"); in ov5648_sensor_init()
1822 ret = ov5648_pad_configure(sensor); in ov5648_sensor_init()
1824 dev_err(sensor->dev, "failed to configure pad\n"); in ov5648_sensor_init()
1828 ret = ov5648_mipi_configure(sensor); in ov5648_sensor_init()
1830 dev_err(sensor->dev, "failed to configure MIPI\n"); in ov5648_sensor_init()
1834 ret = ov5648_isp_configure(sensor); in ov5648_sensor_init()
1836 dev_err(sensor->dev, "failed to configure ISP\n"); in ov5648_sensor_init()
1840 ret = ov5648_black_level_configure(sensor); in ov5648_sensor_init()
1842 dev_err(sensor->dev, "failed to configure black level\n"); in ov5648_sensor_init()
1847 ret = ov5648_state_configure(sensor, sensor->state.mode, in ov5648_sensor_init()
1848 sensor->state.mbus_code); in ov5648_sensor_init()
1850 dev_err(sensor->dev, "failed to configure state\n"); in ov5648_sensor_init()
1857 static int ov5648_sensor_power(struct ov5648_sensor *sensor, bool on) in ov5648_sensor_power() argument
1872 gpiod_set_value_cansleep(sensor->reset, 1); in ov5648_sensor_power()
1873 gpiod_set_value_cansleep(sensor->powerdown, 1); in ov5648_sensor_power()
1875 ret = regulator_enable(sensor->dovdd); in ov5648_sensor_power()
1877 dev_err(sensor->dev, in ov5648_sensor_power()
1882 if (sensor->avdd) { in ov5648_sensor_power()
1883 ret = regulator_enable(sensor->avdd); in ov5648_sensor_power()
1885 dev_err(sensor->dev, in ov5648_sensor_power()
1891 ret = regulator_enable(sensor->dvdd); in ov5648_sensor_power()
1893 dev_err(sensor->dev, in ov5648_sensor_power()
1901 ret = clk_prepare_enable(sensor->xvclk); in ov5648_sensor_power()
1903 dev_err(sensor->dev, "failed to enable XVCLK clock\n"); in ov5648_sensor_power()
1907 gpiod_set_value_cansleep(sensor->reset, 0); in ov5648_sensor_power()
1908 gpiod_set_value_cansleep(sensor->powerdown, 0); in ov5648_sensor_power()
1913 gpiod_set_value_cansleep(sensor->powerdown, 1); in ov5648_sensor_power()
1914 gpiod_set_value_cansleep(sensor->reset, 1); in ov5648_sensor_power()
1916 clk_disable_unprepare(sensor->xvclk); in ov5648_sensor_power()
1918 regulator_disable(sensor->dvdd); in ov5648_sensor_power()
1920 if (sensor->avdd) in ov5648_sensor_power()
1921 regulator_disable(sensor->avdd); in ov5648_sensor_power()
1923 regulator_disable(sensor->dovdd); in ov5648_sensor_power()
1934 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_g_volatile_ctrl() local
1935 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_g_volatile_ctrl()
1940 ret = ov5648_exposure_value(sensor, &ctrls->exposure->val); in ov5648_g_volatile_ctrl()
1945 ret = ov5648_gain_value(sensor, &ctrls->gain->val); in ov5648_g_volatile_ctrl()
1959 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_s_ctrl() local
1960 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_s_ctrl()
1965 /* Wait for the sensor to be on before setting controls. */ in ov5648_s_ctrl()
1966 if (pm_runtime_suspended(sensor->dev)) in ov5648_s_ctrl()
1973 ret = ov5648_exposure_auto_configure(sensor, enable); in ov5648_s_ctrl()
1978 ret = ov5648_exposure_configure(sensor, in ov5648_s_ctrl()
1987 ret = ov5648_gain_auto_configure(sensor, enable); in ov5648_s_ctrl()
1992 ret = ov5648_gain_configure(sensor, ctrls->gain->val); in ov5648_s_ctrl()
2000 ret = ov5648_white_balance_auto_configure(sensor, enable); in ov5648_s_ctrl()
2005 ret = ov5648_white_balance_configure(sensor, in ov5648_s_ctrl()
2014 return ov5648_flip_horz_configure(sensor, enable); in ov5648_s_ctrl()
2017 return ov5648_flip_vert_configure(sensor, enable); in ov5648_s_ctrl()
2020 return ov5648_test_pattern_configure(sensor, index); in ov5648_s_ctrl()
2033 static int ov5648_ctrls_init(struct ov5648_sensor *sensor) in ov5648_ctrls_init() argument
2035 struct ov5648_ctrls *ctrls = &sensor->ctrls; in ov5648_ctrls_init()
2043 handler->lock = &sensor->mutex; in ov5648_ctrls_init()
2116 sensor->subdev.ctrl_handler = handler; in ov5648_ctrls_init()
2130 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_s_stream() local
2131 struct ov5648_state *state = &sensor->state; in ov5648_s_stream()
2135 ret = pm_runtime_resume_and_get(sensor->dev); in ov5648_s_stream()
2140 mutex_lock(&sensor->mutex); in ov5648_s_stream()
2141 ret = ov5648_sw_standby(sensor, !enable); in ov5648_s_stream()
2142 mutex_unlock(&sensor->mutex); in ov5648_s_stream()
2150 pm_runtime_put(sensor->dev); in ov5648_s_stream()
2158 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_g_frame_interval() local
2162 mutex_lock(&sensor->mutex); in ov5648_g_frame_interval()
2164 mode = sensor->state.mode; in ov5648_g_frame_interval()
2166 switch (sensor->state.mbus_code) { in ov5648_g_frame_interval()
2177 mutex_unlock(&sensor->mutex); in ov5648_g_frame_interval()
2223 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_get_fmt() local
2226 mutex_lock(&sensor->mutex); in ov5648_get_fmt()
2232 ov5648_mbus_format_fill(mbus_format, sensor->state.mbus_code, in ov5648_get_fmt()
2233 sensor->state.mode); in ov5648_get_fmt()
2235 mutex_unlock(&sensor->mutex); in ov5648_get_fmt()
2244 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_set_fmt() local
2251 mutex_lock(&sensor->mutex); in ov5648_set_fmt()
2253 if (sensor->state.streaming) { in ov5648_set_fmt()
2284 else if (sensor->state.mode != mode || in ov5648_set_fmt()
2285 sensor->state.mbus_code != mbus_code) in ov5648_set_fmt()
2286 ret = ov5648_state_configure(sensor, mode, mbus_code); in ov5648_set_fmt()
2289 mutex_unlock(&sensor->mutex); in ov5648_set_fmt()
2373 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_suspend() local
2374 struct ov5648_state *state = &sensor->state; in ov5648_suspend()
2377 mutex_lock(&sensor->mutex); in ov5648_suspend()
2380 ret = ov5648_sw_standby(sensor, true); in ov5648_suspend()
2385 ret = ov5648_sensor_power(sensor, false); in ov5648_suspend()
2387 ov5648_sw_standby(sensor, false); in ov5648_suspend()
2390 mutex_unlock(&sensor->mutex); in ov5648_suspend()
2399 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_resume() local
2400 struct ov5648_state *state = &sensor->state; in ov5648_resume()
2403 mutex_lock(&sensor->mutex); in ov5648_resume()
2405 ret = ov5648_sensor_power(sensor, true); in ov5648_resume()
2409 ret = ov5648_sensor_init(sensor); in ov5648_resume()
2413 ret = __v4l2_ctrl_handler_setup(&sensor->ctrls.handler); in ov5648_resume()
2418 ret = ov5648_sw_standby(sensor, false); in ov5648_resume()
2426 ov5648_sensor_power(sensor, false); in ov5648_resume()
2429 mutex_unlock(&sensor->mutex); in ov5648_resume()
2438 struct ov5648_sensor *sensor; in ov5648_probe() local
2444 sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL); in ov5648_probe()
2445 if (!sensor) in ov5648_probe()
2448 sensor->dev = dev; in ov5648_probe()
2449 sensor->i2c_client = client; in ov5648_probe()
2459 sensor->endpoint.bus_type = V4L2_MBUS_CSI2_DPHY; in ov5648_probe()
2461 ret = v4l2_fwnode_endpoint_alloc_parse(handle, &sensor->endpoint); in ov5648_probe()
2470 sensor->powerdown = devm_gpiod_get_optional(dev, "powerdown", in ov5648_probe()
2472 if (IS_ERR(sensor->powerdown)) { in ov5648_probe()
2473 ret = PTR_ERR(sensor->powerdown); in ov5648_probe()
2477 sensor->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); in ov5648_probe()
2478 if (IS_ERR(sensor->reset)) { in ov5648_probe()
2479 ret = PTR_ERR(sensor->reset); in ov5648_probe()
2486 sensor->dvdd = devm_regulator_get(dev, "dvdd"); in ov5648_probe()
2487 if (IS_ERR(sensor->dvdd)) { in ov5648_probe()
2489 ret = PTR_ERR(sensor->dvdd); in ov5648_probe()
2494 sensor->dovdd = devm_regulator_get(dev, "dovdd"); in ov5648_probe()
2495 if (IS_ERR(sensor->dvdd)) { in ov5648_probe()
2497 ret = PTR_ERR(sensor->dvdd); in ov5648_probe()
2502 sensor->avdd = devm_regulator_get_optional(dev, "avdd"); in ov5648_probe()
2503 if (IS_ERR(sensor->avdd)) { in ov5648_probe()
2505 sensor->avdd = NULL; in ov5648_probe()
2510 sensor->xvclk = devm_clk_get(dev, NULL); in ov5648_probe()
2511 if (IS_ERR(sensor->xvclk)) { in ov5648_probe()
2513 ret = PTR_ERR(sensor->xvclk); in ov5648_probe()
2517 rate = clk_get_rate(sensor->xvclk); in ov5648_probe()
2526 subdev = &sensor->subdev; in ov5648_probe()
2532 pad = &sensor->pad; in ov5648_probe()
2541 mutex_init(&sensor->mutex); in ov5648_probe()
2543 /* Sensor */ in ov5648_probe()
2545 ret = ov5648_ctrls_init(sensor); in ov5648_probe()
2549 ret = ov5648_state_init(sensor); in ov5648_probe()
2555 pm_runtime_enable(sensor->dev); in ov5648_probe()
2556 pm_runtime_set_suspended(sensor->dev); in ov5648_probe()
2567 pm_runtime_disable(sensor->dev); in ov5648_probe()
2570 v4l2_ctrl_handler_free(&sensor->ctrls.handler); in ov5648_probe()
2573 mutex_destroy(&sensor->mutex); in ov5648_probe()
2576 media_entity_cleanup(&sensor->subdev.entity); in ov5648_probe()
2579 v4l2_fwnode_endpoint_free(&sensor->endpoint); in ov5648_probe()
2587 struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev); in ov5648_remove() local
2590 pm_runtime_disable(sensor->dev); in ov5648_remove()
2591 v4l2_ctrl_handler_free(&sensor->ctrls.handler); in ov5648_remove()
2592 mutex_destroy(&sensor->mutex); in ov5648_remove()
2621 MODULE_DESCRIPTION("V4L2 driver for the OmniVision OV5648 image sensor");