forked from luck/tmp_suning_uos_patched
[PATCH] sata_sil24: add suspend/sleep support
Add suspend/sleep support. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
2a41a6108d
commit
d2298dca9a
@ -92,6 +92,7 @@ enum {
|
||||
HOST_CTRL_STOP = (1 << 18), /* latched PCI STOP */
|
||||
HOST_CTRL_DEVSEL = (1 << 19), /* latched PCI DEVSEL */
|
||||
HOST_CTRL_REQ64 = (1 << 20), /* latched PCI REQ64 */
|
||||
HOST_CTRL_GLOBAL_RST = (1 << 31), /* global reset */
|
||||
|
||||
/*
|
||||
* Port registers
|
||||
@ -338,6 +339,7 @@ static int sil24_port_start(struct ata_port *ap);
|
||||
static void sil24_port_stop(struct ata_port *ap);
|
||||
static void sil24_host_stop(struct ata_host_set *host_set);
|
||||
static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
|
||||
static int sil24_pci_device_resume(struct pci_dev *pdev);
|
||||
|
||||
static const struct pci_device_id sil24_pci_tbl[] = {
|
||||
{ 0x1095, 0x3124, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BID_SIL3124 },
|
||||
@ -353,6 +355,8 @@ static struct pci_driver sil24_pci_driver = {
|
||||
.id_table = sil24_pci_tbl,
|
||||
.probe = sil24_init_one,
|
||||
.remove = ata_pci_remove_one, /* safe? */
|
||||
.suspend = ata_pci_device_suspend,
|
||||
.resume = sil24_pci_device_resume,
|
||||
};
|
||||
|
||||
static struct scsi_host_template sil24_sht = {
|
||||
@ -372,6 +376,8 @@ static struct scsi_host_template sil24_sht = {
|
||||
.slave_configure = ata_scsi_slave_config,
|
||||
.slave_destroy = ata_scsi_slave_destroy,
|
||||
.bios_param = ata_std_bios_param,
|
||||
.suspend = ata_scsi_device_suspend,
|
||||
.resume = ata_scsi_device_resume,
|
||||
};
|
||||
|
||||
static const struct ata_port_operations sil24_ops = {
|
||||
@ -1179,6 +1185,25 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int sil24_pci_device_resume(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host_set *host_set = dev_get_drvdata(&pdev->dev);
|
||||
struct sil24_host_priv *hpriv = host_set->private_data;
|
||||
|
||||
ata_pci_device_do_resume(pdev);
|
||||
|
||||
if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND)
|
||||
writel(HOST_CTRL_GLOBAL_RST, hpriv->host_base + HOST_CTRL);
|
||||
|
||||
sil24_init_controller(pdev, host_set->n_ports,
|
||||
host_set->ports[0]->flags,
|
||||
hpriv->host_base, hpriv->port_base);
|
||||
|
||||
ata_host_set_resume(host_set);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init sil24_init(void)
|
||||
{
|
||||
return pci_module_init(&sil24_pci_driver);
|
||||
|
Loading…
Reference in New Issue
Block a user