Hello,
This series makes use of the MEDIA_BUS_FMT definition to describe how the data are transmitted to the display.
This will allow drivers to configure their output display bus according to the display capabilities. For example some display controllers support DPI (or raw RGB) connectors and need to specify which format will be transmitted on the DPI bus (RGB444, RGB565, RGB888, ...).
This series also adds a field to the panel_desc struct so that one can specify which format is natevely supported by a panel.
Regards,
Boris
Changes since v3: - store num_bus_formats on an unsigned int - clearly state that fmts argument (in drm_display_info_set_bus_formats function) should be an array of MEDIA_BUS_FMT_* values.
Changes since v2: - use the MEDIA_BUS_FMT macros
Changes since v1: - rename nformats into num_formats - declare num_formats as an unsigned int
Boris Brezillon (3): drm: add bus_formats and num_bus_formats fields to drm_display_info drm: panel: simple-panel: add support for bus_format retrieval drm: panel: simple-panel: add bus format information for foxlink panel
drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/panel/panel-simple.c | 6 ++++++ include/drm/drm_crtc.h | 7 +++++++ 3 files changed, 45 insertions(+)
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 --- drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 7 +++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..d3b7ed0 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,38 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/* + * drm_display_info_set_bus_formats - set the supported bus formats + * @info: display info to store bus formats in + * @fmts: array containing the supported bus formats + * @nfmts: the number of entries in the fmts array + * + * Store the suppported bus formats in display info structure. + * See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for + * a full list of available formats. + */ +int drm_display_info_set_bus_formats(struct drm_display_info *info, const u32 *fmts, + unsigned int num_fmts) +{ + u32 *formats = NULL; + + if (!fmts && num_fmts) + return -EINVAL; + + if (fmts && num_fmts) { + formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL); + if (!formats) + return -ENOMEM; + } + + kfree(info->bus_formats); + info->bus_formats = formats; + info->num_bus_formats = num_fmts; + + return 0; +} +EXPORT_SYMBOL(drm_display_info_set_bus_formats); + /** * drm_connector_get_cmdline_mode - reads the user's cmdline mode * @connector: connector to quwery diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..a35844f 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -130,6 +131,9 @@ struct drm_display_info { enum subpixel_order subpixel_order; u32 color_formats;
+ const u32 *bus_formats; + unsigned int num_bus_formats; + /* Mask of supported hdmi deep color modes */ u8 edid_hdmi_dc_modes;
@@ -982,6 +986,9 @@ extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
+extern int drm_display_info_set_bus_formats(struct drm_display_info *info, + const u32 *fmts, unsigned int nfmts); + static inline bool drm_property_type_is(struct drm_property *property, uint32_t type) {
Am Montag, den 01.12.2014, 09:20 +0100 schrieb Boris Brezillon:
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
drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 7 +++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..d3b7ed0 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,38 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/*
- drm_display_info_set_bus_formats - set the supported bus formats
- @info: display info to store bus formats in
- @fmts: array containing the supported bus formats
- @nfmts: the number of entries in the fmts array
- Store the suppported bus formats in display info structure.
- See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for
- a full list of available formats.
- */
+int drm_display_info_set_bus_formats(struct drm_display_info *info, const u32 *fmts,
unsigned int num_fmts)
+{
- u32 *formats = NULL;
- if (!fmts && num_fmts)
return -EINVAL;
- if (fmts && num_fmts) {
formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL);
if (!formats)
return -ENOMEM;
- }
- kfree(info->bus_formats);
- info->bus_formats = formats;
- info->num_bus_formats = num_fmts;
- return 0;
+} +EXPORT_SYMBOL(drm_display_info_set_bus_formats);
/**
- drm_connector_get_cmdline_mode - reads the user's cmdline mode
- @connector: connector to quwery
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..a35844f 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h>
Nothing in drm_crtc.h uses MEDIA_BUS_FMT_*, is media-bus-format.h included here for the convenience of the user of drm_display_info_set_bus_formats?
#include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -130,6 +131,9 @@ struct drm_display_info { enum subpixel_order subpixel_order; u32 color_formats;
- const u32 *bus_formats;
- unsigned int num_bus_formats;
- /* Mask of supported hdmi deep color modes */ u8 edid_hdmi_dc_modes;
@@ -982,6 +986,9 @@ extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
+extern int drm_display_info_set_bus_formats(struct drm_display_info *info,
const u32 *fmts, unsigned int nfmts);
static inline bool drm_property_type_is(struct drm_property *property, uint32_t type) {
regards Philipp
Hi Philipp,
On Mon, 01 Dec 2014 16:06:26 +0100 Philipp Zabel p.zabel@pengutronix.de wrote:
Am Montag, den 01.12.2014, 09:20 +0100 schrieb Boris Brezillon:
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
drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 7 +++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..d3b7ed0 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,38 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/*
- drm_display_info_set_bus_formats - set the supported bus formats
- @info: display info to store bus formats in
- @fmts: array containing the supported bus formats
- @nfmts: the number of entries in the fmts array
- Store the suppported bus formats in display info structure.
- See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for
- a full list of available formats.
- */
+int drm_display_info_set_bus_formats(struct drm_display_info *info, const u32 *fmts,
unsigned int num_fmts)
+{
- u32 *formats = NULL;
- if (!fmts && num_fmts)
return -EINVAL;
- if (fmts && num_fmts) {
formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL);
if (!formats)
return -ENOMEM;
- }
- kfree(info->bus_formats);
- info->bus_formats = formats;
- info->num_bus_formats = num_fmts;
- return 0;
+} +EXPORT_SYMBOL(drm_display_info_set_bus_formats);
/**
- drm_connector_get_cmdline_mode - reads the user's cmdline mode
- @connector: connector to quwery
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..a35844f 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h>
Nothing in drm_crtc.h uses MEDIA_BUS_FMT_*, is media-bus-format.h included here for the convenience of the user of drm_display_info_set_bus_formats?
Yes it is. Actually in the first versions MEDIA_BUS_FMT_* values were part of an enum. Still, I think keeping this include will help people finding where those MEDIA_BUS_FMT_* macros are defined.
Regards,
Boris
Provide a way to specify panel requirement in terms of supported media bus format (particularly useful for panels connected to an RGB or LVDS bus).
Signed-off-by: Boris Brezillon boris.brezillon@free-electrons.com --- drivers/gpu/drm/panel/panel-simple.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 23de22f..66838a5 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -61,6 +61,8 @@ struct panel_desc { unsigned int disable; unsigned int unprepare; } delay; + + u32 bus_format; };
struct panel_simple { @@ -111,6 +113,9 @@ static int panel_simple_get_fixed_modes(struct panel_simple *panel) connector->display_info.bpc = panel->desc->bpc; connector->display_info.width_mm = panel->desc->size.width; connector->display_info.height_mm = panel->desc->size.height; + if (panel->desc->bus_format) + drm_display_info_set_bus_formats(&connector->display_info, + &panel->desc->bus_format, 1);
return num; }
Foxlink's fl500wvr00-a0t supports RGB888 format.
Signed-off-by: Boris Brezillon boris.brezillon@free-electrons.com --- drivers/gpu/drm/panel/panel-simple.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 66838a5..695f406 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -545,6 +545,7 @@ static const struct panel_desc foxlink_fl500wvr00_a0t = { .width = 108, .height = 65, }, + .bus_format = MEDIA_BUS_FMT_RGB888_1X24, };
static const struct drm_display_mode innolux_n116bge_mode = {
Hello,
This series makes use of the MEDIA_BUS_FMT definition to describe how the data are transmitted to the display.
This will allow drivers to configure their output display bus according to the display capabilities. For example some display controllers support DPI (or raw RGB) connectors and need to specify which format will be transmitted on the DPI bus (RGB444, RGB565, RGB888, ...).
This series also adds a field to the panel_desc struct so that one can specify which format is natevely supported by a panel.
Regards,
Boris
Changes since v3: - store num_bus_formats on an unsigned int - clearly state that fmts argument (in drm_display_info_set_bus_formats function) should be an array of MEDIA_BUS_FMT_* values.
Changes since v2: - use the MEDIA_BUS_FMT macros
Changes since v1: - rename nformats into num_formats - declare num_formats as an unsigned int
Boris Brezillon (3): drm: add bus_formats and num_bus_formats fields to drm_display_info drm: panel: simple-panel: add support for bus_format retrieval drm: panel: simple-panel: add bus format information for foxlink panel
drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/panel/panel-simple.c | 6 ++++++ include/drm/drm_crtc.h | 7 +++++++ 3 files changed, 45 insertions(+)
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 --- drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 7 +++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..d3b7ed0 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,38 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/* + * drm_display_info_set_bus_formats - set the supported bus formats + * @info: display info to store bus formats in + * @fmts: array containing the supported bus formats + * @nfmts: the number of entries in the fmts array + * + * Store the suppported bus formats in display info structure. + * See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for + * a full list of available formats. + */ +int drm_display_info_set_bus_formats(struct drm_display_info *info, const u32 *fmts, + unsigned int num_fmts) +{ + u32 *formats = NULL; + + if (!fmts && num_fmts) + return -EINVAL; + + if (fmts && num_fmts) { + formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL); + if (!formats) + return -ENOMEM; + } + + kfree(info->bus_formats); + info->bus_formats = formats; + info->num_bus_formats = num_fmts; + + return 0; +} +EXPORT_SYMBOL(drm_display_info_set_bus_formats); + /** * drm_connector_get_cmdline_mode - reads the user's cmdline mode * @connector: connector to quwery diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..a35844f 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -130,6 +131,9 @@ struct drm_display_info { enum subpixel_order subpixel_order; u32 color_formats;
+ const u32 *bus_formats; + unsigned int num_bus_formats; + /* Mask of supported hdmi deep color modes */ u8 edid_hdmi_dc_modes;
@@ -982,6 +986,9 @@ extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
+extern int drm_display_info_set_bus_formats(struct drm_display_info *info, + const u32 *fmts, unsigned int nfmts); + static inline bool drm_property_type_is(struct drm_property *property, uint32_t type) {
On Mon, Dec 01, 2014 at 09:20:59AM +0100, Boris Brezillon wrote:
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
drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 7 +++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..d3b7ed0 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,38 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/*
This needs a /** marker to make it a valid kerneldoc comment.
- drm_display_info_set_bus_formats - set the supported bus formats
- @info: display info to store bus formats in
- @fmts: array containing the supported bus formats
- @nfmts: the number of entries in the fmts array
- Store the suppported bus formats in display info structure.
- See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for
- a full list of available formats.
- */
+int drm_display_info_set_bus_formats(struct drm_display_info *info, const u32 *fmts,
This one still exceeds 80-characters per line, but perhaps I'm reviewing the wrong patch? Also I think fmts should be formats here.
unsigned int num_fmts)
And this should be num_formats, for consistency. Also make sure to keep this consistent with the kerneldoc.
+{
- u32 *formats = NULL;
If you name the parameter formats, maybe bus_formats would be a good alternative for this local variable. Or fmts here. I think it's most important that the public API gets the more idiomatic name.
- if (!fmts && num_fmts)
return -EINVAL;
- if (fmts && num_fmts) {
formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL);
if (!formats)
return -ENOMEM;
- }
- kfree(info->bus_formats);
- info->bus_formats = formats;
- info->num_bus_formats = num_fmts;
- return 0;
+} +EXPORT_SYMBOL(drm_display_info_set_bus_formats);
I think you'll want to call kfree() on the bus_formats array from drm_connector_cleanup() as well to make sure you don't leak this on driver unload.
Thierry
Hi Thierry,
On Mon, 1 Dec 2014 16:42:58 +0100 Thierry Reding thierry.reding@gmail.com wrote:
On Mon, Dec 01, 2014 at 09:20:59AM +0100, Boris Brezillon wrote:
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
drivers/gpu/drm/drm_crtc.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 7 +++++++ 2 files changed, 39 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..d3b7ed0 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,38 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/*
This needs a /** marker to make it a valid kerneldoc comment.
Yep, I'll fix that.
- drm_display_info_set_bus_formats - set the supported bus formats
- @info: display info to store bus formats in
- @fmts: array containing the supported bus formats
- @nfmts: the number of entries in the fmts array
- Store the suppported bus formats in display info structure.
- See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for
- a full list of available formats.
- */
+int drm_display_info_set_bus_formats(struct drm_display_info *info, const u32 *fmts,
This one still exceeds 80-characters per line, but perhaps I'm reviewing the wrong patch? Also I think fmts should be formats here.
unsigned int num_fmts)
And this should be num_formats, for consistency. Also make sure to keep this consistent with the kerneldoc.
+{
- u32 *formats = NULL;
If you name the parameter formats, maybe bus_formats would be a good alternative for this local variable. Or fmts here. I think it's most important that the public API gets the more idiomatic name.
Okay, I'll rework the argument and variable names.
- if (!fmts && num_fmts)
return -EINVAL;
- if (fmts && num_fmts) {
formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL);
if (!formats)
return -ENOMEM;
- }
- kfree(info->bus_formats);
- info->bus_formats = formats;
- info->num_bus_formats = num_fmts;
- return 0;
+} +EXPORT_SYMBOL(drm_display_info_set_bus_formats);
I think you'll want to call kfree() on the bus_formats array from drm_connector_cleanup() as well to make sure you don't leak this on driver unload.
Indeed, I'll fix that memory leak.
Thanks,
Boris
Provide a way to specify panel requirement in terms of supported media bus format (particularly useful for panels connected to an RGB or LVDS bus).
Signed-off-by: Boris Brezillon boris.brezillon@free-electrons.com --- drivers/gpu/drm/panel/panel-simple.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 23de22f..66838a5 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -61,6 +61,8 @@ struct panel_desc { unsigned int disable; unsigned int unprepare; } delay; + + u32 bus_format; };
struct panel_simple { @@ -111,6 +113,9 @@ static int panel_simple_get_fixed_modes(struct panel_simple *panel) connector->display_info.bpc = panel->desc->bpc; connector->display_info.width_mm = panel->desc->size.width; connector->display_info.height_mm = panel->desc->size.height; + if (panel->desc->bus_format) + drm_display_info_set_bus_formats(&connector->display_info, + &panel->desc->bus_format, 1);
return num; }
Foxlink's fl500wvr00-a0t supports RGB888 format.
Signed-off-by: Boris Brezillon boris.brezillon@free-electrons.com --- drivers/gpu/drm/panel/panel-simple.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 66838a5..695f406 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -545,6 +545,7 @@ static const struct panel_desc foxlink_fl500wvr00_a0t = { .width = 108, .height = 65, }, + .bus_format = MEDIA_BUS_FMT_RGB888_1X24, };
static const struct drm_display_mode innolux_n116bge_mode = {
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 --- Hi,
Sorry for the noise: I ran checkpatch after sending the series and it found a typo and two "line over 80 characters" warnings.
This version fixes those warnings.
Regards,
Boris
drivers/gpu/drm/drm_crtc.c | 33 +++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 8 ++++++++ 2 files changed, 41 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..20030ec 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,39 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/* + * drm_display_info_set_bus_formats - set the supported bus formats + * @info: display info to store bus formats in + * @fmts: array containing the supported bus formats + * @nfmts: the number of entries in the fmts array + * + * Store the supported bus formats in display info structure. + * See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for + * a full list of available formats. + */ +int drm_display_info_set_bus_formats(struct drm_display_info *info, + const u32 *fmts, + unsigned int num_fmts) +{ + u32 *formats = NULL; + + if (!fmts && num_fmts) + return -EINVAL; + + if (fmts && num_fmts) { + formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL); + if (!formats) + return -ENOMEM; + } + + kfree(info->bus_formats); + info->bus_formats = formats; + info->num_bus_formats = num_fmts; + + return 0; +} +EXPORT_SYMBOL(drm_display_info_set_bus_formats); + /** * drm_connector_get_cmdline_mode - reads the user's cmdline mode * @connector: connector to quwery diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..65dd08a 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -130,6 +131,9 @@ struct drm_display_info { enum subpixel_order subpixel_order; u32 color_formats;
+ const u32 *bus_formats; + unsigned int num_bus_formats; + /* Mask of supported hdmi deep color modes */ u8 edid_hdmi_dc_modes;
@@ -982,6 +986,10 @@ extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
+extern int drm_display_info_set_bus_formats(struct drm_display_info *info, + const u32 *fmts, + unsigned int nfmts); + static inline bool drm_property_type_is(struct drm_property *property, uint32_t type) {
Hi Boris,
Thank you for the patch.
On Monday 01 December 2014 09:42:15 Boris Brezillon wrote:
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
Hi,
Sorry for the noise: I ran checkpatch after sending the series and it found a typo and two "line over 80 characters" warnings.
This version fixes those warnings.
Please remember to increment the version number next time, it gets confusing otherwise when people start asking questions such as "which v4 ?".
drivers/gpu/drm/drm_crtc.c | 33 +++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 8 ++++++++ 2 files changed, 41 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..20030ec 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,39 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/*
- drm_display_info_set_bus_formats - set the supported bus formats
- @info: display info to store bus formats in
- @fmts: array containing the supported bus formats
- @nfmts: the number of entries in the fmts array
- Store the supported bus formats in display info structure.
- See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h
for
- a full list of available formats.
- */
+int drm_display_info_set_bus_formats(struct drm_display_info *info,
const u32 *fmts,
unsigned int num_fmts)
+{
- u32 *formats = NULL;
- if (!fmts && num_fmts)
return -EINVAL;
- if (fmts && num_fmts) {
formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL);
if (!formats)
return -ENOMEM;
- }
- kfree(info->bus_formats);
- info->bus_formats = formats;
- info->num_bus_formats = num_fmts;
- return 0;
+} +EXPORT_SYMBOL(drm_display_info_set_bus_formats);
/**
- drm_connector_get_cmdline_mode - reads the user's cmdline mode
- @connector: connector to quwery
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..65dd08a 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -130,6 +131,9 @@ struct drm_display_info { enum subpixel_order subpixel_order; u32 color_formats;
- const u32 *bus_formats;
- unsigned int num_bus_formats;
- /* Mask of supported hdmi deep color modes */ u8 edid_hdmi_dc_modes;
@@ -982,6 +986,10 @@ extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
+extern int drm_display_info_set_bus_formats(struct drm_display_info *info,
const u32 *fmts,
unsigned int nfmts);
static inline bool drm_property_type_is(struct drm_property *property, uint32_t type) {
Hi Laurent,
On Mon, 01 Dec 2014 15:00:15 +0200 Laurent Pinchart laurent.pinchart@ideasonboard.com wrote:
Hi Boris,
Thank you for the patch.
On Monday 01 December 2014 09:42:15 Boris Brezillon wrote:
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
Hi,
Sorry for the noise: I ran checkpatch after sending the series and it found a typo and two "line over 80 characters" warnings.
This version fixes those warnings.
Please remember to increment the version number next time, it gets confusing otherwise when people start asking questions such as "which v4 ?".
Okay. I wasn't sure, and eventually decided to just prefix the version with RESEND because these were only cosmetic changes, and I fixed them right after sending the v4.
I'll know for next time ;-).
Thanks,
Boris
Am Montag, den 01.12.2014, 09:42 +0100 schrieb Boris Brezillon:
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: Philipp Zabel p.zabel@pengutronix.de
Hi,
Sorry for the noise: I ran checkpatch after sending the series and it found a typo and two "line over 80 characters" warnings.
This version fixes those warnings.
Regards,
Boris
drivers/gpu/drm/drm_crtc.c | 33 +++++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 8 ++++++++ 2 files changed, 41 insertions(+)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index e79c8d3..20030ec 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -763,6 +763,39 @@ static void drm_mode_remove(struct drm_connector *connector, drm_mode_destroy(connector->dev, mode); }
+/*
- drm_display_info_set_bus_formats - set the supported bus formats
- @info: display info to store bus formats in
- @fmts: array containing the supported bus formats
- @nfmts: the number of entries in the fmts array
- Store the supported bus formats in display info structure.
- See MEDIA_BUS_FMT_* definitions in include/uapi/linux/media-bus-format.h for
- a full list of available formats.
- */
+int drm_display_info_set_bus_formats(struct drm_display_info *info,
const u32 *fmts,
unsigned int num_fmts)
+{
- u32 *formats = NULL;
- if (!fmts && num_fmts)
return -EINVAL;
- if (fmts && num_fmts) {
formats = kmemdup(fmts, sizeof(*fmts) * num_fmts, GFP_KERNEL);
if (!formats)
return -ENOMEM;
- }
- kfree(info->bus_formats);
- info->bus_formats = formats;
- info->num_bus_formats = num_fmts;
- return 0;
+} +EXPORT_SYMBOL(drm_display_info_set_bus_formats);
/**
- drm_connector_get_cmdline_mode - reads the user's cmdline mode
- @connector: connector to quwery
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index c40070a..65dd08a 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -31,6 +31,7 @@ #include <linux/idr.h> #include <linux/fb.h> #include <linux/hdmi.h> +#include <linux/media-bus-format.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -130,6 +131,9 @@ struct drm_display_info { enum subpixel_order subpixel_order; u32 color_formats;
- const u32 *bus_formats;
- unsigned int num_bus_formats;
- /* Mask of supported hdmi deep color modes */ u8 edid_hdmi_dc_modes;
@@ -982,6 +986,10 @@ extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, struct edid *edid);
+extern int drm_display_info_set_bus_formats(struct drm_display_info *info,
const u32 *fmts,
unsigned int nfmts);
static inline bool drm_property_type_is(struct drm_property *property, uint32_t type) {
dri-devel@lists.freedesktop.org