David Brownell <[email protected]> writes: > From: David Brownell <[email protected]> > > Decouple ASP clk_*() calls from pinmmux for DM355 and DM6446. > This removes the need for dm355_psc_mux(), and is a net minor > source and runtime code shrink. > > Note that this keeps the ASoC-related board setup code together, > but unfortunately that still doesn't live in mach-davinci with > all the other board setup logic. On my DM6446 EVM this muxing > is needed; u-boot doesn't. On the DM355 EVM, it isn't needed; > u-boot sets that up. I have no idea if SFFSDR boards need it.
Thanks, pushing... And here is an additional patch which I'll push after yours which drops the dm644x PSC mux setup and moves it into device init code, and then drops 'davinci_psc_init' all together. Until it's understood whether this is needed on the SFFSDR, I put it in devices.c instead of in board-*.c Kevin commit 30a754ca72318f3d10ba81d7ca7d65c3c5568140 Author: Kevin Hilman <[email protected]> Date: Mon Feb 9 10:44:39 2009 -0800 davinci: PSC: finalize decoupling of PSC and MUX settings Signed-off-by: Kevin Hilman <[email protected]> diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c index 4c0aaf9..0cfbd47 100644 --- a/arch/arm/mach-davinci/board-sffsdr.c +++ b/arch/arm/mach-davinci/board-sffsdr.c @@ -159,6 +159,10 @@ static __init void davinci_sffsdr_init(void) davinci_serial_init(&uart_config); davinci_init_emac(davinci_sffsdr_mac_addr); setup_usb(0, 0); /* We support only peripheral mode. */ + + /* mux VLYNQ pins */ + davinci_cfg_reg(DM644X_VLYNQEN); + davinci_cfg_reg(DM644X_VLYNQWD); } static int davinci_cpmac_eth_setup(char *str) diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index c48a80c..ff8b253 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c @@ -377,7 +377,6 @@ int __init davinci_clk_init(struct clk *clocks[]) struct clk *clkp; int i = 0; - davinci_psc_init(); while ((clkp = clocks[i++])) { if (clkp->pll_data) clk_pll_init(clkp); diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c index f934b54..a0f5a60 100644 --- a/arch/arm/mach-davinci/devices.c +++ b/arch/arm/mach-davinci/devices.c @@ -63,6 +63,9 @@ static struct platform_device davinci_i2c_device = { void __init davinci_init_i2c(struct davinci_i2c_platform_data *pdata) { + if (cpu_is_davinci_dm644x()) + davinci_cfg_reg(DM644X_I2C); + davinci_i2c_device.dev.platform_data = pdata; (void) platform_device_register(&davinci_i2c_device); } @@ -190,6 +193,18 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config) /* enable RX EDMA */ davinci_cfg_reg(DM355_EVT26_MMC0_RX); } + + else if (cpu_is_davinci_dm644x()) { + /* REVISIT: should this be in board-init code? */ + void __iomem *base = + IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE); + + /* Power-on 3.3V IO cells */ + __raw_writel(0, base + DM64XX_VDD3P3V_PWDN); + /*Set up the pull regiter for MMC */ + davinci_cfg_reg(DM644X_MSTK); + } + pdev = &davinci_mmcsd0_device; clockname = cpu_is_davinci_dm355() ? "mmcsd0" : "mmcsd"; break; diff --git a/arch/arm/mach-davinci/include/mach/hardware.h b/arch/arm/mach-davinci/include/mach/hardware.h index 594d1a7..48c7793 100644 --- a/arch/arm/mach-davinci/include/mach/hardware.h +++ b/arch/arm/mach-davinci/include/mach/hardware.h @@ -21,4 +21,7 @@ */ #define DAVINCI_SYSTEM_MODULE_BASE 0x01C40000 +/* System control register offsets */ +#define DM64XX_VDD3P3V_PWDN 0x48 + #endif /* __ASM_ARCH_HARDWARE_H */ diff --git a/arch/arm/mach-davinci/include/mach/psc.h b/arch/arm/mach-davinci/include/mach/psc.h index 11be379..fff995a 100644 --- a/arch/arm/mach-davinci/include/mach/psc.h +++ b/arch/arm/mach-davinci/include/mach/psc.h @@ -116,7 +116,6 @@ #define DM646X_LPSC_TIMER1 35 #define DM646X_LPSC_ARM_INTC 45 -extern void davinci_psc_init(void); extern void davinci_psc_config(unsigned int domain, unsigned int id, char enable); diff --git a/arch/arm/mach-davinci/psc.c b/arch/arm/mach-davinci/psc.c index 92dbf2b..b668234 100644 --- a/arch/arm/mach-davinci/psc.c +++ b/arch/arm/mach-davinci/psc.c @@ -39,41 +39,6 @@ #define MDSTAT 0x800 #define MDCTL 0xA00 -/* System control register offsets */ -#define VDD3P3V_PWDN 0x48 - -static void (*davinci_psc_mux)(unsigned int id); - -static void dm6446_psc_mux(unsigned int id) -{ - void __iomem *base = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE); - - switch (id) { - case DAVINCI_LPSC_MMC_SD: - /* VDD power manupulations are done in U-Boot for CPMAC - * so applies to MMC as well - */ - /*Set up the pull regiter for MMC */ - __raw_writel(0, base + VDD3P3V_PWDN); - davinci_cfg_reg(DM644X_MSTK); - break; - case DAVINCI_LPSC_I2C: - davinci_cfg_reg(DM644X_I2C); - break; - case DAVINCI_LPSC_VLYNQ: - davinci_cfg_reg(DM644X_VLYNQEN); - davinci_cfg_reg(DM644X_VLYNQWD); - break; - default: - break; - } -} - -static void nop_psc_mux(unsigned int id) -{ - /* nothing */ -} - /* Enable or disable a PSC domain */ void davinci_psc_config(unsigned int domain, unsigned int id, char enable) { @@ -125,19 +90,4 @@ void davinci_psc_config(unsigned int domain, unsigned int id, char enable) do { mdstat = __raw_readl(psc_base + MDSTAT + 4 * id); } while (!((mdstat & 0x0000001F) == mdstat_mask)); - - if (enable) - davinci_psc_mux(id); -} - -void __init davinci_psc_init(void) -{ - if (cpu_is_davinci_dm644x() || cpu_is_davinci_dm646x()) { - davinci_psc_mux = dm6446_psc_mux; - } else if (cpu_is_davinci_dm355()) { - davinci_psc_mux = nop_psc_mux; - } else { - pr_err("PSC: no PSC mux hooks for this CPU\n"); - davinci_psc_mux = nop_psc_mux; - } } _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
