When the driver would try to queue commands to the HW FIFO but ran out of
slots it would use msleep as a delay until the FIFO would clear. This is
messy and not accurate.
Replace the msleep with a proper completion on the event of command
completion which should indicate at least one slot is free.