drivers/media/i2c/isl7998x.c
1003
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
1007
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1015
mode = isl7998x_norm_to_mode(isl7998x->norm);
drivers/media/i2c/isl7998x.c
1019
mf->code = isl7998x->fmt->code;
drivers/media/i2c/isl7998x.c
1024
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1033
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
1037
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1039
mode = isl7998x_norm_to_mode(isl7998x->norm);
drivers/media/i2c/isl7998x.c
1043
mf->code = isl7998x->fmt->code;
drivers/media/i2c/isl7998x.c
1049
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1056
struct isl7998x *isl7998x = container_of(ctrl->handler,
drivers/media/i2c/isl7998x.c
1057
struct isl7998x, ctrl_handler);
drivers/media/i2c/isl7998x.c
1062
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1063
isl7998x->test_pattern_bars = ctrl->val & 0x3;
drivers/media/i2c/isl7998x.c
1064
ret = isl7998x_set_test_pattern(isl7998x);
drivers/media/i2c/isl7998x.c
1065
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1068
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1069
isl7998x->test_pattern_chans = ctrl->val & 0xf;
drivers/media/i2c/isl7998x.c
1070
ret = isl7998x_set_test_pattern(isl7998x);
drivers/media/i2c/isl7998x.c
1071
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1074
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1075
isl7998x->test_pattern_color = ctrl->val & 0x3;
drivers/media/i2c/isl7998x.c
1076
ret = isl7998x_set_test_pattern(isl7998x);
drivers/media/i2c/isl7998x.c
1077
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1080
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1081
isl7998x->test_pattern = ctrl->val;
drivers/media/i2c/isl7998x.c
1082
ret = isl7998x_set_test_pattern(isl7998x);
drivers/media/i2c/isl7998x.c
1083
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1343
static int isl7998x_mc_init(struct isl7998x *isl7998x)
drivers/media/i2c/isl7998x.c
1347
isl7998x->subdev.entity.ops = &isl7998x_entity_ops;
drivers/media/i2c/isl7998x.c
1348
isl7998x->subdev.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE;
drivers/media/i2c/isl7998x.c
1350
isl7998x->pads[ISL7998X_PAD_OUT].flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/isl7998x.c
1352
isl7998x->pads[i].flags = MEDIA_PAD_FL_SINK;
drivers/media/i2c/isl7998x.c
1354
return media_entity_pads_init(&isl7998x->subdev.entity,
drivers/media/i2c/isl7998x.c
1356
isl7998x->pads);
drivers/media/i2c/isl7998x.c
1386
static void isl7998x_remove_controls(struct isl7998x *isl7998x)
drivers/media/i2c/isl7998x.c
1388
v4l2_ctrl_handler_free(&isl7998x->ctrl_handler);
drivers/media/i2c/isl7998x.c
1389
mutex_destroy(&isl7998x->ctrl_mutex);
drivers/media/i2c/isl7998x.c
1392
static int isl7998x_init_controls(struct isl7998x *isl7998x)
drivers/media/i2c/isl7998x.c
1394
struct v4l2_subdev *sd = &isl7998x->subdev;
drivers/media/i2c/isl7998x.c
1399
ret = v4l2_ctrl_handler_init(&isl7998x->ctrl_handler,
drivers/media/i2c/isl7998x.c
1404
mutex_init(&isl7998x->ctrl_mutex);
drivers/media/i2c/isl7998x.c
1405
isl7998x->ctrl_handler.lock = &isl7998x->ctrl_mutex;
drivers/media/i2c/isl7998x.c
1406
link_freq_index = get_link_freq_menu_index(isl7998x->nr_mipi_lanes,
drivers/media/i2c/isl7998x.c
1407
isl7998x->nr_inputs);
drivers/media/i2c/isl7998x.c
1412
isl7998x->nr_mipi_lanes, isl7998x->nr_inputs);
drivers/media/i2c/isl7998x.c
1417
isl7998x->link_freq = v4l2_ctrl_new_int_menu(&isl7998x->ctrl_handler,
drivers/media/i2c/isl7998x.c
1423
if (isl7998x->link_freq)
drivers/media/i2c/isl7998x.c
1424
isl7998x->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/isl7998x.c
1427
v4l2_ctrl_new_custom(&isl7998x->ctrl_handler,
drivers/media/i2c/isl7998x.c
1430
v4l2_ctrl_new_std_menu_items(&isl7998x->ctrl_handler,
drivers/media/i2c/isl7998x.c
1436
ret = isl7998x->ctrl_handler.error;
drivers/media/i2c/isl7998x.c
1440
isl7998x->subdev.ctrl_handler = &isl7998x->ctrl_handler;
drivers/media/i2c/isl7998x.c
1441
v4l2_ctrl_handler_setup(&isl7998x->ctrl_handler);
drivers/media/i2c/isl7998x.c
1446
isl7998x_remove_controls(isl7998x);
drivers/media/i2c/isl7998x.c
1458
struct isl7998x *isl7998x;
drivers/media/i2c/isl7998x.c
1470
isl7998x = devm_kzalloc(dev, sizeof(*isl7998x), GFP_KERNEL);
drivers/media/i2c/isl7998x.c
1471
if (!isl7998x)
drivers/media/i2c/isl7998x.c
1474
isl7998x->pd_gpio = devm_gpiod_get_optional(dev, "powerdown",
drivers/media/i2c/isl7998x.c
1476
if (IS_ERR(isl7998x->pd_gpio))
drivers/media/i2c/isl7998x.c
1477
return dev_err_probe(dev, PTR_ERR(isl7998x->pd_gpio),
drivers/media/i2c/isl7998x.c
1480
isl7998x->rstb_gpio = devm_gpiod_get_optional(dev, "reset",
drivers/media/i2c/isl7998x.c
1482
if (IS_ERR(isl7998x->rstb_gpio))
drivers/media/i2c/isl7998x.c
1483
return dev_err_probe(dev, PTR_ERR(isl7998x->rstb_gpio),
drivers/media/i2c/isl7998x.c
1486
isl7998x->regmap = devm_regmap_init_i2c(client, &isl7998x_regmap);
drivers/media/i2c/isl7998x.c
1487
if (IS_ERR(isl7998x->regmap))
drivers/media/i2c/isl7998x.c
1488
return dev_err_probe(dev, PTR_ERR(isl7998x->regmap),
drivers/media/i2c/isl7998x.c
1506
isl7998x->nr_mipi_lanes = endpoint.bus.mipi_csi2.num_data_lanes;
drivers/media/i2c/isl7998x.c
1512
isl7998x->nr_inputs = nr_inputs;
drivers/media/i2c/isl7998x.c
1514
v4l2_i2c_subdev_init(&isl7998x->subdev, client, &isl7998x_subdev_ops);
drivers/media/i2c/isl7998x.c
1515
isl7998x->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/isl7998x.c
1517
ret = isl7998x_mc_init(isl7998x);
drivers/media/i2c/isl7998x.c
1521
isl7998x->fmt = &isl7998x_colour_fmts[0];
drivers/media/i2c/isl7998x.c
1522
isl7998x->norm = V4L2_STD_NTSC;
drivers/media/i2c/isl7998x.c
1523
isl7998x->enabled = 0;
drivers/media/i2c/isl7998x.c
1525
mutex_init(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
1527
ret = isl7998x_init_controls(isl7998x);
drivers/media/i2c/isl7998x.c
1531
ret = v4l2_async_register_subdev(&isl7998x->subdev);
drivers/media/i2c/isl7998x.c
1540
isl7998x_remove_controls(isl7998x);
drivers/media/i2c/isl7998x.c
1542
media_entity_cleanup(&isl7998x->subdev.entity);
drivers/media/i2c/isl7998x.c
1549
struct isl7998x *isl7998x = i2c_to_isl7998x(client);
drivers/media/i2c/isl7998x.c
1552
v4l2_async_unregister_subdev(&isl7998x->subdev);
drivers/media/i2c/isl7998x.c
1553
isl7998x_remove_controls(isl7998x);
drivers/media/i2c/isl7998x.c
1554
media_entity_cleanup(&isl7998x->subdev.entity);
drivers/media/i2c/isl7998x.c
1572
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
1575
gpiod_set_value(isl7998x->rstb_gpio, 1);
drivers/media/i2c/isl7998x.c
1576
gpiod_set_value(isl7998x->pd_gpio, 0);
drivers/media/i2c/isl7998x.c
1577
gpiod_set_value(isl7998x->rstb_gpio, 0);
drivers/media/i2c/isl7998x.c
1579
ret = isl7998x_wait_power_on(isl7998x);
drivers/media/i2c/isl7998x.c
1583
ret = isl7998x_init(isl7998x);
drivers/media/i2c/isl7998x.c
1590
gpiod_set_value(isl7998x->pd_gpio, 1);
drivers/media/i2c/isl7998x.c
1598
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
1600
gpiod_set_value(isl7998x->pd_gpio, 1);
drivers/media/i2c/isl7998x.c
540
static struct isl7998x *sd_to_isl7998x(struct v4l2_subdev *sd)
drivers/media/i2c/isl7998x.c
542
return container_of(sd, struct isl7998x, subdev);
drivers/media/i2c/isl7998x.c
545
static struct isl7998x *i2c_to_isl7998x(const struct i2c_client *client)
drivers/media/i2c/isl7998x.c
613
static int isl7998x_wait_power_on(struct isl7998x *isl7998x)
drivers/media/i2c/isl7998x.c
615
struct device *dev = isl7998x->subdev.dev;
drivers/media/i2c/isl7998x.c
621
isl7998x->regmap,
drivers/media/i2c/isl7998x.c
633
static int isl7998x_set_standard(struct isl7998x *isl7998x, v4l2_std_id norm)
drivers/media/i2c/isl7998x.c
642
ret = regmap_write_bits(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
650
ret = regmap_write(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
656
ret = regmap_write(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
665
static int isl7998x_init(struct isl7998x *isl7998x)
drivers/media/i2c/isl7998x.c
667
const unsigned int lanes = isl7998x->nr_mipi_lanes;
drivers/media/i2c/isl7998x.c
671
isl7998x_video_in_chan_map[isl7998x->nr_inputs - 1] },
drivers/media/i2c/isl7998x.c
677
struct device *dev = isl7998x->subdev.dev;
drivers/media/i2c/isl7998x.c
678
struct regmap *regmap = isl7998x->regmap;
drivers/media/i2c/isl7998x.c
682
isl7998x->nr_mipi_lanes, isl7998x->nr_inputs,
drivers/media/i2c/isl7998x.c
683
v4l2_norm_to_name(isl7998x->norm));
drivers/media/i2c/isl7998x.c
690
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
691
ret = isl7998x_set_standard(isl7998x, isl7998x->norm);
drivers/media/i2c/isl7998x.c
692
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
705
static int isl7998x_set_test_pattern(struct isl7998x *isl7998x)
drivers/media/i2c/isl7998x.c
713
isl7998x->test_pattern_bars << 6 },
drivers/media/i2c/isl7998x.c
715
isl7998x->norm & V4L2_STD_PAL ? BIT(2) : 0 },
drivers/media/i2c/isl7998x.c
717
(isl7998x->test_pattern_chans << 4) |
drivers/media/i2c/isl7998x.c
718
(isl7998x->test_pattern_color << 2) }
drivers/media/i2c/isl7998x.c
720
struct device *dev = isl7998x->subdev.dev;
drivers/media/i2c/isl7998x.c
721
struct regmap *regmap = isl7998x->regmap;
drivers/media/i2c/isl7998x.c
727
if (isl7998x->test_pattern != 0) {
drivers/media/i2c/isl7998x.c
729
isl7998x->test_pattern_chans,
drivers/media/i2c/isl7998x.c
730
isl7998x_test_pattern_bars[isl7998x->test_pattern_bars],
drivers/media/i2c/isl7998x.c
731
isl7998x_test_pattern_colors[isl7998x->test_pattern_color]);
drivers/media/i2c/isl7998x.c
748
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
752
ret = regmap_read(isl7998x->regmap, reg->reg, &val);
drivers/media/i2c/isl7998x.c
765
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
767
return regmap_write(isl7998x->regmap, reg->reg, reg->val);
drivers/media/i2c/isl7998x.c
773
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
775
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
776
*norm = isl7998x->norm;
drivers/media/i2c/isl7998x.c
777
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
784
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
789
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
790
if (isl7998x->enabled) {
drivers/media/i2c/isl7998x.c
792
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
795
isl7998x->norm = norm;
drivers/media/i2c/isl7998x.c
796
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
801
ret = isl7998x_set_standard(isl7998x, norm);
drivers/media/i2c/isl7998x.c
810
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
824
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
825
if (isl7998x->enabled) {
drivers/media/i2c/isl7998x.c
830
ret = isl7998x_set_standard(isl7998x, V4L2_STD_UNKNOWN);
drivers/media/i2c/isl7998x.c
835
ret = regmap_write(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
843
ret = regmap_read_poll_timeout(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
857
for (i = 0; i < isl7998x->nr_inputs; i++) {
drivers/media/i2c/isl7998x.c
870
isl7998x_set_standard(isl7998x, isl7998x->norm);
drivers/media/i2c/isl7998x.c
872
mutex_unlock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
887
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
899
for (i = 0; i < isl7998x->nr_inputs; i++) {
drivers/media/i2c/isl7998x.c
900
ret = regmap_read(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
917
struct isl7998x *isl7998x = sd_to_isl7998x(sd);
drivers/media/i2c/isl7998x.c
925
mutex_lock(&isl7998x->lock);
drivers/media/i2c/isl7998x.c
926
if (isl7998x->enabled == enable)
drivers/media/i2c/isl7998x.c
928
isl7998x->enabled = enable;
drivers/media/i2c/isl7998x.c
931
ret = isl7998x_set_test_pattern(isl7998x);
drivers/media/i2c/isl7998x.c
936
regmap_read(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
942
ret = regmap_write(isl7998x->regmap,
drivers/media/i2c/isl7998x.c
946
mutex_unlock(&isl7998x->lock);