mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
media: i2c: rk628: fix YUV format color range detect
Signed-off-by: Jianwei Fan <jianwei.fan@rock-chips.com> Change-Id: Ifac5d10823b7b5a0da875032cb4ff8c8492762c0
This commit is contained in:
@@ -76,8 +76,8 @@ static const struct regmap_range rk628_hdmirx_readable_ranges[] = {
|
||||
regmap_reg_range(HDMI_RX_PDEC_STS, HDMI_RX_PDEC_STS),
|
||||
regmap_reg_range(HDMI_RX_PDEC_GCP_AVMUTE, HDMI_RX_PDEC_GCP_AVMUTE),
|
||||
regmap_reg_range(HDMI_RX_PDEC_ACR_CTS, HDMI_RX_PDEC_ACR_N),
|
||||
regmap_reg_range(HDMI_RX_PDEC_AVI_HB, HDMI_RX_PDEC_AVI_PB),
|
||||
regmap_reg_range(HDMI_RX_PDEC_AIF_CTRL, HDMI_RX_PDEC_AIF_PB0),
|
||||
regmap_reg_range(HDMI_RX_PDEC_AVI_PB, HDMI_RX_PDEC_AVI_PB),
|
||||
regmap_reg_range(HDMI_RX_HDMI20_CONTROL, HDMI_RX_CHLOCK_CONFIG),
|
||||
regmap_reg_range(HDMI_RX_SCDC_REGS0, HDMI_RX_SCDC_REGS2),
|
||||
regmap_reg_range(HDMI_RX_SCDC_WRDATA0, HDMI_RX_SCDC_WRDATA0),
|
||||
|
||||
@@ -71,6 +71,11 @@ enum hdmirx_pix_fmt {
|
||||
HDMIRX_YUV420 = 3,
|
||||
};
|
||||
|
||||
enum hdmirx_ycc_range {
|
||||
HDMIRX_YCC_LIMIT,
|
||||
HDMIRX_YCC_FULL,
|
||||
};
|
||||
|
||||
static const char * const bus_format_str[] = {
|
||||
"RGB",
|
||||
"YUV422",
|
||||
@@ -1759,13 +1764,23 @@ EXPORT_SYMBOL(rk628_hdmirx_get_timings);
|
||||
|
||||
u8 rk628_hdmirx_get_range(struct rk628 *rk628)
|
||||
{
|
||||
u8 color_range;
|
||||
u32 val, vic, fmt;
|
||||
u8 color_range, yuv_range;
|
||||
u32 val, vic, fmt, avi_hb;
|
||||
|
||||
rk628_i2c_read(rk628, HDMI_RX_PDEC_AVI_PB, &val);
|
||||
rk628_i2c_read(rk628, HDMI_RX_PDEC_AVI_HB, &avi_hb);
|
||||
color_range = (val & RGB_COLORRANGE_MASK) >> 18;
|
||||
yuv_range = (avi_hb & YUV_COLORRANGE_MASK) >> 30;
|
||||
vic = (val & VID_IDENT_CODE_MASK) >> 24;
|
||||
fmt = (val & VIDEO_FORMAT_MASK) >> 5;
|
||||
if (fmt != HDMIRX_RGB888) {
|
||||
if (yuv_range == HDMIRX_YCC_LIMIT)
|
||||
color_range = HDMIRX_LIMIT_RANGE;
|
||||
else if (yuv_range == HDMIRX_YCC_FULL)
|
||||
color_range = HDMIRX_FULL_RANGE;
|
||||
else
|
||||
color_range = HDMIRX_DEFAULT_RANGE;
|
||||
}
|
||||
if (fmt == HDMIRX_RGB888 && color_range == HDMIRX_DEFAULT_RANGE) {
|
||||
(vic) ?
|
||||
(color_range = HDMIRX_LIMIT_RANGE) :
|
||||
|
||||
@@ -267,6 +267,7 @@
|
||||
#define VIDEO_FORMAT_MASK GENMASK(6, 5)
|
||||
#define VIDEO_FORMAT(x) UPDATE(x, 6, 5)
|
||||
#define RGB_COLORRANGE_MASK GENMASK(19, 18)
|
||||
#define YUV_COLORRANGE_MASK GENMASK(31, 30)
|
||||
#define RGB_COLORRANGE(x) UPDATE(x, 19, 18)
|
||||
#define ACT_INFO_PRESENT_MASK BIT(4)
|
||||
#define HDMI_RX_PDEC_ACR_CTS (HDMI_RX_BASE + 0x0390)
|
||||
|
||||
Reference in New Issue
Block a user