Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 172712
b: refs/heads/master
c: f059429
h: refs/heads/master
v: v3
  • Loading branch information
Tony Lindgren committed Oct 19, 2009
1 parent 0e3884a commit fd0ad06
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 986a13f508156e1d041d59166beb2a3dec2ddfad
refs/heads/master: f059429ea055c71648ae81c581eaa91d3761942b
50 changes: 19 additions & 31 deletions trunk/arch/arm/plat-omap/omap_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,21 +102,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 *
Expand All @@ -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--;

Expand All @@ -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);

Expand All @@ -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;

Expand All @@ -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;

Expand Down

0 comments on commit fd0ad06

Please sign in to comment.