|
@@ -102,6 +102,7 @@ static const struct kszphy_type ksz8051_type = {
|
|
|
static const struct kszphy_type ksz8081_type = {
|
|
|
.led_mode_reg = MII_KSZPHY_CTRL_2,
|
|
|
.has_broadcast_disable = true,
|
|
|
+ .has_rmii_ref_clk_sel = true,
|
|
|
};
|
|
|
|
|
|
static int kszphy_extended_write(struct phy_device *phydev,
|
|
@@ -548,16 +549,16 @@ static int kszphy_probe(struct phy_device *phydev)
|
|
|
clk = devm_clk_get(&phydev->dev, "rmii-ref");
|
|
|
if (!IS_ERR(clk)) {
|
|
|
unsigned long rate = clk_get_rate(clk);
|
|
|
+ bool rmii_ref_clk_sel_25_mhz;
|
|
|
|
|
|
priv->rmii_ref_clk_sel = type->has_rmii_ref_clk_sel;
|
|
|
+ rmii_ref_clk_sel_25_mhz = of_property_read_bool(np,
|
|
|
+ "micrel,rmii-reference-clock-select-25-mhz");
|
|
|
|
|
|
- /* FIXME: add support for PHY revisions that have this bit
|
|
|
- * inverted (e.g. through new property or based on PHY ID).
|
|
|
- */
|
|
|
if (rate > 24500000 && rate < 25500000) {
|
|
|
- priv->rmii_ref_clk_sel_val = false;
|
|
|
+ priv->rmii_ref_clk_sel_val = rmii_ref_clk_sel_25_mhz;
|
|
|
} else if (rate > 49500000 && rate < 50500000) {
|
|
|
- priv->rmii_ref_clk_sel_val = true;
|
|
|
+ priv->rmii_ref_clk_sel_val = !rmii_ref_clk_sel_25_mhz;
|
|
|
} else {
|
|
|
dev_err(&phydev->dev, "Clock rate out of range: %ld\n", rate);
|
|
|
return -EINVAL;
|