Sei un po' confuso sui tipi di dato ...
Un char non può contenere il valore B1 o B0, etc ...
Inoltre credo che a port non debba essere assegnato il valore A ma il carattere 'A' (ma questa è una piccolezza)...
Naturalmente potrei sbagliarmi: se ad esempio A è una costante come pure B0, etc.
In questo caso non ti resta che postare il codice completo oppure tutto il main con tutte le costanti globali e le macro ...
codice:
struct io 
{
   char port;
   char bit;
};
struct io conf = {'A', 4}, en = {'A', 5}, oimp = {'A', 0}, film = {'A', 1};

//Questa è la funzione:

char read(struct io x)
{
   char ret=0;

   switch(x.port)
      {
       case 'A':
          ret=(PINA &x.bit);
          break;
       case 'B':
          ret=(PINB & x.bit);
          break;
       case 'C':
          //ret=(PINC & x.bit);
          break;
       case 'D':
          //ret=(PIND & x.bit);
          break;
      }
   return ret;
}