samsung/s5pv210: New target
[openwrt/openwrt.git] / target / linux / samsung / patches-4.14 / 002-dm9000-clk.patch
diff --git a/target/linux/samsung/patches-4.14/002-dm9000-clk.patch b/target/linux/samsung/patches-4.14/002-dm9000-clk.patch
new file mode 100644 (file)
index 0000000..1bf2a7a
--- /dev/null
@@ -0,0 +1,37 @@
+--- a/drivers/net/ethernet/davicom/dm9000.c
++++ b/drivers/net/ethernet/davicom/dm9000.c
+@@ -39,6 +39,7 @@
+ #include <linux/regulator/consumer.h>
+ #include <linux/gpio.h>
+ #include <linux/of_gpio.h>
++#include <linux/clk.h>
+ #include <asm/delay.h>
+ #include <asm/irq.h>
+@@ -1436,6 +1437,7 @@ dm9000_probe(struct platform_device *pde
+       enum of_gpio_flags flags;
+       struct regulator *power;
+       bool inv_mac_addr = false;
++    const char *clk_name;
+       power = devm_regulator_get(dev, "vcc");
+       if (IS_ERR(power)) {
+@@ -1573,6 +1575,18 @@ dm9000_probe(struct platform_device *pde
+               goto out;
+       }
++    /* Enable clock if specified */
++    if (!of_property_read_string(dev->of_node, "clock-names", &clk_name)) {
++        struct clk *clk = devm_clk_get(dev, clk_name);
++        if (IS_ERR(clk)) {
++            dev_err(dev, "cannot get clock of %s\n", clk_name);
++            ret = PTR_ERR(clk);
++            goto out;
++        }
++        clk_prepare_enable(clk);
++        dev_info(dev, "enable clock '%s'\n", clk_name);
++    }
++
+       /* fill in parameters for net-dev structure */
+       ndev->base_addr = (unsigned long)db->io_addr;