From 5befc74b9c0d8859b249c21b060f0e4997a793c7 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Sun, 20 Feb 2011 17:29:13 +0000 Subject: [PATCH] backport r25619 to backfire SVN-Revision: 25625 --- package/switch/Makefile | 4 ++-- package/switch/src/switch-robo.c | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/package/switch/Makefile b/package/switch/Makefile index 74e42e6d93..7c4bb093e0 100644 --- a/package/switch/Makefile +++ b/package/switch/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2011 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=kmod-switch -PKG_RELEASE:=3 +PKG_RELEASE:=4 include $(INCLUDE_DIR)/package.mk diff --git a/package/switch/src/switch-robo.c b/package/switch/src/switch-robo.c index 43e8098b5a..35cf6df393 100644 --- a/package/switch/src/switch-robo.c +++ b/package/switch/src/switch-robo.c @@ -306,7 +306,7 @@ static int robo_probe(char *devname) { __u32 phyid; unsigned int i; - int err; + int err = 1; printk(KERN_INFO PFX "Probing device %s: ", devname); strcpy(robo.ifr.ifr_name, devname); @@ -336,7 +336,7 @@ static int robo_probe(char *devname) (mii->phy_id != ROBO_PHY_ADDR_BCM63XX) && (mii->phy_id != ROBO_PHY_ADDR_TG3)) { printk("Invalid phy address (%d)\n", mii->phy_id); - return 1; + goto done; } robo.use_et = 0; /* The robo has a fixed PHY address that is different from the @@ -349,7 +349,7 @@ static int robo_probe(char *devname) if (phyid == 0xffffffff || phyid == 0x55210022) { printk("No Robo switch in managed mode found, phy_id = 0x%08x\n", phyid); - return 1; + goto done; } /* Get the device ID */ @@ -366,11 +366,18 @@ static int robo_probe(char *devname) robo_switch_reset(); err = robo_switch_enable(); if (err) - return err; + goto done; + err = 0; printk("found a 5%s%x!%s\n", robo.devid & 0xff00 ? "" : "3", robo.devid, robo.is_5350 ? " It's a 5350." : ""); - return 0; + +done: + if (err) { + dev_put(robo.dev); + robo.dev = NULL; + } + return err; } @@ -615,6 +622,8 @@ static int __init robo_init(void) static void __exit robo_exit(void) { switch_unregister_driver(DRIVER_NAME); + if (robo.dev) + dev_put(robo.dev); kfree(robo.device); } -- 2.30.2