示例#1
0
文件: net.c 项目: jorneytu/code
static unsigned long phy_id_read(void)
{
	unsigned long phy_id;
	unsigned short id1, id2;
	int my_phyaddr = 0x1;

	id1 = hieth_mdio_read(&hieth_mdio_local_device, my_phyaddr, 0x02);
	id2 = hieth_mdio_read(&hieth_mdio_local_device, my_phyaddr, 0x03);

	phy_id = (((id1 & 0xffff) << 16) | (id2 & 0xffff));
	return phy_id;

}
示例#2
0
static int hieth_mdiobus_read(char *devname, unsigned char addr, 
		unsigned char reg, unsigned short *value)
{
	*value = hieth_mdio_read(&mdio_bus_ld, addr, reg);

	return 0;
}
示例#3
0
文件: net.c 项目: jorneytu/code
static void phy_quirk(struct hieth_mdio_local *mdio, int phyaddr)
{
	unsigned long phy_id;
	unsigned short id1, id2;
	unsigned short reg;

	id1 = hieth_mdio_read(mdio, phyaddr, 0x02);
	id2 = hieth_mdio_read(mdio, phyaddr, 0x03);

	phy_id = (((id1 & 0xffff) << 16) | (id2 & 0xffff));

	/* PHY-KSZ8051MNL */
	if ((phy_id & 0xFFFFFFF0) == 0x221550) {
		reg = hieth_mdio_read(mdio, phyaddr, 0x1F);
		reg |= (1 << 7); /* set phy RMII 50MHz clk;*/
		hieth_mdio_write(mdio, phyaddr, 0x1F, reg);

		reg = hieth_mdio_read(mdio, phyaddr, 0x16);
		reg |= (1 << 1); /* set phy RMII override; */
		hieth_mdio_write(mdio, phyaddr, 0x16, reg);
	}
}