forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.6 KiB
77 lines
1.6 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
/* |
|
* Intel MID platform PM support |
|
* |
|
* Copyright (C) 2016, Intel Corporation |
|
* |
|
* Author: Andy Shevchenko <[email protected]> |
|
*/ |
|
|
|
#include <linux/init.h> |
|
#include <linux/pci.h> |
|
|
|
#include <asm/cpu_device_id.h> |
|
#include <asm/intel-family.h> |
|
#include <asm/intel-mid.h> |
|
|
|
#include "pci.h" |
|
|
|
static bool mid_pci_power_manageable(struct pci_dev *dev) |
|
{ |
|
return true; |
|
} |
|
|
|
static int mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state) |
|
{ |
|
return intel_mid_pci_set_power_state(pdev, state); |
|
} |
|
|
|
static pci_power_t mid_pci_get_power_state(struct pci_dev *pdev) |
|
{ |
|
return intel_mid_pci_get_power_state(pdev); |
|
} |
|
|
|
static pci_power_t mid_pci_choose_state(struct pci_dev *pdev) |
|
{ |
|
return PCI_D3hot; |
|
} |
|
|
|
static int mid_pci_wakeup(struct pci_dev *dev, bool enable) |
|
{ |
|
return 0; |
|
} |
|
|
|
static bool mid_pci_need_resume(struct pci_dev *dev) |
|
{ |
|
return false; |
|
} |
|
|
|
static const struct pci_platform_pm_ops mid_pci_platform_pm = { |
|
.is_manageable = mid_pci_power_manageable, |
|
.set_state = mid_pci_set_power_state, |
|
.get_state = mid_pci_get_power_state, |
|
.choose_state = mid_pci_choose_state, |
|
.set_wakeup = mid_pci_wakeup, |
|
.need_resume = mid_pci_need_resume, |
|
}; |
|
|
|
/* |
|
* This table should be in sync with the one in |
|
* arch/x86/platform/intel-mid/pwr.c. |
|
*/ |
|
static const struct x86_cpu_id lpss_cpu_ids[] = { |
|
X86_MATCH_INTEL_FAM6_MODEL(ATOM_SALTWELL_MID, NULL), |
|
X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_MID, NULL), |
|
{} |
|
}; |
|
|
|
static int __init mid_pci_init(void) |
|
{ |
|
const struct x86_cpu_id *id; |
|
|
|
id = x86_match_cpu(lpss_cpu_ids); |
|
if (id) |
|
pci_set_platform_pm(&mid_pci_platform_pm); |
|
return 0; |
|
} |
|
arch_initcall(mid_pci_init);
|
|
|