Lines Matching refs:clock

88 	struct dp83640_clock *clock;
113 /* we create one clock instance per MII bus */
127 /* reference to our PTP hardware clock */
154 "The address of the PHY to use for the ancillary clock features");
179 if (dp83640->clock->page != page) {
181 dp83640->clock->page = page;
194 if (dp83640->clock->page != page) {
196 dp83640->clock->page = page;
251 static void periodic_output(struct dp83640_clock *clock,
254 struct dp83640_private *dp83640 = clock->chosen;
272 mutex_lock(&clock->extreg_lock);
275 mutex_unlock(&clock->extreg_lock);
284 mutex_lock(&clock->extreg_lock);
303 mutex_unlock(&clock->extreg_lock);
306 /* ptp clock methods */
310 struct dp83640_clock *clock =
312 struct phy_device *phydev = clock->chosen->phydev;
331 mutex_lock(&clock->extreg_lock);
336 mutex_unlock(&clock->extreg_lock);
343 struct dp83640_clock *clock =
345 struct phy_device *phydev = clock->chosen->phydev;
353 mutex_lock(&clock->extreg_lock);
357 mutex_unlock(&clock->extreg_lock);
364 struct dp83640_clock *clock =
366 struct phy_device *phydev = clock->chosen->phydev;
369 mutex_lock(&clock->extreg_lock);
378 mutex_unlock(&clock->extreg_lock);
389 struct dp83640_clock *clock =
391 struct phy_device *phydev = clock->chosen->phydev;
394 mutex_lock(&clock->extreg_lock);
398 mutex_unlock(&clock->extreg_lock);
406 struct dp83640_clock *clock =
408 struct phy_device *phydev = clock->chosen->phydev;
430 periodic_output(clock, rq, on);
500 /* synchronize the phyters so they act as one clock */
515 static void recalibrate(struct dp83640_clock *clock)
522 struct phy_device *master = clock->chosen->phydev;
528 mutex_lock(&clock->extreg_lock);
531 * enable broadcast, disable status frames, enable ptp clock
533 list_for_each(this, &clock->phylist) {
535 enable_broadcast(tmp->phydev, clock->page, 1);
540 enable_broadcast(master, clock->page, 1);
552 list_for_each(this, &clock->phylist) {
594 list_for_each(this, &clock->phylist) {
614 list_for_each(this, &clock->phylist) {
620 mutex_unlock(&clock->extreg_lock);
671 ptp_clock_event(dp83640->clock->ptp_clock, &event);
842 struct dp83640_clock *clock;
848 clock = list_entry(this, struct dp83640_clock, list);
849 if (!list_empty(&clock->phylist)) {
853 list_del(&clock->list);
854 mutex_destroy(&clock->extreg_lock);
855 mutex_destroy(&clock->clock_lock);
856 put_device(&clock->bus->dev);
857 kfree(clock);
863 static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus)
865 INIT_LIST_HEAD(&clock->list);
866 clock->bus = bus;
867 mutex_init(&clock->extreg_lock);
868 mutex_init(&clock->clock_lock);
869 INIT_LIST_HEAD(&clock->phylist);
870 clock->caps.owner = THIS_MODULE;
871 sprintf(clock->caps.name, "dp83640 timer");
872 clock->caps.max_adj = 1953124;
873 clock->caps.n_alarm = 0;
874 clock->caps.n_ext_ts = N_EXT_TS;
875 clock->caps.n_per_out = 1;
876 clock->caps.pps = 0;
877 clock->caps.adjfreq = ptp_dp83640_adjfreq;
878 clock->caps.adjtime = ptp_dp83640_adjtime;
879 clock->caps.gettime = ptp_dp83640_gettime;
880 clock->caps.settime = ptp_dp83640_settime;
881 clock->caps.enable = ptp_dp83640_enable;
888 static int choose_this_phy(struct dp83640_clock *clock,
891 if (chosen_phy == -1 && !clock->chosen)
900 static struct dp83640_clock *dp83640_clock_get(struct dp83640_clock *clock)
902 if (clock)
903 mutex_lock(&clock->clock_lock);
904 return clock;
908 * Look up and lock a clock by bus instance.
909 * If there is no clock for this bus, then create it first.
913 struct dp83640_clock *clock = NULL, *tmp;
921 clock = tmp;
925 if (clock)
928 clock = kzalloc(sizeof(struct dp83640_clock), GFP_KERNEL);
929 if (!clock)
932 dp83640_clock_init(clock, bus);
933 list_add_tail(&phyter_clocks, &clock->list);
937 return dp83640_clock_get(clock);
940 static void dp83640_clock_put(struct dp83640_clock *clock)
942 mutex_unlock(&clock->clock_lock);
947 struct dp83640_clock *clock;
954 clock = dp83640_clock_get_bus(phydev->bus);
955 if (!clock)
976 dp83640->clock = clock;
978 if (choose_this_phy(clock, phydev)) {
979 clock->chosen = dp83640;
980 clock->ptp_clock = ptp_clock_register(&clock->caps);
981 if (IS_ERR(clock->ptp_clock)) {
982 err = PTR_ERR(clock->ptp_clock);
986 list_add_tail(&dp83640->list, &clock->phylist);
988 if (clock->chosen && !list_empty(&clock->phylist))
989 recalibrate(clock);
991 enable_broadcast(dp83640->phydev, clock->page, 1);
993 dp83640_clock_put(clock);
997 clock->chosen = NULL;
1000 dp83640_clock_put(clock);
1007 struct dp83640_clock *clock;
1024 clock = dp83640_clock_get(dp83640->clock);
1026 if (dp83640 == clock->chosen) {
1027 ptp_clock_unregister(clock->ptp_clock);
1028 clock->chosen = NULL;
1030 list_for_each_safe(this, next, &clock->phylist) {
1039 dp83640_clock_put(clock);
1119 mutex_lock(&dp83640->clock->extreg_lock);
1129 mutex_unlock(&dp83640->clock->extreg_lock);