Lines Matching refs:clock
111 struct dp83640_clock *clock; member
233 if (dp83640->clock->page != page) { in ext_read()
235 dp83640->clock->page = page; in ext_read()
248 if (dp83640->clock->page != page) { in ext_write()
250 dp83640->clock->page = page; in ext_write()
305 static int periodic_output(struct dp83640_clock *clock, in periodic_output() argument
309 struct dp83640_private *dp83640 = clock->chosen; in periodic_output()
315 gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PEROUT, in periodic_output()
333 mutex_lock(&clock->extreg_lock); in periodic_output()
336 mutex_unlock(&clock->extreg_lock); in periodic_output()
346 mutex_lock(&clock->extreg_lock); in periodic_output()
370 mutex_unlock(&clock->extreg_lock); in periodic_output()
378 struct dp83640_clock *clock = in ptp_dp83640_adjfreq() local
380 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjfreq()
399 mutex_lock(&clock->extreg_lock); in ptp_dp83640_adjfreq()
404 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_adjfreq()
411 struct dp83640_clock *clock = in ptp_dp83640_adjtime() local
413 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjtime()
421 mutex_lock(&clock->extreg_lock); in ptp_dp83640_adjtime()
425 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_adjtime()
433 struct dp83640_clock *clock = in ptp_dp83640_gettime() local
435 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_gettime()
438 mutex_lock(&clock->extreg_lock); in ptp_dp83640_gettime()
447 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_gettime()
458 struct dp83640_clock *clock = in ptp_dp83640_settime() local
460 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_settime()
463 mutex_lock(&clock->extreg_lock); in ptp_dp83640_settime()
467 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_settime()
475 struct dp83640_clock *clock = in ptp_dp83640_enable() local
477 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_enable()
489 gpio_num = 1 + ptp_find_pin(clock->ptp_clock, in ptp_dp83640_enable()
499 mutex_lock(&clock->extreg_lock); in ptp_dp83640_enable()
501 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_enable()
507 return periodic_output(clock, rq, on, rq->perout.index); in ptp_dp83640_enable()
519 struct dp83640_clock *clock = in ptp_dp83640_verify() local
522 if (clock->caps.pin_config[pin].func == PTP_PF_PHYSYNC && in ptp_dp83640_verify()
523 !list_empty(&clock->phylist)) in ptp_dp83640_verify()
538 struct dp83640_clock *clock = dp83640->clock; in enable_status_frames() local
546 mutex_lock(&clock->extreg_lock); in enable_status_frames()
551 mutex_unlock(&clock->extreg_lock); in enable_status_frames()
613 static void recalibrate(struct dp83640_clock *clock) in recalibrate() argument
620 struct phy_device *master = clock->chosen->phydev; in recalibrate()
624 cal_gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PHYSYNC, 0); in recalibrate()
630 mutex_lock(&clock->extreg_lock); in recalibrate()
635 list_for_each(this, &clock->phylist) { in recalibrate()
637 enable_broadcast(tmp->phydev, clock->page, 1); in recalibrate()
642 enable_broadcast(master, clock->page, 1); in recalibrate()
654 list_for_each(this, &clock->phylist) { in recalibrate()
696 list_for_each(this, &clock->phylist) { in recalibrate()
716 list_for_each(this, &clock->phylist) { in recalibrate()
722 mutex_unlock(&clock->extreg_lock); in recalibrate()
783 ptp_clock_event(dp83640->clock->ptp_clock, &event); in decode_evnt()
988 struct dp83640_clock *clock; in dp83640_free_clocks() local
994 clock = list_entry(this, struct dp83640_clock, list); in dp83640_free_clocks()
995 if (!list_empty(&clock->phylist)) { in dp83640_free_clocks()
999 list_del(&clock->list); in dp83640_free_clocks()
1000 mutex_destroy(&clock->extreg_lock); in dp83640_free_clocks()
1001 mutex_destroy(&clock->clock_lock); in dp83640_free_clocks()
1002 put_device(&clock->bus->dev); in dp83640_free_clocks()
1003 kfree(clock->caps.pin_config); in dp83640_free_clocks()
1004 kfree(clock); in dp83640_free_clocks()
1010 static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus) in dp83640_clock_init() argument
1012 INIT_LIST_HEAD(&clock->list); in dp83640_clock_init()
1013 clock->bus = bus; in dp83640_clock_init()
1014 mutex_init(&clock->extreg_lock); in dp83640_clock_init()
1015 mutex_init(&clock->clock_lock); in dp83640_clock_init()
1016 INIT_LIST_HEAD(&clock->phylist); in dp83640_clock_init()
1017 clock->caps.owner = THIS_MODULE; in dp83640_clock_init()
1018 sprintf(clock->caps.name, "dp83640 timer"); in dp83640_clock_init()
1019 clock->caps.max_adj = 1953124; in dp83640_clock_init()
1020 clock->caps.n_alarm = 0; in dp83640_clock_init()
1021 clock->caps.n_ext_ts = N_EXT_TS; in dp83640_clock_init()
1022 clock->caps.n_per_out = N_PER_OUT; in dp83640_clock_init()
1023 clock->caps.n_pins = DP83640_N_PINS; in dp83640_clock_init()
1024 clock->caps.pps = 0; in dp83640_clock_init()
1025 clock->caps.adjfreq = ptp_dp83640_adjfreq; in dp83640_clock_init()
1026 clock->caps.adjtime = ptp_dp83640_adjtime; in dp83640_clock_init()
1027 clock->caps.gettime64 = ptp_dp83640_gettime; in dp83640_clock_init()
1028 clock->caps.settime64 = ptp_dp83640_settime; in dp83640_clock_init()
1029 clock->caps.enable = ptp_dp83640_enable; in dp83640_clock_init()
1030 clock->caps.verify = ptp_dp83640_verify; in dp83640_clock_init()
1034 dp83640_gpio_defaults(clock->caps.pin_config); in dp83640_clock_init()
1041 static int choose_this_phy(struct dp83640_clock *clock, in choose_this_phy() argument
1044 if (chosen_phy == -1 && !clock->chosen) in choose_this_phy()
1053 static struct dp83640_clock *dp83640_clock_get(struct dp83640_clock *clock) in dp83640_clock_get() argument
1055 if (clock) in dp83640_clock_get()
1056 mutex_lock(&clock->clock_lock); in dp83640_clock_get()
1057 return clock; in dp83640_clock_get()
1066 struct dp83640_clock *clock = NULL, *tmp; in dp83640_clock_get_bus() local
1074 clock = tmp; in dp83640_clock_get_bus()
1078 if (clock) in dp83640_clock_get_bus()
1081 clock = kzalloc(sizeof(struct dp83640_clock), GFP_KERNEL); in dp83640_clock_get_bus()
1082 if (!clock) in dp83640_clock_get_bus()
1085 clock->caps.pin_config = kzalloc(sizeof(struct ptp_pin_desc) * in dp83640_clock_get_bus()
1087 if (!clock->caps.pin_config) { in dp83640_clock_get_bus()
1088 kfree(clock); in dp83640_clock_get_bus()
1089 clock = NULL; in dp83640_clock_get_bus()
1092 dp83640_clock_init(clock, bus); in dp83640_clock_get_bus()
1093 list_add_tail(&phyter_clocks, &clock->list); in dp83640_clock_get_bus()
1097 return dp83640_clock_get(clock); in dp83640_clock_get_bus()
1100 static void dp83640_clock_put(struct dp83640_clock *clock) in dp83640_clock_put() argument
1102 mutex_unlock(&clock->clock_lock); in dp83640_clock_put()
1107 struct dp83640_clock *clock; in dp83640_probe() local
1114 clock = dp83640_clock_get_bus(phydev->bus); in dp83640_probe()
1115 if (!clock) in dp83640_probe()
1136 dp83640->clock = clock; in dp83640_probe()
1138 if (choose_this_phy(clock, phydev)) { in dp83640_probe()
1139 clock->chosen = dp83640; in dp83640_probe()
1140 clock->ptp_clock = ptp_clock_register(&clock->caps, &phydev->dev); in dp83640_probe()
1141 if (IS_ERR(clock->ptp_clock)) { in dp83640_probe()
1142 err = PTR_ERR(clock->ptp_clock); in dp83640_probe()
1146 list_add_tail(&dp83640->list, &clock->phylist); in dp83640_probe()
1148 dp83640_clock_put(clock); in dp83640_probe()
1152 clock->chosen = NULL; in dp83640_probe()
1155 dp83640_clock_put(clock); in dp83640_probe()
1162 struct dp83640_clock *clock; in dp83640_remove() local
1175 clock = dp83640_clock_get(dp83640->clock); in dp83640_remove()
1177 if (dp83640 == clock->chosen) { in dp83640_remove()
1178 ptp_clock_unregister(clock->ptp_clock); in dp83640_remove()
1179 clock->chosen = NULL; in dp83640_remove()
1181 list_for_each_safe(this, next, &clock->phylist) { in dp83640_remove()
1190 dp83640_clock_put(clock); in dp83640_remove()
1197 struct dp83640_clock *clock = dp83640->clock; in dp83640_config_init() local
1199 if (clock->chosen && !list_empty(&clock->phylist)) in dp83640_config_init()
1200 recalibrate(clock); in dp83640_config_init()
1202 mutex_lock(&clock->extreg_lock); in dp83640_config_init()
1203 enable_broadcast(phydev, clock->page, 1); in dp83640_config_init()
1204 mutex_unlock(&clock->extreg_lock); in dp83640_config_init()
1209 mutex_lock(&clock->extreg_lock); in dp83640_config_init()
1211 mutex_unlock(&clock->extreg_lock); in dp83640_config_init()
1351 mutex_lock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1356 mutex_unlock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1461 info->phc_index = ptp_clock_index(dp83640->clock->ptp_clock); in dp83640_ts_info()