Message ID | 1309510356-27147-12-git-send-email-jhnikula@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Jarkko, On Fri, Jul 1, 2011 at 14:22, Jarkko Nikula <jhnikula@gmail.com> wrote: > Although this increases the build size a little for !OMAP3 builds it makes > the code one step more generic. For instance the threshold based DMA > transfers seems to be possible with OMAP4 too from quick look of the TRM. > > Signed-off-by: Jarkko Nikula <jhnikula@gmail.com> > --- > arch/arm/plat-omap/include/plat/mcbsp.h | 35 ++++-------------------------- > arch/arm/plat-omap/mcbsp.c | 13 ----------- > 2 files changed, 5 insertions(+), 43 deletions(-) > > diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h > index 2a7e8d5..720461c 100644 > --- a/arch/arm/plat-omap/include/plat/mcbsp.h > +++ b/arch/arm/plat-omap/include/plat/mcbsp.h > @@ -26,9 +26,6 @@ > > #include <linux/spinlock.h> > > -#include <mach/hardware.h> > -#include <plat/clock.h> > - > /* macro for building platform_device for McBSP ports */ > #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ > static struct platform_device omap_mcbsp##port_nr = { \ > @@ -314,11 +311,11 @@ struct omap_mcbsp_platform_data { > u8 dma_rx_sync, dma_tx_sync; > u16 rx_irq, tx_irq; > struct omap_mcbsp_ops *ops; > -#ifdef CONFIG_ARCH_OMAP3 > + > /* Sidetone block for McBSP 2 and 3 */ > unsigned long phys_base_st; > int (*enable_st_clock)(unsigned int, bool); > -#endif > + > u16 buffer_size; > unsigned int mcbsp_config_type; > u8 reg_size; > @@ -354,12 +351,12 @@ struct omap_mcbsp { > spinlock_t lock; > struct omap_mcbsp_platform_data *pdata; > struct clk *fclk; > -#ifdef CONFIG_ARCH_OMAP3 > + > struct omap_mcbsp_st_data *st_data; > int dma_op_mode; > u16 max_tx_thres; > u16 max_rx_thres; > -#endif > + > void *reg_cache; > unsigned int mcbsp_config_type; > }; > @@ -380,7 +377,6 @@ extern int omap_mcbsp_count, omap_mcbsp_cache_size; > > int omap_mcbsp_init(void); > void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); > -#ifdef CONFIG_ARCH_OMAP3 > void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold); > void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold); > u16 omap_mcbsp_get_max_tx_threshold(unsigned int id); > @@ -389,18 +385,7 @@ u16 omap_mcbsp_get_fifo_size(unsigned int id); > u16 omap_mcbsp_get_tx_delay(unsigned int id); > u16 omap_mcbsp_get_rx_delay(unsigned int id); > int omap_mcbsp_get_dma_op_mode(unsigned int id); > -#else > -static inline void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold) > -{ } > -static inline void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold) > -{ } > -static inline u16 omap_mcbsp_get_max_tx_threshold(unsigned int id) { return 0; } > -static inline u16 omap_mcbsp_get_max_rx_threshold(unsigned int id) { return 0; } > -static inline u16 omap_mcbsp_get_fifo_size(unsigned int id) { return 0; } > -static inline u16 omap_mcbsp_get_tx_delay(unsigned int id) { return 0; } > -static inline u16 omap_mcbsp_get_rx_delay(unsigned int id) { return 0; } > -static inline int omap_mcbsp_get_dma_op_mode(unsigned int id) { return 0; } > -#endif > + > int omap_mcbsp_request(unsigned int id); > void omap_mcbsp_free(unsigned int id); > void omap_mcbsp_start(unsigned int id, int tx, int rx); > @@ -416,21 +401,11 @@ void omap2_mcbsp1_mux_fsr_src(u8 mux); > int omap_mcbsp_dma_ch_params(unsigned int id, unsigned int stream); > int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream); > > -#ifdef CONFIG_ARCH_OMAP3 > /* Sidetone specific API */ > int omap_st_set_chgain(unsigned int id, int channel, s16 chgain); > int omap_st_get_chgain(unsigned int id, int channel, s16 *chgain); > int omap_st_enable(unsigned int id); > int omap_st_disable(unsigned int id); > int omap_st_is_enabled(unsigned int id); > -#else > -static inline int omap_st_set_chgain(unsigned int id, int channel, > - s16 chgain) { return 0; } > -static inline int omap_st_get_chgain(unsigned int id, int channel, > - s16 *chgain) { return 0; } > -static inline int omap_st_enable(unsigned int id) { return 0; } > -static inline int omap_st_disable(unsigned int id) { return 0; } > -static inline int omap_st_is_enabled(unsigned int id) { return 0; } > -#endif > > #endif > diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c > index 1a7cfb3..d565b36 100644 > --- a/arch/arm/plat-omap/mcbsp.c > +++ b/arch/arm/plat-omap/mcbsp.c > @@ -63,7 +63,6 @@ static int omap_mcbsp_read(struct omap_mcbsp *mcbsp, u16 reg, bool from_cache) > } > } > > -#ifdef CONFIG_ARCH_OMAP3 Are there any plans to move the functions omap_mcbsp_st_* to mach-omap2/* as they are specific to OMAP3 only? -V Charulatha > static void omap_mcbsp_st_write(struct omap_mcbsp *mcbsp, u16 reg, u32 val) > { > __raw_writel(val, mcbsp->st_data->io_base_st + reg); > @@ -73,7 +72,6 @@ static int omap_mcbsp_st_read(struct omap_mcbsp *mcbsp, u16 reg) > { > return __raw_readl(mcbsp->st_data->io_base_st + reg); > } > -#endif > > #define MCBSP_READ(mcbsp, reg) \ > omap_mcbsp_read(mcbsp, OMAP_MCBSP_REG_##reg, 0) > @@ -258,7 +256,6 @@ int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream) > } > EXPORT_SYMBOL(omap_mcbsp_dma_reg_params); > > -#ifdef CONFIG_ARCH_OMAP3 > static void omap_st_on(struct omap_mcbsp *mcbsp) > { > unsigned int w; > @@ -657,11 +654,6 @@ int omap_mcbsp_get_dma_op_mode(unsigned int id) > } > EXPORT_SYMBOL(omap_mcbsp_get_dma_op_mode); > > -#else > -static inline void omap_st_start(struct omap_mcbsp *mcbsp) {} > -static inline void omap_st_stop(struct omap_mcbsp *mcbsp) {} > -#endif > - > int omap_mcbsp_request(unsigned int id) > { > struct omap_mcbsp *mcbsp; > @@ -935,7 +927,6 @@ void omap2_mcbsp1_mux_fsr_src(u8 mux) > } > #endif > > -#ifdef CONFIG_ARCH_OMAP3 > #define max_thres(m) (mcbsp->pdata->buffer_size) > #define valid_threshold(m, val) ((val) <= max_thres(m)) > #define THRESHOLD_PROP_BUILDER(prop) \ > @@ -1205,10 +1196,6 @@ static inline void __devexit omap34xx_device_exit(struct omap_mcbsp *mcbsp) > omap_st_remove(mcbsp); > } > } > -#else > -static inline void __devinit omap34xx_device_init(struct omap_mcbsp *mcbsp) {} > -static inline void __devexit omap34xx_device_exit(struct omap_mcbsp *mcbsp) {} > -#endif /* CONFIG_ARCH_OMAP3 */ > > /* > * McBSP1 and McBSP3 are directly mapped on 1610 and 1510. > -- > 1.7.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 1 Jul 2011 16:30:09 +0530 "Varadarajan, Charulatha" <charu@ti.com> wrote: > > --- a/arch/arm/plat-omap/mcbsp.c > > +++ b/arch/arm/plat-omap/mcbsp.c > > @@ -63,7 +63,6 @@ static int omap_mcbsp_read(struct omap_mcbsp *mcbsp, u16 reg, bool from_cache) > > } > > } > > > > -#ifdef CONFIG_ARCH_OMAP3 > > Are there any plans to move the functions omap_mcbsp_st_* > to mach-omap2/* as they are specific to OMAP3 only? > I was thinking that for saving code space for non !OMAP3 builds but thats again is not generic code if sidetone IP gets ever reused in another silicon. Another platform device for sidetone could be one solution but I would like to preserve sidetone sysfs nodes to get registered to McBSP port for keeping the userspace API the same during the transition (or over a few kernel releases).
diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h index 2a7e8d5..720461c 100644 --- a/arch/arm/plat-omap/include/plat/mcbsp.h +++ b/arch/arm/plat-omap/include/plat/mcbsp.h @@ -26,9 +26,6 @@ #include <linux/spinlock.h> -#include <mach/hardware.h> -#include <plat/clock.h> - /* macro for building platform_device for McBSP ports */ #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ static struct platform_device omap_mcbsp##port_nr = { \ @@ -314,11 +311,11 @@ struct omap_mcbsp_platform_data { u8 dma_rx_sync, dma_tx_sync; u16 rx_irq, tx_irq; struct omap_mcbsp_ops *ops; -#ifdef CONFIG_ARCH_OMAP3 + /* Sidetone block for McBSP 2 and 3 */ unsigned long phys_base_st; int (*enable_st_clock)(unsigned int, bool); -#endif + u16 buffer_size; unsigned int mcbsp_config_type; u8 reg_size; @@ -354,12 +351,12 @@ struct omap_mcbsp { spinlock_t lock; struct omap_mcbsp_platform_data *pdata; struct clk *fclk; -#ifdef CONFIG_ARCH_OMAP3 + struct omap_mcbsp_st_data *st_data; int dma_op_mode; u16 max_tx_thres; u16 max_rx_thres; -#endif + void *reg_cache; unsigned int mcbsp_config_type; }; @@ -380,7 +377,6 @@ extern int omap_mcbsp_count, omap_mcbsp_cache_size; int omap_mcbsp_init(void); void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); -#ifdef CONFIG_ARCH_OMAP3 void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold); void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold); u16 omap_mcbsp_get_max_tx_threshold(unsigned int id); @@ -389,18 +385,7 @@ u16 omap_mcbsp_get_fifo_size(unsigned int id); u16 omap_mcbsp_get_tx_delay(unsigned int id); u16 omap_mcbsp_get_rx_delay(unsigned int id); int omap_mcbsp_get_dma_op_mode(unsigned int id); -#else -static inline void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold) -{ } -static inline void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold) -{ } -static inline u16 omap_mcbsp_get_max_tx_threshold(unsigned int id) { return 0; } -static inline u16 omap_mcbsp_get_max_rx_threshold(unsigned int id) { return 0; } -static inline u16 omap_mcbsp_get_fifo_size(unsigned int id) { return 0; } -static inline u16 omap_mcbsp_get_tx_delay(unsigned int id) { return 0; } -static inline u16 omap_mcbsp_get_rx_delay(unsigned int id) { return 0; } -static inline int omap_mcbsp_get_dma_op_mode(unsigned int id) { return 0; } -#endif + int omap_mcbsp_request(unsigned int id); void omap_mcbsp_free(unsigned int id); void omap_mcbsp_start(unsigned int id, int tx, int rx); @@ -416,21 +401,11 @@ void omap2_mcbsp1_mux_fsr_src(u8 mux); int omap_mcbsp_dma_ch_params(unsigned int id, unsigned int stream); int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream); -#ifdef CONFIG_ARCH_OMAP3 /* Sidetone specific API */ int omap_st_set_chgain(unsigned int id, int channel, s16 chgain); int omap_st_get_chgain(unsigned int id, int channel, s16 *chgain); int omap_st_enable(unsigned int id); int omap_st_disable(unsigned int id); int omap_st_is_enabled(unsigned int id); -#else -static inline int omap_st_set_chgain(unsigned int id, int channel, - s16 chgain) { return 0; } -static inline int omap_st_get_chgain(unsigned int id, int channel, - s16 *chgain) { return 0; } -static inline int omap_st_enable(unsigned int id) { return 0; } -static inline int omap_st_disable(unsigned int id) { return 0; } -static inline int omap_st_is_enabled(unsigned int id) { return 0; } -#endif #endif diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index 1a7cfb3..d565b36 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c @@ -63,7 +63,6 @@ static int omap_mcbsp_read(struct omap_mcbsp *mcbsp, u16 reg, bool from_cache) } } -#ifdef CONFIG_ARCH_OMAP3 static void omap_mcbsp_st_write(struct omap_mcbsp *mcbsp, u16 reg, u32 val) { __raw_writel(val, mcbsp->st_data->io_base_st + reg); @@ -73,7 +72,6 @@ static int omap_mcbsp_st_read(struct omap_mcbsp *mcbsp, u16 reg) { return __raw_readl(mcbsp->st_data->io_base_st + reg); } -#endif #define MCBSP_READ(mcbsp, reg) \ omap_mcbsp_read(mcbsp, OMAP_MCBSP_REG_##reg, 0) @@ -258,7 +256,6 @@ int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream) } EXPORT_SYMBOL(omap_mcbsp_dma_reg_params); -#ifdef CONFIG_ARCH_OMAP3 static void omap_st_on(struct omap_mcbsp *mcbsp) { unsigned int w; @@ -657,11 +654,6 @@ int omap_mcbsp_get_dma_op_mode(unsigned int id) } EXPORT_SYMBOL(omap_mcbsp_get_dma_op_mode); -#else -static inline void omap_st_start(struct omap_mcbsp *mcbsp) {} -static inline void omap_st_stop(struct omap_mcbsp *mcbsp) {} -#endif - int omap_mcbsp_request(unsigned int id) { struct omap_mcbsp *mcbsp; @@ -935,7 +927,6 @@ void omap2_mcbsp1_mux_fsr_src(u8 mux) } #endif -#ifdef CONFIG_ARCH_OMAP3 #define max_thres(m) (mcbsp->pdata->buffer_size) #define valid_threshold(m, val) ((val) <= max_thres(m)) #define THRESHOLD_PROP_BUILDER(prop) \ @@ -1205,10 +1196,6 @@ static inline void __devexit omap34xx_device_exit(struct omap_mcbsp *mcbsp) omap_st_remove(mcbsp); } } -#else -static inline void __devinit omap34xx_device_init(struct omap_mcbsp *mcbsp) {} -static inline void __devexit omap34xx_device_exit(struct omap_mcbsp *mcbsp) {} -#endif /* CONFIG_ARCH_OMAP3 */ /* * McBSP1 and McBSP3 are directly mapped on 1610 and 1510.
Although this increases the build size a little for !OMAP3 builds it makes the code one step more generic. For instance the threshold based DMA transfers seems to be possible with OMAP4 too from quick look of the TRM. Signed-off-by: Jarkko Nikula <jhnikula@gmail.com> --- arch/arm/plat-omap/include/plat/mcbsp.h | 35 ++++-------------------------- arch/arm/plat-omap/mcbsp.c | 13 ----------- 2 files changed, 5 insertions(+), 43 deletions(-)