Вообще-то список возможных ошибок (да, кодов ошибок, получаемых из errno) конкретного сисколла (будь то ioctl или другой вызов) описан в документации к. Если список соответствует заявленному - вопросы к авторам юзерспейс-софта. Не соответствует - вопрос к ядру.Драйвер - это другой уровень изоляции (в широком, архитектурном смысле). Прикладную программу, вообще-то, этот уровень должен волновать лишь в той степени, в которой ядро даёт программе доступ к функциональности драйвера. В нормальном, штатном случае прикладная программа должна пользоваться сервисами, предоставляемыми ядром, а не какими-то драйверами, которые сегодня есть а завтра нет.
Понятное дело, что эта ситуация идеальная, и на практике приходится жертвовать чётким разделением на независящие модули в угоду производительности, полнофункциональности (когда драйвер способен выдать больше, чем поддерживают стандартные ядерные механизмы итп).