18cfab3cfSBjorn Helgaas // SPDX-License-Identifier: GPL-2.0 25823d089SAndy Shevchenko /* 35823d089SAndy Shevchenko * Intel MID platform PM support 45823d089SAndy Shevchenko * 55823d089SAndy Shevchenko * Copyright (C) 2016, Intel Corporation 65823d089SAndy Shevchenko * 75823d089SAndy Shevchenko * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com> 85823d089SAndy Shevchenko */ 95823d089SAndy Shevchenko 105823d089SAndy Shevchenko #include <linux/init.h> 115823d089SAndy Shevchenko #include <linux/pci.h> 125823d089SAndy Shevchenko 135823d089SAndy Shevchenko #include <asm/cpu_device_id.h> 145823d089SAndy Shevchenko #include <asm/intel-family.h> 155823d089SAndy Shevchenko #include <asm/intel-mid.h> 165823d089SAndy Shevchenko 175823d089SAndy Shevchenko #include "pci.h" 185823d089SAndy Shevchenko 19*d5b0d883SRafael J. Wysocki static bool pci_mid_pm_enabled __read_mostly; 20*d5b0d883SRafael J. Wysocki pci_use_mid_pm(void)21*d5b0d883SRafael J. Wysockibool pci_use_mid_pm(void) 225823d089SAndy Shevchenko { 23*d5b0d883SRafael J. Wysocki return pci_mid_pm_enabled; 245823d089SAndy Shevchenko } 255823d089SAndy Shevchenko mid_pci_set_power_state(struct pci_dev * pdev,pci_power_t state)26*d5b0d883SRafael J. Wysockiint mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state) 275823d089SAndy Shevchenko { 285823d089SAndy Shevchenko return intel_mid_pci_set_power_state(pdev, state); 295823d089SAndy Shevchenko } 305823d089SAndy Shevchenko mid_pci_get_power_state(struct pci_dev * pdev)31*d5b0d883SRafael J. Wysockipci_power_t mid_pci_get_power_state(struct pci_dev *pdev) 32e8a6123eSLukas Wunner { 33e8a6123eSLukas Wunner return intel_mid_pci_get_power_state(pdev); 34e8a6123eSLukas Wunner } 35e8a6123eSLukas Wunner 368e522e1dSAndy Shevchenko /* 378e522e1dSAndy Shevchenko * This table should be in sync with the one in 388e522e1dSAndy Shevchenko * arch/x86/platform/intel-mid/pwr.c. 398e522e1dSAndy Shevchenko */ 405823d089SAndy Shevchenko static const struct x86_cpu_id lpss_cpu_ids[] = { 4191e503e6SThomas Gleixner X86_MATCH_INTEL_FAM6_MODEL(ATOM_SALTWELL_MID, NULL), 4291e503e6SThomas Gleixner X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_MID, NULL), 435823d089SAndy Shevchenko {} 445823d089SAndy Shevchenko }; 455823d089SAndy Shevchenko mid_pci_init(void)465823d089SAndy Shevchenkostatic int __init mid_pci_init(void) 475823d089SAndy Shevchenko { 485823d089SAndy Shevchenko const struct x86_cpu_id *id; 495823d089SAndy Shevchenko 505823d089SAndy Shevchenko id = x86_match_cpu(lpss_cpu_ids); 515823d089SAndy Shevchenko if (id) 52*d5b0d883SRafael J. Wysocki pci_mid_pm_enabled = true; 53*d5b0d883SRafael J. Wysocki 545823d089SAndy Shevchenko return 0; 555823d089SAndy Shevchenko } 565823d089SAndy Shevchenko arch_initcall(mid_pci_init); 57