Skip to content

Commit 36f56f2

Browse files
plappermaulrobimarko
authored andcommitted
realtek: mdio: add per family configuration structure
The mdio driver already has a family specific compatible that is used in the dts to denote the device type. Nevertheless it is not evaluated. The driver determines the family on its own in rtmdio_get_family(). Break up this dependency by providing a configuration structure that can be automatically assigned by device_get_match_data(). For now only move the rawpage variable over there. Signed-off-by: Markus Stockhausen <[email protected]> Link: openwrt/openwrt#21274 Signed-off-by: Robert Marko <[email protected]>
1 parent 349040e commit 36f56f2

File tree

1 file changed

+44
-14
lines changed

1 file changed

+44
-14
lines changed

target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ DEFINE_MUTEX(rtmdio_lock);
159159
DEFINE_MUTEX(rtmdio_lock_sds);
160160

161161
struct rtmdio_bus_priv {
162+
const struct rtmdio_config *cfg;
162163
u16 id;
163164
u16 family_id;
164-
int rawpage;
165165
int cpu_port;
166166
int page[RTMDIO_MAX_PORT];
167167
bool raw[RTMDIO_MAX_PORT];
@@ -179,6 +179,10 @@ struct rtmdio_bus_priv {
179179
int (*write_sds_phy)(int sds, int page, int regnum, u16 val);
180180
};
181181

182+
struct rtmdio_config {
183+
int raw_page;
184+
};
185+
182186
/* SerDes reader/writer functions for the ports without external phy. */
183187

184188
/*
@@ -1150,10 +1154,10 @@ static int rtmdio_read(struct mii_bus *bus, int addr, int regnum)
11501154
if (addr >= priv->cpu_port)
11511155
return -ENODEV;
11521156

1153-
if (regnum == RTMDIO_PAGE_SELECT && priv->page[addr] != priv->rawpage)
1157+
if (regnum == RTMDIO_PAGE_SELECT && priv->page[addr] != priv->cfg->raw_page)
11541158
return priv->page[addr];
11551159

1156-
priv->raw[addr] = (priv->page[addr] == priv->rawpage);
1160+
priv->raw[addr] = (priv->page[addr] == priv->cfg->raw_page);
11571161
if ((priv->phy_is_internal[addr]) && (priv->sds_id[addr] >= 0))
11581162
return rtmdio_read_sds_phy(priv, priv->sds_id[addr],
11591163
priv->page[addr], regnum);
@@ -1191,8 +1195,8 @@ static int rtmdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
11911195
if (regnum == RTMDIO_PAGE_SELECT)
11921196
priv->page[addr] = val;
11931197

1194-
if (!priv->raw[addr] && (regnum != RTMDIO_PAGE_SELECT || page == priv->rawpage)) {
1195-
priv->raw[addr] = (page == priv->rawpage);
1198+
if (!priv->raw[addr] && (regnum != RTMDIO_PAGE_SELECT || page == priv->cfg->raw_page)) {
1199+
priv->raw[addr] = (page == priv->cfg->raw_page);
11961200
if (priv->phy_is_internal[addr] && priv->sds_id[addr] >= 0)
11971201
return rtmdio_write_sds_phy(priv, priv->sds_id[addr],
11981202
priv->page[addr], regnum, val);
@@ -1446,6 +1450,8 @@ static int rtmdio_probe(struct platform_device *pdev)
14461450
priv->raw[i] = false;
14471451
}
14481452

1453+
priv->cfg = (const struct rtmdio_config *)device_get_match_data(dev);
1454+
14491455
switch (family) {
14501456
case RTMDIO_838X_FAMILY_ID:
14511457
bus->name = "rtl838x-eth-mdio";
@@ -1459,7 +1465,6 @@ static int rtmdio_probe(struct platform_device *pdev)
14591465
priv->read_phy = rtmdio_838x_read_phy;
14601466
priv->write_phy = rtmdio_838x_write_phy;
14611467
priv->cpu_port = RTMDIO_838X_CPU_PORT;
1462-
priv->rawpage = 0xfff;
14631468
break;
14641469
case RTMDIO_839X_FAMILY_ID:
14651470
bus->name = "rtl839x-eth-mdio";
@@ -1473,7 +1478,6 @@ static int rtmdio_probe(struct platform_device *pdev)
14731478
priv->read_phy = rtmdio_839x_read_phy;
14741479
priv->write_phy = rtmdio_839x_write_phy;
14751480
priv->cpu_port = RTMDIO_839X_CPU_PORT;
1476-
priv->rawpage = 0x1fff;
14771481
break;
14781482
case RTMDIO_930X_FAMILY_ID:
14791483
bus->name = "rtl930x-eth-mdio";
@@ -1487,7 +1491,6 @@ static int rtmdio_probe(struct platform_device *pdev)
14871491
priv->read_phy = rtmdio_930x_read_phy;
14881492
priv->write_phy = rtmdio_930x_write_phy;
14891493
priv->cpu_port = RTMDIO_930X_CPU_PORT;
1490-
priv->rawpage = 0xfff;
14911494
break;
14921495
case RTMDIO_931X_FAMILY_ID:
14931496
bus->name = "rtl931x-eth-mdio";
@@ -1501,7 +1504,6 @@ static int rtmdio_probe(struct platform_device *pdev)
15011504
priv->read_phy = rtmdio_931x_read_phy;
15021505
priv->write_phy = rtmdio_931x_write_phy;
15031506
priv->cpu_port = RTMDIO_931X_CPU_PORT;
1504-
priv->rawpage = 0x1fff;
15051507
break;
15061508
}
15071509
bus->read_c45 = rtmdio_read_c45;
@@ -1576,12 +1578,40 @@ static int rtmdio_probe(struct platform_device *pdev)
15761578
return devm_of_mdiobus_register(dev, bus, mii_np);
15771579
}
15781580

1581+
static const struct rtmdio_config rtmdio_838x_cfg = {
1582+
.raw_page = 4095,
1583+
};
1584+
1585+
static const struct rtmdio_config rtmdio_839x_cfg = {
1586+
.raw_page = 8191,
1587+
};
1588+
1589+
static const struct rtmdio_config rtmdio_930x_cfg = {
1590+
.raw_page = 4095,
1591+
};
1592+
1593+
static const struct rtmdio_config rtmdio_931x_cfg = {
1594+
.raw_page = 8191,
1595+
};
1596+
15791597
static const struct of_device_id rtmdio_ids[] = {
1580-
{ .compatible = "realtek,rtl8380-mdio" },
1581-
{ .compatible = "realtek,rtl8392-mdio" },
1582-
{ .compatible = "realtek,rtl9301-mdio" },
1583-
{ .compatible = "realtek,rtl9311-mdio" },
1584-
{}
1598+
{
1599+
.compatible = "realtek,rtl8380-mdio",
1600+
.data = &rtmdio_838x_cfg,
1601+
},
1602+
{
1603+
.compatible = "realtek,rtl8392-mdio",
1604+
.data = &rtmdio_839x_cfg,
1605+
},
1606+
{
1607+
.compatible = "realtek,rtl9301-mdio",
1608+
.data = &rtmdio_930x_cfg,
1609+
},
1610+
{
1611+
.compatible = "realtek,rtl9311-mdio",
1612+
.data = &rtmdio_931x_cfg,
1613+
},
1614+
{ /* sentinel */ }
15851615
};
15861616
MODULE_DEVICE_TABLE(of, rtmdio_ids);
15871617

0 commit comments

Comments
 (0)