Lines Matching +full:audio +full:- +full:bridge
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>
300 struct drm_bridge bridge; member
315 } audio; member
342 gpiod_set_value(ctx->gpio_reset, 1); in it66121_hw_reset()
344 gpiod_set_value(ctx->gpio_reset, 0); in it66121_hw_reset()
349 return regmap_write(ctx->regmap, IT66121_MASTER_SEL_REG, IT66121_MASTER_SEL_HOST); in it66121_preamble_ddc()
354 return regmap_write(ctx->regmap, IT66121_AFE_DRV_REG, 0); in it66121_fire_afe()
363 if (ctx->bus_width == 12) in it66121_configure_input()
366 ret = regmap_write(ctx->regmap, IT66121_INPUT_MODE_REG, mode); in it66121_configure_input()
370 return regmap_write(ctx->regmap, IT66121_INPUT_CSC_REG, IT66121_INPUT_CSC_NO_CONV); in it66121_configure_input()
374 * it66121_configure_afe() - Configure the analog front end
386 ret = regmap_write(ctx->regmap, IT66121_AFE_DRV_REG, in it66121_configure_afe()
391 if (mode->clock > IT66121_AFE_CLK_HIGH) { in it66121_configure_afe()
392 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_configure_afe()
399 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
406 if (ctx->id == ID_IT66121 || ctx->id == ID_IT66122) { in it66121_configure_afe()
407 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
412 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_EC1_REG, in it66121_configure_afe()
418 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_configure_afe()
425 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
432 if (ctx->id == ID_IT66121 || ctx->id == ID_IT66122) { in it66121_configure_afe()
433 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_configure_afe()
439 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_EC1_REG, in it66121_configure_afe()
448 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it66121_configure_afe()
453 if (ctx->id == ID_IT6610) { in it66121_configure_afe()
454 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_configure_afe()
471 ret = regmap_read_poll_timeout(ctx->regmap, IT66121_DDC_STATUS_REG, val, in it66121_wait_ddc_ready()
478 return -EAGAIN; in it66121_wait_ddc_ready()
488 ret = regmap_read(ctx->regmap, IT66121_SW_RST_REG, &swreset); in it66121_abort_ddc_ops()
492 ret = regmap_read(ctx->regmap, IT66121_HDCP_REG, &cpdesire); in it66121_abort_ddc_ops()
496 ret = regmap_write(ctx->regmap, IT66121_HDCP_REG, in it66121_abort_ddc_ops()
501 ret = regmap_write(ctx->regmap, IT66121_SW_RST_REG, in it66121_abort_ddc_ops()
510 ret = regmap_write(ctx->regmap, IT66121_DDC_COMMAND_REG, in it66121_abort_ddc_ops()
533 ret = regmap_write(ctx->regmap, IT66121_DDC_COMMAND_REG, in it66121_get_edid_block()
542 ret = regmap_write(ctx->regmap, IT66121_DDC_OFFSET_REG, offset); in it66121_get_edid_block()
546 ret = regmap_write(ctx->regmap, IT66121_DDC_BYTE_REG, cnt); in it66121_get_edid_block()
550 ret = regmap_write(ctx->regmap, IT66121_DDC_SEGMENT_REG, block); in it66121_get_edid_block()
554 ret = regmap_write(ctx->regmap, IT66121_DDC_COMMAND_REG, in it66121_get_edid_block()
560 remain -= cnt; in it66121_get_edid_block()
568 ret = regmap_noinc_read(ctx->regmap, IT66121_DDC_RD_FIFO_REG, in it66121_get_edid_block()
583 if (regmap_read(ctx->regmap, IT66121_SYS_STATUS_REG, &val)) in it66121_is_hpd_detect()
589 static int it66121_bridge_attach(struct drm_bridge *bridge, in it66121_bridge_attach() argument
593 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_attach()
597 return -EINVAL; in it66121_bridge_attach()
599 ret = drm_bridge_attach(encoder, ctx->next_bridge, bridge, flags); in it66121_bridge_attach()
603 if (ctx->id == ID_IT66121 || ctx->id == ID_IT66122) { in it66121_bridge_attach()
604 ret = regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, in it66121_bridge_attach()
610 ret = regmap_write_bits(ctx->regmap, IT66121_INT_REG, in it66121_bridge_attach()
615 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_DRV_REG, in it66121_bridge_attach()
620 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_bridge_attach()
625 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_bridge_attach()
630 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_DRV_REG, in it66121_bridge_attach()
635 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_XP_REG, in it66121_bridge_attach()
640 ret = regmap_write_bits(ctx->regmap, IT66121_AFE_IP_REG, in it66121_bridge_attach()
645 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it66121_bridge_attach()
651 /* Per programming manual, sleep here for bridge to settle */ in it66121_bridge_attach()
665 ret = regmap_write_bits(ctx->regmap, IT66121_AV_MUTE_REG, IT66121_AV_MUTE_ON, val); in it66121_set_mute()
669 return regmap_write(ctx->regmap, IT66121_PKT_GEN_CTRL_REG, in it66121_set_mute()
675 static u32 *it66121_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge, in it66121_bridge_atomic_get_output_bus_fmts() argument
697 static u32 *it66121_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge, in it66121_bridge_atomic_get_input_bus_fmts() argument
704 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_atomic_get_input_bus_fmts()
714 if (ctx->bus_width == 12) in it66121_bridge_atomic_get_input_bus_fmts()
715 /* IT66121FN Datasheet specifies Little-Endian ordering */ in it66121_bridge_atomic_get_input_bus_fmts()
725 static void it66121_bridge_enable(struct drm_bridge *bridge, in it66121_bridge_enable() argument
728 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_enable()
730 ctx->connector = drm_atomic_get_new_connector_for_encoder(state, bridge->encoder); in it66121_bridge_enable()
735 static void it66121_bridge_disable(struct drm_bridge *bridge, in it66121_bridge_disable() argument
738 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_disable()
742 ctx->connector = NULL; in it66121_bridge_disable()
745 static int it66121_bridge_check(struct drm_bridge *bridge, in it66121_bridge_check() argument
750 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_check()
752 if (ctx->id == ID_IT6610) { in it66121_bridge_check()
754 bridge_state->input_bus_cfg.flags |= DRM_BUS_FLAG_DE_HIGH | in it66121_bridge_check()
756 bridge_state->input_bus_cfg.flags &= in it66121_bridge_check()
764 void it66121_bridge_mode_set(struct drm_bridge *bridge, in it66121_bridge_mode_set() argument
769 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_mode_set()
772 mutex_lock(&ctx->lock); in it66121_bridge_mode_set()
774 ret = drm_hdmi_avi_infoframe_from_display_mode(&ctx->hdmi_avi_infoframe, ctx->connector, in it66121_bridge_mode_set()
781 ret = hdmi_avi_infoframe_pack(&ctx->hdmi_avi_infoframe, buf, sizeof(buf)); in it66121_bridge_mode_set()
788 ret = regmap_bulk_write(ctx->regmap, IT66121_AVIINFO_DB1_REG, in it66121_bridge_mode_set()
794 if (regmap_write(ctx->regmap, IT66121_AVIINFO_CSUM_REG, buf[3])) in it66121_bridge_mode_set()
798 if (regmap_write(ctx->regmap, IT66121_AVI_INFO_PKT_REG, in it66121_bridge_mode_set()
803 if (regmap_write(ctx->regmap, IT66121_HDMI_MODE_REG, IT66121_HDMI_MODE_HDMI)) in it66121_bridge_mode_set()
806 if ((ctx->id == ID_IT66121 || ctx->id == ID_IT66122) && in it66121_bridge_mode_set()
807 regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, in it66121_bridge_mode_set()
819 if ((ctx->id == ID_IT66121 || ctx->id == ID_IT66122) && in it66121_bridge_mode_set()
820 regmap_write_bits(ctx->regmap, IT66121_CLK_BANK_REG, in it66121_bridge_mode_set()
826 mutex_unlock(&ctx->lock); in it66121_bridge_mode_set()
829 static enum drm_mode_status it66121_bridge_mode_valid(struct drm_bridge *bridge, in it66121_bridge_mode_valid() argument
833 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_mode_valid()
836 max_clock = (ctx->bus_width == 12) ? 74250 : 148500; in it66121_bridge_mode_valid()
838 if (mode->clock > max_clock) in it66121_bridge_mode_valid()
841 if (mode->clock < 25000) in it66121_bridge_mode_valid()
848 it66121_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector) in it66121_bridge_detect() argument
850 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_detect()
856 static void it66121_bridge_hpd_enable(struct drm_bridge *bridge) in it66121_bridge_hpd_enable() argument
858 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_hpd_enable()
861 ret = regmap_write_bits(ctx->regmap, IT66121_INT_MASK1_REG, IT66121_INT_MASK1_HPD, 0); in it66121_bridge_hpd_enable()
863 dev_err(ctx->dev, "failed to enable HPD IRQ\n"); in it66121_bridge_hpd_enable()
866 static void it66121_bridge_hpd_disable(struct drm_bridge *bridge) in it66121_bridge_hpd_disable() argument
868 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_hpd_disable()
871 ret = regmap_write_bits(ctx->regmap, IT66121_INT_MASK1_REG, in it66121_bridge_hpd_disable()
874 dev_err(ctx->dev, "failed to disable HPD IRQ\n"); in it66121_bridge_hpd_disable()
877 static const struct drm_edid *it66121_bridge_edid_read(struct drm_bridge *bridge, in it66121_bridge_edid_read() argument
880 struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge); in it66121_bridge_edid_read()
884 mutex_lock(&ctx->lock); in it66121_bridge_edid_read()
891 ret = regmap_write(ctx->regmap, IT66121_DDC_HEADER_REG, in it66121_bridge_edid_read()
901 mutex_unlock(&ctx->lock); in it66121_bridge_edid_read()
929 struct device *dev = ctx->dev; in it66121_irq_threaded_handler()
933 mutex_lock(&ctx->lock); in it66121_irq_threaded_handler()
935 ret = regmap_read(ctx->regmap, IT66121_SYS_STATUS_REG, &val); in it66121_irq_threaded_handler()
942 ret = regmap_read(ctx->regmap, IT66121_INT_STATUS1_REG, &val); in it66121_irq_threaded_handler()
946 regmap_write_bits(ctx->regmap, IT66121_INT_CLR1_REG, in it66121_irq_threaded_handler()
955 regmap_write_bits(ctx->regmap, IT66121_SYS_STATUS_REG, in it66121_irq_threaded_handler()
960 mutex_unlock(&ctx->lock); in it66121_irq_threaded_handler()
963 drm_bridge_hpd_notify(&ctx->bridge, status); in it66121_irq_threaded_handler()
972 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_MODE_REG, iec60958_chstat[0] & 0x7C); in it661221_set_chstat()
976 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_CAT_REG, iec60958_chstat[1]); in it661221_set_chstat()
980 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_SRCNUM_REG, iec60958_chstat[2] & 0x0F); in it661221_set_chstat()
984 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_CHTNUM_REG, in it661221_set_chstat()
989 ret = regmap_write(ctx->regmap, IT66121_AUD_CHST_CA_FS_REG, iec60958_chstat[3]); in it661221_set_chstat()
993 return regmap_write(ctx->regmap, IT66121_AUD_CHST_OFS_WL_REG, iec60958_chstat[4]); in it661221_set_chstat()
1039 ctx->audio.ch_enable = audio_enable; in it661221_set_lpcm_audio()
1041 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL0_REG, audio_enable & 0xF0); in it661221_set_lpcm_audio()
1045 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL1_REG, audio_format); in it661221_set_lpcm_audio()
1049 ret = regmap_write(ctx->regmap, IT66121_AUD_FIFOMAP_REG, 0xE4); in it661221_set_lpcm_audio()
1053 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL3_REG, 0x00); in it661221_set_lpcm_audio()
1057 ret = regmap_write(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, 0x00); in it661221_set_lpcm_audio()
1061 return regmap_write(ctx->regmap, IT66121_AUD_HDAUDIO_REG, 0x00); in it661221_set_lpcm_audio()
1099 ret = regmap_write(ctx->regmap, IT66121_AUD_PKT_N0_REG, (u8)((n) & 0xFF)); in it661221_set_ncts()
1103 ret = regmap_write(ctx->regmap, IT66121_AUD_PKT_N1_REG, (u8)((n >> 8) & 0xFF)); in it661221_set_ncts()
1107 ret = regmap_write(ctx->regmap, IT66121_AUD_PKT_N2_REG, (u8)((n >> 16) & 0xF)); in it661221_set_ncts()
1111 if (ctx->audio.auto_cts) { in it661221_set_ncts()
1120 while (loop_cnt--) { in it661221_set_ncts()
1122 regmap_read(ctx->regmap, IT66121_AUD_PKT_CTS_CNT2_REG, &val); in it661221_set_ncts()
1124 regmap_read(ctx->regmap, IT66121_AUD_PKT_CTS_CNT1_REG, &val); in it661221_set_ncts()
1126 regmap_read(ctx->regmap, IT66121_AUD_PKT_CTS_CNT0_REG, &val); in it661221_set_ncts()
1132 diff = last_cts - cts; in it661221_set_ncts()
1134 diff = cts - last_cts; in it661221_set_ncts()
1152 regmap_write(ctx->regmap, IT66121_AUD_PKT_CTS0_REG, (u8)((last_cts) & 0xFF)); in it661221_set_ncts()
1153 regmap_write(ctx->regmap, IT66121_AUD_PKT_CTS1_REG, (u8)((last_cts >> 8) & 0xFF)); in it661221_set_ncts()
1154 regmap_write(ctx->regmap, IT66121_AUD_PKT_CTS2_REG, (u8)((last_cts >> 16) & 0x0F)); in it661221_set_ncts()
1157 ret = regmap_write(ctx->regmap, 0xF8, 0xC3); in it661221_set_ncts()
1161 ret = regmap_write(ctx->regmap, 0xF8, 0xA5); in it661221_set_ncts()
1165 if (ctx->audio.auto_cts) { in it661221_set_ncts()
1166 ret = regmap_write_bits(ctx->regmap, IT66121_PKT_CTS_CTRL_REG, in it661221_set_ncts()
1170 ret = regmap_write_bits(ctx->regmap, IT66121_PKT_CTS_CTRL_REG, in it661221_set_ncts()
1178 return regmap_write(ctx->regmap, 0xF8, 0xFF); in it661221_set_ncts()
1186 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it661221_audio_output_enable()
1192 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_CTRL0_REG, in it661221_audio_output_enable()
1195 ctx->audio.ch_enable); in it661221_audio_output_enable()
1197 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_CTRL0_REG, in it661221_audio_output_enable()
1200 ctx->audio.ch_enable & 0xF0); in it661221_audio_output_enable()
1204 ret = regmap_write_bits(ctx->regmap, IT66121_SW_RST_REG, in it661221_audio_output_enable()
1217 ret = regmap_write(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, 0); in it661221_audio_ch_enable()
1221 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL0_REG, ctx->audio.ch_enable); in it661221_audio_ch_enable()
1223 ret = regmap_write(ctx->regmap, IT66121_AUD_CTRL0_REG, ctx->audio.ch_enable & 0xF0); in it661221_audio_ch_enable()
1238 unsigned int channels = params->channels; in it66121_audio_hw_params()
1239 unsigned int sample_rate = params->sample_rate; in it66121_audio_hw_params()
1240 unsigned int sample_width = params->sample_width; in it66121_audio_hw_params()
1242 mutex_lock(&ctx->lock); in it66121_audio_hw_params()
1244 daifmt->fmt, sample_rate, sample_width, channels); in it66121_audio_hw_params()
1246 switch (daifmt->fmt) { in it66121_audio_hw_params()
1251 dev_err(dev, "Invalid or unsupported DAI format %d\n", daifmt->fmt); in it66121_audio_hw_params()
1252 ret = -EINVAL; in it66121_audio_hw_params()
1256 // Set audio clock recovery (N/CTS) in it66121_audio_hw_params()
1257 ret = regmap_write(ctx->regmap, IT66121_CLK_CTRL0_REG, in it66121_audio_hw_params()
1264 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_CTRL0_REG, in it66121_audio_hw_params()
1299 ctx->audio.fs = fs; in it66121_audio_hw_params()
1306 // Set audio format register (except audio channel enable) in it66121_audio_hw_params()
1309 dev_err(dev, "Failed to set LPCM audio: %d\n", ret); in it66121_audio_hw_params()
1313 // Set audio channel status in it66121_audio_hw_params()
1363 // Enable audio channel enable while input clock stable (if SPDIF). in it66121_audio_hw_params()
1366 dev_err(dev, "Failed to enable audio channel: %d\n", ret); in it66121_audio_hw_params()
1370 ret = regmap_write_bits(ctx->regmap, IT66121_INT_MASK1_REG, in it66121_audio_hw_params()
1376 dev_dbg(dev, "HDMI audio enabled.\n"); in it66121_audio_hw_params()
1378 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()
1403 mutex_lock(&ctx->lock); in it66121_audio_shutdown()
1406 dev_err(dev, "Failed to disable audio output: %d\n", ret); in it66121_audio_shutdown()
1408 mutex_unlock(&ctx->lock); in it66121_audio_shutdown()
1420 mutex_lock(&ctx->lock); in it66121_audio_mute()
1423 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, in it66121_audio_mute()
1429 ret = regmap_write_bits(ctx->regmap, IT66121_AUD_SRCVALID_FLAT_REG, in it66121_audio_mute()
1435 mutex_unlock(&ctx->lock); in it66121_audio_mute()
1445 mutex_lock(&ctx->lock); in it66121_audio_get_eld()
1446 if (!ctx->connector) { in it66121_audio_get_eld()
1451 mutex_lock(&ctx->connector->eld_mutex); in it66121_audio_get_eld()
1452 memcpy(buf, ctx->connector->eld, in it66121_audio_get_eld()
1453 min(sizeof(ctx->connector->eld), len)); in it66121_audio_get_eld()
1454 mutex_unlock(&ctx->connector->eld_mutex); in it66121_audio_get_eld()
1456 mutex_unlock(&ctx->lock); in it66121_audio_get_eld()
1479 if (!of_property_present(dev->of_node, "#sound-dai-cells")) { in it66121_audio_codec_init()
1480 dev_info(dev, "No \"#sound-dai-cells\", no audio\n"); in it66121_audio_codec_init()
1484 ctx->audio.pdev = platform_device_register_data(dev, in it66121_audio_codec_init()
1490 if (IS_ERR(ctx->audio.pdev)) { in it66121_audio_codec_init()
1491 dev_err(dev, "Failed to initialize HDMI audio codec: %d\n", in it66121_audio_codec_init()
1492 PTR_ERR_OR_ZERO(ctx->audio.pdev)); in it66121_audio_codec_init()
1495 return PTR_ERR_OR_ZERO(ctx->audio.pdev); in it66121_audio_codec_init()
1514 struct device *dev = &client->dev; in it66121_probe()
1517 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in it66121_probe()
1519 return -ENXIO; in it66121_probe()
1522 ctx = devm_drm_bridge_alloc(dev, struct it66121_ctx, bridge, in it66121_probe()
1527 ep = of_graph_get_endpoint_by_regs(dev->of_node, 0, 0); in it66121_probe()
1529 return -EINVAL; in it66121_probe()
1531 ctx->dev = dev; in it66121_probe()
1532 ctx->client = client; in it66121_probe()
1534 of_property_read_u32(ep, "bus-width", &ctx->bus_width); in it66121_probe()
1537 if (ctx->bus_width != 12 && ctx->bus_width != 24) in it66121_probe()
1538 return -EINVAL; in it66121_probe()
1540 ep = of_graph_get_remote_node(dev->of_node, 1, -1); in it66121_probe()
1542 dev_err(ctx->dev, "The endpoint is unconnected\n"); in it66121_probe()
1543 return -EINVAL; in it66121_probe()
1546 ctx->next_bridge = of_drm_find_bridge(ep); in it66121_probe()
1548 if (!ctx->next_bridge) { in it66121_probe()
1549 dev_dbg(ctx->dev, "Next bridge not found, deferring probe\n"); in it66121_probe()
1550 return -EPROBE_DEFER; in it66121_probe()
1554 mutex_init(&ctx->lock); in it66121_probe()
1565 ctx->regmap = devm_regmap_init_i2c(client, &it66121_regmap_config); in it66121_probe()
1566 if (IS_ERR(ctx->regmap)) in it66121_probe()
1567 return PTR_ERR(ctx->regmap); in it66121_probe()
1569 regmap_read(ctx->regmap, IT66121_VENDOR_ID0_REG, &vendor_ids[0]); in it66121_probe()
1570 regmap_read(ctx->regmap, IT66121_VENDOR_ID1_REG, &vendor_ids[1]); in it66121_probe()
1571 regmap_read(ctx->regmap, IT66121_DEVICE_ID0_REG, &device_ids[0]); in it66121_probe()
1572 regmap_read(ctx->regmap, IT66121_DEVICE_ID1_REG, &device_ids[1]); in it66121_probe()
1580 if ((vendor_ids[1] << 8 | vendor_ids[0]) == chip_info->vid && in it66121_probe()
1581 (device_ids[1] << 8 | device_ids[0]) == chip_info->pid) { in it66121_probe()
1582 ctx->id = chip_info->id; in it66121_probe()
1588 return -ENODEV; in it66121_probe()
1590 ctx->bridge.of_node = dev->of_node; in it66121_probe()
1591 ctx->bridge.type = DRM_MODE_CONNECTOR_HDMIA; in it66121_probe()
1592 ctx->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; in it66121_probe()
1593 if (client->irq > 0) { in it66121_probe()
1594 ctx->bridge.ops |= DRM_BRIDGE_OP_HPD; in it66121_probe()
1596 ret = devm_request_threaded_irq(dev, client->irq, NULL, in it66121_probe()
1601 dev_err(dev, "Failed to request irq %d:%d\n", client->irq, ret); in it66121_probe()
1608 drm_bridge_add(&ctx->bridge); in it66121_probe()
1610 dev_info(ctx->dev, "IT66121 revision %d probed\n", revision_id); in it66121_probe()
1619 drm_bridge_remove(&ctx->bridge); in it66121_remove()
1620 mutex_destroy(&ctx->lock); in it66121_remove()