On Tue, 2010-09-07 at 13:31 +0200, ext Taneja, Archit wrote:
> Hi,
>
> Tomi Valkeinen wrote:
> > Hi,
> >
> > On Thu, 2010-08-26 at 14:43 +0200, ext Archit Taneja wrote:
> >> Add dss_features.c and dss_features.h for the dss_features framework
> >>
> >> Signed-off-by: Archit Taneja <[email protected]>
> >
> > Would a more static approach be cleaner? I mean something like this (pseudo
> > code):
> >
> > static struct omap_dss_features omap3_dss_features = {
> > /* array of register definitions */
> > .registers = {
> > {
> > .register = FIRHINC,
> > .high = 12,
> > .low = 0,
> > },
> > {
> > .register = FIRVINC,
> > .high = 28,
> > .low = 16,
> > },
> > ...
> > },
> >
> > /* array of feature ids */
> > .features = {
> > GLOBAL_ALPHA,
> > GLOBAL_ALPHA_VIDEO1,
> > ...
> > },
> > };
> >
> > And then the code would select the omapX_dss_features struct
> > to use depending on the omap version.
>
> It looks way cleaner out here , not sure though what it would look
> like once the whole file is filled up :)
>
> One issue with having separate omapX_dss_features is something which might may
> come later on : If there is a feature/value which is same in omap2 and omap3
> but different in omap4, we will sill need to fill up all the structs
> completely.
>
> We can get around this by filling one single struct on runtime :
>
> all omap2 specific features filled up here
> {
> ...
> ...
> }
>
> all common between omap2 and omap3 filled up here
> {
> ...
> ...
> }
>
> all omap3 specific filled up here
> {
> ...
> ...
> }
>
> And so on..
>
> This will save up space, but won't give a very clean look ..
>
> I think by the time all omap4(and 3630) features are added and remaining
> omap2,3 checks are removed we will have atleast 20 or so register fields
> and a dozen features. Initializing them statically for all omaps(including
> the ES_REV's) will really stretch up the file. But it will still look clean :)
>
> What's your call on this?
I'd try with static structs. I agree that if there are lots of
features/registers which are the same on multiple omaps, there's
redundant code needed. But it just needs to be written once, and having
lots of if(omap_xxxx()) lines will be a nightmare to maintain.
Or if things get really long, we could use multiple files, one for each
omap.
Also, we can make the definitions a bit shorter by using macros where
suitable. For example the registers could be defined with something like
FEAT_REG(FIRHINC, 12, 0), which will will the fields properly.
Or there could be a define for feature IDs, which could be appended.
Like:
#define FEAT_ID_OMAP2 AAA,\
BBB,\
CCC
#define FEAT_ID_OMAP3 FEAT_ID_OMAP2,\
DDD,\
EEE,\
But... That's getting a bit nasty, I wouldn't do things like that if not
absolutely needed =).
Tomi
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html