Accessing rt2x00_platform_data directly in rt2800lib is not very beautiful, but should do the job.
Signed-off-by: Daniel Golle <dgo...@allnet.de> create mode 100644 package/mac80211/patches/623-rt2x00-rf_vals-rt3352-xtal20.patch diff --git a/package/mac80211/patches/623-rt2x00-rf_vals-rt3352-xtal20.patch b/package/mac80211/patches/623-rt2x00-rf_vals-rt3352-xtal20.patch new file mode 100644 index 0000000..efeb89e --- /dev/null +++ b/package/mac80211/patches/623-rt2x00-rf_vals-rt3352-xtal20.patch @@ -0,0 +1,73 @@ +Index: compat-wireless-2012-09-07/drivers/net/wireless/rt2x00/rt2800lib.c +=================================================================== +--- compat-wireless-2012-09-07.orig/drivers/net/wireless/rt2x00/rt2800lib.c ++++ compat-wireless-2012-09-07/drivers/net/wireless/rt2x00/rt2800lib.c +@@ -5067,10 +5067,32 @@ static const struct rf_channel rf_vals_3 + {173, 0x61, 0, 9}, + }; + ++/* ++ * RF value list for rt3xxx with Xtal20MHz ++ * Supports: 2.4 GHz (all) (RF3322) ++ */ ++static const struct rf_channel rf_vals_xtal20mhz_3x[] = { ++ {1, 0xE2, 2, 0x14}, ++ {2, 0xE3, 2, 0x14}, ++ {3, 0xE4, 2, 0x14}, ++ {4, 0xE5, 2, 0x14}, ++ {5, 0xE6, 2, 0x14}, ++ {6, 0xE7, 2, 0x14}, ++ {7, 0xE8, 2, 0x14}, ++ {8, 0xE9, 2, 0x14}, ++ {9, 0xEA, 2, 0x14}, ++ {10, 0xEB, 2, 0x14}, ++ {11, 0xEC, 2, 0x14}, ++ {12, 0xED, 2, 0x14}, ++ {13, 0xEE, 2, 0x14}, ++ {14, 0xF0, 2, 0x18}, ++}; ++ + static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) + { + struct hw_mode_spec *spec = &rt2x00dev->spec; + struct channel_info *info; ++ struct rt2x00_platform_data *pdata; + char *default_power1; + char *default_power2; + unsigned int i; +@@ -5144,7 +5166,6 @@ static int rt2800_probe_hw_mode(struct r + rt2x00_rf(rt2x00dev, RF3022) || + rt2x00_rf(rt2x00dev, RF3290) || + rt2x00_rf(rt2x00dev, RF3320) || +- rt2x00_rf(rt2x00dev, RF3322) || + rt2x00_rf(rt2x00dev, RF5360) || + rt2x00_rf(rt2x00dev, RF5370) || + rt2x00_rf(rt2x00dev, RF5372) || +@@ -5152,6 +5173,15 @@ static int rt2800_probe_hw_mode(struct r + rt2x00_rf(rt2x00dev, RF5392)) { + spec->num_channels = 14; + spec->channels = rf_vals_3x; ++ } else if (rt2x00_rf(rt2x00dev, RF3322)) { ++ spec->num_channels = 14; ++ spec->channels = rf_vals_3x; ++ if (rt2x00_is_soc(rt2x00dev) && rt2x00dev->dev->platform_data) { ++ pdata = rt2x00dev->dev->platform_data; ++ if (pdata->is_clk_20mhz) ++ spec->channels = rf_vals_xtal20mhz_3x; ++ } ++ + } else if (rt2x00_rf(rt2x00dev, RF3052)) { + spec->supported_bands |= SUPPORT_BAND_5GHZ; + spec->num_channels = ARRAY_SIZE(rf_vals_3x); +Index: compat-wireless-2012-09-07/include/linux/rt2x00_platform.h +=================================================================== +--- compat-wireless-2012-09-07.orig/include/linux/rt2x00_platform.h ++++ compat-wireless-2012-09-07/include/linux/rt2x00_platform.h +@@ -18,6 +18,7 @@ struct rt2x00_platform_data { + + int disable_2ghz; + int disable_5ghz; ++ int is_clk_20mhz; + }; + + #endif /* _RT2X00_PLATFORM_H */ diff --git a/target/linux/generic/files/include/linux/rt2x00_platform.h b/target/linux/generic/files/include/linux/rt2x00_platform.h index e10377e..d79be84 100644 --- a/target/linux/generic/files/include/linux/rt2x00_platform.h +++ b/target/linux/generic/files/include/linux/rt2x00_platform.h @@ -18,6 +18,7 @@ struct rt2x00_platform_data { int disable_2ghz; int disable_5ghz; + int is_clk_20mhz; }; #endif /* _RT2X00_PLATFORM_H */ diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_regs.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_regs.h index 949232d..81c0a44 100644 --- a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_regs.h +++ b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_regs.h @@ -110,6 +110,7 @@ #define RT5350_SYSCFG0_DRAM_SIZE_16M 2 #define RT5350_SYSCFG0_DRAM_SIZE_32M 3 #define RT5350_SYSCFG0_DRAM_SIZE_64M 4 +#define RT3352_SYSCFG0_XTAL_SEL BIT(20) #define RT3352_SYSCFG1_USB0_HOST_MODE BIT(10) diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c index 92ae56d..92d7b73 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c @@ -215,6 +215,15 @@ static struct platform_device rt305x_wifi_device = { void __init rt305x_register_wifi(void) { + u32 t; + + if (soc_is_rt3352() || soc_is_rt5350()) { + t = rt305x_sysc_rr(SYSC_REG_SYSTEM_CONFIG); + t &= RT3352_SYSCFG0_XTAL_SEL; + if (!t) + rt305x_wifi_data.is_clk_20mhz = 1; + } + rt305x_wifi_data.eeprom_file_name = "RT305X.eeprom"; platform_device_register(&rt305x_wifi_device); } -- 1.8.0
pgpPVKHrWBHjt.pgp
Description: PGP signature
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel