Lines Matching refs:phydev
112 struct phy_device *phydev; member
228 static int ext_read(struct phy_device *phydev, int page, u32 regnum) in ext_read() argument
230 struct dp83640_private *dp83640 = phydev->priv; in ext_read()
234 broadcast_write(phydev->bus, PAGESEL, page); in ext_read()
237 val = phy_read(phydev, regnum); in ext_read()
243 static void ext_write(int broadcast, struct phy_device *phydev, in ext_write() argument
246 struct dp83640_private *dp83640 = phydev->priv; in ext_write()
249 broadcast_write(phydev->bus, PAGESEL, page); in ext_write()
253 broadcast_write(phydev->bus, regnum, val); in ext_write()
255 phy_write(phydev, regnum, val); in ext_write()
310 struct phy_device *phydev = dp83640->phydev; in periodic_output() local
334 ext_write(0, phydev, PAGE5, PTP_TRIG, ptp_trig); in periodic_output()
335 ext_write(0, phydev, PAGE4, PTP_CTL, val); in periodic_output()
348 ext_write(0, phydev, PAGE5, PTP_TRIG, ptp_trig); in periodic_output()
352 ext_write(0, phydev, PAGE4, PTP_CTL, val); in periodic_output()
353 ext_write(0, phydev, PAGE4, PTP_TDR, nsec & 0xffff); /* ns[15:0] */ in periodic_output()
354 ext_write(0, phydev, PAGE4, PTP_TDR, nsec >> 16); /* ns[31:16] */ in periodic_output()
355 ext_write(0, phydev, PAGE4, PTP_TDR, sec & 0xffff); /* sec[15:0] */ in periodic_output()
356 ext_write(0, phydev, PAGE4, PTP_TDR, sec >> 16); /* sec[31:16] */ in periodic_output()
357 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff); /* ns[15:0] */ in periodic_output()
358 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16); /* ns[31:16] */ in periodic_output()
361 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff); in periodic_output()
362 ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16); in periodic_output()
368 ext_write(0, phydev, PAGE4, PTP_CTL, val); in periodic_output()
380 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjfreq() local
401 ext_write(1, phydev, PAGE4, PTP_RATEH, hi); in ptp_dp83640_adjfreq()
402 ext_write(1, phydev, PAGE4, PTP_RATEL, lo); in ptp_dp83640_adjfreq()
413 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjtime() local
423 err = tdr_write(1, phydev, &ts, PTP_STEP_CLK); in ptp_dp83640_adjtime()
435 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_gettime() local
440 ext_write(0, phydev, PAGE4, PTP_CTL, PTP_RD_CLK); in ptp_dp83640_gettime()
442 val[0] = ext_read(phydev, PAGE4, PTP_TDR); /* ns[15:0] */ in ptp_dp83640_gettime()
443 val[1] = ext_read(phydev, PAGE4, PTP_TDR); /* ns[31:16] */ in ptp_dp83640_gettime()
444 val[2] = ext_read(phydev, PAGE4, PTP_TDR); /* sec[15:0] */ in ptp_dp83640_gettime()
445 val[3] = ext_read(phydev, PAGE4, PTP_TDR); /* sec[31:16] */ in ptp_dp83640_gettime()
460 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_settime() local
465 err = tdr_write(1, phydev, ts, PTP_LOAD_CLK); in ptp_dp83640_settime()
477 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_enable() local
500 ext_write(0, phydev, PAGE5, PTP_EVNT, evnt); in ptp_dp83640_enable()
535 static void enable_status_frames(struct phy_device *phydev, bool on) in enable_status_frames() argument
537 struct dp83640_private *dp83640 = phydev->priv; in enable_status_frames()
548 ext_write(0, phydev, PAGE5, PSF_CFG0, cfg0); in enable_status_frames()
549 ext_write(0, phydev, PAGE6, PSF_CFG1, ver); in enable_status_frames()
553 if (!phydev->attached_dev) { in enable_status_frames()
559 if (dev_mc_add(phydev->attached_dev, status_frame_dst)) in enable_status_frames()
562 if (dev_mc_del(phydev->attached_dev, status_frame_dst)) in enable_status_frames()
600 static void enable_broadcast(struct phy_device *phydev, int init_page, int on) in enable_broadcast() argument
603 phy_write(phydev, PAGESEL, 0); in enable_broadcast()
604 val = phy_read(phydev, PHYCR2); in enable_broadcast()
609 phy_write(phydev, PHYCR2, val); in enable_broadcast()
610 phy_write(phydev, PAGESEL, init_page); in enable_broadcast()
620 struct phy_device *master = clock->chosen->phydev; in recalibrate()
637 enable_broadcast(tmp->phydev, clock->page, 1); in recalibrate()
638 tmp->cfg0 = ext_read(tmp->phydev, PAGE5, PSF_CFG0); in recalibrate()
639 ext_write(0, tmp->phydev, PAGE5, PSF_CFG0, 0); in recalibrate()
640 ext_write(0, tmp->phydev, PAGE4, PTP_CTL, PTP_ENABLE); in recalibrate()
656 ext_write(0, tmp->phydev, PAGE5, PTP_EVNT, evnt); in recalibrate()
698 val = ext_read(tmp->phydev, PAGE4, PTP_STS); in recalibrate()
700 val = ext_read(tmp->phydev, PAGE4, PTP_ESTS); in recalibrate()
702 event_ts.ns_lo = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
703 event_ts.ns_hi = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
704 event_ts.sec_lo = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
705 event_ts.sec_hi = ext_read(tmp->phydev, PAGE4, PTP_EDATA); in recalibrate()
710 tdr_write(0, tmp->phydev, &ts, PTP_STEP_CLK); in recalibrate()
718 ext_write(0, tmp->phydev, PAGE5, PSF_CFG0, tmp->cfg0); in recalibrate()
1042 struct phy_device *phydev) in choose_this_phy() argument
1047 if (chosen_phy == phydev->addr) in choose_this_phy()
1105 static int dp83640_probe(struct phy_device *phydev) in dp83640_probe() argument
1111 if (phydev->addr == BROADCAST_ADDR) in dp83640_probe()
1114 clock = dp83640_clock_get_bus(phydev->bus); in dp83640_probe()
1122 dp83640->phydev = phydev; in dp83640_probe()
1130 phydev->priv = dp83640; in dp83640_probe()
1138 if (choose_this_phy(clock, phydev)) { in dp83640_probe()
1140 clock->ptp_clock = ptp_clock_register(&clock->caps, &phydev->dev); in dp83640_probe()
1160 static void dp83640_remove(struct phy_device *phydev) in dp83640_remove() argument
1164 struct dp83640_private *tmp, *dp83640 = phydev->priv; in dp83640_remove()
1166 if (phydev->addr == BROADCAST_ADDR) in dp83640_remove()
1169 enable_status_frames(phydev, false); in dp83640_remove()
1194 static int dp83640_config_init(struct phy_device *phydev) in dp83640_config_init() argument
1196 struct dp83640_private *dp83640 = phydev->priv; in dp83640_config_init()
1203 enable_broadcast(phydev, clock->page, 1); in dp83640_config_init()
1207 enable_status_frames(phydev, true); in dp83640_config_init()
1210 ext_write(0, phydev, PAGE4, PTP_CTL, PTP_ENABLE); in dp83640_config_init()
1216 static int dp83640_ack_interrupt(struct phy_device *phydev) in dp83640_ack_interrupt() argument
1218 int err = phy_read(phydev, MII_DP83640_MISR); in dp83640_ack_interrupt()
1226 static int dp83640_config_intr(struct phy_device *phydev) in dp83640_config_intr() argument
1232 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in dp83640_config_intr()
1233 misr = phy_read(phydev, MII_DP83640_MISR); in dp83640_config_intr()
1241 err = phy_write(phydev, MII_DP83640_MISR, misr); in dp83640_config_intr()
1245 micr = phy_read(phydev, MII_DP83640_MICR); in dp83640_config_intr()
1251 return phy_write(phydev, MII_DP83640_MICR, micr); in dp83640_config_intr()
1253 micr = phy_read(phydev, MII_DP83640_MICR); in dp83640_config_intr()
1259 err = phy_write(phydev, MII_DP83640_MICR, micr); in dp83640_config_intr()
1263 misr = phy_read(phydev, MII_DP83640_MISR); in dp83640_config_intr()
1271 return phy_write(phydev, MII_DP83640_MISR, misr); in dp83640_config_intr()
1275 static int dp83640_hwtstamp(struct phy_device *phydev, struct ifreq *ifr) in dp83640_hwtstamp() argument
1277 struct dp83640_private *dp83640 = phydev->priv; in dp83640_hwtstamp()
1353 ext_write(0, phydev, PAGE5, PTP_TXCFG0, txcfg0); in dp83640_hwtstamp()
1354 ext_write(0, phydev, PAGE5, PTP_RXCFG0, rxcfg0); in dp83640_hwtstamp()
1384 static bool dp83640_rxtstamp(struct phy_device *phydev, in dp83640_rxtstamp() argument
1387 struct dp83640_private *dp83640 = phydev->priv; in dp83640_rxtstamp()
1428 static void dp83640_txtstamp(struct phy_device *phydev, in dp83640_txtstamp() argument
1431 struct dp83640_private *dp83640 = phydev->priv; in dp83640_txtstamp()