@ -16,7 +16,7 @@
static const struct platform_device_id ath9k_platform_id_table[] = {
{
@@ -69,6 +77,2 35 @@ static const struct ath_bus_ops ath_ahb_
@@ -69,6 +77,2 42 @@ static const struct ath_bus_ops ath_ahb_
.eeprom_read = ath_ahb_eeprom_read,
};
@ -232,7 +232,14 @@
+ pdata->external_reset = data->wmac_reset;
+ }
+
+ if (data->bootstrap_reg && data->bootstrap_ref) {
+ if (data->dev_id == AR9300_DEVID_AR953X) {
+ /*
+ * QCA953x only supports 25MHz refclk.
+ * Some vendors have an invalid bootstrap option
+ * set, which would break the WMAC here.
+ */
+ pdata->is_clk_25mhz = true;
+ } else if (data->bootstrap_reg && data->bootstrap_ref) {
+ u32 t = ath79_reset_rr(data->bootstrap_reg);
+ if (t & data->bootstrap_ref)
+ pdata->is_clk_25mhz = false;
@ -252,7 +259,7 @@
static int ath_ahb_probe(struct platform_device *pdev)
{
void __iomem *mem;
@@ -80,6 +3 17 ,17 @@ static int ath_ahb_probe(struct platform
@@ -80,6 +3 24 ,17 @@ static int ath_ahb_probe(struct platform
int ret = 0;
struct ath_hw *ah;
char hw_name[64];
@ -270,7 +277,7 @@
if (!dev_get_platdata(&pdev->dev)) {
dev_err(&pdev->dev, "no platform data specified\n");
@@ -122,13 +37 0 ,16 @@ static int ath_ahb_probe(struct platform
@@ -122,13 +37 7 ,16 @@ static int ath_ahb_probe(struct platform
sc->mem = mem;
sc->irq = irq;
@ -288,7 +295,7 @@
if (ret) {
dev_err(&pdev->dev, "failed to initialize device\n");
goto err_irq;
@@ -159,6 +41 0 ,9 @@ static int ath_ahb_remove(struct platfor
@@ -159,6 +41 7 ,9 @@ static int ath_ahb_remove(struct platfor
free_irq(sc->irq, sc);
ieee80211_free_hw(sc->hw);
}
@ -298,7 +305,7 @@
return 0;
}
@@ -168,6 +42 2 ,9 @@ static struct platform_driver ath_ahb_dr
@@ -168,6 +42 9 ,9 @@ static struct platform_driver ath_ahb_dr
.remove = ath_ahb_remove,
.driver = {
.name = "ath9k",