diff options
Diffstat (limited to 'include/linux/amba/bus.h')
-rw-r--r-- | include/linux/amba/bus.h | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index 724c69c40bb8..8d54f79457ba 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
@@ -30,7 +30,6 @@ struct amba_device { | |||
30 | struct device dev; | 30 | struct device dev; |
31 | struct resource res; | 31 | struct resource res; |
32 | struct clk *pclk; | 32 | struct clk *pclk; |
33 | struct regulator *vcore; | ||
34 | u64 dma_mask; | 33 | u64 dma_mask; |
35 | unsigned int periphid; | 34 | unsigned int periphid; |
36 | unsigned int irq[AMBA_NR_IRQS]; | 35 | unsigned int irq[AMBA_NR_IRQS]; |
@@ -60,6 +59,9 @@ extern struct bus_type amba_bustype; | |||
60 | 59 | ||
61 | int amba_driver_register(struct amba_driver *); | 60 | int amba_driver_register(struct amba_driver *); |
62 | void amba_driver_unregister(struct amba_driver *); | 61 | void amba_driver_unregister(struct amba_driver *); |
62 | struct amba_device *amba_device_alloc(const char *, resource_size_t, size_t); | ||
63 | void amba_device_put(struct amba_device *); | ||
64 | int amba_device_add(struct amba_device *, struct resource *); | ||
63 | int amba_device_register(struct amba_device *, struct resource *); | 65 | int amba_device_register(struct amba_device *, struct resource *); |
64 | void amba_device_unregister(struct amba_device *); | 66 | void amba_device_unregister(struct amba_device *); |
65 | struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int); | 67 | struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int); |
@@ -72,12 +74,6 @@ void amba_release_regions(struct amba_device *); | |||
72 | #define amba_pclk_disable(d) \ | 74 | #define amba_pclk_disable(d) \ |
73 | do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0) | 75 | do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0) |
74 | 76 | ||
75 | #define amba_vcore_enable(d) \ | ||
76 | (IS_ERR((d)->vcore) ? 0 : regulator_enable((d)->vcore)) | ||
77 | |||
78 | #define amba_vcore_disable(d) \ | ||
79 | do { if (!IS_ERR((d)->vcore)) regulator_disable((d)->vcore); } while (0) | ||
80 | |||
81 | /* Some drivers don't use the struct amba_device */ | 77 | /* Some drivers don't use the struct amba_device */ |
82 | #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff) | 78 | #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff) |
83 | #define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f) | 79 | #define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f) |
@@ -89,4 +85,46 @@ void amba_release_regions(struct amba_device *); | |||
89 | #define amba_manf(d) AMBA_MANF_BITS((d)->periphid) | 85 | #define amba_manf(d) AMBA_MANF_BITS((d)->periphid) |
90 | #define amba_part(d) AMBA_PART_BITS((d)->periphid) | 86 | #define amba_part(d) AMBA_PART_BITS((d)->periphid) |
91 | 87 | ||
88 | #define __AMBA_DEV(busid, data, mask) \ | ||
89 | { \ | ||
90 | .coherent_dma_mask = mask, \ | ||
91 | .init_name = busid, \ | ||
92 | .platform_data = data, \ | ||
93 | } | ||
94 | |||
95 | /* | ||
96 | * APB devices do not themselves have the ability to address memory, | ||
97 | * so DMA masks should be zero (much like USB peripheral devices.) | ||
98 | * The DMA controller DMA masks should be used instead (much like | ||
99 | * USB host controllers in conventional PCs.) | ||
100 | */ | ||
101 | #define AMBA_APB_DEVICE(name, busid, id, base, irqs, data) \ | ||
102 | struct amba_device name##_device = { \ | ||
103 | .dev = __AMBA_DEV(busid, data, 0), \ | ||
104 | .res = DEFINE_RES_MEM(base, SZ_4K), \ | ||
105 | .irq = irqs, \ | ||
106 | .periphid = id, \ | ||
107 | } | ||
108 | |||
109 | /* | ||
110 | * AHB devices are DMA capable, so set their DMA masks | ||
111 | */ | ||
112 | #define AMBA_AHB_DEVICE(name, busid, id, base, irqs, data) \ | ||
113 | struct amba_device name##_device = { \ | ||
114 | .dev = __AMBA_DEV(busid, data, ~0ULL), \ | ||
115 | .res = DEFINE_RES_MEM(base, SZ_4K), \ | ||
116 | .dma_mask = ~0ULL, \ | ||
117 | .irq = irqs, \ | ||
118 | .periphid = id, \ | ||
119 | } | ||
120 | |||
121 | /* | ||
122 | * module_amba_driver() - Helper macro for drivers that don't do anything | ||
123 | * special in module init/exit. This eliminates a lot of boilerplate. Each | ||
124 | * module may only use this macro once, and calling it replaces module_init() | ||
125 | * and module_exit() | ||
126 | */ | ||
127 | #define module_amba_driver(__amba_drv) \ | ||
128 | module_driver(__amba_drv, amba_driver_register, amba_driver_unregister) | ||
129 | |||
92 | #endif | 130 | #endif |