diff options
| author | Ajay Singh Parmar <aparmar@codeaurora.org> | 2014-11-14 00:45:14 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:37:25 -0700 |
| commit | 33c63a3a5d371e933bb6a6629be7f08a46cec819 (patch) | |
| tree | 472d617f8e15f173d9c84c142941ced393de129a /include | |
| parent | b19a1c8b158540b5a24f7e02760d4d8bc766d5ab (diff) | |
msm: mdss: hdmi: optimize resolution data base
HDMI has a large number of resolutions supported and currently
for all supported resolutions, related modules maintain static
tables which are populated at boot time. This results in huge
static memory usage. Also, it limits the system to support only
the define resolutions.
Remove static table which stores all the resolution details.
Get individual resolution details on need basis. Also, remove
the dependency to support only the defined resolution. HDMI driver
can support any non standard resolution within the allowed range.
Change-Id: I0972bc3a0ab96051ea642d685d10c4e5535b7051
Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/uapi/video/msm_hdmi_modes.h | 125 |
1 files changed, 124 insertions, 1 deletions
diff --git a/include/uapi/video/msm_hdmi_modes.h b/include/uapi/video/msm_hdmi_modes.h index 28276ea02416..9dbda4f512c3 100644 --- a/include/uapi/video/msm_hdmi_modes.h +++ b/include/uapi/video/msm_hdmi_modes.h @@ -1,6 +1,7 @@ #ifndef _UAPI_MSM_HDMI_MODES_H__ #define _UAPI_MSM_HDMI_MODES_H__ #include <linux/types.h> +#include <linux/errno.h> struct msm_hdmi_mode_timing_info { uint32_t video_format; @@ -259,6 +260,129 @@ static inline void MSM_HDMI_MODES_SET_SUPP_TIMINGS( } } +#define MSM_HDMI_MODES_GET_DETAILS(mode, MODE) do { \ + struct msm_hdmi_mode_timing_info info = MODE##_TIMING; \ + *mode = info; \ + } while (0) + +static inline int msm_hdmi_get_timing_info( + struct msm_hdmi_mode_timing_info *mode, int id) +{ + int ret = 0; + + switch (id) { + case HDMI_VFRMT_640x480p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_640x480p60_4_3); + break; + case HDMI_VFRMT_720x480p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_720x480p60_4_3); + break; + case HDMI_VFRMT_720x480p60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_720x480p60_16_9); + break; + case HDMI_VFRMT_1280x720p60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1280x720p60_16_9); + break; + case HDMI_VFRMT_1920x1080i60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1080i60_16_9); + break; + case HDMI_VFRMT_1440x480i60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1440x480i60_4_3); + break; + case HDMI_VFRMT_1440x480i60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1440x480i60_16_9); + break; + case HDMI_VFRMT_1920x1080p60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1080p60_16_9); + break; + case HDMI_VFRMT_720x576p50_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_720x576p50_4_3); + break; + case HDMI_VFRMT_720x576p50_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_720x576p50_16_9); + break; + case HDMI_VFRMT_1280x720p50_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1280x720p50_16_9); + break; + case HDMI_VFRMT_1440x576i50_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1440x576i50_4_3); + break; + case HDMI_VFRMT_1440x576i50_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1440x576i50_16_9); + break; + case HDMI_VFRMT_1920x1080p50_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1080p50_16_9); + break; + case HDMI_VFRMT_1920x1080p24_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1080p24_16_9); + break; + case HDMI_VFRMT_1920x1080p25_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1080p25_16_9); + break; + case HDMI_VFRMT_1920x1080p30_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1080p30_16_9); + break; + case HDMI_VFRMT_3840x2160p30_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_3840x2160p30_16_9); + break; + case HDMI_VFRMT_3840x2160p25_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_3840x2160p25_16_9); + break; + case HDMI_VFRMT_3840x2160p24_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_3840x2160p24_16_9); + break; + case HDMI_VFRMT_4096x2160p24_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_4096x2160p24_16_9); + break; + case HDMI_VFRMT_1024x768p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1024x768p60_4_3); + break; + case HDMI_VFRMT_1280x1024p60_5_4: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1280x1024p60_5_4); + break; + case HDMI_VFRMT_2560x1600p60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_2560x1600p60_16_9); + break; + case HDMI_VFRMT_800x600p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_800x600p60_4_3); + break; + case HDMI_VFRMT_848x480p60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_848x480p60_16_9); + break; + case HDMI_VFRMT_1280x960p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1280x960p60_4_3); + break; + case HDMI_VFRMT_1360x768p60_16_9: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1360x768p60_16_9); + break; + case HDMI_VFRMT_1440x900p60_16_10: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1440x900p60_16_10); + break; + case HDMI_VFRMT_1400x1050p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1400x1050p60_4_3); + break; + case HDMI_VFRMT_1680x1050p60_16_10: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1680x1050p60_16_10); + break; + case HDMI_VFRMT_1600x1200p60_4_3: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1600x1200p60_4_3); + break; + case HDMI_VFRMT_1920x1200p60_16_10: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1920x1200p60_16_10); + break; + case HDMI_VFRMT_1366x768p60_16_10: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1366x768p60_16_10); + break; + case HDMI_VFRMT_1280x800p60_16_10: + MSM_HDMI_MODES_GET_DETAILS(mode, HDMI_VFRMT_1280x800p60_16_10); + break; + default: + ret = -EINVAL; + } + + return ret; +} + static inline int hdmi_tx_get_v_total(const struct msm_hdmi_mode_timing_info *t) { if (t) { @@ -278,5 +402,4 @@ static inline int hdmi_tx_get_h_total(const struct msm_hdmi_mode_timing_info *t) return 0; } - #endif /* _UAPI_MSM_HDMI_MODES_H__ */ |
