aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2014-01-23 14:05:00 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-03-13 07:48:44 -0400
commitf5aabb978d1dcd850d329bcce6dc782bb8621984 (patch)
tree94477e3697edd25f191bac6c4efdea1f849e4919
parent3e70292cd4a002cd799a1cd4115286cba3933d6d (diff)
drm: polish function kerneldoc for drm_modes.[hc]
- Tune down yelling RETURNS. - OCD align all the parameters the same. - Add missing kerneldoc, which also means that we need to include the kerneldoc from the drm_modes.h header now. - Add missing Returns: sections. - General polish and clarification - especially the kerneldoc for the mode creation helpers seems to have been some good specimen of copypasta gone wrong. All actual code changes have all been extracted into prep patches since there was simply too much to polish. v2: More polish for the command line modeline functions. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--Documentation/DocBook/drm.tmpl1
-rw-r--r--drivers/gpu/drm/drm_modes.c171
-rw-r--r--include/drm/drm_modes.h8
3 files changed, 115 insertions, 65 deletions
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl
index 50af3298ac1f..4268cbe6f95c 100644
--- a/Documentation/DocBook/drm.tmpl
+++ b/Documentation/DocBook/drm.tmpl
@@ -965,6 +965,7 @@ int max_width, max_height;</synopsis>
965 </itemizedlist> 965 </itemizedlist>
966 <sect2> 966 <sect2>
967 <title>Display Modes Function Reference</title> 967 <title>Display Modes Function Reference</title>
968!Iinclude/drm/drm_modes.h
968!Edrivers/gpu/drm/drm_modes.c 969!Edrivers/gpu/drm/drm_modes.c
969 </sect2> 970 </sect2>
970 <sect2> 971 <sect2>
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index cc352eed0191..8b410576fce4 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -63,9 +63,10 @@ EXPORT_SYMBOL(drm_mode_debug_printmodeline);
63 * drm_mode_create - create a new display mode 63 * drm_mode_create - create a new display mode
64 * @dev: DRM device 64 * @dev: DRM device
65 * 65 *
66 * Create a new drm_display_mode, give it an ID, and return it. 66 * Create a new, cleared drm_display_mode with kzalloc, allocate an ID for it
67 * and return it.
67 * 68 *
68 * RETURNS: 69 * Returns:
69 * Pointer to new mode on success, NULL on error. 70 * Pointer to new mode on success, NULL on error.
70 */ 71 */
71struct drm_display_mode *drm_mode_create(struct drm_device *dev) 72struct drm_display_mode *drm_mode_create(struct drm_device *dev)
@@ -90,7 +91,7 @@ EXPORT_SYMBOL(drm_mode_create);
90 * @dev: DRM device 91 * @dev: DRM device
91 * @mode: mode to remove 92 * @mode: mode to remove
92 * 93 *
93 * Free @mode's unique identifier, then free it. 94 * Release @mode's unique ID, then free it @mode structure itself using kfree.
94 */ 95 */
95void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode) 96void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
96{ 97{
@@ -104,11 +105,13 @@ void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
104EXPORT_SYMBOL(drm_mode_destroy); 105EXPORT_SYMBOL(drm_mode_destroy);
105 106
106/** 107/**
107 * drm_mode_probed_add - add a mode to a connector's probed mode list 108 * drm_mode_probed_add - add a mode to a connector's probed_mode list
108 * @connector: connector the new mode 109 * @connector: connector the new mode
109 * @mode: mode data 110 * @mode: mode data
110 * 111 *
111 * Add @mode to @connector's mode list for later use. 112 * Add @mode to @connector's probed_mode list for later use. This list should
113 * then in a second step get filtered and all the modes actually supported by
114 * the hardware moved to the @connector's modes list.
112 */ 115 */
113void drm_mode_probed_add(struct drm_connector *connector, 116void drm_mode_probed_add(struct drm_connector *connector,
114 struct drm_display_mode *mode) 117 struct drm_display_mode *mode)
@@ -120,16 +123,14 @@ void drm_mode_probed_add(struct drm_connector *connector,
120EXPORT_SYMBOL(drm_mode_probed_add); 123EXPORT_SYMBOL(drm_mode_probed_add);
121 124
122/** 125/**
123 * drm_cvt_mode -create a modeline based on CVT algorithm 126 * drm_cvt_mode -create a modeline based on the CVT algorithm
124 * @dev: DRM device 127 * @dev: drm device
125 * @hdisplay: hdisplay size 128 * @hdisplay: hdisplay size
126 * @vdisplay: vdisplay size 129 * @vdisplay: vdisplay size
127 * @vrefresh : vrefresh rate 130 * @vrefresh: vrefresh rate
128 * @reduced : Whether the GTF calculation is simplified 131 * @reduced: whether to use reduced blanking
129 * @interlaced:Whether the interlace is supported 132 * @interlaced: whether to compute an interlaced mode
130 * @margins: whether to add margins or not 133 * @margins: whether to add margins (borders)
131 *
132 * return the modeline based on CVT algorithm
133 * 134 *
134 * This function is called to generate the modeline based on CVT algorithm 135 * This function is called to generate the modeline based on CVT algorithm
135 * according to the hdisplay, vdisplay, vrefresh. 136 * according to the hdisplay, vdisplay, vrefresh.
@@ -139,6 +140,11 @@ EXPORT_SYMBOL(drm_mode_probed_add);
139 * 140 *
140 * And it is copied from xf86CVTmode in xserver/hw/xfree86/modes/xf86cvt.c. 141 * And it is copied from xf86CVTmode in xserver/hw/xfree86/modes/xf86cvt.c.
141 * What I have done is to translate it by using integer calculation. 142 * What I have done is to translate it by using integer calculation.
143 *
144 * Returns:
145 * The modeline based on the CVT algorithm stored in a drm_display_mode object.
146 * The display mode object is allocated with drm_mode_create(). Returns NULL
147 * when no mode could be allocated.
142 */ 148 */
143struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay, 149struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,
144 int vdisplay, int vrefresh, 150 int vdisplay, int vrefresh,
@@ -338,23 +344,25 @@ struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,
338EXPORT_SYMBOL(drm_cvt_mode); 344EXPORT_SYMBOL(drm_cvt_mode);
339 345
340/** 346/**
341 * drm_gtf_mode_complex - create the modeline based on full GTF algorithm 347 * drm_gtf_mode_complex - create the modeline based on the full GTF algorithm
342 * 348 * @dev: drm device
343 * @dev :drm device 349 * @hdisplay: hdisplay size
344 * @hdisplay :hdisplay size 350 * @vdisplay: vdisplay size
345 * @vdisplay :vdisplay size 351 * @vrefresh: vrefresh rate.
346 * @vrefresh :vrefresh rate. 352 * @interlaced: whether to compute an interlaced mode
347 * @interlaced :whether the interlace is supported 353 * @margins: desired margin (borders) size
348 * @margins :desired margin size
349 * @GTF_M: extended GTF formula parameters 354 * @GTF_M: extended GTF formula parameters
350 * @GTF_2C: extended GTF formula parameters 355 * @GTF_2C: extended GTF formula parameters
351 * @GTF_K: extended GTF formula parameters 356 * @GTF_K: extended GTF formula parameters
352 * @GTF_2J: extended GTF formula parameters 357 * @GTF_2J: extended GTF formula parameters
353 * 358 *
354 * return the modeline based on full GTF algorithm.
355 *
356 * GTF feature blocks specify C and J in multiples of 0.5, so we pass them 359 * GTF feature blocks specify C and J in multiples of 0.5, so we pass them
357 * in here multiplied by two. For a C of 40, pass in 80. 360 * in here multiplied by two. For a C of 40, pass in 80.
361 *
362 * Returns:
363 * The modeline based on the full GTF algorithm stored in a drm_display_mode object.
364 * The display mode object is allocated with drm_mode_create(). Returns NULL
365 * when no mode could be allocated.
358 */ 366 */
359struct drm_display_mode * 367struct drm_display_mode *
360drm_gtf_mode_complex(struct drm_device *dev, int hdisplay, int vdisplay, 368drm_gtf_mode_complex(struct drm_device *dev, int hdisplay, int vdisplay,
@@ -524,14 +532,13 @@ drm_gtf_mode_complex(struct drm_device *dev, int hdisplay, int vdisplay,
524EXPORT_SYMBOL(drm_gtf_mode_complex); 532EXPORT_SYMBOL(drm_gtf_mode_complex);
525 533
526/** 534/**
527 * drm_gtf_mode - create the modeline based on GTF algorithm 535 * drm_gtf_mode - create the modeline based on the GTF algorithm
528 * 536 * @dev: drm device
529 * @dev :drm device 537 * @hdisplay: hdisplay size
530 * @hdisplay :hdisplay size 538 * @vdisplay: vdisplay size
531 * @vdisplay :vdisplay size 539 * @vrefresh: vrefresh rate.
532 * @vrefresh :vrefresh rate. 540 * @interlaced: whether to compute an interlaced mode
533 * @interlaced :whether the interlace is supported 541 * @margins: desired margin (borders) size
534 * @margins :whether the margin is supported
535 * 542 *
536 * return the modeline based on GTF algorithm 543 * return the modeline based on GTF algorithm
537 * 544 *
@@ -550,6 +557,11 @@ EXPORT_SYMBOL(drm_gtf_mode_complex);
550 * C = 40 557 * C = 40
551 * K = 128 558 * K = 128
552 * J = 20 559 * J = 20
560 *
561 * Returns:
562 * The modeline based on the GTF algorithm stored in a drm_display_mode object.
563 * The display mode object is allocated with drm_mode_create(). Returns NULL
564 * when no mode could be allocated.
553 */ 565 */
554struct drm_display_mode * 566struct drm_display_mode *
555drm_gtf_mode(struct drm_device *dev, int hdisplay, int vdisplay, int vrefresh, 567drm_gtf_mode(struct drm_device *dev, int hdisplay, int vdisplay, int vrefresh,
@@ -562,6 +574,13 @@ drm_gtf_mode(struct drm_device *dev, int hdisplay, int vdisplay, int vrefresh,
562EXPORT_SYMBOL(drm_gtf_mode); 574EXPORT_SYMBOL(drm_gtf_mode);
563 575
564#ifdef CONFIG_VIDEOMODE_HELPERS 576#ifdef CONFIG_VIDEOMODE_HELPERS
577/**
578 * drm_display_mode_from_videomode - fill in @dmode using @vm,
579 * @vm: videomode structure to use as source
580 * @dmode: drm_display_mode structure to use as destination
581 *
582 * Fills out @dmode using the display mode specified in @vm.
583 */
565void drm_display_mode_from_videomode(const struct videomode *vm, 584void drm_display_mode_from_videomode(const struct videomode *vm,
566 struct drm_display_mode *dmode) 585 struct drm_display_mode *dmode)
567{ 586{
@@ -606,6 +625,9 @@ EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode);
606 * This function is expensive and should only be used, if only one mode is to be 625 * This function is expensive and should only be used, if only one mode is to be
607 * read from DT. To get multiple modes start with of_get_display_timings and 626 * read from DT. To get multiple modes start with of_get_display_timings and
608 * work with that instead. 627 * work with that instead.
628 *
629 * Returns:
630 * 0 on success, a negative errno code when no of videomode node was found.
609 */ 631 */
610int of_get_drm_display_mode(struct device_node *np, 632int of_get_drm_display_mode(struct device_node *np,
611 struct drm_display_mode *dmode, int index) 633 struct drm_display_mode *dmode, int index)
@@ -633,7 +655,8 @@ EXPORT_SYMBOL_GPL(of_get_drm_display_mode);
633 * drm_mode_set_name - set the name on a mode 655 * drm_mode_set_name - set the name on a mode
634 * @mode: name will be set in this mode 656 * @mode: name will be set in this mode
635 * 657 *
636 * Set the name of @mode to a standard format. 658 * Set the name of @mode to a standard format which is <hdisplay>x<vdisplay>
659 * with an optional 'i' suffix for interlaced modes.
637 */ 660 */
638void drm_mode_set_name(struct drm_display_mode *mode) 661void drm_mode_set_name(struct drm_display_mode *mode)
639{ 662{
@@ -648,7 +671,9 @@ EXPORT_SYMBOL(drm_mode_set_name);
648/** drm_mode_hsync - get the hsync of a mode 671/** drm_mode_hsync - get the hsync of a mode
649 * @mode: mode 672 * @mode: mode
650 * 673 *
651 * Return @modes's hsync rate in kHz, rounded to the nearest int. 674 * Returns:
675 * @modes's hsync rate in kHz, rounded to the nearest integer. Calculates the
676 * value first if it is not yet set.
652 */ 677 */
653int drm_mode_hsync(const struct drm_display_mode *mode) 678int drm_mode_hsync(const struct drm_display_mode *mode)
654{ 679{
@@ -672,14 +697,9 @@ EXPORT_SYMBOL(drm_mode_hsync);
672 * drm_mode_vrefresh - get the vrefresh of a mode 697 * drm_mode_vrefresh - get the vrefresh of a mode
673 * @mode: mode 698 * @mode: mode
674 * 699 *
675 * Return @mode's vrefresh rate in Hz or calculate it if necessary. 700 * Returns:
676 * 701 * @modes's vrefresh rate in Hz, rounded to the nearest integer. Calculates the
677 * FIXME: why is this needed? shouldn't vrefresh be set already? 702 * value first if it is not yet set.
678 *
679 * RETURNS:
680 * Vertical refresh rate. It will be the result of actual value plus 0.5.
681 * If it is 70.288, it will return 70Hz.
682 * If it is 59.6, it will return 60Hz.
683 */ 703 */
684int drm_mode_vrefresh(const struct drm_display_mode *mode) 704int drm_mode_vrefresh(const struct drm_display_mode *mode)
685{ 705{
@@ -708,11 +728,11 @@ int drm_mode_vrefresh(const struct drm_display_mode *mode)
708EXPORT_SYMBOL(drm_mode_vrefresh); 728EXPORT_SYMBOL(drm_mode_vrefresh);
709 729
710/** 730/**
711 * drm_mode_set_crtcinfo - set CRTC modesetting parameters 731 * drm_mode_set_crtcinfo - set CRTC modesetting timing parameters
712 * @p: mode 732 * @p: mode
713 * @adjust_flags: a combination of adjustment flags 733 * @adjust_flags: a combination of adjustment flags
714 * 734 *
715 * Setup the CRTC modesetting parameters for @p, adjusting if necessary. 735 * Setup the CRTC modesetting timing parameters for @p, adjusting if necessary.
716 * 736 *
717 * - The CRTC_INTERLACE_HALVE_V flag can be used to halve vertical timings of 737 * - The CRTC_INTERLACE_HALVE_V flag can be used to halve vertical timings of
718 * interlaced modes. 738 * interlaced modes.
@@ -780,7 +800,6 @@ void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags)
780} 800}
781EXPORT_SYMBOL(drm_mode_set_crtcinfo); 801EXPORT_SYMBOL(drm_mode_set_crtcinfo);
782 802
783
784/** 803/**
785 * drm_mode_copy - copy the mode 804 * drm_mode_copy - copy the mode
786 * @dst: mode to overwrite 805 * @dst: mode to overwrite
@@ -807,6 +826,9 @@ EXPORT_SYMBOL(drm_mode_copy);
807 * 826 *
808 * Just allocate a new mode, copy the existing mode into it, and return 827 * Just allocate a new mode, copy the existing mode into it, and return
809 * a pointer to it. Used to create new instances of established modes. 828 * a pointer to it. Used to create new instances of established modes.
829 *
830 * Returns:
831 * Pointer to duplicated mode on success, NULL on error.
810 */ 832 */
811struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, 833struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
812 const struct drm_display_mode *mode) 834 const struct drm_display_mode *mode)
@@ -830,7 +852,7 @@ EXPORT_SYMBOL(drm_mode_duplicate);
830 * 852 *
831 * Check to see if @mode1 and @mode2 are equivalent. 853 * Check to see if @mode1 and @mode2 are equivalent.
832 * 854 *
833 * RETURNS: 855 * Returns:
834 * True if the modes are equal, false otherwise. 856 * True if the modes are equal, false otherwise.
835 */ 857 */
836bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2) 858bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2)
@@ -859,7 +881,7 @@ EXPORT_SYMBOL(drm_mode_equal);
859 * Check to see if @mode1 and @mode2 are equivalent, but 881 * Check to see if @mode1 and @mode2 are equivalent, but
860 * don't check the pixel clocks nor the stereo layout. 882 * don't check the pixel clocks nor the stereo layout.
861 * 883 *
862 * RETURNS: 884 * Returns:
863 * True if the modes are equal, false otherwise. 885 * True if the modes are equal, false otherwise.
864 */ 886 */
865bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1, 887bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1,
@@ -890,9 +912,10 @@ EXPORT_SYMBOL(drm_mode_equal_no_clocks_no_stereo);
890 * @maxX: maximum width 912 * @maxX: maximum width
891 * @maxY: maximum height 913 * @maxY: maximum height
892 * 914 *
893 * The DRM device (@dev) has size and pitch limits. Here we validate the 915 * This function is a helper which can be used to validate modes against size
894 * modes we probed for @dev against those limits and set their status as 916 * limitations of the DRM device/connector. If a mode is too big its status
895 * necessary. 917 * memeber is updated with the appropriate validation failure code. The list
918 * itself is not changed.
896 */ 919 */
897void drm_mode_validate_size(struct drm_device *dev, 920void drm_mode_validate_size(struct drm_device *dev,
898 struct list_head *mode_list, 921 struct list_head *mode_list,
@@ -916,9 +939,10 @@ EXPORT_SYMBOL(drm_mode_validate_size);
916 * @mode_list: list of modes to check 939 * @mode_list: list of modes to check
917 * @verbose: be verbose about it 940 * @verbose: be verbose about it
918 * 941 *
919 * Once mode list generation is complete, a caller can use this routine to 942 * This helper function can be used to prune a display mode list after
920 * remove invalid modes from a mode list. If any of the modes have a 943 * validation has been completed. All modes who's status is not MODE_OK will be
921 * status other than %MODE_OK, they are removed from @mode_list and freed. 944 * removed from the list, and if @verbose the status code and mode name is also
945 * printed to dmesg.
922 */ 946 */
923void drm_mode_prune_invalid(struct drm_device *dev, 947void drm_mode_prune_invalid(struct drm_device *dev,
924 struct list_head *mode_list, bool verbose) 948 struct list_head *mode_list, bool verbose)
@@ -948,7 +972,7 @@ EXPORT_SYMBOL(drm_mode_prune_invalid);
948 * Compare two modes, given by @lh_a and @lh_b, returning a value indicating 972 * Compare two modes, given by @lh_a and @lh_b, returning a value indicating
949 * which is better. 973 * which is better.
950 * 974 *
951 * RETURNS: 975 * Returns:
952 * Negative if @lh_a is better than @lh_b, zero if they're equivalent, or 976 * Negative if @lh_a is better than @lh_b, zero if they're equivalent, or
953 * positive if @lh_b is better than @lh_a. 977 * positive if @lh_b is better than @lh_a.
954 */ 978 */
@@ -976,9 +1000,9 @@ static int drm_mode_compare(void *priv, struct list_head *lh_a, struct list_head
976 1000
977/** 1001/**
978 * drm_mode_sort - sort mode list 1002 * drm_mode_sort - sort mode list
979 * @mode_list: list to sort 1003 * @mode_list: list of drm_display_mode structures to sort
980 * 1004 *
981 * Sort @mode_list by favorability, putting good modes first. 1005 * Sort @mode_list by favorability, moving good modes to the head of the list.
982 */ 1006 */
983void drm_mode_sort(struct list_head *mode_list) 1007void drm_mode_sort(struct list_head *mode_list)
984{ 1008{
@@ -992,8 +1016,10 @@ EXPORT_SYMBOL(drm_mode_sort);
992 * 1016 *
993 * This moves the modes from the @connector probed_modes list 1017 * This moves the modes from the @connector probed_modes list
994 * to the actual mode list. It compares the probed mode against the current 1018 * to the actual mode list. It compares the probed mode against the current
995 * list and only adds different modes. All modes unverified after this point 1019 * list and only adds different/new modes.
996 * will be removed by the prune invalid modes. 1020 *
1021 * This is just a helper functions doesn't validate any modes itself and also
1022 * doesn't prune any invalid modes. Callers need to do that themselves.
997 */ 1023 */
998void drm_mode_connector_list_update(struct drm_connector *connector) 1024void drm_mode_connector_list_update(struct drm_connector *connector)
999{ 1025{
@@ -1028,18 +1054,25 @@ void drm_mode_connector_list_update(struct drm_connector *connector)
1028EXPORT_SYMBOL(drm_mode_connector_list_update); 1054EXPORT_SYMBOL(drm_mode_connector_list_update);
1029 1055
1030/** 1056/**
1031 * drm_mode_parse_command_line_for_connector - parse command line for connector 1057 * drm_mode_parse_command_line_for_connector - parse command line modeline for connector
1032 * @mode_option: per connector mode option 1058 * @mode_option: optional per connector mode option
1033 * @connector: connector to parse line for 1059 * @connector: connector to parse modeline for
1034 * @mode: preallocated mode structure to fill out 1060 * @mode: preallocated drm_cmdline_mode structure to fill out
1061 *
1062 * This parses @mode_option command line modeline for modes and options to
1063 * configure the connector. If @mode_option is NULL the default command line
1064 * modeline in fb_mode_option will be parsed instead.
1035 * 1065 *
1036 * This parses the connector specific then generic command lines for 1066 * This uses the same parameters as the fb modedb.c, except for an extra
1037 * modes and options to configure the connector. 1067 * force-enable, force-enable-digital and force-disable bit at the end:
1038 * 1068 *
1039 * This uses the same parameters as the fb modedb.c, except for extra
1040 * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd] 1069 * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
1041 * 1070 *
1042 * enable/enable Digital/disable bit at the end 1071 * The intermediate drm_cmdline_mode structure is required to store additional
1072 * options from the command line modline like the force-enabel/disable flag.
1073 *
1074 * Returns:
1075 * True if a valid modeline has been parsed, false otherwise.
1043 */ 1076 */
1044bool drm_mode_parse_command_line_for_connector(const char *mode_option, 1077bool drm_mode_parse_command_line_for_connector(const char *mode_option,
1045 struct drm_connector *connector, 1078 struct drm_connector *connector,
@@ -1192,6 +1225,14 @@ done:
1192} 1225}
1193EXPORT_SYMBOL(drm_mode_parse_command_line_for_connector); 1226EXPORT_SYMBOL(drm_mode_parse_command_line_for_connector);
1194 1227
1228/**
1229 * drm_mode_create_from_cmdline_mode - convert a command line modeline into a DRM display mode
1230 * @dev: DRM device to create the new mode for
1231 * @cmd: input command line modeline
1232 *
1233 * Returns:
1234 * Pointer to converted mode on success, NULL on error.
1235 */
1195struct drm_display_mode * 1236struct drm_display_mode *
1196drm_mode_create_from_cmdline_mode(struct drm_device *dev, 1237drm_mode_create_from_cmdline_mode(struct drm_device *dev,
1197 struct drm_cmdline_mode *cmd) 1238 struct drm_cmdline_mode *cmd)
diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
index b3507f15d010..995c34d91ef1 100644
--- a/include/drm/drm_modes.h
+++ b/include/drm/drm_modes.h
@@ -162,6 +162,14 @@ struct drm_cmdline_mode {
162 enum drm_connector_force force; 162 enum drm_connector_force force;
163}; 163};
164 164
165/**
166 * drm_mode_is_stereo - check for stereo mode flags
167 * @mode: drm_display_mode to check
168 *
169 * Returns:
170 * True if the mode is one of the stereo modes (like side-by-side), false if
171 * not.
172 */
165static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode) 173static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode)
166{ 174{
167 return mode->flags & DRM_MODE_FLAG_3D_MASK; 175 return mode->flags & DRM_MODE_FLAG_3D_MASK;