Symbol: ov5695
drivers/media/i2c/ov5695.c
1000
static void __ov5695_power_off(struct ov5695 *ov5695)
drivers/media/i2c/ov5695.c
1002
struct device *dev = &ov5695->client->dev;
drivers/media/i2c/ov5695.c
1005
clk_disable_unprepare(ov5695->xvclk);
drivers/media/i2c/ov5695.c
1006
gpiod_set_value_cansleep(ov5695->reset_gpio, 1);
drivers/media/i2c/ov5695.c
1013
ret = regulator_disable(ov5695->supplies[i].consumer);
drivers/media/i2c/ov5695.c
1016
ov5695->supplies[i].supply, ret);
drivers/media/i2c/ov5695.c
1023
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
1025
return __ov5695_power_on(ov5695);
drivers/media/i2c/ov5695.c
1031
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
1033
__ov5695_power_off(ov5695);
drivers/media/i2c/ov5695.c
1040
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
1045
mutex_lock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
1052
mutex_unlock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
1085
struct ov5695 *ov5695 = container_of(ctrl->handler,
drivers/media/i2c/ov5695.c
1086
struct ov5695, ctrl_handler);
drivers/media/i2c/ov5695.c
1087
struct i2c_client *client = ov5695->client;
drivers/media/i2c/ov5695.c
1095
max = ov5695->cur_mode->height + ctrl->val - 4;
drivers/media/i2c/ov5695.c
1096
__v4l2_ctrl_modify_range(ov5695->exposure,
drivers/media/i2c/ov5695.c
1097
ov5695->exposure->minimum, max,
drivers/media/i2c/ov5695.c
1098
ov5695->exposure->step,
drivers/media/i2c/ov5695.c
1099
ov5695->exposure->default_value);
drivers/media/i2c/ov5695.c
1109
ret = ov5695_write_reg(ov5695->client, OV5695_REG_EXPOSURE,
drivers/media/i2c/ov5695.c
1113
ret = ov5695_write_reg(ov5695->client, OV5695_REG_ANALOG_GAIN,
drivers/media/i2c/ov5695.c
1117
ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_L,
drivers/media/i2c/ov5695.c
1120
ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_H,
drivers/media/i2c/ov5695.c
1125
ret = ov5695_write_reg(ov5695->client, OV5695_REG_VTS,
drivers/media/i2c/ov5695.c
1127
ctrl->val + ov5695->cur_mode->height);
drivers/media/i2c/ov5695.c
1130
ret = ov5695_enable_test_pattern(ov5695, ctrl->val);
drivers/media/i2c/ov5695.c
114
#define to_ov5695(sd) container_of(sd, struct ov5695, subdev)
drivers/media/i2c/ov5695.c
1147
static int ov5695_initialize_controls(struct ov5695 *ov5695)
drivers/media/i2c/ov5695.c
1156
handler = &ov5695->ctrl_handler;
drivers/media/i2c/ov5695.c
1157
mode = ov5695->cur_mode;
drivers/media/i2c/ov5695.c
1161
handler->lock = &ov5695->mutex;
drivers/media/i2c/ov5695.c
1172
ov5695->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK,
drivers/media/i2c/ov5695.c
1174
if (ov5695->hblank)
drivers/media/i2c/ov5695.c
1175
ov5695->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov5695.c
1178
ov5695->vblank = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
drivers/media/i2c/ov5695.c
1184
ov5695->exposure = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
drivers/media/i2c/ov5695.c
1189
ov5695->anal_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
drivers/media/i2c/ov5695.c
1195
ov5695->digi_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
drivers/media/i2c/ov5695.c
1200
ov5695->test_pattern = v4l2_ctrl_new_std_menu_items(handler,
drivers/media/i2c/ov5695.c
1207
dev_err(&ov5695->client->dev,
drivers/media/i2c/ov5695.c
1212
ov5695->subdev.ctrl_handler = handler;
drivers/media/i2c/ov5695.c
1222
static int ov5695_check_sensor_id(struct ov5695 *ov5695,
drivers/media/i2c/ov5695.c
1225
struct device *dev = &ov5695->client->dev;
drivers/media/i2c/ov5695.c
1241
static int ov5695_configure_regulators(struct ov5695 *ov5695)
drivers/media/i2c/ov5695.c
1246
ov5695->supplies[i].supply = ov5695_supply_names[i];
drivers/media/i2c/ov5695.c
1248
return devm_regulator_bulk_get(&ov5695->client->dev,
drivers/media/i2c/ov5695.c
1250
ov5695->supplies);
drivers/media/i2c/ov5695.c
1256
struct ov5695 *ov5695;
drivers/media/i2c/ov5695.c
1260
ov5695 = devm_kzalloc(dev, sizeof(*ov5695), GFP_KERNEL);
drivers/media/i2c/ov5695.c
1261
if (!ov5695)
drivers/media/i2c/ov5695.c
1264
ov5695->client = client;
drivers/media/i2c/ov5695.c
1265
ov5695->cur_mode = &supported_modes[0];
drivers/media/i2c/ov5695.c
1267
ov5695->xvclk = devm_v4l2_sensor_clk_get_legacy(dev, "xvclk", true,
drivers/media/i2c/ov5695.c
1269
if (IS_ERR(ov5695->xvclk))
drivers/media/i2c/ov5695.c
1270
return dev_err_probe(dev, PTR_ERR(ov5695->xvclk),
drivers/media/i2c/ov5695.c
1273
if (clk_get_rate(ov5695->xvclk) != OV5695_XVCLK_FREQ)
drivers/media/i2c/ov5695.c
1276
ov5695->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
drivers/media/i2c/ov5695.c
1277
if (IS_ERR(ov5695->reset_gpio)) {
drivers/media/i2c/ov5695.c
1282
ret = ov5695_configure_regulators(ov5695);
drivers/media/i2c/ov5695.c
1288
mutex_init(&ov5695->mutex);
drivers/media/i2c/ov5695.c
1290
sd = &ov5695->subdev;
drivers/media/i2c/ov5695.c
1292
ret = ov5695_initialize_controls(ov5695);
drivers/media/i2c/ov5695.c
1296
ret = __ov5695_power_on(ov5695);
drivers/media/i2c/ov5695.c
1300
ret = ov5695_check_sensor_id(ov5695, client);
drivers/media/i2c/ov5695.c
1306
ov5695->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov5695.c
1308
ret = media_entity_pads_init(&sd->entity, 1, &ov5695->pad);
drivers/media/i2c/ov5695.c
1327
__ov5695_power_off(ov5695);
drivers/media/i2c/ov5695.c
1329
v4l2_ctrl_handler_free(&ov5695->ctrl_handler);
drivers/media/i2c/ov5695.c
1331
mutex_destroy(&ov5695->mutex);
drivers/media/i2c/ov5695.c
1339
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
1343
v4l2_ctrl_handler_free(&ov5695->ctrl_handler);
drivers/media/i2c/ov5695.c
1344
mutex_destroy(&ov5695->mutex);
drivers/media/i2c/ov5695.c
1348
__ov5695_power_off(ov5695);
drivers/media/i2c/ov5695.c
811
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
815
mutex_lock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
825
ov5695->cur_mode = mode;
drivers/media/i2c/ov5695.c
827
__v4l2_ctrl_modify_range(ov5695->hblank, h_blank,
drivers/media/i2c/ov5695.c
830
__v4l2_ctrl_modify_range(ov5695->vblank, vblank_def,
drivers/media/i2c/ov5695.c
835
mutex_unlock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
844
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
845
const struct ov5695_mode *mode = ov5695->cur_mode;
drivers/media/i2c/ov5695.c
847
mutex_lock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
857
mutex_unlock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
891
static int ov5695_enable_test_pattern(struct ov5695 *ov5695, u32 pattern)
drivers/media/i2c/ov5695.c
900
return ov5695_write_reg(ov5695->client, OV5695_REG_TEST_PATTERN,
drivers/media/i2c/ov5695.c
904
static int __ov5695_start_stream(struct ov5695 *ov5695)
drivers/media/i2c/ov5695.c
908
ret = ov5695_write_array(ov5695->client, ov5695_global_regs);
drivers/media/i2c/ov5695.c
911
ret = ov5695_write_array(ov5695->client, ov5695->cur_mode->reg_list);
drivers/media/i2c/ov5695.c
916
ret = __v4l2_ctrl_handler_setup(&ov5695->ctrl_handler);
drivers/media/i2c/ov5695.c
920
return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE,
drivers/media/i2c/ov5695.c
924
static int __ov5695_stop_stream(struct ov5695 *ov5695)
drivers/media/i2c/ov5695.c
926
return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE,
drivers/media/i2c/ov5695.c
932
struct ov5695 *ov5695 = to_ov5695(sd);
drivers/media/i2c/ov5695.c
933
struct i2c_client *client = ov5695->client;
drivers/media/i2c/ov5695.c
936
mutex_lock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
943
ret = __ov5695_start_stream(ov5695);
drivers/media/i2c/ov5695.c
950
__ov5695_stop_stream(ov5695);
drivers/media/i2c/ov5695.c
955
mutex_unlock(&ov5695->mutex);
drivers/media/i2c/ov5695.c
960
static int __ov5695_power_on(struct ov5695 *ov5695)
drivers/media/i2c/ov5695.c
963
struct device *dev = &ov5695->client->dev;
drivers/media/i2c/ov5695.c
965
ret = clk_prepare_enable(ov5695->xvclk);
drivers/media/i2c/ov5695.c
971
gpiod_set_value_cansleep(ov5695->reset_gpio, 1);
drivers/media/i2c/ov5695.c
978
ret = regulator_enable(ov5695->supplies[i].consumer);
drivers/media/i2c/ov5695.c
981
ov5695->supplies[i].supply, ret);
drivers/media/i2c/ov5695.c
986
gpiod_set_value_cansleep(ov5695->reset_gpio, 0);
drivers/media/i2c/ov5695.c
994
regulator_disable(ov5695->supplies[i].consumer);
drivers/media/i2c/ov5695.c
995
clk_disable_unprepare(ov5695->xvclk);