Kevin Hilman <[email protected]> writes:

> Updates from v1/v2:
>  - add CLK_PSC flag (set at init for clks with 'lpsc' filled out)
>  - blindly dropped the remaining boot-time PSC inits
>  - more lowercase clock names, and removal of '_clk' suffix in strings
>
> and from Dave:
>  - Add PSC_DSP flag for updating dm644x DSP and VICP clocks
>  - When disabling unused clocks, avoid WARN() spewage
>  - On dm355, list two more clocks
>  - On dm64xx, list the DSP clocks too
>  - Correct some LPSC definitions:  remove invalid, define dm646x ARM
>  - AEMIF shouldn't be "always enabled" on dm6446 (EVM may need NOR tweaks)
>
> Notes:
>  - PWM[0,1] on dm6467 hang the system when disabled.  Add the
>    'usecount = 1' workaround and 'REVISIT' comment.
>
> Overview
> - distinguish between PLL1- and PLL2-derived SYSCLKs
> - PLL-derived AUX ans bypass clocks are sourced
>   before the multiplier and divider(s)
>
> TODO:
> - move the device-specific PSC init into <device>.c
>
> This was boot-tested on dm6446, dm355, dm6467 with a quick
> sanity check of /proc/davinci_clocks.
>
> With this, I think I"m ready to merge this unless there are any
> other problems.  I'll handle the 'TODO' in another patch.
>
> Signed-off-by: Kevin Hilman <[email protected]>

Pushing today,

Kevin

> ---
>  arch/arm/mach-davinci/board-dm355-evm.c  |    7 +
>  arch/arm/mach-davinci/board-dm644x-evm.c |    9 ++-
>  arch/arm/mach-davinci/clock.c            |   60 +++++++---
>  arch/arm/mach-davinci/clock.h            |    5 +-
>  arch/arm/mach-davinci/devices.c          |    4 +-
>  arch/arm/mach-davinci/dm355.c            |  204 
> ++++++++++++++++++------------
>  arch/arm/mach-davinci/dm644x.c           |  183 ++++++++++++++++++++-------
>  arch/arm/mach-davinci/dm646x.c           |  143 +++++++++++++--------
>  arch/arm/mach-davinci/include/mach/psc.h |    8 +-
>  arch/arm/mach-davinci/psc.c              |   16 ---
>  arch/arm/mach-davinci/usb.c              |    2 +-
>  drivers/mtd/nand/davinci_nand.c          |    7 +-
>  sound/soc/davinci/davinci-i2s.c          |    2 +-
>  13 files changed, 423 insertions(+), 227 deletions(-)
>
> diff --git a/arch/arm/mach-davinci/board-dm355-evm.c 
> b/arch/arm/mach-davinci/board-dm355-evm.c
> index f477933..8a0359e 100644
> --- a/arch/arm/mach-davinci/board-dm355-evm.c
> +++ b/arch/arm/mach-davinci/board-dm355-evm.c
> @@ -19,6 +19,7 @@
>  #include <linux/i2c.h>
>  #include <linux/io.h>
>  #include <linux/gpio.h>
> +#include <linux/clk.h>
>  
>  #include <asm/setup.h>
>  #include <asm/mach-types.h>
> @@ -225,10 +226,16 @@ static struct davinci_mmc_config dm355evm_mmc_config = {
>  
>  static __init void dm355_evm_init(void)
>  {
> +     struct clk *aemif;
> +
>       gpio_request(1, "dm9000");
>       gpio_direction_input(1);
>       dm355evm_dm9000_rsrc[2].start = gpio_to_irq(1);
>  
> +     aemif = clk_get(&dm355evm_dm9000.dev, "aemif");
> +     clk_enable(aemif);
> +     clk_put(aemif);
> +
>       platform_add_devices(davinci_evm_devices,
>                            ARRAY_SIZE(davinci_evm_devices));
>       evm_init_i2c();
> diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c 
> b/arch/arm/mach-davinci/board-dm644x-evm.c
> index a4ecf18..20ec961 100644
> --- a/arch/arm/mach-davinci/board-dm644x-evm.c
> +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
> @@ -26,6 +26,7 @@
>  #include <linux/mtd/physmap.h>
>  #include <linux/io.h>
>  #include <linux/phy.h>
> +#include <linux/clk.h>
>  
>  #include <asm/setup.h>
>  #include <asm/mach-types.h>
> @@ -629,6 +630,12 @@ static int davinci_phy_fixup(struct phy_device *phydev)
>  
>  static __init void davinci_evm_init(void)
>  {
> +     struct clk *aemif_clk;
> +
> +     aemif_clk = clk_get(NULL, "aemif");
> +     clk_enable(aemif_clk);
> +     clk_put(aemif_clk);
> +
>       if (HAS_ATA) {
>               if (HAS_NAND || HAS_NOR)
>                       pr_warning("WARNING: both IDE and Flash are "
> @@ -672,7 +679,7 @@ static __init void davinci_evm_irq_init(void)
>       davinci_irq_init();
>  }
>  
> -MACHINE_START(DAVINCI_EVM, "DaVinci EVM")
> +MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")
>       /* Maintainer: MontaVista Software <[email protected]> */
>       .phys_io      = IO_PHYS,
>       .io_pg_offst  = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
> diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c
> index cddd06b..93e3f02 100644
> --- a/arch/arm/mach-davinci/clock.c
> +++ b/arch/arm/mach-davinci/clock.c
> @@ -138,12 +138,19 @@ void clk_put(struct clk *clk)
>  }
>  EXPORT_SYMBOL(clk_put);
>  
> +static unsigned psc_domain(struct clk *clk)
> +{
> +     return (clk->flags & PSC_DSP)
> +             ? DAVINCI_GPSC_DSPDOMAIN
> +             : DAVINCI_GPSC_ARMDOMAIN;
> +}
> +
>  static void __clk_enable(struct clk *clk)
>  {
>       if (clk->parent)
>               __clk_enable(clk->parent);
> -     if (clk->usecount++ == 0 && !(clk->flags & CLK_PLL))
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, clk->lpsc, 1);
> +     if (clk->usecount++ == 0 && (clk->flags & CLK_PSC))
> +             davinci_psc_config(psc_domain(clk), clk->lpsc, 1);
>  }
>  
>  static void __clk_disable(struct clk *clk)
> @@ -151,7 +158,7 @@ static void __clk_disable(struct clk *clk)
>       if (WARN_ON(clk->usecount == 0))
>               return;
>       if (--clk->usecount == 0 && !(clk->flags & CLK_PLL))
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, clk->lpsc, 0);
> +             davinci_psc_config(psc_domain(clk), clk->lpsc, 0);
>       if (clk->parent)
>               __clk_disable(clk->parent);
>  }
> @@ -230,7 +237,7 @@ int clk_register(struct clk *clk)
>       if (clk->rate)
>               return 0;
>  
> -     /* Otherwise, use parent rate and any divider */
> +     /* Otherwise, default to parent rate */
>       if (clk->parent)
>               clk->rate = clk->parent->rate;
>  
> @@ -256,17 +263,18 @@ EXPORT_SYMBOL(clk_unregister);
>  static int __init clk_disable_unused(void)
>  {
>       struct clk *ck;
> -     unsigned long flags;
>  
> +     spin_lock_irq(&clockfw_lock);
>       list_for_each_entry(ck, &clocks, node) {
>               if (ck->usecount > 0)
>                       continue;
> +             if (!(ck->flags & CLK_PSC))
> +                     continue;
>  
>               printk(KERN_INFO "Clocks: disable unused %s\n", ck->name);
> -             spin_lock_irqsave(&clockfw_lock, flags);
> -             __clk_disable(ck);
> -             spin_unlock_irqrestore(&clockfw_lock, flags);
> +             davinci_psc_config(psc_domain(ck), ck->lpsc, 0);
>       }
> +     spin_unlock_irq(&clockfw_lock);
>  
>       return 0;
>  }
> @@ -278,17 +286,28 @@ static void clk_sysclk_recalc(struct clk *clk)
>       u32 v, plldiv;
>       struct pll_data *pll;
>  
> -     /* Immediate parent must be PLL */
> -     if (WARN_ON(!clk->parent || !clk->parent->pll_data))
> +     /* If this is the PLL base clock, no more calculations needed */
> +     if (clk->pll_data)
> +             return;
> +
> +     if (WARN_ON(!clk->parent))
>               return;
>  
> -     pll = clk->parent->pll_data;
>       clk->rate = clk->parent->rate;
>  
> -     /* If bypass divider (BPDIV) use input reference clock */
> -     if (clk->div_reg == BPDIV)
> +     /* Otherwise, the parent must be a PLL */
> +     if (WARN_ON(!clk->parent->pll_data))
> +             return;
> +
> +     pll = clk->parent->pll_data;
> +
> +     /* If pre-PLL, source clock is before the multiplier and divider(s) */
> +     if (clk->flags & PRE_PLL)
>               clk->rate = pll->input_rate;
>  
> +     if (!clk->div_reg)
> +             return;
> +
>       v = __raw_readl(pll->base + clk->div_reg);
>       if (v & PLLDIV_EN) {
>               plldiv = (v & PLLDIV_RATIO_MASK) + 1;
> @@ -362,12 +381,16 @@ int __init davinci_clk_init(struct clk *clocks[])
>       while ((clkp = clocks[i++])) {
>               if (clkp->pll_data)
>                       clk_pll_init(clkp);
> -             clk_register(clkp);
>  
>               /* Calculate rates for PLL-derived clocks */
> -             if (clkp->div_reg)
> +             else if (clkp->flags & CLK_PLL)
>                       clk_sysclk_recalc(clkp);
>  
> +             if (clkp->lpsc)
> +                     clkp->flags |= CLK_PSC;
> +
> +             clk_register(clkp);
> +
>               /* FIXME: remove equivalent special-cased code from
>                * davinci_psc_init() once cpus list *all* clocks.
>                */
> @@ -411,7 +434,10 @@ dump_clock(struct seq_file *s, unsigned nest, struct clk 
> *parent)
>       struct clk      *clk;
>       unsigned        i;
>  
> -     state = (parent->flags & CLK_PLL) ? "pll" : "psc";
> +     if (parent->flags & CLK_PLL)
> +             state = "pll";
> +     else if (parent->flags & CLK_PSC)
> +             state = "psc";
>  
>       /* <nest spaces> name <pad to end> */
>       memset(buf, ' ', sizeof(buf) - 1);
> @@ -421,7 +447,7 @@ dump_clock(struct seq_file *s, unsigned nest, struct clk 
> *parent)
>                       min(i, (unsigned)(sizeof(buf) - 1 - nest)));
>  
>       seq_printf(s, "%s users=%2d %-3s %9ld Hz\n",
> -             buf, parent->usecount, state, clk_get_rate(parent));
> +                buf, parent->usecount, state ? : "", clk_get_rate(parent));
>       /* REVISIT show device associations too */
>  
>       /* cost is now small, but not linear... */
> diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h
> index 428edcf..c1191df 100644
> --- a/arch/arm/mach-davinci/clock.h
> +++ b/arch/arm/mach-davinci/clock.h
> @@ -71,7 +71,10 @@ struct clk {
>  
>  /* Clock flags */
>  #define ALWAYS_ENABLED               BIT(1)
> -#define CLK_PLL                      BIT(2)
> +#define CLK_PSC                 BIT(2)
> +#define PSC_DSP                 BIT(3) /* PSC uses DSP domain, not ARM */
> +#define CLK_PLL                      BIT(4) /* PLL-derived clock */
> +#define PRE_PLL                 BIT(5) /* source is before PLL mult/div */
>  
>  int davinci_clk_associate(struct device *dev, const char *logical_clockname,
>                         const char *physical_clockname);
> diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
> index 42961ca..f934b54 100644
> --- a/arch/arm/mach-davinci/devices.c
> +++ b/arch/arm/mach-davinci/devices.c
> @@ -176,7 +176,7 @@ void __init davinci_setup_mmc(int module, struct 
> davinci_mmc_config *config)
>               davinci_cfg_reg(DM355_SD1_DATA3);
>  
>               pdev = &davinci_mmcsd1_device;
> -             clockname = "MMCSDCLK1";
> +             clockname = "mmcsd1";
>               break;
>       case 0:
>               if (cpu_is_davinci_dm355()) {
> @@ -191,7 +191,7 @@ void __init davinci_setup_mmc(int module, struct 
> davinci_mmc_config *config)
>                       davinci_cfg_reg(DM355_EVT26_MMC0_RX);
>               }
>               pdev = &davinci_mmcsd0_device;
> -             clockname = cpu_is_davinci_dm355() ? "MMCSDCLK0" : "MMCSDCLK";
> +             clockname = cpu_is_davinci_dm355() ? "mmcsd0" : "mmcsd";
>               break;
>       }
>  
> diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
> index 8286753..51b24dd 100644
> --- a/arch/arm/mach-davinci/dm355.c
> +++ b/arch/arm/mach-davinci/dm355.c
> @@ -37,7 +37,6 @@ static struct clk ref_clk = {
>       .name = "ref_clk",
>       /* FIXME -- crystal rate is board-specific */
>       .rate = DM355_REF_FREQ,
> -     .flags = CLK_PLL,
>  };
>  
>  static struct clk pll1_clk = {
> @@ -47,90 +46,120 @@ static struct clk pll1_clk = {
>       .pll_data = &pll1_data,
>  };
>  
> -static struct clk pll2_clk = {
> -     .name = "pll2",
> -     .parent = &ref_clk,
> -     .flags = CLK_PLL,
> -     .pll_data = &pll2_data,
> -};
> -
> -static struct clk aux_clk = {
> -     .name = "aux_clk",
> -     .parent = &ref_clk,
> -     .flags = CLK_PLL,
> +static struct clk pll1_aux_clk = {
> +     .name = "pll1_aux_clk",
> +     .parent = &pll1_clk,
> +     .flags = CLK_PLL | PRE_PLL,
>  };
>  
> -static struct clk sysclk1_clk = {
> -     .name = "SYSCLK1",
> +static struct clk pll1_sysclk1 = {
> +     .name = "pll1_sysclk1",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV1,
>  };
>  
> -static struct clk sysclk2_clk = {
> -     .name = "SYSCLK2",
> +static struct clk pll1_sysclk2 = {
> +     .name = "pll1_sysclk2",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV2,
>  };
>  
> -static struct clk vpbe_clk = { /* a.k.a. PLL1.SYSCLK3 */
> -     .name = "vpbe",
> +static struct clk pll1_sysclk3 = {
> +     .name = "pll1_sysclk3",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV3,
>  };
>  
> -static struct clk vpss_clk = {  /* a.k.a. PLL1.SYCLK4 */
> -     .name = "vpss",
> +static struct clk pll1_sysclk4 = {
> +     .name = "pll1_sysclk4",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV4,
>  };
>  
> +static struct clk pll1_sysclkbp = {
> +     .name = "pll1_sysclkbp",
> +     .parent = &pll1_clk,
> +     .flags = CLK_PLL | PRE_PLL,
> +     .div_reg = BPDIV
> +};
> +
> +static struct clk vpss_dac_clk = {
> +     .name = "vpss_dac",
> +     .parent = &pll1_sysclk3,
> +     .lpsc = DM355_LPSC_VPSS_DAC,
> +};
> +
> +static struct clk vpss_master_clk = {
> +     .name = "vpss_master",
> +     .parent = &pll1_sysclk4,
> +     .lpsc = DAVINCI_LPSC_VPSSMSTR,
> +     .flags = CLK_PSC,
> +};
> +
> +static struct clk vpss_slave_clk = {
> +     .name = "vpss_slave",
> +     .parent = &pll1_sysclk4,
> +     .lpsc = DAVINCI_LPSC_VPSSSLV,
> +};
> +
> +
>  static struct clk clkout1_clk = {
>       .name = "clkout1",
> -     .parent = &aux_clk,
> -     .flags = CLK_PLL,
> +     .parent = &pll1_aux_clk,
>       /* NOTE:  clkout1 can be externally gated by muxing GPIO-18 */
>  };
>  
> -static struct clk clkout2_clk = { /* a.k.a. PLL1.SYSCLKBP */
> +static struct clk clkout2_clk = {
>       .name = "clkout2",
> -     .parent = &pll1_clk,
> +     .parent = &pll1_sysclkbp,
> +};
> +
> +static struct clk pll2_clk = {
> +     .name = "pll2",
> +     .parent = &ref_clk,
>       .flags = CLK_PLL,
> -     .div_reg = BPDIV,
> +     .pll_data = &pll2_data,
>  };
>  
> -static struct clk clkout3_clk = {
> -     .name = "clkout3",
> +static struct clk pll2_sysclk1 = {
> +     .name = "pll2_sysclk1",
>       .parent = &pll2_clk,
>       .flags = CLK_PLL,
> -     .div_reg = BPDIV,
> +     .div_reg = PLLDIV1,
> +};
> +
> +static struct clk pll2_sysclkbp = {
> +     .name = "pll2_sysclkbp",
> +     .parent = &pll2_clk,
> +     .flags = CLK_PLL | PRE_PLL,
> +     .div_reg = BPDIV
> +};
> +
> +static struct clk clkout3_clk = {
> +     .name = "clkout3",
> +     .parent = &pll2_sysclkbp,
>       /* NOTE:  clkout3 can be externally gated by muxing GPIO-16 */
>  };
>  
>  static struct clk arm_clk = {
> -     .name = "ARMCLK",
> -     .parent = &sysclk1_clk,
> -     .flags = ALWAYS_ENABLED | CLK_PLL,
> +     .name = "arm_clk",
> +     .parent = &pll1_sysclk1,
> +     .lpsc = DAVINCI_LPSC_ARM,
> +     .flags = ALWAYS_ENABLED,
>  };
>  
>  /*
> - * NOT LISTED below, but turned on by PSC init:
> + * NOT LISTED below, and not touched by Linux
>   *   - in SyncReset state by default
> - *   .lpsc = DAVINCI_LPSC_VPSSMSTR, .parent = &vpss_clk,
> - *   .lpsc = DAVINCI_LPSC_VPSSSLV, .parent = &vpss_clk,
>   *   .lpsc = DAVINCI_LPSC_TPCC,
>   *   .lpsc = DAVINCI_LPSC_TPTC0,
>   *   .lpsc = DAVINCI_LPSC_TPTC1,
> - *
> - * NOT LISTED below, and not touched by Linux
> - *   - in SyncReset state by default
>   *   .lpsc = DAVINCI_LPSC_DDR_EMIF, .parent = &sysclk2_clk,
> - *   .lpsc = DM355_LPSC_RT0, .parent = &aux_clk,
>   *   .lpsc = DAVINCI_LPSC_MEMSTICK,
> - *   .lpsc = 41, .parent = &vpss_clk, // VPSS DAC
>   *   - in Enabled state by default
>   *   .lpsc = DAVINCI_LPSC_SYSTEM_SUBSYS,
>   *   .lpsc = DAVINCI_LPSC_SCR2,      // "bus"
> @@ -144,153 +173,165 @@ static struct clk arm_clk = {
>  
>  static struct clk mjcp_clk = {
>       .name = "mjcp",
> -     .parent = &sysclk1_clk,
> +     .parent = &pll1_sysclk1,
>       .lpsc = DAVINCI_LPSC_IMCOP,
>  };
>  
>  static struct clk uart0_clk = {
>       .name = "uart0",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_UART0,
>  };
>  
>  static struct clk uart1_clk = {
>       .name = "uart1",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_UART1,
>  };
>  
>  static struct clk uart2_clk = {
>       .name = "uart2",
> -     .parent = &sysclk2_clk,
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_UART2,
>  };
>  
>  static struct clk i2c_clk = {
>       .name = "I2CCLK",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_I2C,
>  };
>  
>  static struct clk asp0_clk = {
> -     .name = "asp0_clk",
> -     .parent = &sysclk2_clk,
> +     .name = "asp0",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_McBSP,
>  };
>  
>  static struct clk asp1_clk = {
> -     .name = "asp1_clk",
> -     .parent = &sysclk2_clk,
> +     .name = "asp1",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DM355_LPSC_McBSP1,
>  };
>  
>  static struct clk mmcsd0_clk = {
> -     .name = "MMCSDCLK0",
> -     .parent = &sysclk2_clk,
> +     .name = "mmcsd0",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_MMC_SD,
>  };
>  
>  static struct clk mmcsd1_clk = {
> -     .name = "MMCSDCLK1",
> -     .parent = &sysclk2_clk,
> +     .name = "mmcsd1",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DM355_LPSC_MMC_SD1,
>  };
>  
>  static struct clk spi0_clk = {
> -     .name = "SPICLK",
> -     .parent = &sysclk2_clk,
> +     .name = "spi0",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_SPI,
>  };
>  
>  static struct clk spi1_clk = {
> -     .name = "SPICLK1",
> -     .parent = &sysclk2_clk,
> +     .name = "spi1",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DM355_LPSC_SPI1,
>  };
>  
>  static struct clk spi2_clk = {
> -     .name = "SPICLK2",
> -     .parent = &sysclk2_clk,
> +     .name = "spi2",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DM355_LPSC_SPI2,
>  };
> +
>  static struct clk gpio_clk = {
>       .name = "gpio",
> -     .parent = &sysclk2_clk,
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_GPIO,
>  };
>  
>  static struct clk aemif_clk = {
> -     .name = "AEMIFCLK",
> -     .parent = &sysclk2_clk,
> +     .name = "aemif",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_AEMIF,
> -     .usecount = 1,
>  };
>  
>  static struct clk pwm0_clk = {
> -     .name = "PWM0_CLK",
> -     .parent = &aux_clk,
> +     .name = "pwm0",
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_PWM0,
>  };
>  
>  static struct clk pwm1_clk = {
> -     .name = "PWM1_CLK",
> -     .parent = &aux_clk,
> +     .name = "pwm1",
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_PWM1,
>  };
>  
>  static struct clk pwm2_clk = {
> -     .name = "PWM2_CLK",
> -     .parent = &aux_clk,
> +     .name = "pwm2",
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_PWM2,
>  };
>  
>  static struct clk pwm3_clk = {
> -     .name = "PWM3_CLK",
> -     .parent = &aux_clk,
> +     .name = "pwm3",
> +     .parent = &pll1_aux_clk,
>       .lpsc = DM355_LPSC_PWM3,
>  };
>  
>  static struct clk timer0_clk = {
>       .name = "timer0",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER0,
>  };
>  
>  static struct clk timer1_clk = {
>       .name = "timer1",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER1,
>  };
>  
>  static struct clk timer2_clk = {
>       .name = "timer2",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER2,
>  };
>  
>  static struct clk timer3_clk = {
>       .name = "timer3",
> -     .parent = &aux_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DM355_LPSC_TIMER3,
>  };
>  
> +static struct clk rto_clk = {
> +     .name = "rto",
> +     .parent = &pll1_aux_clk,
> +     .lpsc = DM355_LPSC_RTO,
> +};
> +
>  static struct clk usb_clk = {
> -     .name = "USBCLK",
> -     .parent = &sysclk2_clk,
> +     .name = "usb",
> +     .parent = &pll1_sysclk2,
>       .lpsc = DAVINCI_LPSC_USB,
>  };
>  
>  static struct clk *dm355_clks[] __initdata = {
>       &ref_clk,
>       &pll1_clk,
> -     &aux_clk,
> -     &sysclk1_clk,
> -     &sysclk2_clk,
> -     &vpbe_clk,
> -     &vpss_clk,
> +     &pll1_sysclk1,
> +     &pll1_sysclk2,
> +     &pll1_sysclk3,
> +     &pll1_sysclk4,
> +     &pll1_aux_clk,
> +     &pll1_sysclkbp,
> +     &vpss_dac_clk,
> +     &vpss_master_clk,
> +     &vpss_slave_clk,
>       &clkout1_clk,
>       &clkout2_clk,
>       &pll2_clk,
> +     &pll2_sysclk1,
> +     &pll2_sysclkbp,
>       &clkout3_clk,
>       &arm_clk,
>       &mjcp_clk,
> @@ -315,6 +356,7 @@ static struct clk *dm355_clks[] __initdata = {
>       &timer1_clk,
>       &timer2_clk,
>       &timer3_clk,
> +     &rto_clk,
>       &usb_clk,
>       NULL,
>  };
> diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
> index 680b1dd..c915a47 100644
> --- a/arch/arm/mach-davinci/dm644x.c
> +++ b/arch/arm/mach-davinci/dm644x.c
> @@ -34,7 +34,6 @@ static struct pll_data pll2_data = {
>  static struct clk ref_clk = {
>       .name = "ref_clk",
>       .rate = DM644X_REF_FREQ,
> -     .flags = CLK_PLL,
>  };
>  
>  static struct clk pll1_clk = {
> @@ -44,154 +43,243 @@ static struct clk pll1_clk = {
>       .flags = CLK_PLL,
>  };
>  
> -static struct clk pll2_clk = {
> -     .name = "pll2",
> -     .parent = &ref_clk,
> -     .pll_data = &pll2_data,
> -     .flags = CLK_PLL,
> -};
> -
> -static struct clk sysclk1_clk = {
> -     .name = "SYSCLK1",
> +static struct clk pll1_sysclk1 = {
> +     .name = "pll1_sysclk1",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV1,
>  };
>  
> -static struct clk sysclk2_clk = {
> -     .name = "SYSCLK2",
> +static struct clk pll1_sysclk2 = {
> +     .name = "pll1_sysclk2",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV2,
>  };
>  
> -static struct clk sysclk3_clk = {
> -     .name = "SYSCLK3",
> +static struct clk pll1_sysclk3 = {
> +     .name = "pll1_sysclk3",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV3,
>  };
>  
> -static struct clk sysclk5_clk = {
> -     .name = "SYSCLK5",
> +static struct clk pll1_sysclk5 = {
> +     .name = "pll1_sysclk5",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV5,
>  };
>  
> +static struct clk pll1_aux_clk = {
> +     .name = "pll1_aux_clk",
> +     .parent = &pll1_clk,
> +     .flags = CLK_PLL | PRE_PLL,
> +};
> +
> +static struct clk pll1_sysclkbp = {
> +     .name = "pll1_sysclkbp",
> +     .parent = &pll1_clk,
> +     .flags = CLK_PLL | PRE_PLL,
> +     .div_reg = BPDIV
> +};
> +
> +static struct clk pll2_clk = {
> +     .name = "pll2",
> +     .parent = &ref_clk,
> +     .pll_data = &pll2_data,
> +     .flags = CLK_PLL,
> +};
> +
> +static struct clk pll2_sysclk1 = {
> +     .name = "pll2_sysclk1",
> +     .parent = &pll2_clk,
> +     .flags = CLK_PLL,
> +     .div_reg = PLLDIV1,
> +};
> +
> +static struct clk pll2_sysclk2 = {
> +     .name = "pll2_sysclk2",
> +     .parent = &pll2_clk,
> +     .flags = CLK_PLL,
> +     .div_reg = PLLDIV2,
> +};
> +
> +static struct clk pll2_sysclkbp = {
> +     .name = "pll2_sysclkbp",
> +     .parent = &pll2_clk,
> +     .flags = CLK_PLL | PRE_PLL,
> +     .div_reg = BPDIV
> +};
> +
> +static struct clk dsp_clk = {
> +     .name = "dsp",
> +     .parent = &pll1_sysclk1,
> +     .lpsc = DAVINCI_LPSC_GEM,
> +     .flags = PSC_DSP,
> +     .usecount = 1,                  /* REVISIT how to disable? */
> +};
> +
>  static struct clk arm_clk = {
> -     .name = "ARMCLK",
> -     .parent = &sysclk2_clk,
> -     .lpsc = DAVINCI_LPSC_NONE,
> +     .name = "arm",
> +     .parent = &pll1_sysclk2,
> +     .lpsc = DAVINCI_LPSC_ARM,
>       .flags = ALWAYS_ENABLED,
>  };
>  
> +static struct clk vicp_clk = {
> +     .name = "vicp",
> +     .parent = &pll1_sysclk2,
> +     .lpsc = DAVINCI_LPSC_IMCOP,
> +     .flags = PSC_DSP,
> +     .usecount = 1,                  /* REVISIT how to disable? */
> +};
> +
> +static struct clk vpss_master_clk = {
> +     .name = "vpss_master",
> +     .parent = &pll1_sysclk3,
> +     .lpsc = DAVINCI_LPSC_VPSSMSTR,
> +     .flags = CLK_PSC,
> +};
> +
> +static struct clk vpss_slave_clk = {
> +     .name = "vpss_slave",
> +     .parent = &pll1_sysclk3,
> +     .lpsc = DAVINCI_LPSC_VPSSSLV,
> +};
> +
>  static struct clk uart0_clk = {
>       .name = "uart0",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_UART0,
>  };
>  
>  static struct clk uart1_clk = {
>       .name = "uart1",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_UART1,
>  };
>  
>  static struct clk uart2_clk = {
>       .name = "uart2",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_UART2,
>  };
>  
>  static struct clk emac_clk = {
>       .name = "EMACCLK",
> -     .parent = &sysclk5_clk,
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_EMAC_WRAPPER,
>  };
>  
>  static struct clk i2c_clk = {
>       .name = "I2CCLK",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_I2C,
>  };
>  
>  static struct clk ide_clk = {
>       .name = "IDECLK",
> -     .parent = &sysclk5_clk,
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_ATA,
>  };
>  
>  static struct clk asp_clk = {
> -     .name = "asp0_clk",
> -     .parent = &sysclk5_clk,
> +     .name = "asp0",
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_McBSP,
>  };
>  
>  static struct clk mmcsd_clk = {
> -     .name = "MMCSDCLK",
> -     .parent = &sysclk5_clk,
> +     .name = "mmcsd",
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_MMC_SD,
>  };
>  
>  static struct clk spi_clk = {
> -     .name = "SPICLK",
> -     .parent = &sysclk5_clk,
> +     .name = "spi",
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_SPI,
>  };
>  
>  static struct clk gpio_clk = {
>       .name = "gpio",
> -     .parent = &sysclk5_clk,
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_GPIO,
>  };
>  
>  static struct clk usb_clk = {
> -     .name = "USBCLK",
> -     .parent = &sysclk5_clk,
> +     .name = "usb",
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_USB,
>  };
>  
>  static struct clk vlynq_clk = {
> -     .name = "VLYNQCLK",
> -     .parent = &sysclk5_clk,
> +     .name = "vlynq",
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_VLYNQ,
>  };
>  
>  static struct clk aemif_clk = {
> -     .name = "AEMIFCLK",
> -     .parent = &sysclk5_clk,
> +     .name = "aemif",
> +     .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_AEMIF,
> -     .flags = ALWAYS_ENABLED,
> +};
> +
> +static struct clk pwm0_clk = {
> +     .name = "pwm0",
> +     .parent = &pll1_aux_clk,
> +     .lpsc = DAVINCI_LPSC_PWM0,
> +};
> +
> +static struct clk pwm1_clk = {
> +     .name = "pwm1",
> +     .parent = &pll1_aux_clk,
> +     .lpsc = DAVINCI_LPSC_PWM1,
> +};
> +
> +static struct clk pwm2_clk = {
> +     .name = "pwm2",
> +     .parent = &pll1_aux_clk,
> +     .lpsc = DAVINCI_LPSC_PWM2,
>  };
>  
>  static struct clk timer0_clk = {
>       .name = "timer0",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER0,
>  };
>  
>  static struct clk timer1_clk = {
>       .name = "timer1",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER1,
>  };
>  
>  static struct clk timer2_clk = {
>       .name = "timer2",
> -     .parent = &ref_clk,
> +     .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER2,
>  };
>  
>  static struct clk *dm644x_clks[] __initdata = {
>       &ref_clk,
>       &pll1_clk,
> +     &pll1_sysclk1,
> +     &pll1_sysclk2,
> +     &pll1_sysclk3,
> +     &pll1_sysclk5,
> +     &pll1_aux_clk,
> +     &pll1_sysclkbp,
>       &pll2_clk,
> -     &sysclk1_clk,
> -     &sysclk2_clk,
> -     &sysclk3_clk,
> -     &sysclk5_clk,
> +     &pll2_sysclk1,
> +     &pll2_sysclk2,
> +     &pll2_sysclkbp,
> +     &dsp_clk,
>       &arm_clk,
> +     &vicp_clk,
> +     &vpss_master_clk,
> +     &vpss_slave_clk,
>       &uart0_clk,
>       &uart1_clk,
>       &uart2_clk,
> @@ -205,6 +293,9 @@ static struct clk *dm644x_clks[] __initdata = {
>       &usb_clk,
>       &vlynq_clk,
>       &aemif_clk,
> +     &pwm0_clk,
> +     &pwm1_clk,
> +     &pwm2_clk,
>       &timer0_clk,
>       &timer1_clk,
>       &timer2_clk,
> diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
> index 3f54872..ea97a72 100644
> --- a/arch/arm/mach-davinci/dm646x.c
> +++ b/arch/arm/mach-davinci/dm646x.c
> @@ -36,13 +36,11 @@ static struct pll_data pll2_data = {
>  static struct clk ref_clk = {
>       .name = "ref_clk",
>       .rate = DM646X_REF_FREQ,
> -     .flags = CLK_PLL,
>  };
>  
> -static struct clk aux_clk = {
> -     .name = "aux_clk",
> +static struct clk aux_clkin = {
> +     .name = "aux_clkin",
>       .rate = DM646X_AUX_FREQ,
> -     .flags = CLK_PLL,
>  };
>  
>  static struct clk pll1_clk = {
> @@ -52,151 +50,190 @@ static struct clk pll1_clk = {
>       .flags = CLK_PLL,
>  };
>  
> -static struct clk pll2_clk = {
> -     .name = "pll2",
> -     .parent = &ref_clk,
> -     .pll_data = &pll2_data,
> -     .flags = CLK_PLL,
> -};
> -
> -static struct clk sysclk1_clk = {
> -     .name = "SYSCLK1",
> +static struct clk pll1_sysclk1 = {
> +     .name = "pll1_sysclk1",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV1,
>  };
>  
> -static struct clk sysclk2_clk = {
> -     .name = "SYSCLK2",
> +static struct clk pll1_sysclk2 = {
> +     .name = "pll1_sysclk2",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV2,
>  };
>  
> -static struct clk sysclk3_clk = {
> -     .name = "SYSCLK3",
> +static struct clk pll1_sysclk3 = {
> +     .name = "pll1_sysclk3",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV3,
>  };
>  
> -static struct clk sysclk4_clk = {
> -     .name = "SYSCLK4",
> +static struct clk pll1_sysclk4 = {
> +     .name = "pll1_sysclk4",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV4,
>  };
>  
> -static struct clk sysclk5_clk = {
> -     .name = "SYSCLK5",
> +static struct clk pll1_sysclk5 = {
> +     .name = "pll1_sysclk5",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV5,
>  };
>  
> -static struct clk sysclk6_clk = {
> -     .name = "SYSCLK6",
> +static struct clk pll1_sysclk6 = {
> +     .name = "pll1_sysclk6",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV6,
>  };
>  
> -static struct clk sysclk8_clk = {
> -     .name = "SYSCLK8",
> +static struct clk pll1_sysclk8 = {
> +     .name = "pll1_sysclk8",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV8,
>  };
>  
> -static struct clk sysclk9_clk = {
> -     .name = "SYSCLK9",
> +static struct clk pll1_sysclk9 = {
> +     .name = "pll1_sysclk9",
>       .parent = &pll1_clk,
>       .flags = CLK_PLL,
>       .div_reg = PLLDIV9,
>  };
>  
> -static struct clk sysclkbp_clk = {
> -     .name = "SYSCLKBP",
> +static struct clk pll1_sysclkbp = {
> +     .name = "pll1_sysclkbp",
>       .parent = &pll1_clk,
> -     .flags = CLK_PLL,
> +     .flags = CLK_PLL | PRE_PLL,
>       .div_reg = BPDIV,
>  };
>  
> +static struct clk pll1_aux_clk = {
> +     .name = "pll1_aux_clk",
> +     .parent = &pll1_clk,
> +     .flags = CLK_PLL | PRE_PLL,
> +};
> +
> +static struct clk pll2_clk = {
> +     .name = "pll2_clk",
> +     .parent = &ref_clk,
> +     .pll_data = &pll2_data,
> +     .flags = CLK_PLL,
> +};
> +
> +static struct clk pll2_sysclk1 = {
> +     .name = "pll2_sysclk1",
> +     .parent = &pll2_clk,
> +     .flags = CLK_PLL,
> +     .div_reg = PLLDIV1,
> +};
> +
> +static struct clk dsp_clk = {
> +     .name = "dsp",
> +     .parent = &pll1_sysclk1,
> +     .lpsc = DM646X_LPSC_C64X_CPU,
> +     .flags = PSC_DSP,
> +     .usecount = 1,                  /* REVISIT how to disable? */
> +};
> +
>  static struct clk arm_clk = {
> -     .name = "ARMCLK",
> -     .parent = &sysclk2_clk,
> -     .lpsc = DAVINCI_LPSC_NONE,
> +     .name = "arm",
> +     .parent = &pll1_sysclk2,
> +     .lpsc = DM646X_LPSC_ARM,
>       .flags = ALWAYS_ENABLED,
>  };
>  
>  static struct clk uart0_clk = {
>       .name = "uart0",
> -     .parent = &aux_clk,
> +     .parent = &aux_clkin,
>       .lpsc = DM646X_LPSC_UART0,
>  };
>  
>  static struct clk uart1_clk = {
>       .name = "uart1",
> -     .parent = &aux_clk,
> +     .parent = &aux_clkin,
>       .lpsc = DM646X_LPSC_UART1,
>  };
>  
>  static struct clk uart2_clk = {
>       .name = "uart2",
> -     .parent = &aux_clk,
> +     .parent = &aux_clkin,
>       .lpsc = DM646X_LPSC_UART2,
>  };
>  
>  static struct clk i2c_clk = {
>       .name = "I2CCLK",
> -     .parent = &sysclk3_clk,
> +     .parent = &pll1_sysclk3,
>       .lpsc = DM646X_LPSC_I2C,
>  };
>  
>  static struct clk gpio_clk = {
>       .name = "gpio",
> -     .parent = &sysclk3_clk,
> +     .parent = &pll1_sysclk3,
>       .lpsc = DM646X_LPSC_GPIO,
>  };
>  
>  static struct clk aemif_clk = {
> -     .name = "AEMIFCLK",
> -     .parent = &sysclk3_clk,
> +     .name = "aemif",
> +     .parent = &pll1_sysclk3,
>       .lpsc = DM646X_LPSC_AEMIF,
>       .flags = ALWAYS_ENABLED,
>  };
>  
>  static struct clk emac_clk = {
>       .name = "EMACCLK",
> -     .parent = &sysclk3_clk,
> +     .parent = &pll1_sysclk3,
>       .lpsc = DM646X_LPSC_EMAC,
>  };
>  
> +static struct clk pwm0_clk = {
> +     .name = "pwm0",
> +     .parent = &pll1_sysclk3,
> +     .lpsc = DM646X_LPSC_PWM0,
> +     .usecount = 1,            /* REVIST: disabling hangs system */
> +};
> +
> +static struct clk pwm1_clk = {
> +     .name = "pwm1",
> +     .parent = &pll1_sysclk3,
> +     .lpsc = DM646X_LPSC_PWM1,
> +     .usecount = 1,            /* REVIST: disabling hangs system */
> +};
> +
>  static struct clk timer0_clk = {
>       .name = "timer0",
> -     .parent = &sysclk3_clk,
> +     .parent = &pll1_sysclk3,
>       .lpsc = DM646X_LPSC_TIMER0,
>  };
>  
>  static struct clk timer1_clk = {
>       .name = "timer1",
> -     .parent = &sysclk3_clk,
> +     .parent = &pll1_sysclk3,
>       .lpsc = DM646X_LPSC_TIMER1,
>  };
>  
>  static struct clk *dm646x_clks[] __initdata = {
>       &ref_clk,
> +     &aux_clkin,
>       &pll1_clk,
> -     &sysclk1_clk,
> -     &sysclk2_clk,
> -     &sysclk3_clk,
> -     &sysclk4_clk,
> -     &sysclk5_clk,
> -     &sysclk6_clk,
> -     &sysclk8_clk,
> -     &sysclk9_clk,
> -     &sysclkbp_clk,
> +     &pll1_sysclk1,
> +     &pll1_sysclk2,
> +     &pll1_sysclk3,
> +     &pll1_sysclk4,
> +     &pll1_sysclk5,
> +     &pll1_sysclk6,
> +     &pll1_sysclk8,
> +     &pll1_sysclk9,
> +     &pll1_sysclkbp,
> +     &pll1_aux_clk,
>       &pll2_clk,
> +     &pll2_sysclk1,
> +     &dsp_clk,
>       &arm_clk,
>       &uart0_clk,
>       &uart1_clk,
> @@ -205,6 +242,8 @@ static struct clk *dm646x_clks[] __initdata = {
>       &gpio_clk,
>       &aemif_clk,
>       &emac_clk,
> +     &pwm0_clk,
> +     &pwm1_clk,
>       &timer0_clk,
>       &timer1_clk,
>       NULL,
> diff --git a/arch/arm/mach-davinci/include/mach/psc.h 
> b/arch/arm/mach-davinci/include/mach/psc.h
> index 7edb362..11be379 100644
> --- a/arch/arm/mach-davinci/include/mach/psc.h
> +++ b/arch/arm/mach-davinci/include/mach/psc.h
> @@ -31,8 +31,6 @@
>  #define DAVINCI_GPSC_ARMDOMAIN      0
>  #define DAVINCI_GPSC_DSPDOMAIN      1
>  
> -#define DAVINCI_LPSC_NONE           0xff
> -
>  #define DAVINCI_LPSC_VPSSMSTR       0
>  #define DAVINCI_LPSC_VPSSSLV        1
>  #define DAVINCI_LPSC_TPCC           2
> @@ -40,8 +38,6 @@
>  #define DAVINCI_LPSC_TPTC1          4
>  #define DAVINCI_LPSC_EMAC           5
>  #define DAVINCI_LPSC_EMAC_WRAPPER   6
> -#define DAVINCI_LPSC_MDIO           7
> -#define DAVINCI_LPSC_IEEE1394       8
>  #define DAVINCI_LPSC_USB            9
>  #define DAVINCI_LPSC_ATA            10
>  #define DAVINCI_LPSC_VLYNQ          11
> @@ -49,7 +45,6 @@
>  #define DAVINCI_LPSC_DDR_EMIF       13
>  #define DAVINCI_LPSC_AEMIF          14
>  #define DAVINCI_LPSC_MMC_SD         15
> -#define DAVINCI_LPSC_MEMSTICK       16
>  #define DAVINCI_LPSC_McBSP          17
>  #define DAVINCI_LPSC_I2C            18
>  #define DAVINCI_LPSC_UART0          19
> @@ -82,11 +77,12 @@
>  #define DM355_LPSC_PWM3                      10
>  #define DM355_LPSC_SPI2                      11
>  #define DM355_LPSC_RTO                       12
> +#define DM355_LPSC_VPSS_DAC          41
>  
>  /*
>   * LPSC Assignments
>   */
> -#define DM646X_LPSC_RESERVED       0
> +#define DM646X_LPSC_ARM            0
>  #define DM646X_LPSC_C64X_CPU       1
>  #define DM646X_LPSC_HDVICP0        2
>  #define DM646X_LPSC_HDVICP1        3
> diff --git a/arch/arm/mach-davinci/psc.c b/arch/arm/mach-davinci/psc.c
> index 1859a53..d2ed4fa 100644
> --- a/arch/arm/mach-davinci/psc.c
> +++ b/arch/arm/mach-davinci/psc.c
> @@ -124,9 +124,6 @@ void davinci_psc_config(unsigned int domain, unsigned int 
> id, char enable)
>       u32 epcpr, ptcmd, ptstat, pdstat, pdctl1, mdstat, mdctl, mdstat_mask;
>       void __iomem *psc_base = IO_ADDRESS(DAVINCI_PWR_SLEEP_CNTRL_BASE);
>  
> -     if (id == DAVINCI_LPSC_NONE)
> -             return;
> -
>       mdctl = __raw_readl(psc_base + MDCTL + 4 * id);
>       if (enable)
>               mdctl |= 0x00000003;    /* Enable Module */
> @@ -187,17 +184,4 @@ void __init davinci_psc_init(void)
>               pr_err("PSC: no PSC mux hooks for this CPU\n");
>               davinci_psc_mux = nop_psc_mux;
>       }
> -
> -     if (cpu_is_davinci_dm644x() || cpu_is_davinci_dm355()) {
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN,
> -                                     DAVINCI_LPSC_VPSSMSTR, 1);
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN,
> -                                     DAVINCI_LPSC_VPSSSLV, 1);
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN,
> -                                     DAVINCI_LPSC_TPCC, 1);
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN,
> -                                     DAVINCI_LPSC_TPTC0, 1);
> -             davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN,
> -                                     DAVINCI_LPSC_TPTC1, 1);
> -     }
>  }
> diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c
> index 55e65b3..95094c9 100644
> --- a/arch/arm/mach-davinci/usb.c
> +++ b/arch/arm/mach-davinci/usb.c
> @@ -48,7 +48,7 @@ static struct musb_hdrc_platform_data usb_data = {
>  #elif defined(CONFIG_USB_MUSB_HOST)
>       .mode           = MUSB_HOST,
>  #endif
> -     .clock          = "USBCLK",
> +     .clock          = "usb",
>       .config         = &musb_config,
>  };
>  
> diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
> index 3fceb4c..984553a 100644
> --- a/drivers/mtd/nand/davinci_nand.c
> +++ b/drivers/mtd/nand/davinci_nand.c
> @@ -422,16 +422,17 @@ static int __init nand_davinci_probe(struct 
> platform_device *pdev)
>       }
>       info->chip.ecc.mode = ecc_mode;
>  
> -     info->clk = clk_get(&pdev->dev, "AEMIFCLK");
> +     info->clk = clk_get(&pdev->dev, "aemif");
>       if (IS_ERR(info->clk)) {
>               ret = PTR_ERR(info->clk);
> -             dev_dbg(&pdev->dev, "unable to get AEMIFCLK, err %d\n", ret);
> +             dev_dbg(&pdev->dev, "unable to get AEMIF clock, err %d\n", ret);
>               goto err_clk;
>       }
>  
>       ret = clk_enable(info->clk);
>       if (ret < 0) {
> -             dev_dbg(&pdev->dev, "unable to enable AEMIFCLK, err %d\n", ret);
> +             dev_dbg(&pdev->dev, "unable to enable AEMIF clock, err %d\n",
> +                     ret);
>               goto err_clk_enable;
>       }
>  
> diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
> index 3d99184..3ef2a43 100644
> --- a/sound/soc/davinci/davinci-i2s.c
> +++ b/sound/soc/davinci/davinci-i2s.c
> @@ -401,7 +401,7 @@ static int davinci_i2s_probe(struct platform_device *pdev,
>       struct resource *mem, *ioarea;
>       struct evm_snd_platform_data *pdata;
>       int ret;
> -     static const char *clocks[] = { "asp0_clk", "asp1_clk", };
> +     static const char *clocks[] = { "asp0", "asp1", };
>  
>       if (pdev->id < 0 || pdev->id > ARRAY_SIZE(clocks))
>               return -EINVAL;
> -- 
> 1.6.1.2

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to