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__ */