Lines Matching refs:ov7725

49 struct ov7725 {  struct
64 #define to_ov7725(sd) container_of(sd, struct ov7725, subdev) argument
220 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_set_fmt() local
223 mutex_lock(&ov7725->mutex); in ov7725_set_fmt()
235 mutex_unlock(&ov7725->mutex); in ov7725_set_fmt()
239 ov7725->cur_mode = mode; in ov7725_set_fmt()
242 mutex_unlock(&ov7725->mutex); in ov7725_set_fmt()
251 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_get_fmt() local
252 const struct ov7725_mode *mode = ov7725->cur_mode; in ov7725_get_fmt()
254 mutex_lock(&ov7725->mutex); in ov7725_get_fmt()
259 mutex_unlock(&ov7725->mutex); in ov7725_get_fmt()
269 mutex_unlock(&ov7725->mutex); in ov7725_get_fmt()
305 static int __ov7725_power_on(struct ov7725 *ov7725) in __ov7725_power_on() argument
308 struct device *dev = &ov7725->client->dev; in __ov7725_power_on()
310 if (!IS_ERR(ov7725->reset_gpio)) in __ov7725_power_on()
311 gpiod_set_value_cansleep(ov7725->reset_gpio, 0); in __ov7725_power_on()
313 ret = regulator_bulk_enable(ov7725_NUM_SUPPLIES, ov7725->supplies); in __ov7725_power_on()
319 if (!IS_ERR(ov7725->xvclk)) { in __ov7725_power_on()
320 ret = clk_prepare_enable(ov7725->xvclk); in __ov7725_power_on()
327 if (!IS_ERR(ov7725->pwdn_gpio)) in __ov7725_power_on()
328 gpiod_set_value_cansleep(ov7725->pwdn_gpio, 0); in __ov7725_power_on()
330 if (!IS_ERR(ov7725->reset_gpio)) in __ov7725_power_on()
331 gpiod_set_value_cansleep(ov7725->reset_gpio, 1); in __ov7725_power_on()
336 static void __ov7725_power_off(struct ov7725 *ov7725) in __ov7725_power_off() argument
338 if (!IS_ERR(ov7725->reset_gpio)) in __ov7725_power_off()
339 gpiod_set_value_cansleep(ov7725->reset_gpio, 0); in __ov7725_power_off()
340 if (!IS_ERR(ov7725->pwdn_gpio)) in __ov7725_power_off()
341 gpiod_set_value_cansleep(ov7725->pwdn_gpio, 1); in __ov7725_power_off()
343 if (!IS_ERR(ov7725->xvclk)) in __ov7725_power_off()
344 clk_disable_unprepare(ov7725->xvclk); in __ov7725_power_off()
346 regulator_bulk_disable(ov7725_NUM_SUPPLIES, ov7725->supplies); in __ov7725_power_off()
351 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_s_stream() local
352 struct i2c_client *client = ov7725->client; in ov7725_s_stream()
355 mutex_lock(&ov7725->mutex); in ov7725_s_stream()
358 if (on == ov7725->streaming) in ov7725_s_stream()
362 ret = pm_runtime_get_sync(&ov7725->client->dev); in ov7725_s_stream()
368 ret = ov7725_write_array(ov7725->client, in ov7725_s_stream()
369 ov7725->cur_mode->reg_list); in ov7725_s_stream()
379 ov7725->streaming = on; in ov7725_s_stream()
382 mutex_unlock(&ov7725->mutex); in ov7725_s_stream()
390 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_open() local
395 mutex_lock(&ov7725->mutex); in ov7725_open()
403 mutex_unlock(&ov7725->mutex); in ov7725_open()
413 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_runtime_resume() local
415 return __ov7725_power_on(ov7725); in ov7725_runtime_resume()
422 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_runtime_suspend() local
424 __ov7725_power_off(ov7725); in ov7725_runtime_suspend()
456 static int ov7725_check_sensor_id(struct ov7725 *ov7725, in ov7725_check_sensor_id() argument
459 struct device *dev = &ov7725->client->dev; in ov7725_check_sensor_id()
476 static int ov7725_configure_regulators(struct ov7725 *ov7725) in ov7725_configure_regulators() argument
481 ov7725->supplies[i].supply = ov7725_supply_names[i]; in ov7725_configure_regulators()
483 return devm_regulator_bulk_get(&ov7725->client->dev, in ov7725_configure_regulators()
485 ov7725->supplies); in ov7725_configure_regulators()
492 struct ov7725 *ov7725; in ov7725_probe() local
495 ov7725 = devm_kzalloc(dev, sizeof(*ov7725), GFP_KERNEL); in ov7725_probe()
496 if (!ov7725) in ov7725_probe()
499 ov7725->client = client; in ov7725_probe()
500 ov7725->cur_mode = &supported_modes[0]; in ov7725_probe()
502 ov7725->xvclk = devm_clk_get(dev, "xvclk"); in ov7725_probe()
503 if (IS_ERR(ov7725->xvclk)) { in ov7725_probe()
507 ret = clk_set_rate(ov7725->xvclk, ov7725_XVCLK_FREQ); in ov7725_probe()
512 if (clk_get_rate(ov7725->xvclk) != ov7725_XVCLK_FREQ) in ov7725_probe()
515 ov7725->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov7725_probe()
516 if (IS_ERR(ov7725->reset_gpio)) in ov7725_probe()
519 ov7725->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov7725_probe()
520 if (IS_ERR(ov7725->pwdn_gpio)) in ov7725_probe()
523 ret = ov7725_configure_regulators(ov7725); in ov7725_probe()
529 mutex_init(&ov7725->mutex); in ov7725_probe()
530 v4l2_i2c_subdev_init(&ov7725->subdev, client, &ov7725_subdev_ops); in ov7725_probe()
532 ret = __ov7725_power_on(ov7725); in ov7725_probe()
536 ret = ov7725_check_sensor_id(ov7725, client); in ov7725_probe()
540 ov7725->subdev.internal_ops = &ov7725_internal_ops; in ov7725_probe()
541 ov7725->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in ov7725_probe()
544 ov7725->pad.flags = MEDIA_PAD_FL_SOURCE; in ov7725_probe()
545 ov7725->subdev.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR; in ov7725_probe()
546 ret = media_entity_init(&ov7725->subdev.entity, 1, &ov7725->pad, 0); in ov7725_probe()
551 ret = v4l2_async_register_subdev(&ov7725->subdev); in ov7725_probe()
565 media_entity_cleanup(&ov7725->subdev.entity); in ov7725_probe()
568 __ov7725_power_off(ov7725); in ov7725_probe()
570 mutex_destroy(&ov7725->mutex); in ov7725_probe()
578 struct ov7725 *ov7725 = to_ov7725(sd); in ov7725_remove() local
584 mutex_destroy(&ov7725->mutex); in ov7725_remove()
588 __ov7725_power_off(ov7725); in ov7725_remove()