* [PATCH v3 0/2] ath10k: device tree support @ 2014-11-27 12:00 ` Kalle Valo 0 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:00 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik Hi, here's ath10k device tree support which Toshi and me have been working on. Please review. Device tree maintainers: please review the bindings document carefully, this is the first time I have written one. v3: * add a debug message to ath10k * write bindings file * use ar->dev.of_node instead of pci_device_to_OF_node() v2: * fixed a bug that returns an uninitialized value if the node is not found --- Kalle Valo (1): dt: bindings: add ath10k wireless device Toshi Kikuchi (1): ath10k: read calibration data from Device Tree .../bindings/net/wireless/qcom,ath10k.txt | 30 +++++++++ drivers/net/wireless/ath/ath10k/core.c | 70 ++++++++++++++++++++ drivers/net/wireless/ath/ath10k/core.h | 3 + 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 0/2] ath10k: device tree support @ 2014-11-27 12:00 ` Kalle Valo 0 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:00 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik Hi, here's ath10k device tree support which Toshi and me have been working on. Please review. Device tree maintainers: please review the bindings document carefully, this is the first time I have written one. v3: * add a debug message to ath10k * write bindings file * use ar->dev.of_node instead of pci_device_to_OF_node() v2: * fixed a bug that returns an uninitialized value if the node is not found --- Kalle Valo (1): dt: bindings: add ath10k wireless device Toshi Kikuchi (1): ath10k: read calibration data from Device Tree .../bindings/net/wireless/qcom,ath10k.txt | 30 +++++++++ drivers/net/wireless/ath/ath10k/core.c | 70 ++++++++++++++++++++ drivers/net/wireless/ath/ath10k/core.h | 3 + 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt _______________________________________________ ath10k mailing list ath10k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath10k ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/2] dt: bindings: add ath10k wireless device 2014-11-27 12:00 ` Kalle Valo @ 2014-11-27 12:00 ` Kalle Valo -1 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:00 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik Document how calibration data can be provided to ath10k via Device Tree. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> --- .../bindings/net/wireless/qcom,ath10k.txt | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt diff --git a/Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt b/Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt new file mode 100644 index 000000000000..edefc26c6204 --- /dev/null +++ b/Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt @@ -0,0 +1,30 @@ +* Qualcomm Atheros ath10k wireless devices + +For ath10k devices the calibration data can be provided through Device +Tree. The node is a child node of the PCI controller. + +Required properties: +-compatible : Should be "qcom,ath10k" + +Optional properties: +- qcom,ath10k-calibration-data : calibration data as an array, the + length can vary between hw versions + + +Example: + +pci { + pcie@0 { + reg = <0 0 0 0 0>; + #interrupt-cells = <1>; + #size-cells = <2>; + #address-cells = <3>; + device_type = "pci"; + + ath10k@0,0 { + reg = <0 0 0 0 0>; + device_type = "pci"; + qcom,ath10k-calibration-data = [ 01 02 03 ... ]; + }; + }; +}; ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 1/2] dt: bindings: add ath10k wireless device @ 2014-11-27 12:00 ` Kalle Valo 0 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:00 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik Document how calibration data can be provided to ath10k via Device Tree. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> --- .../bindings/net/wireless/qcom,ath10k.txt | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt diff --git a/Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt b/Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt new file mode 100644 index 000000000000..edefc26c6204 --- /dev/null +++ b/Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt @@ -0,0 +1,30 @@ +* Qualcomm Atheros ath10k wireless devices + +For ath10k devices the calibration data can be provided through Device +Tree. The node is a child node of the PCI controller. + +Required properties: +-compatible : Should be "qcom,ath10k" + +Optional properties: +- qcom,ath10k-calibration-data : calibration data as an array, the + length can vary between hw versions + + +Example: + +pci { + pcie@0 { + reg = <0 0 0 0 0>; + #interrupt-cells = <1>; + #size-cells = <2>; + #address-cells = <3>; + device_type = "pci"; + + ath10k@0,0 { + reg = <0 0 0 0 0>; + device_type = "pci"; + qcom,ath10k-calibration-data = [ 01 02 03 ... ]; + }; + }; +}; _______________________________________________ ath10k mailing list ath10k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath10k ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] ath10k: read calibration data from Device Tree 2014-11-27 12:00 ` Kalle Valo @ 2014-11-27 12:00 ` Kalle Valo -1 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:00 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik From: Toshi Kikuchi <toshik@chromium.org> This patch adds support for reading calibration data from Device Tree. It looks for the calibration data in Device Tree if it can't find it in a file. If there's no node in Device Tree, ath10k will try to find the calibration data from OTP. The node for the calibration data should be defined like this: pci { pcie@0 { reg = <0 0 0 0 0>; #interrupt-cells = <1>; #size-cells = <2>; #address-cells = <3>; device_type = "pci"; ath10k@0,0 { reg = <0 0 0 0 0>; device_type = "pci"; qcom,ath10k-calibration-data = [ 01 02 03 ... ]; }; }; }; Signed-off-by: Toshi Kikuchi <toshik@chromium.org> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> --- drivers/net/wireless/ath/ath10k/core.c | 70 ++++++++++++++++++++++++++++++++ drivers/net/wireless/ath/ath10k/core.h | 3 + 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 7762061a1944..6165f2735b35 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -17,6 +17,7 @@ #include <linux/module.h> #include <linux/firmware.h> +#include <linux/of.h> #include "core.h" #include "mac.h" @@ -249,6 +250,63 @@ static int ath10k_download_cal_file(struct ath10k *ar) return 0; } +static int ath10k_download_cal_dt(struct ath10k *ar) +{ + struct device_node *node; + int data_len; + void *data; + int ret; + + node = ar->dev->of_node; + if (!node) + /* Device Tree is optional, don't print any warnings if + * there's no node for ath10k. + */ + return -ENOENT; + + if (!of_get_property(node, "qcom,ath10k-calibration-data", + &data_len)) { + /* The calibration data node is optional */ + return -ENOENT; + } + + if (data_len != QCA988X_CAL_DATA_LEN) { + ath10k_warn(ar, "invalid calibration data length in DT: %d\n", + data_len); + ret = -EMSGSIZE; + goto out; + } + + data = kmalloc(data_len, GFP_KERNEL); + if (!data) { + ret = -ENOMEM; + goto out; + } + + ret = of_property_read_u8_array(node, "qcom,ath10k-calibration-data", + data, data_len); + if (ret) { + ath10k_warn(ar, "failed to read calibration data from DT: %d\n", + ret); + goto out_free; + } + + ret = ath10k_download_board_data(ar, data, data_len); + if (ret) { + ath10k_warn(ar, "failed to download calibration data from Device Tree: %d\n", + ret); + goto out_free; + } + + ret = 0; + +out_free: + kfree(data); + +out: + return ret; +} + static int ath10k_download_and_run_otp(struct ath10k *ar) { u32 result, address = ar->hw_params.patch_load_addr; @@ -662,7 +720,17 @@ static int ath10k_download_cal_data(struct ath10k *ar) } ath10k_dbg(ar, ATH10K_DBG_BOOT, - "boot did not find a calibration file, try OTP next: %d\n", + "boot did not find a calibration file, try DT next: %d\n", + ret); + + ret = ath10k_download_cal_dt(ar); + if (ret == 0) { + ar->cal_mode = ATH10K_CAL_MODE_DT; + goto done; + } + + ath10k_dbg(ar, ATH10K_DBG_BOOT, + "boot did not find DT entry, try OTP next: %d\n", ret); ret = ath10k_download_and_run_otp(ar); diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index 4a294987736c..2dd1bb05a3fc 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -400,6 +400,7 @@ enum ath10k_dev_flags { enum ath10k_cal_mode { ATH10K_CAL_MODE_FILE, ATH10K_CAL_MODE_OTP, + ATH10K_CAL_MODE_DT, }; static inline const char *ath10k_cal_mode_str(enum ath10k_cal_mode mode) @@ -409,6 +410,8 @@ static inline const char *ath10k_cal_mode_str(enum ath10k_cal_mode mode) return "file"; case ATH10K_CAL_MODE_OTP: return "otp"; + case ATH10K_CAL_MODE_DT: + return "dt"; } return "unknown"; ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] ath10k: read calibration data from Device Tree @ 2014-11-27 12:00 ` Kalle Valo 0 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:00 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik From: Toshi Kikuchi <toshik@chromium.org> This patch adds support for reading calibration data from Device Tree. It looks for the calibration data in Device Tree if it can't find it in a file. If there's no node in Device Tree, ath10k will try to find the calibration data from OTP. The node for the calibration data should be defined like this: pci { pcie@0 { reg = <0 0 0 0 0>; #interrupt-cells = <1>; #size-cells = <2>; #address-cells = <3>; device_type = "pci"; ath10k@0,0 { reg = <0 0 0 0 0>; device_type = "pci"; qcom,ath10k-calibration-data = [ 01 02 03 ... ]; }; }; }; Signed-off-by: Toshi Kikuchi <toshik@chromium.org> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> --- drivers/net/wireless/ath/ath10k/core.c | 70 ++++++++++++++++++++++++++++++++ drivers/net/wireless/ath/ath10k/core.h | 3 + 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 7762061a1944..6165f2735b35 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -17,6 +17,7 @@ #include <linux/module.h> #include <linux/firmware.h> +#include <linux/of.h> #include "core.h" #include "mac.h" @@ -249,6 +250,63 @@ static int ath10k_download_cal_file(struct ath10k *ar) return 0; } +static int ath10k_download_cal_dt(struct ath10k *ar) +{ + struct device_node *node; + int data_len; + void *data; + int ret; + + node = ar->dev->of_node; + if (!node) + /* Device Tree is optional, don't print any warnings if + * there's no node for ath10k. + */ + return -ENOENT; + + if (!of_get_property(node, "qcom,ath10k-calibration-data", + &data_len)) { + /* The calibration data node is optional */ + return -ENOENT; + } + + if (data_len != QCA988X_CAL_DATA_LEN) { + ath10k_warn(ar, "invalid calibration data length in DT: %d\n", + data_len); + ret = -EMSGSIZE; + goto out; + } + + data = kmalloc(data_len, GFP_KERNEL); + if (!data) { + ret = -ENOMEM; + goto out; + } + + ret = of_property_read_u8_array(node, "qcom,ath10k-calibration-data", + data, data_len); + if (ret) { + ath10k_warn(ar, "failed to read calibration data from DT: %d\n", + ret); + goto out_free; + } + + ret = ath10k_download_board_data(ar, data, data_len); + if (ret) { + ath10k_warn(ar, "failed to download calibration data from Device Tree: %d\n", + ret); + goto out_free; + } + + ret = 0; + +out_free: + kfree(data); + +out: + return ret; +} + static int ath10k_download_and_run_otp(struct ath10k *ar) { u32 result, address = ar->hw_params.patch_load_addr; @@ -662,7 +720,17 @@ static int ath10k_download_cal_data(struct ath10k *ar) } ath10k_dbg(ar, ATH10K_DBG_BOOT, - "boot did not find a calibration file, try OTP next: %d\n", + "boot did not find a calibration file, try DT next: %d\n", + ret); + + ret = ath10k_download_cal_dt(ar); + if (ret == 0) { + ar->cal_mode = ATH10K_CAL_MODE_DT; + goto done; + } + + ath10k_dbg(ar, ATH10K_DBG_BOOT, + "boot did not find DT entry, try OTP next: %d\n", ret); ret = ath10k_download_and_run_otp(ar); diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index 4a294987736c..2dd1bb05a3fc 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -400,6 +400,7 @@ enum ath10k_dev_flags { enum ath10k_cal_mode { ATH10K_CAL_MODE_FILE, ATH10K_CAL_MODE_OTP, + ATH10K_CAL_MODE_DT, }; static inline const char *ath10k_cal_mode_str(enum ath10k_cal_mode mode) @@ -409,6 +410,8 @@ static inline const char *ath10k_cal_mode_str(enum ath10k_cal_mode mode) return "file"; case ATH10K_CAL_MODE_OTP: return "otp"; + case ATH10K_CAL_MODE_DT: + return "dt"; } return "unknown"; _______________________________________________ ath10k mailing list ath10k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath10k ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] ath10k: device tree support 2014-11-27 12:00 ` Kalle Valo @ 2014-11-27 12:04 ` Kalle Valo -1 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:04 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik Kalle Valo <kvalo@qca.qualcomm.com> writes: > here's ath10k device tree support which Toshi and me have been working > on. Please review. > > Device tree maintainers: please review the bindings document > carefully, this is the first time I have written one. Argh, I again used the old devicetree mailing list address. Please ignore this one, I'll resend using the correct address. -- Kalle Valo ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] ath10k: device tree support @ 2014-11-27 12:04 ` Kalle Valo 0 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2014-11-27 12:04 UTC (permalink / raw) To: ath10k; +Cc: devicetree-discuss, linux-wireless, toshik Kalle Valo <kvalo@qca.qualcomm.com> writes: > here's ath10k device tree support which Toshi and me have been working > on. Please review. > > Device tree maintainers: please review the bindings document > carefully, this is the first time I have written one. Argh, I again used the old devicetree mailing list address. Please ignore this one, I'll resend using the correct address. -- Kalle Valo _______________________________________________ ath10k mailing list ath10k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath10k ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-11-27 12:05 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-11-27 12:00 [PATCH v3 0/2] ath10k: device tree support Kalle Valo 2014-11-27 12:00 ` Kalle Valo 2014-11-27 12:00 ` [PATCH v3 1/2] dt: bindings: add ath10k wireless device Kalle Valo 2014-11-27 12:00 ` Kalle Valo 2014-11-27 12:00 ` [PATCH v3 2/2] ath10k: read calibration data from Device Tree Kalle Valo 2014-11-27 12:00 ` Kalle Valo 2014-11-27 12:04 ` [PATCH v3 0/2] ath10k: device tree support Kalle Valo 2014-11-27 12:04 ` Kalle Valo
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.