Symbol: tw9900
drivers/media/i2c/tw9900.c
190
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
193
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
194
tw9900_fill_fmt(tw9900->cur_mode, mbus_fmt);
drivers/media/i2c/tw9900.c
195
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
204
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
207
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
209
if (tw9900->streaming) {
drivers/media/i2c/tw9900.c
210
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
214
tw9900_fill_fmt(tw9900->cur_mode, mbus_fmt);
drivers/media/i2c/tw9900.c
216
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
235
struct tw9900 *tw9900 = container_of(ctrl->handler, struct tw9900, hdl);
drivers/media/i2c/tw9900.c
238
if (pm_runtime_suspended(&tw9900->client->dev))
drivers/media/i2c/tw9900.c
244
ret = tw9900_write_reg(tw9900->client, TW9900_REG_BRIGHT_CTL,
drivers/media/i2c/tw9900.c
248
ret = tw9900_write_reg(tw9900->client, TW9900_REG_CONTRAST_CTL,
drivers/media/i2c/tw9900.c
261
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
262
struct i2c_client *client = tw9900->client;
drivers/media/i2c/tw9900.c
265
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
267
if (tw9900->streaming == on) {
drivers/media/i2c/tw9900.c
268
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
272
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
279
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
285
ret = tw9900_write_array(tw9900->client,
drivers/media/i2c/tw9900.c
286
tw9900->cur_mode->reg_list,
drivers/media/i2c/tw9900.c
287
tw9900->cur_mode->n_regs);
drivers/media/i2c/tw9900.c
296
tw9900->streaming = on;
drivers/media/i2c/tw9900.c
298
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
301
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
308
tw9900->streaming = on;
drivers/media/i2c/tw9900.c
310
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
318
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
340
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
353
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
354
tw9900->cur_mode = mode;
drivers/media/i2c/tw9900.c
355
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
360
static int tw9900_get_stream_std(struct tw9900 *tw9900,
drivers/media/i2c/tw9900.c
365
lockdep_assert_held(&tw9900->mutex);
drivers/media/i2c/tw9900.c
367
ret = tw9900_read_reg(tw9900->client, TW9900_REG_STD);
drivers/media/i2c/tw9900.c
394
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
396
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
397
*std = tw9900->cur_mode->std;
drivers/media/i2c/tw9900.c
398
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
403
static int tw9900_start_autodetect(struct tw9900 *tw9900)
drivers/media/i2c/tw9900.c
407
lockdep_assert_held(&tw9900->mutex);
drivers/media/i2c/tw9900.c
409
ret = tw9900_write_reg(tw9900->client, TW9900_REG_STDR,
drivers/media/i2c/tw9900.c
415
ret = tw9900_write_reg(tw9900->client, TW9900_REG_STD,
drivers/media/i2c/tw9900.c
420
ret = tw9900_write_reg(tw9900->client, TW9900_REG_STDR,
drivers/media/i2c/tw9900.c
436
static int tw9900_detect_done(struct tw9900 *tw9900, bool *done)
drivers/media/i2c/tw9900.c
440
lockdep_assert_held(&tw9900->mutex);
drivers/media/i2c/tw9900.c
442
ret = tw9900_read_reg(tw9900->client, TW9900_REG_STD);
drivers/media/i2c/tw9900.c
453
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
457
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
459
if (tw9900->streaming) {
drivers/media/i2c/tw9900.c
460
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
464
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
466
ret = pm_runtime_resume_and_get(&tw9900->client->dev);
drivers/media/i2c/tw9900.c
470
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
472
ret = tw9900_start_autodetect(tw9900);
drivers/media/i2c/tw9900.c
477
ret = tw9900_detect_done(tw9900, &done);
drivers/media/i2c/tw9900.c
492
ret = tw9900_get_stream_std(tw9900, std);
drivers/media/i2c/tw9900.c
495
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
496
pm_runtime_put(&tw9900->client->dev);
drivers/media/i2c/tw9900.c
510
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
513
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
515
if (tw9900->streaming) {
drivers/media/i2c/tw9900.c
516
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
520
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
524
ret = pm_runtime_resume_and_get(&tw9900->client->dev);
drivers/media/i2c/tw9900.c
528
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
529
ret = tw9900_read_reg(tw9900->client, TW9900_REG_CHIP_STATUS);
drivers/media/i2c/tw9900.c
530
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
532
pm_runtime_put(&tw9900->client->dev);
drivers/media/i2c/tw9900.c
572
static int tw9900_check_id(struct tw9900 *tw9900,
drivers/media/i2c/tw9900.c
575
struct device *dev = &tw9900->client->dev;
drivers/media/i2c/tw9900.c
578
ret = pm_runtime_resume_and_get(&tw9900->client->dev);
drivers/media/i2c/tw9900.c
582
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
584
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
586
pm_runtime_put(&tw9900->client->dev);
drivers/media/i2c/tw9900.c
603
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
606
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
608
if (tw9900->reset_gpio)
drivers/media/i2c/tw9900.c
609
gpiod_set_value_cansleep(tw9900->reset_gpio, 1);
drivers/media/i2c/tw9900.c
611
ret = regulator_enable(tw9900->regulator);
drivers/media/i2c/tw9900.c
613
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
619
if (tw9900->reset_gpio)
drivers/media/i2c/tw9900.c
620
gpiod_set_value_cansleep(tw9900->reset_gpio, 0);
drivers/media/i2c/tw9900.c
624
ret = tw9900_write_array(tw9900->client, tw9900_init_regs,
drivers/media/i2c/tw9900.c
627
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
639
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
641
mutex_lock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
643
if (tw9900->reset_gpio)
drivers/media/i2c/tw9900.c
644
gpiod_set_value_cansleep(tw9900->reset_gpio, 1);
drivers/media/i2c/tw9900.c
646
regulator_disable(tw9900->regulator);
drivers/media/i2c/tw9900.c
648
mutex_unlock(&tw9900->mutex);
drivers/media/i2c/tw9900.c
657
struct tw9900 *tw9900;
drivers/media/i2c/tw9900.c
660
tw9900 = devm_kzalloc(dev, sizeof(*tw9900), GFP_KERNEL);
drivers/media/i2c/tw9900.c
661
if (!tw9900)
drivers/media/i2c/tw9900.c
664
tw9900->client = client;
drivers/media/i2c/tw9900.c
665
tw9900->cur_mode = &supported_modes[0];
drivers/media/i2c/tw9900.c
667
tw9900->reset_gpio = devm_gpiod_get_optional(dev, "reset",
drivers/media/i2c/tw9900.c
669
if (IS_ERR(tw9900->reset_gpio))
drivers/media/i2c/tw9900.c
670
return dev_err_probe(dev, PTR_ERR(tw9900->reset_gpio),
drivers/media/i2c/tw9900.c
673
tw9900->regulator = devm_regulator_get(&tw9900->client->dev, "vdd");
drivers/media/i2c/tw9900.c
674
if (IS_ERR(tw9900->regulator))
drivers/media/i2c/tw9900.c
675
return dev_err_probe(dev, PTR_ERR(tw9900->regulator),
drivers/media/i2c/tw9900.c
678
v4l2_i2c_subdev_init(&tw9900->subdev, client, &tw9900_subdev_ops);
drivers/media/i2c/tw9900.c
679
tw9900->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
drivers/media/i2c/tw9900.c
682
mutex_init(&tw9900->mutex);
drivers/media/i2c/tw9900.c
684
hdl = &tw9900->hdl;
drivers/media/i2c/tw9900.c
690
hdl->lock = &tw9900->mutex;
drivers/media/i2c/tw9900.c
697
tw9900->subdev.ctrl_handler = hdl;
drivers/media/i2c/tw9900.c
703
tw9900->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/tw9900.c
704
tw9900->subdev.entity.function = MEDIA_ENT_F_DV_DECODER;
drivers/media/i2c/tw9900.c
706
ret = media_entity_pads_init(&tw9900->subdev.entity, 1, &tw9900->pad);
drivers/media/i2c/tw9900.c
713
ret = tw9900_check_id(tw9900, client);
drivers/media/i2c/tw9900.c
717
ret = v4l2_async_register_subdev(&tw9900->subdev);
drivers/media/i2c/tw9900.c
727
media_entity_cleanup(&tw9900->subdev.entity);
drivers/media/i2c/tw9900.c
731
mutex_destroy(&tw9900->mutex);
drivers/media/i2c/tw9900.c
739
struct tw9900 *tw9900 = to_tw9900(sd);
drivers/media/i2c/tw9900.c
747
mutex_destroy(&tw9900->mutex);
drivers/media/i2c/tw9900.c
89
#define to_tw9900(sd) container_of(sd, struct tw9900, subdev)