diff options
author | Boris Brezillon <boris.brezillon@free-electrons.com> | 2014-07-22 06:09:10 -0400 |
---|---|---|
committer | Boris Brezillon <boris.brezillon@free-electrons.com> | 2015-01-21 03:45:34 -0500 |
commit | b5571e9df66c1bfb81a4a7947726c3d627d3cb41 (patch) | |
tree | b44ddd56185242f88141dc8e666c73af54b73668 /drivers/gpu/drm/drm_crtc.c | |
parent | fc83975348ebce07793e6b9f780edc3cbcffa9fc (diff) |
drm: add bus_formats and num_bus_formats fields to drm_display_info
Add bus_formats and num_bus_formats fields and
drm_display_info_set_bus_formats helper function to specify the bus
formats supported by a given display.
This information can be used by display controller drivers to configure
the output interface appropriately (i.e. RGB565, RGB666 or RGB888 on raw
RGB or LVDS busses).
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Thierry Reding <treding@nvidia.com>
Diffstat (limited to 'drivers/gpu/drm/drm_crtc.c')
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index caec5c3634bb..df90048de92e 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
@@ -762,6 +762,40 @@ static void drm_mode_remove(struct drm_connector *connector, | |||
762 | } | 762 | } |
763 | 763 | ||
764 | /** | 764 | /** |
765 | * drm_display_info_set_bus_formats - set the supported bus formats | ||
766 | * @info: display info to store bus formats in | ||
767 | * @fmts: array containing the supported bus formats | ||
768 | * @nfmts: the number of entries in the fmts array | ||
769 | * | ||
770 | * Store the supported bus formats in display info structure. | ||
771 | * See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for | ||
772 | * a full list of available formats. | ||
773 | */ | ||
774 | int drm_display_info_set_bus_formats(struct drm_display_info *info, | ||
775 | const u32 *formats, | ||
776 | unsigned int num_formats) | ||
777 | { | ||
778 | u32 *fmts = NULL; | ||
779 | |||
780 | if (!formats && num_formats) | ||
781 | return -EINVAL; | ||
782 | |||
783 | if (formats && num_formats) { | ||
784 | fmts = kmemdup(formats, sizeof(*formats) * num_formats, | ||
785 | GFP_KERNEL); | ||
786 | if (!formats) | ||
787 | return -ENOMEM; | ||
788 | } | ||
789 | |||
790 | kfree(info->bus_formats); | ||
791 | info->bus_formats = fmts; | ||
792 | info->num_bus_formats = num_formats; | ||
793 | |||
794 | return 0; | ||
795 | } | ||
796 | EXPORT_SYMBOL(drm_display_info_set_bus_formats); | ||
797 | |||
798 | /** | ||
765 | * drm_connector_get_cmdline_mode - reads the user's cmdline mode | 799 | * drm_connector_get_cmdline_mode - reads the user's cmdline mode |
766 | * @connector: connector to quwery | 800 | * @connector: connector to quwery |
767 | * | 801 | * |
@@ -923,6 +957,7 @@ void drm_connector_cleanup(struct drm_connector *connector) | |||
923 | ida_remove(&drm_connector_enum_list[connector->connector_type].ida, | 957 | ida_remove(&drm_connector_enum_list[connector->connector_type].ida, |
924 | connector->connector_type_id); | 958 | connector->connector_type_id); |
925 | 959 | ||
960 | kfree(connector->display_info.bus_formats); | ||
926 | drm_mode_object_put(dev, &connector->base); | 961 | drm_mode_object_put(dev, &connector->base); |
927 | kfree(connector->name); | 962 | kfree(connector->name); |
928 | connector->name = NULL; | 963 | connector->name = NULL; |