diff options
Diffstat (limited to 'drivers/memstick/host/rtsx_usb_ms.c')
| -rw-r--r-- | drivers/memstick/host/rtsx_usb_ms.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/memstick/host/rtsx_usb_ms.c b/drivers/memstick/host/rtsx_usb_ms.c index 29271ad4728a..beadc389f15f 100644 --- a/drivers/memstick/host/rtsx_usb_ms.c +++ b/drivers/memstick/host/rtsx_usb_ms.c @@ -19,7 +19,7 @@ #include <linux/mutex.h> #include <linux/sched.h> #include <linux/completion.h> -#include <asm/unaligned.h> +#include <linux/unaligned.h> struct rtsx_usb_ms { struct platform_device *pdev; @@ -216,7 +216,10 @@ static int ms_power_off(struct rtsx_usb_ms *host) rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_EN, MS_CLK_EN, 0); rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_OE, MS_OUTPUT_EN, 0); - + rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL, + POWER_MASK, POWER_OFF); + rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL, + POWER_MASK | LDO3318_PWR_MASK, POWER_OFF | LDO_SUSPEND); err = rtsx_usb_send_cmd(ucr, MODE_C, 100); if (err < 0) return err; @@ -805,14 +808,16 @@ err_out: return err; } -static int rtsx_usb_ms_drv_remove(struct platform_device *pdev) +static void rtsx_usb_ms_drv_remove(struct platform_device *pdev) { struct rtsx_usb_ms *host = platform_get_drvdata(pdev); struct memstick_host *msh = host->msh; int err; host->eject = true; + msh->removing = true; cancel_work_sync(&host->handle_req); + cancel_delayed_work_sync(&host->poll_card); mutex_lock(&host->host_mutex); if (host->req) { @@ -840,8 +845,6 @@ static int rtsx_usb_ms_drv_remove(struct platform_device *pdev) ": Realtek USB Memstick controller has been removed\n"); memstick_free_host(msh); platform_set_drvdata(pdev, NULL); - - return 0; } static struct platform_device_id rtsx_usb_ms_ids[] = { |
