--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h @@ -78,6 +78,9 @@ struct rt2800_ops { int (*drv_init_registers)(struct rt2x00_dev *rt2x00dev); __le32 *(*drv_get_txwi)(struct queue_entry *entry); unsigned int (*drv_get_dma_done)(struct data_queue *queue); + int (*hw_get_chippkg)(void); + int (*hw_get_chipver)(void); + int (*hw_get_chipeco)(void); }; static inline u32 rt2800_register_read(struct rt2x00_dev *rt2x00dev, @@ -195,6 +198,27 @@ static inline unsigned int rt2800_drv_ge return rt2800ops->drv_get_dma_done(queue); } +static inline int rt2800_hw_get_chippkg(struct rt2x00_dev *rt2x00dev) +{ + const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv; + + return rt2800ops->hw_get_chippkg(); +} + +static inline int rt2800_hw_get_chipver(struct rt2x00_dev *rt2x00dev) +{ + const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv; + + return rt2800ops->hw_get_chipver(); +} + +static inline int rt2800_hw_get_chipeco(struct rt2x00_dev *rt2x00dev) +{ + const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv; + + return rt2800ops->hw_get_chipeco(); +} + void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev, const u8 command, const u8 token, const u8 arg0, const u8 arg1); --- a/drivers/net/wireless/ralink/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2800pci.c @@ -286,6 +286,10 @@ static int rt2800pci_read_eeprom(struct return retval; } +static int rt2800pci_get_chippkg(void) { return 0; } +static int rt2800pci_get_chipver(void) { return 0; } +static int rt2800pci_get_chipeco(void) { return 0; } + static const struct ieee80211_ops rt2800pci_mac80211_ops = { .tx = rt2x00mac_tx, .start = rt2x00mac_start, @@ -328,6 +332,9 @@ static const struct rt2800_ops rt2800pci .drv_init_registers = rt2800mmio_init_registers, .drv_get_txwi = rt2800mmio_get_txwi, .drv_get_dma_done = rt2800mmio_get_dma_done, + .hw_get_chippkg = rt2800pci_get_chippkg, + .hw_get_chipver = rt2800pci_get_chipver, + .hw_get_chipeco = rt2800pci_get_chipeco, }; static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = { --- a/drivers/net/wireless/ralink/rt2x00/rt2800soc.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2800soc.c @@ -27,6 +27,12 @@ #include "rt2800lib.h" #include "rt2800mmio.h" +/* Needed to probe CHIP_VER register on MT7620 */ +#ifdef CONFIG_SOC_MT7620 +#include +#include +#endif + /* Allow hardware encryption to be disabled. */ static bool modparam_nohwcrypt; module_param_named(nohwcrypt, modparam_nohwcrypt, bool, 0444); @@ -118,6 +124,27 @@ static int rt2800soc_write_firmware(stru return 0; } +#ifdef CONFIG_SOC_MT7620 +static int rt2800soc_get_chippkg(void) +{ + return mt7620_get_pkg(); +} + +static int rt2800soc_get_chipver(void) +{ + return mt7620_get_chipver(); +} + +static int rt2800soc_get_chipeco(void) +{ + return mt7620_get_eco(); +} +#else +static int rt2800soc_get_chippkg(void) { return 0; } +static int rt2800soc_get_chipver(void) { return 0; } +static int rt2800soc_get_chipeco(void) { return 0; } +#endif + static const struct ieee80211_ops rt2800soc_mac80211_ops = { .tx = rt2x00mac_tx, .start = rt2x00mac_start, @@ -159,6 +186,9 @@ static const struct rt2800_ops rt2800soc .drv_init_registers = rt2800mmio_init_registers, .drv_get_txwi = rt2800mmio_get_txwi, .drv_get_dma_done = rt2800mmio_get_dma_done, + .hw_get_chippkg = rt2800soc_get_chippkg, + .hw_get_chipver = rt2800soc_get_chipver, + .hw_get_chipeco = rt2800soc_get_chipeco, }; static const struct rt2x00lib_ops rt2800soc_rt2x00_ops = { --- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c @@ -628,6 +628,10 @@ static int rt2800usb_probe_hw(struct rt2 return 0; } +static int rt2800usb_get_chippkg(void) { return 0; } +static int rt2800usb_get_chipver(void) { return 0; } +static int rt2800usb_get_chipeco(void) { return 0; } + static const struct ieee80211_ops rt2800usb_mac80211_ops = { .tx = rt2x00mac_tx, .start = rt2x00mac_start, @@ -671,6 +675,9 @@ static const struct rt2800_ops rt2800usb .drv_init_registers = rt2800usb_init_registers, .drv_get_txwi = rt2800usb_get_txwi, .drv_get_dma_done = rt2800usb_get_dma_done, + .hw_get_chippkg = rt2800usb_get_chippkg, + .hw_get_chipver = rt2800usb_get_chipver, + .hw_get_chipeco = rt2800usb_get_chipeco, }; static const struct rt2x00lib_ops rt2800usb_rt2x00_ops = {