7/7 AU1100 MMC support
Subsystems (2)
PATCH 1/1 7/7 AU1100 MMC support
Power Management support for AU1100 (PIO mode) added.
Signed-off-by Rodolfo Giometti <[email protected]>
Signature · 4 lines
GNU/Linux Solutions e-mail: [email protected] Linux Device Driver [email protected] Embedded Systems [email protected] UNIX programming phone: +39 349 2432127
drivers/mmc/au1xmmc.c +74 -2
@@ -19,6 +19,10 @@* Rodolfo Giometti <[email protected]> * Eurotech S.p.A. <[email protected]> +* Power Management Support for AU1100 in PIO mode by: +* Rodolfo Giometti <[email protected]> +* Eurotech S.p.A. <[email protected]> +* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation.
@@ -1086,11 +1090,79 @@ #endifreturn 0 ; } +#ifdef CONFIG_PM +static u32 sd_txport[2 ]; +static u32 sd_rxport[2 ]; +static u32 sd_config[2 ]; +static u32 sd_config2[2 ]; +static u32 sd_blksize[2 ]; +static u32 sd_status[2 ]; +static u32 sd_cmd[2 ]; +static u32 sd_cmdarg[2 ]; +static u32 sd_timeout[2 ]; + +static int au1xmmc_suspend (struct platform_device *pdev,pm_message_t state) +{ +struct au1xmmc_host *host =platform_get_drvdata (pdev); +struct mmc_host *mmc = host->mmc; +int ret =0 ; + +printk ("GU au1xmmc_suspend %d\n" , host->id); +if (mmc) + ret =mmc_suspend_host (mmc, state); + + sd_txport[host->id] =au_readl (HOST_TXPORT (host)); + sd_rxport[host->id] =au_readl (HOST_RXPORT (host)); + sd_config[host->id] =au_readl (HOST_CONFIG (host)); + sd_config2[host->id] =au_readl (HOST_CONFIG2 (host)); + sd_blksize[host->id] =au_readl (HOST_BLKSIZE (host)); + sd_status[host->id] =au_readl (HOST_STATUS (host)); + sd_cmd[host->id] =au_readl (HOST_CMD (host)); + sd_cmdarg[host->id] =au_readl (HOST_CMDARG (host)); + sd_timeout[host->id] =au_readl (HOST_TIMEOUT (host)); + +au_writel (0x0 ,HOST_ENABLE (host)); + +printk ("GU au1xmmc_suspend END\n" ); +return ret; +} + +static int au1xmmc_resume (struct platform_device *pdev) +{ +struct au1xmmc_host *host =platform_get_drvdata (pdev); +struct mmc_host *mmc = host->mmc; +int ret =0 ; + +au1xmmc_reset_controller (host); + +au_writel (sd_txport[host->id],HOST_TXPORT (host)); +au_writel (sd_rxport[host->id],HOST_RXPORT (host)); +au_writel (sd_config[host->id],HOST_CONFIG (host)); +au_writel (sd_config2[host->id],HOST_CONFIG2 (host)); +au_writel (sd_blksize[host->id],HOST_BLKSIZE (host)); +au_writel (sd_status[host->id],HOST_STATUS (host)); +au_writel (sd_cmd[host->id],HOST_CMD (host)); +au_writel (sd_cmdarg[host->id],HOST_CMDARG (host)); +au_writel (sd_timeout[host->id],HOST_TIMEOUT (host)); + +printk ("GU au1xmmc_resume\n" ); +if (mmc) + ret =mmc_resume_host (mmc); + +printk ("GU au1xmmc_resume END\n" ); +return ret; +} + +#else +#define au1xmmc_suspend NULL +#define au1xmmc_resume NULL +#endif +static struct platform_driver au1xmmc_driver = { .probe = au1xmmc_probe, .remove = au1xmmc_remove, - .suspend =NULL , - .resume =NULL , + .suspend = au1xmmc_suspend, + .resume = au1xmmc_resume, .driver = { .name =DRIVER_NAME , },
Quoted 3 lines · Rodolfo Giometti
Power Management support for AU1100 (PIO mode) added.
Signed-off-by Rodolfo Giometti <[email protected]>
Sorry, I forgot into this patch some debugging messages... :)
Please, use this one instead.
Ciao,
Rodolfo
Signed-off-by Rodolfo Giometti <[email protected]>
Signature · 4 lines
GNU/Linux Solutions e-mail: [email protected] Linux Device Driver [email protected] Embedded Systems [email protected] UNIX programming phone: +39 349 2432127
drivers/mmc/au1xmmc.c +70 -2
@@ -19,6 +19,10 @@* Rodolfo Giometti <[email protected]> * Eurotech S.p.A. <[email protected]> +* Power Management Support for AU1100 in PIO mode by: +* Rodolfo Giometti <[email protected]> +* Eurotech S.p.A. <[email protected]> +* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation.
@@ -1086,11 +1090,75 @@ #endifreturn 0 ; } +#ifdef CONFIG_PM +static u32 sd_txport[2 ]; +static u32 sd_rxport[2 ]; +static u32 sd_config[2 ]; +static u32 sd_config2[2 ]; +static u32 sd_blksize[2 ]; +static u32 sd_status[2 ]; +static u32 sd_cmd[2 ]; +static u32 sd_cmdarg[2 ]; +static u32 sd_timeout[2 ]; + +static int au1xmmc_suspend (struct platform_device *pdev,pm_message_t state) +{ +struct au1xmmc_host *host =platform_get_drvdata (pdev); +struct mmc_host *mmc = host->mmc; +int ret =0 ; + +if (mmc) + ret =mmc_suspend_host (mmc, state); + + sd_txport[host->id] =au_readl (HOST_TXPORT (host)); + sd_rxport[host->id] =au_readl (HOST_RXPORT (host)); + sd_config[host->id] =au_readl (HOST_CONFIG (host)); + sd_config2[host->id] =au_readl (HOST_CONFIG2 (host)); + sd_blksize[host->id] =au_readl (HOST_BLKSIZE (host)); + sd_status[host->id] =au_readl (HOST_STATUS (host)); + sd_cmd[host->id] =au_readl (HOST_CMD (host)); + sd_cmdarg[host->id] =au_readl (HOST_CMDARG (host)); + sd_timeout[host->id] =au_readl (HOST_TIMEOUT (host)); + +au_writel (0x0 ,HOST_ENABLE (host)); + +return ret; +} + +static int au1xmmc_resume (struct platform_device *pdev) +{ +struct au1xmmc_host *host =platform_get_drvdata (pdev); +struct mmc_host *mmc = host->mmc; +int ret =0 ; + +au1xmmc_reset_controller (host); + +au_writel (sd_txport[host->id],HOST_TXPORT (host)); +au_writel (sd_rxport[host->id],HOST_RXPORT (host)); +au_writel (sd_config[host->id],HOST_CONFIG (host)); +au_writel (sd_config2[host->id],HOST_CONFIG2 (host)); +au_writel (sd_blksize[host->id],HOST_BLKSIZE (host)); +au_writel (sd_status[host->id],HOST_STATUS (host)); +au_writel (sd_cmd[host->id],HOST_CMD (host)); +au_writel (sd_cmdarg[host->id],HOST_CMDARG (host)); +au_writel (sd_timeout[host->id],HOST_TIMEOUT (host)); + +if (mmc) + ret =mmc_resume_host (mmc); + +return ret; +} + +#else +#define au1xmmc_suspend NULL +#define au1xmmc_resume NULL +#endif +static struct platform_driver au1xmmc_driver = { .probe = au1xmmc_probe, .remove = au1xmmc_remove, - .suspend =NULL , - .resume =NULL , + .suspend = au1xmmc_suspend, + .resume = au1xmmc_resume, .driver = { .name =DRIVER_NAME , },