OMAP: DSS2: Framework to handle omap version specific DSS features
Subsystems (3)
v2 cover OMAP: DSS2: Framework to handle omap version specific DSS features
This is a simple approach to prevent scattered cpu_is_omapxxxx checks in DSS2 by bringing all omap version specific DSS features/values to one single place, initialize them and expose a set of functions to DSS2 driver files which return the value/existance of a feature.
This method provides the following:
-A set of functions which give the value of a feature. -Functions which add and return the start and end bits of a register field
which varies across omaps.
-A function which checks if a DSS2 feature exists or not on the present
omap (omap_dss_has_feature)
Whenever a new DSS feature is introduced, its value/existance is specified for all omaps in omap_dss_feature_init().
This patch also fills up a minimal list of features in omap_dss_features_init(). The second patch in the series makes use of dss_features to remove some of the existing omapxxxx checks.
Archit Taneja (2):
OMAP: DSS2: Introduce dss_features files
OMAP: DSS2: Use dss_features framework on DSS2 code
arch/arm/plat-omap/include/plat/display.h | 31 ----- drivers/video/omap2/dss/Makefile | 2 +- drivers/video/omap2/dss/core.c | 3 + drivers/video/omap2/dss/dispc.c | 56 +++++---- drivers/video/omap2/dss/dss_features.c | 171 +++++++++++++++++++++++++++++ drivers/video/omap2/dss/dss_features.h | 51 +++++++++ drivers/video/omap2/dss/manager.c | 33 +++--- drivers/video/omap2/dss/overlay.c | 24 ++--- 8 files changed, 283 insertions(+), 88 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.h
--
Version 2:
- Features are initialized statically as opposed to runtime before, function naming for dss_features files has changed.
Version 1:
https://patchwork.kernel.org/patch/134431/
PATCH v2 1/2 OMAP: DSS2: Introduce dss_features files
Add dss_features.c and dss_features.h for the dss_features framework
--- drivers/video/omap2/dss/dss_features.c | 171 ++++++++++++++++++++++++++++++++ drivers/video/omap2/dss/dss_features.h | 51 ++++++++++ 2 files changed, 222 insertions(+), 0 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.h
drivers/video/omap2/dss/dss_features.c new file +171 -0
@@ -0,0 +1,171 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.c +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License version 2 as published by +* the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/err.h> +#include <linux/slab.h> + +#include <plat/display.h> +#include <plat/cpu.h> + +#include "dss_features.h" + +/* Defines a generic omap register field */ +struct dss_reg_field { +enum dss_feat_reg_field id; +u8 start, end; +}; + +struct omap_dss_features { +struct dss_reg_field reg_fields[MAX_DSS_REG_FIELDS ]; +u32 has_feature; + +int num_mgrs; +int num_ovls; +enum omap_display_type supported_displays[MAX_DSS_MANAGERS ]; +enum omap_color_mode supported_color_modes[MAX_DSS_OVERLAYS ]; +}; + +/* This struct is assigned to one of the below during initialization */ +static struct omap_dss_features omap_current_dss_features; + +/* OMAP2 DSS Features */ +static struct omap_dss_features omap2_dss_features = { + .reg_fields = { + {FIRHINC ,11 ,0 }, + {FIRVINC ,27 ,16 }, + {FIFOLOWTHRESHOLD ,8 ,0 }, + {FIFOHIGHTHRESHOLD ,24 ,16 }, + {FIFOSIZE ,8 ,0 }, + }, + + .num_mgrs =2 , + .num_ovls =3 , + .supported_displays = { +/* OMAP_DSS_CHANNEL_LCD */ +OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | +OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI , + +/* OMAP_DSS_CHANNEL_DIGIT */ +OMAP_DISPLAY_TYPE_VENC , + }, + .supported_color_modes = { +/* OMAP_DSS_GFX */ +OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | +OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | +OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P , + +/* OMAP_DSS_VIDEO1 */ +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY , + +/* OMAP_DSS_VIDEO2 */ +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY , + }, +}; + +/* OMAP3 DSS Features */ +static struct omap_dss_features omap3_dss_features = { + .reg_fields = { + {FIRHINC ,12 ,0 }, + {FIRVINC ,28 ,16 }, + {FIFOLOWTHRESHOLD ,11 ,0 }, + {FIFOHIGHTHRESHOLD ,27 ,16 }, + {FIFOSIZE ,10 ,0 }, + }, + .has_feature =FEAT_GLOBAL_ALPHA , + + .num_mgrs =2 , + .num_ovls =3 , + .supported_displays = { +/* OMAP_DSS_CHANNEL_LCD */ +OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | +OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI , + +/* OMAP_DSS_CHANNEL_DIGIT */ +OMAP_DISPLAY_TYPE_VENC , + }, + .supported_color_modes = { +/* OMAP_DSS_GFX */ +OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | +OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_ARGB32 | +OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , + +/* OMAP_DSS_VIDEO1 */ +OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | +OMAP_DSS_COLOR_YUV2 |OMAP_DSS_COLOR_UYVY , + +/* OMAP_DSS_VIDEO2 */ +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY |OMAP_DSS_COLOR_ARGB32 | +OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , + }, +}; + +/* Functions returning values related to a DSS feature */ +int dss_feat_get_num_mgrs (void ) +{ +return omap_current_dss_features.num_mgrs; +} + +int dss_feat_get_num_ovls (void ) +{ +return omap_current_dss_features.num_ovls; +} + +enum omap_display_type dss_feat_get_supported_displays (int id) +{ +return omap_current_dss_features.supported_displays[id]; +} + +enum omap_color_mode dss_feat_get_supported_color_modes (int id) +{ +return omap_current_dss_features.supported_color_modes[id]; +} + +/* DSS has_feature check */ +bool dss_has_feature (enum dss_feat_id id) +{ +return omap_current_dss_features.has_feature & id; +} + +void dss_feat_get_reg_field (enum dss_feat_reg_field id,u8 *start,u8 *end) +{ + *start = omap_current_dss_features.reg_fields[id].start; + *end = omap_current_dss_features.reg_fields[id].end; +} + +void dss_features_init (void ) +{ +if (cpu_is_omap24xx ()) + omap_current_dss_features = omap2_dss_features; +else + omap_current_dss_features = omap3_dss_features; +}
drivers/video/omap2/dss/dss_features.h new file +51 -0
51 lines not on this page · raw message
Signature · 1 line
1.7.0.4
Re: [PATCH v2 1/2] OMAP: DSS2: Introduce dss_features files
Hi,
Quoted 43 lines · ext Archit Taneja
Add
dss_features.canddss_features.hfor thedss_featuresframeworkSigned-off-by Archit Taneja <[email protected]>--- drivers/video/omap2/dss/dss_features.c | 171 ++++++++++++++++++++++++++++++++ drivers/video/omap2/dss/dss_features.h | 51 ++++++++++ 2 files changed, 222 insertions(+), 0 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.hdrivers/video/omap2/dss/dss_features.c new file +27
-0@@ -0,0 +1,171 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.c +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License version 2 as published by +* the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/err.h> +#include <linux/slab.h> + +#include <plat/display.h> +#include <plat/cpu.h> +
drivers/video/omap2/dss/dss_features.c line 37
Quoted 10 lines
drivers/video/omap2/dss/dss_features.c new file +10
-0+#include "dss_features.h" + +/* Defines a generic omap register field */ +struct dss_reg_field { +enum dss_feat_reg_field id; +u8 start, end; +}; + +struct omap_dss_features { +struct dss_reg_field reg_fields[MAX_DSS_REG_FIELDS ];
Perhaps this should be a pointer to a list, and add a separate field for num_reg_fields. That way you don't need a MAX_DSS_REG_FIELDS definition.
drivers/video/omap2/dss/dss_features.c line 43
Quoted 6 lines
drivers/video/omap2/dss/dss_features.c new file +6
-0+u32 has_feature; + +int num_mgrs; +int num_ovls; +enum omap_display_type supported_displays[MAX_DSS_MANAGERS ]; +enum omap_color_mode supported_color_modes[MAX_DSS_OVERLAYS ];
Perhaps same could be done here.
drivers/video/omap2/dss/dss_features.c line 56
Quoted 13 lines
drivers/video/omap2/dss/dss_features.c new file +13
-0+}; + +/* This struct is assigned to one of the below during initialization */ +static struct omap_dss_features omap_current_dss_features; + +/* OMAP2 DSS Features */ +static struct omap_dss_features omap2_dss_features = { + .reg_fields = { + {FIRHINC ,11 ,0 }, + {FIRVINC ,27 ,16 }, + {FIFOLOWTHRESHOLD ,8 ,0 }, + {FIFOHIGHTHRESHOLD ,24 ,16 }, + {FIFOSIZE ,8 ,0 },
You should have space after { and before }.
Quoted 151 lines
drivers/video/omap2/dss/dss_features.c new file +115
-0+ }, + + .num_mgrs = 2, + .num_ovls = 3, + .supported_displays = { +/* OMAP_DSS_CHANNEL_LCD */ +OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | +OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI , + +/* OMAP_DSS_CHANNEL_DIGIT */ + OMAP_DISPLAY_TYPE_VENC, + }, + .supported_color_modes = { +/* OMAP_DSS_GFX */ +OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | +OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | +OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P , + +/* OMAP_DSS_VIDEO1 */ +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY , + +/* OMAP_DSS_VIDEO2 */ +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | + OMAP_DSS_COLOR_UYVY, + }, +}; + +/* OMAP3 DSS Features */ +static struct omap_dss_features omap3_dss_features = { + .reg_fields = { + {FIRHINC ,12 ,0 }, + {FIRVINC ,28 ,16 }, + {FIFOLOWTHRESHOLD ,11 ,0 }, + {FIFOHIGHTHRESHOLD ,27 ,16 }, + {FIFOSIZE ,10 ,0 }, + }, + .has_feature =FEAT_GLOBAL_ALPHA , + + .num_mgrs =2 , + .num_ovls =3 , + .supported_displays = { +/* OMAP_DSS_CHANNEL_LCD */ +OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | +OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI , + +/* OMAP_DSS_CHANNEL_DIGIT */ +OMAP_DISPLAY_TYPE_VENC , + }, + .supported_color_modes = { +/* OMAP_DSS_GFX */ +OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | +OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_ARGB32 | +OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , + +/* OMAP_DSS_VIDEO1 */ +OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | +OMAP_DSS_COLOR_YUV2 |OMAP_DSS_COLOR_UYVY , + +/* OMAP_DSS_VIDEO2 */ +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY |OMAP_DSS_COLOR_ARGB32 | +OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , + }, +}; + +/* Functions returning values related to a DSS feature */ +int dss_feat_get_num_mgrs (void ) +{ +return omap_current_dss_features.num_mgrs; +} + +int dss_feat_get_num_ovls (void ) +{ +return omap_current_dss_features.num_ovls; +} + +enum omap_display_type dss_feat_get_supported_displays (int id) +{ +return omap_current_dss_features.supported_displays[id]; +} + +enum omap_color_mode dss_feat_get_supported_color_modes (int id) +{ +return omap_current_dss_features.supported_color_modes[id]; +} + +/* DSS has_feature check */ +bool dss_has_feature (enum dss_feat_id id) +{ +return omap_current_dss_features.has_feature & id; +} + +void dss_feat_get_reg_field (enum dss_feat_reg_field id,u8 *start,u8 *end) +{ + *start = omap_current_dss_features.reg_fields[id].start; + *end = omap_current_dss_features.reg_fields[id].end; +} + +void dss_features_init (void ) +{ +if (cpu_is_omap24xx ()) + omap_current_dss_features = omap2_dss_features; +else + omap_current_dss_features = omap3_dss_features; +}drivers/video/omap2/dss/dss_features.h new file +30
-0@@ -0,0 +1,51 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.h +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License version 2 as published by +* the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __OMAP2_DSS_FEATURES_H +#define __OMAP2_DSS_FEATURES_H + +#define MAX_DSS_MANAGERS 2 +#define MAX_DSS_OVERLAYS 3 +#define MAX_DSS_REG_FIELDS 10 + +/* DSS has feature id */ +enum dss_feat_id { +FEAT_GLOBAL_ALPHA =1 <<0 , + FEAT_GLOBAL_ALPHA_VID1 = 1 << 1,
drivers/video/omap2/dss/dss_features.h line 40
Quoted 10 lines
drivers/video/omap2/dss/dss_features.h new file +10
-0+}; + +/* DSS register field id */ +enum dss_feat_reg_field { +FIRHINC , +FIRVINC , +FIFOHIGHTHRESHOLD , +FIFOLOWTHRESHOLD , +FIFOSIZE , +};
These enums should also have some prefix. FEAT_REG?
drivers/video/omap2/dss/dss_features.h line 46
Quoted 6 lines
drivers/video/omap2/dss/dss_features.h new file +6
-0+ +/* DSS Feature Functions */ +int dss_feat_get_num_mgrs (void ); +int dss_feat_get_num_ovls (void ); +enum omap_display_type dss_feat_get_supported_displays (int id); +enum omap_color_mode dss_feat_get_supported_color_modes (int id);
These functions are a bit confusing. I know they are similar to what already exists in DSS driver for overlays and managers, but...
Using get_num_mgrs() and then looping through then would suggest that the parameter to get_supported_displays() would be an index to an array (which it is), but at the same time the parameter is an overlay ID. Perhaps enum omap_plane and enum omap_channel from display.h could be used here?
Which reminds me that the names of those enums in display.h should be also reviewed... A global "omap_channel" is not very descriptive =). Should perhaps be omap_dss_channel or manager".
Tomi
RE: [PATCH v2 1/2] OMAP: DSS2: Introduce dss_features files
Hi,
Quoted 51 lines · Tomi Valkeinen
Hi,
Quoted 5 lines · ext Archit Taneja
Add
dss_features.canddss_features.hfor thedss_featuresframeworkSigned-off-by Archit Taneja <[email protected]>--- drivers/video/omap2/dss/dss_features.c | 171++++++++++++++++++++++++++++++++
Quoted 42 lines
drivers/video/omap2/dss/dss_features.h | 51 ++++++++++ 2 files changed, 222 insertions(+), 0 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.hdrivers/video/omap2/dss/dss_features.c new file +11
-0@@ -0,0 +1,171 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.c +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or +modify it +* under the terms of the GNU General Public License version 2 as +published by + * the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, +but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +License for + * more details.
+ *
+ * You should have received a copy of the GNU General Public License +along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */drivers/video/omap2/dss/dss_features.c new file +12
-0+ +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/err.h> +#include <linux/slab.h> + +#include <plat/display.h> +#include <plat/cpu.h> + +#include "dss_features.h" + +/* Defines a generic omap register field */ struct dss_reg_field { + enum
dss_feat_reg_fieldid; + u8 start, end;
Quoted 8 lines
drivers/video/omap2/dss/dss_features.c line 37
Quoted 4 lines
drivers/video/omap2/dss/dss_features.c new file +4
-0+}; + +struct omap_dss_features { +struct dss_reg_field reg_fields[MAX_DSS_REG_FIELDS ];Perhaps this should be a pointer to a list, and add a separate field for
num_reg_fields. That way you don't need aMAX_DSS_REG_FIELDSdefinition.
If it is a pointer to a list then we can't initialize things statically, won't we need functions at runtime to add to the list of reg_fields etc, this is what I did in v1?
Quoted 10 lines
drivers/video/omap2/dss/dss_features.c line 43
Quoted 7 lines
drivers/video/omap2/dss/dss_features.c new file +6
-0+u32 has_feature; + +int num_mgrs; +int num_ovls; +enum omap_display_type supported_displays[MAX_DSS_MANAGERS ]; +enum omap_color_mode supported_color_modes[MAX_DSS_OVERLAYS ];Perhaps same could be done here.
Quoted 13 lines
drivers/video/omap2/dss/dss_features.c line 56
Quoted 11 lines
drivers/video/omap2/dss/dss_features.c new file +11
-0+}; + +/* This struct is assigned to one of the below during initialization +*/ static struct omap_dss_features omap_current_dss_features; + +/* OMAP2 DSS Features */ +static struct omap_dss_features omap2_dss_features = { + .reg_fields = { + {FIRHINC ,11 ,0 }, + {FIRVINC ,27 ,16 }, + {FIFOLOWTHRESHOLD ,8 ,0 }, + {FIFOHIGHTHRESHOLD ,24 ,16 }, + {FIFOSIZE ,8 ,0 },You should have space after { and before }.
I will correct this.
Quoted 163 lines
Quoted 140 lines
drivers/video/omap2/dss/dss_features.c new file +103
-0+ }, + + .num_mgrs = 2, + .num_ovls = 3, + .supported_displays = { +/* OMAP_DSS_CHANNEL_LCD */ +OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | +OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI , + +/* OMAP_DSS_CHANNEL_DIGIT */ + OMAP_DISPLAY_TYPE_VENC, + }, + .supported_color_modes = { +/* OMAP_DSS_GFX */ +OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | +OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | +OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P , + +/* OMAP_DSS_VIDEO1 */ +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY , + +/* OMAP_DSS_VIDEO2 */ +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | + OMAP_DSS_COLOR_UYVY, + }, +}; + +/* OMAP3 DSS Features */ +static struct omap_dss_features omap3_dss_features = { + .reg_fields = { + {FIRHINC ,12 ,0 }, + {FIRVINC ,28 ,16 }, + {FIFOLOWTHRESHOLD ,11 ,0 }, + {FIFOHIGHTHRESHOLD ,27 ,16 }, + {FIFOSIZE ,10 ,0 }, + }, + .has_feature =FEAT_GLOBAL_ALPHA , + + .num_mgrs =2 , + .num_ovls =3 , + .supported_displays = { +/* OMAP_DSS_CHANNEL_LCD */ +OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | +OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI , + +/* OMAP_DSS_CHANNEL_DIGIT */ +OMAP_DISPLAY_TYPE_VENC , + }, + .supported_color_modes = { +/* OMAP_DSS_GFX */ +OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | +OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_ARGB32 | +OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , + +/* OMAP_DSS_VIDEO1 */ +OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P | +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | +OMAP_DSS_COLOR_YUV2 |OMAP_DSS_COLOR_UYVY , + +/* OMAP_DSS_VIDEO2 */ +OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | +OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | +OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | +OMAP_DSS_COLOR_UYVY |OMAP_DSS_COLOR_ARGB32 | +OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , + }, +}; + +/* Functions returning values related to a DSS feature */ int +dss_feat_get_num_mgrs (void ) { +return omap_current_dss_features.num_mgrs; +} + +int dss_feat_get_num_ovls (void ) +{ +return omap_current_dss_features.num_ovls; +} + +enum omap_display_type dss_feat_get_supported_displays (int id) { + return omap_current_dss_features.supported_displays[id]; +} + +enum omap_color_mode dss_feat_get_supported_color_modes (int id) { + return omap_current_dss_features.supported_color_modes[id]; +} + +/* DSS has_feature check */ +bool dss_has_feature (enum dss_feat_id id) { +return omap_current_dss_features.has_feature & id; } + +void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 +*end) { + *start = omap_current_dss_features.reg_fields[id].start; + *end = omap_current_dss_features.reg_fields[id].end; +} + +void dss_features_init (void ) +{ +if (cpu_is_omap24xx ()) + omap_current_dss_features = omap2_dss_features; +else + omap_current_dss_features = omap3_dss_features; }drivers/video/omap2/dss/dss_features.h new file +11
-0@@ -0,0 +1,51 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.h +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or +modify it +* under the terms of the GNU General Public License version 2 as +published by + * the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, +but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +License for + * more details.
+ *
+ * You should have received a copy of the GNU General Public License +along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */drivers/video/omap2/dss/dss_features.h new file +12
-0+ +#ifndef __OMAP2_DSS_FEATURES_H +#define __OMAP2_DSS_FEATURES_H + +#define MAX_DSS_MANAGERS 2 +#define MAX_DSS_OVERLAYS 3 +#define MAX_DSS_REG_FIELDS 10 + +/* DSS has feature id */ +enum dss_feat_id { +FEAT_GLOBAL_ALPHA =1 <<0 , + FEAT_GLOBAL_ALPHA_VID1 = 1 << 1,drivers/video/omap2/dss/dss_features.h line 40
Quoted 10 lines
drivers/video/omap2/dss/dss_features.h new file +10
-0+}; + +/* DSS register field id */ +enum dss_feat_reg_field { +FIRHINC , +FIRVINC , +FIFOHIGHTHRESHOLD , +FIFOLOWTHRESHOLD , +FIFOSIZE , +};These enums should also have some prefix.
FEAT_REG?drivers/video/omap2/dss/dss_features.h
Quoted 6 lines
drivers/video/omap2/dss/dss_features.h new file +6
-0+ +/* DSS Feature Functions */ +int dss_feat_get_num_mgrs (void ); +int dss_feat_get_num_ovls (void ); +enum omap_display_type dss_feat_get_supported_displays (int id);enum +omap_color_mode dss_feat_get_supported_color_modes (int id);These functions are a bit confusing. I know they are similar to what already exists in DSS driver for overlays and managers, but...
Quoted 6 lines
Using
get_num_mgrs()and then looping through then would suggest that the parameter toget_supported_displays()would be an index to an array (which it is), but at the same time the parameter is an overlay ID.
Perhaps enumomap_planeand enumomap_channelfromdisplay.hcould be used here?
Yes we can do that, we should change dss_init_overlays() and init_managers() to loop around the enums then, and have case labels as "OMAP_DSS_GFX" and "OMAP_DSS_VIDEO1".. instead of "0" "1" etc.
In the same way, the structs "omap_overlay" and "omap_overlay_manager" should have an enum instead of "int id" as the member.
Quoted 5 lines
Which reminds me that the names of those enums in
display.hshould be also reviewed... A global "omap_channel" is not very descriptive =).
Should perhaps beomap_dss_channelor manager".
I guess so, since its in the plat-omap folder..
Archit
RE: [PATCH v2 1/2] OMAP: DSS2: Introduce dss_features files
Quoted 63 lines · Archit
Hi,
Quoted 51 lines · Tomi Valkeinen
Hi,
Quoted 5 lines · ext Archit Taneja
Add
dss_features.canddss_features.hfor thedss_featuresframeworkSigned-off-by Archit Taneja <[email protected]>--- drivers/video/omap2/dss/dss_features.c | 171++++++++++++++++++++++++++++++++
Quoted 42 lines
drivers/video/omap2/dss/dss_features.h | 51 ++++++++++ 2 files changed, 222 insertions(+), 0 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.hdrivers/video/omap2/dss/dss_features.c new file +11
-0@@ -0,0 +1,171 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.c +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or +modify it +* under the terms of the GNU General Public License version 2 as +published by + * the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, +but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +License for + * more details.
+ *
+ * You should have received a copy of the GNU General Public License +along with + * this program. If not, see <http://www.gnu.org/licenses/>. + */drivers/video/omap2/dss/dss_features.c new file +12
-0+ +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/err.h> +#include <linux/slab.h> + +#include <plat/display.h> +#include <plat/cpu.h> + +#include "dss_features.h" + +/* Defines a generic omap register field */ struct dss_reg_field { + enum
dss_feat_reg_fieldid; + u8 start, end;Quoted 8 lines
drivers/video/omap2/dss/dss_features.c line 37
Quoted 4 lines
drivers/video/omap2/dss/dss_features.c new file +4
-0+}; + +struct omap_dss_features { +struct dss_reg_field reg_fields[MAX_DSS_REG_FIELDS ];Perhaps this should be a pointer to a list, and add a separate field for
num_reg_fields. That way you don't need aMAX_DSS_REG_FIELDSdefinition.
Quoted 3 lines
If it is a pointer to a list then we can't initialize things statically, won't we need functions at runtime to add to the list of
reg_fieldsetc, this is what I did in v1?
Something like:
static struct dss_reg_field omap2_dss_reg_fields[] =
{
{FIRHINC, 11, 0},
{FIRVINC, 27, 16},
{FIFOLOWTHRESHOLD, 8, 0},
{FIFOHIGHTHRESHOLD, 24, 16},
{FIFOSIZE, 8, 0},
};static struct omap_dss_features omap2_dss_features = {
.num_reg_fields = ARRAY_SIZE(omap2_dss_reg_fields), .reg_fields = omap2_dss_reg_fields,
...
Tomi
RE: [PATCH v2 1/2] OMAP: DSS2: Introduce dss_features files
Quoted 79 lines · Tomi Valkeinen
Quoted 33 lines · Archit
Hi,
Quoted 30 lines · Tomi Valkeinen
Hi,
Quoted 5 lines · ext Archit Taneja
Add
dss_features.canddss_features.hfor thedss_featuresframeworkSigned-off-by Archit Taneja <[email protected]>--- drivers/video/omap2/dss/dss_features.c | 171++++++++++++++++++++++++++++++++
Quoted 21 lines
drivers/video/omap2/dss/dss_features.h | 51 ++++++++++ 2 files changed, 222 insertions(+), 0 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.hdrivers/video/omap2/dss/dss_features.c new file +7
-0@@ -0,0 +1,171 @@ +/* +* linux/drivers/video/omap2/dss/dss_features.c +* +* Copyright (C) 2010 Texas Instruments +* Author: Archit Taneja <[email protected]> +* +* This program is free software; you can redistribute it and/or ++modify it + * under the terms of the GNU General Public License version 2 as +published by + * the Free Software Foundation.
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
+ *
+ * This program is distributed in the hope that it will be useful, ++but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +License for + * more details.
+ *
+ * You should have received a copy of the GNU General Public + License +along with + * this program. If not, see<http://www.gnu.org/licenses/>.
Quoted 23 lines
Quoted 14 lines
Quoted 14 lines
+ */
drivers/video/omap2/dss/dss_features.c new file +12
-0+ +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/err.h> +#include <linux/slab.h> + +#include <plat/display.h> +#include <plat/cpu.h> + +#include "dss_features.h" + +/* Defines a generic omap register field */ struct dss_reg_field { + enum
dss_feat_reg_fieldid; + u8 start, end;Quoted 8 lines
drivers/video/omap2/dss/dss_features.c line 37
Quoted 4 lines
drivers/video/omap2/dss/dss_features.c new file +4
-0+}; + +struct omap_dss_features { +struct dss_reg_field reg_fields[MAX_DSS_REG_FIELDS ];Perhaps this should be a pointer to a list, and add a separate field for
num_reg_fields. That way you don't need aMAX_DSS_REG_FIELDSdefinition.Quoted 3 lines
If it is a pointer to a list then we can't initialize things statically, won't we need functions at runtime to add to the list of
reg_fieldsetc, this is what I did in v1?Something like:
static struct
dss_reg_fieldomap2_dss_reg_fields[] = { {FIRHINC, 11, 0},{FIRVINC, 27, 16}, {FIFOLOWTHRESHOLD, 8, 0}, {FIFOHIGHTHRESHOLD, 24, 16}, {FIFOSIZE, 8, 0}, };
Quoted 5 lines
static struct
omap_dss_featuresomap2_dss_features= {
.num_reg_fields =ARRAY_SIZE(omap2_dss_reg_fields), .reg_fields =omap2_dss_reg_fields,...
Oh okay..I will make this change..what do we do about dss_feature_functions? Should I rework dss_init_overlays and dss_init_overlay_managers to loop based on the enums ion display.h?
Archit
PATCH v2 2/2 OMAP: DSS2: Use dss_features framework on DSS2 code
In reply to Archit Tanejacalls init functions of dss_features during dss_probe, and the following features are made omapxxxx independent:
- number of managers, overlays
- supported color modes for each overlay
- supported displays for each manager
- global aplha, and restriction of global alpha for video1 pipeline
- The register field ranges : FIRHINC, FIRVINC, FIFOHIGHTHRESHOLD FIFOLOWTHRESHOLD and FIFOSIZE
--- arch/arm/plat-omap/include/plat/display.h | 31 ---------------- drivers/video/omap2/dss/Makefile | 2 +- drivers/video/omap2/dss/core.c | 3 ++ drivers/video/omap2/dss/dispc.c | 56 ++++++++++++++++------------- drivers/video/omap2/dss/manager.c | 33 ++++++++--------- drivers/video/omap2/dss/overlay.c | 24 +++++------- 6 files changed, 61 insertions(+), 88 deletions(-)
arch/arm/plat-omap/include/plat/display.h +0 -31
@@ -81,37 +81,6 @@ enum omap_color_mode {OMAP_DSS_COLOR_ARGB32 =1 <<11 ,/* ARGB32 */ OMAP_DSS_COLOR_RGBA32 =1 <<12 ,/* RGBA32 */ OMAP_DSS_COLOR_RGBX32 = 1 << 13, /* RGBx32 */ - -OMAP_DSS_COLOR_GFX_OMAP2 = -OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | -OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | -OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | -OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P , - -OMAP_DSS_COLOR_VID_OMAP2 = -OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | -OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | -OMAP_DSS_COLOR_UYVY , - -OMAP_DSS_COLOR_GFX_OMAP3 = -OMAP_DSS_COLOR_CLUT1 |OMAP_DSS_COLOR_CLUT2 | -OMAP_DSS_COLOR_CLUT4 |OMAP_DSS_COLOR_CLUT8 | -OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | -OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | -OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_ARGB32 | -OMAP_DSS_COLOR_RGBA32 |OMAP_DSS_COLOR_RGBX32 , - -OMAP_DSS_COLOR_VID1_OMAP3 = -OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_RGB16 | -OMAP_DSS_COLOR_RGB24U |OMAP_DSS_COLOR_RGB24P | -OMAP_DSS_COLOR_YUV2 |OMAP_DSS_COLOR_UYVY , - -OMAP_DSS_COLOR_VID2_OMAP3 = -OMAP_DSS_COLOR_RGB12U |OMAP_DSS_COLOR_ARGB16 | -OMAP_DSS_COLOR_RGB16 |OMAP_DSS_COLOR_RGB24U | -OMAP_DSS_COLOR_RGB24P |OMAP_DSS_COLOR_YUV2 | -OMAP_DSS_COLOR_UYVY |OMAP_DSS_COLOR_ARGB32 | - OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32, }; enum omap_lcd_display_type {
drivers/video/omap2/dss/Makefile +1 -1
@@ -1,5 +1,5 @@ obj-$(CONFIG_OMAP2_DSS) += omapdss.o -omapdss-y := core.o dss.o dispc.o display.o manager.o overlay.o +omapdss-y := core.o dss.o dss_features.o dispc.o display.o manager.o overlay.o omapdss-$(CONFIG_OMAP2_DSS_DPI) += dpi.o omapdss-$(CONFIG_OMAP2_DSS_RFBI) += rfbi.o omapdss-$(CONFIG_OMAP2_DSS_VENC) += venc.o
drivers/video/omap2/dss/core.c +3 -0
@@ -37,6 +37,7 @@#include <plat/clock.h> #include "dss.h" +#include "dss_features.h" static struct { struct platform_device *pdev;
@@ -502,6 +503,8 @@ static int omap_dss_probe(struct platform_device *pdev) core.pdev = pdev; +dss_features_init (); +dss_init_overlay_managers (pdev);dss_init_overlays (pdev);
drivers/video/omap2/dss/dispc.c +31 -25
126 lines not on this page · raw message
drivers/video/omap2/dss/manager.c +16 -17
@@ -33,6 +33,7 @@#include <plat/cpu.h> #include "dss.h" +#include "dss_features.h" static int num_managers;static struct list_head manager_list;
@@ -448,8 +449,8 @@ struct manager_cache_data {static struct {spinlock_t lock; -struct overlay_cache_data overlay_cache[3 ]; -struct manager_cache_data manager_cache[2 ]; +struct overlay_cache_data overlay_cache[MAX_DSS_OVERLAYS ]; +struct manager_cache_data manager_cache[MAX_DSS_MANAGERS ];bool irq_enabled; } dss_cache;
@@ -882,12 +883,12 @@ static int configure_dispc(void) {struct overlay_cache_data *oc;struct manager_cache_data *mc; -const int num_ovls =ARRAY_SIZE (dss_cache.overlay_cache); -const int num_mgrs =ARRAY_SIZE (dss_cache.manager_cache); +const int num_ovls =dss_feat_get_num_ovls (); +const int num_mgrs =dss_feat_get_num_mgrs ();int i;int r; -bool mgr_busy[2 ]; -bool mgr_go[2 ]; +bool mgr_busy[MAX_DSS_MANAGERS ]; +bool mgr_go[MAX_DSS_MANAGERS ];bool busy; r =0 ;
@@ -989,7 +990,7 @@ void dss_setup_partial_planes(struct omap_dss_device *dssdev, {struct overlay_cache_data *oc;struct manager_cache_data *mc; -const int num_ovls =ARRAY_SIZE (dss_cache.overlay_cache); +const int num_ovls =dss_feat_get_num_ovls ();struct omap_overlay_manager *mgr;int i;u16 x, y, w, h;
@@ -1121,8 +1122,8 @@ void dss_start_update(struct omap_dss_device *dssdev) {struct manager_cache_data *mc;struct overlay_cache_data *oc; -const int num_ovls =ARRAY_SIZE (dss_cache.overlay_cache); -const int num_mgrs =ARRAY_SIZE (dss_cache.manager_cache); +const int num_ovls =dss_feat_get_num_ovls (); +const int num_mgrs =dss_feat_get_num_mgrs ();struct omap_overlay_manager *mgr;int i;
@@ -1151,10 +1152,10 @@ static void dss_apply_irq_handler(void *data, u32 mask) {struct manager_cache_data *mc;struct overlay_cache_data *oc; -const int num_ovls =ARRAY_SIZE (dss_cache.overlay_cache); -const int num_mgrs =ARRAY_SIZE (dss_cache.manager_cache); +const int num_ovls =dss_feat_get_num_ovls (); +const int num_mgrs =dss_feat_get_num_mgrs ();int i, r; -bool mgr_busy[2 ]; +bool mgr_busy[MAX_DSS_MANAGERS ]; mgr_busy[0 ] =dispc_go_busy (0 ); mgr_busy[1 ] =dispc_go_busy (1 );
@@ -1461,7 +1462,7 @@ int dss_init_overlay_managers(struct platform_device *pdev) num_managers =0 ; -for (i =0 ; i <2 ; ++i) { +for (i =0 ; i <dss_feat_get_num_mgrs (); ++i) {struct omap_overlay_manager *mgr; mgr =kzalloc (sizeof (*mgr),GFP_KERNEL );
@@ -1471,14 +1472,10 @@ int dss_init_overlay_managers(struct platform_device *pdev)case 0 : mgr->name ="lcd" ; mgr->id =OMAP_DSS_CHANNEL_LCD ; - mgr->supported_displays = -OMAP_DISPLAY_TYPE_DPI |OMAP_DISPLAY_TYPE_DBI | -OMAP_DISPLAY_TYPE_SDI |OMAP_DISPLAY_TYPE_DSI ;break ;case 1 : mgr->name ="tv" ; mgr->id =OMAP_DSS_CHANNEL_DIGIT ; - mgr->supported_displays =OMAP_DISPLAY_TYPE_VENC ;break ; }
@@ -1494,6 +1491,8 @@ int dss_init_overlay_managers(struct platform_device *pdev) mgr->disable = &dss_mgr_disable; mgr->caps =OMAP_DSS_OVL_MGR_CAP_DISPC ; + mgr->supported_displays = +dss_feat_get_supported_displays (mgr->id);dss_overlay_setup_dispc_manager (mgr);
drivers/video/omap2/dss/overlay.c +10 -14
@@ -35,6 +35,7 @@#include <plat/cpu.h> #include "dss.h" +#include "dss_features.h" static int num_overlays;static struct list_head overlay_list;
@@ -237,7 +238,8 @@ static ssize_t overlay_global_alpha_store(struct omap_overlay *ovl,/* Video1 plane does not support global alpha * to always make it 255 completely opaque */ -if (ovl->id ==OMAP_DSS_VIDEO1 ) +if (!dss_has_feature (FEAT_GLOBAL_ALPHA_VID1 ) && + ovl->id ==OMAP_DSS_VIDEO1 ) info.global_alpha =255 ;else info.global_alpha =simple_strtoul (buf,NULL ,10 );
@@ -510,11 +512,11 @@ static void omap_dss_add_overlay(struct omap_overlay *overlay)list_add_tail (&overlay->list, &overlay_list); } -static struct omap_overlay *dispc_overlays[3 ]; +static struct omap_overlay *dispc_overlays[MAX_DSS_OVERLAYS ];void dss_overlay_setup_dispc_manager (struct omap_overlay_manager *mgr) { - mgr->num_overlays =3 ; + mgr->num_overlays =dss_feat_get_num_ovls (); mgr->overlays = dispc_overlays; }
@@ -535,7 +537,7 @@ void dss_init_overlays(struct platform_device *pdev) num_overlays =0 ; -for (i =0 ; i <3 ; ++i) { +for (i =0 ; i <dss_feat_get_num_ovls (); ++i) {struct omap_overlay *ovl; ovl =kzalloc (sizeof (*ovl),GFP_KERNEL );
@@ -545,18 +547,12 @@ void dss_init_overlays(struct platform_device *pdev)case 0 : ovl->name ="gfx" ; ovl->id =OMAP_DSS_GFX ; - ovl->supported_modes =cpu_is_omap34xx () ? -OMAP_DSS_COLOR_GFX_OMAP3 : -OMAP_DSS_COLOR_GFX_OMAP2 ; ovl->caps =OMAP_DSS_OVL_CAP_DISPC ; ovl->info.global_alpha =255 ;break ;case 1 : ovl->name ="vid1" ; ovl->id =OMAP_DSS_VIDEO1 ; - ovl->supported_modes =cpu_is_omap34xx () ? -OMAP_DSS_COLOR_VID1_OMAP3 : -OMAP_DSS_COLOR_VID_OMAP2 ; ovl->caps =OMAP_DSS_OVL_CAP_SCALE |OMAP_DSS_OVL_CAP_DISPC ; ovl->info.global_alpha =255 ;
@@ -564,9 +560,6 @@ void dss_init_overlays(struct platform_device *pdev)case 2 : ovl->name ="vid2" ; ovl->id =OMAP_DSS_VIDEO2 ; - ovl->supported_modes =cpu_is_omap34xx () ? -OMAP_DSS_COLOR_VID2_OMAP3 : -OMAP_DSS_COLOR_VID_OMAP2 ; ovl->caps =OMAP_DSS_OVL_CAP_SCALE |OMAP_DSS_OVL_CAP_DISPC ; ovl->info.global_alpha =255 ;
@@ -579,6 +572,9 @@ void dss_init_overlays(struct platform_device *pdev) ovl->get_overlay_info = &dss_ovl_get_overlay_info; ovl->wait_for_go = &dss_ovl_wait_for_go; + ovl->supported_modes = +dss_feat_get_supported_color_modes (ovl->id); +omap_dss_add_overlay (ovl); r = kobject_init_and_add(&ovl->kobj, &overlay_ktype,
@@ -651,7 +647,7 @@ void dss_recheck_connections(struct omap_dss_device *dssdev, bool force) }if (mgr) { -for (i =0 ; i <3 ; i++) { +for (i =0 ; i <dss_feat_get_num_ovls (); i++) {struct omap_overlay *ovl; ovl =omap_dss_get_overlay (i);if (!ovl->manager || force) {
Signature · 1 line
1.7.0.4
Re: [PATCH v2 2/2] OMAP: DSS2: Use dss_features framework on DSS2 code
Quoted 17 lines · ext Archit Taneja
calls init functions of
dss_featuresduringdss_probe, and the following features are made omapxxxx independent:
- number of managers, overlays
- supported color modes for each overlay
- supported displays for each manager
- global aplha, and restriction of global alpha for video1 pipeline
- The register field ranges : FIRHINC, FIRVINC, FIFOHIGHTHRESHOLD FIFOLOWTHRESHOLD and FIFOSIZESigned-off-by Archit Taneja <[email protected]>drivers/video/omap2/dss/Makefile +0
-0
drivers/video/omap2/dss/Makefile line 2
Quoted 3 lines
drivers/video/omap2/dss/Makefile +1
-1@@ -1,5 +1,5 @@ obj-$(CONFIG_OMAP2_DSS) += omapdss.o -omapdss-y := core.o dss.o dispc.o display.o manager.o overlay.o +omapdss-y := core.o dss.o dss_features.o dispc.o display.o manager.o overlay.o
I think this change should be in the previous patch.
Tomi