Lines Matching defs:ov8858

105 struct ov8858 {
124 static inline struct ov8858 *sd_to_ov8858(struct v4l2_subdev *sd)
126 return container_of(sd, struct ov8858, subdev);
1241 static int ov8858_write(struct ov8858 *ov8858, u32 reg, u32 val, int *err)
1243 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1269 static int ov8858_write_array(struct ov8858 *ov8858, const struct regval *regs)
1275 ov8858_write(ov8858, OV8858_REG_8BIT(regs[i].addr),
1282 static int ov8858_read(struct ov8858 *ov8858, u32 reg, u32 *val)
1284 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1323 static int ov8858_start_stream(struct ov8858 *ov8858,
1331 ret = ov8858_write_array(ov8858, ov8858->global_regs);
1340 reg_list = ov8858->num_lanes == 4
1344 ret = ov8858_write_array(ov8858, reg_list);
1351 ret = __v4l2_ctrl_handler_setup(&ov8858->ctrl_handler);
1355 ret = ov8858_write(ov8858, OV8858_REG_SC_CTRL0100,
1366 static int ov8858_stop_stream(struct ov8858 *ov8858)
1368 return ov8858_write(ov8858, OV8858_REG_SC_CTRL0100,
1375 struct ov8858 *ov8858 = sd_to_ov8858(sd);
1386 ret = ov8858_start_stream(ov8858, state);
1393 ov8858_stop_stream(ov8858);
1416 struct ov8858 *ov8858 = sd_to_ov8858(sd);
1437 __v4l2_ctrl_modify_range(ov8858->hblank, h_blank, h_blank, 1,
1441 __v4l2_ctrl_modify_range(ov8858->vblank, vblank_def,
1515 static int ov8858_enable_test_pattern(struct ov8858 *ov8858, u32 pattern)
1524 return ov8858_write(ov8858, OV8858_REG_TEST_PATTERN, val, NULL);
1529 struct ov8858 *ov8858 = container_of(ctrl->handler,
1530 struct ov8858, ctrl_handler);
1532 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1545 state = v4l2_subdev_get_locked_active_state(&ov8858->subdev);
1553 __v4l2_ctrl_modify_range(ov8858->exposure,
1554 ov8858->exposure->minimum, max_exp,
1555 ov8858->exposure->step,
1556 ov8858->exposure->default_value);
1566 ret = ov8858_write(ov8858, OV8858_REG_LONG_EXPO,
1570 ret = ov8858_write(ov8858, OV8858_REG_LONG_GAIN,
1583 ret = ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN,
1587 ret = ov8858_write(ov8858, OV8858_REG_VTS,
1591 ret = ov8858_enable_test_pattern(ov8858, ctrl->val);
1613 static int ov8858_power_on(struct ov8858 *ov8858)
1615 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1620 if (clk_get_rate(ov8858->xvclk) != OV8858_XVCLK_FREQ)
1623 ret = clk_prepare_enable(ov8858->xvclk);
1630 ov8858->supplies);
1643 gpiod_set_value_cansleep(ov8858->reset_gpio, 0);
1645 gpiod_set_value_cansleep(ov8858->pwdn_gpio, 0);
1651 clk_disable_unprepare(ov8858->xvclk);
1656 static void ov8858_power_off(struct ov8858 *ov8858)
1658 gpiod_set_value_cansleep(ov8858->pwdn_gpio, 1);
1659 clk_disable_unprepare(ov8858->xvclk);
1660 gpiod_set_value_cansleep(ov8858->reset_gpio, 1);
1663 ov8858->supplies);
1670 struct ov8858 *ov8858 = sd_to_ov8858(sd);
1672 return ov8858_power_on(ov8858);
1679 struct ov8858 *ov8858 = sd_to_ov8858(sd);
1681 ov8858_power_off(ov8858);
1695 static int ov8858_init_ctrls(struct ov8858 *ov8858)
1697 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1698 struct v4l2_ctrl_handler *handler = &ov8858->ctrl_handler;
1717 pixel_rate = OV8858_LINK_FREQ * 2 * ov8858->num_lanes / 10;
1722 ov8858->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK,
1724 if (ov8858->hblank)
1725 ov8858->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1728 ov8858->vblank = v4l2_ctrl_new_std(handler, &ov8858_ctrl_ops,
1734 ov8858->exposure = v4l2_ctrl_new_std(handler, &ov8858_ctrl_ops,
1768 ov8858->subdev.ctrl_handler = handler;
1779 static int ov8858_check_sensor_id(struct ov8858 *ov8858)
1781 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1785 ret = ov8858_read(ov8858, OV8858_REG_CHIP_ID, &id);
1794 ret = ov8858_read(ov8858, OV8858_REG_SUB_ID, &id);
1802 ov8858->global_regs = ov8858->num_lanes == 4
1805 } else if (ov8858->num_lanes == 2) {
1810 ov8858->global_regs = ov8858_global_regs_r1a;
1821 static int ov8858_configure_regulators(struct ov8858 *ov8858)
1823 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1827 ov8858->supplies[i].supply = ov8858_supply_names[i];
1831 ov8858->supplies);
1834 static int ov8858_parse_of(struct ov8858 *ov8858)
1837 struct i2c_client *client = v4l2_get_subdevdata(&ov8858->subdev);
1855 ov8858->num_lanes = vep.bus.mipi_csi2.num_data_lanes;
1856 switch (ov8858->num_lanes) {
1862 ov8858->num_lanes);
1873 struct ov8858 *ov8858;
1876 ov8858 = devm_kzalloc(dev, sizeof(*ov8858), GFP_KERNEL);
1877 if (!ov8858)
1880 ov8858->xvclk = devm_clk_get(dev, "xvclk");
1881 if (IS_ERR(ov8858->xvclk))
1882 return dev_err_probe(dev, PTR_ERR(ov8858->xvclk),
1885 ov8858->reset_gpio = devm_gpiod_get_optional(dev, "reset",
1887 if (IS_ERR(ov8858->reset_gpio))
1888 return dev_err_probe(dev, PTR_ERR(ov8858->reset_gpio),
1891 ov8858->pwdn_gpio = devm_gpiod_get_optional(dev, "powerdown",
1893 if (IS_ERR(ov8858->pwdn_gpio))
1894 return dev_err_probe(dev, PTR_ERR(ov8858->pwdn_gpio),
1897 v4l2_i2c_subdev_init(&ov8858->subdev, client, &ov8858_subdev_ops);
1898 ov8858->subdev.internal_ops = &ov8858_internal_ops;
1900 ret = ov8858_configure_regulators(ov8858);
1904 ret = ov8858_parse_of(ov8858);
1908 ret = ov8858_init_ctrls(ov8858);
1912 sd = &ov8858->subdev;
1914 ov8858->pad.flags = MEDIA_PAD_FL_SOURCE;
1916 ret = media_entity_pads_init(&sd->entity, 1, &ov8858->pad);
1920 sd->state_lock = ov8858->ctrl_handler.lock;
1927 ret = ov8858_power_on(ov8858);
1935 ret = ov8858_check_sensor_id(ov8858);
1956 ov8858_power_off(ov8858);
1960 v4l2_ctrl_handler_free(&ov8858->ctrl_handler);
1968 struct ov8858 *ov8858 = sd_to_ov8858(sd);
1972 v4l2_ctrl_handler_free(&ov8858->ctrl_handler);
1976 ov8858_power_off(ov8858);
1981 { .compatible = "ovti,ov8858" },
1988 .name = "ov8858",