Рассмотрите использование механизмов уведомлений, таких как wait_event_interruptible, чтобы блокировать поток, ожидающий появления данных в буфере. Когда данные появляются, поток разблокируется и может продолжить выполнение. Используйте механизм очереди работ для планирования асинхронной работы, когда появляются данные в буфере. Такой подход может позволить вам избежать блокировок и таймаутов. Если это необходимо, рассмотрите возможность внесения изменений в исходный код драйвера, чтобы поддерживать асинхронные операции или другие механизмы оповещения о наличии данных.