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 <algea.cao@rock-chips.com>
Change-Id: I0c3813711cfdb4a38ec66136569ca826c94c6c58
This commit is contained in:
Algea Cao
2021-08-31 11:13:12 +08:00
committed by Tao Huang
parent c4c4ef6660
commit a92ed4afa9
4 changed files with 110 additions and 18 deletions
+7
View File
@@ -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
+2 -1
View File
@@ -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
+22
View File
@@ -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
+79 -17
View File
@@ -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__ */