hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// SPDX-License-Identifier: GPL-2.0
/*
 * Intel MID platform PM support
 *
 * Copyright (C) 2016, Intel Corporation
 *
 * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 */
 
#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);