diff mbox series

[net,3/4] ptp: ptp_idt82p33: use do_aux_work for delay work

Message ID 1596815885-11094-1-git-send-email-min.li.xe@renesas.com
State New
Headers show
Series None | expand

Commit Message

Min Li Aug. 7, 2020, 3:58 p.m. UTC
From: Min Li <min.li.xe@renesas.com>

Instead of declaring its own delay_work, use ptp_clock provided do_aux_work
to configure sync_tod.

Signed-off-by: Min Li <min.li.xe@renesas.com>
---
 drivers/ptp/ptp_idt82p33.c | 24 ++++++++++++------------
 drivers/ptp/ptp_idt82p33.h |  2 --
 2 files changed, 12 insertions(+), 14 deletions(-)

Comments

Min Li Oct. 15, 2020, 7:30 p.m. UTC | #1
Hi David/Richard

When you have time, can you take a look at this change? Thanks

Min

-----Original Message-----
From: min.li.xe@renesas.com <min.li.xe@renesas.com> 
Sent: August 7, 2020 11:58 AM
To: richardcochran@gmail.com
Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Min Li <min.li.xe@renesas.com>
Subject: [PATCH net 3/4] ptp: ptp_idt82p33: use do_aux_work for delay work

From: Min Li <min.li.xe@renesas.com>

Instead of declaring its own delay_work, use ptp_clock provided do_aux_work to configure sync_tod.

Signed-off-by: Min Li <min.li.xe@renesas.com>
---
 drivers/ptp/ptp_idt82p33.c | 24 ++++++++++++------------  drivers/ptp/ptp_idt82p33.h |  2 --
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/ptp/ptp_idt82p33.c b/drivers/ptp/ptp_idt82p33.c index 189bb81..2d62aed 100644
--- a/drivers/ptp/ptp_idt82p33.c
+++ b/drivers/ptp/ptp_idt82p33.c
@@ -531,8 +531,8 @@ static int idt82p33_sync_tod(struct idt82p33_channel *channel, bool enable)
 
 	if (enable == channel->sync_tod_on) {
 		if (enable && sync_tod_timeout) {
-			mod_delayed_work(system_wq, &channel->sync_tod_work,
-					 sync_tod_timeout * HZ);
+			ptp_schedule_worker(channel->ptp_clock,
+					    sync_tod_timeout * HZ);
 		}
 		return 0;
 	}
@@ -555,24 +555,27 @@ static int idt82p33_sync_tod(struct idt82p33_channel *channel, bool enable)
 	channel->sync_tod_on = enable;
 
 	if (enable && sync_tod_timeout) {
-		mod_delayed_work(system_wq, &channel->sync_tod_work,
-				 sync_tod_timeout * HZ);
+		ptp_schedule_worker(channel->ptp_clock,
+				    sync_tod_timeout * HZ);
 	}
 
 	return 0;
 }
 
-static void idt82p33_sync_tod_work_handler(struct work_struct *work)
+static long idt82p33_sync_tod_work_handler(struct ptp_clock_info *ptp)
 {
 	struct idt82p33_channel *channel =
-		container_of(work, struct idt82p33_channel, sync_tod_work.work);
+			container_of(ptp, struct idt82p33_channel, caps);
 	struct idt82p33 *idt82p33 = channel->idt82p33;
+	int ret;
 
 	mutex_lock(&idt82p33->reg_lock);
 
-	(void)idt82p33_sync_tod(channel, false);
+	ret = idt82p33_sync_tod(channel, false);
 
 	mutex_unlock(&idt82p33->reg_lock);
+
+	return ret;
 }
 
 static int idt82p33_pps_enable(struct idt82p33_channel *channel, bool enable) @@ -659,10 +662,8 @@ static void idt82p33_ptp_clock_unregister_all(struct idt82p33 *idt82p33)
 
 		channel = &idt82p33->channel[i];
 
-		if (channel->ptp_clock) {
+		if (channel->ptp_clock)
 			ptp_clock_unregister(channel->ptp_clock);
-			cancel_delayed_work_sync(&channel->sync_tod_work);
-		}
 	}
 }
 
@@ -862,8 +863,6 @@ static int idt82p33_channel_init(struct idt82p33_channel *channel, int index)
 		return -EINVAL;
 	}
 
-	INIT_DELAYED_WORK(&channel->sync_tod_work,
-			  idt82p33_sync_tod_work_handler);
 	channel->sync_tod_on = false;
 	channel->current_freq_ppb = 0;
 
@@ -881,6 +880,7 @@ static void idt82p33_caps_init(struct ptp_clock_info *caps)
 	caps->gettime64 = idt82p33_gettime;
 	caps->settime64 = idt82p33_settime;
 	caps->enable = idt82p33_enable;
+	caps->do_aux_work = idt82p33_sync_tod_work_handler;
 }
 
 static int idt82p33_enable_channel(struct idt82p33 *idt82p33, u32 index) diff --git a/drivers/ptp/ptp_idt82p33.h b/drivers/ptp/ptp_idt82p33.h index 9d46966..1dcd2c0 100644
--- a/drivers/ptp/ptp_idt82p33.h
+++ b/drivers/ptp/ptp_idt82p33.h
@@ -119,8 +119,6 @@ struct idt82p33_channel {
 	struct ptp_clock	*ptp_clock;
 	struct idt82p33	*idt82p33;
 	enum pll_mode	pll_mode;
-	/* task to turn off SYNC_TOD bit after pps sync */
-	struct delayed_work	sync_tod_work;
 	bool			sync_tod_on;
 	s32			current_freq_ppb;
 	u8			output_mask;
--
2.7.4
diff mbox series

Patch

diff --git a/drivers/ptp/ptp_idt82p33.c b/drivers/ptp/ptp_idt82p33.c
index 189bb81..2d62aed 100644
--- a/drivers/ptp/ptp_idt82p33.c
+++ b/drivers/ptp/ptp_idt82p33.c
@@ -531,8 +531,8 @@  static int idt82p33_sync_tod(struct idt82p33_channel *channel, bool enable)
 
 	if (enable == channel->sync_tod_on) {
 		if (enable && sync_tod_timeout) {
-			mod_delayed_work(system_wq, &channel->sync_tod_work,
-					 sync_tod_timeout * HZ);
+			ptp_schedule_worker(channel->ptp_clock,
+					    sync_tod_timeout * HZ);
 		}
 		return 0;
 	}
@@ -555,24 +555,27 @@  static int idt82p33_sync_tod(struct idt82p33_channel *channel, bool enable)
 	channel->sync_tod_on = enable;
 
 	if (enable && sync_tod_timeout) {
-		mod_delayed_work(system_wq, &channel->sync_tod_work,
-				 sync_tod_timeout * HZ);
+		ptp_schedule_worker(channel->ptp_clock,
+				    sync_tod_timeout * HZ);
 	}
 
 	return 0;
 }
 
-static void idt82p33_sync_tod_work_handler(struct work_struct *work)
+static long idt82p33_sync_tod_work_handler(struct ptp_clock_info *ptp)
 {
 	struct idt82p33_channel *channel =
-		container_of(work, struct idt82p33_channel, sync_tod_work.work);
+			container_of(ptp, struct idt82p33_channel, caps);
 	struct idt82p33 *idt82p33 = channel->idt82p33;
+	int ret;
 
 	mutex_lock(&idt82p33->reg_lock);
 
-	(void)idt82p33_sync_tod(channel, false);
+	ret = idt82p33_sync_tod(channel, false);
 
 	mutex_unlock(&idt82p33->reg_lock);
+
+	return ret;
 }
 
 static int idt82p33_pps_enable(struct idt82p33_channel *channel, bool enable)
@@ -659,10 +662,8 @@  static void idt82p33_ptp_clock_unregister_all(struct idt82p33 *idt82p33)
 
 		channel = &idt82p33->channel[i];
 
-		if (channel->ptp_clock) {
+		if (channel->ptp_clock)
 			ptp_clock_unregister(channel->ptp_clock);
-			cancel_delayed_work_sync(&channel->sync_tod_work);
-		}
 	}
 }
 
@@ -862,8 +863,6 @@  static int idt82p33_channel_init(struct idt82p33_channel *channel, int index)
 		return -EINVAL;
 	}
 
-	INIT_DELAYED_WORK(&channel->sync_tod_work,
-			  idt82p33_sync_tod_work_handler);
 	channel->sync_tod_on = false;
 	channel->current_freq_ppb = 0;
 
@@ -881,6 +880,7 @@  static void idt82p33_caps_init(struct ptp_clock_info *caps)
 	caps->gettime64 = idt82p33_gettime;
 	caps->settime64 = idt82p33_settime;
 	caps->enable = idt82p33_enable;
+	caps->do_aux_work = idt82p33_sync_tod_work_handler;
 }
 
 static int idt82p33_enable_channel(struct idt82p33 *idt82p33, u32 index)
diff --git a/drivers/ptp/ptp_idt82p33.h b/drivers/ptp/ptp_idt82p33.h
index 9d46966..1dcd2c0 100644
--- a/drivers/ptp/ptp_idt82p33.h
+++ b/drivers/ptp/ptp_idt82p33.h
@@ -119,8 +119,6 @@  struct idt82p33_channel {
 	struct ptp_clock	*ptp_clock;
 	struct idt82p33	*idt82p33;
 	enum pll_mode	pll_mode;
-	/* task to turn off SYNC_TOD bit after pps sync */
-	struct delayed_work	sync_tod_work;
 	bool			sync_tod_on;
 	s32			current_freq_ppb;
 	u8			output_mask;