|
@@ -543,6 +543,55 @@ int amba_device_add(struct amba_device *dev, struct resource *parent)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(amba_device_add);
|
|
|
|
|
|
+static struct amba_device *
|
|
|
+amba_aphb_device_add(struct device *parent, const char *name,
|
|
|
+ resource_size_t base, size_t size, int irq1, int irq2,
|
|
|
+ void *pdata, unsigned int periphid, u64 dma_mask)
|
|
|
+{
|
|
|
+ struct amba_device *dev;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ dev = amba_device_alloc(name, base, size);
|
|
|
+ if (!dev)
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
+
|
|
|
+ dev->dma_mask = dma_mask;
|
|
|
+ dev->dev.coherent_dma_mask = dma_mask;
|
|
|
+ dev->irq[0] = irq1;
|
|
|
+ dev->irq[1] = irq2;
|
|
|
+ dev->periphid = periphid;
|
|
|
+ dev->dev.platform_data = pdata;
|
|
|
+ dev->dev.parent = parent;
|
|
|
+
|
|
|
+ ret = amba_device_add(dev, &iomem_resource);
|
|
|
+ if (ret) {
|
|
|
+ amba_device_put(dev);
|
|
|
+ return ERR_PTR(ret);
|
|
|
+ }
|
|
|
+
|
|
|
+ return dev;
|
|
|
+}
|
|
|
+
|
|
|
+struct amba_device *
|
|
|
+amba_apb_device_add(struct device *parent, const char *name,
|
|
|
+ resource_size_t base, size_t size, int irq1, int irq2,
|
|
|
+ void *pdata, unsigned int periphid)
|
|
|
+{
|
|
|
+ return amba_aphb_device_add(parent, name, base, size, irq1, irq2, pdata,
|
|
|
+ periphid, 0);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(amba_apb_device_add);
|
|
|
+
|
|
|
+struct amba_device *
|
|
|
+amba_ahb_device_add(struct device *parent, const char *name,
|
|
|
+ resource_size_t base, size_t size, int irq1, int irq2,
|
|
|
+ void *pdata, unsigned int periphid)
|
|
|
+{
|
|
|
+ return amba_aphb_device_add(parent, name, base, size, irq1, irq2, pdata,
|
|
|
+ periphid, ~0ULL);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(amba_ahb_device_add);
|
|
|
+
|
|
|
static void amba_device_initialize(struct amba_device *dev, const char *name)
|
|
|
{
|
|
|
device_initialize(&dev->dev);
|