Lines Matching refs:lt8619c

61 struct lt8619c {  struct
249 static inline struct lt8619c *to_lt8619c(struct v4l2_subdev *sd) in to_lt8619c()
251 return container_of(sd, struct lt8619c, sd); in to_lt8619c()
257 struct lt8619c *lt8619c = to_lt8619c(sd); in tx_5v_power_present() local
259 val = gpiod_get_value(lt8619c->plugin_det_gpio); in tx_5v_power_present()
266 struct lt8619c *lt8619c = to_lt8619c(sd); in no_signal() local
268 v4l2_dbg(1, debug, sd, "no signal:%d\n", lt8619c->nosignal); in no_signal()
269 return lt8619c->nosignal; in no_signal()
286 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_get_detected_timings() local
296 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_get_detected_timings()
297 regmap_read(lt8619c->reg_map, 0x22, &val); in lt8619c_get_detected_timings()
299 regmap_read(lt8619c->reg_map, 0x23, &val); in lt8619c_get_detected_timings()
302 regmap_read(lt8619c->reg_map, 0x20, &val); in lt8619c_get_detected_timings()
304 regmap_read(lt8619c->reg_map, 0x21, &val); in lt8619c_get_detected_timings()
307 regmap_read(lt8619c->reg_map, 0x1e, &val); in lt8619c_get_detected_timings()
309 regmap_read(lt8619c->reg_map, 0x1f, &val); in lt8619c_get_detected_timings()
312 regmap_read(lt8619c->reg_map, 0x1c, &val); in lt8619c_get_detected_timings()
314 regmap_read(lt8619c->reg_map, 0x1d, &val); in lt8619c_get_detected_timings()
317 regmap_read(lt8619c->reg_map, 0x1a, &val); in lt8619c_get_detected_timings()
319 regmap_read(lt8619c->reg_map, 0x1b, &val); in lt8619c_get_detected_timings()
322 regmap_read(lt8619c->reg_map, 0x18, &val); in lt8619c_get_detected_timings()
324 regmap_read(lt8619c->reg_map, 0x19, &val); in lt8619c_get_detected_timings()
327 regmap_read(lt8619c->reg_map, 0x14, &val); in lt8619c_get_detected_timings()
329 regmap_read(lt8619c->reg_map, 0x15, &val); in lt8619c_get_detected_timings()
332 regmap_read(lt8619c->reg_map, 0x17, &vfp); in lt8619c_get_detected_timings()
333 regmap_read(lt8619c->reg_map, 0x16, &vbp); in lt8619c_get_detected_timings()
334 regmap_read(lt8619c->reg_map, 0x13, &vs); in lt8619c_get_detected_timings()
336 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_get_detected_timings()
337 regmap_read(lt8619c->reg_map, 0x44, &val); in lt8619c_get_detected_timings()
339 regmap_read(lt8619c->reg_map, 0x45, &val); in lt8619c_get_detected_timings()
341 regmap_read(lt8619c->reg_map, 0x46, &val); in lt8619c_get_detected_timings()
392 struct lt8619c *lt8619c = container_of(dwork, struct lt8619c, in lt8619c_delayed_work_enable_hotplug() local
394 struct v4l2_subdev *sd = &lt8619c->sd; in lt8619c_delayed_work_enable_hotplug()
397 mutex_lock(&lt8619c->confctl_mutex); in lt8619c_delayed_work_enable_hotplug()
401 lt8619c->nosignal = false; in lt8619c_delayed_work_enable_hotplug()
403 schedule_delayed_work(&lt8619c->delayed_work_monitor_resolution, in lt8619c_delayed_work_enable_hotplug()
406 cancel_delayed_work(&lt8619c->delayed_work_monitor_resolution); in lt8619c_delayed_work_enable_hotplug()
409 lt8619c->nosignal = true; in lt8619c_delayed_work_enable_hotplug()
411 mutex_unlock(&lt8619c->confctl_mutex); in lt8619c_delayed_work_enable_hotplug()
417 struct lt8619c *lt8619c = container_of(dwork, struct lt8619c, in lt8619c_delayed_work_monitor_resolution() local
419 struct v4l2_subdev *sd = &lt8619c->sd; in lt8619c_delayed_work_monitor_resolution()
426 lt8619c->nosignal = true; in lt8619c_delayed_work_monitor_resolution()
430 mutex_lock(&lt8619c->confctl_mutex); in lt8619c_delayed_work_monitor_resolution()
439 lt8619c->nosignal = true; in lt8619c_delayed_work_monitor_resolution()
446 lt8619c->nosignal = false; in lt8619c_delayed_work_monitor_resolution()
448 mutex_unlock(&lt8619c->confctl_mutex); in lt8619c_delayed_work_monitor_resolution()
450 schedule_delayed_work(&lt8619c->delayed_work_monitor_resolution, HZ); in lt8619c_delayed_work_monitor_resolution()
455 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_load_hdcpkey() local
459 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_load_hdcpkey()
460 regmap_write(lt8619c->reg_map, 0xb2, 0x50); in lt8619c_load_hdcpkey()
461 regmap_write(lt8619c->reg_map, 0xa3, 0x77); in lt8619c_load_hdcpkey()
464 regmap_read(lt8619c->reg_map, 0xc0, &val); in lt8619c_load_hdcpkey()
470 regmap_write(lt8619c->reg_map, 0xb2, 0xd0); in lt8619c_load_hdcpkey()
471 regmap_write(lt8619c->reg_map, 0xa3, 0x57); in lt8619c_load_hdcpkey()
490 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_mode_config() local
492 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_mode_config()
493 regmap_update_bits(lt8619c->reg_map, 0x2c, BIT(5) | BIT(4), BIT(5) | BIT(4)); in lt8619c_mode_config()
495 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_mode_config()
496 regmap_write(lt8619c->reg_map, 0x80, CLK_SRC); in lt8619c_mode_config()
497 regmap_write(lt8619c->reg_map, 0x89, REF_RESISTANCE); in lt8619c_mode_config()
498 regmap_write(lt8619c->reg_map, 0x8b, 0x90); in lt8619c_mode_config()
500 regmap_write(lt8619c->reg_map, 0xa8, 0x07); in lt8619c_mode_config()
502 regmap_write(lt8619c->reg_map, 0x04, 0xf2); in lt8619c_mode_config()
504 if (lt8619c->BT656_double_clk_en) { in lt8619c_mode_config()
505 regmap_write(lt8619c->reg_map, 0x96, 0x71); in lt8619c_mode_config()
506 regmap_write(lt8619c->reg_map, 0xa0, 0x51); in lt8619c_mode_config()
507 regmap_write(lt8619c->reg_map, 0xa3, 0x44); in lt8619c_mode_config()
508 regmap_write(lt8619c->reg_map, 0xa2, 0x20); in lt8619c_mode_config()
510 regmap_write(lt8619c->reg_map, 0x96, 0x71); in lt8619c_mode_config()
511 regmap_write(lt8619c->reg_map, 0xa0, 0x50); in lt8619c_mode_config()
512 regmap_write(lt8619c->reg_map, 0xa3, 0x44); in lt8619c_mode_config()
513 regmap_write(lt8619c->reg_map, 0xa2, 0x20); in lt8619c_mode_config()
515 regmap_update_bits(lt8619c->reg_map, 0x60, OUTPUT_MODE_MASK, in lt8619c_mode_config()
516 lt8619c->yuv_output_mode); in lt8619c_mode_config()
518 if (lt8619c->clk_ddrmode_en == 1) in lt8619c_mode_config()
519 regmap_write(lt8619c->reg_map, 0xa4, 0x14); in lt8619c_mode_config()
521 regmap_write(lt8619c->reg_map, 0xa4, 0x10); in lt8619c_mode_config()
524 regmap_write(lt8619c->reg_map, 0x6f, 0x04); in lt8619c_mode_config()
527 __func__, (lt8619c->yuv_output_mode == BT656_OUTPUT) ? "BT656" : in lt8619c_mode_config()
528 "BT1120", lt8619c->clk_ddrmode_en); in lt8619c_mode_config()
533 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_set_hpd() local
538 level = lt8619c->hpd_output_inverted ? !en : en; in lt8619c_set_hpd()
539 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_set_hpd()
541 regmap_update_bits(lt8619c->reg_map, 0x06, BIT(3), BIT(3)); in lt8619c_set_hpd()
543 regmap_update_bits(lt8619c->reg_map, 0x06, BIT(3), 0); in lt8619c_set_hpd()
550 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_write_edid() local
553 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_write_edid()
555 regmap_write(lt8619c->reg_map, 0x8e, 0x07); in lt8619c_write_edid()
557 regmap_write(lt8619c->reg_map, 0x8f, 0x00); in lt8619c_write_edid()
560 regmap_write(lt8619c->reg_map, 0x90, edid->edid[i]); in lt8619c_write_edid()
562 regmap_write(lt8619c->reg_map, 0x8e, 0x02); in lt8619c_write_edid()
567 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_read_edid() local
571 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_read_edid()
573 regmap_write(lt8619c->reg_map, 0x8e, 0x07); in lt8619c_read_edid()
575 regmap_write(lt8619c->reg_map, 0x8f, 0x00); in lt8619c_read_edid()
577 regmap_read(lt8619c->reg_map, 0x90, &val); in lt8619c_read_edid()
580 regmap_write(lt8619c->reg_map, 0x8e, 0x02); in lt8619c_read_edid()
585 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_s_ctrl_detect_tx_5v() local
587 return v4l2_ctrl_s_ctrl(lt8619c->detect_tx_5v_ctrl, in lt8619c_s_ctrl_detect_tx_5v()
610 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_set_bt_tx_timing() local
638 regmap_update_bits(lt8619c->reg_map, 0x60, IP_SEL_MASK, in lt8619c_set_bt_tx_timing()
653 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_set_bt_tx_timing()
654 regmap_write(lt8619c->reg_map, 0x61, (h_offset >> 8) & 0xff); in lt8619c_set_bt_tx_timing()
655 regmap_write(lt8619c->reg_map, 0x62, h_offset & 0xff); in lt8619c_set_bt_tx_timing()
656 regmap_write(lt8619c->reg_map, 0x63, (hact >> 8) & 0xff); in lt8619c_set_bt_tx_timing()
657 regmap_write(lt8619c->reg_map, 0x64, hact & 0xff); in lt8619c_set_bt_tx_timing()
658 regmap_write(lt8619c->reg_map, 0x65, (htotal >> 8) & 0xff); in lt8619c_set_bt_tx_timing()
659 regmap_write(lt8619c->reg_map, 0x66, htotal & 0xff); in lt8619c_set_bt_tx_timing()
660 regmap_write(lt8619c->reg_map, 0x67, v_offset & 0xff); in lt8619c_set_bt_tx_timing()
661 regmap_write(lt8619c->reg_map, 0x68, v_blank & 0xff); in lt8619c_set_bt_tx_timing()
662 regmap_write(lt8619c->reg_map, 0x69, (vact >> 8) & 0xff); in lt8619c_set_bt_tx_timing()
663 regmap_write(lt8619c->reg_map, 0x6a, vact & 0xff); in lt8619c_set_bt_tx_timing()
664 regmap_write(lt8619c->reg_map, 0x6b, (vtotal >> 8) & 0xff); in lt8619c_set_bt_tx_timing()
665 regmap_write(lt8619c->reg_map, 0x6c, vtotal & 0xff); in lt8619c_set_bt_tx_timing()
668 static void lt8619c_power_on(struct lt8619c *lt8619c) in lt8619c_power_on() argument
670 if (lt8619c->power_gpio) { in lt8619c_power_on()
671 gpiod_set_value(lt8619c->power_gpio, 1); in lt8619c_power_on()
675 if (lt8619c->reset_gpio) { in lt8619c_power_on()
676 gpiod_set_value(lt8619c->reset_gpio, 1); in lt8619c_power_on()
678 gpiod_set_value(lt8619c->reset_gpio, 0); in lt8619c_power_on()
685 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_wait_for_signal_stable() local
689 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_wait_for_signal_stable()
692 regmap_read(lt8619c->reg_map, 0x43, &val); in lt8619c_wait_for_signal_stable()
704 regmap_read(lt8619c->reg_map, 0x13, &val); in lt8619c_wait_for_signal_stable()
715 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_wait_for_signal_stable()
716 regmap_write(lt8619c->reg_map, 0x09, 0x7f); in lt8619c_wait_for_signal_stable()
718 regmap_write(lt8619c->reg_map, 0x09, 0xff); in lt8619c_wait_for_signal_stable()
722 regmap_write(lt8619c->reg_map, 0x0c, 0xfb); in lt8619c_wait_for_signal_stable()
724 regmap_write(lt8619c->reg_map, 0x0c, 0xff); in lt8619c_wait_for_signal_stable()
732 struct lt8619c *lt8619c = to_lt8619c(sd); in LVDSPLL_Lock_Det() local
734 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in LVDSPLL_Lock_Det()
735 regmap_write(lt8619c->reg_map, 0x0e, 0xfd); in LVDSPLL_Lock_Det()
737 regmap_write(lt8619c->reg_map, 0x0e, 0xff); in LVDSPLL_Lock_Det()
740 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in LVDSPLL_Lock_Det()
741 regmap_read(lt8619c->reg_map, 0x87, &val); in LVDSPLL_Lock_Det()
743 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in LVDSPLL_Lock_Det()
744 regmap_write(lt8619c->reg_map, 0x0e, 0xfd); in LVDSPLL_Lock_Det()
746 regmap_write(lt8619c->reg_map, 0x0e, 0xff); in LVDSPLL_Lock_Det()
748 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in LVDSPLL_Lock_Det()
749 regmap_read(lt8619c->reg_map, 0x87, &val); in LVDSPLL_Lock_Det()
765 struct lt8619c *lt8619c = to_lt8619c(sd); in LT8619C_phase_config() local
767 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in LT8619C_phase_config()
768 regmap_read(lt8619c->reg_map, 0x87, &val); in LT8619C_phase_config()
770 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in LT8619C_phase_config()
771 regmap_write(lt8619c->reg_map, 0x0e, 0xfd); in LT8619C_phase_config()
773 regmap_write(lt8619c->reg_map, 0x0e, 0xff); in LT8619C_phase_config()
775 regmap_write(lt8619c->reg_map, 0x0a, 0x3f); in LT8619C_phase_config()
777 regmap_write(lt8619c->reg_map, 0x0a, 0x7f); in LT8619C_phase_config()
780 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in LT8619C_phase_config()
781 regmap_read(lt8619c->reg_map, 0x87, &val); in LT8619C_phase_config()
785 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in LT8619C_phase_config()
786 regmap_write(lt8619c->reg_map, 0xa2, phase_num[i]); in LT8619C_phase_config()
788 regmap_read(lt8619c->reg_map, 0x91, &val); in LT8619C_phase_config()
804 regmap_write(lt8619c->reg_map, 0xa2, phase_num[i]); in LT8619C_phase_config()
807 regmap_write(lt8619c->reg_map, 0xa2, in LT8619C_phase_config()
810 regmap_write(lt8619c->reg_map, 0xa2, in LT8619C_phase_config()
815 regmap_write(lt8619c->reg_map, 0xa8, 0x0f); in LT8619C_phase_config()
820 struct lt8619c *lt8619c = to_lt8619c(sd); in sync_polarity_config() local
823 if (lt8619c->bt_tx_sync_pol == BT_TX_SYNC_POSITIVE) { in sync_polarity_config()
825 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in sync_polarity_config()
826 regmap_update_bits(lt8619c->reg_map, 0x60, SYNC_POL_MASK, in sync_polarity_config()
828 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in sync_polarity_config()
829 regmap_read(lt8619c->reg_map, 0x17, &val); in sync_polarity_config()
830 regmap_read(lt8619c->reg_map, 0x05, &adj); in sync_polarity_config()
833 regmap_update_bits(lt8619c->reg_map, 0x05, in sync_polarity_config()
839 regmap_update_bits(lt8619c->reg_map, 0x05, in sync_polarity_config()
844 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in sync_polarity_config()
845 regmap_update_bits(lt8619c->reg_map, 0x60, SYNC_POL_MASK, in sync_polarity_config()
847 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in sync_polarity_config()
848 regmap_read(lt8619c->reg_map, 0x17, &val); in sync_polarity_config()
849 regmap_read(lt8619c->reg_map, 0x05, &adj); in sync_polarity_config()
852 regmap_update_bits(lt8619c->reg_map, 0x05, in sync_polarity_config()
858 regmap_update_bits(lt8619c->reg_map, 0x05, in sync_polarity_config()
866 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_yuv_config() local
872 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_yuv_config()
873 regmap_update_bits(lt8619c->reg_map, 0x0d, BIT(1) | BIT(0), 0); in lt8619c_yuv_config()
875 regmap_update_bits(lt8619c->reg_map, 0x0d, BIT(1) | BIT(0), BIT(1) | BIT(0)); in lt8619c_yuv_config()
878 regmap_write(lt8619c->reg_map, BANK_REG, BANK_80); in lt8619c_yuv_config()
879 regmap_read(lt8619c->reg_map, 0x71, &val); in lt8619c_yuv_config()
883 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_yuv_config()
884 regmap_write(lt8619c->reg_map, 0x07, 0xf0); in lt8619c_yuv_config()
885 regmap_write(lt8619c->reg_map, 0x52, 0x02 + in lt8619c_yuv_config()
886 lt8619c->cp_convert_mode); in lt8619c_yuv_config()
890 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_yuv_config()
891 regmap_write(lt8619c->reg_map, 0x07, 0x80); in lt8619c_yuv_config()
892 regmap_write(lt8619c->reg_map, 0x52, 0x00); in lt8619c_yuv_config()
896 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_yuv_config()
897 regmap_write(lt8619c->reg_map, 0x07, 0xf0); in lt8619c_yuv_config()
898 regmap_write(lt8619c->reg_map, 0x52, 0x0a + in lt8619c_yuv_config()
899 lt8619c->cp_convert_mode); in lt8619c_yuv_config()
904 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_yuv_config()
905 regmap_write(lt8619c->reg_map, 0x6d, lt8619c->yc_swap); in lt8619c_yuv_config()
906 regmap_write(lt8619c->reg_map, 0x6e, lt8619c->yuv_colordepth); in lt8619c_yuv_config()
909 regmap_update_bits(lt8619c->reg_map, 0x0e, BIT(1), 0); in lt8619c_yuv_config()
911 regmap_update_bits(lt8619c->reg_map, 0x0e, BIT(1), BIT(1)); in lt8619c_yuv_config()
914 regmap_update_bits(lt8619c->reg_map, 0x0d, BIT(1) | BIT(0), 0); in lt8619c_yuv_config()
916 regmap_update_bits(lt8619c->reg_map, 0x0d, BIT(1) | BIT(0), BIT(1) | BIT(0)); in lt8619c_yuv_config()
923 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_initial_setup() local
930 lt8619c->enable_hdcp = false; in lt8619c_initial_setup()
931 lt8619c->cp_convert_mode = CP_CONVERT_MODE; in lt8619c_initial_setup()
932 lt8619c->yuv_colordepth = YUV_COLORDEPTH; in lt8619c_initial_setup()
933 lt8619c->bt_tx_sync_pol = BT_TX_SYNC_POL; in lt8619c_initial_setup()
935 if (lt8619c->yuv_output_mode == BT656_OUTPUT) { in lt8619c_initial_setup()
936 lt8619c->yc_swap = YC_SWAP_DIS; in lt8619c_initial_setup()
937 lt8619c->BT656_double_clk_en = true; in lt8619c_initial_setup()
939 lt8619c->yc_swap = YC_SWAP_EN; in lt8619c_initial_setup()
940 lt8619c->BT656_double_clk_en = false; in lt8619c_initial_setup()
945 lt8619c->edid_blocks_written = def_edid.blocks; in lt8619c_initial_setup()
946 lt8619c_set_hdmi_hdcp(sd, lt8619c->enable_hdcp); in lt8619c_initial_setup()
953 schedule_delayed_work(&lt8619c->delayed_work_monitor_resolution, in lt8619c_initial_setup()
964 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_format_change() local
972 if (!v4l2_match_dv_timings(&lt8619c->timings, &timings, 0, false)) { in lt8619c_format_change()
987 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_timing_changed() local
989 struct v4l2_bt_timings *bt = &lt8619c->timings.bt; in lt8619c_timing_changed()
1066 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_s_dv_timings() local
1075 if (v4l2_match_dv_timings(&lt8619c->timings, timings, 0, false)) { in lt8619c_s_dv_timings()
1085 lt8619c->timings = *timings; in lt8619c_s_dv_timings()
1094 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_g_dv_timings() local
1096 *timings = lt8619c->timings; in lt8619c_g_dv_timings()
1114 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_query_dv_timings() local
1116 mutex_lock(&lt8619c->confctl_mutex); in lt8619c_query_dv_timings()
1118 mutex_unlock(&lt8619c->confctl_mutex); in lt8619c_query_dv_timings()
1148 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_g_mbus_config() local
1151 if (lt8619c->clk_ddrmode_en) { in lt8619c_g_mbus_config()
1188 struct lt8619c *lt8619c = container_of(ctrl->handler, struct lt8619c, hdl); in lt8619c_get_ctrl() local
1189 struct v4l2_subdev *sd = &(lt8619c->sd); in lt8619c_get_ctrl()
1238 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_get_fmt() local
1239 struct v4l2_bt_timings *bt = &(lt8619c->timings.bt); in lt8619c_get_fmt()
1241 mutex_lock(&lt8619c->confctl_mutex); in lt8619c_get_fmt()
1242 format->format.code = lt8619c->mbus_fmt_code; in lt8619c_get_fmt()
1243 format->format.width = lt8619c->timings.bt.width; in lt8619c_get_fmt()
1244 format->format.height = lt8619c->timings.bt.height; in lt8619c_get_fmt()
1250 mutex_unlock(&lt8619c->confctl_mutex); in lt8619c_get_fmt()
1294 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_set_fmt() local
1316 lt8619c->mbus_fmt_code = format->format.code; in lt8619c_set_fmt()
1318 lt8619c->cur_mode = mode; in lt8619c_set_fmt()
1328 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_g_edid() local
1336 edid->blocks = lt8619c->edid_blocks_written; in lt8619c_g_edid()
1340 if (lt8619c->edid_blocks_written == 0) in lt8619c_g_edid()
1343 if (edid->start_block >= lt8619c->edid_blocks_written || in lt8619c_g_edid()
1347 if (edid->start_block + edid->blocks > lt8619c->edid_blocks_written) in lt8619c_g_edid()
1348 edid->blocks = lt8619c->edid_blocks_written - edid->start_block; in lt8619c_g_edid()
1358 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_s_edid() local
1379 lt8619c->edid_blocks_written = 0; in lt8619c_s_edid()
1384 lt8619c->edid_blocks_written = edid->blocks; in lt8619c_s_edid()
1395 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_g_frame_interval() local
1396 const struct lt8619c_mode *mode = lt8619c->cur_mode; in lt8619c_g_frame_interval()
1398 mutex_lock(&lt8619c->confctl_mutex); in lt8619c_g_frame_interval()
1400 mutex_unlock(&lt8619c->confctl_mutex); in lt8619c_g_frame_interval()
1407 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_querystd() local
1409 if (lt8619c->yuv_output_mode == BT656_OUTPUT) in lt8619c_querystd()
1417 static void lt8619c_get_module_inf(struct lt8619c *lt8619c, in lt8619c_get_module_inf() argument
1422 strscpy(inf->base.module, lt8619c->module_name, in lt8619c_get_module_inf()
1424 strscpy(inf->base.lens, lt8619c->len_name, sizeof(inf->base.lens)); in lt8619c_get_module_inf()
1430 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_open() local
1431 struct v4l2_bt_timings *bt = &(lt8619c->timings.bt); in lt8619c_open()
1436 mutex_lock(&lt8619c->confctl_mutex); in lt8619c_open()
1444 mutex_unlock(&lt8619c->confctl_mutex); in lt8619c_open()
1452 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_ioctl() local
1457 lt8619c_get_module_inf(lt8619c, (struct rkmodule_inf *)arg); in lt8619c_ioctl()
1551 struct lt8619c *lt8619c = dev_id; in plugin_detect_irq() local
1552 struct v4l2_subdev *sd = &lt8619c->sd; in plugin_detect_irq()
1555 schedule_delayed_work(&lt8619c->delayed_work_enable_hotplug, HZ / 10); in plugin_detect_irq()
1562 static int lt8619c_parse_of(struct lt8619c *lt8619c) in lt8619c_parse_of() argument
1564 struct device *dev = &lt8619c->i2c_client->dev; in lt8619c_parse_of()
1568 lt8619c->hpd_output_inverted = of_property_read_bool(node, in lt8619c_parse_of()
1571 &lt8619c->module_index); in lt8619c_parse_of()
1573 &lt8619c->module_facing); in lt8619c_parse_of()
1575 &lt8619c->module_name); in lt8619c_parse_of()
1577 &lt8619c->len_name); in lt8619c_parse_of()
1583 lt8619c->xvclk = devm_clk_get(dev, "xvclk"); in lt8619c_parse_of()
1584 if (IS_ERR(lt8619c->xvclk)) { in lt8619c_parse_of()
1589 err = clk_prepare_enable(lt8619c->xvclk); in lt8619c_parse_of()
1595 lt8619c->power_gpio = devm_gpiod_get_optional(dev, "power", GPIOD_OUT_LOW); in lt8619c_parse_of()
1596 if (IS_ERR(lt8619c->power_gpio)) { in lt8619c_parse_of()
1598 err = PTR_ERR(lt8619c->power_gpio); in lt8619c_parse_of()
1601 lt8619c->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); in lt8619c_parse_of()
1602 if (IS_ERR(lt8619c->reset_gpio)) { in lt8619c_parse_of()
1604 err = PTR_ERR(lt8619c->reset_gpio); in lt8619c_parse_of()
1608 lt8619c->plugin_det_gpio = devm_gpiod_get_optional(dev, "plugin-det", in lt8619c_parse_of()
1610 if (IS_ERR(lt8619c->plugin_det_gpio)) { in lt8619c_parse_of()
1612 err = PTR_ERR(lt8619c->plugin_det_gpio); in lt8619c_parse_of()
1617 &lt8619c->clk_ddrmode_en)) { in lt8619c_parse_of()
1618 lt8619c->clk_ddrmode_en = LT8619C_DEFAULT_DUAL_EDGE; in lt8619c_parse_of()
1623 RK_CAMERA_MODULE_DUAL_EDGE, lt8619c->clk_ddrmode_en); in lt8619c_parse_of()
1627 &lt8619c->yuv_output_mode)) { in lt8619c_parse_of()
1628 lt8619c->yuv_output_mode = LT8619C_DEFAULT_DVP_MODE; in lt8619c_parse_of()
1634 (lt8619c->yuv_output_mode == BT656_OUTPUT) ? "BT656" : "BT1120"); in lt8619c_parse_of()
1640 clk_disable_unprepare(lt8619c->xvclk); in lt8619c_parse_of()
1644 static int lt8619c_init_v4l2_ctrls(struct lt8619c *lt8619c) in lt8619c_init_v4l2_ctrls() argument
1649 sd = &lt8619c->sd; in lt8619c_init_v4l2_ctrls()
1650 ret = v4l2_ctrl_handler_init(&lt8619c->hdl, 2); in lt8619c_init_v4l2_ctrls()
1654 v4l2_ctrl_new_std(&lt8619c->hdl, NULL, V4L2_CID_PIXEL_RATE, in lt8619c_init_v4l2_ctrls()
1656 lt8619c->detect_tx_5v_ctrl = v4l2_ctrl_new_std(&lt8619c->hdl, in lt8619c_init_v4l2_ctrls()
1659 if (lt8619c->detect_tx_5v_ctrl) in lt8619c_init_v4l2_ctrls()
1660 lt8619c->detect_tx_5v_ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE; in lt8619c_init_v4l2_ctrls()
1662 if (lt8619c->hdl.error) { in lt8619c_init_v4l2_ctrls()
1663 ret = lt8619c->hdl.error; in lt8619c_init_v4l2_ctrls()
1667 sd->ctrl_handler = &lt8619c->hdl; in lt8619c_init_v4l2_ctrls()
1678 static int lt8619c_check_chip_id(struct lt8619c *lt8619c) in lt8619c_check_chip_id() argument
1680 struct device *dev = &lt8619c->i2c_client->dev; in lt8619c_check_chip_id()
1685 regmap_write(lt8619c->reg_map, BANK_REG, BANK_60); in lt8619c_check_chip_id()
1686 ret = regmap_read(lt8619c->reg_map, CHIPID_REG_H, &id_h); in lt8619c_check_chip_id()
1687 ret |= regmap_read(lt8619c->reg_map, CHIPID_REG_M, &id_m); in lt8619c_check_chip_id()
1688 ret |= regmap_read(lt8619c->reg_map, CHIPID_REG_L, &id_l); in lt8619c_check_chip_id()
1730 struct lt8619c *lt8619c; in lt8619c_probe() local
1740 lt8619c = devm_kzalloc(dev, sizeof(*lt8619c), GFP_KERNEL); in lt8619c_probe()
1741 if (!lt8619c) in lt8619c_probe()
1744 sd = &lt8619c->sd; in lt8619c_probe()
1745 lt8619c->i2c_client = client; in lt8619c_probe()
1746 lt8619c->cur_mode = &supported_modes[0]; in lt8619c_probe()
1747 lt8619c->mbus_fmt_code = MEDIA_BUS_FMT_UYVY8_2X8; in lt8619c_probe()
1749 err = lt8619c_parse_of(lt8619c); in lt8619c_probe()
1753 mutex_init(&lt8619c->confctl_mutex); in lt8619c_probe()
1754 err = lt8619c_init_v4l2_ctrls(lt8619c); in lt8619c_probe()
1766 lt8619c->pad.flags = MEDIA_PAD_FL_SOURCE; in lt8619c_probe()
1768 err = media_entity_pads_init(&sd->entity, 1, &lt8619c->pad); in lt8619c_probe()
1775 lt8619c->reg_map = devm_regmap_init_i2c(client, &lt8619c_hdmirx_regmap_cfg); in lt8619c_probe()
1776 lt8619c_power_on(lt8619c); in lt8619c_probe()
1777 err = lt8619c_check_chip_id(lt8619c); in lt8619c_probe()
1782 if (strcmp(lt8619c->module_facing, "back") == 0) in lt8619c_probe()
1788 lt8619c->module_index, facing, in lt8619c_probe()
1796 INIT_DELAYED_WORK(&lt8619c->delayed_work_enable_hotplug, in lt8619c_probe()
1798 INIT_DELAYED_WORK(&lt8619c->delayed_work_monitor_resolution, in lt8619c_probe()
1802 lt8619c->plugin_irq = gpiod_to_irq(lt8619c->plugin_det_gpio); in lt8619c_probe()
1803 if (lt8619c->plugin_irq < 0) { in lt8619c_probe()
1805 err = lt8619c->plugin_irq; in lt8619c_probe()
1809 err = devm_request_threaded_irq(dev, lt8619c->plugin_irq, NULL, in lt8619c_probe()
1811 IRQF_TRIGGER_RISING | IRQF_ONESHOT, "lt8619c", lt8619c); in lt8619c_probe()
1829 cancel_delayed_work(&lt8619c->delayed_work_enable_hotplug); in lt8619c_probe()
1830 cancel_delayed_work(&lt8619c->delayed_work_monitor_resolution); in lt8619c_probe()
1836 v4l2_ctrl_handler_free(&lt8619c->hdl); in lt8619c_probe()
1837 mutex_destroy(&lt8619c->confctl_mutex); in lt8619c_probe()
1838 clk_disable_unprepare(lt8619c->xvclk); in lt8619c_probe()
1845 struct lt8619c *lt8619c = to_lt8619c(sd); in lt8619c_remove() local
1847 cancel_delayed_work(&lt8619c->delayed_work_enable_hotplug); in lt8619c_remove()
1848 cancel_delayed_work(&lt8619c->delayed_work_monitor_resolution); in lt8619c_remove()
1854 v4l2_ctrl_handler_free(&lt8619c->hdl); in lt8619c_remove()
1855 mutex_destroy(&lt8619c->confctl_mutex); in lt8619c_remove()
1856 clk_disable_unprepare(lt8619c->xvclk); in lt8619c_remove()