- clocks, clock-names: contains clocks according to the common clock bindings.
supported clocks:
- - KSZ8021, KSZ8031: "rmii-ref": The RMII refence input clock. Used
- to determine the XI input clock.
+ - KSZ8021, KSZ8031, KSZ8081, KSZ8091: "rmii-ref": The RMII
+ refence input clock. Used to determine the XI input clock.
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,
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;