X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=package%2Fswitch%2Fsrc%2Fswitch-robo.c;h=f7159729b8842191aaf8b93c4f4b9ae4234eeccd;hb=d45482195dd742699afeb1c1351d28c89c8d5025;hp=2aacc36663e93819f868dc721750704e3f43df87;hpb=fe6514cec0f6d694ecfd8adb0d75ce3711f3d073;p=openwrt.git diff --git a/package/switch/src/switch-robo.c b/package/switch/src/switch-robo.c index 2aacc36663..f7159729b8 100644 --- a/package/switch/src/switch-robo.c +++ b/package/switch/src/switch-robo.c @@ -3,6 +3,7 @@ * * Copyright (C) 2005 Felix Fietkau * Copyright (C) 2008 Michael Buesch + * Copyright (C) 2013 Hauke Mehrtens * Based on 'robocfg' by Oleg I. Vdovikin * * This program is free software; you can redistribute it and/or @@ -40,7 +41,7 @@ #endif #define DRIVER_NAME "bcm53xx" -#define DRIVER_VERSION "0.02" +#define DRIVER_VERSION "0.03" #define PFX "roboswitch: " #define ROBO_PHY_ADDR 0x1E /* robo switch phy address */ @@ -63,6 +64,7 @@ #define ROBO_DEVICE_ID_5397 0x97 #define ROBO_DEVICE_ID_5398 0x98 #define ROBO_DEVICE_ID_53115 0x3115 +#define ROBO_DEVICE_ID_53125 0x3125 /* Private et.o ioctls */ #define SIOCGETCPHYRD (SIOCDEVPRIVATE + 9) @@ -248,6 +250,13 @@ static int robo_switch_enable(void) robo_write16(ROBO_CTRL_PAGE, ROBO_IM_PORT_CTRL, 0); } + if (robo.devid == ROBO_DEVICE_ID_53125) { + /* Make IM port status link by default */ + val = robo_read16(ROBO_CTRL_PAGE, ROBO_PORT_OVERRIDE_CTRL) | 0xb1; + robo_write16(ROBO_CTRL_PAGE, ROBO_PORT_OVERRIDE_CTRL, val); + // TODO: init EEE feature + } + #ifdef CONFIG_BCM47XX /* WAN port LED, except for Netgear WGT634U */ if (bcm47xx_nvram_getenv("nvram_type", buf, sizeof(buf)) >= 0) { @@ -486,7 +495,8 @@ static int handle_vlan_port_read_new(switch_driver *d, char *buf, int nr) int j; if ((robo.devid == ROBO_DEVICE_ID_5395) || - (robo.devid == ROBO_DEVICE_ID_53115)) { + (robo.devid == ROBO_DEVICE_ID_53115) || + (robo.devid == ROBO_DEVICE_ID_53125)) { vtbl_access = ROBO_VTBL_ACCESS_5395; vtbl_index = ROBO_VTBL_INDX_5395; vtbl_entry = ROBO_VTBL_ENTRY_5395; @@ -557,7 +567,8 @@ static void handle_vlan_port_write_new(switch_driver *d, switch_vlan_config *c, /* write config now */ if ((robo.devid == ROBO_DEVICE_ID_5395) || - (robo.devid == ROBO_DEVICE_ID_53115)) { + (robo.devid == ROBO_DEVICE_ID_53115) || + (robo.devid == ROBO_DEVICE_ID_53125)) { vtbl_access = ROBO_VTBL_ACCESS_5395; vtbl_index = ROBO_VTBL_INDX_5395; vtbl_entry = ROBO_VTBL_ENTRY_5395; @@ -741,7 +752,8 @@ static void handle_reset_new(switch_driver *d, char *buf, int nr) __u8 vtbl_entry, vtbl_index, vtbl_access; if ((robo.devid == ROBO_DEVICE_ID_5395) || - (robo.devid == ROBO_DEVICE_ID_53115)) { + (robo.devid == ROBO_DEVICE_ID_53115) || + (robo.devid == ROBO_DEVICE_ID_53125)) { vtbl_access = ROBO_VTBL_ACCESS_5395; vtbl_index = ROBO_VTBL_INDX_5395; vtbl_entry = ROBO_VTBL_ENTRY_5395; @@ -851,6 +863,10 @@ static int __init robo_init(void) driver.ports = 9; driver.cpuport = 8; } + if (robo.is_5365) + snprintf(driver.dev_name, SWITCH_NAME_BUFSZ, "BCM5365"); + else + snprintf(driver.dev_name, SWITCH_NAME_BUFSZ, "BCM5%s%x", robo.devid & 0xff00 ? "" : "3", robo.devid); return switch_register_driver(&driver); }