diff options
author | Imre Kaloz <kaloz@openwrt.org> | 2013-11-27 12:40:07 +0000 |
---|---|---|
committer | Imre Kaloz <kaloz@openwrt.org> | 2013-11-27 12:40:07 +0000 |
commit | 620833b3a1ac621e93dc747def1e1f0bb97cb753 (patch) | |
tree | 577c536e003bfaa4eff77a323c06e0c2ecaac7ec /package/kernel/mac80211/patches/907-wlcore-wl12xx-check-if-we-got-correct-clock-data-from-DT.patch | |
parent | 94cdb9986f60a1fbcd78385bf791b7d87b43e24d (diff) | |
download | master-187ad058-620833b3a1ac621e93dc747def1e1f0bb97cb753.tar.gz master-187ad058-620833b3a1ac621e93dc747def1e1f0bb97cb753.tar.bz2 master-187ad058-620833b3a1ac621e93dc747def1e1f0bb97cb753.zip |
add device tree based initialization to wl12xx
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38933 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/kernel/mac80211/patches/907-wlcore-wl12xx-check-if-we-got-correct-clock-data-from-DT.patch')
-rw-r--r-- | package/kernel/mac80211/patches/907-wlcore-wl12xx-check-if-we-got-correct-clock-data-from-DT.patch | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/907-wlcore-wl12xx-check-if-we-got-correct-clock-data-from-DT.patch b/package/kernel/mac80211/patches/907-wlcore-wl12xx-check-if-we-got-correct-clock-data-from-DT.patch new file mode 100644 index 0000000000..6b09177ded --- /dev/null +++ b/package/kernel/mac80211/patches/907-wlcore-wl12xx-check-if-we-got-correct-clock-data-from-DT.patch @@ -0,0 +1,96 @@ +The fref and the tcxo clocks settings are optional in some platforms. +WiLink8 doesn't need either, so we don't check the values. WiLink 6 +only needs the fref clock, so we check that it is valid or return with +an error. WiLink7 needs both clocks, if either is not available we +return with an error. + +Signed-off-by: Luciano Coelho <coelho@ti.com> +Reviewed-by: Felipe Balbi <balbi@ti.com> + +--- a/drivers/net/wireless/ti/wl12xx/main.c ++++ b/drivers/net/wireless/ti/wl12xx/main.c +@@ -930,6 +930,11 @@ static int wl128x_boot_clk(struct wl1271 + u16 sys_clk_cfg; + int ret; + ++ if ((priv->ref_clock < 0) || (priv->tcxo_clock < 0)) { ++ wl1271_error("Missing fref and/or tcxo clock settings\n"); ++ return -EINVAL; ++ } ++ + /* For XTAL-only modes, FREF will be used after switching from TCXO */ + if (priv->ref_clock == WL12XX_REFCLOCK_26_XTAL || + priv->ref_clock == WL12XX_REFCLOCK_38_XTAL) { +@@ -979,6 +984,11 @@ static int wl127x_boot_clk(struct wl1271 + u32 clk; + int ret; + ++ if (priv->ref_clock < 0) { ++ wl1271_error("Missing fref clock settings\n"); ++ return -EINVAL; ++ } ++ + if (WL127X_PG_GET_MAJOR(wl->hw_pg_ver) < 3) + wl->quirks |= WLCORE_QUIRK_END_OF_TRANSACTION; + +@@ -1768,7 +1778,7 @@ static int wl12xx_setup(struct wl1271 *w + wlcore_set_ht_cap(wl, IEEE80211_BAND_5GHZ, &wl12xx_ht_cap); + wl12xx_conf_init(wl); + +- if (!fref_param) { ++ if (!fref_param && (pdata->ref_clock_freq > 0)) { + priv->ref_clock = wl12xx_get_clock_idx(wl12xx_refclock_table, + pdata->ref_clock_freq, + pdata->ref_clock_xtal); +@@ -1779,6 +1789,8 @@ static int wl12xx_setup(struct wl1271 *w + + return priv->ref_clock; + } ++ } else if (!fref_param) { ++ priv->ref_clock = -EINVAL; + } else { + if (!strcmp(fref_param, "19.2")) + priv->ref_clock = WL12XX_REFCLOCK_19; +@@ -1796,7 +1808,7 @@ static int wl12xx_setup(struct wl1271 *w + wl1271_error("Invalid fref parameter %s", fref_param); + } + +- if (!tcxo_param) { ++ if (!fref_param && (pdata->tcxo_clock_freq > 0)) { + priv->tcxo_clock = wl12xx_get_clock_idx(wl12xx_tcxoclock_table, + pdata->tcxo_clock_freq, + true); +@@ -1806,7 +1818,9 @@ static int wl12xx_setup(struct wl1271 *w + + return priv->tcxo_clock; + } +- } else { ++ } else if (!fref_param) { ++ priv->tcxo_clock = -EINVAL; ++ }else { + if (!strcmp(tcxo_param, "19.2")) + priv->tcxo_clock = WL12XX_TCXOCLOCK_19_2; + else if (!strcmp(tcxo_param, "26")) +--- a/drivers/net/wireless/ti/wlcore/sdio.c ++++ b/drivers/net/wireless/ti/wlcore/sdio.c +@@ -252,20 +252,16 @@ static struct wl12xx_platform_data *wlco + for_each_matching_node(clock_node, wlcore_sdio_of_clk_match_table) + of_fixed_clk_setup(clock_node); + +- /* TODO: make sure we have this when needed (ie. for WL6 and WL7) */ + glue->refclock = of_clk_get_by_name(np, "refclock"); + if (IS_ERR(glue->refclock)) { +- dev_err(dev, "couldn't find refclock on the device tree\n"); + glue->refclock = NULL; + } else { + clk_prepare_enable(glue->refclock); + pdata->ref_clock_freq = clk_get_rate(glue->refclock); + } + +- /* TODO: make sure we have this when needed (ie. for WL7) */ + glue->tcxoclock = of_clk_get_by_name(np, "tcxoclock"); + if (IS_ERR(glue->tcxoclock)) { +- dev_err(dev, "couldn't find tcxoclock on the device tree\n"); + glue->tcxoclock = NULL; + } else { + clk_prepare_enable(glue->tcxoclock); |