Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f059429e authored by Tony Lindgren's avatar Tony Lindgren
Browse files

omap: Use getnstimeofday for omap_device



Use getnstimeofday for omap_device

Acked-by: default avatarPaul Walmsley <paul@pwsan.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 986a13f5
Loading
Loading
Loading
Loading
+19 −31
Original line number Diff line number Diff line
@@ -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 *
@@ -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;