Если подытожить, то:
Драйвер устройства регистрируется в parport.
Низкоуровневый драйвер находит параллельный порт и регистрирует его в parport (два этих события происходят в произвольном порядке). Эта регистрация создаёт структуру parport, которая связывается со списком известных портов.
parport вызывает функцию attach каждого из зарегистрированных драйверов устройств, передавая указатель на новую структуру parport.
Драйвер устройства получает дескриптор из parport, который использует в parport_claim/release. Этот дескриптор имеет вид указателя на структуру pardevice, представляющую конкретное устройство на параллельном порту, и его можно получить при помощи parport_register_device.
Драйвер устройства требует доступ к порту при помощи функции parport_claim (или parport_claim_or_block).
Впоследствии драйвер использует порт. Когда драйвер завершает использование порта, он его освобождает.
В свою очередь, назначение низкоуровневых драйверов заключается в том, чтобы обнаружить порты и предоставить методы для работы с ним (то есть предоставить реализации операций в структуре parport_operations).
Более полное описание назначения каждой из операций доступно в файле Documentation/parport-lowlevel.txt.