Lines Matching +full:ctrl +full:- +full:len
23 #include <linux/mdio-bitbang.h>
31 struct mdiobb_ctrl ctrl; member
58 static inline void mdio_dir(struct mdiobb_ctrl *ctrl, int dir) in mdio_dir() argument
60 struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); in mdio_dir()
63 bb_set(bitbang->dir, bitbang->mdio_msk); in mdio_dir()
65 bb_clr(bitbang->dir, bitbang->mdio_msk); in mdio_dir()
68 in_be32(bitbang->dir); in mdio_dir()
71 static inline int mdio_read(struct mdiobb_ctrl *ctrl) in mdio_read() argument
73 struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); in mdio_read()
74 return bb_read(bitbang->dat, bitbang->mdio_msk); in mdio_read()
77 static inline void mdio(struct mdiobb_ctrl *ctrl, int what) in mdio() argument
79 struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); in mdio()
82 bb_set(bitbang->dat, bitbang->mdio_msk); in mdio()
84 bb_clr(bitbang->dat, bitbang->mdio_msk); in mdio()
87 in_be32(bitbang->dat); in mdio()
90 static inline void mdc(struct mdiobb_ctrl *ctrl, int what) in mdc() argument
92 struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); in mdc()
95 bb_set(bitbang->dat, bitbang->mdc_msk); in mdc()
97 bb_clr(bitbang->dat, bitbang->mdc_msk); in mdc()
100 in_be32(bitbang->dat); in mdc()
115 int mdio_pin, mdc_pin, len; in fs_mii_bitbang_init() local
116 struct bb_info *bitbang = bus->priv; in fs_mii_bitbang_init()
123 return -ENODEV; in fs_mii_bitbang_init()
129 snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start); in fs_mii_bitbang_init()
131 data = of_get_property(np, "fsl,mdio-pin", &len); in fs_mii_bitbang_init()
132 if (!data || len != 4) in fs_mii_bitbang_init()
133 return -ENODEV; in fs_mii_bitbang_init()
136 data = of_get_property(np, "fsl,mdc-pin", &len); in fs_mii_bitbang_init()
137 if (!data || len != 4) in fs_mii_bitbang_init()
138 return -ENODEV; in fs_mii_bitbang_init()
141 bitbang->dir = ioremap(res.start, resource_size(&res)); in fs_mii_bitbang_init()
142 if (!bitbang->dir) in fs_mii_bitbang_init()
143 return -ENOMEM; in fs_mii_bitbang_init()
145 bitbang->dat = bitbang->dir + 4; in fs_mii_bitbang_init()
146 bitbang->mdio_msk = 1 << (31 - mdio_pin); in fs_mii_bitbang_init()
147 bitbang->mdc_msk = 1 << (31 - mdc_pin); in fs_mii_bitbang_init()
156 int ret = -ENOMEM; in fs_enet_mdio_probe()
162 bitbang->ctrl.ops = &bb_ops; in fs_enet_mdio_probe()
164 new_bus = alloc_mdio_bitbang(&bitbang->ctrl); in fs_enet_mdio_probe()
168 new_bus->name = "CPM2 Bitbanged MII", in fs_enet_mdio_probe()
170 ret = fs_mii_bitbang_init(new_bus, ofdev->dev.of_node); in fs_enet_mdio_probe()
174 new_bus->phy_mask = ~0; in fs_enet_mdio_probe()
176 new_bus->parent = &ofdev->dev; in fs_enet_mdio_probe()
179 ret = of_mdiobus_register(new_bus, ofdev->dev.of_node); in fs_enet_mdio_probe()
186 iounmap(bitbang->dir); in fs_enet_mdio_probe()
198 struct bb_info *bitbang = bus->priv; in fs_enet_mdio_remove()
202 iounmap(bitbang->dir); in fs_enet_mdio_remove()
210 .compatible = "fsl,cpm2-mdio-bitbang",
218 .name = "fsl-bb-mdio",