#include <linux/bug.h>
 #include <linux/dma-mapping.h>
 #include <linux/iommu.h>
+#include <linux/platform_device.h>
 #include <linux/io.h>
 #include <linux/soc/qcom/smem.h>
 
 int ipa_mem_setup(struct ipa *ipa)
 {
        dma_addr_t addr = ipa->zero_addr;
-       const struct reg *reg;
        const struct ipa_mem *mem;
        struct gsi_trans *trans;
+       const struct reg *reg;
        u32 offset;
        u16 size;
        u32 val;
 }
 
 /* Perform memory region-related initialization */
-int ipa_mem_init(struct ipa *ipa, const struct ipa_mem_data *mem_data)
+int ipa_mem_init(struct ipa *ipa, struct platform_device *pdev,
+                const struct ipa_mem_data *mem_data)
 {
-       struct device *dev = &ipa->pdev->dev;
+       struct device *dev = &pdev->dev;
        struct resource *res;
        int ret;
 
        if (!ipa_table_mem_valid(ipa, true))
                return -EINVAL;
 
-       ret = dma_set_mask_and_coherent(&ipa->pdev->dev, DMA_BIT_MASK(64));
+       ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
        if (ret) {
                dev_err(dev, "error %d setting DMA mask\n", ret);
                return ret;
        }
 
-       res = platform_get_resource_byname(ipa->pdev, IORESOURCE_MEM,
-                                          "ipa-shared");
+       res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ipa-shared");
        if (!res) {
                dev_err(dev,
                        "DT error getting \"ipa-shared\" memory property\n");
 
 #ifndef _IPA_MEM_H_
 #define _IPA_MEM_H_
 
+struct platform_device;
+
 struct ipa;
 struct ipa_mem_data;
 
 
 int ipa_mem_zero_modem(struct ipa *ipa);
 
-int ipa_mem_init(struct ipa *ipa, const struct ipa_mem_data *mem_data);
+int ipa_mem_init(struct ipa *ipa, struct platform_device *pdev,
+                const struct ipa_mem_data *mem_data);
 void ipa_mem_exit(struct ipa *ipa);
 
 #endif /* _IPA_MEM_H_ */