Kevin Hilman <[email protected]> writes:

> Signed-off-by: Kevin Hilman <[email protected]>
> ---
> Updates from v1: after discussions w/RMK, fixed naming so that PATCH 2/2
> of original series isn't needed.

Pushing today.

Kevin

>  arch/arm/Kconfig                            |    1 +
>  arch/arm/mach-davinci/clock.c               |  144 
> ++++-----------------------
>  arch/arm/mach-davinci/clock.h               |   15 +++
>  arch/arm/mach-davinci/devices.c             |    4 -
>  arch/arm/mach-davinci/dm355.c               |   92 +++++++++---------
>  arch/arm/mach-davinci/dm644x.c              |   89 +++++++++--------
>  arch/arm/mach-davinci/dm646x.c              |   67 +++++++------
>  arch/arm/mach-davinci/include/mach/clkdev.h |   13 +++
>  arch/arm/mach-davinci/include/mach/clock.h  |    1 -
>  arch/arm/mach-davinci/time.c                |   17 ++--
>  drivers/i2c/busses/i2c-davinci.c            |    2 +-
>  drivers/ide/palm_bk3710.c                   |    2 +-
>  drivers/mmc/host/davinci_mmc.c              |    2 +-
>  drivers/net/davinci_emac.c                  |    2 +-
>  drivers/watchdog/davinci_wdt.c              |    2 +-
>  sound/soc/davinci/davinci-i2s.c             |    6 +-
>  16 files changed, 192 insertions(+), 267 deletions(-)
>  create mode 100644 arch/arm/mach-davinci/include/mach/clkdev.h
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 9bf3cb0..56094ed 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -560,6 +560,7 @@ config ARCH_DAVINCI
>       select HAVE_CLK
>       select ZONE_DMA
>       select HAVE_IDE
> +     select COMMON_CLKDEV
>  
>       help
>         Support for TI's DaVinci platform.
> diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c
> index ff8b253..5e7a638 100644
> --- a/arch/arm/mach-davinci/clock.c
> +++ b/arch/arm/mach-davinci/clock.c
> @@ -30,114 +30,6 @@ static LIST_HEAD(clocks);
>  static DEFINE_MUTEX(clocks_mutex);
>  static DEFINE_SPINLOCK(clockfw_lock);
>  
> -extern void davinci_psc_config(unsigned int domain, unsigned int id, char 
> enable);
> -
> -/*
> - * Register a mapping { dev, logical_clockname } --> clock
> - *
> - * Device drivers should always use logical clocknames, so they
> - * don't need to change the physical name when new silicon grows
> - * another instance of that module or changes the clock tree.
> - */
> -
> -struct clk_mapping {
> -     struct device           *dev;
> -     const char              *name;
> -     struct clk              *clock;
> -     struct clk_mapping      *next;
> -};
> -
> -static struct clk_mapping *maplist;
> -
> -int __init davinci_clk_associate(struct device *dev,
> -             const char *logical_clockname,
> -             const char *physical_clockname)
> -{
> -     int                     status = -EINVAL;
> -     struct clk              *clock;
> -     struct clk_mapping      *mapping;
> -
> -     if (!dev)
> -             goto done;
> -
> -     clock = clk_get(dev, physical_clockname);
> -     if (IS_ERR(clock) || !try_module_get(clock->owner))
> -             goto done;
> -
> -     mutex_lock(&clocks_mutex);
> -     for (mapping = maplist; mapping; mapping = mapping->next) {
> -             if (dev != mapping->dev)
> -                     continue;
> -             if (strcmp(logical_clockname, mapping->name) != 0)
> -                     continue;
> -             goto fail;
> -     }
> -
> -     mapping = kzalloc(sizeof *mapping, GFP_KERNEL);
> -     mapping->dev = dev;
> -     mapping->name = logical_clockname;
> -     mapping->clock = clock;
> -
> -     mapping->next = maplist;
> -     maplist = mapping;
> -
> -     status = 0;
> -fail:
> -     mutex_unlock(&clocks_mutex);
> -done:
> -     WARN_ON(status < 0);
> -     return status;
> -}
> -
> -/*
> - * Returns a clock. Note that we first try to use device id on the bus
> - * and clock name. If this fails, we try to use clock name only.
> - */
> -struct clk *clk_get(struct device *dev, const char *id)
> -{
> -     struct clk *p, *clk = ERR_PTR(-ENOENT);
> -     struct clk_mapping *mapping;
> -
> -     if (!id)
> -             return ERR_PTR(-EINVAL);
> -
> -     mutex_lock(&clocks_mutex);
> -
> -     /* always prefer logical clock names */
> -     if (dev) {
> -             for (mapping = maplist; mapping; mapping = mapping->next) {
> -                     if (dev != mapping->dev)
> -                             continue;
> -                     if (strcmp(id, mapping->name) != 0)
> -                             continue;
> -                     clk = mapping->clock;
> -                     goto found;
> -             }
> -     }
> -
> -     list_for_each_entry(p, &clocks, node) {
> -             if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
> -                     clk = p;
> -                     break;
> -             }
> -     }
> -
> -found:
> -     mutex_unlock(&clocks_mutex);
> -
> -     WARN(IS_ERR(clk), "CLK: can't find %s/%s\n",
> -                     dev ? dev_name(dev) : "nodev", id);
> -     return clk;
> -}
> -EXPORT_SYMBOL(clk_get);
> -
> -void clk_put(struct clk *clk)
> -{
> -     if (clk && !IS_ERR(clk))
> -             module_put(clk->owner);
> -}
> -EXPORT_SYMBOL(clk_put);
> -
>  static unsigned psc_domain(struct clk *clk)
>  {
>       return (clk->flags & PSC_DSP)
> @@ -372,31 +264,31 @@ static void __init clk_pll_init(struct clk *clk)
>       pr_debug("] --> %lu MHz output.\n", clk->rate / 1000000);
>  }
>  
> -int __init davinci_clk_init(struct clk *clocks[])
> -{
> -     struct clk *clkp;
> -     int i = 0;
> +int __init davinci_clk_init(struct davinci_clk *clocks)
> +  {
> +     struct davinci_clk *c;
> +     struct clk *clk;
> +  
> +     printk("%s\n", __func__);
> +     for ( c = clocks; c->lk.clk; c++ ) {
> +             clk = c->lk.clk;
>  
> -     while ((clkp = clocks[i++])) {
> -             if (clkp->pll_data)
> -                     clk_pll_init(clkp);
> +             if (clk->pll_data)
> +                     clk_pll_init(clk);
>  
>               /* Calculate rates for PLL-derived clocks */
> -             else if (clkp->flags & CLK_PLL)
> -                     clk_sysclk_recalc(clkp);
> -
> -             if (clkp->lpsc)
> -                     clkp->flags |= CLK_PSC;
> +             else if (clk->flags & CLK_PLL)
> +                     clk_sysclk_recalc(clk);
>  
> -             clk_register(clkp);
> +             if (clk->lpsc)
> +                     clk->flags |= CLK_PSC;
>  
> -             /* FIXME: remove equivalent special-cased code from
> -              * davinci_psc_init() once cpus list *all* clocks.
> -              */
> +             clkdev_add(&c->lk);
> +             clk_register(clk);
>  
>               /* Turn on clocks that Linux doesn't otherwise manage */
> -             if (clkp->flags & ALWAYS_ENABLED)
> -                     clk_enable(clkp);
> +             if (clk->flags & ALWAYS_ENABLED)
> +                     clk_enable(clk);
>       }
>  
>       return 0;
> diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h
> index c1191df..24cfed4 100644
> --- a/arch/arm/mach-davinci/clock.h
> +++ b/arch/arm/mach-davinci/clock.h
> @@ -12,6 +12,7 @@
>  #define __ARCH_ARM_DAVINCI_CLOCK_H
>  
>  #include <linux/list.h>
> +#include <asm/clkdev.h>
>  
>  #define DAVINCI_PLL1_BASE 0x01c40800
>  #define DAVINCI_PLL2_BASE 0x01c40c00
> @@ -76,7 +77,21 @@ struct clk {
>  #define CLK_PLL                      BIT(4) /* PLL-derived clock */
>  #define PRE_PLL                 BIT(5) /* source is before PLL mult/div */
>  
> +struct davinci_clk {
> +     struct clk_lookup lk;
> +};
> +
> +#define CLK(dev, con, ck)            \
> +     {                               \
> +             .lk = {                 \
> +                     .dev_id = dev,  \
> +                     .con_id = con,  \
> +                     .clk = ck,      \
> +             },                      \
> +     }
> +
>  int davinci_clk_associate(struct device *dev, const char *logical_clockname,
>                         const char *physical_clockname);
>  
> +int davinci_clk_init(struct davinci_clk *clocks);
>  #endif
> diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
> index a0f5a60..ffc6d7f 100644
> --- a/arch/arm/mach-davinci/devices.c
> +++ b/arch/arm/mach-davinci/devices.c
> @@ -152,7 +152,6 @@ static struct platform_device davinci_mmcsd1_device = {
>  void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
>  {
>       struct platform_device  *pdev = NULL;
> -     const char              *clockname;
>  
>       if (WARN_ON(cpu_is_davinci_dm646x()))
>               return;
> @@ -179,7 +178,6 @@ void __init davinci_setup_mmc(int module, struct 
> davinci_mmc_config *config)
>               davinci_cfg_reg(DM355_SD1_DATA3);
>  
>               pdev = &davinci_mmcsd1_device;
> -             clockname = "mmcsd1";
>               break;
>       case 0:
>               if (cpu_is_davinci_dm355()) {
> @@ -206,7 +204,6 @@ void __init davinci_setup_mmc(int module, struct 
> davinci_mmc_config *config)
>               }
>  
>               pdev = &davinci_mmcsd0_device;
> -             clockname = cpu_is_davinci_dm355() ? "mmcsd0" : "mmcsd";
>               break;
>       }
>  
> @@ -214,7 +211,6 @@ void __init davinci_setup_mmc(int module, struct 
> davinci_mmc_config *config)
>               return;
>  
>       pdev->dev.platform_data = config;
> -     davinci_clk_associate(&pdev->dev, "mmc", clockname);
>       platform_device_register(pdev);
>  }
>  
> diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
> index 0a9cd98..275b342 100644
> --- a/arch/arm/mach-davinci/dm355.c
> +++ b/arch/arm/mach-davinci/dm355.c
> @@ -205,7 +205,7 @@ static struct clk uart2_clk = {
>  };
>  
>  static struct clk i2c_clk = {
> -     .name = "I2CCLK",
> +     .name = "i2c",
>       .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_I2C,
>  };
> @@ -304,6 +304,7 @@ static struct clk timer2_clk = {
>       .name = "timer2",
>       .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_TIMER2,
> +     .usecount = 1,              /* REVISIT: why cant' this be disabled? */
>  };
>  
>  static struct clk timer3_clk = {
> @@ -324,50 +325,50 @@ static struct clk usb_clk = {
>       .lpsc = DAVINCI_LPSC_USB,
>  };
>  
> -static struct clk *dm355_clks[] __initdata = {
> -     &ref_clk,
> -     &pll1_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,
> -     &uart0_clk,
> -     &uart1_clk,
> -     &uart2_clk,
> -     &i2c_clk,
> -     &asp0_clk,
> -     &asp1_clk,
> -     &mmcsd0_clk,
> -     &mmcsd1_clk,
> -     &spi0_clk,
> -     &spi1_clk,
> -     &spi2_clk,
> -     &gpio_clk,
> -     &aemif_clk,
> -     &pwm0_clk,
> -     &pwm1_clk,
> -     &pwm2_clk,
> -     &pwm3_clk,
> -     &timer0_clk,
> -     &timer1_clk,
> -     &timer2_clk,
> -     &timer3_clk,
> -     &rto_clk,
> -     &usb_clk,
> -     NULL,
> +static struct davinci_clk dm355_clks[] = {
> +     CLK(NULL, "ref", &ref_clk),
> +     CLK(NULL, "pll1", &pll1_clk),
> +     CLK(NULL, "pll1_sysclk1", &pll1_sysclk1),
> +     CLK(NULL, "pll1_sysclk2", &pll1_sysclk2),
> +     CLK(NULL, "pll1_sysclk3", &pll1_sysclk3),
> +     CLK(NULL, "pll1_sysclk4", &pll1_sysclk4),
> +     CLK(NULL, "pll1_aux", &pll1_aux_clk),
> +     CLK(NULL, "pll1_sysclkbp", &pll1_sysclkbp),
> +     CLK(NULL, "vpss_dac", &vpss_dac_clk),
> +     CLK(NULL, "vpss_master", &vpss_master_clk),
> +     CLK(NULL, "vpss_slave", &vpss_slave_clk),
> +     CLK(NULL, "clkout1", &clkout1_clk),
> +     CLK(NULL, "clkout2", &clkout2_clk),
> +     CLK(NULL, "pll2", &pll2_clk),
> +     CLK(NULL, "pll2_sysclk1", &pll2_sysclk1),
> +     CLK(NULL, "pll2_sysclkbp", &pll2_sysclkbp),
> +     CLK(NULL, "clkout3", &clkout3_clk),
> +     CLK(NULL, "arm", &arm_clk),
> +     CLK(NULL, "mjcp", &mjcp_clk),
> +     CLK(NULL, "uart0", &uart0_clk),
> +     CLK(NULL, "uart1", &uart1_clk),
> +     CLK(NULL, "uart2", &uart2_clk),
> +     CLK("i2c_davinci.1", NULL, &i2c_clk),
> +     CLK("soc-audio.0", NULL, &asp0_clk),
> +     CLK("soc-audio.1", NULL, &asp1_clk),
> +     CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
> +     CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
> +     CLK(NULL, "spi0", &spi0_clk),
> +     CLK(NULL, "spi1", &spi1_clk),
> +     CLK(NULL, "spi2", &spi2_clk),
> +     CLK(NULL, "gpio", &gpio_clk),
> +     CLK(NULL, "aemif", &aemif_clk),
> +     CLK(NULL, "pwm0", &pwm0_clk),
> +     CLK(NULL, "pwm1", &pwm1_clk),
> +     CLK(NULL, "pwm2", &pwm2_clk),
> +     CLK(NULL, "pwm3", &pwm3_clk),
> +     CLK(NULL, "timer0", &timer0_clk),
> +     CLK(NULL, "timer1", &timer1_clk),
> +     CLK("watchdog", NULL, &timer2_clk),
> +     CLK(NULL, "timer3", &timer3_clk),
> +     CLK(NULL, "rto", &rto_clk),
> +     CLK(NULL, "usb", &usb_clk),
> +     CLK(NULL, NULL, NULL),
>  };
>  
>  /*----------------------------------------------------------------------*/
> @@ -418,7 +419,6 @@ void __init dm355_init_spi0(unsigned chipselect_mask,
>  
>       spi_register_board_info(info, len);
>  
> -     davinci_clk_associate(&dm355_spi0_device.dev, "spi", "spi0");
>       platform_device_register(&dm355_spi0_device);
>  }
>  
> diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
> index 7251b82..f1de61f 100644
> --- a/arch/arm/mach-davinci/dm644x.c
> +++ b/arch/arm/mach-davinci/dm644x.c
> @@ -177,13 +177,13 @@ static struct clk emac_clk = {
>  };
>  
>  static struct clk i2c_clk = {
> -     .name = "I2CCLK",
> +     .name = "i2c",
>       .parent = &pll1_aux_clk,
>       .lpsc = DAVINCI_LPSC_I2C,
>  };
>  
>  static struct clk ide_clk = {
> -     .name = "IDECLK",
> +     .name = "ide",
>       .parent = &pll1_sysclk5,
>       .lpsc = DAVINCI_LPSC_ATA,
>  };
> @@ -264,47 +264,50 @@ static struct clk timer2_clk = {
>       .name = "timer2",
>       .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,
> -     &pll2_sysclk1,
> -     &pll2_sysclk2,
> -     &pll2_sysclkbp,
> -     &dsp_clk,
> -     &arm_clk,
> -     &vicp_clk,
> -     &vpss_master_clk,
> -     &vpss_slave_clk,
> -     &uart0_clk,
> -     &uart1_clk,
> -     &uart2_clk,
> -     &emac_clk,
> -     &i2c_clk,
> -     &ide_clk,
> -     &asp_clk,
> -     &mmcsd_clk,
> -     &spi_clk,
> -     &gpio_clk,
> -     &usb_clk,
> -     &vlynq_clk,
> -     &aemif_clk,
> -     &pwm0_clk,
> -     &pwm1_clk,
> -     &pwm2_clk,
> -     &timer0_clk,
> -     &timer1_clk,
> -     &timer2_clk,
> -     NULL,
> -};
> +     .usecount = 1,              /* REVISIT: why cant' this be disabled? */
> +};
> +
> +struct davinci_clk dm644x_clks[] = {
> +     CLK(NULL, "ref", &ref_clk),
> +     CLK(NULL, "pll1", &pll1_clk),
> +     CLK(NULL, "pll1_sysclk1", &pll1_sysclk1),
> +     CLK(NULL, "pll1_sysclk2", &pll1_sysclk2),
> +     CLK(NULL, "pll1_sysclk3", &pll1_sysclk3),
> +     CLK(NULL, "pll1_sysclk5", &pll1_sysclk5),
> +     CLK(NULL, "pll1_aux", &pll1_aux_clk),
> +     CLK(NULL, "pll1_sysclkbp", &pll1_sysclkbp),
> +     CLK(NULL, "pll2", &pll2_clk),
> +     CLK(NULL, "pll2_sysclk1", &pll2_sysclk1),
> +     CLK(NULL, "pll2_sysclk2", &pll2_sysclk2),
> +     CLK(NULL, "pll2_sysclkbp", &pll2_sysclkbp),
> +     CLK(NULL, "dsp", &dsp_clk),
> +     CLK(NULL, "arm", &arm_clk),
> +     CLK(NULL, "vicp", &vicp_clk),
> +     CLK(NULL, "vpss_master", &vpss_master_clk),
> +     CLK(NULL, "vpss_slave", &vpss_slave_clk),
> +     CLK(NULL, "arm", &arm_clk),
> +     CLK(NULL, "uart0", &uart0_clk),
> +     CLK(NULL, "uart1", &uart1_clk),
> +     CLK(NULL, "uart2", &uart2_clk),
> +     CLK("davinci_emac.1", NULL, &emac_clk),
> +     CLK("i2c_davinci.1", NULL, &i2c_clk),
> +     CLK("palm_bk3710", NULL, &ide_clk),
> +     CLK("soc-audio.0", NULL, &asp_clk),
> +     CLK("davinci_mmc.0", NULL, &mmcsd_clk),
> +     CLK(NULL, "spi", &spi_clk),
> +     CLK(NULL, "gpio", &gpio_clk),
> +     CLK(NULL, "usb", &usb_clk),
> +     CLK(NULL, "vlynq", &vlynq_clk),
> +     CLK(NULL, "aemif", &aemif_clk),
> +     CLK(NULL, "pwm0", &pwm0_clk),
> +     CLK(NULL, "pwm1", &pwm1_clk),
> +     CLK(NULL, "pwm2", &pwm2_clk),
> +     CLK(NULL, "timer0", &timer0_clk),
> +     CLK(NULL, "timer1", &timer1_clk),
> +     CLK("watchdog", NULL, &timer2_clk),
> +     CLK(NULL, NULL, NULL),
> +};
> +  
>  
>  /*
>   * Device specific mux setup
> diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
> index 6b13bcc..f733a34 100644
> --- a/arch/arm/mach-davinci/dm646x.c
> +++ b/arch/arm/mach-davinci/dm646x.c
> @@ -220,36 +220,43 @@ static struct clk timer1_clk = {
>       .lpsc = DM646X_LPSC_TIMER1,
>  };
>  
> -static struct clk *dm646x_clks[] __initdata = {
> -     &ref_clk,
> -     &aux_clkin,
> -     &pll1_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,
> -     &uart2_clk,
> -     &i2c_clk,
> -     &gpio_clk,
> -     &aemif_clk,
> -     &emac_clk,
> -     &pwm0_clk,
> -     &pwm1_clk,
> -     &timer0_clk,
> -     &timer1_clk,
> -     NULL,
> +static struct clk timer2_clk = {
> +     .name = "timer2",
> +     .parent = &pll1_sysclk3,
> +     .flags = ALWAYS_ENABLED, /* no LPSC, always enabled; c.f. spruep9a */
> +};
> +
> +struct davinci_clk dm646x_clks[] = {
> +     CLK(NULL, "ref", &ref_clk),
> +     CLK(NULL, "aux", &aux_clkin),
> +     CLK(NULL, "pll1", &pll1_clk),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk1),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk2),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk3),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk4),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk5),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk6),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk8),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclk9),
> +     CLK(NULL, "pll1_sysclk", &pll1_sysclkbp),
> +     CLK(NULL, "pll1_aux", &pll1_aux_clk),
> +     CLK(NULL, "pll2", &pll2_clk),
> +     CLK(NULL, "pll2_sysclk1", &pll2_sysclk1),
> +     CLK(NULL, "dsp", &dsp_clk),
> +     CLK(NULL, "arm", &arm_clk),
> +     CLK(NULL, "uart0", &uart0_clk),
> +     CLK(NULL, "uart1", &uart1_clk),
> +     CLK(NULL, "uart2", &uart2_clk),
> +     CLK("i2c_davinci.1", NULL, &i2c_clk),
> +     CLK(NULL, "gpio", &gpio_clk),
> +     CLK(NULL, "aemif", &aemif_clk),
> +     CLK("davinci_emac.1", NULL, &emac_clk),
> +     CLK(NULL, "pwm0", &pwm0_clk),
> +     CLK(NULL, "pwm1", &pwm1_clk),
> +     CLK(NULL, "timer0", &timer0_clk),
> +     CLK(NULL, "timer1", &timer1_clk),
> +     CLK("watchdog", NULL, &timer2_clk),
> +     CLK(NULL, NULL, NULL),
>  };
>  
>  /*
> diff --git a/arch/arm/mach-davinci/include/mach/clkdev.h 
> b/arch/arm/mach-davinci/include/mach/clkdev.h
> new file mode 100644
> index 0000000..730c49d
> --- /dev/null
> +++ b/arch/arm/mach-davinci/include/mach/clkdev.h
> @@ -0,0 +1,13 @@
> +#ifndef __MACH_CLKDEV_H
> +#define __MACH_CLKDEV_H
> +
> +static inline int __clk_get(struct clk *clk)
> +{
> +     return 1;
> +}
> +
> +static inline void __clk_put(struct clk *clk)
> +{
> +}
> +
> +#endif
> diff --git a/arch/arm/mach-davinci/include/mach/clock.h 
> b/arch/arm/mach-davinci/include/mach/clock.h
> index 78cfb35..a3b0402 100644
> --- a/arch/arm/mach-davinci/include/mach/clock.h
> +++ b/arch/arm/mach-davinci/include/mach/clock.h
> @@ -17,6 +17,5 @@ struct clk;
>  
>  extern int clk_register(struct clk *clk);
>  extern void clk_unregister(struct clk *clk);
> -extern int davinci_clk_init(struct clk *clocks[]);
>  
>  #endif
> diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
> index 3a27a2b..a9992d6 100644
> --- a/arch/arm/mach-davinci/time.c
> +++ b/arch/arm/mach-davinci/time.c
> @@ -18,6 +18,7 @@
>  #include <linux/io.h>
>  #include <linux/clk.h>
>  #include <linux/err.h>
> +#include <linux/device.h>
>  
>  #include <mach/hardware.h>
>  #include <asm/system.h>
> @@ -309,7 +310,7 @@ static struct clock_event_device clockevent_davinci = {
>  
>  static void __init davinci_timer_init(void)
>  {
> -     struct clk *timer_clk, *wd_clk;
> +     struct clk *timer_clk;
>  
>       static char err[] __initdata = KERN_ERR
>               "%s: can't register clocksource!\n";
> @@ -321,12 +322,6 @@ static void __init davinci_timer_init(void)
>       BUG_ON(IS_ERR(timer_clk));
>       clk_enable(timer_clk);
>  
> -     if (cpu_is_davinci_dm644x() || cpu_is_davinci_dm355()) {
> -             wd_clk = clk_get(NULL, "timer2");
> -             BUG_ON(IS_ERR(wd_clk));
> -             clk_enable(wd_clk);
> -     }
> -
>       davinci_clock_tick_rate = clk_get_rate(timer_clk);
>       clk_put(timer_clk);
>  
> @@ -358,6 +353,14 @@ struct sys_timer davinci_timer = {
>  void davinci_watchdog_reset(void) {
>       u32 tgcr, wdtcr;
>       void __iomem *base = IO_ADDRESS(DAVINCI_WDOG_BASE);
> +     struct device dev;
> +     struct clk *wd_clk;
> +
> +     dev_set_name(&dev, "watchdog");
> +     wd_clk = clk_get(&dev, NULL);
> +     if (WARN_ON(IS_ERR(wd_clk)))
> +             return;
> +     clk_enable(wd_clk);
>  
>       /* disable, internal clock source */
>       __raw_writel(0, base + TCR);
> diff --git a/drivers/i2c/busses/i2c-davinci.c 
> b/drivers/i2c/busses/i2c-davinci.c
> index 0916871..b3d3a18 100755
> --- a/drivers/i2c/busses/i2c-davinci.c
> +++ b/drivers/i2c/busses/i2c-davinci.c
> @@ -554,7 +554,7 @@ static int davinci_i2c_probe(struct platform_device *pdev)
>       dev->irq = irq->start;
>       platform_set_drvdata(pdev, dev);
>  
> -     dev->clk = clk_get(&pdev->dev, "I2CCLK");
> +     dev->clk = clk_get(&pdev->dev, NULL);
>       if (IS_ERR(dev->clk)) {
>               r = -ENODEV;
>               goto err_free_mem;
> diff --git a/drivers/ide/palm_bk3710.c b/drivers/ide/palm_bk3710.c
> index 6196f76..74b3c0a 100644
> --- a/drivers/ide/palm_bk3710.c
> +++ b/drivers/ide/palm_bk3710.c
> @@ -351,7 +351,7 @@ static int __init palm_bk3710_probe(struct 
> platform_device *pdev)
>       int i, rc;
>       hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL };
>  
> -     clk = clk_get(&pdev->dev, "IDECLK");
> +     clk = clk_get(&pdev->dev, NULL);
>       if (IS_ERR(clk))
>               return -ENODEV;
>  
> diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
> index b034af6..28f61ac 100644
> --- a/drivers/mmc/host/davinci_mmc.c
> +++ b/drivers/mmc/host/davinci_mmc.c
> @@ -1133,7 +1133,7 @@ static int __init davinci_mmcsd_probe(struct 
> platform_device *pdev)
>               goto out;
>  
>       ret = -ENXIO;
> -     host->clk = clk_get(&pdev->dev, "mmc");
> +     host->clk = clk_get(&pdev->dev, NULL);
>       if (IS_ERR(host->clk)) {
>               ret = PTR_ERR(host->clk);
>               goto out;
> diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
> index 4f25fb6..b1e6c7f 100644
> --- a/drivers/net/davinci_emac.c
> +++ b/drivers/net/davinci_emac.c
> @@ -2605,7 +2605,7 @@ static int __devinit davinci_emac_probe(struct 
> platform_device *pdev)
>       unsigned long size;
>  
>       /* obtain emac clock from kernel */
> -     emac_clk = clk_get(&pdev->dev, "emac");
> +     emac_clk = clk_get(&pdev->dev, NULL);
>       if (IS_ERR(emac_clk)) {
>               printk(KERN_ERR "DaVinci EMAC: Failed to get EMAC clock\n");
>               return -EBUSY;
> diff --git a/drivers/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c
> index 1eca9a0..3298db0 100644
> --- a/drivers/watchdog/davinci_wdt.c
> +++ b/drivers/watchdog/davinci_wdt.c
> @@ -205,7 +205,7 @@ static int davinci_wdt_probe(struct platform_device *pdev)
>       struct resource *res;
>       struct device *dev = &pdev->dev;
>  
> -     wdt_clk = clk_get(dev, "timer2");
> +     wdt_clk = clk_get(dev, NULL);
>       if (WARN_ON(!wdt_clk))
>               return -ENODEV;
>       clk_enable(wdt_clk);
> diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
> index d9c3c3b..7b482c5 100644
> --- a/sound/soc/davinci/davinci-i2s.c
> +++ b/sound/soc/davinci/davinci-i2s.c
> @@ -446,10 +446,6 @@ 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", "asp1", };
> -
> -     if (pdev->id < 0 || pdev->id > ARRAY_SIZE(clocks))
> -             return -EINVAL;
>  
>       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>       if (!mem) {
> @@ -472,7 +468,7 @@ static int davinci_i2s_probe(struct platform_device *pdev,
>  
>       cpu_dai->private_data = dev;
>  
> -     dev->clk = clk_get(&pdev->dev, clocks[pdev->id]);
> +     dev->clk = clk_get(&pdev->dev, NULL);
>       if (IS_ERR(dev->clk)) {
>               ret = -ENODEV;
>               goto err_free_mem;
> -- 
> 1.6.1.3

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

Reply via email to