summaryrefslogtreecommitdiff
path: root/drivers/net/dsa/microchip/ksz_ptp.c
diff options
context:
space:
mode:
authorArun Ramadoss <arun.ramadoss@microchip.com>2023-01-10 14:19:30 +0530
committerDavid S. Miller <davem@davemloft.net>2023-01-13 08:40:41 +0000
commit168a5940c7452f169b4656011ddcd8225a0d3bc5 (patch)
tree48447565cac4c97990ce2a5bebdbd125c8945bd7 /drivers/net/dsa/microchip/ksz_ptp.c
parentd6261f0b80ba1f694e1303a507dfa046ee77b1e2 (diff)
net: dsa: microchip: ptp: lan937x: Enable periodic output in LED pins
There is difference in implementation of per_out pins between KSZ9563 and LAN937x. In KSZ9563, Timestamping control register (0x052C) bit 6, if 1 - timestamp input and 0 - trigger output. But it is opposite for LAN937x 1 - trigger output and 0 - timestamp input. As per per_out gpio pins, KSZ9563 has four Led pins and two dedicated gpio pins. But in LAN937x dedicated gpio pins are removed instead there are up to 10 LED pins out of which LED_0 and LED_1 can be mapped to PTP tou 0, 1 or 2. This patch sets the bit 6 in 0x052C register and configure the LED override and source register for LAN937x series of switches alone. Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa/microchip/ksz_ptp.c')
-rw-r--r--drivers/net/dsa/microchip/ksz_ptp.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/net/dsa/microchip/ksz_ptp.c b/drivers/net/dsa/microchip/ksz_ptp.c
index 3ba36d33e830..a66a256f8814 100644
--- a/drivers/net/dsa/microchip/ksz_ptp.c
+++ b/drivers/net/dsa/microchip/ksz_ptp.c
@@ -32,6 +32,28 @@
#define KSZ_PTP_INT_START 13
+static int ksz_ptp_tou_gpio(struct ksz_device *dev)
+{
+ int ret;
+
+ if (!is_lan937x(dev))
+ return 0;
+
+ ret = ksz_rmw32(dev, REG_PTP_CTRL_STAT__4, GPIO_OUT,
+ GPIO_OUT);
+ if (ret)
+ return ret;
+
+ ret = ksz_rmw32(dev, REG_SW_GLOBAL_LED_OVR__4, LED_OVR_1 | LED_OVR_2,
+ LED_OVR_1 | LED_OVR_2);
+ if (ret)
+ return ret;
+
+ return ksz_rmw32(dev, REG_SW_GLOBAL_LED_SRC__4,
+ LED_SRC_PTP_GPIO_1 | LED_SRC_PTP_GPIO_2,
+ LED_SRC_PTP_GPIO_1 | LED_SRC_PTP_GPIO_2);
+}
+
static int ksz_ptp_tou_reset(struct ksz_device *dev, u8 unit)
{
u32 data;
@@ -224,6 +246,10 @@ static int ksz_ptp_enable_perout(struct ksz_device *dev,
if (ret)
return ret;
+ ret = ksz_ptp_tou_gpio(dev);
+ if (ret)
+ return ret;
+
ret = ksz_ptp_tou_start(dev, request->index);
if (ret)
return ret;