Hi

Looks good but something wrong with if-logic (see below)


13.11.2012, 01:15, "Daniel Golle" <dgo...@allnet.de>:
> Check if Xtal=20MHz is selected in SYSCFG0 reg and make that information
> available to rt2x00 via platform_data.
>
> 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..7d85597
> --- /dev/null
> +++ b/package/mac80211/patches/623-rt2x00-rf_vals-rt3352-xtal20.patch
> @@ -0,0 +1,95 @@
> +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,6 +5067,27 @@ 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;
> +@@ -5144,7 +5165,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 +5172,12 @@ 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;
> ++ if (spec->xtal_freq == XTAL_FREQ_20MHZ)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> ++ spec->channels = rf_vals_3x;
> ++ else
> ++ spec->channels = rf_vals_xtal20mhz_3x;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
I think you meen == XTAL_FREQ_40MHZ

> + } 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/drivers/net/wireless/rt2x00/rt2x00.h
> +===================================================================
> +--- compat-wireless-2012-09-07.orig/drivers/net/wireless/rt2x00/rt2x00.h
> ++++ compat-wireless-2012-09-07/drivers/net/wireless/rt2x00/rt2x00.h
> +@@ -432,6 +432,10 @@ struct hw_mode_spec {
> + #define SUPPORT_RATE_CCK 0x00000001
> + #define SUPPORT_RATE_OFDM 0x00000002
> +
> ++ unsigned int xtal_freq;
> ++#define XTAL_FREQ_40MHZ 0x0
> ++#define XTAL_FREQ_20MHZ 0x1
> ++
> + unsigned int num_channels;
> + const struct rf_channel *channels;
> + const struct channel_info *channels_info;
> +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 xtal20;
> + };
> +
> + #endif /* _RT2X00_PLATFORM_H */
> +Index: compat-wireless-2012-09-07/drivers/net/wireless/rt2x00/rt2x00dev.c
> +===================================================================
> +--- compat-wireless-2012-09-07.orig/drivers/net/wireless/rt2x00/rt2x00dev.c
> ++++ compat-wireless-2012-09-07/drivers/net/wireless/rt2x00/rt2x00dev.c
> +@@ -854,6 +854,10 @@ static int rt2x00lib_probe_hw_modes(stru
> + spec->supported_bands &= ~SUPPORT_BAND_2GHZ;
> + if (pdata->disable_5ghz)
> + spec->supported_bands &= ~SUPPORT_BAND_5GHZ;
> ++ if (pdata->xtal20)
> ++ spec->xtal_freq = XTAL_FREQ_20MHZ;
> ++ else
> ++ spec->xtal_freq = XTAL_FREQ_40MHZ;
> + }
> +
> + if ((spec->supported_bands & SUPPORT_BAND_BOTH) == 0) {
> diff --git a/target/linux/generic/files/include/linux/rt2x00_platform.h 
> b/target/linux/generic/files/include/linux/rt2x00_platform.h
> index e10377e..3c7c7a2 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 xtal20;
>  };
>
>  #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..98bdb97 100644
> --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c
> +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c
> @@ -215,7 +215,15 @@ static struct platform_device rt305x_wifi_device = {
>
>  void __init rt305x_register_wifi(void)
>  {
> + u32 t;
>          rt305x_wifi_data.eeprom_file_name = "RT305X.eeprom";
> +
> + 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.xtal20 = 1;
> + }
>          platform_device_register(&rt305x_wifi_device);
>  }
>
> --
> 1.8.0


Good luck!

---
serge
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to