-From 234d6f40fb4b771b396b45a9492aab463771bd0b Mon Sep 17 00:00:00 2001
-From: Kristian Evensen <kristian.evensen@gmail.com>
-Date: Tue, 6 Aug 2019 11:42:57 +0200
-Subject: [PATCH] phy: Add ipq40xx mdio driver
-
----
- drivers/net/phy/Kconfig | 7 +
- drivers/net/phy/Makefile | 1 +
- drivers/net/phy/mdio-ipq40xx.c | 247 +++++++++++++++++++++++++++++++++
- 3 files changed, 255 insertions(+)
- create mode 100644 drivers/net/phy/mdio-ipq40xx.c
-
-diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
-index 1f5fd24cd..eb71b47a3 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
-@@ -436,6 +436,13 @@ config XILINX_GMII2RGMII
+@@ -524,6 +524,13 @@ config XILINX_GMII2RGMII
the Reduced Gigabit Media Independent Interface(RGMII) between
Ethernet physical media devices and the Gigabit Ethernet controller.
endif # PHYLIB
config MICREL_KS8995MA
-diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
-index f21cda9d8..804c52634 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
-@@ -33,6 +33,7 @@ obj-$(CONFIG_MDIO_CAVIUM) += mdio-cavium.o
+@@ -48,6 +48,7 @@ obj-$(CONFIG_MDIO_CAVIUM) += mdio-cavium
obj-$(CONFIG_MDIO_GPIO) += mdio-gpio.o
obj-$(CONFIG_MDIO_HISI_FEMAC) += mdio-hisi-femac.o
obj-$(CONFIG_MDIO_I2C) += mdio-i2c.o
obj-$(CONFIG_MDIO_MOXART) += mdio-moxart.o
obj-$(CONFIG_MDIO_MSCC_MIIM) += mdio-mscc-miim.o
obj-$(CONFIG_MDIO_OCTEON) += mdio-octeon.o
-diff --git a/drivers/net/phy/mdio-ipq40xx.c b/drivers/net/phy/mdio-ipq40xx.c
-new file mode 100644
-index 000000000..88fe5dc2b
--- /dev/null
+++ b/drivers/net/phy/mdio-ipq40xx.c
-@@ -0,0 +1,247 @@
+@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+ *
+#include <linux/io.h>
+#include <linux/of_address.h>
+#include <linux/of_mdio.h>
-+#include <linux/of_gpio.h>
+#include <linux/phy.h>
+#include <linux/platform_device.h>
-+#include <linux/gpio.h>
+
+#define MDIO_CTRL_0_REG 0x40
+#define MDIO_CTRL_1_REG 0x44
+ return 0;
+}
+
-+static int ipq40xx_phy_reset(struct platform_device *pdev)
-+{
-+ struct device_node *mdio_node;
-+ int phy_reset_gpio_number;
-+ int ret;
-+
-+ mdio_node = of_find_node_by_name(NULL, "mdio");
-+ if (!mdio_node) {
-+ dev_err(&pdev->dev, "Could not find mdio node\n");
-+ return -ENOENT;
-+ }
-+
-+ ret = of_get_named_gpio(mdio_node, "phy-reset-gpio", 0);
-+ if (ret < 0) {
-+ dev_err(&pdev->dev, "Could not find phy-reset-gpio\n");
-+ return ret;
-+ }
-+
-+ phy_reset_gpio_number = ret;
-+
-+ ret = gpio_request(phy_reset_gpio_number, "phy-reset-gpio");
-+ if (ret) {
-+ dev_err(&pdev->dev, "Can't get phy-reset-gpio %d\n", ret);
-+ return ret;
-+ }
-+
-+ ret = gpio_direction_output(phy_reset_gpio_number, 0x0);
-+ if (ret) {
-+ dev_err(&pdev->dev,
-+ "Can't set direction for phy-reset-gpio %d\n", ret);
-+ goto phy_reset_out;
-+ }
-+
-+ usleep_range(1000, 10005);
-+
-+ gpio_set_value(phy_reset_gpio_number, 0x01);
-+
-+phy_reset_out:
-+ gpio_free(phy_reset_gpio_number);
-+
-+ return ret;
-+}
-+
+static int ipq40xx_mdio_probe(struct platform_device *pdev)
+{
+ struct ipq40xx_mdio_data *am;
+ struct resource *res;
-+ int i, ret;
-+
-+ ret = ipq40xx_phy_reset(pdev);
-+ if (ret) {
-+ dev_err(&pdev->dev, "Could not find qca8075 reset gpio\n");
-+ return -ENODEV;
-+ }
++ int i;
+
+ am = devm_kzalloc(&pdev->dev, sizeof(*am), GFP_KERNEL);
+ if (!am)
+MODULE_AUTHOR("Qualcomm Atheros");
+MODULE_VERSION(DRV_VERSION);
+MODULE_LICENSE("Dual BSD/GPL");
---
-2.20.1