aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_crtc.c
diff options
context:
space:
mode:
authorBoris Brezillon <boris.brezillon@free-electrons.com>2014-07-22 06:09:10 -0400
committerBoris Brezillon <boris.brezillon@free-electrons.com>2015-01-21 03:45:34 -0500
commitb5571e9df66c1bfb81a4a7947726c3d627d3cb41 (patch)
treeb44ddd56185242f88141dc8e666c73af54b73668 /drivers/gpu/drm/drm_crtc.c
parentfc83975348ebce07793e6b9f780edc3cbcffa9fc (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.c35
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 */
774int 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}
796EXPORT_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;