Lines Matching refs:phydev
113 struct phy_device *phydev; member
229 static int ext_read(struct phy_device *phydev, int page, u32 regnum) in ext_read() argument
231 struct dp83640_private *dp83640 = phydev->priv; in ext_read()
235 broadcast_write(phydev->bus, PAGESEL, page); in ext_read()
238 val = phy_read(phydev, regnum); in ext_read()
244 static void ext_write(int broadcast, struct phy_device *phydev, in ext_write() argument
247 struct dp83640_private *dp83640 = phydev->priv; in ext_write()
250 broadcast_write(phydev->bus, PAGESEL, page); in ext_write()
254 broadcast_write(phydev->bus, regnum, val); in ext_write()
256 phy_write(phydev, regnum, val); in ext_write()
311 struct phy_device *phydev = dp83640->phydev; in periodic_output() local
335 ext_write(0, phydev, PAGE5, PTP_TRIG, ptp_trig); in periodic_output()
336 ext_write(0, phydev, PAGE4, PTP_CTL, val); in periodic_output()
349 ext_write(0, phydev, PAGE5, PTP_TRIG, ptp_trig); in periodic_output()
353 ext_write(0, phydev, PAGE4, PTP_CTL, val); in periodic_output()
354 ext_write(0, phydev, PAGE4, PTP_TDR, nsec & 0xffff); /* ns[15:0] */ in periodic_output()
355 ext_write(0, phydev, PAGE4, PTP_TDR, nsec >> 16); /* ns[31:16] */ in periodic_output()
356 ext_write(0, phydev, PAGE4, PTP_TDR, sec & 0xffff); /* sec[15:0] */ in periodic_output()
357 ext_write(0, phydev, PAGE4, PTP_TDR, sec >> 16); /* sec[31:16] */ in periodic_output()
358 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff); /* ns[15:0] */ in periodic_output()
359 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16); /* ns[31:16] */ in periodic_output()
362 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff); in periodic_output()
363 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16); in periodic_output()
369 ext_write(0, phydev, PAGE4, PTP_CTL, val); in periodic_output()
381 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjfreq() local
402 ext_write(1, phydev, PAGE4, PTP_RATEH, hi); in ptp_dp83640_adjfreq()
403 ext_write(1, phydev, PAGE4, PTP_RATEL, lo); in ptp_dp83640_adjfreq()
414 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjtime() local
424 err = tdr_write(1, phydev, &ts, PTP_STEP_CLK); in ptp_dp83640_adjtime()
436 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_gettime() local
441 ext_write(0, phydev, PAGE4, PTP_CTL, PTP_RD_CLK); in ptp_dp83640_gettime()
443 val[0] = ext_read(phydev, PAGE4, PTP_TDR); /* ns[15:0] */ in ptp_dp83640_gettime()
444 val[1] = ext_read(phydev, PAGE4, PTP_TDR); /* ns[31:16] */ in ptp_dp83640_gettime()
445 val[2] = ext_read(phydev, PAGE4, PTP_TDR); /* sec[15:0] */ in ptp_dp83640_gettime()
446 val[3] = ext_read(phydev, PAGE4, PTP_TDR); /* sec[31:16] */ in ptp_dp83640_gettime()
461 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_settime() local
466 err = tdr_write(1, phydev, ts, PTP_LOAD_CLK); in ptp_dp83640_settime()
478 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_enable() local
501 ext_write(0, phydev, PAGE5, PTP_EVNT, evnt); in ptp_dp83640_enable()
536 static void enable_status_frames(struct phy_device *phydev, bool on) in enable_status_frames() argument
538 struct dp83640_private *dp83640 = phydev->priv; in enable_status_frames()
549 ext_write(0, phydev, PAGE5, PSF_CFG0, cfg0); in enable_status_frames()
550 ext_write(0, phydev, PAGE6, PSF_CFG1, ver); in enable_status_frames()
554 if (!phydev->attached_dev) { in enable_status_frames()
560 if (dev_mc_add(phydev->attached_dev, status_frame_dst)) in enable_status_frames()
563 if (dev_mc_del(phydev->attached_dev, status_frame_dst)) in enable_status_frames()
601 static void enable_broadcast(struct phy_device *phydev, int init_page, int on) in enable_broadcast() argument
604 phy_write(phydev, PAGESEL, 0); in enable_broadcast()
605 val = phy_read(phydev, PHYCR2); in enable_broadcast()
610 phy_write(phydev, PHYCR2, val); in enable_broadcast()
611 phy_write(phydev, PAGESEL, init_page); in enable_broadcast()
621 struct phy_device *master = clock->chosen->phydev; in recalibrate()
638 enable_broadcast(tmp->phydev, clock->page, 1); in recalibrate()
639 tmp->cfg0 = ext_read(tmp->phydev, PAGE5, PSF_CFG0); in recalibrate()
640 ext_write(0, tmp->phydev, PAGE5, PSF_CFG0, 0); in recalibrate()
641 ext_write(0, tmp->phydev, PAGE4, PTP_CTL, PTP_ENABLE); in recalibrate()
657 ext_write(0, tmp->phydev, PAGE5, PTP_EVNT, evnt); in recalibrate()
699 val = ext_read(tmp->phydev, PAGE4, PTP_STS); in recalibrate()
701 val = ext_read(tmp->phydev, PAGE4, PTP_ESTS); in recalibrate()
703 event_ts.ns_lo = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
704 event_ts.ns_hi = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
705 event_ts.sec_lo = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
706 event_ts.sec_hi = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
711 tdr_write(0, tmp->phydev, &ts, PTP_STEP_CLK); in recalibrate()
719 ext_write(0, tmp->phydev, PAGE5, PSF_CFG0, tmp->cfg0); in recalibrate()
1054 struct phy_device *phydev) in choose_this_phy() argument
1059 if (chosen_phy == phydev->addr) in choose_this_phy()
1117 static int dp83640_probe(struct phy_device *phydev) in dp83640_probe() argument
1123 if (phydev->addr == BROADCAST_ADDR) in dp83640_probe()
1126 clock = dp83640_clock_get_bus(phydev->bus); in dp83640_probe()
1134 dp83640->phydev = phydev; in dp83640_probe()
1142 phydev->priv = dp83640; in dp83640_probe()
1150 if (choose_this_phy(clock, phydev)) { in dp83640_probe()
1152 clock->ptp_clock = ptp_clock_register(&clock->caps, &phydev->dev); in dp83640_probe()
1172 static void dp83640_remove(struct phy_device *phydev) in dp83640_remove() argument
1176 struct dp83640_private *tmp, *dp83640 = phydev->priv; in dp83640_remove()
1178 if (phydev->addr == BROADCAST_ADDR) in dp83640_remove()
1181 enable_status_frames(phydev, false); in dp83640_remove()
1206 static int dp83640_config_init(struct phy_device *phydev) in dp83640_config_init() argument
1208 struct dp83640_private *dp83640 = phydev->priv; in dp83640_config_init()
1215 enable_broadcast(phydev, clock->page, 1); in dp83640_config_init()
1219 enable_status_frames(phydev, true); in dp83640_config_init()
1222 ext_write(0, phydev, PAGE4, PTP_CTL, PTP_ENABLE); in dp83640_config_init()
1228 static int dp83640_ack_interrupt(struct phy_device *phydev) in dp83640_ack_interrupt() argument
1230 int err = phy_read(phydev, MII_DP83640_MISR); in dp83640_ack_interrupt()
1238 static int dp83640_config_intr(struct phy_device *phydev) in dp83640_config_intr() argument
1244 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in dp83640_config_intr()
1245 misr = phy_read(phydev, MII_DP83640_MISR); in dp83640_config_intr()
1253 err = phy_write(phydev, MII_DP83640_MISR, misr); in dp83640_config_intr()
1257 micr = phy_read(phydev, MII_DP83640_MICR); in dp83640_config_intr()
1263 return phy_write(phydev, MII_DP83640_MICR, micr); in dp83640_config_intr()
1265 micr = phy_read(phydev, MII_DP83640_MICR); in dp83640_config_intr()
1271 err = phy_write(phydev, MII_DP83640_MICR, micr); in dp83640_config_intr()
1275 misr = phy_read(phydev, MII_DP83640_MISR); in dp83640_config_intr()
1283 return phy_write(phydev, MII_DP83640_MISR, misr); in dp83640_config_intr()
1287 static int dp83640_hwtstamp(struct phy_device *phydev, struct ifreq *ifr) in dp83640_hwtstamp() argument
1289 struct dp83640_private *dp83640 = phydev->priv; in dp83640_hwtstamp()
1365 ext_write(0, phydev, PAGE5, PTP_TXCFG0, txcfg0); in dp83640_hwtstamp()
1366 ext_write(0, phydev, PAGE5, PTP_RXCFG0, rxcfg0); in dp83640_hwtstamp()
1396 static bool dp83640_rxtstamp(struct phy_device *phydev, in dp83640_rxtstamp() argument
1399 struct dp83640_private *dp83640 = phydev->priv; in dp83640_rxtstamp()
1446 static void dp83640_txtstamp(struct phy_device *phydev, in dp83640_txtstamp() argument
1449 struct dp83640_private *dp83640 = phydev->priv; in dp83640_txtstamp()