Lines Matching +full:bcm2835 +full:- +full:hdmi
1 // SPDX-License-Identifier: GPL-2.0-only
13 * PAL and PAL-M or NTSC and NTSC-J.
178 #define VEC_READ(offset) readl(vec->regs + (offset))
179 #define VEC_WRITE(offset, val) writel(val, vec->regs + (offset))
318 struct drm_connector_state *state = connector->state; in vc4_vec_connector_get_modes()
321 mode = drm_mode_duplicate(connector->dev, in vc4_vec_connector_get_modes()
322 vc4_vec_tv_modes[state->tv.mode].mode); in vc4_vec_connector_get_modes()
325 return -ENOMEM; in vc4_vec_connector_get_modes()
352 vec_connector = devm_kzalloc(dev->dev, sizeof(*vec_connector), in vc4_vec_connector_init()
355 return ERR_PTR(-ENOMEM); in vc4_vec_connector_init()
357 connector = &vec_connector->base; in vc4_vec_connector_init()
358 connector->interlace_allowed = true; in vc4_vec_connector_init()
360 vec_connector->encoder = vec->encoder; in vc4_vec_connector_init()
361 vec_connector->vec = vec; in vc4_vec_connector_init()
367 drm_object_attach_property(&connector->base, in vc4_vec_connector_init()
368 dev->mode_config.tv_mode_property, in vc4_vec_connector_init()
370 vec->tv_mode = &vc4_vec_tv_modes[VC4_VEC_TV_MODE_NTSC]; in vc4_vec_connector_init()
372 drm_connector_attach_encoder(connector, vec->encoder); in vc4_vec_connector_init()
380 struct vc4_vec *vec = vc4_vec_encoder->vec; in vc4_vec_encoder_disable()
390 clk_disable_unprepare(vec->clock); in vc4_vec_encoder_disable()
392 ret = pm_runtime_put(&vec->pdev->dev); in vc4_vec_encoder_disable()
402 struct vc4_vec *vec = vc4_vec_encoder->vec; in vc4_vec_encoder_enable()
405 ret = pm_runtime_get_sync(&vec->pdev->dev); in vc4_vec_encoder_enable()
413 * because there's a chance we share the same parent with the HDMI in vc4_vec_encoder_enable()
418 ret = clk_set_rate(vec->clock, 108000000); in vc4_vec_encoder_enable()
424 ret = clk_prepare_enable(vec->clock); in vc4_vec_encoder_enable()
434 /* Disable the CGSM-A and WSE blocks */ in vc4_vec_encoder_enable()
453 VEC_WRITE(VEC_DAC_CONFIG, vec->variant->dac_config); in vc4_vec_encoder_enable()
458 vec->tv_mode->mode_set(vec); in vc4_vec_encoder_enable()
478 struct vc4_vec *vec = vc4_vec_encoder->vec; in vc4_vec_encoder_atomic_mode_set()
480 vec->tv_mode = &vc4_vec_tv_modes[conn_state->tv.mode]; in vc4_vec_encoder_atomic_mode_set()
489 vec_mode = &vc4_vec_tv_modes[conn_state->tv.mode]; in vc4_vec_encoder_atomic_check()
491 if (conn_state->crtc && in vc4_vec_encoder_atomic_check()
492 !drm_mode_equal(vec_mode->mode, &crtc_state->adjusted_mode)) in vc4_vec_encoder_atomic_check()
493 return -EINVAL; in vc4_vec_encoder_atomic_check()
519 { .compatible = "brcm,bcm2835-vec", .data = &bcm2835_vec_variant },
520 { .compatible = "brcm,bcm2711-vec", .data = &bcm2711_vec_variant },
526 [VC4_VEC_TV_MODE_NTSC_J] = "NTSC-J",
528 [VC4_VEC_TV_MODE_PAL_M] = "PAL-M",
547 return -ENOMEM; in vc4_vec_bind()
552 return -ENOMEM; in vc4_vec_bind()
553 vc4_vec_encoder->base.type = VC4_ENCODER_TYPE_VEC; in vc4_vec_bind()
554 vc4_vec_encoder->vec = vec; in vc4_vec_bind()
555 vec->encoder = &vc4_vec_encoder->base.base; in vc4_vec_bind()
557 vec->pdev = pdev; in vc4_vec_bind()
558 vec->variant = (const struct vc4_vec_variant *) in vc4_vec_bind()
560 vec->regs = vc4_ioremap_regs(pdev, 0); in vc4_vec_bind()
561 if (IS_ERR(vec->regs)) in vc4_vec_bind()
562 return PTR_ERR(vec->regs); in vc4_vec_bind()
563 vec->regset.base = vec->regs; in vc4_vec_bind()
564 vec->regset.regs = vec_regs; in vc4_vec_bind()
565 vec->regset.nregs = ARRAY_SIZE(vec_regs); in vc4_vec_bind()
567 vec->clock = devm_clk_get(dev, NULL); in vc4_vec_bind()
568 if (IS_ERR(vec->clock)) { in vc4_vec_bind()
569 ret = PTR_ERR(vec->clock); in vc4_vec_bind()
570 if (ret != -EPROBE_DEFER) in vc4_vec_bind()
577 drm_simple_encoder_init(drm, vec->encoder, DRM_MODE_ENCODER_TVDAC); in vc4_vec_bind()
578 drm_encoder_helper_add(vec->encoder, &vc4_vec_encoder_helper_funcs); in vc4_vec_bind()
580 vec->connector = vc4_vec_connector_init(drm, vec); in vc4_vec_bind()
581 if (IS_ERR(vec->connector)) { in vc4_vec_bind()
582 ret = PTR_ERR(vec->connector); in vc4_vec_bind()
588 vc4->vec = vec; in vc4_vec_bind()
590 vc4_debugfs_add_regset32(drm, "vec_regs", &vec->regset); in vc4_vec_bind()
595 drm_encoder_cleanup(vec->encoder); in vc4_vec_bind()
608 vc4_vec_connector_destroy(vec->connector); in vc4_vec_unbind()
609 drm_encoder_cleanup(vec->encoder); in vc4_vec_unbind()
612 vc4->vec = NULL; in vc4_vec_unbind()
622 return component_add(&pdev->dev, &vc4_vec_ops); in vc4_vec_dev_probe()
627 component_del(&pdev->dev, &vc4_vec_ops); in vc4_vec_dev_remove()