xref: /openbmc/linux/drivers/mfd/intel-lpss-pci.c (revision fe55d732387ab39b08540fc93e829b409ec2161a)
1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
24b45efe8SAndy Shevchenko /*
34b45efe8SAndy Shevchenko  * Intel LPSS PCI support.
44b45efe8SAndy Shevchenko  *
54b45efe8SAndy Shevchenko  * Copyright (C) 2015, Intel Corporation
64b45efe8SAndy Shevchenko  *
74b45efe8SAndy Shevchenko  * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
84b45efe8SAndy Shevchenko  *          Mika Westerberg <mika.westerberg@linux.intel.com>
94b45efe8SAndy Shevchenko  */
104b45efe8SAndy Shevchenko 
114b45efe8SAndy Shevchenko #include <linux/ioport.h>
124b45efe8SAndy Shevchenko #include <linux/kernel.h>
134b45efe8SAndy Shevchenko #include <linux/module.h>
144b45efe8SAndy Shevchenko #include <linux/pci.h>
154b45efe8SAndy Shevchenko #include <linux/pm_runtime.h>
16028af594SMika Westerberg #include <linux/property.h>
17*fe55d732SAndy Shevchenko #include <linux/pxa2xx_ssp.h>
184b45efe8SAndy Shevchenko 
194b45efe8SAndy Shevchenko #include "intel-lpss.h"
204b45efe8SAndy Shevchenko 
21e6b14206SHans de Goede /* Some DSDTs have an unused GEXP ACPI device conflicting with I2C4 resources */
22e6b14206SHans de Goede static const struct pci_device_id ignore_resource_conflicts_ids[] = {
23e6b14206SHans de Goede 	/* Microsoft Surface Go (version 1) I2C4 */
24e6b14206SHans de Goede 	{ PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, 0x9d64, 0x152d, 0x1182), },
25e6b14206SHans de Goede 	/* Microsoft Surface Go 2 I2C4 */
26e6b14206SHans de Goede 	{ PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, 0x9d64, 0x152d, 0x1237), },
27e6b14206SHans de Goede 	{ }
28e6b14206SHans de Goede };
29e6b14206SHans de Goede 
304b45efe8SAndy Shevchenko static int intel_lpss_pci_probe(struct pci_dev *pdev,
314b45efe8SAndy Shevchenko 				const struct pci_device_id *id)
324b45efe8SAndy Shevchenko {
334b45efe8SAndy Shevchenko 	struct intel_lpss_platform_info *info;
344b45efe8SAndy Shevchenko 	int ret;
354b45efe8SAndy Shevchenko 
364b45efe8SAndy Shevchenko 	ret = pcim_enable_device(pdev);
374b45efe8SAndy Shevchenko 	if (ret)
384b45efe8SAndy Shevchenko 		return ret;
394b45efe8SAndy Shevchenko 
404b45efe8SAndy Shevchenko 	info = devm_kmemdup(&pdev->dev, (void *)id->driver_data, sizeof(*info),
414b45efe8SAndy Shevchenko 			    GFP_KERNEL);
424b45efe8SAndy Shevchenko 	if (!info)
434b45efe8SAndy Shevchenko 		return -ENOMEM;
444b45efe8SAndy Shevchenko 
454b45efe8SAndy Shevchenko 	info->mem = &pdev->resource[0];
464b45efe8SAndy Shevchenko 	info->irq = pdev->irq;
474b45efe8SAndy Shevchenko 
48e6b14206SHans de Goede 	if (pci_match_id(ignore_resource_conflicts_ids, pdev))
49e6b14206SHans de Goede 		info->ignore_resource_conflicts = true;
50e6b14206SHans de Goede 
5176380a60SKai-Heng Feng 	pdev->d3cold_delay = 0;
5276380a60SKai-Heng Feng 
534b45efe8SAndy Shevchenko 	/* Probably it is enough to set this for iDMA capable devices only */
544b45efe8SAndy Shevchenko 	pci_set_master(pdev);
5585a9419aSAndy Shevchenko 	pci_try_set_mwi(pdev);
564b45efe8SAndy Shevchenko 
574b45efe8SAndy Shevchenko 	ret = intel_lpss_probe(&pdev->dev, info);
584b45efe8SAndy Shevchenko 	if (ret)
594b45efe8SAndy Shevchenko 		return ret;
604b45efe8SAndy Shevchenko 
614b45efe8SAndy Shevchenko 	pm_runtime_put(&pdev->dev);
624b45efe8SAndy Shevchenko 	pm_runtime_allow(&pdev->dev);
634b45efe8SAndy Shevchenko 
644b45efe8SAndy Shevchenko 	return 0;
654b45efe8SAndy Shevchenko }
664b45efe8SAndy Shevchenko 
674b45efe8SAndy Shevchenko static void intel_lpss_pci_remove(struct pci_dev *pdev)
684b45efe8SAndy Shevchenko {
694b45efe8SAndy Shevchenko 	pm_runtime_forbid(&pdev->dev);
704b45efe8SAndy Shevchenko 	pm_runtime_get_sync(&pdev->dev);
714b45efe8SAndy Shevchenko 
724b45efe8SAndy Shevchenko 	intel_lpss_remove(&pdev->dev);
734b45efe8SAndy Shevchenko }
744b45efe8SAndy Shevchenko 
754b45efe8SAndy Shevchenko static INTEL_LPSS_PM_OPS(intel_lpss_pci_pm_ops);
764b45efe8SAndy Shevchenko 
77*fe55d732SAndy Shevchenko static const struct property_entry spt_spi_properties[] = {
78*fe55d732SAndy Shevchenko 	PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_SPT_SSP),
79*fe55d732SAndy Shevchenko 	{ }
80*fe55d732SAndy Shevchenko };
81*fe55d732SAndy Shevchenko 
82*fe55d732SAndy Shevchenko static const struct software_node spt_spi_node = {
83*fe55d732SAndy Shevchenko 	.properties = spt_spi_properties,
84*fe55d732SAndy Shevchenko };
85*fe55d732SAndy Shevchenko 
864b45efe8SAndy Shevchenko static const struct intel_lpss_platform_info spt_info = {
874b45efe8SAndy Shevchenko 	.clk_rate = 120000000,
88*fe55d732SAndy Shevchenko 	.swnode = &spt_spi_node,
894b45efe8SAndy Shevchenko };
904b45efe8SAndy Shevchenko 
919677e6f7SAndy Shevchenko static const struct property_entry spt_i2c_properties[] = {
92028af594SMika Westerberg 	PROPERTY_ENTRY_U32("i2c-sda-hold-time-ns", 230),
93028af594SMika Westerberg 	{ },
94028af594SMika Westerberg };
95028af594SMika Westerberg 
9603152e35SHeikki Krogerus static const struct software_node spt_i2c_node = {
9703152e35SHeikki Krogerus 	.properties = spt_i2c_properties,
9803152e35SHeikki Krogerus };
9903152e35SHeikki Krogerus 
100028af594SMika Westerberg static const struct intel_lpss_platform_info spt_i2c_info = {
101028af594SMika Westerberg 	.clk_rate = 120000000,
10203152e35SHeikki Krogerus 	.swnode = &spt_i2c_node,
103028af594SMika Westerberg };
104028af594SMika Westerberg 
1059677e6f7SAndy Shevchenko static const struct property_entry uart_properties[] = {
106ec14c539SAndy Shevchenko 	PROPERTY_ENTRY_U32("reg-io-width", 4),
107ec14c539SAndy Shevchenko 	PROPERTY_ENTRY_U32("reg-shift", 2),
108ec14c539SAndy Shevchenko 	PROPERTY_ENTRY_BOOL("snps,uart-16550-compatible"),
109ec14c539SAndy Shevchenko 	{ },
110ec14c539SAndy Shevchenko };
111ec14c539SAndy Shevchenko 
11203152e35SHeikki Krogerus static const struct software_node uart_node = {
11303152e35SHeikki Krogerus 	.properties = uart_properties,
11403152e35SHeikki Krogerus };
11503152e35SHeikki Krogerus 
1164b45efe8SAndy Shevchenko static const struct intel_lpss_platform_info spt_uart_info = {
1174b45efe8SAndy Shevchenko 	.clk_rate = 120000000,
1184b45efe8SAndy Shevchenko 	.clk_con_id = "baudclk",
11903152e35SHeikki Krogerus 	.swnode = &uart_node,
1204b45efe8SAndy Shevchenko };
1214b45efe8SAndy Shevchenko 
122*fe55d732SAndy Shevchenko static const struct property_entry bxt_spi_properties[] = {
123*fe55d732SAndy Shevchenko 	PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_BXT_SSP),
124*fe55d732SAndy Shevchenko 	{ }
125*fe55d732SAndy Shevchenko };
126*fe55d732SAndy Shevchenko 
127*fe55d732SAndy Shevchenko static const struct software_node bxt_spi_node = {
128*fe55d732SAndy Shevchenko 	.properties = bxt_spi_properties,
129*fe55d732SAndy Shevchenko };
130*fe55d732SAndy Shevchenko 
131ff0a04a6SAndy Shevchenko static const struct intel_lpss_platform_info bxt_info = {
132ff0a04a6SAndy Shevchenko 	.clk_rate = 100000000,
133*fe55d732SAndy Shevchenko 	.swnode = &bxt_spi_node,
134ff0a04a6SAndy Shevchenko };
135ff0a04a6SAndy Shevchenko 
136ff0a04a6SAndy Shevchenko static const struct intel_lpss_platform_info bxt_uart_info = {
137ff0a04a6SAndy Shevchenko 	.clk_rate = 100000000,
138ff0a04a6SAndy Shevchenko 	.clk_con_id = "baudclk",
13903152e35SHeikki Krogerus 	.swnode = &uart_node,
140ff0a04a6SAndy Shevchenko };
141ff0a04a6SAndy Shevchenko 
1429677e6f7SAndy Shevchenko static const struct property_entry bxt_i2c_properties[] = {
1430343b2f4SMika Westerberg 	PROPERTY_ENTRY_U32("i2c-sda-hold-time-ns", 42),
1440343b2f4SMika Westerberg 	PROPERTY_ENTRY_U32("i2c-sda-falling-time-ns", 171),
1450343b2f4SMika Westerberg 	PROPERTY_ENTRY_U32("i2c-scl-falling-time-ns", 208),
1460343b2f4SMika Westerberg 	{ },
1470343b2f4SMika Westerberg };
1480343b2f4SMika Westerberg 
14903152e35SHeikki Krogerus static const struct software_node bxt_i2c_node = {
15003152e35SHeikki Krogerus 	.properties = bxt_i2c_properties,
15103152e35SHeikki Krogerus };
15203152e35SHeikki Krogerus 
153ff0a04a6SAndy Shevchenko static const struct intel_lpss_platform_info bxt_i2c_info = {
154ff0a04a6SAndy Shevchenko 	.clk_rate = 133000000,
15503152e35SHeikki Krogerus 	.swnode = &bxt_i2c_node,
156ff0a04a6SAndy Shevchenko };
157ff0a04a6SAndy Shevchenko 
1589677e6f7SAndy Shevchenko static const struct property_entry apl_i2c_properties[] = {
159c50cdd62SJarkko Nikula 	PROPERTY_ENTRY_U32("i2c-sda-hold-time-ns", 207),
160c50cdd62SJarkko Nikula 	PROPERTY_ENTRY_U32("i2c-sda-falling-time-ns", 171),
161c50cdd62SJarkko Nikula 	PROPERTY_ENTRY_U32("i2c-scl-falling-time-ns", 208),
162c50cdd62SJarkko Nikula 	{ },
163c50cdd62SJarkko Nikula };
164c50cdd62SJarkko Nikula 
16503152e35SHeikki Krogerus static const struct software_node apl_i2c_node = {
16603152e35SHeikki Krogerus 	.properties = apl_i2c_properties,
16703152e35SHeikki Krogerus };
16803152e35SHeikki Krogerus 
169c50cdd62SJarkko Nikula static const struct intel_lpss_platform_info apl_i2c_info = {
170c50cdd62SJarkko Nikula 	.clk_rate = 133000000,
17103152e35SHeikki Krogerus 	.swnode = &apl_i2c_node,
172c50cdd62SJarkko Nikula };
173c50cdd62SJarkko Nikula 
1749677e6f7SAndy Shevchenko static const struct property_entry glk_i2c_properties[] = {
1753f31bc67SJarkko Nikula 	PROPERTY_ENTRY_U32("i2c-sda-hold-time-ns", 313),
1763f31bc67SJarkko Nikula 	PROPERTY_ENTRY_U32("i2c-sda-falling-time-ns", 171),
1773f31bc67SJarkko Nikula 	PROPERTY_ENTRY_U32("i2c-scl-falling-time-ns", 290),
1783f31bc67SJarkko Nikula 	{ },
1793f31bc67SJarkko Nikula };
1803f31bc67SJarkko Nikula 
18103152e35SHeikki Krogerus static const struct software_node glk_i2c_node = {
18203152e35SHeikki Krogerus 	.properties = glk_i2c_properties,
18303152e35SHeikki Krogerus };
18403152e35SHeikki Krogerus 
1853f31bc67SJarkko Nikula static const struct intel_lpss_platform_info glk_i2c_info = {
1863f31bc67SJarkko Nikula 	.clk_rate = 133000000,
18703152e35SHeikki Krogerus 	.swnode = &glk_i2c_node,
1883f31bc67SJarkko Nikula };
1893f31bc67SJarkko Nikula 
190*fe55d732SAndy Shevchenko static const struct property_entry cnl_spi_properties[] = {
191*fe55d732SAndy Shevchenko 	PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_CNL_SSP),
192*fe55d732SAndy Shevchenko 	{ }
193*fe55d732SAndy Shevchenko };
194*fe55d732SAndy Shevchenko 
195*fe55d732SAndy Shevchenko static const struct software_node cnl_spi_node = {
196*fe55d732SAndy Shevchenko 	.properties = cnl_spi_properties,
197*fe55d732SAndy Shevchenko };
198*fe55d732SAndy Shevchenko 
199*fe55d732SAndy Shevchenko static const struct intel_lpss_platform_info cnl_info = {
200*fe55d732SAndy Shevchenko 	.clk_rate = 120000000,
201*fe55d732SAndy Shevchenko 	.swnode = &cnl_spi_node,
202*fe55d732SAndy Shevchenko };
203*fe55d732SAndy Shevchenko 
2044e93a658SJarkko Nikula static const struct intel_lpss_platform_info cnl_i2c_info = {
2054e93a658SJarkko Nikula 	.clk_rate = 216000000,
20603152e35SHeikki Krogerus 	.swnode = &spt_i2c_node,
2074e93a658SJarkko Nikula };
2084e93a658SJarkko Nikula 
209d2923aa4SJarkko Nikula static const struct intel_lpss_platform_info ehl_i2c_info = {
210d2923aa4SJarkko Nikula 	.clk_rate = 100000000,
21103152e35SHeikki Krogerus 	.swnode = &bxt_i2c_node,
212d2923aa4SJarkko Nikula };
213d2923aa4SJarkko Nikula 
214*fe55d732SAndy Shevchenko static const struct property_entry tgl_spi_properties[] = {
215*fe55d732SAndy Shevchenko 	PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_CNL_SSP),
216*fe55d732SAndy Shevchenko 	{ }
217*fe55d732SAndy Shevchenko };
218*fe55d732SAndy Shevchenko 
219*fe55d732SAndy Shevchenko static const struct software_node tgl_spi_node = {
220*fe55d732SAndy Shevchenko 	.properties = tgl_spi_properties,
221*fe55d732SAndy Shevchenko };
222*fe55d732SAndy Shevchenko 
223*fe55d732SAndy Shevchenko static const struct intel_lpss_platform_info tgl_info = {
224*fe55d732SAndy Shevchenko 	.clk_rate = 100000000,
225*fe55d732SAndy Shevchenko 	.swnode = &tgl_spi_node,
226*fe55d732SAndy Shevchenko };
227*fe55d732SAndy Shevchenko 
2284b45efe8SAndy Shevchenko static const struct pci_device_id intel_lpss_pci_ids[] = {
229dd047dceSAndy Shevchenko 	/* CML-LP */
230dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02a8), (kernel_ulong_t)&spt_uart_info },
231dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02a9), (kernel_ulong_t)&spt_uart_info },
232*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02aa), (kernel_ulong_t)&cnl_info },
233*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02ab), (kernel_ulong_t)&cnl_info },
234dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02c5), (kernel_ulong_t)&cnl_i2c_info },
235dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02c6), (kernel_ulong_t)&cnl_i2c_info },
236dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02c7), (kernel_ulong_t)&spt_uart_info },
237dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02e8), (kernel_ulong_t)&cnl_i2c_info },
238dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02e9), (kernel_ulong_t)&cnl_i2c_info },
239dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02ea), (kernel_ulong_t)&cnl_i2c_info },
240dd662907SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02eb), (kernel_ulong_t)&cnl_i2c_info },
241*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x02fb), (kernel_ulong_t)&cnl_info },
242dd047dceSAndy Shevchenko 	/* CML-H */
243dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06a8), (kernel_ulong_t)&spt_uart_info },
244dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06a9), (kernel_ulong_t)&spt_uart_info },
245*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06aa), (kernel_ulong_t)&cnl_info },
246*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06ab), (kernel_ulong_t)&cnl_info },
247dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06c7), (kernel_ulong_t)&spt_uart_info },
248dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06e8), (kernel_ulong_t)&cnl_i2c_info },
249dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06e9), (kernel_ulong_t)&cnl_i2c_info },
250dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06ea), (kernel_ulong_t)&cnl_i2c_info },
251dd047dceSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06eb), (kernel_ulong_t)&cnl_i2c_info },
252*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x06fb), (kernel_ulong_t)&cnl_info },
253023269ccSHuiquan Zhong 	/* BXT A-Step */
254ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0aac), (kernel_ulong_t)&bxt_i2c_info },
255ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0aae), (kernel_ulong_t)&bxt_i2c_info },
256ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ab0), (kernel_ulong_t)&bxt_i2c_info },
257ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ab2), (kernel_ulong_t)&bxt_i2c_info },
258ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ab4), (kernel_ulong_t)&bxt_i2c_info },
259ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ab6), (kernel_ulong_t)&bxt_i2c_info },
260ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ab8), (kernel_ulong_t)&bxt_i2c_info },
261ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0aba), (kernel_ulong_t)&bxt_i2c_info },
262ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0abc), (kernel_ulong_t)&bxt_uart_info },
263ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0abe), (kernel_ulong_t)&bxt_uart_info },
264ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ac0), (kernel_ulong_t)&bxt_uart_info },
265ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ac2), (kernel_ulong_t)&bxt_info },
266ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ac4), (kernel_ulong_t)&bxt_info },
267ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0ac6), (kernel_ulong_t)&bxt_info },
268ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x0aee), (kernel_ulong_t)&bxt_uart_info },
269023269ccSHuiquan Zhong 	/* BXT B-Step */
270023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1aac), (kernel_ulong_t)&bxt_i2c_info },
271023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1aae), (kernel_ulong_t)&bxt_i2c_info },
272023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ab0), (kernel_ulong_t)&bxt_i2c_info },
273023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ab2), (kernel_ulong_t)&bxt_i2c_info },
274023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ab4), (kernel_ulong_t)&bxt_i2c_info },
275023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ab6), (kernel_ulong_t)&bxt_i2c_info },
276023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ab8), (kernel_ulong_t)&bxt_i2c_info },
277023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1aba), (kernel_ulong_t)&bxt_i2c_info },
278023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1abc), (kernel_ulong_t)&bxt_uart_info },
279023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1abe), (kernel_ulong_t)&bxt_uart_info },
280023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ac0), (kernel_ulong_t)&bxt_uart_info },
281023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ac2), (kernel_ulong_t)&bxt_info },
282023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ac4), (kernel_ulong_t)&bxt_info },
283023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1ac6), (kernel_ulong_t)&bxt_info },
284023269ccSHuiquan Zhong 	{ PCI_VDEVICE(INTEL, 0x1aee), (kernel_ulong_t)&bxt_uart_info },
2853ea2e4eaSAndy Shevchenko 	/* EBG */
2863ea2e4eaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x1bad), (kernel_ulong_t)&bxt_uart_info },
2873ea2e4eaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x1bae), (kernel_ulong_t)&bxt_uart_info },
288f80e78aaSAndy Shevchenko 	/* GLK */
2893f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31ac), (kernel_ulong_t)&glk_i2c_info },
2903f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31ae), (kernel_ulong_t)&glk_i2c_info },
2913f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31b0), (kernel_ulong_t)&glk_i2c_info },
2923f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31b2), (kernel_ulong_t)&glk_i2c_info },
2933f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31b4), (kernel_ulong_t)&glk_i2c_info },
2943f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31b6), (kernel_ulong_t)&glk_i2c_info },
2953f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31b8), (kernel_ulong_t)&glk_i2c_info },
2963f31bc67SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x31ba), (kernel_ulong_t)&glk_i2c_info },
297f80e78aaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31bc), (kernel_ulong_t)&bxt_uart_info },
298f80e78aaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31be), (kernel_ulong_t)&bxt_uart_info },
299f80e78aaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31c0), (kernel_ulong_t)&bxt_uart_info },
300f80e78aaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31c2), (kernel_ulong_t)&bxt_info },
301f80e78aaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31c4), (kernel_ulong_t)&bxt_info },
302f80e78aaSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31c6), (kernel_ulong_t)&bxt_info },
303f88314c1SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x31ee), (kernel_ulong_t)&bxt_uart_info },
304a13c93b3SMika Westerberg 	/* ICL-LP */
305a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34a8), (kernel_ulong_t)&spt_uart_info },
306a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34a9), (kernel_ulong_t)&spt_uart_info },
307*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x34aa), (kernel_ulong_t)&cnl_info },
308*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x34ab), (kernel_ulong_t)&cnl_info },
309a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34c5), (kernel_ulong_t)&bxt_i2c_info },
310a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34c6), (kernel_ulong_t)&bxt_i2c_info },
311a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34c7), (kernel_ulong_t)&spt_uart_info },
312a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34e8), (kernel_ulong_t)&bxt_i2c_info },
313a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34e9), (kernel_ulong_t)&bxt_i2c_info },
314a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34ea), (kernel_ulong_t)&bxt_i2c_info },
315a13c93b3SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x34eb), (kernel_ulong_t)&bxt_i2c_info },
316*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x34fb), (kernel_ulong_t)&cnl_info },
317ddb1ada4SOrlando Chamberlain 	/* ICL-N */
3189651cf2cSOrlando Chamberlain 	{ PCI_VDEVICE(INTEL, 0x38a8), (kernel_ulong_t)&spt_uart_info },
319bb7fcad4SAndy Shevchenko 	/* TGL-H */
320bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43a7), (kernel_ulong_t)&bxt_uart_info },
321bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43a8), (kernel_ulong_t)&bxt_uart_info },
322bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43a9), (kernel_ulong_t)&bxt_uart_info },
323*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43aa), (kernel_ulong_t)&tgl_info },
324*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43ab), (kernel_ulong_t)&tgl_info },
325bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43ad), (kernel_ulong_t)&bxt_i2c_info },
326bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43ae), (kernel_ulong_t)&bxt_i2c_info },
327bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43d8), (kernel_ulong_t)&bxt_i2c_info },
328bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43da), (kernel_ulong_t)&bxt_uart_info },
329bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43e8), (kernel_ulong_t)&bxt_i2c_info },
330bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43e9), (kernel_ulong_t)&bxt_i2c_info },
331bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43ea), (kernel_ulong_t)&bxt_i2c_info },
332bb7fcad4SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43eb), (kernel_ulong_t)&bxt_i2c_info },
333*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43fb), (kernel_ulong_t)&tgl_info },
334*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x43fd), (kernel_ulong_t)&tgl_info },
33501e4eceeSAndy Shevchenko 	/* EHL */
33601e4eceeSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4b28), (kernel_ulong_t)&bxt_uart_info },
33701e4eceeSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4b29), (kernel_ulong_t)&bxt_uart_info },
33801e4eceeSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4b2a), (kernel_ulong_t)&bxt_info },
33901e4eceeSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4b2b), (kernel_ulong_t)&bxt_info },
34001e4eceeSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4b37), (kernel_ulong_t)&bxt_info },
341d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b44), (kernel_ulong_t)&ehl_i2c_info },
342d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b45), (kernel_ulong_t)&ehl_i2c_info },
343d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b4b), (kernel_ulong_t)&ehl_i2c_info },
344d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b4c), (kernel_ulong_t)&ehl_i2c_info },
34501e4eceeSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4b4d), (kernel_ulong_t)&bxt_uart_info },
346d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b78), (kernel_ulong_t)&ehl_i2c_info },
347d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b79), (kernel_ulong_t)&ehl_i2c_info },
348d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b7a), (kernel_ulong_t)&ehl_i2c_info },
349d2923aa4SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x4b7b), (kernel_ulong_t)&ehl_i2c_info },
35057b89dd2SAndy Shevchenko 	/* JSL */
35157b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4da8), (kernel_ulong_t)&spt_uart_info },
35257b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4da9), (kernel_ulong_t)&spt_uart_info },
353*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4daa), (kernel_ulong_t)&cnl_info },
354*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4dab), (kernel_ulong_t)&cnl_info },
35557b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4dc5), (kernel_ulong_t)&bxt_i2c_info },
35657b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4dc6), (kernel_ulong_t)&bxt_i2c_info },
3579a875245SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4dc7), (kernel_ulong_t)&spt_uart_info },
35857b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4de8), (kernel_ulong_t)&bxt_i2c_info },
35957b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4de9), (kernel_ulong_t)&bxt_i2c_info },
36057b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4dea), (kernel_ulong_t)&bxt_i2c_info },
36157b89dd2SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4deb), (kernel_ulong_t)&bxt_i2c_info },
362*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x4dfb), (kernel_ulong_t)&cnl_info },
363f7b67321SAndy Shevchenko 	/* ADL-P */
364f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51a8), (kernel_ulong_t)&bxt_uart_info },
365f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51a9), (kernel_ulong_t)&bxt_uart_info },
366*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51aa), (kernel_ulong_t)&tgl_info },
367*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51ab), (kernel_ulong_t)&tgl_info },
368f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51c5), (kernel_ulong_t)&bxt_i2c_info },
369f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51c6), (kernel_ulong_t)&bxt_i2c_info },
370f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51c7), (kernel_ulong_t)&bxt_uart_info },
371eeb0a442SGaggery Tsai 	{ PCI_VDEVICE(INTEL, 0x51d8), (kernel_ulong_t)&bxt_i2c_info },
372eeb0a442SGaggery Tsai 	{ PCI_VDEVICE(INTEL, 0x51d9), (kernel_ulong_t)&bxt_i2c_info },
373f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51e8), (kernel_ulong_t)&bxt_i2c_info },
374f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51e9), (kernel_ulong_t)&bxt_i2c_info },
375f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51ea), (kernel_ulong_t)&bxt_i2c_info },
376f7b67321SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51eb), (kernel_ulong_t)&bxt_i2c_info },
377*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x51fb), (kernel_ulong_t)&tgl_info },
3789fb3cad0SAndy Shevchenko 	/* ADL-M */
3799fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54a8), (kernel_ulong_t)&bxt_uart_info },
3809fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54a9), (kernel_ulong_t)&bxt_uart_info },
381*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54aa), (kernel_ulong_t)&tgl_info },
382*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54ab), (kernel_ulong_t)&tgl_info },
3839fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54c5), (kernel_ulong_t)&bxt_i2c_info },
3849fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54c6), (kernel_ulong_t)&bxt_i2c_info },
3859fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54c7), (kernel_ulong_t)&bxt_uart_info },
3869fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54e8), (kernel_ulong_t)&bxt_i2c_info },
3879fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54e9), (kernel_ulong_t)&bxt_i2c_info },
3889fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54ea), (kernel_ulong_t)&bxt_i2c_info },
3899fb3cad0SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54eb), (kernel_ulong_t)&bxt_i2c_info },
390*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x54fb), (kernel_ulong_t)&tgl_info },
391ff0a04a6SAndy Shevchenko 	/* APL */
392c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5aac), (kernel_ulong_t)&apl_i2c_info },
393c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5aae), (kernel_ulong_t)&apl_i2c_info },
394c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5ab0), (kernel_ulong_t)&apl_i2c_info },
395c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5ab2), (kernel_ulong_t)&apl_i2c_info },
396c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5ab4), (kernel_ulong_t)&apl_i2c_info },
397c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5ab6), (kernel_ulong_t)&apl_i2c_info },
398c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5ab8), (kernel_ulong_t)&apl_i2c_info },
399c50cdd62SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x5aba), (kernel_ulong_t)&apl_i2c_info },
400ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5abc), (kernel_ulong_t)&bxt_uart_info },
401ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5abe), (kernel_ulong_t)&bxt_uart_info },
402ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5ac0), (kernel_ulong_t)&bxt_uart_info },
403ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5ac2), (kernel_ulong_t)&bxt_info },
404ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5ac4), (kernel_ulong_t)&bxt_info },
405ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5ac6), (kernel_ulong_t)&bxt_info },
406ff0a04a6SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x5aee), (kernel_ulong_t)&bxt_uart_info },
4078c70bd58SJarkko Nikula 	/* RPL-S */
4088c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a28), (kernel_ulong_t)&bxt_uart_info },
4098c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a29), (kernel_ulong_t)&bxt_uart_info },
410*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7a2a), (kernel_ulong_t)&tgl_info },
411*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7a2b), (kernel_ulong_t)&tgl_info },
4128c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a4c), (kernel_ulong_t)&bxt_i2c_info },
4138c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a4d), (kernel_ulong_t)&bxt_i2c_info },
4148c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a4e), (kernel_ulong_t)&bxt_i2c_info },
4158c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a4f), (kernel_ulong_t)&bxt_i2c_info },
4168c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a5c), (kernel_ulong_t)&bxt_uart_info },
417*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7a79), (kernel_ulong_t)&tgl_info },
418*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7a7b), (kernel_ulong_t)&tgl_info },
4198c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a7c), (kernel_ulong_t)&bxt_i2c_info },
4208c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a7d), (kernel_ulong_t)&bxt_i2c_info },
4218c70bd58SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7a7e), (kernel_ulong_t)&bxt_uart_info },
422c7b79a75SJarkko Nikula 	/* ADL-S */
423c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7aa8), (kernel_ulong_t)&bxt_uart_info },
424c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7aa9), (kernel_ulong_t)&bxt_uart_info },
425*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7aaa), (kernel_ulong_t)&tgl_info },
426*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7aab), (kernel_ulong_t)&tgl_info },
427c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7acc), (kernel_ulong_t)&bxt_i2c_info },
428c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7acd), (kernel_ulong_t)&bxt_i2c_info },
429c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7ace), (kernel_ulong_t)&bxt_i2c_info },
430c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7acf), (kernel_ulong_t)&bxt_i2c_info },
431c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7adc), (kernel_ulong_t)&bxt_uart_info },
432*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7af9), (kernel_ulong_t)&tgl_info },
433*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7afb), (kernel_ulong_t)&tgl_info },
434c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7afc), (kernel_ulong_t)&bxt_i2c_info },
435c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7afd), (kernel_ulong_t)&bxt_i2c_info },
436c7b79a75SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x7afe), (kernel_ulong_t)&bxt_uart_info },
43737e8ba74SAndy Shevchenko 	/* MTL-P */
43837e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e25), (kernel_ulong_t)&bxt_uart_info },
43937e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e26), (kernel_ulong_t)&bxt_uart_info },
440*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e27), (kernel_ulong_t)&tgl_info },
441*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e30), (kernel_ulong_t)&tgl_info },
442*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e46), (kernel_ulong_t)&tgl_info },
44337e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e50), (kernel_ulong_t)&bxt_i2c_info },
44437e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e51), (kernel_ulong_t)&bxt_i2c_info },
44537e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e52), (kernel_ulong_t)&bxt_uart_info },
44637e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e78), (kernel_ulong_t)&bxt_i2c_info },
44737e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e79), (kernel_ulong_t)&bxt_i2c_info },
44837e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e7a), (kernel_ulong_t)&bxt_i2c_info },
44937e8ba74SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x7e7b), (kernel_ulong_t)&bxt_i2c_info },
4505f039fa7SAndy Shevchenko 	/* LKF */
4515f039fa7SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x98a8), (kernel_ulong_t)&bxt_uart_info },
4525f039fa7SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x98a9), (kernel_ulong_t)&bxt_uart_info },
4538b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98aa), (kernel_ulong_t)&bxt_info },
4548b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98c5), (kernel_ulong_t)&bxt_i2c_info },
4558b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98c6), (kernel_ulong_t)&bxt_i2c_info },
4565f039fa7SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x98c7), (kernel_ulong_t)&bxt_uart_info },
4578b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98e8), (kernel_ulong_t)&bxt_i2c_info },
4588b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98e9), (kernel_ulong_t)&bxt_i2c_info },
4598b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98ea), (kernel_ulong_t)&bxt_i2c_info },
4608b2051a1SEd Schaller 	{ PCI_VDEVICE(INTEL, 0x98eb), (kernel_ulong_t)&bxt_i2c_info },
4614b45efe8SAndy Shevchenko 	/* SPT-LP */
4624b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9d27), (kernel_ulong_t)&spt_uart_info },
4634b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9d28), (kernel_ulong_t)&spt_uart_info },
4644b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9d29), (kernel_ulong_t)&spt_info },
4654b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9d2a), (kernel_ulong_t)&spt_info },
466028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x9d60), (kernel_ulong_t)&spt_i2c_info },
467028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x9d61), (kernel_ulong_t)&spt_i2c_info },
468028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x9d62), (kernel_ulong_t)&spt_i2c_info },
469028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x9d63), (kernel_ulong_t)&spt_i2c_info },
470028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x9d64), (kernel_ulong_t)&spt_i2c_info },
471028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0x9d65), (kernel_ulong_t)&spt_i2c_info },
4724b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9d66), (kernel_ulong_t)&spt_uart_info },
473b418bbffSAndy Shevchenko 	/* CNL-LP */
474b418bbffSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9da8), (kernel_ulong_t)&spt_uart_info },
475b418bbffSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9da9), (kernel_ulong_t)&spt_uart_info },
476*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9daa), (kernel_ulong_t)&cnl_info },
477*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9dab), (kernel_ulong_t)&cnl_info },
4784e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x9dc5), (kernel_ulong_t)&cnl_i2c_info },
4794e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x9dc6), (kernel_ulong_t)&cnl_i2c_info },
480b418bbffSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9dc7), (kernel_ulong_t)&spt_uart_info },
4814e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x9de8), (kernel_ulong_t)&cnl_i2c_info },
4824e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x9de9), (kernel_ulong_t)&cnl_i2c_info },
4834e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x9dea), (kernel_ulong_t)&cnl_i2c_info },
4844e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0x9deb), (kernel_ulong_t)&cnl_i2c_info },
485*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0x9dfb), (kernel_ulong_t)&cnl_info },
486ec65b560SAndy Shevchenko 	/* TGL-LP */
487ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0a8), (kernel_ulong_t)&bxt_uart_info },
488ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0a9), (kernel_ulong_t)&bxt_uart_info },
489*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0aa), (kernel_ulong_t)&cnl_info },
490*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0ab), (kernel_ulong_t)&cnl_info },
491ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0c5), (kernel_ulong_t)&spt_i2c_info },
492ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0c6), (kernel_ulong_t)&spt_i2c_info },
493ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0c7), (kernel_ulong_t)&bxt_uart_info },
494ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0d8), (kernel_ulong_t)&spt_i2c_info },
495ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0d9), (kernel_ulong_t)&spt_i2c_info },
496ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0da), (kernel_ulong_t)&bxt_uart_info },
497ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0db), (kernel_ulong_t)&bxt_uart_info },
498ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0dc), (kernel_ulong_t)&bxt_uart_info },
499ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0dd), (kernel_ulong_t)&bxt_uart_info },
500*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0de), (kernel_ulong_t)&cnl_info },
501*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0df), (kernel_ulong_t)&cnl_info },
502ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0e8), (kernel_ulong_t)&spt_i2c_info },
503ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0e9), (kernel_ulong_t)&spt_i2c_info },
504ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0ea), (kernel_ulong_t)&spt_i2c_info },
505ec65b560SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0eb), (kernel_ulong_t)&spt_i2c_info },
506*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0fb), (kernel_ulong_t)&cnl_info },
507*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0fd), (kernel_ulong_t)&cnl_info },
508*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa0fe), (kernel_ulong_t)&cnl_info },
5094b45efe8SAndy Shevchenko 	/* SPT-H */
5104b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa127), (kernel_ulong_t)&spt_uart_info },
5114b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa128), (kernel_ulong_t)&spt_uart_info },
5124b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa129), (kernel_ulong_t)&spt_info },
5134b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa12a), (kernel_ulong_t)&spt_info },
514028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0xa160), (kernel_ulong_t)&spt_i2c_info },
515028af594SMika Westerberg 	{ PCI_VDEVICE(INTEL, 0xa161), (kernel_ulong_t)&spt_i2c_info },
516e4b91470SFlorian R. Hölzlwimmer 	{ PCI_VDEVICE(INTEL, 0xa162), (kernel_ulong_t)&spt_i2c_info },
5174b45efe8SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa166), (kernel_ulong_t)&spt_uart_info },
51877fc5ff6SMika Westerberg 	/* KBL-H */
5192c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2a7), (kernel_ulong_t)&spt_uart_info },
5202c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2a8), (kernel_ulong_t)&spt_uart_info },
5212c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2a9), (kernel_ulong_t)&spt_info },
5222c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2aa), (kernel_ulong_t)&spt_info },
5232c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2e0), (kernel_ulong_t)&spt_i2c_info },
5242c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2e1), (kernel_ulong_t)&spt_i2c_info },
5252c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2e2), (kernel_ulong_t)&spt_i2c_info },
5262c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2e3), (kernel_ulong_t)&spt_i2c_info },
5272c8c3416SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa2e6), (kernel_ulong_t)&spt_uart_info },
528b418bbffSAndy Shevchenko 	/* CNL-H */
529b418bbffSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa328), (kernel_ulong_t)&spt_uart_info },
530b418bbffSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa329), (kernel_ulong_t)&spt_uart_info },
531*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa32a), (kernel_ulong_t)&cnl_info },
532*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa32b), (kernel_ulong_t)&cnl_info },
533b418bbffSAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa347), (kernel_ulong_t)&spt_uart_info },
5344e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa368), (kernel_ulong_t)&cnl_i2c_info },
5354e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa369), (kernel_ulong_t)&cnl_i2c_info },
5364e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa36a), (kernel_ulong_t)&cnl_i2c_info },
5374e93a658SJarkko Nikula 	{ PCI_VDEVICE(INTEL, 0xa36b), (kernel_ulong_t)&cnl_i2c_info },
538*fe55d732SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa37b), (kernel_ulong_t)&cnl_info },
5394e213b45SAndy Shevchenko 	/* CML-V */
5404e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3a7), (kernel_ulong_t)&spt_uart_info },
5414e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3a8), (kernel_ulong_t)&spt_uart_info },
5424e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3a9), (kernel_ulong_t)&spt_info },
5434e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3aa), (kernel_ulong_t)&spt_info },
5444e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3e0), (kernel_ulong_t)&spt_i2c_info },
5454e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3e1), (kernel_ulong_t)&spt_i2c_info },
5464e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3e2), (kernel_ulong_t)&spt_i2c_info },
5474e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3e3), (kernel_ulong_t)&spt_i2c_info },
5484e213b45SAndy Shevchenko 	{ PCI_VDEVICE(INTEL, 0xa3e6), (kernel_ulong_t)&spt_uart_info },
5494b45efe8SAndy Shevchenko 	{ }
5504b45efe8SAndy Shevchenko };
5514b45efe8SAndy Shevchenko MODULE_DEVICE_TABLE(pci, intel_lpss_pci_ids);
5524b45efe8SAndy Shevchenko 
5534b45efe8SAndy Shevchenko static struct pci_driver intel_lpss_pci_driver = {
5544b45efe8SAndy Shevchenko 	.name = "intel-lpss",
5554b45efe8SAndy Shevchenko 	.id_table = intel_lpss_pci_ids,
5564b45efe8SAndy Shevchenko 	.probe = intel_lpss_pci_probe,
5574b45efe8SAndy Shevchenko 	.remove = intel_lpss_pci_remove,
5584b45efe8SAndy Shevchenko 	.driver = {
5594b45efe8SAndy Shevchenko 		.pm = &intel_lpss_pci_pm_ops,
5604b45efe8SAndy Shevchenko 	},
5614b45efe8SAndy Shevchenko };
5624b45efe8SAndy Shevchenko 
5634b45efe8SAndy Shevchenko module_pci_driver(intel_lpss_pci_driver);
5644b45efe8SAndy Shevchenko 
5654b45efe8SAndy Shevchenko MODULE_AUTHOR("Andy Shevchenko <andriy.shevchenko@linux.intel.com>");
5664b45efe8SAndy Shevchenko MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
5674b45efe8SAndy Shevchenko MODULE_DESCRIPTION("Intel LPSS PCI driver");
5684b45efe8SAndy Shevchenko MODULE_LICENSE("GPL v2");
569