aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-iop32x/common.c
blob: 8044af6a54e14b8cc46caefc0dfd065ffe4b375f (plain) (blame)
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
/*
 * arch/arm/mach-iop32x/common.c
 *
 * Common routines shared across all IOP3xx implementations
 *
 * Author: Deepak Saxena <dsaxena@mvista.com>
 *
 * Copyright 2003 (c) MontaVista, Software, Inc.
 *
 * This file is licensed under  the terms of the GNU General Public
 * License version 2. This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#include <linux/delay.h>
#include <asm/hardware.h>

/*
 * Shared variables
 */
unsigned long iop3xx_pcibios_min_io = 0;
unsigned long iop3xx_pcibios_min_mem = 0;

#ifdef CONFIG_ARCH_EP80219
#include <linux/kernel.h>
/*
 * Default power-off for EP80219
 */

static inline void ep80219_send_to_pic(__u8 c) {
}

void ep80219_power_off(void)
{
	/*
     * This function will send a SHUTDOWN_COMPLETE message to the PIC controller
     * over I2C.  We are not using the i2c subsystem since we are going to power
     * off and it may be removed
     */

	/* Send the Address byte w/ the start condition */
	*IOP321_IDBR1 = 0x60;
	*IOP321_ICR1 = 0xE9;
    mdelay(1);

	/* Send the START_MSG byte w/ no start or stop condition */
	*IOP321_IDBR1 = 0x0F;
	*IOP321_ICR1 = 0xE8;
    mdelay(1);

	/* Send the SHUTDOWN_COMPLETE Message ID byte w/ no start or stop condition */
	*IOP321_IDBR1 = 0x03;
	*IOP321_ICR1 = 0xE8;
    mdelay(1);

	/* Send an ignored byte w/ stop condition */
	*IOP321_IDBR1 = 0x00;
	*IOP321_ICR1 = 0xEA;

	while (1) ;
}

#include <linux/init.h>
#include <linux/pm.h>

static int __init ep80219_init(void)
{
	pm_power_off = ep80219_power_off;
	return 0;
}
arch_initcall(ep80219_init);
#endif