blob: 17a1976421c1522c7d28b45c864bfe02f7499531 [file] [log] [blame]
Felix Held3f3eca92020-01-23 17:12:32 +01001/* SPDX-License-Identifier: GPL-2.0-or-later */
Stefan Reinauer6af77ae2006-08-25 19:29:57 +00002
Jon Dufresne39b13f42006-12-01 09:41:11 +00003#include <device/device.h>
4#include <device/pnp.h>
Stefan Reinauer6af77ae2006-08-25 19:29:57 +00005#include <pc80/keyboard.h>
Edward O'Callaghan0f7ec312014-11-01 12:11:58 +11006#include <superio/conf_mode.h>
7
Stefan Reinauer6af77ae2006-08-25 19:29:57 +00008#include "it8712f.h"
9
Edward O'Callaghanf21bdc32014-10-21 07:43:41 +110010static void it8712f_init(struct device *dev)
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000011{
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000012
Uwe Hermann5c6bae22010-11-08 15:16:30 +000013 if (!dev->enabled)
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000014 return;
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000015
Stefan Reinauer2b34db82009-02-28 20:10:20 +000016 switch (dev->path.pnp.device) {
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000017 case IT8712F_FDC: /* TODO. */
18 break;
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000019 case IT8712F_PP: /* TODO. */
20 break;
21 case IT8712F_EC: /* TODO. */
22 break;
23 case IT8712F_KBCK:
Marc Jonesecd176f2008-09-26 19:15:38 +000024 set_kbc_ps2_mode();
Timothy Pearson448e3862015-11-24 14:12:01 -060025 pc_keyboard_init(NO_AUX_DEVICE);
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000026 break;
27 case IT8712F_KBCM: /* TODO. */
28 break;
29 case IT8712F_MIDI: /* TODO. */
30 break;
31 case IT8712F_GAME: /* TODO. */
32 break;
33 case IT8712F_IR: /* TODO. */
34 break;
35 }
36}
37
38static struct device_operations ops = {
Nico Huber9cb09412013-06-15 15:30:19 +020039 .read_resources = pnp_read_resources,
Nico Huber0b2ee932013-06-15 19:58:35 +020040 .set_resources = pnp_set_resources,
41 .enable_resources = pnp_enable_resources,
42 .enable = pnp_alt_enable,
Nico Huber9cb09412013-06-15 15:30:19 +020043 .init = it8712f_init,
Edward O'Callaghan0f7ec312014-11-01 12:11:58 +110044 .ops_pnp_mode = &pnp_conf_mode_870155_aa,
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000045};
46
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000047static struct pnp_info pnp_dev_info[] = {
Felix Heldc40275b2017-12-27 22:11:30 +010048 { NULL, IT8712F_FDC, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x0ff8, },
49 { NULL, IT8712F_SP1, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
50 { NULL, IT8712F_SP2, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
51 { NULL, IT8712F_PP, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x0ffc, },
52 { NULL, IT8712F_EC, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x0ff8, 0x0ff8, },
53 { NULL, IT8712F_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x0fff, 0x0fff, },
54 { NULL, IT8712F_KBCM, PNP_IRQ0, },
55 { NULL, IT8712F_GPIO, PNP_IO0 | PNP_IO1 | PNP_IO2 | PNP_IRQ0,
56 0x0fff, 0x0ff8, 0x0ff8, },
57 { NULL, IT8712F_MIDI, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
58 { NULL, IT8712F_GAME, PNP_IO0, 0x0fff, },
59 { NULL, IT8712F_IR, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000060};
61
62static void enable_dev(struct device *dev)
63{
Felix Heldc40275b2017-12-27 22:11:30 +010064 pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000065}
66
Uwe Hermannf28674e2006-11-01 12:52:49 +000067struct chip_operations superio_ite_it8712f_ops = {
Uwe Hermanna7aa29b2006-11-05 18:50:49 +000068 CHIP_NAME("ITE IT8712F Super I/O")
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000069 .enable_dev = enable_dev,
70};