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.
173 #define VEC_READ(offset) readl(vec->regs + (offset))
174 #define VEC_WRITE(offset, val) writel(val, vec->regs + (offset))
319 struct drm_connector_state *state = connector->state; in vc4_vec_connector_get_modes()
322 mode = drm_mode_duplicate(connector->dev, in vc4_vec_connector_get_modes()
323 vc4_vec_tv_modes[state->tv.mode].mode); in vc4_vec_connector_get_modes()
326 return -ENOMEM; in vc4_vec_connector_get_modes()
353 vec_connector = devm_kzalloc(dev->dev, sizeof(*vec_connector), in vc4_vec_connector_init()
356 return ERR_PTR(-ENOMEM); in vc4_vec_connector_init()
358 connector = &vec_connector->base; in vc4_vec_connector_init()
359 connector->interlace_allowed = true; in vc4_vec_connector_init()
361 vec_connector->encoder = vec->encoder; in vc4_vec_connector_init()
362 vec_connector->vec = vec; in vc4_vec_connector_init()
368 drm_object_attach_property(&connector->base, in vc4_vec_connector_init()
369 dev->mode_config.tv_mode_property, in vc4_vec_connector_init()
371 vec->tv_mode = &vc4_vec_tv_modes[VC4_VEC_TV_MODE_NTSC]; in vc4_vec_connector_init()
373 drm_connector_attach_encoder(connector, vec->encoder); in vc4_vec_connector_init()
381 struct vc4_vec *vec = vc4_vec_encoder->vec; in vc4_vec_encoder_disable()
391 clk_disable_unprepare(vec->clock); in vc4_vec_encoder_disable()
393 ret = pm_runtime_put(&vec->pdev->dev); in vc4_vec_encoder_disable()
403 struct vc4_vec *vec = vc4_vec_encoder->vec; in vc4_vec_encoder_enable()
406 ret = pm_runtime_get_sync(&vec->pdev->dev); in vc4_vec_encoder_enable()
414 * because there's a chance we share the same parent with the HDMI in vc4_vec_encoder_enable()
419 ret = clk_set_rate(vec->clock, 108000000); in vc4_vec_encoder_enable()
425 ret = clk_prepare_enable(vec->clock); in vc4_vec_encoder_enable()
435 /* Disable the CGSM-A and WSE blocks */ in vc4_vec_encoder_enable()
462 vec->tv_mode->mode_set(vec); in vc4_vec_encoder_enable()
482 struct vc4_vec *vec = vc4_vec_encoder->vec; in vc4_vec_encoder_atomic_mode_set()
484 vec->tv_mode = &vc4_vec_tv_modes[conn_state->tv.mode]; in vc4_vec_encoder_atomic_mode_set()
493 vec_mode = &vc4_vec_tv_modes[conn_state->tv.mode]; in vc4_vec_encoder_atomic_check()
495 if (conn_state->crtc && in vc4_vec_encoder_atomic_check()
496 !drm_mode_equal(vec_mode->mode, &crtc_state->adjusted_mode)) in vc4_vec_encoder_atomic_check()
497 return -EINVAL; in vc4_vec_encoder_atomic_check()
511 { .compatible = "brcm,bcm2835-vec", .data = NULL },
517 [VC4_VEC_TV_MODE_NTSC_J] = "NTSC-J",
519 [VC4_VEC_TV_MODE_PAL_M] = "PAL-M",
538 return -ENOMEM; in vc4_vec_bind()
543 return -ENOMEM; in vc4_vec_bind()
544 vc4_vec_encoder->base.type = VC4_ENCODER_TYPE_VEC; in vc4_vec_bind()
545 vc4_vec_encoder->vec = vec; in vc4_vec_bind()
546 vec->encoder = &vc4_vec_encoder->base.base; in vc4_vec_bind()
548 vec->pdev = pdev; in vc4_vec_bind()
549 vec->regs = vc4_ioremap_regs(pdev, 0); in vc4_vec_bind()
550 if (IS_ERR(vec->regs)) in vc4_vec_bind()
551 return PTR_ERR(vec->regs); in vc4_vec_bind()
552 vec->regset.base = vec->regs; in vc4_vec_bind()
553 vec->regset.regs = vec_regs; in vc4_vec_bind()
554 vec->regset.nregs = ARRAY_SIZE(vec_regs); in vc4_vec_bind()
556 vec->clock = devm_clk_get(dev, NULL); in vc4_vec_bind()
557 if (IS_ERR(vec->clock)) { in vc4_vec_bind()
558 ret = PTR_ERR(vec->clock); in vc4_vec_bind()
559 if (ret != -EPROBE_DEFER) in vc4_vec_bind()
566 drm_simple_encoder_init(drm, vec->encoder, DRM_MODE_ENCODER_TVDAC); in vc4_vec_bind()
567 drm_encoder_helper_add(vec->encoder, &vc4_vec_encoder_helper_funcs); in vc4_vec_bind()
569 vec->connector = vc4_vec_connector_init(drm, vec); in vc4_vec_bind()
570 if (IS_ERR(vec->connector)) { in vc4_vec_bind()
571 ret = PTR_ERR(vec->connector); in vc4_vec_bind()
577 vc4->vec = vec; in vc4_vec_bind()
579 vc4_debugfs_add_regset32(drm, "vec_regs", &vec->regset); in vc4_vec_bind()
584 drm_encoder_cleanup(vec->encoder); in vc4_vec_bind()
597 vc4_vec_connector_destroy(vec->connector); in vc4_vec_unbind()
598 drm_encoder_cleanup(vec->encoder); in vc4_vec_unbind()
601 vc4->vec = NULL; in vc4_vec_unbind()
611 return component_add(&pdev->dev, &vc4_vec_ops); in vc4_vec_dev_probe()
616 component_del(&pdev->dev, &vc4_vec_ops); in vc4_vec_dev_remove()