Avoiding #ifdefs

Marek Vasut marek.vasut at gmail.com
Wed Jan 6 08:32:21 EST 2010


Dne St 6. ledna 2010 09:38:41 CoDeBrEaKeR napsal(a):
> --- On Wed, 1/6/10, Marek Vasut <marek.vasut at gmail.com> wrote:
> > From: Marek Vasut <marek.vasut at gmail.com>
> > Subject: Re: Avoiding #ifdefs
> > To: "CoDeBrEaKeR" <codebreaker28 at yahoo.com>
> > Cc: linux-arm at lists.infradead.org
> > Date: Wednesday, January 6, 2010, 1:32 PM
> > Dne St 6. ledna 2010 07:46:59
> >
> > CoDeBrEaKeR napsal(a):
> > > Thanks,
> > >
> > >  But the stucture am using is pretty insanely
> >
> > nested.
> >
> > So? Why don't you show us the real code? (please also stop
> > top-posting).
> 
> sorry about top posting. here's the code(directly pasting it
> from the patch)
> 
> +static struct omap_dss_device zoom_tv_device = {
> +	.name                   = "tv",
> +	.driver_name            = "venc",
> +	.type                   = OMAP_DISPLAY_TYPE_VENC,
> +#ifdef CONFIG_MACH_OMAP_3630SDP
> +	.phy.venc.type          = OMAP_DSS_VENC_TYPE_SVIDEO,
> +#else
> +	.phy.venc.type          = OMAP_DSS_VENC_TYPE_COMPOSITE,
> +#endif
> +	.platform_enable        = zoom_panel_enable_tv,
> +	.platform_disable       = zoom_panel_disable_tv,
> +};
> +
> +static struct omap_dss_device *zoom_dss_devices[] = {
> +	&zoom_lcd_device,
> +	&zoom_tv_device,
> +};
> +
> +static struct omap_dss_board_info zoom_dss_data = {
> +	.num_devices = ARRAY_SIZE(zoom_dss_devices),
> +	.devices = zoom_dss_devices,
> +	.default_device = &zoom_lcd_device,
> +};
> +
> +static struct platform_device zoom_dss_device = {
> +	.name          = "omapdss",
> +	.id            = -1,
> +	.dev            = {
> +		.platform_data = &zoom_dss_data,
> +	},
> +};
> 
> ifdefs here is what i want to avoid.
> 
> +#ifdef CONFIG_MACH_OMAP_3630SDP
> +	.phy.venc.type          = OMAP_DSS_VENC_TYPE_SVIDEO,
> +#else
> +	.phy.venc.type          = OMAP_DSS_VENC_TYPE_COMPOSITE,
> +#endif
> 

well in the machine init ... 
if (machine_is_omap_3630sdp())
	zoom_device.phy.venc.type = OMAP_DSS...
else
	DTTO

what's the problem ?
> 
> ~A
> 
> > > ~A
> > >
> > > --- On Wed, 1/6/10, Marek Vasut <marek.vasut at gmail.com>
> >
> > wrote:
> > > > From: Marek Vasut <marek.vasut at gmail.com>
> > > > Subject: Re: Avoiding #ifdefs
> > > > To: linux-arm at lists.infradead.org
> > > > Cc: "CoDeBrEaKeR" <codebreaker28 at yahoo.com>
> > > > Date: Wednesday, January 6, 2010, 11:53 AM
> > > > Dne St 6. ledna 2010 07:04:37
> > > >
> > > > CoDeBrEaKeR napsal(a):
> > > > > Most of the times its is easy to start
> >
> > having a lot of
> >
> > > > #ifdef statements in
> > > >
> > > > >  your code. Since this is not a proper
> >
> > thing to
> >
> > > > do, placing the #ifdef in a
> > > >
> > > > >  header file would be the usual
> >
> > suggestion. well,
> >
> > > > i understand this as far
> > > >
> > > > >  as #ifdefs in functions are concerned.
> >
> > How about
> >
> > > > structures?
> > > >
> > > > > for Ex:
> > > > >
> > > > >  static struct something = {
> > > > >     .name   
> >
> >    
> >
> > > >            =
> >
> > "xyz",
> >
> > > > >     .driver_name 
> >
> >    
> >
> > > >       = "something",
> > > >
> > > > > #ifdef SOME_ARCH_TYPE
> > > > >     .bla   
> >
> >    
> >
> > > >         
> >
> >    = DO_THIS,
> >
> > > > > #else
> > > > >     .bla   
> >
> >    
> >
> > > >         
> >
> >    =
> >
> > > > DO_SOMETHING_ELSE,
> > > >
> > > > > #endif
> > > > > };
> > > > >
> > > > > How do i avoid #ifdef here, any idea??
> > > >
> > > > If you want to do some run-time detection, then
> >
> > do so and
> >
> > > > assign 'bla' at
> > > > runtime...
> > > > if (x)
> > > >  something.bla = somefn;
> > > > else
> > > > ...
> > > >
> > > > > Thanks.
> > > > >
> > > > > ~A
> >
> > _______________________________________________
> >
> > > > > linux-arm mailing list
> > > > > linux-arm at lists.infradead.org
> > > > > http://lists.infradead.org/mailman/listinfo/linux-arm
> > > >
> > > > _______________________________________________
> > > > linux-arm mailing list
> > > > linux-arm at lists.infradead.org
> > > > http://lists.infradead.org/mailman/listinfo/linux-arm
> 



More information about the linux-arm mailing list