mirror of
https://github.com/torvalds/linux.git
synced 2024-11-18 01:51:53 +00:00
d84083268b
This patch is hdmi display support for exynos drm driver. There is already v4l2 based exynos hdmi driver in drivers/media/video/s5p-tv and some low level code is already in s5p-tv and even headers for register define are almost same. but in this patch, we decide not to consider separated common code with s5p-tv. Exynos HDMI is composed of 5 blocks, mixer, vp, hdmi, hdmiphy and ddc. 1. mixer. The piece of hardware responsible for mixing and blending multiple data inputs before passing it to an output device. The mixer is capable of handling up to three image layers. One is the output of VP. Other two are images in RGB format. The blending factor, and layers' priority are controlled by mixer's registers. The output is passed to HDMI. 2. vp (video processor). It is used for processing of NV12/NV21 data. An image stored in RAM is accessed by DMA. The output in YCbCr444 format is send to mixer. 3. hdmi. The piece of HW responsible for generation of HDMI packets. It takes pixel data from mixer and transforms it into data frames. The output is send to HDMIPHY interface. 4. hdmiphy. Physical interface for HDMI. Its duties are sending HDMI packets to HDMI connector. Basically, it contains a PLL that produces source clock for mixer, vp and hdmi. 5. ddc (display data channel). It is dedicated i2c channel to exchange display information as edid with display monitor. With plane support, exynos hdmi driver fully supports two mixer layes and vp layer. Also vp layer supports multi buffer plane pixel formats having non contigus memory spaces. In exynos drm driver, common drm_hdmi driver to interface with drm framework has opertion pointers for mixer and hdmi. this drm_hdmi driver is registered as sub driver of exynos_drm. hdmi has hdmiphy and ddc i2c clients and controls them. mixer controls all overlay layers in both mixer and vp. Vblank interrupts for hdmi are handled by mixer internally because drm framework cannot support multiple irq id. And pipe number is used to check which display device irq happens. History v2: this version - drm plane feature support to handle overlay layers. - multi buffer plane pixel format support for vp layer. - vp layer support RFCv1: original - at https://lkml.org/lkml/2011/11/4/164 Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
92 lines
2.3 KiB
C
92 lines
2.3 KiB
C
/*
|
|
*
|
|
* Cloned from drivers/media/video/s5p-tv/regs-vp.h
|
|
*
|
|
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
|
* http://www.samsung.com/
|
|
*
|
|
* Video processor register header file for Samsung Mixer driver
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef SAMSUNG_REGS_VP_H
|
|
#define SAMSUNG_REGS_VP_H
|
|
|
|
/*
|
|
* Register part
|
|
*/
|
|
|
|
#define VP_ENABLE 0x0000
|
|
#define VP_SRESET 0x0004
|
|
#define VP_SHADOW_UPDATE 0x0008
|
|
#define VP_FIELD_ID 0x000C
|
|
#define VP_MODE 0x0010
|
|
#define VP_IMG_SIZE_Y 0x0014
|
|
#define VP_IMG_SIZE_C 0x0018
|
|
#define VP_PER_RATE_CTRL 0x001C
|
|
#define VP_TOP_Y_PTR 0x0028
|
|
#define VP_BOT_Y_PTR 0x002C
|
|
#define VP_TOP_C_PTR 0x0030
|
|
#define VP_BOT_C_PTR 0x0034
|
|
#define VP_ENDIAN_MODE 0x03CC
|
|
#define VP_SRC_H_POSITION 0x0044
|
|
#define VP_SRC_V_POSITION 0x0048
|
|
#define VP_SRC_WIDTH 0x004C
|
|
#define VP_SRC_HEIGHT 0x0050
|
|
#define VP_DST_H_POSITION 0x0054
|
|
#define VP_DST_V_POSITION 0x0058
|
|
#define VP_DST_WIDTH 0x005C
|
|
#define VP_DST_HEIGHT 0x0060
|
|
#define VP_H_RATIO 0x0064
|
|
#define VP_V_RATIO 0x0068
|
|
#define VP_POLY8_Y0_LL 0x006C
|
|
#define VP_POLY4_Y0_LL 0x00EC
|
|
#define VP_POLY4_C0_LL 0x012C
|
|
|
|
/*
|
|
* Bit definition part
|
|
*/
|
|
|
|
/* generates mask for range of bits */
|
|
|
|
#define VP_MASK(high_bit, low_bit) \
|
|
(((2 << ((high_bit) - (low_bit))) - 1) << (low_bit))
|
|
|
|
#define VP_MASK_VAL(val, high_bit, low_bit) \
|
|
(((val) << (low_bit)) & VP_MASK(high_bit, low_bit))
|
|
|
|
/* VP_ENABLE */
|
|
#define VP_ENABLE_ON (1 << 0)
|
|
|
|
/* VP_SRESET */
|
|
#define VP_SRESET_PROCESSING (1 << 0)
|
|
|
|
/* VP_SHADOW_UPDATE */
|
|
#define VP_SHADOW_UPDATE_ENABLE (1 << 0)
|
|
|
|
/* VP_MODE */
|
|
#define VP_MODE_NV12 (0 << 6)
|
|
#define VP_MODE_NV21 (1 << 6)
|
|
#define VP_MODE_LINE_SKIP (1 << 5)
|
|
#define VP_MODE_MEM_LINEAR (0 << 4)
|
|
#define VP_MODE_MEM_TILED (1 << 4)
|
|
#define VP_MODE_FMT_MASK (5 << 4)
|
|
#define VP_MODE_FIELD_ID_AUTO_TOGGLING (1 << 2)
|
|
#define VP_MODE_2D_IPC (1 << 1)
|
|
|
|
/* VP_IMG_SIZE_Y */
|
|
/* VP_IMG_SIZE_C */
|
|
#define VP_IMG_HSIZE(x) VP_MASK_VAL(x, 29, 16)
|
|
#define VP_IMG_VSIZE(x) VP_MASK_VAL(x, 13, 0)
|
|
|
|
/* VP_SRC_H_POSITION */
|
|
#define VP_SRC_H_POSITION_VAL(x) VP_MASK_VAL(x, 14, 4)
|
|
|
|
/* VP_ENDIAN_MODE */
|
|
#define VP_ENDIAN_MODE_LITTLE (1 << 0)
|
|
|
|
#endif /* SAMSUNG_REGS_VP_H */
|