Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / drivers / bcma / core.c
1 /*
2  * Broadcom specific AMBA
3  * Core ops
4  *
5  * Licensed under the GNU/GPL. See COPYING for details.
6  */
7
8 #include "bcma_private.h"
9 #include <linux/bcma/bcma.h>
10
11 bool bcma_core_is_enabled(struct bcma_device *core)
12 {
13         if ((bcma_aread32(core, BCMA_IOCTL) & (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC))
14             != BCMA_IOCTL_CLK)
15                 return false;
16         if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
17                 return false;
18         return true;
19 }
20 EXPORT_SYMBOL_GPL(bcma_core_is_enabled);
21
22 static void bcma_core_disable(struct bcma_device *core, u32 flags)
23 {
24         if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
25                 return;
26
27         bcma_awrite32(core, BCMA_IOCTL, flags);
28         bcma_aread32(core, BCMA_IOCTL);
29         udelay(10);
30
31         bcma_awrite32(core, BCMA_RESET_CTL, BCMA_RESET_CTL_RESET);
32         udelay(1);
33 }
34
35 int bcma_core_enable(struct bcma_device *core, u32 flags)
36 {
37         bcma_core_disable(core, flags);
38
39         bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC | flags));
40         bcma_aread32(core, BCMA_IOCTL);
41
42         bcma_awrite32(core, BCMA_RESET_CTL, 0);
43         udelay(1);
44
45         bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | flags));
46         bcma_aread32(core, BCMA_IOCTL);
47         udelay(1);
48
49         return 0;
50 }
51 EXPORT_SYMBOL_GPL(bcma_core_enable);