38 lines
1.1 KiB
Diff
38 lines
1.1 KiB
Diff
|
--- 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;
|
||
|
|