From 322aaf864eb5bb374dd8e74f1cf5f5a05d11ec2c Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 26 Dec 2014 12:20:43 +0800 Subject: both wlan drivers Signed-off-by: Andy Green --- arch/arm/boot/dts/msm8916.dtsi | 59 ++++++++++++++++++++++++++++++ arch/arm/configs/msm8916-qrd_defconfig | 6 ++- drivers/net/wireless/ath/wcn36xx/main.c | 4 +- drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 6 +++ drivers/net/wireless/wcnss/wcnss_wlan.c | 13 +++++-- 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, }; -- cgit v1.2.3