Lines Matching +full:bridge +full:- +full:enable

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 2018-2019, Artem Mygaiev
10 #include <linux/media-bus-format.h>
30 #include <sound/hdmi-codec.h>
299 struct drm_bridge bridge; member
341 gpiod_set_value(ctx->gpio_reset, 1); in it66121_hw_reset()
343 gpiod_set_value(ctx->gpio_reset, 0); in it66121_hw_reset()
348 return regmap_write(ctx->regmap, IT66121_MASTER_SEL_REG, IT66121_MASTER_SEL_HOST); in it66121_preamble_ddc()
353 return regmap_write(ctx->regmap, IT66121_AFE_DRV_REG, 0); in it66121_fire_afe()
362 if (ctx->bus_width == 12) in it66121_configure_input()
365 ret = regmap_write(ctx->regmap, IT66121_INPUT_MODE_REG, mode); in it66121_configure_input()
369 return regmap_write(ctx->regmap, IT66121_INPUT_CSC_REG, IT66121_INPUT_CSC_NO_CONV); in it66121_configure_input()
373 * it66121_configure_afe() - Configure the analog front end
385 ret = regmap_write(ctx->regmap, IT66121_AFE_DRV_REG, in it66121_configure_afe()
390 if (mode->clock > IT66121_AFE_CLK_HIGH) { in it66121_configure_afe()
391 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_configure_afe()
398 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
405 if (ctx->info->id == ID_IT66121) { in it66121_configure_afe()
406 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
411 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_EC1_REG, in it66121_configure_afe()
417 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_configure_afe()
424 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
431 if (ctx->info->id == ID_IT66121) { in it66121_configure_afe()
432 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
438 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_EC1_REG, in it66121_configure_afe()
447 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it66121_configure_afe()
452 if (ctx->info->id == ID_IT6610) { in it66121_configure_afe()
453 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_configure_afe()
470 ret = regmap_read_poll_timeout(ctx->regmap, IT66121_DDC_STATUS_REG, val, in it66121_wait_ddc_ready()
477 return -EAGAIN; in it66121_wait_ddc_ready()
487 ret = regmap_read(ctx->regmap, IT66121_SW_RST_REG, &swreset); in it66121_abort_ddc_ops()
491 ret = regmap_read(ctx->regmap, IT66121_HDCP_REG, &cpdesire); in it66121_abort_ddc_ops()
495 ret = regmap_write(ctx->regmap, IT66121_HDCP_REG, in it66121_abort_ddc_ops()
500 ret = regmap_write(ctx->regmap, IT66121_SW_RST_REG, in it66121_abort_ddc_ops()
509 ret = regmap_write(ctx->regmap, IT66121_DDC_COMMAND_REG, in it66121_abort_ddc_ops()
532 ret = regmap_write(ctx->regmap, IT66121_DDC_COMMAND_REG, in it66121_get_edid_block()
541 ret = regmap_write(ctx->regmap, IT66121_DDC_OFFSET_REG, offset); in it66121_get_edid_block()
545 ret = regmap_write(ctx->regmap, IT66121_DDC_BYTE_REG, cnt); in it66121_get_edid_block()
549 ret = regmap_write(ctx->regmap, IT66121_DDC_SEGMENT_REG, block); in it66121_get_edid_block()
553 ret = regmap_write(ctx->regmap, IT66121_DDC_COMMAND_REG, in it66121_get_edid_block()
559 remain -= cnt; in it66121_get_edid_block()
567 ret = regmap_noinc_read(ctx->regmap, IT66121_DDC_RD_FIFO_REG, in it66121_get_edid_block()
582 if (regmap_read(ctx->regmap, IT66121_SYS_STATUS_REG, &val)) in it66121_is_hpd_detect()
588 static int it66121_bridge_attach(struct drm_bridge *bridge, in it66121_bridge_attach() argument
591 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_attach()
595 return -EINVAL; in it66121_bridge_attach()
597 ret = drm_bridge_attach(bridge->encoder, ctx->next_bridge, bridge, flags); in it66121_bridge_attach()
601 if (ctx->info->id == ID_IT66121) { in it66121_bridge_attach()
602 ret = regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, in it66121_bridge_attach()
608 ret = regmap_write_bits(ctx->regmap, IT66121_INT_REG, in it66121_bridge_attach()
613 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_DRV_REG, in it66121_bridge_attach()
618 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_bridge_attach()
623 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_bridge_attach()
628 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_DRV_REG, in it66121_bridge_attach()
633 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_bridge_attach()
638 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_bridge_attach()
643 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it66121_bridge_attach()
649 /* Per programming manual, sleep here for bridge to settle */ in it66121_bridge_attach()
663 ret = regmap_write_bits(ctx->regmap, IT66121_AV_MUTE_REG, IT66121_AV_MUTE_ON, val); in it66121_set_mute()
667 return regmap_write(ctx->regmap, IT66121_PKT_GEN_CTRL_REG, in it66121_set_mute()
673 static u32 *it66121_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge, in it66121_bridge_atomic_get_output_bus_fmts() argument
695 static u32 *it66121_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge, in it66121_bridge_atomic_get_input_bus_fmts() argument
702 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_atomic_get_input_bus_fmts()
712 if (ctx->bus_width == 12) in it66121_bridge_atomic_get_input_bus_fmts()
713 /* IT66121FN Datasheet specifies Little-Endian ordering */ in it66121_bridge_atomic_get_input_bus_fmts()
723 static void it66121_bridge_enable(struct drm_bridge *bridge, in it66121_bridge_enable() argument
726 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_enable()
727 struct drm_atomic_state *state = bridge_state->base.state; in it66121_bridge_enable()
729 ctx->connector = drm_atomic_get_new_connector_for_encoder(state, bridge->encoder); in it66121_bridge_enable()
734 static void it66121_bridge_disable(struct drm_bridge *bridge, in it66121_bridge_disable() argument
737 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_disable()
741 ctx->connector = NULL; in it66121_bridge_disable()
744 static int it66121_bridge_check(struct drm_bridge *bridge, in it66121_bridge_check() argument
749 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_check()
751 if (ctx->info->id == ID_IT6610) { in it66121_bridge_check()
753 bridge_state->input_bus_cfg.flags |= DRM_BUS_FLAG_DE_HIGH | in it66121_bridge_check()
755 bridge_state->input_bus_cfg.flags &= in it66121_bridge_check()
763 void it66121_bridge_mode_set(struct drm_bridge *bridge, in it66121_bridge_mode_set() argument
768 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_mode_set()
771 mutex_lock(&ctx->lock); in it66121_bridge_mode_set()
773 ret = drm_hdmi_avi_infoframe_from_display_mode(&ctx->hdmi_avi_infoframe, ctx->connector, in it66121_bridge_mode_set()
780 ret = hdmi_avi_infoframe_pack(&ctx->hdmi_avi_infoframe, buf, sizeof(buf)); in it66121_bridge_mode_set()
787 ret = regmap_bulk_write(ctx->regmap, IT66121_AVIINFO_DB1_REG, in it66121_bridge_mode_set()
793 if (regmap_write(ctx->regmap, IT66121_AVIINFO_CSUM_REG, buf[3])) in it66121_bridge_mode_set()
796 /* Enable AVI infoframe */ in it66121_bridge_mode_set()
797 if (regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, in it66121_bridge_mode_set()
802 if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HDMI)) in it66121_bridge_mode_set()
805 if (ctx->info->id == ID_IT66121 && in it66121_bridge_mode_set()
806 regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, in it66121_bridge_mode_set()
818 if (ctx->info->id == ID_IT66121 && in it66121_bridge_mode_set()
819 regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, in it66121_bridge_mode_set()
825 mutex_unlock(&ctx->lock); in it66121_bridge_mode_set()
828 static enum drm_mode_status it66121_bridge_mode_valid(struct drm_bridge *bridge, in it66121_bridge_mode_valid() argument
832 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_mode_valid()
835 max_clock = (ctx->bus_width == 12) ? 74250 : 148500; in it66121_bridge_mode_valid()
837 if (mode->clock > max_clock) in it66121_bridge_mode_valid()
840 if (mode->clock < 25000) in it66121_bridge_mode_valid()
846 static enum drm_connector_status it66121_bridge_detect(struct drm_bridge *bridge) in it66121_bridge_detect() argument
848 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_detect()
854 static void it66121_bridge_hpd_enable(struct drm_bridge *bridge) in it66121_bridge_hpd_enable() argument
856 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_hpd_enable()
859 ret = regmap_write_bits(ctx->regmap, IT66121_INT_MASK1_REG, IT66121_INT_MASK1_HPD, 0); in it66121_bridge_hpd_enable()
861 dev_err(ctx->dev, "failed to enable HPD IRQ\n"); in it66121_bridge_hpd_enable()
864 static void it66121_bridge_hpd_disable(struct drm_bridge *bridge) in it66121_bridge_hpd_disable() argument
866 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_hpd_disable()
869 ret = regmap_write_bits(ctx->regmap, IT66121_INT_MASK1_REG, in it66121_bridge_hpd_disable()
872 dev_err(ctx->dev, "failed to disable HPD IRQ\n"); in it66121_bridge_hpd_disable()
875 static const struct drm_edid *it66121_bridge_edid_read(struct drm_bridge *bridge, in it66121_bridge_edid_read() argument
878 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_edid_read()
882 mutex_lock(&ctx->lock); in it66121_bridge_edid_read()
889 ret = regmap_write(ctx->regmap, IT66121_DDC_HEADER_REG, in it66121_bridge_edid_read()
899 mutex_unlock(&ctx->lock); in it66121_bridge_edid_read()
927 struct device *dev = ctx->dev; in it66121_irq_threaded_handler()
931 mutex_lock(&ctx->lock); in it66121_irq_threaded_handler()
933 ret = regmap_read(ctx->regmap, IT66121_SYS_STATUS_REG, &val); in it66121_irq_threaded_handler()
940 ret = regmap_read(ctx->regmap, IT66121_INT_STATUS1_REG, &val); in it66121_irq_threaded_handler()
944 regmap_write_bits(ctx->regmap, IT66121_INT_CLR1_REG, in it66121_irq_threaded_handler()
953 regmap_write_bits(ctx->regmap, IT66121_SYS_STATUS_REG, in it66121_irq_threaded_handler()
958 mutex_unlock(&ctx->lock); in it66121_irq_threaded_handler()
961 drm_bridge_hpd_notify(&ctx->bridge, status); in it66121_irq_threaded_handler()
970 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_MODE_REG, iec60958_chstat[0] & 0x7C); in it661221_set_chstat()
974 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_CAT_REG, iec60958_chstat[1]); in it661221_set_chstat()
978 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_SRCNUM_REG, iec60958_chstat[2] & 0x0F); in it661221_set_chstat()
982 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_CHTNUM_REG, in it661221_set_chstat()
987 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_CA_FS_REG, iec60958_chstat[3]); in it661221_set_chstat()
991 return regmap_write(ctx->regmap, IT66121_AUD_CHST_OFS_WL_REG, iec60958_chstat[4]); in it661221_set_chstat()
1037 ctx->audio.ch_enable = audio_enable; in it661221_set_lpcm_audio()
1039 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL0_REG, audio_enable & 0xF0); in it661221_set_lpcm_audio()
1043 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL1_REG, audio_format); in it661221_set_lpcm_audio()
1047 ret = regmap_write(ctx->regmap, IT66121_AUD_FIFOMAP_REG, 0xE4); in it661221_set_lpcm_audio()
1051 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL3_REG, 0x00); in it661221_set_lpcm_audio()
1055 ret = regmap_write(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, 0x00); in it661221_set_lpcm_audio()
1059 return regmap_write(ctx->regmap, IT66121_AUD_HDAUDIO_REG, 0x00); in it661221_set_lpcm_audio()
1097 ret = regmap_write(ctx->regmap, IT66121_AUD_PKT_N0_REG, (u8)((n) & 0xFF)); in it661221_set_ncts()
1101 ret = regmap_write(ctx->regmap, IT66121_AUD_PKT_N1_REG, (u8)((n >> 8) & 0xFF)); in it661221_set_ncts()
1105 ret = regmap_write(ctx->regmap, IT66121_AUD_PKT_N2_REG, (u8)((n >> 16) & 0xF)); in it661221_set_ncts()
1109 if (ctx->audio.auto_cts) { in it661221_set_ncts()
1118 while (loop_cnt--) { in it661221_set_ncts()
1120 regmap_read(ctx->regmap, IT66121_AUD_PKT_CTS_CNT2_REG, &val); in it661221_set_ncts()
1122 regmap_read(ctx->regmap, IT66121_AUD_PKT_CTS_CNT1_REG, &val); in it661221_set_ncts()
1124 regmap_read(ctx->regmap, IT66121_AUD_PKT_CTS_CNT0_REG, &val); in it661221_set_ncts()
1130 diff = last_cts - cts; in it661221_set_ncts()
1132 diff = cts - last_cts; in it661221_set_ncts()
1150 regmap_write(ctx->regmap, IT66121_AUD_PKT_CTS0_REG, (u8)((last_cts) & 0xFF)); in it661221_set_ncts()
1151 regmap_write(ctx->regmap, IT66121_AUD_PKT_CTS1_REG, (u8)((last_cts >> 8) & 0xFF)); in it661221_set_ncts()
1152 regmap_write(ctx->regmap, IT66121_AUD_PKT_CTS2_REG, (u8)((last_cts >> 16) & 0x0F)); in it661221_set_ncts()
1155 ret = regmap_write(ctx->regmap, 0xF8, 0xC3); in it661221_set_ncts()
1159 ret = regmap_write(ctx->regmap, 0xF8, 0xA5); in it661221_set_ncts()
1163 if (ctx->audio.auto_cts) { in it661221_set_ncts()
1164 ret = regmap_write_bits(ctx->regmap, IT66121_PKT_CTS_CTRL_REG, in it661221_set_ncts()
1168 ret = regmap_write_bits(ctx->regmap, IT66121_PKT_CTS_CTRL_REG, in it661221_set_ncts()
1176 return regmap_write(ctx->regmap, 0xF8, 0xFF); in it661221_set_ncts()
1179 static int it661221_audio_output_enable(struct it66121_ctx *ctx, bool enable) in it661221_audio_output_enable() argument
1183 if (enable) { in it661221_audio_output_enable()
1184 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it661221_audio_output_enable()
1190 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_CTRL0_REG, in it661221_audio_output_enable()
1193 ctx->audio.ch_enable); in it661221_audio_output_enable()
1195 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_CTRL0_REG, in it661221_audio_output_enable()
1198 ctx->audio.ch_enable & 0xF0); in it661221_audio_output_enable()
1202 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it661221_audio_output_enable()
1210 static int it661221_audio_ch_enable(struct it66121_ctx *ctx, bool enable) in it661221_audio_ch_enable() argument
1214 if (enable) { in it661221_audio_ch_enable()
1215 ret = regmap_write(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, 0); in it661221_audio_ch_enable()
1219 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL0_REG, ctx->audio.ch_enable); in it661221_audio_ch_enable()
1221 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL0_REG, ctx->audio.ch_enable & 0xF0); in it661221_audio_ch_enable()
1236 unsigned int channels = params->channels; in it66121_audio_hw_params()
1237 unsigned int sample_rate = params->sample_rate; in it66121_audio_hw_params()
1238 unsigned int sample_width = params->sample_width; in it66121_audio_hw_params()
1240 mutex_lock(&ctx->lock); in it66121_audio_hw_params()
1242 daifmt->fmt, sample_rate, sample_width, channels); in it66121_audio_hw_params()
1244 switch (daifmt->fmt) { in it66121_audio_hw_params()
1249 dev_err(dev, "Invalid or unsupported DAI format %d\n", daifmt->fmt); in it66121_audio_hw_params()
1250 ret = -EINVAL; in it66121_audio_hw_params()
1255 ret = regmap_write(ctx->regmap, IT66121_CLK_CTRL0_REG, in it66121_audio_hw_params()
1262 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_CTRL0_REG, in it66121_audio_hw_params()
1297 ctx->audio.fs = fs; in it66121_audio_hw_params()
1304 // Set audio format register (except audio channel enable) in it66121_audio_hw_params()
1361 // Enable audio channel enable while input clock stable (if SPDIF). in it66121_audio_hw_params()
1364 dev_err(dev, "Failed to enable audio channel: %d\n", ret); in it66121_audio_hw_params()
1368 ret = regmap_write_bits(ctx->regmap, IT66121_INT_MASK1_REG, in it66121_audio_hw_params()
1376 mutex_unlock(&ctx->lock); in it66121_audio_hw_params()
1388 mutex_lock(&ctx->lock); in it66121_audio_startup()
1391 dev_err(dev, "Failed to enable audio output: %d\n", ret); in it66121_audio_startup()
1393 mutex_unlock(&ctx->lock); in it66121_audio_startup()
1405 mutex_lock(&ctx->lock); in it66121_audio_shutdown()
1410 mutex_unlock(&ctx->lock); in it66121_audio_shutdown()
1414 bool enable, int direction) in it66121_audio_mute() argument
1419 dev_dbg(dev, "%s: enable=%s, direction=%d\n", in it66121_audio_mute()
1420 __func__, enable ? "true" : "false", direction); in it66121_audio_mute()
1422 mutex_lock(&ctx->lock); in it66121_audio_mute()
1424 if (enable) { in it66121_audio_mute()
1425 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, in it66121_audio_mute()
1431 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, in it66121_audio_mute()
1437 mutex_unlock(&ctx->lock); in it66121_audio_mute()
1447 mutex_lock(&ctx->lock); in it66121_audio_get_eld()
1448 if (!ctx->connector) { in it66121_audio_get_eld()
1453 mutex_lock(&ctx->connector->eld_mutex); in it66121_audio_get_eld()
1454 memcpy(buf, ctx->connector->eld, in it66121_audio_get_eld()
1455 min(sizeof(ctx->connector->eld), len)); in it66121_audio_get_eld()
1456 mutex_unlock(&ctx->connector->eld_mutex); in it66121_audio_get_eld()
1458 mutex_unlock(&ctx->lock); in it66121_audio_get_eld()
1483 if (!of_property_present(dev->of_node, "#sound-dai-cells")) { in it66121_audio_codec_init()
1484 dev_info(dev, "No \"#sound-dai-cells\", no audio\n"); in it66121_audio_codec_init()
1488 ctx->audio.pdev = platform_device_register_data(dev, in it66121_audio_codec_init()
1494 if (IS_ERR(ctx->audio.pdev)) { in it66121_audio_codec_init()
1496 PTR_ERR_OR_ZERO(ctx->audio.pdev)); in it66121_audio_codec_init()
1499 return PTR_ERR_OR_ZERO(ctx->audio.pdev); in it66121_audio_codec_init()
1512 struct device *dev = &client->dev; in it66121_probe()
1514 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in it66121_probe()
1516 return -ENXIO; in it66121_probe()
1521 return -ENOMEM; in it66121_probe()
1523 ep = of_graph_get_endpoint_by_regs(dev->of_node, 0, 0); in it66121_probe()
1525 return -EINVAL; in it66121_probe()
1527 ctx->dev = dev; in it66121_probe()
1528 ctx->client = client; in it66121_probe()
1529 ctx->info = i2c_get_match_data(client); in it66121_probe()
1531 of_property_read_u32(ep, "bus-width", &ctx->bus_width); in it66121_probe()
1534 if (ctx->bus_width != 12 && ctx->bus_width != 24) in it66121_probe()
1535 return -EINVAL; in it66121_probe()
1537 ep = of_graph_get_remote_node(dev->of_node, 1, -1); in it66121_probe()
1539 dev_err(ctx->dev, "The endpoint is unconnected\n"); in it66121_probe()
1540 return -EINVAL; in it66121_probe()
1543 ctx->next_bridge = of_drm_find_bridge(ep); in it66121_probe()
1545 if (!ctx->next_bridge) { in it66121_probe()
1546 dev_dbg(ctx->dev, "Next bridge not found, deferring probe\n"); in it66121_probe()
1547 return -EPROBE_DEFER; in it66121_probe()
1551 mutex_init(&ctx->lock); in it66121_probe()
1556 dev_err(dev, "Failed to enable power supplies\n"); in it66121_probe()
1562 ctx->regmap = devm_regmap_init_i2c(client, &it66121_regmap_config); in it66121_probe()
1563 if (IS_ERR(ctx->regmap)) in it66121_probe()
1564 return PTR_ERR(ctx->regmap); in it66121_probe()
1566 regmap_read(ctx->regmap, IT66121_VENDOR_ID0_REG, &vendor_ids[0]); in it66121_probe()
1567 regmap_read(ctx->regmap, IT66121_VENDOR_ID1_REG, &vendor_ids[1]); in it66121_probe()
1568 regmap_read(ctx->regmap, IT66121_DEVICE_ID0_REG, &device_ids[0]); in it66121_probe()
1569 regmap_read(ctx->regmap, IT66121_DEVICE_ID1_REG, &device_ids[1]); in it66121_probe()
1575 if ((vendor_ids[1] << 8 | vendor_ids[0]) != ctx->info->vid || in it66121_probe()
1576 (device_ids[1] << 8 | device_ids[0]) != ctx->info->pid) { in it66121_probe()
1577 return -ENODEV; in it66121_probe()
1580 ctx->bridge.funcs = &it66121_bridge_funcs; in it66121_probe()
1581 ctx->bridge.of_node = dev->of_node; in it66121_probe()
1582 ctx->bridge.type = DRM_MODE_CONNECTOR_HDMIA; in it66121_probe()
1583 ctx->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; in it66121_probe()
1584 if (client->irq > 0) { in it66121_probe()
1585 ctx->bridge.ops |= DRM_BRIDGE_OP_HPD; in it66121_probe()
1587 ret = devm_request_threaded_irq(dev, client->irq, NULL, in it66121_probe()
1592 dev_err(dev, "Failed to request irq %d:%d\n", client->irq, ret); in it66121_probe()
1599 drm_bridge_add(&ctx->bridge); in it66121_probe()
1601 dev_info(ctx->dev, "IT66121 revision %d probed\n", revision_id); in it66121_probe()
1610 drm_bridge_remove(&ctx->bridge); in it66121_remove()
1611 mutex_destroy(&ctx->lock); in it66121_remove()