From a92ed4afa97cca2f9394a87433eaa8e128752b3e Mon Sep 17 00:00:00 2001 From: Algea Cao Date: Tue, 31 Aug 2021 11:13:12 +0800 Subject: [PATCH] drm/edid: add config option of edid function rv1126 does not support display interface which need to read and parse edid, such as hdmi and dp, so add config option to reduce memory usage. ./ksize.sh drivers/gpu/drm/ before ksize: 380303 Bytes after kszie: 325509 Bytes save about: 54794 Bytes Signed-off-by: Algea Cao Change-Id: I0c3813711cfdb4a38ec66136569ca826c94c6c58 --- drivers/gpu/drm/Kconfig | 7 +++ drivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/drm_crtc_internal.h | 22 +++++++ include/drm/drm_edid.h | 96 ++++++++++++++++++++++++----- 4 files changed, 110 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 671b2dc677b6..fdcc8aad18e9 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -31,6 +31,13 @@ config DRM_MIPI_DBI tristate depends on DRM +config DRM_EDID + bool "EDID function for DRM" + depends on DRM + default y if !CPU_RV1106 && !CPU_RV1126 + help + DRM EDID read and parse function. + config DRM_IGNORE_IOTCL_PERMIT bool "Ignore drm ioctl permission" depends on DRM && ANDROID && NO_GKI diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 9cc1c00a8ec9..a53dc7b0bc0e 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -7,7 +7,7 @@ drm-y := drm_auth.o drm_cache.o \ drm_file.o drm_gem.o drm_ioctl.o drm_irq.o \ drm_memory.o drm_drv.o \ drm_sysfs.o drm_hashtab.o drm_mm.o \ - drm_crtc.o drm_fourcc.o drm_modes.o drm_edid.o \ + drm_crtc.o drm_fourcc.o drm_modes.o \ drm_encoder_slave.o \ drm_trace_points.o drm_prime.o \ drm_rect.o drm_vma_manager.o drm_flip_work.o \ @@ -20,6 +20,7 @@ drm-y := drm_auth.o drm_cache.o \ drm_client_modeset.o drm_atomic_uapi.o drm_hdcp.o \ drm_managed.o drm_vblank_work.o +drm-$(CONFIG_DRM_EDID) += drm_edid.o drm-$(CONFIG_DRM_LEGACY) += drm_legacy_misc.o drm_bufs.o drm_context.o drm_dma.o drm_scatter.o drm_lock.o drm-$(CONFIG_DRM_LIB_RANDOM) += lib/drm_random.o drm-$(CONFIG_DRM_VM) += drm_vm.o diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index da96b2f64d7e..ad54131ab728 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h @@ -276,7 +276,29 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); /* drm_edid.c */ +#ifdef CONFIG_DRM_EDID void drm_mode_fixup_1366x768(struct drm_display_mode *mode); void drm_reset_display_info(struct drm_connector *connector); u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid); void drm_update_tile_info(struct drm_connector *connector, const struct edid *edid); +#else +static inline void drm_mode_fixup_1366x768(struct drm_display_mode *mode) +{ +} + +static inline void drm_reset_display_info(struct drm_connector *connector) +{ +} + +static inline u32 drm_add_display_info(struct drm_connector *connector, + const struct edid *edid) +{ + return 0; +} + +static inline u32 drm_update_tile_info(struct drm_connector *connector, + const struct edid *edid) +{ + return 0; +} +#endif diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 20ce8f88123b..043491c74870 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -391,8 +391,6 @@ drm_load_edid_firmware(struct drm_connector *connector) } #endif -bool drm_edid_are_equal(const struct edid *edid1, const struct edid *edid2); - int drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, const struct drm_connector *connector, @@ -515,35 +513,99 @@ struct edid *drm_do_get_edid(struct drm_connector *connector, int (*get_edid_block)(void *data, u8 *buf, unsigned int block, size_t len), void *data); -struct edid *drm_get_edid(struct drm_connector *connector, - struct i2c_adapter *adapter); struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, struct i2c_adapter *adapter); -struct edid *drm_edid_duplicate(const struct edid *edid); -int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); -int drm_add_override_edid_modes(struct drm_connector *connector); -u8 drm_match_cea_mode(const struct drm_display_mode *to_match); bool drm_detect_hdmi_monitor(struct edid *edid); -bool drm_detect_monitor_audio(struct edid *edid); enum hdmi_quantization_range drm_default_rgb_quant_range(const struct drm_display_mode *mode); -int drm_add_modes_noedid(struct drm_connector *connector, - int hdisplay, int vdisplay); void drm_set_preferred_mode(struct drm_connector *connector, int hpref, int vpref); int drm_edid_header_is_valid(const u8 *raw_edid); bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid, bool *edid_corrupt); -bool drm_edid_is_valid(struct edid *edid); -void drm_edid_get_monitor_name(struct edid *edid, char *name, - int buflen); -struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, - int hsize, int vsize, int fresh, - bool rb); struct drm_display_mode * drm_display_mode_from_cea_vic(struct drm_device *dev, u8 video_code); +#ifdef CONFIG_DRM_EDID +struct edid *drm_get_edid(struct drm_connector *connector, + struct i2c_adapter *adapter); +struct edid *drm_edid_duplicate(const struct edid *edid); +int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); +int drm_add_override_edid_modes(struct drm_connector *connector); +u8 drm_match_cea_mode(const struct drm_display_mode *to_match); +int drm_add_modes_noedid(struct drm_connector *connector, + int hdisplay, int vdisplay); +bool drm_detect_monitor_audio(struct edid *edid); +void drm_edid_get_monitor_name(struct edid *edid, char *name, + int buflen); +bool drm_edid_is_valid(struct edid *edid); +bool drm_edid_are_equal(const struct edid *edid1, const struct edid *edid2); +struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, + int hsize, int vsize, int fresh, + bool rb); +#else +static inline struct edid *drm_get_edid(struct drm_connector *connector, + struct i2c_adapter *adapter) +{ + return NULL; +} + +static inline struct edid *drm_edid_duplicate(const struct edid *edid) +{ + return NULL; +} + +static inline int drm_add_edid_modes(struct drm_connector *connector, + struct edid *edid) +{ + return 0; +} + +static inline int drm_add_override_edid_modes(struct drm_connector *connector) +{ + return 0; +} + +static inline u8 drm_match_cea_mode(const struct drm_display_mode *to_match) +{ + return 0; +} + +static inline int drm_add_modes_noedid(struct drm_connector *connector, + int hdisplay, int vdisplay) +{ + return 0; +} + +static inline bool drm_detect_monitor_audio(struct edid *edid) +{ + return false; +} + +static inline void drm_edid_get_monitor_name(struct edid *edid, char *name, + int buflen) +{ +} + +static inline bool drm_edid_is_valid(struct edid *edid) +{ + return false; +} + +static inline bool drm_edid_are_equal(const struct edid *edid1, const struct edid *edid2) +{ + return false; +} + +static inline struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, + int hsize, int vsize, int fresh, + bool rb) +{ + return NULL; +} +#endif + #endif /* __DRM_EDID_H__ */