*val = sign_extend32(regval,
                                     reg == TMP51X_SHUNT_CURRENT_RESULT ?
                                     16 - tmp51x_get_pga_shift(data) : 15);
-               *val = DIV_ROUND_CLOSEST(*val * 10 * MILLI, data->shunt_uohms);
+               *val = DIV_ROUND_CLOSEST(*val * 10 * (long)MILLI, (long)data->shunt_uohms);
+
                break;
        case TMP51X_BUS_VOLTAGE_RESULT:
        case TMP51X_BUS_VOLTAGE_H_LIMIT:
        case TMP51X_BUS_CURRENT_RESULT:
                // Current = (ShuntVoltage * CalibrationRegister) / 4096
                *val = sign_extend32(regval, 15) * (long)data->curr_lsb_ua;
-               *val = DIV_ROUND_CLOSEST(*val, MILLI);
+               *val = DIV_ROUND_CLOSEST(*val, (long)MILLI);
                break;
        case TMP51X_LOCAL_TEMP_RESULT:
        case TMP51X_REMOTE_TEMP_RESULT_1:
                 * The user enter current value and we convert it to
                 * voltage. 1lsb = 10uV
                 */
-               val = DIV_ROUND_CLOSEST(val * data->shunt_uohms, 10 * MILLI);
+               val = DIV_ROUND_CLOSEST(val * (long)data->shunt_uohms, 10 * (long)MILLI);
                max_val = U16_MAX >> tmp51x_get_pga_shift(data);
                regval = clamp_val(val, -max_val, max_val);
                break;