source: trunk/target/linux/brcm63xx/patches-3.0/441-board-NB4.patch @ 27192

Last change on this file since 27192 was 27192, checked in by florian, 5 years ago

bcm63xx: Add support for Linux 3.0-rc3

Signed-off-by: Jonas Gorski <jonas.gorski+openwrt@…>

File size: 9.8 KB
  • arch/mips/bcm63xx/boards/board_bcm963xx.c

    a b  
    1717#include <linux/ssb/ssb.h> 
    1818#include <linux/gpio_buttons.h> 
    1919#include <linux/input.h> 
     20#include <linux/spi/spi.h> 
     21#include <linux/spi/spi_gpio.h> 
     22#include <linux/spi/74x164.h> 
    2023#include <asm/addrspace.h> 
    2124#include <bcm63xx_board.h> 
    2225#include <bcm63xx_cpu.h> 
     
    3942#define CFE_OFFSET_64K          0x10000 
    4043#define CFE_OFFSET_128K         0x20000 
    4144 
     45#define NB4_PID_OFFSET          0xff80 
     46#define NB4_74X164_GPIO_BASE    64 
     47#define NB4_SPI_GPIO_MOSI       7 
     48#define NB4_SPI_GPIO_CLK        6 
     49#define NB4_74HC64_GPIO(X)      (NB4_74X164_GPIO_BASE + (X)) 
     50 
    4251static struct bcm963xx_nvram nvram; 
    4352static unsigned int mac_addr_used; 
    4453static struct board_info board; 
    static struct board_info __initdata boar 
    780789 
    781790        .has_ohci0                      = 1, 
    782791}; 
     792 
     793struct spi_gpio_platform_data nb4_spi_gpio_data = { 
     794        .sck            = NB4_SPI_GPIO_CLK, 
     795        .mosi           = NB4_SPI_GPIO_MOSI, 
     796        .miso           = SPI_GPIO_NO_MISO, 
     797        .num_chipselect = 1, 
     798}; 
     799 
     800 
     801static struct platform_device nb4_spi_gpio = { 
     802        .name = "spi_gpio", 
     803        .id   = 1, 
     804        .dev = { 
     805                .platform_data = &nb4_spi_gpio_data, 
     806        }, 
     807}; 
     808 
     809static struct platform_device * __initdata nb4_devices[] = { 
     810        &nb4_spi_gpio, 
     811}; 
     812 
     813const struct gen_74x164_chip_platform_data nb4_74x164_platform_data = { 
     814        .base = NB4_74X164_GPIO_BASE 
     815}; 
     816 
     817static struct spi_board_info nb4_spi_devices[] = { 
     818        { 
     819                .modalias = "74x164", 
     820                .max_speed_hz = 781000, 
     821                .bus_num = 1, 
     822                .controller_data = (void *) SPI_GPIO_NO_CHIPSELECT, 
     823                .mode = SPI_MODE_0, 
     824                .platform_data = &nb4_74x164_platform_data 
     825        } 
     826}; 
     827 
     828static struct board_info __initdata board_nb4_ser_r0 = { 
     829        .name                           = "NB4-SER-r0", 
     830        .expected_cpu_id                = 0x6358, 
     831 
     832        .has_uart0                      = 1, 
     833        .has_enet0                      = 1, 
     834        .has_enet1                      = 1, 
     835        .has_pci                        = 1, 
     836 
     837        .enet0 = { 
     838                .has_phy                = 1, 
     839                .use_internal_phy       = 1, 
     840        }, 
     841 
     842        .enet1 = { 
     843                .force_speed_100        = 1, 
     844                .force_duplex_full      = 1, 
     845        }, 
     846 
     847 
     848        .has_ohci0 = 1, 
     849        .has_pccard = 1, 
     850        .has_ehci0 = 1, 
     851 
     852        .has_udc0                       = 1, 
     853 
     854        .leds = { 
     855                { 
     856                        .name           = "adsl", 
     857                        .gpio           = NB4_74HC64_GPIO(4), 
     858                        .active_low     = 1, 
     859                }, 
     860                { 
     861                        .name           = "traffic", 
     862                        .gpio           = 2, 
     863                        .active_low     = 1, 
     864                }, 
     865                { 
     866                        .name           = "tel", 
     867                        .gpio           = NB4_74HC64_GPIO(3), 
     868                        .active_low     = 1, 
     869                }, 
     870                { 
     871                        .name           = "tv", 
     872                        .gpio           = NB4_74HC64_GPIO(2), 
     873                        .active_low     = 1, 
     874                }, 
     875                { 
     876                        .name           = "wifi", 
     877                        .gpio           = 15, 
     878                        .active_low     = 1, 
     879                }, 
     880                { 
     881                        .name           = "alarm", 
     882                        .gpio           = NB4_74HC64_GPIO(0), 
     883                        .active_low     = 1, 
     884                }, 
     885                { 
     886                        .name           = "service:red", 
     887                        .gpio           = 29, 
     888                        .active_low     = 1, 
     889                }, 
     890                { 
     891                        .name           = "service:green", 
     892                        .gpio           = 30, 
     893                        .active_low     = 1, 
     894                }, 
     895                { 
     896                        .name           = "service:blue", 
     897                        .gpio           = 4, 
     898                        .active_low     = 1, 
     899                }, 
     900        }, 
     901        .buttons = { 
     902                { 
     903                        .desc           = "reset", 
     904                        .gpio           = 34, 
     905                        .type           = EV_KEY, 
     906                        .code           = KEY_RESTART, 
     907                        .threshold      = 3, 
     908                }, 
     909                { 
     910                        .desc           = "wps", 
     911                        .gpio           = 37, 
     912                        .type           = EV_KEY, 
     913                        .code           = KEY_WPS_BUTTON, 
     914                        .threshold      = 3, 
     915                }, 
     916        }, 
     917        .devs = nb4_devices, 
     918        .num_devs = ARRAY_SIZE(nb4_devices), 
     919        .spis = nb4_spi_devices, 
     920        .num_spis = ARRAY_SIZE(nb4_spi_devices), 
     921}; 
     922 
     923static struct board_info __initdata board_nb4_ser_r1 = { 
     924        .name                           = "NB4-SER-r1", 
     925        .expected_cpu_id                = 0x6358, 
     926 
     927        .has_uart0                      = 1, 
     928        .has_enet0                      = 1, 
     929        .has_enet1                      = 1, 
     930        .has_pci                        = 1, 
     931 
     932        .enet0 = { 
     933                .has_phy                = 1, 
     934                .use_internal_phy       = 1, 
     935        }, 
     936 
     937        .enet1 = { 
     938                .force_speed_100        = 1, 
     939                .force_duplex_full      = 1, 
     940        }, 
     941 
     942 
     943        .has_ohci0 = 1, 
     944        .has_pccard = 1, 
     945        .has_ehci0 = 1, 
     946 
     947        .has_udc0                       = 1, 
     948 
     949        .leds = { 
     950                { 
     951                        .name           = "adsl", 
     952                        .gpio           = NB4_74HC64_GPIO(4), 
     953                        .active_low     = 1, 
     954                }, 
     955                { 
     956                        .name           = "traffic", 
     957                        .gpio           = 2, 
     958                        .active_low     = 1, 
     959                }, 
     960                { 
     961                        .name           = "tel", 
     962                        .gpio           = NB4_74HC64_GPIO(3), 
     963                        .active_low     = 1, 
     964                }, 
     965                { 
     966                        .name           = "tv", 
     967                        .gpio           = NB4_74HC64_GPIO(2), 
     968                        .active_low     = 1, 
     969                }, 
     970                { 
     971                        .name           = "wifi", 
     972                        .gpio           = 15, 
     973                        .active_low     = 1, 
     974                }, 
     975                { 
     976                        .name           = "alarm", 
     977                        .gpio           = NB4_74HC64_GPIO(0), 
     978                        .active_low     = 1, 
     979                }, 
     980                { 
     981                        .name           = "service:red", 
     982                        .gpio           = 29, 
     983                        .active_low     = 1, 
     984                }, 
     985                { 
     986                        .name           = "service:green", 
     987                        .gpio           = 30, 
     988                        .active_low     = 1, 
     989                }, 
     990                { 
     991                        .name           = "service:blue", 
     992                        .gpio           = 4, 
     993                        .active_low     = 1, 
     994                }, 
     995        }, 
     996        .buttons = { 
     997                { 
     998                        .desc           = "reset", 
     999                        .gpio           = 34, 
     1000                        .type           = EV_KEY, 
     1001                        .code           = KEY_RESTART, 
     1002                        .threshold      = 3, 
     1003                }, 
     1004                { 
     1005                        .desc           = "wps", 
     1006                        .gpio           = 37, 
     1007                        .type           = EV_KEY, 
     1008                        .code           = KEY_WPS_BUTTON, 
     1009                        .threshold      = 3, 
     1010                }, 
     1011        }, 
     1012        .devs = nb4_devices, 
     1013        .num_devs = ARRAY_SIZE(nb4_devices), 
     1014        .spis = nb4_spi_devices, 
     1015        .num_spis = ARRAY_SIZE(nb4_spi_devices), 
     1016}; 
     1017 
     1018static struct board_info __initdata board_nb4_ser_r2 = { 
     1019        .name                           = "NB4-SER-r2", 
     1020        .expected_cpu_id                = 0x6358, 
     1021 
     1022        .has_uart0                      = 1, 
     1023        .has_enet0                      = 1, 
     1024        .has_enet1                      = 1, 
     1025        .has_pci                        = 1, 
     1026 
     1027        .enet0 = { 
     1028                .has_phy                = 1, 
     1029                .use_internal_phy       = 1, 
     1030        }, 
     1031 
     1032        .enet1 = { 
     1033                .force_speed_100        = 1, 
     1034                .force_duplex_full      = 1, 
     1035        }, 
     1036 
     1037 
     1038        .has_ohci0 = 1, 
     1039        .has_pccard = 1, 
     1040        .has_ehci0 = 1, 
     1041 
     1042        .leds = { 
     1043                { 
     1044                        .name           = "adsl", 
     1045                        .gpio           = NB4_74HC64_GPIO(4), 
     1046                        .active_low     = 1, 
     1047                }, 
     1048                { 
     1049                        .name           = "traffic", 
     1050                        .gpio           = 2, 
     1051                        .active_low     = 1, 
     1052                }, 
     1053                { 
     1054                        .name           = "tel", 
     1055                        .gpio           = NB4_74HC64_GPIO(3), 
     1056                        .active_low     = 1, 
     1057                }, 
     1058                { 
     1059                        .name           = "tv", 
     1060                        .gpio           = NB4_74HC64_GPIO(2), 
     1061                        .active_low     = 1, 
     1062                }, 
     1063                { 
     1064                        .name           = "wifi", 
     1065                        .gpio           = 15, 
     1066                        .active_low     = 1, 
     1067                }, 
     1068                { 
     1069                        .name           = "alarm", 
     1070                        .gpio           = NB4_74HC64_GPIO(0), 
     1071                        .active_low     = 1, 
     1072                }, 
     1073                { 
     1074                        .name           = "service:red", 
     1075                        .gpio           = 29, 
     1076                        .active_low     = 1, 
     1077                }, 
     1078                { 
     1079                        .name           = "service:green", 
     1080                        .gpio           = 30, 
     1081                        .active_low     = 1, 
     1082                }, 
     1083                { 
     1084                        .name           = "service:blue", 
     1085                        .gpio           = 4, 
     1086                        .active_low     = 1, 
     1087                }, 
     1088        }, 
     1089        .buttons = { 
     1090                { 
     1091                        .desc           = "reset", 
     1092                        .gpio           = 34, 
     1093                        .type           = EV_KEY, 
     1094                        .code           = KEY_RESTART, 
     1095                        .threshold      = 3, 
     1096                }, 
     1097                { 
     1098                        .desc           = "wps", 
     1099                        .gpio           = 37, 
     1100                        .type           = EV_KEY, 
     1101                        .code           = KEY_WPS_BUTTON, 
     1102                        .threshold      = 3, 
     1103                }, 
     1104        }, 
     1105        .devs = nb4_devices, 
     1106        .num_devs = ARRAY_SIZE(nb4_devices), 
     1107        .spis = nb4_spi_devices, 
     1108        .num_spis = ARRAY_SIZE(nb4_spi_devices), 
     1109}; 
     1110 
     1111static struct board_info __initdata board_nb4_fxc_r1 = { 
     1112        .name                           = "NB4-FXC-r1", 
     1113        .expected_cpu_id                = 0x6358, 
     1114 
     1115        .has_uart0                      = 1, 
     1116        .has_enet0                      = 1, 
     1117        .has_enet1                      = 1, 
     1118        .has_pci                        = 1, 
     1119 
     1120        .enet0 = { 
     1121                .has_phy                = 1, 
     1122                .use_internal_phy       = 1, 
     1123        }, 
     1124 
     1125        .enet1 = { 
     1126                .force_speed_100        = 1, 
     1127                .force_duplex_full      = 1, 
     1128        }, 
     1129 
     1130 
     1131        .has_ohci0 = 1, 
     1132        .has_pccard = 1, 
     1133        .has_ehci0 = 1, 
     1134 
     1135        .has_udc0                       = 1, 
     1136 
     1137        .leds = { 
     1138                { 
     1139                        .name           = "adsl", 
     1140                        .gpio           = NB4_74HC64_GPIO(4), 
     1141                        .active_low     = 1, 
     1142                }, 
     1143                { 
     1144                        .name           = "traffic", 
     1145                        .gpio           = 2, 
     1146                }, 
     1147                { 
     1148                        .name           = "tel", 
     1149                        .gpio           = NB4_74HC64_GPIO(3), 
     1150                        .active_low     = 1, 
     1151                }, 
     1152                { 
     1153                        .name           = "tv", 
     1154                        .gpio           = NB4_74HC64_GPIO(2), 
     1155                        .active_low     = 1, 
     1156                }, 
     1157                { 
     1158                        .name           = "wifi", 
     1159                        .gpio           = 15, 
     1160                }, 
     1161                { 
     1162                        .name           = "alarm", 
     1163                        .gpio           = NB4_74HC64_GPIO(0), 
     1164                        .active_low     = 1, 
     1165                }, 
     1166                { 
     1167                        .name           = "service:red", 
     1168                        .gpio           = 29, 
     1169                }, 
     1170                { 
     1171                        .name           = "service:green", 
     1172                        .gpio           = 30, 
     1173                }, 
     1174                { 
     1175                        .name           = "service:blue", 
     1176                        .gpio           = 4, 
     1177                }, 
     1178        }, 
     1179        .buttons = { 
     1180                { 
     1181                        .desc           = "reset", 
     1182                        .gpio           = 34, 
     1183                        .type           = EV_KEY, 
     1184                        .code           = KEY_RESTART, 
     1185                        .threshold      = 3, 
     1186                }, 
     1187                { 
     1188                        .desc           = "wps", 
     1189                        .gpio           = 37, 
     1190                        .type           = EV_KEY, 
     1191                        .code           = KEY_WPS_BUTTON, 
     1192                        .threshold      = 3, 
     1193                }, 
     1194        }, 
     1195        .devs = nb4_devices, 
     1196        .num_devs = ARRAY_SIZE(nb4_devices), 
     1197        .spis = nb4_spi_devices, 
     1198        .num_spis = ARRAY_SIZE(nb4_spi_devices), 
     1199}; 
     1200 
     1201static struct board_info __initdata board_nb4_fxc_r2 = { 
     1202        .name                           = "NB4-FXC-r2", 
     1203        .expected_cpu_id                = 0x6358, 
     1204 
     1205        .has_uart0                      = 1, 
     1206        .has_enet0                      = 1, 
     1207        .has_enet1                      = 1, 
     1208        .has_pci                        = 1, 
     1209 
     1210        .enet0 = { 
     1211                .has_phy                = 1, 
     1212                .use_internal_phy       = 1, 
     1213        }, 
     1214 
     1215        .enet1 = { 
     1216                .force_speed_100        = 1, 
     1217                .force_duplex_full      = 1, 
     1218        }, 
     1219 
     1220 
     1221        .has_ohci0 = 1, 
     1222        .has_pccard = 1, 
     1223        .has_ehci0 = 1, 
     1224 
     1225        .leds = { 
     1226                { 
     1227                        .name           = "adsl", 
     1228                        .gpio           = NB4_74HC64_GPIO(4), 
     1229                        .active_low     = 1, 
     1230                }, 
     1231                { 
     1232                        .name           = "traffic", 
     1233                        .gpio           = 2, 
     1234                }, 
     1235                { 
     1236                        .name           = "tel", 
     1237                        .gpio           = NB4_74HC64_GPIO(3), 
     1238                        .active_low     = 1, 
     1239                }, 
     1240                { 
     1241                        .name           = "tv", 
     1242                        .gpio           = NB4_74HC64_GPIO(2), 
     1243                        .active_low     = 1, 
     1244                }, 
     1245                { 
     1246                        .name           = "wifi", 
     1247                        .gpio           = 15, 
     1248                }, 
     1249                { 
     1250                        .name           = "alarm", 
     1251                        .gpio           = NB4_74HC64_GPIO(0), 
     1252                        .active_low     = 1, 
     1253                }, 
     1254                { 
     1255                        .name           = "service:red", 
     1256                        .gpio           = 29, 
     1257                }, 
     1258                { 
     1259                        .name           = "service:green", 
     1260                        .gpio           = 30, 
     1261                }, 
     1262                { 
     1263                        .name           = "service:blue", 
     1264                        .gpio           = 4, 
     1265                }, 
     1266        }, 
     1267        .buttons = { 
     1268                { 
     1269                        .desc           = "reset", 
     1270                        .gpio           = 34, 
     1271                        .type           = EV_KEY, 
     1272                        .code           = KEY_RESTART, 
     1273                        .threshold      = 3, 
     1274                }, 
     1275                { 
     1276                        .desc           = "wps", 
     1277                        .gpio           = 37, 
     1278                        .type           = EV_KEY, 
     1279                        .code           = KEY_WPS_BUTTON, 
     1280                        .threshold      = 3, 
     1281                }, 
     1282        }, 
     1283        .devs = nb4_devices, 
     1284        .num_devs = ARRAY_SIZE(nb4_devices), 
     1285        .spis = nb4_spi_devices, 
     1286        .num_spis = ARRAY_SIZE(nb4_spi_devices), 
     1287}; 
    7831288#endif 
    7841289 
    7851290/* 
    static const struct board_info __initdat 
    8101315        &board_96358vw2, 
    8111316        &board_AGPFS0, 
    8121317        &board_DWVS0, 
     1318        &board_nb4_ser_r0, 
     1319        &board_nb4_ser_r1, 
     1320        &board_nb4_ser_r2, 
     1321        &board_nb4_fxc_r1, 
     1322        &board_nb4_fxc_r2, 
    8131323#endif 
    8141324}; 
    8151325 
     1326static void __init nb4_nvram_fixup(void) 
     1327{ 
     1328        u8 *boot_addr, *p; 
     1329        u32 val; 
     1330 
     1331        if (BCMCPU_IS_6358() && (!strcmp(nvram.name, "96358VW"))) { 
     1332                val = bcm_mpi_readl(MPI_CSBASE_REG(0)); 
     1333                val &= MPI_CSBASE_BASE_MASK; 
     1334                boot_addr = (u8 *)KSEG1ADDR(val); 
     1335                /* Extract nb4 PID */ 
     1336                p = boot_addr + NB4_PID_OFFSET; 
     1337                if (!memcmp(p, "NB4-", 4)) 
     1338                        memcpy(nvram.name, p, sizeof("NB4-XXX-rX")); 
     1339        } 
     1340} 
     1341 
    8161342/* 
    8171343 * Register a sane SPROMv2 to make the on-board 
    8181344 * bcm4318 WLAN work 
    void __init board_prom_init(void) 
    9701496                boardid_fixup(boot_addr); 
    9711497        } 
    9721498 
     1499        /* Fixup broken nb4 board name */ 
     1500        nb4_nvram_fixup(); 
     1501 
    9731502        /* find board by name */ 
    9741503        for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) { 
    9751504                if (strncmp(nvram.name, bcm963xx_boards[i]->name, 
Note: See TracBrowser for help on using the repository browser.