123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- From 5ed5b5e9614fa5b02da699ab565af76c7e63d64d Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <jogo@openwrt.org>
- Date: Mon, 7 Jan 2013 17:45:39 +0100
- Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
- ---
- arch/mips/bcm63xx/Makefile | 2 +-
- arch/mips/bcm63xx/boards/board_bcm963xx.c | 17 ++++-
- arch/mips/bcm63xx/dev-flash.c | 2 +-
- arch/mips/bcm63xx/pci-rt2x00-fixup.c | 71 ++++++++++++++++++++
- .../include/asm/mach-bcm63xx/bcm63xx_dev_flash.h | 2 +-
- .../mips/include/asm/mach-bcm63xx/board_bcm963xx.h | 9 ++-
- .../include/asm/mach-bcm63xx/pci_rt2x00_fixup.h | 9 +++
- 7 files changed, 104 insertions(+), 8 deletions(-)
- create mode 100644 arch/mips/bcm63xx/pci-rt2x00-fixup.c
- create mode 100644 arch/mips/include/asm/mach-bcm63xx/pci_rt2x00_fixup.h
- --- a/arch/mips/bcm63xx/Makefile
- +++ b/arch/mips/bcm63xx/Makefile
- @@ -2,7 +2,7 @@ obj-y += clk.o cpu.o cs.o gpio.o irq.o
- setup.o timer.o dev-dsp.o dev-enet.o dev-flash.o \
- dev-pcmcia.o dev-rng.o dev-spi.o dev-hsspi.o dev-uart.o \
- dev-wdt.o dev-usb-ehci.o dev-usb-ohci.o dev-usb-usbd.o \
- - pci-ath9k-fixup.o usb-common.o sprom.o
- + pci-ath9k-fixup.o pci-rt2x00-fixup.o usb-common.o sprom.o
- obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
-
- obj-y += boards/
- --- a/arch/mips/bcm63xx/boards/board_common.c
- +++ b/arch/mips/bcm63xx/boards/board_common.c
- @@ -36,6 +36,7 @@
- #include <bcm63xx_dev_usb_usbd.h>
- #include <board_bcm963xx.h>
- #include <pci_ath9k_fixup.h>
- +#include <pci_rt2x00_fixup.h>
-
- #include "board_common.h"
-
- @@ -267,9 +268,19 @@ int __init board_register_devices(void)
- }
-
- /* register any fixups */
- - for (i = 0; i < board.has_caldata; i++)
- - pci_enable_ath9k_fixup(board.caldata[i].slot, board.caldata[i].caldata_offset,
- - board.caldata[i].endian_check, board.caldata[i].led_pin);
- + for (i = 0; i < board.has_caldata; i++) {
- + switch (board.caldata[i].vendor) {
- + case PCI_VENDOR_ID_ATHEROS:
- + pci_enable_ath9k_fixup(board.caldata[i].slot,
- + board.caldata[i].caldata_offset, board.caldata[i].endian_check,
- + board.caldata[i].led_pin);
- + break;
- + case PCI_VENDOR_ID_RALINK:
- + pci_enable_rt2x00_fixup(board.caldata[i].slot,
- + board.caldata[i].eeprom);
- + break;
- + }
- + }
-
- return 0;
- }
- --- a/arch/mips/bcm63xx/dev-flash.c
- +++ b/arch/mips/bcm63xx/dev-flash.c
- @@ -215,7 +215,7 @@ void __init bcm63xx_flash_detect(void)
- }
- }
-
- -int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata)
- +int __init bcm63xx_flash_register(int num_caldata, struct bcm63xx_caldata *caldata)
- {
- u32 val;
- unsigned int i;
- --- /dev/null
- +++ b/arch/mips/bcm63xx/pci-rt2x00-fixup.c
- @@ -0,0 +1,72 @@
- +/*
- + * Broadcom BCM63XX RT2x00 EEPROM fixup helper.
- + *
- + * Copyright (C) 2012 Álvaro Fernández Rojas <noltari@gmail.com>
- + *
- + * Based on
- + *
- + * Broadcom BCM63XX Ath9k EEPROM fixup helper.
- + *
- + * Copyright (C) 2012 Jonas Gorski <jonas.gorski@gmail.com>
- + *
- + * This program is free software; you can redistribute it and/or modify it
- + * under the terms of the GNU General Public License version 2 as published
- + * by the Free Software Foundation.
- + */
- +
- +#include <linux/if_ether.h>
- +#include <linux/pci.h>
- +#include <linux/platform_device.h>
- +#include <linux/rt2x00_platform.h>
- +
- +#include <bcm63xx_nvram.h>
- +#include <pci_rt2x00_fixup.h>
- +
- +struct rt2x00_fixup {
- + unsigned slot;
- + u8 mac[ETH_ALEN];
- + struct rt2x00_platform_data pdata;
- +};
- +
- +static int rt2x00_num_fixups;
- +static struct rt2x00_fixup rt2x00_fixups[2] = {
- + {
- + .slot = 255,
- + },
- + {
- + .slot = 255,
- + },
- +};
- +
- +static void rt2x00_pci_fixup(struct pci_dev *dev)
- +{
- + unsigned i;
- + struct rt2x00_platform_data *pdata = NULL;
- +
- + for (i = 0; i < rt2x00_num_fixups; i++) {
- + if (rt2x00_fixups[i].slot != PCI_SLOT(dev->devfn))
- + continue;
- +
- + pdata = &rt2x00_fixups[i].pdata;
- + break;
- + }
- +
- + dev->dev.platform_data = pdata;
- +}
- +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_RALINK, PCI_ANY_ID, rt2x00_pci_fixup);
- +
- +void __init pci_enable_rt2x00_fixup(unsigned slot, char* eeprom)
- +{
- + if (rt2x00_num_fixups >= ARRAY_SIZE(rt2x00_fixups))
- + return;
- +
- + rt2x00_fixups[rt2x00_num_fixups].slot = slot;
- + rt2x00_fixups[rt2x00_num_fixups].pdata.eeprom_file_name = kstrdup(eeprom, GFP_KERNEL);
- +
- + if (bcm63xx_nvram_get_mac_address(rt2x00_fixups[rt2x00_num_fixups].mac))
- + return;
- +
- + rt2x00_fixups[rt2x00_num_fixups].pdata.mac_address = rt2x00_fixups[rt2x00_num_fixups].mac;
- + rt2x00_num_fixups++;
- +}
- +
- --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
- +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
- @@ -13,7 +13,7 @@ void bcm63xx_flash_detect(void);
-
- void bcm63xx_flash_force_phys_base_address(u32 start, u32 end);
-
- -int __init bcm63xx_flash_register(int num_caldata, struct ath9k_caldata *caldata);
- +int __init bcm63xx_flash_register(int num_caldata, struct bcm63xx_caldata *caldata);
-
- int bcm63xx_flash_get_type(void);
-
- --- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
- +++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
- @@ -10,6 +10,7 @@
- #include <bcm63xx_dev_dsp.h>
- #include <bcm63xx_fallback_sprom.h>
- #include <pci_ath9k_fixup.h>
- +#include <pci_rt2x00_fixup.h>
-
- /*
- * flash mapping
- @@ -17,11 +18,15 @@
- #define BCM963XX_CFE_VERSION_OFFSET 0x570
- #define BCM963XX_NVRAM_OFFSET 0x580
-
- -struct ath9k_caldata {
- +struct bcm63xx_caldata {
- + unsigned int vendor;
- unsigned int slot;
- u32 caldata_offset;
- + /* Atheros */
- unsigned int endian_check:1;
- int led_pin;
- + /* Ralink */
- + char* eeprom;
- };
-
- /*
- @@ -47,7 +52,7 @@ struct board_info {
- unsigned int has_caldata:2;
-
- /* wifi calibration data config */
- - struct ath9k_caldata caldata[2];
- + struct bcm63xx_caldata caldata[2];
-
- /* ethernet config */
- struct bcm63xx_enet_platform_data enet0;
- --- /dev/null
- +++ b/arch/mips/include/asm/mach-bcm63xx/pci_rt2x00_fixup.h
- @@ -0,0 +1,9 @@
- +#ifndef _PCI_RT2X00_FIXUP
- +#define _PCI_RT2X00_FIXUP
- +
- +#define PCI_VENDOR_ID_RALINK 0x1814
- +
- +void pci_enable_rt2x00_fixup(unsigned slot, char* eeprom) __init;
- +
- +#endif /* _PCI_RT2X00_FIXUP */
- +
|