OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [x86/] [kernel/] [i8237.c] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 xianfeng
/*
2
 * 8237A DMA controller suspend functions.
3
 *
4
 * Written by Pierre Ossman, 2005.
5
 *
6
 * This program is free software; you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation; either version 2 of the License, or (at
9
 * your option) any later version.
10
 */
11
 
12
#include <linux/init.h>
13
#include <linux/sysdev.h>
14
 
15
#include <asm/dma.h>
16
 
17
/*
18
 * This module just handles suspend/resume issues with the
19
 * 8237A DMA controller (used for ISA and LPC).
20
 * Allocation is handled in kernel/dma.c and normal usage is
21
 * in asm/dma.h.
22
 */
23
 
24
static int i8237A_resume(struct sys_device *dev)
25
{
26
        unsigned long flags;
27
        int i;
28
 
29
        flags = claim_dma_lock();
30
 
31
        dma_outb(DMA1_RESET_REG, 0);
32
        dma_outb(DMA2_RESET_REG, 0);
33
 
34
        for (i = 0;i < 8;i++) {
35
                set_dma_addr(i, 0x000000);
36
                /* DMA count is a bit weird so this is not 0 */
37
                set_dma_count(i, 1);
38
        }
39
 
40
        /* Enable cascade DMA or channel 0-3 won't work */
41
        enable_dma(4);
42
 
43
        release_dma_lock(flags);
44
 
45
        return 0;
46
}
47
 
48
static int i8237A_suspend(struct sys_device *dev, pm_message_t state)
49
{
50
        return 0;
51
}
52
 
53
static struct sysdev_class i8237_sysdev_class = {
54
        set_kset_name("i8237"),
55
        .suspend = i8237A_suspend,
56
        .resume = i8237A_resume,
57
};
58
 
59
static struct sys_device device_i8237A = {
60
        .id     = 0,
61
        .cls    = &i8237_sysdev_class,
62
};
63
 
64
static int __init i8237A_init_sysfs(void)
65
{
66
        int error = sysdev_class_register(&i8237_sysdev_class);
67
        if (!error)
68
                error = sysdev_register(&device_i8237A);
69
        return error;
70
}
71
 
72
device_initcall(i8237A_init_sysfs);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.