summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Green <andy.green@linaro.org>2014-12-26 12:20:43 +0800
committerAndy Green <andy.green@linaro.org>2014-12-26 12:20:43 +0800
commit322aaf864eb5bb374dd8e74f1cf5f5a05d11ec2c (patch)
treea5169c733fce8d519fa68c5a279a1eab954e28c7
parent39dfbec034c717989144fe2e9143a9a2427b049a (diff)
Signed-off-by: Andy Green <andy.green@linaro.org>
-rw-r--r--arch/arm/boot/dts/msm8916.dtsi59
-rw-r--r--arch/arm/configs/msm8916-qrd_defconfig6
-rw-r--r--drivers/net/wireless/ath/wcn36xx/main.c4
-rw-r--r--drivers/net/wireless/ath/wcn36xx/wcn36xx.h6
-rw-r--r--drivers/net/wireless/wcnss/wcnss_wlan.c13
5 files changed, 82 insertions, 6 deletions
diff --git a/arch/arm/boot/dts/msm8916.dtsi b/arch/arm/boot/dts/msm8916.dtsi
index b782548f4c82..df9dbc92ca72 100644
--- a/arch/arm/boot/dts/msm8916.dtsi
+++ b/arch/arm/boot/dts/msm8916.dtsi
@@ -806,6 +806,65 @@
qcom,wcnss-adc_tm = <&pm8916_adc_tm>;
};
+ qcom,wcn36xx@0a000000 {
+ compatible = "qcom,wcn36xx";
+ 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>;
+
+ pinctrl-names = "wcnss_default", "wcnss_sleep",
+ "wcnss_gpio_default";
+ pinctrl-0 = <&wcnss_default>;
+ pinctrl-1 = <&wcnss_sleep>;
+ pinctrl-2 = <&wcnss_gpio_default>;
+
+ gpios = <&msm_gpio 40 0>, <&msm_gpio 41 0>, <&msm_gpio 42 0>,
+ <&msm_gpio 43 0>, <&msm_gpio 44 0>;
+
+ clocks = <&clock_rpm clk_xo_wlan_clk>,
+ <&clock_rpm clk_rf_clk2>,
+ <&clock_debug clk_gcc_debug_mux>,
+ <&clock_gcc clk_wcnss_m_clk>;
+ clock-names = "xo", "rf_clk", "measure", "wcnss_debug";
+
+ qcom,has-autodetect-xo;
+ qcom,wlan-rx-buff-count = <512>;
+ qcom,is-pronto-vt;
+ qcom,has-pronto-hw;
+ qcom,wcnss-adc_tm = <&pm8916_adc_tm>;
+ };
+
+
qcom,pronto@a21b000 {
compatible = "qcom,pil-tz-generic";
reg = <0x0a21b000 0x3000>;
diff --git a/arch/arm/configs/msm8916-qrd_defconfig b/arch/arm/configs/msm8916-qrd_defconfig
index 20a59e483e6b..69ff2adc8d90 100644
--- a/arch/arm/configs/msm8916-qrd_defconfig
+++ b/arch/arm/configs/msm8916-qrd_defconfig
@@ -92,8 +92,12 @@ CONFIG_DM_CRYPT=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
# CONFIG_USB_NET_DRIVERS is not set
-CONFIG_WCNSS_CORE=y
+CONFIG_WCNSS_CORE=m
CONFIG_WCNSS_CORE_PRONTO=m
+CONFIG_ATH_CARDS=y
+CONFIG_ATH_DEBUG=y
+CONFIG_WCN36XX=m
+CONFIG_WCN36XX_DEBUGFS=y
# CONFIG_RTL_CARDS is not set
CONFIG_SERIAL_MSM=y
CONFIG_SERIAL_MSM_CONSOLE=y
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index 145b8e593a4e..d13036952441 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -265,7 +265,7 @@ static int wcn36xx_start(struct ieee80211_hw *hw)
ret = -ENOMEM;
goto out_free_dxe_ctl;
}
-
+#if 0
ret = wcn36xx_smd_load_nv(wcn);
if (ret) {
wcn36xx_err("Failed to push NV to chip\n");
@@ -285,7 +285,7 @@ static int wcn36xx_start(struct ieee80211_hw *hw)
else
wcn36xx_feat_caps_info(wcn);
}
-
+#endif
wcn36xx_detect_chip_version(wcn);
/* DMA channel initialization */
diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
index f0fb81dfd17b..deb0c66ec677 100644
--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
@@ -74,6 +74,12 @@ enum wcn36xx_debug_mask {
buf, len, false); \
} while (0)
+#define wcn36xx_dump(mask, prefix_str, buf, len) do { \
+ print_hex_dump(KERN_INFO, pr_fmt(prefix_str), \
+ DUMP_PREFIX_OFFSET, 32, 1, \
+ buf, len, false); \
+} while (0)
+
#define WCN36XX_HW_CHANNEL(__wcn) (__wcn->hw->conf.chandef.chan->hw_value)
#define WCN36XX_BAND(__wcn) (__wcn->hw->conf.chandef.chan->band)
#define WCN36XX_CENTER_FREQ(__wcn) (__wcn->hw->conf.chandef.chan->center_freq)
diff --git a/drivers/net/wireless/wcnss/wcnss_wlan.c b/drivers/net/wireless/wcnss/wcnss_wlan.c
index a3487c2dc49a..a6067a26977d 100644
--- a/drivers/net/wireless/wcnss/wcnss_wlan.c
+++ b/drivers/net/wireless/wcnss/wcnss_wlan.c
@@ -2331,6 +2331,9 @@ static ssize_t wcnss_ctrl_write(struct file *fp, const char __user
|| WCNSS_MIN_CMD_LEN > count)
return -EFAULT;
+ if (!count)
+ return 0;
+
mutex_lock(&penv->ctrl_lock);
rc = copy_from_user(buf, user_buffer, count);
if (0 == rc)
@@ -2798,8 +2801,10 @@ static ssize_t wcnss_wlan_write(struct file *fp, const char __user
int rc = 0;
u32 size = 0;
- if (!penv || !penv->device_opened || penv->user_cal_available)
+ if (!penv || !penv->device_opened || penv->user_cal_available) {
+ pr_err("ai %p %d %d,,, writing %d\n", penv, penv->device_opened, penv->user_cal_available, count);
return -EFAULT;
+ }
if (penv->user_cal_rcvd == 0 && count >= 4
&& !penv->user_cal_data) {
@@ -2820,8 +2825,10 @@ static ssize_t wcnss_wlan_write(struct file *fp, const char __user
if (0 == count)
goto exit;
- } else if (penv->user_cal_rcvd == 0 && count < 4)
+ } else if (penv->user_cal_rcvd == 0 && count < 4) {
+ pr_err("b\n");
return -EFAULT;
+ }
if ((UINT32_MAX - count < penv->user_cal_rcvd) ||
MAX_CALIBRATED_DATA_SIZE < count + penv->user_cal_rcvd) {
@@ -2899,7 +2906,7 @@ static const struct file_operations wcnss_node_fops = {
static struct miscdevice wcnss_misc = {
.minor = MISC_DYNAMIC_MINOR,
-.name = DEVICE,
+ .name = DEVICE,
.fops = &wcnss_node_fops,
};