Symbol: ov13858
drivers/media/i2c/ov13858.c
1053
#define to_ov13858(_sd) container_of(_sd, struct ov13858, sd)
drivers/media/i2c/ov13858.c
1056
static int ov13858_read_reg(struct ov13858 *ov13858, u16 reg, u32 len,
drivers/media/i2c/ov13858.c
1059
struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd);
drivers/media/i2c/ov13858.c
1092
static int ov13858_write_reg(struct ov13858 *ov13858, u16 reg, u32 len,
drivers/media/i2c/ov13858.c
1095
struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd);
drivers/media/i2c/ov13858.c
1121
static int ov13858_write_regs(struct ov13858 *ov13858,
drivers/media/i2c/ov13858.c
1128
ret = ov13858_write_reg(ov13858, regs[i].address, 1,
drivers/media/i2c/ov13858.c
1132
ov13858->dev,
drivers/media/i2c/ov13858.c
1143
static int ov13858_write_reg_list(struct ov13858 *ov13858,
drivers/media/i2c/ov13858.c
1146
return ov13858_write_regs(ov13858, r_list->regs, r_list->num_of_regs);
drivers/media/i2c/ov13858.c
1152
struct ov13858 *ov13858 = to_ov13858(sd);
drivers/media/i2c/ov13858.c
1156
mutex_lock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1159
try_fmt->width = ov13858->cur_mode->width;
drivers/media/i2c/ov13858.c
1160
try_fmt->height = ov13858->cur_mode->height;
drivers/media/i2c/ov13858.c
1165
mutex_unlock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1170
static int ov13858_update_digital_gain(struct ov13858 *ov13858, u32 d_gain)
drivers/media/i2c/ov13858.c
1174
ret = ov13858_write_reg(ov13858, OV13858_REG_B_MWB_GAIN,
drivers/media/i2c/ov13858.c
1179
ret = ov13858_write_reg(ov13858, OV13858_REG_G_MWB_GAIN,
drivers/media/i2c/ov13858.c
1184
ret = ov13858_write_reg(ov13858, OV13858_REG_R_MWB_GAIN,
drivers/media/i2c/ov13858.c
1190
static int ov13858_enable_test_pattern(struct ov13858 *ov13858, u32 pattern)
drivers/media/i2c/ov13858.c
1195
ret = ov13858_read_reg(ov13858, OV13858_REG_TEST_PATTERN,
drivers/media/i2c/ov13858.c
1207
return ov13858_write_reg(ov13858, OV13858_REG_TEST_PATTERN,
drivers/media/i2c/ov13858.c
1213
struct ov13858 *ov13858 = container_of(ctrl->handler,
drivers/media/i2c/ov13858.c
1214
struct ov13858, ctrl_handler);
drivers/media/i2c/ov13858.c
1222
max = ov13858->cur_mode->height + ctrl->val - 8;
drivers/media/i2c/ov13858.c
1223
__v4l2_ctrl_modify_range(ov13858->exposure,
drivers/media/i2c/ov13858.c
1224
ov13858->exposure->minimum,
drivers/media/i2c/ov13858.c
1225
max, ov13858->exposure->step, max);
drivers/media/i2c/ov13858.c
1233
if (!pm_runtime_get_if_in_use(ov13858->dev))
drivers/media/i2c/ov13858.c
1239
ret = ov13858_write_reg(ov13858, OV13858_REG_ANALOG_GAIN,
drivers/media/i2c/ov13858.c
1243
ret = ov13858_update_digital_gain(ov13858, ctrl->val);
drivers/media/i2c/ov13858.c
1246
ret = ov13858_write_reg(ov13858, OV13858_REG_EXPOSURE,
drivers/media/i2c/ov13858.c
1252
ret = ov13858_write_reg(ov13858, OV13858_REG_VTS,
drivers/media/i2c/ov13858.c
1254
ov13858->cur_mode->height
drivers/media/i2c/ov13858.c
1258
ret = ov13858_enable_test_pattern(ov13858, ctrl->val);
drivers/media/i2c/ov13858.c
1261
dev_info(ov13858->dev,
drivers/media/i2c/ov13858.c
1267
pm_runtime_put(ov13858->dev);
drivers/media/i2c/ov13858.c
1316
static int ov13858_do_get_pad_format(struct ov13858 *ov13858,
drivers/media/i2c/ov13858.c
1326
ov13858_update_pad_format(ov13858->cur_mode, fmt);
drivers/media/i2c/ov13858.c
1336
struct ov13858 *ov13858 = to_ov13858(sd);
drivers/media/i2c/ov13858.c
1339
mutex_lock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1340
ret = ov13858_do_get_pad_format(ov13858, sd_state, fmt);
drivers/media/i2c/ov13858.c
1341
mutex_unlock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1351
struct ov13858 *ov13858 = to_ov13858(sd);
drivers/media/i2c/ov13858.c
1360
mutex_lock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1375
ov13858->cur_mode = mode;
drivers/media/i2c/ov13858.c
1376
__v4l2_ctrl_s_ctrl(ov13858->link_freq, mode->link_freq_index);
drivers/media/i2c/ov13858.c
1379
__v4l2_ctrl_s_ctrl_int64(ov13858->pixel_rate, pixel_rate);
drivers/media/i2c/ov13858.c
1382
vblank_def = ov13858->cur_mode->vts_def -
drivers/media/i2c/ov13858.c
1383
ov13858->cur_mode->height;
drivers/media/i2c/ov13858.c
1384
vblank_min = ov13858->cur_mode->vts_min -
drivers/media/i2c/ov13858.c
1385
ov13858->cur_mode->height;
drivers/media/i2c/ov13858.c
1387
ov13858->vblank, vblank_min,
drivers/media/i2c/ov13858.c
1388
OV13858_VTS_MAX - ov13858->cur_mode->height, 1,
drivers/media/i2c/ov13858.c
1390
__v4l2_ctrl_s_ctrl(ov13858->vblank, vblank_def);
drivers/media/i2c/ov13858.c
1393
- ov13858->cur_mode->width;
drivers/media/i2c/ov13858.c
1394
__v4l2_ctrl_modify_range(ov13858->hblank, h_blank,
drivers/media/i2c/ov13858.c
1398
mutex_unlock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1411
static int ov13858_start_streaming(struct ov13858 *ov13858)
drivers/media/i2c/ov13858.c
1417
ret = ov13858_write_reg(ov13858, OV13858_REG_SOFTWARE_RST,
drivers/media/i2c/ov13858.c
1420
dev_err(ov13858->dev, "%s failed to set powerup registers\n",
drivers/media/i2c/ov13858.c
1426
link_freq_index = ov13858->cur_mode->link_freq_index;
drivers/media/i2c/ov13858.c
1428
ret = ov13858_write_reg_list(ov13858, reg_list);
drivers/media/i2c/ov13858.c
1430
dev_err(ov13858->dev, "%s failed to set plls\n", __func__);
drivers/media/i2c/ov13858.c
1435
reg_list = &ov13858->cur_mode->reg_list;
drivers/media/i2c/ov13858.c
1436
ret = ov13858_write_reg_list(ov13858, reg_list);
drivers/media/i2c/ov13858.c
1438
dev_err(ov13858->dev, "%s failed to set mode\n", __func__);
drivers/media/i2c/ov13858.c
1443
ret = __v4l2_ctrl_handler_setup(ov13858->sd.ctrl_handler);
drivers/media/i2c/ov13858.c
1447
return ov13858_write_reg(ov13858, OV13858_REG_MODE_SELECT,
drivers/media/i2c/ov13858.c
1453
static int ov13858_stop_streaming(struct ov13858 *ov13858)
drivers/media/i2c/ov13858.c
1455
return ov13858_write_reg(ov13858, OV13858_REG_MODE_SELECT,
drivers/media/i2c/ov13858.c
1461
struct ov13858 *ov13858 = to_ov13858(sd);
drivers/media/i2c/ov13858.c
1464
mutex_lock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1467
ret = pm_runtime_resume_and_get(ov13858->dev);
drivers/media/i2c/ov13858.c
1475
ret = ov13858_start_streaming(ov13858);
drivers/media/i2c/ov13858.c
1479
ov13858_stop_streaming(ov13858);
drivers/media/i2c/ov13858.c
1480
pm_runtime_put(ov13858->dev);
drivers/media/i2c/ov13858.c
1483
mutex_unlock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1488
pm_runtime_put(ov13858->dev);
drivers/media/i2c/ov13858.c
1490
mutex_unlock(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1496
static int ov13858_identify_module(struct ov13858 *ov13858)
drivers/media/i2c/ov13858.c
1501
ret = ov13858_read_reg(ov13858, OV13858_REG_CHIP_ID,
drivers/media/i2c/ov13858.c
1507
dev_err(ov13858->dev, "chip id mismatch: %x!=%x\n",
drivers/media/i2c/ov13858.c
1552
static int ov13858_init_controls(struct ov13858 *ov13858)
drivers/media/i2c/ov13858.c
1565
ctrl_hdlr = &ov13858->ctrl_handler;
drivers/media/i2c/ov13858.c
1570
mutex_init(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1571
ctrl_hdlr->lock = &ov13858->mutex;
drivers/media/i2c/ov13858.c
1572
ov13858->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr,
drivers/media/i2c/ov13858.c
1578
if (ov13858->link_freq)
drivers/media/i2c/ov13858.c
1579
ov13858->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov13858.c
1584
ov13858->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov13858_ctrl_ops,
drivers/media/i2c/ov13858.c
1589
mode = ov13858->cur_mode;
drivers/media/i2c/ov13858.c
1592
ov13858->vblank = v4l2_ctrl_new_std(
drivers/media/i2c/ov13858.c
1599
ov13858->hblank = v4l2_ctrl_new_std(
drivers/media/i2c/ov13858.c
1602
if (ov13858->hblank)
drivers/media/i2c/ov13858.c
1603
ov13858->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov13858.c
1606
ov13858->exposure = v4l2_ctrl_new_std(
drivers/media/i2c/ov13858.c
1627
dev_err(ov13858->dev, "%s control init failed (%d)\n",
drivers/media/i2c/ov13858.c
1632
ret = v4l2_fwnode_device_parse(ov13858->dev, &props);
drivers/media/i2c/ov13858.c
1641
ov13858->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/ov13858.c
1647
mutex_destroy(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1652
static void ov13858_free_controls(struct ov13858 *ov13858)
drivers/media/i2c/ov13858.c
1654
v4l2_ctrl_handler_free(ov13858->sd.ctrl_handler);
drivers/media/i2c/ov13858.c
1655
mutex_destroy(&ov13858->mutex);
drivers/media/i2c/ov13858.c
1660
struct ov13858 *ov13858;
drivers/media/i2c/ov13858.c
1664
ov13858 = devm_kzalloc(&client->dev, sizeof(*ov13858), GFP_KERNEL);
drivers/media/i2c/ov13858.c
1665
if (!ov13858)
drivers/media/i2c/ov13858.c
1668
ov13858->dev = &client->dev;
drivers/media/i2c/ov13858.c
1670
ov13858->clk = devm_v4l2_sensor_clk_get(ov13858->dev, NULL);
drivers/media/i2c/ov13858.c
1671
if (IS_ERR(ov13858->clk))
drivers/media/i2c/ov13858.c
1672
return dev_err_probe(ov13858->dev, PTR_ERR(ov13858->clk),
drivers/media/i2c/ov13858.c
1675
freq = clk_get_rate(ov13858->clk);
drivers/media/i2c/ov13858.c
1677
return dev_err_probe(ov13858->dev, -EINVAL,
drivers/media/i2c/ov13858.c
1682
v4l2_i2c_subdev_init(&ov13858->sd, client, &ov13858_subdev_ops);
drivers/media/i2c/ov13858.c
1685
ret = ov13858_identify_module(ov13858);
drivers/media/i2c/ov13858.c
1687
dev_err(ov13858->dev, "failed to find sensor: %d\n", ret);
drivers/media/i2c/ov13858.c
1692
ov13858->cur_mode = &supported_modes[0];
drivers/media/i2c/ov13858.c
1694
ret = ov13858_init_controls(ov13858);
drivers/media/i2c/ov13858.c
1699
ov13858->sd.internal_ops = &ov13858_internal_ops;
drivers/media/i2c/ov13858.c
1700
ov13858->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
drivers/media/i2c/ov13858.c
1702
ov13858->sd.entity.ops = &ov13858_subdev_entity_ops;
drivers/media/i2c/ov13858.c
1703
ov13858->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/ov13858.c
1706
ov13858->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov13858.c
1707
ret = media_entity_pads_init(&ov13858->sd.entity, 1, &ov13858->pad);
drivers/media/i2c/ov13858.c
1709
dev_err(ov13858->dev, "%s failed:%d\n", __func__, ret);
drivers/media/i2c/ov13858.c
1713
ret = v4l2_async_register_subdev_sensor(&ov13858->sd);
drivers/media/i2c/ov13858.c
1721
pm_runtime_set_active(ov13858->dev);
drivers/media/i2c/ov13858.c
1722
pm_runtime_enable(ov13858->dev);
drivers/media/i2c/ov13858.c
1723
pm_runtime_idle(ov13858->dev);
drivers/media/i2c/ov13858.c
1728
media_entity_cleanup(&ov13858->sd.entity);
drivers/media/i2c/ov13858.c
1731
ov13858_free_controls(ov13858);
drivers/media/i2c/ov13858.c
1732
dev_err(ov13858->dev, "%s failed:%d\n", __func__, ret);
drivers/media/i2c/ov13858.c
1740
struct ov13858 *ov13858 = to_ov13858(sd);
drivers/media/i2c/ov13858.c
1744
ov13858_free_controls(ov13858);
drivers/media/i2c/ov13858.c
1746
pm_runtime_disable(ov13858->dev);