2019-06-04 11:11:33 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2015-07-27 18:04:03 +03:00
/*
* Intel LPSS PCI support .
*
* Copyright ( C ) 2015 , Intel Corporation
*
* Authors : Andy Shevchenko < andriy . shevchenko @ linux . intel . com >
* Mika Westerberg < mika . westerberg @ linux . intel . com >
*/
# include <linux/ioport.h>
# include <linux/kernel.h>
# include <linux/module.h>
# include <linux/pci.h>
# include <linux/pm_runtime.h>
2015-11-30 18:11:42 +03:00
# include <linux/property.h>
2015-07-27 18:04:03 +03:00
# include "intel-lpss.h"
static int intel_lpss_pci_probe ( struct pci_dev * pdev ,
const struct pci_device_id * id )
{
struct intel_lpss_platform_info * info ;
int ret ;
ret = pcim_enable_device ( pdev ) ;
if ( ret )
return ret ;
info = devm_kmemdup ( & pdev - > dev , ( void * ) id - > driver_data , sizeof ( * info ) ,
GFP_KERNEL ) ;
if ( ! info )
return - ENOMEM ;
info - > mem = & pdev - > resource [ 0 ] ;
info - > irq = pdev - > irq ;
2019-07-05 07:55:03 +03:00
pdev - > d3cold_delay = 0 ;
2015-07-27 18:04:03 +03:00
/* Probably it is enough to set this for iDMA capable devices only */
pci_set_master ( pdev ) ;
2016-11-15 13:37:04 +03:00
pci_try_set_mwi ( pdev ) ;
2015-07-27 18:04:03 +03:00
ret = intel_lpss_probe ( & pdev - > dev , info ) ;
if ( ret )
return ret ;
pm_runtime_put ( & pdev - > dev ) ;
pm_runtime_allow ( & pdev - > dev ) ;
return 0 ;
}
static void intel_lpss_pci_remove ( struct pci_dev * pdev )
{
pm_runtime_forbid ( & pdev - > dev ) ;
pm_runtime_get_sync ( & pdev - > dev ) ;
intel_lpss_remove ( & pdev - > dev ) ;
}
static INTEL_LPSS_PM_OPS ( intel_lpss_pci_pm_ops ) ;
static const struct intel_lpss_platform_info spt_info = {
. clk_rate = 120000000 ,
} ;
2015-11-30 18:11:42 +03:00
static struct property_entry spt_i2c_properties [ ] = {
PROPERTY_ENTRY_U32 ( " i2c-sda-hold-time-ns " , 230 ) ,
{ } ,
} ;
static const struct intel_lpss_platform_info spt_i2c_info = {
. clk_rate = 120000000 ,
2016-03-29 14:52:23 +03:00
. properties = spt_i2c_properties ,
2015-11-30 18:11:42 +03:00
} ;
2015-11-30 18:11:43 +03:00
static struct property_entry uart_properties [ ] = {
PROPERTY_ENTRY_U32 ( " reg-io-width " , 4 ) ,
PROPERTY_ENTRY_U32 ( " reg-shift " , 2 ) ,
PROPERTY_ENTRY_BOOL ( " snps,uart-16550-compatible " ) ,
{ } ,
} ;
2015-07-27 18:04:03 +03:00
static const struct intel_lpss_platform_info spt_uart_info = {
. clk_rate = 120000000 ,
. clk_con_id = " baudclk " ,
2016-03-29 14:52:23 +03:00
. properties = uart_properties ,
2015-07-27 18:04:03 +03:00
} ;
2015-10-21 12:41:48 +03:00
static const struct intel_lpss_platform_info bxt_info = {
. clk_rate = 100000000 ,
} ;
static const struct intel_lpss_platform_info bxt_uart_info = {
. clk_rate = 100000000 ,
. clk_con_id = " baudclk " ,
2016-03-29 14:52:23 +03:00
. properties = uart_properties ,
2015-10-21 12:41:48 +03:00
} ;
2016-01-26 15:17:49 +03:00
static struct property_entry bxt_i2c_properties [ ] = {
PROPERTY_ENTRY_U32 ( " i2c-sda-hold-time-ns " , 42 ) ,
PROPERTY_ENTRY_U32 ( " i2c-sda-falling-time-ns " , 171 ) ,
PROPERTY_ENTRY_U32 ( " i2c-scl-falling-time-ns " , 208 ) ,
{ } ,
} ;
2015-10-21 12:41:48 +03:00
static const struct intel_lpss_platform_info bxt_i2c_info = {
. clk_rate = 133000000 ,
2016-03-29 14:52:23 +03:00
. properties = bxt_i2c_properties ,
2015-10-21 12:41:48 +03:00
} ;
2016-09-12 14:41:33 +03:00
static struct property_entry apl_i2c_properties [ ] = {
PROPERTY_ENTRY_U32 ( " i2c-sda-hold-time-ns " , 207 ) ,
PROPERTY_ENTRY_U32 ( " i2c-sda-falling-time-ns " , 171 ) ,
PROPERTY_ENTRY_U32 ( " i2c-scl-falling-time-ns " , 208 ) ,
{ } ,
} ;
static const struct intel_lpss_platform_info apl_i2c_info = {
. clk_rate = 133000000 ,
. properties = apl_i2c_properties ,
} ;
2019-09-04 08:56:25 +03:00
static struct property_entry glk_i2c_properties [ ] = {
PROPERTY_ENTRY_U32 ( " i2c-sda-hold-time-ns " , 313 ) ,
PROPERTY_ENTRY_U32 ( " i2c-sda-falling-time-ns " , 171 ) ,
PROPERTY_ENTRY_U32 ( " i2c-scl-falling-time-ns " , 290 ) ,
{ } ,
} ;
static const struct intel_lpss_platform_info glk_i2c_info = {
. clk_rate = 133000000 ,
. properties = glk_i2c_properties ,
} ;
2018-05-18 11:38:27 +03:00
static const struct intel_lpss_platform_info cnl_i2c_info = {
. clk_rate = 216000000 ,
. properties = spt_i2c_properties ,
} ;
2020-03-16 17:32:24 +03:00
static const struct intel_lpss_platform_info ehl_i2c_info = {
. clk_rate = 100000000 ,
. properties = bxt_i2c_properties ,
} ;
2015-07-27 18:04:03 +03:00
static const struct pci_device_id intel_lpss_pci_ids [ ] = {
2019-10-29 12:44:09 +03:00
/* CML-LP */
2019-04-30 19:56:26 +03:00
{ PCI_VDEVICE ( INTEL , 0x02a8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x02a9 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x02aa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x02ab ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x02c5 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x02c6 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x02c7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x02e8 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x02e9 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x02ea ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x02eb ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x02fb ) , ( kernel_ulong_t ) & spt_info } ,
2019-10-29 12:44:09 +03:00
/* CML-H */
{ PCI_VDEVICE ( INTEL , 0x06a8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x06a9 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x06aa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x06ab ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x06c7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x06e8 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x06e9 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x06ea ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x06eb ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x06fb ) , ( kernel_ulong_t ) & spt_info } ,
2016-01-14 19:12:31 +03:00
/* BXT A-Step */
2015-10-21 12:41:48 +03:00
{ PCI_VDEVICE ( INTEL , 0x0aac ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0aae ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ab0 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ab2 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ab4 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ab6 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ab8 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0aba ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x0abc ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x0abe ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ac0 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ac2 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ac4 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x0ac6 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x0aee ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2016-01-14 19:12:31 +03:00
/* BXT B-Step */
{ PCI_VDEVICE ( INTEL , 0x1aac ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1aae ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ab0 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ab2 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ab4 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ab6 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ab8 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1aba ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x1abc ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x1abe ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ac0 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ac2 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ac4 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x1ac6 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x1aee ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2020-06-15 19:10:32 +03:00
/* EBG */
{ PCI_VDEVICE ( INTEL , 0x1bad ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x1bae ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2017-01-11 15:16:09 +03:00
/* GLK */
2019-09-04 08:56:25 +03:00
{ PCI_VDEVICE ( INTEL , 0x31ac ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31ae ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31b0 ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31b2 ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31b4 ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31b6 ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31b8 ) , ( kernel_ulong_t ) & glk_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x31ba ) , ( kernel_ulong_t ) & glk_i2c_info } ,
2017-01-11 15:16:09 +03:00
{ PCI_VDEVICE ( INTEL , 0x31bc ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x31be ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x31c0 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x31c2 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x31c4 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x31c6 ) , ( kernel_ulong_t ) & bxt_info } ,
2019-05-24 21:13:44 +03:00
{ PCI_VDEVICE ( INTEL , 0x31ee ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2018-06-27 23:48:08 +03:00
/* ICL-LP */
{ PCI_VDEVICE ( INTEL , 0x34a8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x34a9 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x34aa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x34ab ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x34c5 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x34c6 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x34c7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x34e8 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x34e9 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x34ea ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x34eb ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x34fb ) , ( kernel_ulong_t ) & spt_info } ,
2020-06-25 16:10:36 +03:00
/* TGL-H */
{ PCI_VDEVICE ( INTEL , 0x43a7 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x43a8 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x43a9 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x43aa ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x43ab ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x43ad ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43ae ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43d8 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43da ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x43e8 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43e9 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43ea ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43eb ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x43fb ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x43fd ) , ( kernel_ulong_t ) & bxt_info } ,
2019-06-21 15:58:07 +03:00
/* EHL */
{ PCI_VDEVICE ( INTEL , 0x4b28 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b29 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b2a ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b2b ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b37 ) , ( kernel_ulong_t ) & bxt_info } ,
2020-03-16 17:32:24 +03:00
{ PCI_VDEVICE ( INTEL , 0x4b44 ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b45 ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b4b ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b4c ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
2019-06-21 15:58:07 +03:00
{ PCI_VDEVICE ( INTEL , 0x4b4d ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2020-03-16 17:32:24 +03:00
{ PCI_VDEVICE ( INTEL , 0x4b78 ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b79 ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b7a ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4b7b ) , ( kernel_ulong_t ) & ehl_i2c_info } ,
2019-12-09 17:15:07 +03:00
/* JSL */
{ PCI_VDEVICE ( INTEL , 0x4da8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x4da9 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x4daa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x4dab ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x4dc5 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4dc6 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
2020-04-14 12:51:34 +03:00
{ PCI_VDEVICE ( INTEL , 0x4dc7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2019-12-09 17:15:07 +03:00
{ PCI_VDEVICE ( INTEL , 0x4de8 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4de9 ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4dea ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4deb ) , ( kernel_ulong_t ) & bxt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x4dfb ) , ( kernel_ulong_t ) & spt_info } ,
2015-10-21 12:41:48 +03:00
/* APL */
2016-09-12 14:41:33 +03:00
{ PCI_VDEVICE ( INTEL , 0x5aac ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5aae ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ab0 ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ab2 ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ab4 ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ab6 ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ab8 ) , ( kernel_ulong_t ) & apl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x5aba ) , ( kernel_ulong_t ) & apl_i2c_info } ,
2015-10-21 12:41:48 +03:00
{ PCI_VDEVICE ( INTEL , 0x5abc ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x5abe ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ac0 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ac2 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ac4 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x5ac6 ) , ( kernel_ulong_t ) & bxt_info } ,
{ PCI_VDEVICE ( INTEL , 0x5aee ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2020-08-21 17:25:09 +03:00
/* LKF */
{ PCI_VDEVICE ( INTEL , 0x98a8 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x98a9 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x98c7 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
2015-07-27 18:04:03 +03:00
/* SPT-LP */
{ PCI_VDEVICE ( INTEL , 0x9d27 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d28 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d29 ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d2a ) , ( kernel_ulong_t ) & spt_info } ,
2015-11-30 18:11:42 +03:00
{ PCI_VDEVICE ( INTEL , 0x9d60 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d61 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d62 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d63 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d64 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9d65 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
2015-07-27 18:04:03 +03:00
{ PCI_VDEVICE ( INTEL , 0x9d66 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2017-05-15 11:23:14 +03:00
/* CNL-LP */
{ PCI_VDEVICE ( INTEL , 0x9da8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x9da9 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0x9daa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0x9dab ) , ( kernel_ulong_t ) & spt_info } ,
2018-05-18 11:38:27 +03:00
{ PCI_VDEVICE ( INTEL , 0x9dc5 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9dc6 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
2017-05-15 11:23:14 +03:00
{ PCI_VDEVICE ( INTEL , 0x9dc7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2018-05-18 11:38:27 +03:00
{ PCI_VDEVICE ( INTEL , 0x9de8 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9de9 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9dea ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0x9deb ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
2019-05-24 21:13:44 +03:00
{ PCI_VDEVICE ( INTEL , 0x9dfb ) , ( kernel_ulong_t ) & spt_info } ,
2019-08-01 16:28:41 +03:00
/* TGL-LP */
{ PCI_VDEVICE ( INTEL , 0xa0a8 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0a9 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0aa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0ab ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0c5 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0c6 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0c7 ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0d8 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0d9 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0da ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0db ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0dc ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0dd ) , ( kernel_ulong_t ) & bxt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0de ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0df ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0e8 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0e9 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0ea ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0eb ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0fb ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0fd ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa0fe ) , ( kernel_ulong_t ) & spt_info } ,
2015-07-27 18:04:03 +03:00
/* SPT-H */
{ PCI_VDEVICE ( INTEL , 0xa127 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa128 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa129 ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa12a ) , ( kernel_ulong_t ) & spt_info } ,
2015-11-30 18:11:42 +03:00
{ PCI_VDEVICE ( INTEL , 0xa160 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa161 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
2017-08-19 16:26:49 +03:00
{ PCI_VDEVICE ( INTEL , 0xa162 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
2015-07-27 18:04:03 +03:00
{ PCI_VDEVICE ( INTEL , 0xa166 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2016-07-04 18:24:54 +03:00
/* KBL-H */
2016-09-29 12:59:39 +03:00
{ PCI_VDEVICE ( INTEL , 0xa2a7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2a8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2a9 ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2aa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2e0 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2e1 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2e2 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2e3 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa2e6 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2017-05-15 11:23:14 +03:00
/* CNL-H */
{ PCI_VDEVICE ( INTEL , 0xa328 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa329 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa32a ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa32b ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa347 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2018-05-18 11:38:27 +03:00
{ PCI_VDEVICE ( INTEL , 0xa368 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa369 ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa36a ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa36b ) , ( kernel_ulong_t ) & cnl_i2c_info } ,
2019-05-24 21:13:44 +03:00
{ PCI_VDEVICE ( INTEL , 0xa37b ) , ( kernel_ulong_t ) & spt_info } ,
2020-01-13 15:57:29 +03:00
/* CML-V */
{ PCI_VDEVICE ( INTEL , 0xa3a7 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3a8 ) , ( kernel_ulong_t ) & spt_uart_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3a9 ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3aa ) , ( kernel_ulong_t ) & spt_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3e0 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3e1 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3e2 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3e3 ) , ( kernel_ulong_t ) & spt_i2c_info } ,
{ PCI_VDEVICE ( INTEL , 0xa3e6 ) , ( kernel_ulong_t ) & spt_uart_info } ,
2015-07-27 18:04:03 +03:00
{ }
} ;
MODULE_DEVICE_TABLE ( pci , intel_lpss_pci_ids ) ;
static struct pci_driver intel_lpss_pci_driver = {
. name = " intel-lpss " ,
. id_table = intel_lpss_pci_ids ,
. probe = intel_lpss_pci_probe ,
. remove = intel_lpss_pci_remove ,
. driver = {
. pm = & intel_lpss_pci_pm_ops ,
} ,
} ;
module_pci_driver ( intel_lpss_pci_driver ) ;
MODULE_AUTHOR ( " Andy Shevchenko <andriy.shevchenko@linux.intel.com> " ) ;
MODULE_AUTHOR ( " Mika Westerberg <mika.westerberg@linux.intel.com> " ) ;
MODULE_DESCRIPTION ( " Intel LPSS PCI driver " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;