~kris/9p

9hist

ref: 3f3316bcf09577f12a5e814315769e0498d2fda1 9hist/bitsy/power.c -rw-r--r-- 1.3 KiB
3f3316bc — David du Colombier Plan 9 from Bell Labs 2001-01-18 25 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include	"u.h"
#include	"../port/lib.h"
#include	"mem.h"
#include	"dat.h"
#include	"fns.h"
#include	"io.h"
#include	"ureg.h"
#include	"pool.h"

/* Power management for the bitsy */

#ifdef NOTDEF
enum {
	pmcr_sf		= 0,

	pcfr_opde	= 0,
	pcfr_fp		= 1,
	pcfr_fs		= 2,
	pcfr_fo		= 3,
};

jmp_buf power_resume;

static void
onoffintr(Ureg*, void *x)
{
	/* On/off button interrupt */
	int i;

	/* debounce, 50 ms*/
	for (i = 0; i < 50; i++) {
		delay(1);
		if ((gpioregs->level & GPIO_PWR_ON_i) == 0)
			return;	/* bounced */
	}
	if (i = setjmp(power_resume)) {
		/* power back up */
		rs232power(1);
		lcdpower(1);
		audiopower(1);
		irpower(1);
		return;
	}
	/* Power down */
	irpower(0);
	audiopower(0);
	lcdpower(0);
	rs232power(0);
	sa1100_power_off();
	/* no return */
}

static void
sa1100_power_off(void)
{
	delay(100);
	splhi();
	/* enable wakeup by µcontroller, on/off switch or real-time clock alarm */
	powerregs->pwer = 0x80000003;
	/* disable internal oscillator, float CS lines */
	powerregs->pcfr = 1<<pcfr_opde | 1<<pcfr_fp | 1<<pcfr_fs;
	/* set lowest clock */
	powerregs->ppcr = 0;
	/* set all GPIOs to input mode */
	gpioregs->direction = 0;
	/* enter sleep mode */
	powerregs->pmcr = 1<<pmcr_sf;
}

void
idlehands(void)
{
}
#endif

void
idlehands(void)
{
	doze();
}