Lines Matching refs:clock

107 	struct dp83640_clock *clock;  member
231 if (dp83640->clock->page != page) { in ext_read()
233 dp83640->clock->page = page; in ext_read()
246 if (dp83640->clock->page != page) { in ext_write()
248 dp83640->clock->page = page; in ext_write()
303 static int periodic_output(struct dp83640_clock *clock, in periodic_output() argument
307 struct dp83640_private *dp83640 = clock->chosen; in periodic_output()
313 gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PEROUT, in periodic_output()
331 mutex_lock(&clock->extreg_lock); in periodic_output()
334 mutex_unlock(&clock->extreg_lock); in periodic_output()
344 mutex_lock(&clock->extreg_lock); in periodic_output()
368 mutex_unlock(&clock->extreg_lock); in periodic_output()
376 struct dp83640_clock *clock = in ptp_dp83640_adjfine() local
378 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjfine()
397 mutex_lock(&clock->extreg_lock); in ptp_dp83640_adjfine()
402 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_adjfine()
409 struct dp83640_clock *clock = in ptp_dp83640_adjtime() local
411 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjtime()
419 mutex_lock(&clock->extreg_lock); in ptp_dp83640_adjtime()
423 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_adjtime()
431 struct dp83640_clock *clock = in ptp_dp83640_gettime() local
433 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_gettime()
436 mutex_lock(&clock->extreg_lock); in ptp_dp83640_gettime()
445 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_gettime()
456 struct dp83640_clock *clock = in ptp_dp83640_settime() local
458 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_settime()
461 mutex_lock(&clock->extreg_lock); in ptp_dp83640_settime()
465 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_settime()
473 struct dp83640_clock *clock = in ptp_dp83640_enable() local
475 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_enable()
493 gpio_num = 1 + ptp_find_pin(clock->ptp_clock, in ptp_dp83640_enable()
503 mutex_lock(&clock->extreg_lock); in ptp_dp83640_enable()
505 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_enable()
511 return periodic_output(clock, rq, on, rq->perout.index); in ptp_dp83640_enable()
523 struct dp83640_clock *clock = in ptp_dp83640_verify() local
526 if (clock->caps.pin_config[pin].func == PTP_PF_PHYSYNC && in ptp_dp83640_verify()
527 !list_empty(&clock->phylist)) in ptp_dp83640_verify()
542 struct dp83640_clock *clock = dp83640->clock; in enable_status_frames() local
550 mutex_lock(&clock->extreg_lock); in enable_status_frames()
555 mutex_unlock(&clock->extreg_lock); in enable_status_frames()
619 static void recalibrate(struct dp83640_clock *clock) in recalibrate() argument
625 struct phy_device *master = clock->chosen->phydev; in recalibrate()
629 cal_gpio = 1 + ptp_find_pin_unlocked(clock->ptp_clock, PTP_PF_PHYSYNC, 0); in recalibrate()
635 mutex_lock(&clock->extreg_lock); in recalibrate()
640 list_for_each_entry(tmp, &clock->phylist, list) { in recalibrate()
641 enable_broadcast(tmp->phydev, clock->page, 1); in recalibrate()
646 enable_broadcast(master, clock->page, 1); in recalibrate()
658 list_for_each_entry(tmp, &clock->phylist, list) in recalibrate()
698 list_for_each_entry(tmp, &clock->phylist, list) { in recalibrate()
718 list_for_each_entry(tmp, &clock->phylist, list) in recalibrate()
722 mutex_unlock(&clock->extreg_lock); in recalibrate()
786 ptp_clock_event(dp83640->clock->ptp_clock, &event); in decode_evnt()
958 struct dp83640_clock *clock; in dp83640_free_clocks() local
964 clock = list_entry(this, struct dp83640_clock, list); in dp83640_free_clocks()
965 if (!list_empty(&clock->phylist)) { in dp83640_free_clocks()
969 list_del(&clock->list); in dp83640_free_clocks()
970 mutex_destroy(&clock->extreg_lock); in dp83640_free_clocks()
971 mutex_destroy(&clock->clock_lock); in dp83640_free_clocks()
972 put_device(&clock->bus->dev); in dp83640_free_clocks()
973 kfree(clock->caps.pin_config); in dp83640_free_clocks()
974 kfree(clock); in dp83640_free_clocks()
980 static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus) in dp83640_clock_init() argument
982 INIT_LIST_HEAD(&clock->list); in dp83640_clock_init()
983 clock->bus = bus; in dp83640_clock_init()
984 mutex_init(&clock->extreg_lock); in dp83640_clock_init()
985 mutex_init(&clock->clock_lock); in dp83640_clock_init()
986 INIT_LIST_HEAD(&clock->phylist); in dp83640_clock_init()
987 clock->caps.owner = THIS_MODULE; in dp83640_clock_init()
988 sprintf(clock->caps.name, "dp83640 timer"); in dp83640_clock_init()
989 clock->caps.max_adj = 1953124; in dp83640_clock_init()
990 clock->caps.n_alarm = 0; in dp83640_clock_init()
991 clock->caps.n_ext_ts = N_EXT_TS; in dp83640_clock_init()
992 clock->caps.n_per_out = N_PER_OUT; in dp83640_clock_init()
993 clock->caps.n_pins = DP83640_N_PINS; in dp83640_clock_init()
994 clock->caps.pps = 0; in dp83640_clock_init()
995 clock->caps.supported_extts_flags = PTP_RISING_EDGE | in dp83640_clock_init()
998 clock->caps.adjfine = ptp_dp83640_adjfine; in dp83640_clock_init()
999 clock->caps.adjtime = ptp_dp83640_adjtime; in dp83640_clock_init()
1000 clock->caps.gettime64 = ptp_dp83640_gettime; in dp83640_clock_init()
1001 clock->caps.settime64 = ptp_dp83640_settime; in dp83640_clock_init()
1002 clock->caps.enable = ptp_dp83640_enable; in dp83640_clock_init()
1003 clock->caps.verify = ptp_dp83640_verify; in dp83640_clock_init()
1007 dp83640_gpio_defaults(clock->caps.pin_config); in dp83640_clock_init()
1014 static int choose_this_phy(struct dp83640_clock *clock, in choose_this_phy() argument
1017 if (chosen_phy == -1 && !clock->chosen) in choose_this_phy()
1026 static struct dp83640_clock *dp83640_clock_get(struct dp83640_clock *clock) in dp83640_clock_get() argument
1028 if (clock) in dp83640_clock_get()
1029 mutex_lock(&clock->clock_lock); in dp83640_clock_get()
1030 return clock; in dp83640_clock_get()
1039 struct dp83640_clock *clock = NULL, *tmp; in dp83640_clock_get_bus() local
1047 clock = tmp; in dp83640_clock_get_bus()
1051 if (clock) in dp83640_clock_get_bus()
1054 clock = kzalloc(sizeof(struct dp83640_clock), GFP_KERNEL); in dp83640_clock_get_bus()
1055 if (!clock) in dp83640_clock_get_bus()
1058 clock->caps.pin_config = kcalloc(DP83640_N_PINS, in dp83640_clock_get_bus()
1061 if (!clock->caps.pin_config) { in dp83640_clock_get_bus()
1062 kfree(clock); in dp83640_clock_get_bus()
1063 clock = NULL; in dp83640_clock_get_bus()
1066 dp83640_clock_init(clock, bus); in dp83640_clock_get_bus()
1067 list_add_tail(&clock->list, &phyter_clocks); in dp83640_clock_get_bus()
1071 return dp83640_clock_get(clock); in dp83640_clock_get_bus()
1074 static void dp83640_clock_put(struct dp83640_clock *clock) in dp83640_clock_put() argument
1076 mutex_unlock(&clock->clock_lock); in dp83640_clock_put()
1099 struct dp83640_clock *clock = dp83640->clock; in dp83640_config_init() local
1101 if (clock->chosen && !list_empty(&clock->phylist)) in dp83640_config_init()
1102 recalibrate(clock); in dp83640_config_init()
1104 mutex_lock(&clock->extreg_lock); in dp83640_config_init()
1105 enable_broadcast(phydev, clock->page, 1); in dp83640_config_init()
1106 mutex_unlock(&clock->extreg_lock); in dp83640_config_init()
1111 mutex_lock(&clock->extreg_lock); in dp83640_config_init()
1113 mutex_unlock(&clock->extreg_lock); in dp83640_config_init()
1279 mutex_lock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1284 mutex_unlock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1400 info->phc_index = ptp_clock_index(dp83640->clock->ptp_clock); in dp83640_ts_info()
1416 struct dp83640_clock *clock; in dp83640_probe() local
1423 clock = dp83640_clock_get_bus(phydev->mdio.bus); in dp83640_probe()
1424 if (!clock) in dp83640_probe()
1452 dp83640->clock = clock; in dp83640_probe()
1454 if (choose_this_phy(clock, phydev)) { in dp83640_probe()
1455 clock->chosen = dp83640; in dp83640_probe()
1456 clock->ptp_clock = ptp_clock_register(&clock->caps, in dp83640_probe()
1458 if (IS_ERR(clock->ptp_clock)) { in dp83640_probe()
1459 err = PTR_ERR(clock->ptp_clock); in dp83640_probe()
1463 list_add_tail(&dp83640->list, &clock->phylist); in dp83640_probe()
1465 dp83640_clock_put(clock); in dp83640_probe()
1469 clock->chosen = NULL; in dp83640_probe()
1472 dp83640_clock_put(clock); in dp83640_probe()
1479 struct dp83640_clock *clock; in dp83640_remove() local
1494 clock = dp83640_clock_get(dp83640->clock); in dp83640_remove()
1496 if (dp83640 == clock->chosen) { in dp83640_remove()
1497 ptp_clock_unregister(clock->ptp_clock); in dp83640_remove()
1498 clock->chosen = NULL; in dp83640_remove()
1500 list_for_each_safe(this, next, &clock->phylist) { in dp83640_remove()
1509 dp83640_clock_put(clock); in dp83640_remove()