Wenn Du Pins als Eingänge nutzen möchtest, müssen die entsprechenden Bits beim Setzen von Ausgangs-Bits auf High (strong pull-up to VDD) bleiben.
Beim Auslesen erhälst Du neben den Eingangs-Zuständen gleichzeitig die Ausgangs-Zustände. Welcher Pin Eingang oder Ausgang ist, mußt Du selber 'verwalten'. Es werden immer 8 Daten-Bits gesendet und empfangen.