{
        int phy_interface;
        u32 width = 0;
+       int err;
 
        phy_interface = device_get_phy_mode(dev);
        if (phy_interface < 0)
-               return phy_interface;
-
+               phy_interface = PHY_INTERFACE_MODE_NA;
        config->phy_interface = phy_interface;
 
        device_get_mac_address(dev, config->mac, ETH_ALEN);
 
-       device_property_read_u32(dev, "reg-shift", &config->shift);
-
-       device_property_read_u32(dev, "reg-io-width", &width);
-       if (width == 4)
+       err = device_property_read_u32(dev, "reg-io-width", &width);
+       if (err == -ENXIO)
+               return err;
+       if (!err && width == 4)
                config->flags |= SMSC911X_USE_32BIT;
        else
                config->flags |= SMSC911X_USE_16BIT;
 
+       device_property_read_u32(dev, "reg-shift", &config->shift);
+
        if (device_property_present(dev, "smsc,irq-active-high"))
                config->irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH;