mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 01:41:39 +00:00
spi/bfin_spi: save/restore state when suspending/resuming
We can't rely on the SPI_CTL/SPI_FLG registers retaining their state when suspending, so save/restore their entire values. Signed-off-by: Barry Song <barry.song@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
d3cc71f71a
commit
b052fd0a44
1 changed files with 13 additions and 4 deletions
|
@ -101,6 +101,9 @@ struct master_data {
|
|||
size_t rx_map_len;
|
||||
size_t tx_map_len;
|
||||
u8 n_bytes;
|
||||
u16 ctrl_reg;
|
||||
u16 flag_reg;
|
||||
|
||||
int cs_change;
|
||||
const struct transfer_ops *ops;
|
||||
};
|
||||
|
@ -1426,8 +1429,14 @@ static int bfin_spi_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
if (status != 0)
|
||||
return status;
|
||||
|
||||
/* stop hardware */
|
||||
bfin_spi_disable(drv_data);
|
||||
drv_data->ctrl_reg = read_CTRL(drv_data);
|
||||
drv_data->flag_reg = read_FLAG(drv_data);
|
||||
|
||||
/*
|
||||
* reset SPI_CTL and SPI_FLG registers
|
||||
*/
|
||||
write_CTRL(drv_data, BIT_CTL_CPHA | BIT_CTL_MASTER);
|
||||
write_FLAG(drv_data, 0xFF00);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1437,8 +1446,8 @@ static int bfin_spi_resume(struct platform_device *pdev)
|
|||
struct master_data *drv_data = platform_get_drvdata(pdev);
|
||||
int status = 0;
|
||||
|
||||
/* Enable the SPI interface */
|
||||
bfin_spi_enable(drv_data);
|
||||
write_CTRL(drv_data, drv_data->ctrl_reg);
|
||||
write_FLAG(drv_data, drv_data->flag_reg);
|
||||
|
||||
/* Start the queue running */
|
||||
status = bfin_spi_start_queue(drv_data);
|
||||
|
|
Loading…
Reference in a new issue