On the Linksys WRT54GSv1, the adm6996 switch driver and the
gpio_button_hotplug module both claim GPIO 6, which is connected to the
Reset button. When the switch driver's request wins, the Reset button
cannot work. This makes it impossible to enter failsafe mode without a
serial console.
Stop requesting the "adm_rc" GPIO in the switch driver, since it is not
used anywhere.
Fixes FS#792.
Signed-off-by: Mirko Parthey <mirko.parthey@web.de>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/io.h>
-@@ -2240,6 +2242,70 @@ static void b44_adjust_link(struct net_d
+@@ -2240,6 +2242,69 @@ static void b44_adjust_link(struct net_d
+ else
+ adm_data.eedi = 4;
+
+ else
+ adm_data.eedi = 4;
+
-+ gpio = bcm47xx_nvram_gpio_pin("adm_rc");
-+ if (gpio >= 0)
-+ adm_data.eerc = gpio;
-+ else
-+ adm_data.eerc = 5;
++ /*
++ * We ignore the "adm_rc" GPIO here. The driver does not use it,
++ * and it conflicts with the Reset button GPIO on the Linksys WRT54GSv1.
++ */
+
+ info.parent = bp->sdev->dev;
+ info.name = "adm6996_gpio";
+
+ info.parent = bp->sdev->dev;
+ info.name = "adm6996_gpio";
static int b44_register_phy_one(struct b44 *bp)
{
struct mii_bus *mii_bus;
static int b44_register_phy_one(struct b44 *bp)
{
struct mii_bus *mii_bus;
-@@ -2283,6 +2349,9 @@ static int b44_register_phy_one(struct b
+@@ -2283,6 +2348,9 @@ static int b44_register_phy_one(struct b
if (!bp->mii_bus->phy_map[bp->phy_addr] &&
(sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) {
if (!bp->mii_bus->phy_map[bp->phy_addr] &&
(sprom->boardflags_lo & (B44_BOARDFLAG_ROBO | B44_BOARDFLAG_ADM))) {
dev_info(sdev->dev,
"could not find PHY at %i, use fixed one\n",
bp->phy_addr);
dev_info(sdev->dev,
"could not find PHY at %i, use fixed one\n",
bp->phy_addr);
-@@ -2479,6 +2548,7 @@ static void b44_remove_one(struct ssb_de
+@@ -2479,6 +2547,7 @@ static void b44_remove_one(struct ssb_de
unregister_netdev(dev);
if (bp->flags & B44_FLAG_EXTERNAL_PHY)
b44_unregister_phy_one(bp);
unregister_netdev(dev);
if (bp->flags & B44_FLAG_EXTERNAL_PHY)
b44_unregister_phy_one(bp);
u8 eecs;
u8 eesk;
u8 eedi;
u8 eecs;
u8 eesk;
u8 eedi;
enum adm6996_model model;
enum adm6996_model model;
priv->eecs = pdata->eecs;
priv->eedi = pdata->eedi;
priv->eecs = pdata->eecs;
priv->eedi = pdata->eedi;
- priv->eerc = pdata->eerc;
priv->eesk = pdata->eesk;
priv->model = pdata->model;
priv->eesk = pdata->eesk;
priv->model = pdata->model;
if (ret)
return ret;
ret = devm_gpio_request(&pdev->dev, priv->eedi, "adm_eedi");
if (ret)
return ret;
ret = devm_gpio_request(&pdev->dev, priv->eedi, "adm_eedi");
- if (ret)
- return ret;
- ret = devm_gpio_request(&pdev->dev, priv->eerc, "adm_eerc");
if (ret)
return ret;
ret = devm_gpio_request(&pdev->dev, priv->eesk, "adm_eesk");
if (ret)
return ret;
ret = devm_gpio_request(&pdev->dev, priv->eesk, "adm_eesk");
u8 eecs;
u8 eesk;
u8 eedi;
u8 eecs;
u8 eesk;
u8 eedi;
enum adm6996_model model;
};
enum adm6996_model model;
};