[PATCH] pcmcia: multifunction card handling fixes

s->functions needs to be initialized earlier, for the "let's see
how high it increases" approach means that pcmcia_request_irq()
(which makes use of this value) is confused, and might request
an exclusive IRQ first even though it is not supposed to.

Also, a CIS override autoloaded using the firmware loader may
allow for the use of more or less functions in a multifunction
card. Therefore, we may need to schedule a call to add this
second function later on, or simply remove the other function
(it's always the first -valid- function which reaches this
codepath).

Many thanks to Fabrice Bellet for debugging and testing patches.

Signed-off-by: Dominik Brodowski <[email protected]>
This commit is contained in:
Dominik Brodowski 2006-11-06 21:52:16 -05:00
commit 1d2c90425d
2 changed files with 90 additions and 68 deletions

View file

@ -262,9 +262,10 @@ struct pcmcia_socket {
u8 present:1, /* PCMCIA card is present in socket */
busy:1, /* "master" ioctl is used */
dead:1, /* pcmcia module is being unloaded */
device_add_pending:1, /* a pseudo-multifunction-device
device_add_pending:1, /* a multifunction-device
* add event is pending */
reserved:4;
mfc_pfc:1, /* the pending event adds a mfc (1) or pfc (0) */
reserved:3;
} pcmcia_state;
struct work_struct device_add; /* for adding further pseudo-multifunction