diff --git a/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt b/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt
index 4ba9cdb0c81aaeacc9139c3d26dcb4d97fddeb52..1a1ea6289bbf63a74a4c8770eb40c266e96022ad 100644
--- a/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt
+++ b/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt
@@ -8,7 +8,11 @@ connectivity subsystem.
 Required properties:
 - compatible: "wcnss_wlan"
 - reg: physical address and length of the register set for the device.
-- reg-names: "wcnss_mmio", "wcnss_fiq"
+- reg-names: "wcnss_mmio", "wcnss_fiq", "pronto_phy_base", "riva_phy_base",
+             "riva_ccu_base", "pronto_a2xb_base", "pronto_ccpu_base",
+             "pronto_saw2_base", "wlan_tx_phy_aborts","wlan_brdg_err_source",
+             "wlan_tx_status", "alarms_txctl", "alarms_tactl",
+             "pronto_mcu_base".
 - interupts: Pronto to Apps interrupts for tx done and rx pending.
 - qcom,pronto-vddmx-supply: regulator to supply pronto pll.
 - qcom,pronto-vddcx-supply: voltage corner regulator to supply WLAN/BT/FM
diff --git a/arch/arm/boot/dts/qcom/msm8226.dtsi b/arch/arm/boot/dts/qcom/msm8226.dtsi
index cd79b13a5b92f1bd50e0108f7b542c13eb8b3ec2..a54b9e5010e136eeffaa66cabfa976053e66f03f 100644
--- a/arch/arm/boot/dts/qcom/msm8226.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8226.dtsi
@@ -690,8 +690,28 @@
 	qcom,wcnss-wlan@fb000000 {
 		compatible = "qcom,wcnss_wlan";
 		reg = <0xfb000000 0x280000>,
-			<0xf9011008 0x04>;
-		reg-names = "wcnss_mmio", "wcnss_fiq";
+			<0xf9011008 0x04>,
+			<0xfb21b000 0x3000>,
+			<0x03204000 0x00000100>,
+			<0x03200800 0x00000200>,
+			<0xfb100400 0x00000200>,
+			<0xfb205050 0x00000200>,
+			<0xfb219000 0x00000020>,
+			<0xfb080488 0x00000008>,
+			<0xfb080fb0 0x00000008>,
+			<0xfb08040c 0x00000008>,
+			<0xfb0120a8 0x00000008>,
+			<0xfb012448 0x00000008>,
+			<0xfb080c00 0x00000001>;
+
+		reg-names = "wcnss_mmio", "wcnss_fiq",
+			    "pronto_phy_base", "riva_phy_base",
+			    "riva_ccu_base", "pronto_a2xb_base",
+			    "pronto_ccpu_base", "pronto_saw2_base",
+			    "wlan_tx_phy_aborts","wlan_brdg_err_source",
+			    "wlan_tx_status", "alarms_txctl",
+			    "alarms_tactl", "pronto_mcu_base";
+
 		interrupts = <0 145 0 0 146 0>;
 		interrupt-names = "wcnss_wlantx_irq", "wcnss_wlanrx_irq";
 
diff --git a/arch/arm/boot/dts/qcom/msm8610.dtsi b/arch/arm/boot/dts/qcom/msm8610.dtsi
index 92b0e43efebbdcfbcebbc368658c7a4ffc1b0eae..c1150f5292b6b850753480c6100f38084e1f93ad 100644
--- a/arch/arm/boot/dts/qcom/msm8610.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8610.dtsi
@@ -873,8 +873,28 @@
 	qcom,wcnss-wlan@fb000000 {
 		compatible = "qcom,wcnss_wlan";
 		reg = <0xfb000000 0x280000>,
-			<0xf9011008 0x04>;
-		reg-names = "wcnss_mmio", "wcnss_fiq";
+			<0xf9011008 0x04>,
+			<0xfb21b000 0x3000>,
+			<0x03204000 0x00000100>,
+			<0x03200800 0x00000200>,
+			<0xfb100400 0x00000200>,
+			<0xfb205050 0x00000200>,
+			<0xfb219000 0x00000020>,
+			<0xfb080488 0x00000008>,
+			<0xfb080fb0 0x00000008>,
+			<0xfb08040c 0x00000008>,
+			<0xfb0120a8 0x00000008>,
+			<0xfb012448 0x00000008>,
+			<0xfb080c00 0x00000001>;
+
+		reg-names = "wcnss_mmio", "wcnss_fiq",
+			    "pronto_phy_base", "riva_phy_base",
+			    "riva_ccu_base", "pronto_a2xb_base",
+			    "pronto_ccpu_base", "pronto_saw2_base",
+			    "wlan_tx_phy_aborts","wlan_brdg_err_source",
+			    "wlan_tx_status", "alarms_txctl",
+			    "alarms_tactl", "pronto_mcu_base";
+
 		interrupts = <0 145 0>, <0 146 0>;
 		interrupt-names = "wcnss_wlantx_irq", "wcnss_wlanrx_irq";
 
diff --git a/arch/arm/boot/dts/qcom/msm8916.dtsi b/arch/arm/boot/dts/qcom/msm8916.dtsi
index 0b9c6b7996ae68ea89e247052445231a067451b1..1efe180aee7463ce7645b473b2664dbfd01ea7eb 100644
--- a/arch/arm/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8916.dtsi
@@ -1102,6 +1102,46 @@
 		compatible = "qcom,iris_fm";
 	};
 
+	qcom,wcnss-wlan@0a000000 {
+		compatible = "qcom,wcnss_wlan";
+		reg = <0x0a000000 0x280000>,
+			<0xb011008 0x04>,
+			<0x0a21b000 0x3000>,
+			<0x03204000 0x00000100>,
+			<0x03200800 0x00000200>,
+			<0x0A100400 0x00000200>,
+			<0x0A205050 0x00000200>,
+			<0x0A219000 0x00000020>,
+			<0x0A080488 0x00000008>,
+			<0x0A080fb0 0x00000008>,
+			<0x0A08040c 0x00000008>,
+			<0x0A0120a8 0x00000008>,
+			<0x0A012448 0x00000008>,
+			<0x0A080c00 0x00000001>;
+
+		reg-names = "wcnss_mmio", "wcnss_fiq",
+			    "pronto_phy_base", "riva_phy_base",
+			    "riva_ccu_base", "pronto_a2xb_base",
+			    "pronto_ccpu_base", "pronto_saw2_base",
+			    "wlan_tx_phy_aborts","wlan_brdg_err_source",
+			    "wlan_tx_status", "alarms_txctl",
+			    "alarms_tactl", "pronto_mcu_base";
+
+		interrupts = <0 145 0 0 146 0>;
+		interrupt-names = "wcnss_wlantx_irq", "wcnss_wlanrx_irq";
+
+		qcom,pronto-vddmx-supply = <&pm8916_l3>;
+		qcom,pronto-vddcx-supply = <&pm8916_s1_corner>;
+		qcom,pronto-vddpx-supply = <&pm8916_l7>;
+		qcom,iris-vddxo-supply   = <&pm8916_l7>;
+		qcom,iris-vddrfa-supply  = <&pm8916_s3>;
+		qcom,iris-vddpa-supply   = <&pm8916_l9>;
+		qcom,iris-vdddig-supply  = <&pm8916_l5>;
+
+		qcom,has-autodetect-xo;
+		qcom,has-pronto-hw;
+	};
+
 	spi_0: spi@78b7000 { /* BLSP1 QUP3 */
 		compatible = "qcom,spi-qup-v2";
                 #address-cells = <1>;
diff --git a/arch/arm/boot/dts/qcom/msm8974.dtsi b/arch/arm/boot/dts/qcom/msm8974.dtsi
index 34cf1c6ae57cbfabafc78ff16d0bb0e014210ce3..3070f4d9f5eb759697f154824da432d6d4b46746 100644
--- a/arch/arm/boot/dts/qcom/msm8974.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8974.dtsi
@@ -2044,8 +2044,28 @@
 	qcom,wcnss-wlan@fb000000 {
 		compatible = "qcom,wcnss_wlan";
 		reg = <0xfb000000 0x280000>,
-			<0xf9011008 0x04>;
-		reg-names = "wcnss_mmio", "wcnss_fiq";
+			<0xf9011008 0x04>,
+			<0xfb21b000 0x3000>,
+			<0x03204000 0x00000100>,
+			<0x03200800 0x00000200>,
+			<0xfb100400 0x00000200>,
+			<0xfb205050 0x00000200>,
+			<0xfb219000 0x00000020>,
+			<0xfb080488 0x00000008>,
+			<0xfb080fb0 0x00000008>,
+			<0xfb08040c 0x00000008>,
+			<0xfb0120a8 0x00000008>,
+			<0xfb012448 0x00000008>,
+			<0xfb080c00 0x00000001>;
+
+		reg-names = "wcnss_mmio", "wcnss_fiq",
+			    "pronto_phy_base", "riva_phy_base",
+			    "riva_ccu_base", "pronto_a2xb_base",
+			    "pronto_ccpu_base", "pronto_saw2_base",
+			    "wlan_tx_phy_aborts","wlan_brdg_err_source",
+			    "wlan_tx_status", "alarms_txctl",
+			    "alarms_tactl", "pronto_mcu_base";
+
 		interrupts = <0 145 0 0 146 0>;
 		interrupt-names = "wcnss_wlantx_irq", "wcnss_wlanrx_irq";
 
diff --git a/drivers/net/wireless/wcnss/wcnss_vreg.c b/drivers/net/wireless/wcnss/wcnss_vreg.c
index 1955cfaf3409726e30d543863ee186bd01808d6a..eca1c3900a44e6f514986413589e8cecbd55b499 100644
--- a/drivers/net/wireless/wcnss/wcnss_vreg.c
+++ b/drivers/net/wireless/wcnss/wcnss_vreg.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -34,9 +34,6 @@ static DEFINE_MUTEX(list_lock);
 static DEFINE_SEMAPHORE(wcnss_power_on_lock);
 static int auto_detect;
 
-#define MSM_RIVA_PHYS           0x03204000
-#define MSM_PRONTO_PHYS         0xfb21b000
-
 #define RIVA_PMU_OFFSET         0x28
 #define PRONTO_PMU_OFFSET       0x1004
 
@@ -143,27 +140,28 @@ int xo_auto_detect(u32 reg)
 	}
 }
 
-static int configure_iris_xo(struct device *dev, bool use_48mhz_xo, int on,
-			int *iris_xo_set)
+static int
+configure_iris_xo(struct device *dev,
+			struct wcnss_wlan_config *cfg,
+			int on, int *iris_xo_set)
 {
 	u32 reg = 0;
 	u32 iris_reg = WCNSS_INVALID_IRIS_REG;
 	int rc = 0;
-	int size = 0;
 	int pmu_offset = 0;
 	int spare_offset = 0;
-	unsigned long wcnss_phys_addr;
 	void __iomem *pmu_conf_reg;
 	void __iomem *spare_reg;
 	void __iomem *iris_read_reg;
 	struct clk *clk;
 	struct clk *clk_rf = NULL;
+	bool use_48mhz_xo;
+
+	use_48mhz_xo = cfg->use_48mhz_xo;
 
 	if (wcnss_hardware_type() == WCNSS_PRONTO_HW) {
-		wcnss_phys_addr = MSM_PRONTO_PHYS;
 		pmu_offset = PRONTO_PMU_OFFSET;
 		spare_offset = PRONTO_SPARE_OFFSET;
-		size = 0x3000;
 
 		clk = clk_get(dev, "xo");
 		if (IS_ERR(clk)) {
@@ -172,10 +170,8 @@ static int configure_iris_xo(struct device *dev, bool use_48mhz_xo, int on,
 		}
 
 	} else {
-		wcnss_phys_addr = MSM_RIVA_PHYS;
 		pmu_offset = RIVA_PMU_OFFSET;
 		spare_offset = RIVA_SPARE_OFFSET;
-		size = SZ_256;
 
 		clk = clk_get(dev, "cxo");
 		if (IS_ERR(clk)) {
@@ -185,7 +181,7 @@ static int configure_iris_xo(struct device *dev, bool use_48mhz_xo, int on,
 	}
 
 	if (on) {
-		msm_wcnss_base = ioremap(wcnss_phys_addr, size);
+		msm_wcnss_base = cfg->msm_wcnss_base;
 		if (!msm_wcnss_base) {
 			pr_err("ioremap wcnss physical failed\n");
 			goto fail;
@@ -512,14 +508,14 @@ int wcnss_wlan_power(struct device *dev,
 			goto fail_iris_on;
 
 		/* Configure IRIS XO */
-		rc = configure_iris_xo(dev, cfg->use_48mhz_xo,
+		rc = configure_iris_xo(dev, cfg,
 				WCNSS_WLAN_SWITCH_ON, iris_xo_set);
 		if (rc)
 			goto fail_iris_xo;
 		up(&wcnss_power_on_lock);
 
 	} else {
-		configure_iris_xo(dev, cfg->use_48mhz_xo,
+		configure_iris_xo(dev, cfg,
 				WCNSS_WLAN_SWITCH_OFF, NULL);
 		wcnss_iris_vregs_off(hw_type);
 		wcnss_core_vregs_off(hw_type);
diff --git a/drivers/net/wireless/wcnss/wcnss_wlan.c b/drivers/net/wireless/wcnss/wcnss_wlan.c
index d12792ed27fbb2cb4ae0c4c30491a136d893009f..af75b8af7f6937ef084ea6945f03615435ad1c1f 100644
--- a/drivers/net/wireless/wcnss/wcnss_wlan.c
+++ b/drivers/net/wireless/wcnss/wcnss_wlan.c
@@ -74,14 +74,9 @@ MODULE_PARM_DESC(do_not_cancel_vote, "Do not cancel votes for wcnss");
 
 static DEFINE_SPINLOCK(reg_spinlock);
 
-#define MSM_RIVA_PHYS			0x03204000
-#define MSM_PRONTO_PHYS			0xfb21b000
-
 #define RIVA_SPARE_OFFSET		0x0b4
 #define RIVA_SUSPEND_BIT		BIT(24)
 
-#define MSM_RIVA_CCU_BASE			0x03200800
-
 #define CCU_RIVA_INVALID_ADDR_OFFSET		0x100
 #define CCU_RIVA_LAST_ADDR0_OFFSET		0x104
 #define CCU_RIVA_LAST_ADDR1_OFFSET		0x108
@@ -117,7 +112,6 @@ static DEFINE_SPINLOCK(reg_spinlock);
 #define PRONTO_PMU_COM_CSR_OFFSET          0x1040
 #define PRONTO_PMU_SOFT_RESET_OFFSET       0x104C
 
-#define MSM_PRONTO_A2XB_BASE		0xfb100400
 #define A2XB_CFG_OFFSET				0x00
 #define A2XB_INT_SRC_OFFSET			0x0c
 #define A2XB_TSTBUS_CTRL_OFFSET		0x14
@@ -135,19 +129,16 @@ static DEFINE_SPINLOCK(reg_spinlock);
 #define WCNSS_TSTBUS_CTRL_CTRL_CFG0	(0x00 << 28)
 #define WCNSS_TSTBUS_CTRL_CTRL_CFG1	(0x01 << 28)
 
-#define MSM_PRONTO_CCPU_BASE			0xfb205050
 #define CCU_PRONTO_INVALID_ADDR_OFFSET		0x08
 #define CCU_PRONTO_LAST_ADDR0_OFFSET		0x0c
 #define CCU_PRONTO_LAST_ADDR1_OFFSET		0x10
 #define CCU_PRONTO_LAST_ADDR2_OFFSET		0x14
 
-#define MSM_PRONTO_SAW2_BASE			0xfb219000
 #define PRONTO_SAW2_SPM_STS_OFFSET		0x0c
 
-#define MSM_PRONTO_PLL_BASE				0xfb21b1c0
 #define PRONTO_PLL_STATUS_OFFSET		0x1c
+#define PRONTO_PLL_MODE_OFFSET			0x1c0
 
-#define MSM_PRONTO_MCU_BASE			0xfb080c00
 #define MCU_CBR_CCAHB_ERR_OFFSET		0x380
 #define MCU_CBR_CAHB_ERR_OFFSET			0x384
 #define MCU_CBR_CCAHB_TIMEOUT_OFFSET		0x388
@@ -161,13 +152,6 @@ static DEFINE_SPINLOCK(reg_spinlock);
 #define MCU_FDBR_CDAHB_TIMEOUT_OFFSET		0x3a8
 #define MCU_FDBR_FDAHB_TIMEOUT_OFFSET		0x3ac
 
-#define MSM_PRONTO_TXP_STATUS           0xfb08040c
-#define MSM_PRONTO_TXP_PHY_ABORT        0xfb080488
-#define MSM_PRONTO_BRDG_ERR_SRC         0xfb080fb0
-
-#define MSM_PRONTO_ALARMS_TXCTL         0xfb0120a8
-#define MSM_PRONTO_ALARMS_TACTL         0xfb012448
-
 #define WCNSS_DEF_WLAN_RX_BUFF_COUNT		1024
 #define WCNSS_VBATT_THRESHOLD		3500000
 #define WCNSS_VBATT_GUARD		200
@@ -2091,12 +2075,10 @@ wcnss_trigger_config(struct platform_device *pdev)
 {
 	int ret;
 	struct qcom_wcnss_opts *pdata;
-	unsigned long wcnss_phys_addr;
-	int size = 0;
 	struct resource *res;
 	int pil_retry = 0;
 	int has_pronto_hw = of_property_read_bool(pdev->dev.of_node,
-									"qcom,has-pronto-hw");
+							"qcom,has-pronto-hw");
 
 	if (of_property_read_u32(pdev->dev.of_node,
 			"qcom,wlan-rx-buff-count", &penv->wlan_rx_buff_count)) {
@@ -2113,7 +2095,7 @@ wcnss_trigger_config(struct platform_device *pdev)
 	if (WCNSS_CONFIG_UNSPECIFIED == has_48mhz_xo) {
 		if (has_pronto_hw) {
 			has_48mhz_xo = of_property_read_bool(pdev->dev.of_node,
-										"qcom,has-48mhz-xo");
+							"qcom,has-48mhz-xo");
 		} else {
 			has_48mhz_xo = pdata->has_48mhz_xo;
 		}
@@ -2123,7 +2105,7 @@ wcnss_trigger_config(struct platform_device *pdev)
 
 	if (WCNSS_CONFIG_UNSPECIFIED == has_autodetect_xo && has_pronto_hw) {
 		has_autodetect_xo = of_property_read_bool(pdev->dev.of_node,
-									"qcom,has-autodetect-xo");
+						"qcom,has-autodetect-xo");
 	}
 
 	penv->thermal_mitigation = 0;
@@ -2169,112 +2151,238 @@ wcnss_trigger_config(struct platform_device *pdev)
 	wake_lock_init(&penv->wcnss_wake_lock, WAKE_LOCK_SUSPEND, "wcnss");
 
 	if (wcnss_hardware_type() == WCNSS_PRONTO_HW) {
-		size = 0x3000;
-		wcnss_phys_addr = MSM_PRONTO_PHYS;
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "pronto_phy_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource pronto_phy_base failed\n",
+								__func__);
+			goto fail_ioremap;
+		}
+		penv->msm_wcnss_base =
+			devm_request_and_ioremap(&pdev->dev, res);
 	} else {
-		wcnss_phys_addr = MSM_RIVA_PHYS;
-		size = SZ_256;
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "riva_phy_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource riva_phy_base failed\n",
+								__func__);
+			goto fail_ioremap;
+		}
+		penv->msm_wcnss_base =
+			devm_request_and_ioremap(&pdev->dev, res);
 	}
 
-	penv->msm_wcnss_base = ioremap(wcnss_phys_addr, size);
 	if (!penv->msm_wcnss_base) {
 		ret = -ENOMEM;
 		pr_err("%s: ioremap wcnss physical failed\n", __func__);
 		goto fail_ioremap;
 	}
 
+	penv->wlan_config.msm_wcnss_base = penv->msm_wcnss_base;
 	if (wcnss_hardware_type() == WCNSS_RIVA_HW) {
-		penv->riva_ccu_base =  ioremap(MSM_RIVA_CCU_BASE, SZ_512);
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "riva_ccu_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource riva_ccu_base failed\n",
+								__func__);
+			goto fail_ioremap;
+		}
+		penv->riva_ccu_base =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->riva_ccu_base) {
 			ret = -ENOMEM;
-			pr_err("%s: ioremap wcnss physical failed\n", __func__);
-			goto fail_ioremap2;
+			pr_err("%s: ioremap riva ccu physical failed\n",
+								 __func__);
+			goto fail_ioremap;
 		}
 	} else {
-		penv->pronto_a2xb_base =  ioremap(MSM_PRONTO_A2XB_BASE, SZ_512);
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "pronto_a2xb_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource pronto_a2xb_base failed\n",
+								__func__);
+			goto fail_ioremap;
+		}
+		penv->pronto_a2xb_base =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->pronto_a2xb_base) {
 			ret = -ENOMEM;
-			pr_err("%s: ioremap wcnss physical failed\n", __func__);
-			goto fail_ioremap2;
+			pr_err("%s: ioremap pronto a2xb physical failed\n",
+								 __func__);
+			goto fail_ioremap;
+		}
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "pronto_ccpu_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource pronto_ccpu_base failed\n",
+								__func__);
+			goto fail_ioremap;
 		}
-		penv->pronto_ccpu_base =  ioremap(MSM_PRONTO_CCPU_BASE, SZ_512);
+		penv->pronto_ccpu_base =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->pronto_ccpu_base) {
 			ret = -ENOMEM;
-			pr_err("%s: ioremap wcnss physical failed\n", __func__);
-			goto fail_ioremap3;
+			pr_err("%s: ioremap pronto ccpu physical failed\n",
+								__func__);
+			goto fail_ioremap;
 		}
+
 		/* for reset FIQ */
 		res = platform_get_resource_byname(penv->pdev,
 				IORESOURCE_MEM, "wcnss_fiq");
 		if (!res) {
 			dev_err(&pdev->dev, "insufficient irq mem resources\n");
 			ret = -ENOENT;
-			goto fail_ioremap4;
+			goto fail_ioremap;
 		}
 		penv->fiq_reg = ioremap_nocache(res->start, resource_size(res));
 		if (!penv->fiq_reg) {
 			pr_err("wcnss: %s: ioremap_nocache() failed fiq_reg addr:%pr\n",
 				__func__, &res->start);
 			ret = -ENOMEM;
-			goto fail_ioremap4;
+			goto fail_ioremap;
 		}
-		penv->pronto_saw2_base = ioremap_nocache(MSM_PRONTO_SAW2_BASE,
-				SZ_32);
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "pronto_saw2_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource pronto_saw2_base failed\n",
+								__func__);
+			goto fail_ioremap2;
+		}
+		penv->pronto_saw2_base =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->pronto_saw2_base) {
 			pr_err("%s: ioremap wcnss physical(saw2) failed\n",
 					__func__);
 			ret = -ENOMEM;
-			goto fail_ioremap5;
+			goto fail_ioremap2;
 		}
-		penv->pronto_pll_base = ioremap_nocache(MSM_PRONTO_PLL_BASE,
-				SZ_64);
+
+		penv->pronto_pll_base =
+			penv->msm_wcnss_base + PRONTO_PLL_MODE_OFFSET;
 		if (!penv->pronto_pll_base) {
 			pr_err("%s: ioremap wcnss physical(pll) failed\n",
 					__func__);
 			ret = -ENOMEM;
-			goto fail_ioremap6;
+			goto fail_ioremap2;
+		}
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "wlan_tx_phy_aborts");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource wlan_tx_phy_aborts failed\n",
+								__func__);
+			goto fail_ioremap2;
 		}
+		penv->wlan_tx_phy_aborts =
+			devm_request_and_ioremap(&pdev->dev, res);
 
-		penv->wlan_tx_phy_aborts =  ioremap(MSM_PRONTO_TXP_PHY_ABORT,
-					SZ_8);
 		if (!penv->wlan_tx_phy_aborts) {
 			ret = -ENOMEM;
 			pr_err("%s: ioremap wlan TX PHY failed\n", __func__);
-			goto fail_ioremap7;
+			goto fail_ioremap2;
 		}
-		penv->wlan_brdg_err_source =  ioremap(MSM_PRONTO_BRDG_ERR_SRC,
-							SZ_8);
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "wlan_brdg_err_source");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource wlan_brdg_err_source failed\n",
+								__func__);
+			goto fail_ioremap2;
+		}
+		penv->wlan_brdg_err_source =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->wlan_brdg_err_source) {
 			ret = -ENOMEM;
 			pr_err("%s: ioremap wlan BRDG ERR failed\n", __func__);
-			goto fail_ioremap8;
+			goto fail_ioremap2;
 		}
-		penv->wlan_tx_status = ioremap(MSM_PRONTO_TXP_STATUS, SZ_8);
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "wlan_tx_status");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource wlan_tx_status failed\n",
+								__func__);
+			goto fail_ioremap2;
+		}
+		penv->wlan_tx_status =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->wlan_tx_status) {
 			ret = -ENOMEM;
 			pr_err("%s: ioremap wlan TX STATUS failed\n", __func__);
-			goto fail_ioremap9;
+			goto fail_ioremap2;
+		}
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "alarms_txctl");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource alarms_txctl failed\n",
+								__func__);
+			goto fail_ioremap2;
 		}
-		penv->alarms_txctl = ioremap(MSM_PRONTO_ALARMS_TXCTL, SZ_8);
+		penv->alarms_txctl =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->alarms_txctl) {
 			ret = -ENOMEM;
 			pr_err("%s: ioremap alarms TXCTL failed\n", __func__);
-			goto fail_ioremap10;
+			goto fail_ioremap2;
+		}
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "alarms_tactl");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource alarms_tactl failed\n",
+								__func__);
+			goto fail_ioremap2;
 		}
-		penv->alarms_tactl = ioremap(MSM_PRONTO_ALARMS_TACTL, SZ_8);
+		penv->alarms_tactl =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->alarms_tactl) {
 			ret = -ENOMEM;
 			pr_err("%s: ioremap alarms TACTL failed\n", __func__);
-			goto fail_ioremap11;
+			goto fail_ioremap2;
+		}
+
+		res = platform_get_resource_byname(pdev,
+			IORESOURCE_MEM, "pronto_mcu_base");
+		if (!res) {
+			ret = -EIO;
+			pr_err("%s: resource pronto_mcu_base failed\n",
+								__func__);
+			goto fail_ioremap2;
 		}
-		penv->pronto_mcu_base = ioremap(MSM_PRONTO_MCU_BASE, SZ_1K);
+		penv->pronto_mcu_base =
+			devm_request_and_ioremap(&pdev->dev, res);
+
 		if (!penv->pronto_mcu_base) {
 			ret = -ENOMEM;
-			pr_err("%s: ioremap wcnss physical(mcu) failed\n",
+			pr_err("%s: ioremap pronto mcu physical failed\n",
 				__func__);
-			goto fail_ioremap12;
+			goto fail_ioremap2;
 		}
 	}
+
 	penv->adc_tm_dev = qpnp_get_adc_tm(&penv->pdev->dev, "wcnss");
 	if (IS_ERR(penv->adc_tm_dev)) {
 		pr_err("%s:  adc get failed\n", __func__);
@@ -2296,49 +2404,14 @@ wcnss_trigger_config(struct platform_device *pdev)
 
 	if (pil_retry >= WCNSS_MAX_PIL_RETRY) {
 		penv->pil = NULL;
-		goto fail_pil;
+		goto fail_ioremap2;
 	}
 
 	return 0;
 
-fail_pil:
-	if (penv->riva_ccu_base)
-		iounmap(penv->riva_ccu_base);
-	if (penv->pronto_mcu_base)
-		iounmap(penv->pronto_mcu_base);
-fail_ioremap12:
-	if (penv->alarms_tactl)
-		iounmap(penv->alarms_tactl);
-fail_ioremap11:
-	if (penv->alarms_txctl)
-		iounmap(penv->alarms_txctl);
-fail_ioremap10:
-	if (penv->wlan_tx_status)
-		iounmap(penv->wlan_tx_status);
-fail_ioremap9:
-	if (penv->wlan_brdg_err_source)
-		iounmap(penv->wlan_brdg_err_source);
-fail_ioremap8:
-	if (penv->wlan_tx_phy_aborts)
-		iounmap(penv->wlan_tx_phy_aborts);
-fail_ioremap7:
-	if (penv->pronto_pll_base)
-		iounmap(penv->pronto_pll_base);
-fail_ioremap6:
-	if (penv->pronto_saw2_base)
-		iounmap(penv->pronto_saw2_base);
-fail_ioremap5:
+fail_ioremap2:
 	if (penv->fiq_reg)
 		iounmap(penv->fiq_reg);
-fail_ioremap4:
-	if (penv->pronto_ccpu_base)
-		iounmap(penv->pronto_ccpu_base);
-fail_ioremap3:
-	if (penv->pronto_a2xb_base)
-		iounmap(penv->pronto_a2xb_base);
-fail_ioremap2:
-	if (penv->msm_wcnss_base)
-		iounmap(penv->msm_wcnss_base);
 fail_ioremap:
 	wake_lock_destroy(&penv->wcnss_wake_lock);
 fail_res:
diff --git a/include/linux/wcnss_wlan.h b/include/linux/wcnss_wlan.h
index 4d0ad28d56e0b9eb9eb4ad7893d6e4e90e39ea16..6eb9f9e86809ec7d47e8b383ae4e3ecb3a57b3e3 100644
--- a/include/linux/wcnss_wlan.h
+++ b/include/linux/wcnss_wlan.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -27,7 +27,8 @@ enum wcnss_hw_type {
 };
 
 struct wcnss_wlan_config {
-	int		use_48mhz_xo;
+	int	use_48mhz_xo;
+	void __iomem	*msm_wcnss_base;
 };
 
 enum {