net: sh_eth: add set_mdio_gate in bb_info
Subsystems (3)
PATCH 6/6 net: sh_eth: add set_mdio_gate in bb_info
The SH7757's ETHER and GETHER use common MDIO pin. The MDIO pin is selected by specific register. So this patch adds new interface in bb_info, and when the sh_eth driver use the mdio, the register can be changed by the function.
Signed-off-by Yoshihiro Shimoda <[email protected]>
---
This patch are based on net-next-2.6.git.
arch/sh/include/asm/sh_eth.h | 1 + drivers/net/sh_eth.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-)
arch/sh/include/asm/sh_eth.h +1 -0
@@ -15,6 +15,7 @@ struct sh_eth_plat_data {int edmac_endian;int register_type;phy_interface_t phy_interface; +void (*set_mdio_gate)(unsigned long addr);unsigned char mac_addr[6 ]; unsigned no_ether_link:1;
drivers/net/sh_eth.c +19 -2
@@ -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;
Signature · 1 line
1.7.1
From: Yoshihiro Shimoda <[email protected]>
Date: Tue, 08 Mar 2011 16:59:55 +0900
Quoted 6 lines
The SH7757's ETHER and GETHER use common MDIO pin. The MDIO pin is selected by specific register. So this patch adds new interface in
bb_info, and when thesh_ethdriver use the mdio, the register can be changed by the function.Signed-off-by Yoshihiro Shimoda <[email protected]>
Applied.