diff options
| author | Dave Airlie <airlied@redhat.com> | 2021-06-02 12:06:43 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2021-06-02 12:40:26 +1000 | 
| commit | 43ed3c6c786d996a264fcde68dbb36df6f03b965 (patch) | |
| tree | 7c5a6c6745f6cc57d36a4471a6ccab188b70d140 /drivers/gpu/drm/vc4/vc4_vec.c | |
| parent | 5522e9f7b0fbe2a0cb89c199b574523becc8c3ab (diff) | |
| parent | 2e290c8d8d29278b9a20e2765ab8f6df02f2e707 (diff) | |
Merge tag 'drm-misc-next-2021-06-01' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for 5.14:
UAPI Changes:
 * Use DRM driver names for fbdev
Cross-subsystem Changes:
Core Changes:
 * Fix leaked DMA handles
 * Improve documentation around DRM_CLIENT_CAP_*
 * Cleanups
 * dp_mst: Use kHz as link-rate unit during init
 * fourcc: Remove drm_gem_format_name() and drm_format_name_buf
 * gem-cma: Fix mmap for buffers with write combining
 * ttm: Don't override pre-set vm_ops; ttm_bo_mmap() removal and cleanups
Driver Changes:
 * drm/amdgpu: Fix hot unplug during suspend; Implement mmap as GEM object
   function; Use %p4cc format-string modifier; Cleanups
 * drm/bridge: Cdns: Fix PM reference leak, Cleanups; Lt8912b: Fix Coccinelle
   warnings; Fix Kconfig dependencies; Fixes and cleanups
 * drm/hisilicon/kirin: Cleanups
 * drm/nouveau: Implement mmap as GEM object function
 * drm/radeon: Implement mmap as GEM object function
 * drm/rockchip: Remove generic drivers during init; Add scaling for RK3036
   win1; Fix missing registers for RK3066 and 3188; Add alpha support for
   RK3036, RK3066, RK3126 and RK3188; Fixes and cleanups
 * drm/simpledrm: Use %p4cc: format-string modifier
 * drm/vmwgfx: Cleanups
 * fbdev/matrox: Use modern module_init()
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/YLZOKiYE6XFmE/MH@linux-uq9g.fritz.box
Diffstat (limited to 'drivers/gpu/drm/vc4/vc4_vec.c')
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_vec.c | 27 | 
1 files changed, 22 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/vc4/vc4_vec.c b/drivers/gpu/drm/vc4/vc4_vec.c index 090529d0d5dc..11fc3d6f66b1 100644 --- a/drivers/gpu/drm/vc4/vc4_vec.c +++ b/drivers/gpu/drm/vc4/vc4_vec.c @@ -154,9 +154,14 @@  #define VEC_DAC_MISC_DAC_RST_N		BIT(0) +struct vc4_vec_variant { +	u32 dac_config; +}; +  /* General VEC hardware state. */  struct vc4_vec {  	struct platform_device *pdev; +	const struct vc4_vec_variant *variant;  	struct drm_encoder *encoder;  	struct drm_connector *connector; @@ -445,10 +450,7 @@ static void vc4_vec_encoder_enable(struct drm_encoder *encoder)  	VEC_WRITE(VEC_CONFIG2,  		  VEC_CONFIG2_UV_DIG_DIS | VEC_CONFIG2_RGB_DIG_DIS);  	VEC_WRITE(VEC_CONFIG3, VEC_CONFIG3_HORIZ_LEN_STD); -	VEC_WRITE(VEC_DAC_CONFIG, -		  VEC_DAC_CONFIG_DAC_CTRL(0xc) | -		  VEC_DAC_CONFIG_DRIVER_CTRL(0xc) | -		  VEC_DAC_CONFIG_LDO_BIAS_CTRL(0x46)); +	VEC_WRITE(VEC_DAC_CONFIG, vec->variant->dac_config);  	/* Mask all interrupts. */  	VEC_WRITE(VEC_MASK0, 0); @@ -501,8 +503,21 @@ static const struct drm_encoder_helper_funcs vc4_vec_encoder_helper_funcs = {  	.atomic_mode_set = vc4_vec_encoder_atomic_mode_set,  }; +static const struct vc4_vec_variant bcm2835_vec_variant = { +	.dac_config = VEC_DAC_CONFIG_DAC_CTRL(0xc) | +		      VEC_DAC_CONFIG_DRIVER_CTRL(0xc) | +		      VEC_DAC_CONFIG_LDO_BIAS_CTRL(0x46) +}; + +static const struct vc4_vec_variant bcm2711_vec_variant = { +	.dac_config = VEC_DAC_CONFIG_DAC_CTRL(0x0) | +		      VEC_DAC_CONFIG_DRIVER_CTRL(0x80) | +		      VEC_DAC_CONFIG_LDO_BIAS_CTRL(0x61) +}; +  static const struct of_device_id vc4_vec_dt_match[] = { -	{ .compatible = "brcm,bcm2835-vec", .data = NULL }, +	{ .compatible = "brcm,bcm2835-vec", .data = &bcm2835_vec_variant }, +	{ .compatible = "brcm,bcm2711-vec", .data = &bcm2711_vec_variant },  	{ /* sentinel */ },  }; @@ -540,6 +555,8 @@ static int vc4_vec_bind(struct device *dev, struct device *master, void *data)  	vec->encoder = &vc4_vec_encoder->base.base;  	vec->pdev = pdev; +	vec->variant = (const struct vc4_vec_variant *) +		of_device_get_match_data(dev);  	vec->regs = vc4_ioremap_regs(pdev, 0);  	if (IS_ERR(vec->regs))  		return PTR_ERR(vec->regs); | 
