--- a/drivers/net/ethernet/davicom/dm9000.c +++ b/drivers/net/ethernet/davicom/dm9000.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -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;