• Alex Dubov's avatar
    tifm_sd: restructure initialization, removal and command handling · 8e02f858
    Alex Dubov authored
    In order to support correct suspend and resume several changes were needed:
    1. Switch from work_struct to tasklet for command handling. When device
    suspend is called workqueues are already frozen and can not be used.
    2. Separate host initialization code from driver's probe and don't rely
    on interrupts for host initialization. This, in turn, addresses two
    problems:
     a) Resume needs to re-initialize the host, but can not assume that
        device interrupts were already re-armed.
     b) Previously, probe will return successfully before really knowing
        the state of the host, as host interrupts were not armed in time.
        Now it uses polling to determine the real host state before returning.
    3. Separate termination code from driver's remove. Termination may be caused
    by resume, if media changed type or became unavailable during suspend.
    Signed-off-by: default avatarAlex Dubov <oakad@yahoo.com>
    Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
    8e02f858
tifm_core.c 5.84 KB