OMAP: DSS2: Framework to handle omap version specific DSS features
Subsystems (3)
v3 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 | 191 +++++++++++++++++++++++++++++ drivers/video/omap2/dss/dss_features.h | 50 ++++++++ drivers/video/omap2/dss/manager.c | 33 +++--- drivers/video/omap2/dss/overlay.c | 24 ++-- 8 files changed, 302 insertions(+), 88 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.h
--
Version 3:
- Naming of register fields enums is changed, dss_features struct has some members changed as pointers to static arrays.
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 v3 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/Makefile | 2 +- drivers/video/omap2/dss/dss_features.c | 191 ++++++++++++++++++++++++++++++++ drivers/video/omap2/dss/dss_features.h | 50 ++++++++ 3 files changed, 242 insertions(+), 1 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/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/dss_features.c new file +191 -0
191 lines not on this page · raw message
drivers/video/omap2/dss/dss_features.h new file +50 -0
50 lines not on this page · raw message
Signature · 1 line
1.7.0.4
Re: [PATCH v3 1/2] OMAP: DSS2: Introduce dss_features files
Hi,
Quoted 67 lines · ext Archit Taneja
Add
dss_features.canddss_features.hfor thedss_featuresframeworkSigned-off-by Archit Taneja <[email protected]>--- drivers/video/omap2/dss/Makefile | 2 +- drivers/video/omap2/dss/dss_features.c | 191 ++++++++++++++++++++++++++++++++ drivers/video/omap2/dss/dss_features.h | 50 ++++++++ 3 files changed, 242 insertions(+), 1 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.hdrivers/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.odrivers/video/omap2/dss/dss_features.c new file +39
-0@@ -0,0 +1,191 @@ +/* +* 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; +int num_reg_fields; +
drivers/video/omap2/dss/dss_features.c line 49
Quoted 10 lines
drivers/video/omap2/dss/dss_features.c new file +10
-0+u32 has_feature; + +int num_mgrs; +int num_ovls; +enum omap_display_type *supported_displays; +enum omap_color_mode *supported_color_modes; +}; + +/* This struct is assigned to one of the below during initialization */ +static struct omap_dss_features omap_current_dss_features;
Any particular reason this is not a pointer?
Also, I think most (all?) of the structs can be consts, as they are never changed.
Otherwise I think this looks good.
Tomi
RE: [PATCH v3 1/2] OMAP: DSS2: Introduce dss_features files
Hi,
Quoted 73 lines · Tomi Valkeinen
Hi,
Quoted 6 lines · ext Archit Taneja
Add
dss_features.canddss_features.hfor thedss_featuresframeworkSigned-off-by Archit Taneja <[email protected]>--- drivers/video/omap2/dss/Makefile | 2 +- drivers/video/omap2/dss/dss_features.c | 191++++++++++++++++++++++++++++++++
Quoted 63 lines
drivers/video/omap2/dss/dss_features.h | 50 ++++++++ 3 files changed, 242 insertions(+), 1 deletions(-) create mode 100644 drivers/video/omap2/dss/dss_features.c create mode 100644 drivers/video/omap2/dss/dss_features.hdrivers/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 diff --git
a/drivers/video/omap2/dss/dss_features.cb/drivers/video/omap2/dss/dss_features.c
new file mode 100644
index 0000000..c3e4d4ddrivers/video/omap2/dss/dss_features.c new file +11
-0@@ -0,0 +1,191 @@ +/* +* 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;drivers/video/omap2/dss/dss_features.c new file +9
-0+}; + +struct omap_dss_features { +struct dss_reg_field *reg_fields; +int num_reg_fields; + +u32 has_feature; + +int num_mgrs;
Quoted 8 lines
drivers/video/omap2/dss/dss_features.c
Quoted 6 lines
drivers/video/omap2/dss/dss_features.c new file +6
-0+int num_ovls; +enum omap_display_type *supported_displays; +enum omap_color_mode *supported_color_modes; }; + +/* This struct is assigned to one of the below during initialization +*/ static struct omap_dss_features omap_current_dss_features;Any particular reason this is not a pointer?
Not really, it didn't cross my mind that I could make it a pointer. I will make these changes..
Do you have comments for the 2nd patch in this series, I wanted to consider them while making a next series.
Quoted 7 lines
Also, I think most (all?) of the structs can be consts, as they are never changed.
Otherwise I think this looks good.
Tomi
Archit
PATCH v3 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/core.c | 3 ++ drivers/video/omap2/dss/dispc.c | 56 ++++++++++++++++------------- drivers/video/omap2/dss/manager.c | 33 ++++++++--------- drivers/video/omap2/dss/overlay.c | 24 +++++------- 5 files changed, 60 insertions(+), 87 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/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 v3 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]>--- arch/arm/plat-omap/include/plat/display.h | 31 ---------------- 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 +++++------- 5 files changed, 60 insertions(+), 87 deletions(-)
snip
Quoted 16 lines
static void
_dispc_setup_global_alpha(enum omap_plane plane, u8 global_alpha){drivers/video/omap2/dss/dispc.c +4
-4- -BUG_ON (plane ==OMAP_DSS_VIDEO1 ); - -if (cpu_is_omap24xx ()) +if (!dss_has_feature (FEAT_GLOBAL_ALPHA ))return ; +BUG_ON (!dss_has_feature (FEAT_GLOBAL_ALPHA_VID1 ) && + plane ==OMAP_DSS_VIDEO1 ); +if (plane ==OMAP_DSS_GFX )REG_FLD_MOD (DISPC_GLOBAL_ALPHA , global_alpha,7 ,0 );else if (plane ==OMAP_DSS_VIDEO2 )
drivers/video/omap2/dss/dispc.c static void dispc_read_plane_fifo_sizes(void) · line 953
Quoted 4 lines
drivers/video/omap2/dss/dispc.c +1
-0@@ -949,17 +950,14 @@ static void dispc_read_plane_fifo_sizes(void) DISPC_VID_FIFO_SIZE_STATUS(1) };u32 size;int plane; +u8 size1, size2;
You have a bit inconsistent naming with these. The function is defined as accepting start and end, here you use size1 and size2, below you have foo1 and foo2.
Size is not a good name, as it's not size at all. Perhaps foo_start and foo_end (or just start and end if there's only one feat being used)? Or foo_msb and foo_lsb (as in most/least significant bit)?
Otherwise looks good.
Tomi
RE: [PATCH v3 2/2] OMAP: DSS2: Use dss_features framework on DSS2 code
Quoted 38 lines · Tomi Valkeinen
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]>--- arch/arm/plat-omap/include/plat/display.h | 31 ---------------- 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+++++------- 5 files changed, 60 insertions(+), 87 deletions(-)
snip
Quoted 14 lines
static void _dispc_setup_global_alpha(enum
omap_planeplane, u8global_alpha) { -drivers/video/omap2/dss/dispc.c +4
-3-BUG_ON (plane ==OMAP_DSS_VIDEO1 ); - -if (cpu_is_omap24xx ()) +if (!dss_has_feature (FEAT_GLOBAL_ALPHA ))return ; +BUG_ON (!dss_has_feature (FEAT_GLOBAL_ALPHA_VID1 ) && + plane ==OMAP_DSS_VIDEO1 ); +if (plane ==OMAP_DSS_GFX )REG_FLD_MOD (DISPC_GLOBAL_ALPHA , global_alpha,7 ,0 ); else if (plane == OMAP_DSS_VIDEO2) @@ -949,17 +950,14 @@Quoted 2 lines
static void
dispc_read_plane_fifo_sizes(void)
DISPC_VID_FIFO_SIZE_STATUS(1)};
Quoted 8 lines
Quoted 3 lines
u32 size; int plane;+ u8 size1, size2;
You have a bit inconsistent naming with these. The function
is defined as accepting start and end, here you use size1 and size2, below you have foo1 and foo2.
I think I gave them names based on the name of the reg_field (size for FIFOSIZE, hinc for FIRHINC etc), 1 and 2 denote the start and end respectively, but yes, I guess it doesn't explain things that clearly, I'll give more appropriate names.
Quoted 8 lines
Size is not a good name, as it's not size at all. Perhaps
foo_startandfoo_end(or just start and end if there's only one feat being used)? Orfoo_msbandfoo_lsb(as in most/least significant bit)?Otherwise looks good.
Tomi
RE: [PATCH v3 2/2] OMAP: DSS2: Use dss_features framework on DSS2 code
In reply to Tomi ValkeinenHi,
I was reworking some patches, I saw 2 functions in manager.c:
dss_mgr_wait_for_go() and dss_mgr_wait_for_go_ovl() both define the var "enum omap_channel channel;" but don't use it.
Is there any reason this is done, or is it just stray code?
Quoted 54 lines · Tomi Valkeinen
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]>--- arch/arm/plat-omap/include/plat/display.h | 31 ---------------- 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+++++------- 5 files changed, 60 insertions(+), 87 deletions(-)
snip
Quoted 14 lines
static void _dispc_setup_global_alpha(enum
omap_planeplane, u8global_alpha) { -drivers/video/omap2/dss/dispc.c +4
-3-BUG_ON (plane ==OMAP_DSS_VIDEO1 ); - -if (cpu_is_omap24xx ()) +if (!dss_has_feature (FEAT_GLOBAL_ALPHA ))return ; +BUG_ON (!dss_has_feature (FEAT_GLOBAL_ALPHA_VID1 ) && + plane ==OMAP_DSS_VIDEO1 ); +if (plane ==OMAP_DSS_GFX )REG_FLD_MOD (DISPC_GLOBAL_ALPHA , global_alpha,7 ,0 ); else if (plane == OMAP_DSS_VIDEO2) @@ -949,17 +950,14 @@Quoted 2 lines
static void
dispc_read_plane_fifo_sizes(void)
DISPC_VID_FIFO_SIZE_STATUS(1)};Quoted 3 lines
u32 size; int plane;+ u8 size1, size2;
You have a bit inconsistent naming with these. The function
is defined as accepting start and end, here you use size1 and size2, below you have foo1 and foo2.Size is not a good name, as it's not size at all. Perhaps
foo_startandfoo_end(or just start and end if there's only one feat being used)? Orfoo_msbandfoo_lsb(as in most/least significant bit)?Otherwise looks good.
Tomi
RE: [PATCH v3 2/2] OMAP: DSS2: Use dss_features framework on DSS2 code
Quoted 8 lines · Archit
Hi,
I was reworking some patches, I saw 2 functions in
manager.c:
dss_mgr_wait_for_go()anddss_mgr_wait_for_go_ovl()both define the var "enumomap_channelchannel;" but don't use it.Is there any reason this is done, or is it just stray code?
Looks like leftovers from some earlier version...
Tomi