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

Commit 851f7c0e authored by Ksenija Stanojevic's avatar Ksenija Stanojevic Committed by Greg Kroah-Hartman
Browse files

Staging: olpc_dcon: Replace timespec with ktime_t



Struct timespec will overflow in year 2038, here it will not cause an
overflow because it is used with timespec_sub, but still has to be
removed as part of y2038 changes. Replace it with ktime_t. Also use
monotonic instead of real-time by replacing functions getnstimeofday
with ktime_get.

Signed-off-by: default avatarKsenija Stanojevic <ksenija.stanojevic@gmail.com>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 51abf45c
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -238,13 +238,12 @@ static void dcon_sleep(struct dcon_priv *dcon, bool sleep)
 */
static void dcon_load_holdoff(struct dcon_priv *dcon)
{
	struct timespec delta_t, now;
	ktime_t delta_t, now;

	while (1) {
		getnstimeofday(&now);
		delta_t = timespec_sub(now, dcon->load_time);
		if (delta_t.tv_sec != 0 ||
			delta_t.tv_nsec > NSEC_PER_MSEC * 20) {
		now = ktime_get();
		delta_t = ktime_sub(now, dcon->load_time);
		if (ktime_to_ns(delta_t) > NSEC_PER_MSEC * 20) {
			break;
		}
		mdelay(4);
@@ -325,19 +324,19 @@ static void dcon_source_switch(struct work_struct *work)

		/* And turn off the DCON */
		pdata->set_dconload(1);
		getnstimeofday(&dcon->load_time);
		dcon->load_time = ktime_get();

		pr_info("The CPU has control\n");
		break;
	case DCON_SOURCE_DCON:
	{
		struct timespec delta_t;
		ktime_t delta_t;

		pr_info("dcon_source_switch to DCON\n");

		/* Clear DCONLOAD - this implies that the DCON is in control */
		pdata->set_dconload(0);
		getnstimeofday(&dcon->load_time);
		dcon->load_time = ktime_get();

		wait_event_timeout(dcon->waitq, dcon->switched, HZ/2);

@@ -355,14 +354,14 @@ static void dcon_source_switch(struct work_struct *work)
			 * deassert and reassert, and hope for the best.
			 * see http://dev.laptop.org/ticket/9664
			 */
			delta_t = timespec_sub(dcon->irq_time, dcon->load_time);
			if (dcon->switched && delta_t.tv_sec == 0 &&
					delta_t.tv_nsec < NSEC_PER_MSEC * 20) {
			delta_t = ktime_sub(dcon->irq_time, dcon->load_time);
			if (dcon->switched && ktime_to_ns(delta_t)
			    < NSEC_PER_MSEC * 20) {
				pr_err("missed loading, retrying\n");
				pdata->set_dconload(1);
				mdelay(41);
				pdata->set_dconload(0);
				getnstimeofday(&dcon->load_time);
				dcon->load_time = ktime_get();
				mdelay(41);
			}
		}
@@ -742,7 +741,7 @@ irqreturn_t dcon_interrupt(int irq, void *id)
	case 2:	/* switch to DCON mode */
	case 1: /* switch to CPU mode */
		dcon->switched = true;
		getnstimeofday(&dcon->irq_time);
		dcon->irq_time = ktime_get();
		wake_up(&dcon->waitq);
		break;

@@ -756,7 +755,7 @@ irqreturn_t dcon_interrupt(int irq, void *id)
		 */
		if (dcon->curr_src != dcon->pending_src && !dcon->switched) {
			dcon->switched = true;
			getnstimeofday(&dcon->irq_time);
			dcon->irq_time = ktime_get();
			wake_up(&dcon->waitq);
			pr_debug("switching w/ status 0/0\n");
		} else {
+2 −2
Original line number Diff line number Diff line
@@ -79,8 +79,8 @@ struct dcon_priv {

	/* Variables used during switches */
	bool switched;
	struct timespec irq_time;
	struct timespec load_time;
	ktime_t irq_time;
	ktime_t load_time;

	/* Current output type; true == mono, false == color */
	bool mono;