Lines Matching refs:clock

112 	struct dp83640_clock *clock;  member
234 if (dp83640->clock->page != page) { in ext_read()
236 dp83640->clock->page = page; in ext_read()
249 if (dp83640->clock->page != page) { in ext_write()
251 dp83640->clock->page = page; in ext_write()
306 static int periodic_output(struct dp83640_clock *clock, in periodic_output() argument
310 struct dp83640_private *dp83640 = clock->chosen; in periodic_output()
316 gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PEROUT, in periodic_output()
334 mutex_lock(&clock->extreg_lock); in periodic_output()
337 mutex_unlock(&clock->extreg_lock); in periodic_output()
347 mutex_lock(&clock->extreg_lock); in periodic_output()
371 mutex_unlock(&clock->extreg_lock); in periodic_output()
379 struct dp83640_clock *clock = in ptp_dp83640_adjfreq() local
381 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjfreq()
400 mutex_lock(&clock->extreg_lock); in ptp_dp83640_adjfreq()
405 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_adjfreq()
412 struct dp83640_clock *clock = in ptp_dp83640_adjtime() local
414 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_adjtime()
422 mutex_lock(&clock->extreg_lock); in ptp_dp83640_adjtime()
426 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_adjtime()
434 struct dp83640_clock *clock = in ptp_dp83640_gettime() local
436 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_gettime()
439 mutex_lock(&clock->extreg_lock); in ptp_dp83640_gettime()
448 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_gettime()
459 struct dp83640_clock *clock = in ptp_dp83640_settime() local
461 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_settime()
464 mutex_lock(&clock->extreg_lock); in ptp_dp83640_settime()
468 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_settime()
476 struct dp83640_clock *clock = in ptp_dp83640_enable() local
478 struct phy_device *phydev = clock->chosen->phydev; in ptp_dp83640_enable()
490 gpio_num = 1 + ptp_find_pin(clock->ptp_clock, in ptp_dp83640_enable()
500 mutex_lock(&clock->extreg_lock); in ptp_dp83640_enable()
502 mutex_unlock(&clock->extreg_lock); in ptp_dp83640_enable()
508 return periodic_output(clock, rq, on, rq->perout.index); in ptp_dp83640_enable()
520 struct dp83640_clock *clock = in ptp_dp83640_verify() local
523 if (clock->caps.pin_config[pin].func == PTP_PF_PHYSYNC && in ptp_dp83640_verify()
524 !list_empty(&clock->phylist)) in ptp_dp83640_verify()
539 struct dp83640_clock *clock = dp83640->clock; in enable_status_frames() local
547 mutex_lock(&clock->extreg_lock); in enable_status_frames()
552 mutex_unlock(&clock->extreg_lock); in enable_status_frames()
614 static void recalibrate(struct dp83640_clock *clock) in recalibrate() argument
621 struct phy_device *master = clock->chosen->phydev; in recalibrate()
625 cal_gpio = 1 + ptp_find_pin(clock->ptp_clock, PTP_PF_PHYSYNC, 0); in recalibrate()
631 mutex_lock(&clock->extreg_lock); in recalibrate()
636 list_for_each(this, &clock->phylist) { in recalibrate()
638 enable_broadcast(tmp->phydev, clock->page, 1); in recalibrate()
643 enable_broadcast(master, clock->page, 1); in recalibrate()
655 list_for_each(this, &clock->phylist) { in recalibrate()
697 list_for_each(this, &clock->phylist) { in recalibrate()
717 list_for_each(this, &clock->phylist) { in recalibrate()
723 mutex_unlock(&clock->extreg_lock); in recalibrate()
784 ptp_clock_event(dp83640->clock->ptp_clock, &event); in decode_evnt()
1000 struct dp83640_clock *clock; in dp83640_free_clocks() local
1006 clock = list_entry(this, struct dp83640_clock, list); in dp83640_free_clocks()
1007 if (!list_empty(&clock->phylist)) { in dp83640_free_clocks()
1011 list_del(&clock->list); in dp83640_free_clocks()
1012 mutex_destroy(&clock->extreg_lock); in dp83640_free_clocks()
1013 mutex_destroy(&clock->clock_lock); in dp83640_free_clocks()
1014 put_device(&clock->bus->dev); in dp83640_free_clocks()
1015 kfree(clock->caps.pin_config); in dp83640_free_clocks()
1016 kfree(clock); in dp83640_free_clocks()
1022 static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus) in dp83640_clock_init() argument
1024 INIT_LIST_HEAD(&clock->list); in dp83640_clock_init()
1025 clock->bus = bus; in dp83640_clock_init()
1026 mutex_init(&clock->extreg_lock); in dp83640_clock_init()
1027 mutex_init(&clock->clock_lock); in dp83640_clock_init()
1028 INIT_LIST_HEAD(&clock->phylist); in dp83640_clock_init()
1029 clock->caps.owner = THIS_MODULE; in dp83640_clock_init()
1030 sprintf(clock->caps.name, "dp83640 timer"); in dp83640_clock_init()
1031 clock->caps.max_adj = 1953124; in dp83640_clock_init()
1032 clock->caps.n_alarm = 0; in dp83640_clock_init()
1033 clock->caps.n_ext_ts = N_EXT_TS; in dp83640_clock_init()
1034 clock->caps.n_per_out = N_PER_OUT; in dp83640_clock_init()
1035 clock->caps.n_pins = DP83640_N_PINS; in dp83640_clock_init()
1036 clock->caps.pps = 0; in dp83640_clock_init()
1037 clock->caps.adjfreq = ptp_dp83640_adjfreq; in dp83640_clock_init()
1038 clock->caps.adjtime = ptp_dp83640_adjtime; in dp83640_clock_init()
1039 clock->caps.gettime64 = ptp_dp83640_gettime; in dp83640_clock_init()
1040 clock->caps.settime64 = ptp_dp83640_settime; in dp83640_clock_init()
1041 clock->caps.enable = ptp_dp83640_enable; in dp83640_clock_init()
1042 clock->caps.verify = ptp_dp83640_verify; in dp83640_clock_init()
1046 dp83640_gpio_defaults(clock->caps.pin_config); in dp83640_clock_init()
1053 static int choose_this_phy(struct dp83640_clock *clock, in choose_this_phy() argument
1056 if (chosen_phy == -1 && !clock->chosen) in choose_this_phy()
1065 static struct dp83640_clock *dp83640_clock_get(struct dp83640_clock *clock) in dp83640_clock_get() argument
1067 if (clock) in dp83640_clock_get()
1068 mutex_lock(&clock->clock_lock); in dp83640_clock_get()
1069 return clock; in dp83640_clock_get()
1078 struct dp83640_clock *clock = NULL, *tmp; in dp83640_clock_get_bus() local
1086 clock = tmp; in dp83640_clock_get_bus()
1090 if (clock) in dp83640_clock_get_bus()
1093 clock = kzalloc(sizeof(struct dp83640_clock), GFP_KERNEL); in dp83640_clock_get_bus()
1094 if (!clock) in dp83640_clock_get_bus()
1097 clock->caps.pin_config = kzalloc(sizeof(struct ptp_pin_desc) * in dp83640_clock_get_bus()
1099 if (!clock->caps.pin_config) { in dp83640_clock_get_bus()
1100 kfree(clock); in dp83640_clock_get_bus()
1101 clock = NULL; in dp83640_clock_get_bus()
1104 dp83640_clock_init(clock, bus); in dp83640_clock_get_bus()
1105 list_add_tail(&phyter_clocks, &clock->list); in dp83640_clock_get_bus()
1109 return dp83640_clock_get(clock); in dp83640_clock_get_bus()
1112 static void dp83640_clock_put(struct dp83640_clock *clock) in dp83640_clock_put() argument
1114 mutex_unlock(&clock->clock_lock); in dp83640_clock_put()
1119 struct dp83640_clock *clock; in dp83640_probe() local
1126 clock = dp83640_clock_get_bus(phydev->bus); in dp83640_probe()
1127 if (!clock) in dp83640_probe()
1148 dp83640->clock = clock; in dp83640_probe()
1150 if (choose_this_phy(clock, phydev)) { in dp83640_probe()
1151 clock->chosen = dp83640; in dp83640_probe()
1152 clock->ptp_clock = ptp_clock_register(&clock->caps, &phydev->dev); in dp83640_probe()
1153 if (IS_ERR(clock->ptp_clock)) { in dp83640_probe()
1154 err = PTR_ERR(clock->ptp_clock); in dp83640_probe()
1158 list_add_tail(&dp83640->list, &clock->phylist); in dp83640_probe()
1160 dp83640_clock_put(clock); in dp83640_probe()
1164 clock->chosen = NULL; in dp83640_probe()
1167 dp83640_clock_put(clock); in dp83640_probe()
1174 struct dp83640_clock *clock; in dp83640_remove() local
1187 clock = dp83640_clock_get(dp83640->clock); in dp83640_remove()
1189 if (dp83640 == clock->chosen) { in dp83640_remove()
1190 ptp_clock_unregister(clock->ptp_clock); in dp83640_remove()
1191 clock->chosen = NULL; in dp83640_remove()
1193 list_for_each_safe(this, next, &clock->phylist) { in dp83640_remove()
1202 dp83640_clock_put(clock); in dp83640_remove()
1209 struct dp83640_clock *clock = dp83640->clock; in dp83640_config_init() local
1211 if (clock->chosen && !list_empty(&clock->phylist)) in dp83640_config_init()
1212 recalibrate(clock); in dp83640_config_init()
1214 mutex_lock(&clock->extreg_lock); in dp83640_config_init()
1215 enable_broadcast(phydev, clock->page, 1); in dp83640_config_init()
1216 mutex_unlock(&clock->extreg_lock); in dp83640_config_init()
1221 mutex_lock(&clock->extreg_lock); in dp83640_config_init()
1223 mutex_unlock(&clock->extreg_lock); in dp83640_config_init()
1363 mutex_lock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1368 mutex_unlock(&dp83640->clock->extreg_lock); in dp83640_hwtstamp()
1479 info->phc_index = ptp_clock_index(dp83640->clock->ptp_clock); in dp83640_ts_info()