blob: ac01c4618f8d1c7249023144c863d1b408612592 [file] [log] [blame]
Felix Held3f3eca92020-01-23 17:12:32 +01001/* SPDX-License-Identifier: GPL-2.0-or-later */
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +00002
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +00003#include <device/device.h>
4#include <device/pnp.h>
Yinghai Luafd34e62006-02-16 17:22:19 +00005#include <pc80/keyboard.h>
Elyes HAOUAS2329a252019-05-15 22:11:18 +02006
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +00007#include "pc87417.h"
8
Edward O'Callaghanf21bdc32014-10-21 07:43:41 +11009static void init(struct device *dev)
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000010{
Uwe Hermanna69d9782010-11-15 19:35:14 +000011 if (!dev->enabled)
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000012 return;
Uwe Hermanna69d9782010-11-15 19:35:14 +000013
Elyes HAOUAS0ce41f12018-11-13 10:03:31 +010014 switch (dev->path.pnp.device) {
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000015 case PC87417_KBCK:
Timothy Pearson448e3862015-11-24 14:12:01 -060016 pc_keyboard_init(NO_AUX_DEVICE);
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000017 break;
18 }
19}
20
21static struct device_operations ops = {
22 .read_resources = pnp_read_resources,
23 .set_resources = pnp_set_resources,
24 .enable_resources = pnp_enable_resources,
25 .enable = pnp_enable,
26 .init = init,
27};
28
29static struct pnp_info pnp_dev_info[] = {
Felix Heldd5292bf2019-01-16 13:23:35 +010030 { NULL, PC87417_FDC, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x07f8, },
31 { NULL, PC87417_PP, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x07f8, },
Felix Heldfaca0bc2017-12-27 22:51:29 +010032 { NULL, PC87417_SP2, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0 | PNP_DRQ1,
33 0x07f8, },
34 { NULL, PC87417_SP1, PNP_IO0 | PNP_IRQ0, 0x07f8, },
35 { NULL, PC87417_SWC, PNP_IO0 | PNP_IRQ0, 0xfff0, },
36 { NULL, PC87417_KBCM, PNP_IRQ0, },
37 { NULL, PC87417_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07f8, 0x07f8, },
38 { NULL, PC87417_GPIO, PNP_IO0 | PNP_IRQ0, 0xfff8, },
39 { NULL, PC87417_XBUS, PNP_IO0 | PNP_IRQ0, 0xffe0, },
40 { NULL, PC87417_RTC, PNP_IO0 | PNP_IO1, 0xfffe, 0xfffe, },
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000041};
42
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000043static void enable_dev(struct device *dev)
44{
Felix Heldfaca0bc2017-12-27 22:51:29 +010045 pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000046}
47
Uwe Hermannd86417b2006-10-24 23:00:42 +000048struct chip_operations superio_nsc_pc87417_ops = {
Nicholas Sudsgaardbfb11be2024-01-30 09:53:46 +090049 .name = "NSC PC87417 Super I/O",
Ronald G. Minnich1cf26a82005-10-19 17:35:18 +000050 .enable_dev = enable_dev,
51};