On Wed, 7 Oct 2009, Tony Lindgren wrote:

> Don't know if this generic solution is accurate enough?

Looks fine to me.  Thanks -

Acked-by: Paul Walmsley <p...@pwsan.com>

> 
> Tony
> 
> 
> >From 4b059c50262954ae4ce466983b5cf088851eab19 Mon Sep 17 00:00:00 2001
> From: Tony Lindgren <t...@atomide.com>
> Date: Wed, 7 Oct 2009 17:10:18 -0700
> Subject: [PATCH] omap: Use getnstimeofday for omap_device
> 
> Otherwise we cannot remove OMAP2_IO_ADDRESS.
> 
> Signed-off-by: Tony Lindgren <t...@atomide.com>
> 
> diff --git a/arch/arm/plat-omap/omap_device.c 
> b/arch/arm/plat-omap/omap_device.c
> index 2c409fc..12513f4 100644
> --- a/arch/arm/plat-omap/omap_device.c
> +++ b/arch/arm/plat-omap/omap_device.c
> @@ -103,21 +103,6 @@
>  /* Private functions */
>  
>  /**
> - * _read_32ksynct - read the OMAP 32K sync timer
> - *
> - * Returns the current value of the 32KiHz synchronization counter.
> - * XXX this should be generalized to simply read the system clocksource.
> - * XXX this should be moved to a separate synctimer32k.c file
> - */
> -static u32 _read_32ksynct(void)
> -{
> -     if (!cpu_class_is_omap2())
> -             BUG();
> -
> -     return __raw_readl(OMAP2_IO_ADDRESS(OMAP_32KSYNCT_BASE + 0x010));
> -}
> -
> -/**
>   * _omap_device_activate - increase device readiness
>   * @od: struct omap_device *
>   * @ignore_lat: increase to latency target (0) or full readiness (1)?
> @@ -133,13 +118,13 @@ static u32 _read_32ksynct(void)
>   */
>  static int _omap_device_activate(struct omap_device *od, u8 ignore_lat)
>  {
> -     u32 a, b;
> +     struct timespec a, b, c;
>  
>       pr_debug("omap_device: %s: activating\n", od->pdev.name);
>  
>       while (od->pm_lat_level > 0) {
>               struct omap_device_pm_latency *odpl;
> -             int act_lat = 0;
> +             unsigned long long act_lat = 0;
>  
>               od->pm_lat_level--;
>  
> @@ -149,20 +134,22 @@ static int _omap_device_activate(struct omap_device 
> *od, u8 ignore_lat)
>                   (od->dev_wakeup_lat <= od->_dev_wakeup_lat_limit))
>                       break;
>  
> -             a = _read_32ksynct();
> +             getnstimeofday(&a);
>  
>               /* XXX check return code */
>               odpl->activate_func(od);
>  
> -             b = _read_32ksynct();
> +             getnstimeofday(&b);
>  
> -             act_lat = (b - a) >> 15; /* 32KiHz cycles to microseconds */
> +             c = timespec_sub(b, a);
> +             act_lat = timespec_to_ns(&c) * NSEC_PER_USEC;
>  
>               pr_debug("omap_device: %s: pm_lat %d: activate: elapsed time "
> -                      "%d usec\n", od->pdev.name, od->pm_lat_level, act_lat);
> +                      "%llu usec\n", od->pdev.name, od->pm_lat_level,
> +                      act_lat);
>  
>               WARN(act_lat > odpl->activate_lat, "omap_device: %s.%d: "
> -                  "activate step %d took longer than expected (%d > %d)\n",
> +                  "activate step %d took longer than expected (%llu > %d)\n",
>                    od->pdev.name, od->pdev.id, od->pm_lat_level,
>                    act_lat, odpl->activate_lat);
>  
> @@ -188,13 +175,13 @@ static int _omap_device_activate(struct omap_device 
> *od, u8 ignore_lat)
>   */
>  static int _omap_device_deactivate(struct omap_device *od, u8 ignore_lat)
>  {
> -     u32 a, b;
> +     struct timespec a, b, c;
>  
>       pr_debug("omap_device: %s: deactivating\n", od->pdev.name);
>  
>       while (od->pm_lat_level < od->pm_lats_cnt) {
>               struct omap_device_pm_latency *odpl;
> -             int deact_lat = 0;
> +             unsigned long long deact_lat = 0;
>  
>               odpl = od->pm_lats + od->pm_lat_level;
>  
> @@ -203,23 +190,24 @@ static int _omap_device_deactivate(struct omap_device 
> *od, u8 ignore_lat)
>                    od->_dev_wakeup_lat_limit))
>                       break;
>  
> -             a = _read_32ksynct();
> +             getnstimeofday(&a);
>  
>               /* XXX check return code */
>               odpl->deactivate_func(od);
>  
> -             b = _read_32ksynct();
> +             getnstimeofday(&b);
>  
> -             deact_lat = (b - a) >> 15; /* 32KiHz cycles to microseconds */
> +             c = timespec_sub(b, a);
> +             deact_lat = timespec_to_ns(&c) * NSEC_PER_USEC;
>  
>               pr_debug("omap_device: %s: pm_lat %d: deactivate: elapsed time "
> -                      "%d usec\n", od->pdev.name, od->pm_lat_level,
> +                      "%llu usec\n", od->pdev.name, od->pm_lat_level,
>                        deact_lat);
>  
>               WARN(deact_lat > odpl->deactivate_lat, "omap_device: %s.%d: "
> -                  "deactivate step %d took longer than expected (%d > %d)\n",
> -                  od->pdev.name, od->pdev.id, od->pm_lat_level,
> -                  deact_lat, odpl->deactivate_lat);
> +                  "deactivate step %d took longer than expected "
> +                  "(%llu > %d)\n", od->pdev.name, od->pdev.id,
> +                  od->pm_lat_level, deact_lat, odpl->deactivate_lat);
>  
>               od->dev_wakeup_lat += odpl->activate_lat;
>  
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to