Re: [PATCH v2] net: phy: air_en8811h: add AN8811HB MCU assert/deassert support

From: Eric Woudstra

Date: Sat Mar 28 2026 - 12:37:22 EST




On 3/27/26 5:41 AM, Eric Woudstra wrote:
> static int __air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address,
> u32 pbus_data)
> {
> int ret;
>
> ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_EXT_PAGE_ACCESS,
> (u16)(pbus_address >> 6));
> if (ret < 0)
> return ret;
>
> ret = __mdiobus_write(mdio->bus, mdio->addr, (pbus_address >> 2) & 0xf,
> (u16)pbus_data);
> if (ret < 0)
> return ret;
>
> ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_PBUS_DATA_HIGH,
> (u16)(pbus_data >> 16));
> if (ret < 0)
> return ret;
>
> return 0;
> }
>
> static int air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address,
> u32 pbus_data)
> {
> int ret;
>
> mutex_lock(&mdio->bus->mdio_lock);
>
> ret = __air_pbus_reg_write(mdio, pbus_address, pbus_data);
> if (ret < 0)
> dev_err(&mdio->dev, "%s 0x%08x failed: %d\n", __func__,
> pbus_address, ret);
>
> mutex_unlock(&mdio->bus->mdio_lock);
>
> return ret;
> }
>
> static int __air_pbus_reg_read(struct mdio_device *mdio, u32 pbus_address,
> u32 *pbus_data)
> {
> int ret, pbus_data_low;
>
> ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_EXT_PAGE_ACCESS,
> (u16)(pbus_address >> 6));
> if (ret < 0)
> return ret;
>
> ret = __mdiobus_read(mdio->bus, mdio->addr, (pbus_address >> 2) & 0xf);
> if (ret < 0)
> return ret;
> pbus_data_low = ret;
>
> ret = __mdiobus_read(mdio->bus, mdio->addr, AIR_PBUS_DATA_HIGH);
> if (ret < 0)
> return ret;
>
> *pbus_data = (ret << 16) + pbus_data_low;
>
> return 0;
> }
>
> static int air_pbus_reg_read(struct mdio_device *mdio, u32 pbus_address,
> u32 *pbus_data)
> {
> int ret;
>
> mutex_lock(&mdio->bus->mdio_lock);
>
> ret = __air_pbus_reg_read(mdio, pbus_address, pbus_data);
> if (ret < 0)
> dev_err(&mdio->dev, "%s 0x%08x failed: %d\n", __func__,
> pbus_address, ret);
>
> mutex_unlock(&mdio->bus->mdio_lock);
>
> return ret;
> }
>
> With:
>
> #define AIR_PBUS_DATA_HIGH 0x10

Small correction using upper_16_bits() and lower_16_bits():

static int __air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address,
u32 pbus_data)
{
int ret;

ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_EXT_PAGE_ACCESS,
(u16)(pbus_address >> 6));
if (ret < 0)
return ret;

ret = __mdiobus_write(mdio->bus, mdio->addr, (pbus_address >> 2) & 0xf,
lower_16_bits(pbus_data));
if (ret < 0)
return ret;

ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_PBUS_DATA_HIGH,
upper_16_bits(pbus_data));
if (ret < 0)
return ret;

return 0;
}

static int air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address,
u32 pbus_data)
{
int ret;

mutex_lock(&mdio->bus->mdio_lock);

ret = __air_pbus_reg_write(mdio, pbus_address, pbus_data);
if (ret < 0)
dev_err(&mdio->dev, "%s 0x%08x failed: %d\n", __func__,
pbus_address, ret);

mutex_unlock(&mdio->bus->mdio_lock);

return ret;
}