static int sfp_module_parse_power(struct sfp *sfp)
 {
        u32 power_mW = 1000;
+       bool supports_a2;
 
        if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
                power_mW = 1500;
        if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
                power_mW = 2000;
 
+       supports_a2 = sfp->id.ext.sff8472_compliance !=
+                               SFP_SFF8472_COMPLIANCE_NONE ||
+                     sfp->id.ext.diagmon & SFP_DIAGMON_DDM;
+
        if (power_mW > sfp->max_power_mW) {
                /* Module power specification exceeds the allowed maximum. */
-               if (sfp->id.ext.sff8472_compliance ==
-                       SFP_SFF8472_COMPLIANCE_NONE &&
-                   !(sfp->id.ext.diagmon & SFP_DIAGMON_DDM)) {
+               if (!supports_a2) {
                        /* The module appears not to implement bus address
                         * 0xa2, so assume that the module powers up in the
                         * indicated mode.
                }
        }
 
+       if (power_mW <= 1000) {
+               /* Modules below 1W do not require a power change sequence */
+               sfp->module_power_mW = power_mW;
+               return 0;
+       }
+
+       if (!supports_a2) {
+               /* The module power level is below the host maximum and the
+                * module appears not to implement bus address 0xa2, so assume
+                * that the module powers up in the indicated mode.
+                */
+               return 0;
+       }
+
        /* If the module requires a higher power mode, but also requires
         * an address change sequence, warn the user that the module may
         * not be functional.
         */
-       if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE && power_mW > 1000) {
+       if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE) {
                dev_warn(sfp->dev,
                         "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
                         power_mW / 1000, (power_mW / 100) % 10);