]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/sh_eth.c
fb: Reduce priority of resource conflict message
[karo-tx-linux.git] / drivers / net / sh_eth.c
index dcf9f87d021fea201319e5bdc3a3c9b7c05eb43e..e9e7a530552ca28c3a3dc7ba1f730273d753960e 100644 (file)
@@ -512,6 +512,7 @@ static unsigned long sh_eth_get_edtrr_trns(struct sh_eth_private *mdp)
 }
 
 struct bb_info {
+       void (*set_gate)(unsigned long addr);
        struct mdiobb_ctrl ctrl;
        u32 addr;
        u32 mmd_msk;/* MMD */
@@ -542,6 +543,10 @@ static int bb_read(u32 addr, u32 msk)
 static void sh_mmd_ctrl(struct mdiobb_ctrl *ctrl, int bit)
 {
        struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
+
+       if (bitbang->set_gate)
+               bitbang->set_gate(bitbang->addr);
+
        if (bit)
                bb_set(bitbang->addr, bitbang->mmd_msk);
        else
@@ -553,6 +558,9 @@ static void sh_set_mdio(struct mdiobb_ctrl *ctrl, int bit)
 {
        struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
 
+       if (bitbang->set_gate)
+               bitbang->set_gate(bitbang->addr);
+
        if (bit)
                bb_set(bitbang->addr, bitbang->mdo_msk);
        else
@@ -563,6 +571,10 @@ static void sh_set_mdio(struct mdiobb_ctrl *ctrl, int bit)
 static int sh_get_mdio(struct mdiobb_ctrl *ctrl)
 {
        struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
+
+       if (bitbang->set_gate)
+               bitbang->set_gate(bitbang->addr);
+
        return bb_read(bitbang->addr, bitbang->mdi_msk);
 }
 
@@ -571,6 +583,9 @@ static void sh_mdc_ctrl(struct mdiobb_ctrl *ctrl, int bit)
 {
        struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);
 
+       if (bitbang->set_gate)
+               bitbang->set_gate(bitbang->addr);
+
        if (bit)
                bb_set(bitbang->addr, bitbang->mdc_msk);
        else
@@ -1646,7 +1661,8 @@ static int sh_mdio_release(struct net_device *ndev)
 }
 
 /* MDIO bus init function */
-static int sh_mdio_init(struct net_device *ndev, int id)
+static int sh_mdio_init(struct net_device *ndev, int id,
+                       struct sh_eth_plat_data *pd)
 {
        int ret, i;
        struct bb_info *bitbang;
@@ -1661,6 +1677,7 @@ static int sh_mdio_init(struct net_device *ndev, int id)
 
        /* bitbang init */
        bitbang->addr = ndev->base_addr + mdp->reg_offset[PIR];
+       bitbang->set_gate = pd->set_mdio_gate;
        bitbang->mdi_msk = 0x08;
        bitbang->mdo_msk = 0x04;
        bitbang->mmd_msk = 0x02;/* MMD */
@@ -1854,7 +1871,7 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
                goto out_release;
 
        /* mdio bus init */
-       ret = sh_mdio_init(ndev, pdev->id);
+       ret = sh_mdio_init(ndev, pdev->id, pd);
        if (ret)
                goto out_unregister;