diff options
author | Fabio Falzoi <fabio.falzoi84@gmail.com> | 2015-06-14 15:48:49 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-06-17 21:23:15 -0700 |
commit | 319499380ceac581cbb73caf64d6814e7c606344 (patch) | |
tree | 8b8145bd563b81bb6c59551b5526666b33cb4fcb /drivers/staging/rts5208 | |
parent | 507635763d83f425debd41c58e6c95e31db56323 (diff) | |
download | talos-obmc-linux-319499380ceac581cbb73caf64d6814e7c606344.tar.gz talos-obmc-linux-319499380ceac581cbb73caf64d6814e7c606344.zip |
Staging: rts5208: helper function to manage ss
Use a helper function to manage ss_counter
Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/rts5208')
-rw-r--r-- | drivers/staging/rts5208/rtsx_chip.c | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/drivers/staging/rts5208/rtsx_chip.c b/drivers/staging/rts5208/rtsx_chip.c index 5946cc47e86b..373ccd03f0b2 100644 --- a/drivers/staging/rts5208/rtsx_chip.c +++ b/drivers/staging/rts5208/rtsx_chip.c @@ -1184,10 +1184,40 @@ static void rtsx_manage_sd_lock(struct rtsx_chip *chip) #endif } -void rtsx_polling_func(struct rtsx_chip *chip) +static bool rtsx_is_ss_allowed(struct rtsx_chip *chip) +{ + u32 val; + + if (!chip->ss_en || CHECK_PID(chip, 0x5288)) + return false; + + if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) { + rtsx_read_cfg_dw(chip, 1, 0x04, &val); + if (val & 0x07) + return false; + } + + return true; +} + +static void rtsx_manage_ss(struct rtsx_chip *chip) { - bool ss_allowed; + if (!rtsx_is_ss_allowed(chip) || chip->sd_io) + return; + + if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) { + chip->ss_counter = 0; + return; + } + if (chip->ss_counter < (chip->ss_idle_period / POLLING_INTERVAL)) + chip->ss_counter++; + else + rtsx_exclusive_enter_ss(chip); +} + +void rtsx_polling_func(struct rtsx_chip *chip) +{ if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND)) return; @@ -1209,37 +1239,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) rtsx_init_cards(chip); - if (chip->ss_en) { - ss_allowed = true; - - if (CHECK_PID(chip, 0x5288)) { - ss_allowed = false; - } else { - if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) { - u32 val; - - rtsx_read_cfg_dw(chip, 1, 0x04, &val); - if (val & 0x07) - ss_allowed = false; - } - } - } else { - ss_allowed = false; - } - - if (ss_allowed && !chip->sd_io) { - if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) { - chip->ss_counter = 0; - } else { - if (chip->ss_counter < - (chip->ss_idle_period / POLLING_INTERVAL)) { - chip->ss_counter++; - } else { - rtsx_exclusive_enter_ss(chip); - return; - } - } - } + rtsx_manage_ss(chip); if (CHECK_PID(chip, 0x5208)) { rtsx_monitor_aspm_config(chip); |