PHY芯片88E3019驱动设计

   在ST解码器方案中,用了Marvell的PHY芯片88e3019。在SDK中并没有该芯片的驱动,只有一个88e1111的驱动。看了两天源代码,发现只要加个phy_driver结构体就行了。具体代码如下:
 
/*  88e3019 phy_driver  */
 {
  .phy_id = 0x01410e20,             // from datasheet page 42
  .phy_id_mask = 0xfffffff0,
  .name = "Marvell 88E3019",      // 3019
  .features = PHY_BASIC_FEATURES,    // basic R/T
  .flags = PHY_HAS_INTERRUPT,
//.config_init = &m88e1111_config_init,
  .config_aneg = &marvell_config_aneg,
  .read_status = &genphy_read_status,
  .ack_interrupt = &marvell_ack_interrupt,
  .config_intr = &marvell_config_intr,
  .driver = {.owner = THIS_MODULE,},
 } 
 
这两天都在看phy芯片驱动的整体架构。 发现还是挺复杂的,关系到了好多个源代码。
 
几个重要的源代码介绍如下:
 
1. phy_device.c
查询和配置phy架构,包含了phy通用的驱动。
里面有个函数:
int genphy_config_aneg(struct phy_device *phydev)
 
作用:restart auto-negotiation or write BMCR
 
2. phy.c
读写和配置PHY设备。
 
有两个重要函数
int phy_read(struct phy_device *phydev, u16 regnum)
读取phy reg。
 
int phy_write(struct phy_device *phydev, u16 regnum, u16 val)
写phy reg。
 
3. driver.c
设备驱动管理中心。
 
4. bus.c
总线驱动管理
 
5. mdio_bus.c
mdio总线驱动。有个重要的结构体
 
struct bus_type mdio_bus_type = {
 .name  = "mdio_bus",
 .match  = mdio_bus_match,
 .suspend = mdio_bus_suspend,
 .resume  = mdio_bus_resume,
};
 
6. MII.h 和 MII.c
这是MII协议。里面有MII协议的PHY寄存器地址,及MII通信接口库。

marvell 88e1111驱动源代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值