summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZongdong Jiao <zongdong.jiao@amlogic.com>2021-07-27 19:45:30 +0800
committerLiang Ji <liang.ji@amlogic.com>2021-07-29 17:15:06 +0800
commit558b45c1f825281c11f4d8fca8c04d77fe3a6114 (patch)
treebfaa3a826e5fd93c0f5baa29ffd5f20774f6e463
parentdf8cb8f8b44f2b7e5a220594d7ff56fc568f8289 (diff)
downloadarm64-android-tv-deadpool-4.9-android-s-beta4.tar.gz
PD#SWPL-54362 Problem: The physical size is cm, while the screen size is mm. Need unify the unit. Solution: Correct the unit of physical size as mm. Verify: g12/u212 Change-Id: I0c1f3d71f2df4930d8a91f692b713ad537133a55 Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>
-rw-r--r--drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c20
-rw-r--r--drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c21
-rw-r--r--drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main_drm.c17
-rw-r--r--include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h4
4 files changed, 30 insertions, 32 deletions
diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c
index 66167b346ada..b8a0a78d6b92 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c
@@ -2102,12 +2102,13 @@ static void Edid_VersionParse(struct rx_cap *prxcap,
prxcap->edid_revision = (data[1] < 0x5) ? data[1] : 0;
}
-static void Edid_PhyscialSizeParse(struct rx_cap *pRxCap,
+static void Edid_PhyscialSizeParse(struct rx_cap *prxcap,
unsigned char *data)
{
if ((data[0] != 0) && (data[1] != 0)) {
- pRxCap->physcial_weight = data[0];
- pRxCap->physcial_height = data[1];
+ /* Here the unit is cm, transfer to mm */
+ prxcap->physical_width = data[0] * 10;
+ prxcap->physical_height = data[1] * 10;
}
}
@@ -2161,7 +2162,7 @@ static void Edid_DTD_parsing(struct rx_cap *prxcap, unsigned char *data)
((data[10] >> 4) & 0xf);
t->v_sync = (((data[11] >> 0) & 0x3) << 4) + ((data[10] >> 0) & 0xf);
t->h_image_size = (((data[14] >> 4) & 0xf) << 8) + data[12];
- t->v_image_size = ((data[14] & 0xf) << 8) + data[11];
+ t->v_image_size = ((data[14] & 0xf) << 8) + data[13];
/*
* Special handling of 1080i60hz, 1080i50hz
*/
@@ -2646,11 +2647,11 @@ int hdmitx_edid_parse(struct hdmitx_dev *hdmitx_device)
* and re-calculate it from the h/v image size from dtd
* the unit of screen size is cm, but the unit of image size is mm
*/
- if (prxcap->physcial_weight == 0 || prxcap->physcial_height == 0) {
+ if (prxcap->physical_width == 0 || prxcap->physical_height == 0) {
struct dtd *t = &prxcap->dtd[0];
- prxcap->physcial_weight = (t->h_image_size + 5) / 10;
- prxcap->physcial_height = (t->v_image_size + 5) / 10;
+ prxcap->physical_width = t->h_image_size;
+ prxcap->physical_height = t->v_image_size;
}
/* if edid are all zeroes, or no VIC, no vesa dtd, set default vic */
@@ -2659,7 +2660,6 @@ int hdmitx_edid_parse(struct hdmitx_dev *hdmitx_device)
hdmitx_edid_set_default_vic(hdmitx_device);
return 0;
-
}
static struct dispmode_vic dispmode_vic_tab[] = {
@@ -3229,8 +3229,8 @@ int hdmitx_edid_dump(struct hdmitx_dev *hdmitx_device, char *buffer,
"Manufacture Year: %d\n", prxcap->manufacture_year + 1990);
pos += snprintf(buffer+pos, buffer_len-pos,
- "Physcial size(cm): %d x %d\n",
- prxcap->physcial_weight, prxcap->physcial_height);
+ "Physcial size(mm): %d x %d\n",
+ prxcap->physical_width, prxcap->physical_height);
pos += snprintf(buffer+pos, buffer_len-pos,
"EDID Version: %d.%d\n",
diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
index 76da86e8cd00..795c9d170867 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c
@@ -483,7 +483,7 @@ static void recalc_vinfo_sync_duration(struct vinfo_s *info, unsigned int frac)
info->sync_duration_num, info->sync_duration_den, info->frac);
}
-static void hdmi_physcial_size_update(struct hdmitx_dev *hdev)
+static void hdmi_physical_size_update(struct hdmitx_dev *hdev)
{
unsigned int width, height;
struct vinfo_s *info = NULL;
@@ -495,17 +495,16 @@ static void hdmi_physcial_size_update(struct hdmitx_dev *hdev)
}
if (info->mode == VMODE_HDMI) {
- width = hdev->rxcap.physcial_weight;
- height = hdev->rxcap.physcial_height;
+ width = hdev->rxcap.physical_width;
+ height = hdev->rxcap.physical_height;
if ((width == 0) || (height == 0)) {
info->screen_real_width = info->aspect_ratio_num;
info->screen_real_height = info->aspect_ratio_den;
} else {
- /* transfer mm */
- info->screen_real_width = width * 10;
- info->screen_real_height = height * 10;
+ info->screen_real_width = width;
+ info->screen_real_height = height;
}
- pr_info(SYS "update physcial size: %d %d\n",
+ pr_info(SYS "update physical size: %d %d\n",
info->screen_real_width, info->screen_real_height);
}
@@ -618,7 +617,7 @@ static int set_disp_mode_auto(void)
/*update hdmi checksum to vout*/
memcpy(info->hdmichecksum, hdev->rxcap.chksum, 10);
- hdmi_physcial_size_update(hdev);
+ hdmi_physical_size_update(hdev);
/* If info->name equals to cvbs, then set mode to I mode to hdmi
*/
@@ -5547,7 +5546,7 @@ static void hdmitx_hpd_plugin_handler(struct work_struct *work)
rx_repeat_hpd_state(1);
hdmitx_get_edid(hdev);
hdev->cedst_policy = hdev->cedst_en & hdev->rxcap.scdc_present;
- hdmi_physcial_size_update(hdev);
+ hdmi_physical_size_update(hdev);
if (hdev->rxcap.ieeeoui != HDMI_IEEEOUI)
hdev->hwop.cntlconfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
@@ -5647,7 +5646,7 @@ static void hdmitx_hpd_plugout_handler(struct work_struct *work)
hdev->hdmitx_event &= ~HDMI_TX_HPD_PLUGOUT;
rx_edid_physical_addr(0, 0, 0, 0);
hdmitx_edid_clear(hdev);
- hdmi_physcial_size_update(hdev);
+ hdmi_physical_size_update(hdev);
hdmitx_edid_ram_buffer_clear(hdev);
hdev->hpd_state = 0;
hdmitx_notify_hpd(hdev->hpd_state);
@@ -5675,7 +5674,7 @@ static void hdmitx_hpd_plugout_handler(struct work_struct *work)
clear_rx_vinfo(hdev);
rx_edid_physical_addr(0, 0, 0, 0);
hdmitx_edid_clear(hdev);
- hdmi_physcial_size_update(hdev);
+ hdmi_physical_size_update(hdev);
hdmitx_edid_ram_buffer_clear(hdev);
hdev->hpd_state = 0;
hdmitx_notify_hpd(hdev->hpd_state);
diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main_drm.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main_drm.c
index 88ee929e9ad4..eed9f9666f05 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main_drm.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main_drm.c
@@ -725,7 +725,7 @@ static void recalc_vinfo_sync_duration(struct vinfo_s *info, unsigned int frac)
info->sync_duration_num, info->sync_duration_den, info->frac);
}
-static void hdmi_physcial_size_update(struct hdmitx_dev *hdev)
+static void hdmi_physical_size_update(struct hdmitx_dev *hdev)
{
unsigned int width, height;
struct vinfo_s *info = NULL;
@@ -737,17 +737,16 @@ static void hdmi_physcial_size_update(struct hdmitx_dev *hdev)
}
if (info->mode == VMODE_HDMI) {
- width = hdev->rxcap.physcial_weight;
- height = hdev->rxcap.physcial_height;
+ width = hdev->rxcap.physical_width;
+ height = hdev->rxcap.physical_height;
if ((width == 0) || (height == 0)) {
info->screen_real_width = info->aspect_ratio_num;
info->screen_real_height = info->aspect_ratio_den;
} else {
- /* transfer mm */
- info->screen_real_width = width * 10;
- info->screen_real_height = height * 10;
+ info->screen_real_width = width;
+ info->screen_real_height = height;
}
- pr_info(SYS "update physcial size: %d %d\n",
+ pr_info(SYS "update physical size: %d %d\n",
info->screen_real_width, info->screen_real_height);
}
}
@@ -5194,7 +5193,7 @@ static void hdmitx_hpd_plugin_handler(struct work_struct *work)
rx_repeat_hpd_state(1);
hdmitx_get_edid(hdev);
hdev->cedst_policy = hdev->cedst_en & hdev->rxcap.scdc_present;
- hdmi_physcial_size_update(hdev);
+ hdmi_physical_size_update(hdev);
if (hdev->rxcap.ieeeoui != HDMI_IEEEOUI)
hdev->hwop.cntlconfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
@@ -5284,7 +5283,7 @@ static void hdmitx_hpd_plugout_handler(struct work_struct *work)
clear_rx_vinfo(hdev);
rx_edid_physical_addr(0, 0, 0, 0);
hdmitx_edid_clear(hdev);
- hdmi_physcial_size_update(hdev);
+ hdmi_physical_size_update(hdev);
hdmitx_edid_ram_buffer_clear(hdev);
hdev->hpd_state = 0;
hdmitx_notify_hpd(hdev->hpd_state, NULL);
diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h
index ec507f399edf..671c56a68b07 100644
--- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h
+++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h
@@ -146,8 +146,8 @@ struct rx_cap {
unsigned char ReceiverProductName[16];
unsigned char manufacture_week;
unsigned char manufacture_year;
- unsigned char physcial_weight;
- unsigned char physcial_height;
+ unsigned short physical_width;
+ unsigned short physical_height;
unsigned char edid_version;
unsigned char edid_revision;
unsigned char ColorDeepSupport;