Matteo,
Sorry for misunderstanding your question.
As in my previous response, you could schedule a timer every time when a USB packet is transferred, or count the bus reset to reset the phy.
However I would think handing the phy reset in application is easier, since the application has to reopen the printer device node after the phy reset regardless it is done in kernel or application, there is no difference comparing to handle -EAGAIN to reset phy and reopen the printer.