blob: 4c69c71c75f4e855c2466f19c7f9073c28437a21 [file] [log] [blame]
Felix Held3f3eca92020-01-23 17:12:32 +01001/* SPDX-License-Identifier: GPL-2.0-or-later */
2/* This file is part of the coreboot project. */
Stefan Reinauer6af77ae2006-08-25 19:29:57 +00003
Jon Dufresne39b13f42006-12-01 09:41:11 +00004#include <device/device.h>
5#include <device/pnp.h>
Stefan Reinauer6af77ae2006-08-25 19:29:57 +00006#include <pc80/keyboard.h>
Edward O'Callaghan0f7ec312014-11-01 12:11:58 +11007#include <superio/conf_mode.h>
8
Stefan Reinauer6af77ae2006-08-25 19:29:57 +00009#include "it8712f.h"
10
Edward O'Callaghanf21bdc32014-10-21 07:43:41 +110011static void it8712f_init(struct device *dev)
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000012{
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000013
Uwe Hermann5c6bae22010-11-08 15:16:30 +000014 if (!dev->enabled)
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000015 return;
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000016
Stefan Reinauer2b34db82009-02-28 20:10:20 +000017 switch (dev->path.pnp.device) {
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000018 case IT8712F_FDC: /* TODO. */
19 break;
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000020 case IT8712F_PP: /* TODO. */
21 break;
22 case IT8712F_EC: /* TODO. */
23 break;
24 case IT8712F_KBCK:
Marc Jonesecd176f2008-09-26 19:15:38 +000025 set_kbc_ps2_mode();
Timothy Pearson448e3862015-11-24 14:12:01 -060026 pc_keyboard_init(NO_AUX_DEVICE);
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000027 break;
28 case IT8712F_KBCM: /* TODO. */
29 break;
30 case IT8712F_MIDI: /* TODO. */
31 break;
32 case IT8712F_GAME: /* TODO. */
33 break;
34 case IT8712F_IR: /* TODO. */
35 break;
36 }
37}
38
39static struct device_operations ops = {
Nico Huber9cb09412013-06-15 15:30:19 +020040 .read_resources = pnp_read_resources,
Nico Huber0b2ee932013-06-15 19:58:35 +020041 .set_resources = pnp_set_resources,
42 .enable_resources = pnp_enable_resources,
43 .enable = pnp_alt_enable,
Nico Huber9cb09412013-06-15 15:30:19 +020044 .init = it8712f_init,
Edward O'Callaghan0f7ec312014-11-01 12:11:58 +110045 .ops_pnp_mode = &pnp_conf_mode_870155_aa,
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000046};
47
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000048static struct pnp_info pnp_dev_info[] = {
Felix Heldc40275b2017-12-27 22:11:30 +010049 { NULL, IT8712F_FDC, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x0ff8, },
50 { NULL, IT8712F_SP1, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
51 { NULL, IT8712F_SP2, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
52 { NULL, IT8712F_PP, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x0ffc, },
53 { NULL, IT8712F_EC, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x0ff8, 0x0ff8, },
54 { NULL, IT8712F_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x0fff, 0x0fff, },
55 { NULL, IT8712F_KBCM, PNP_IRQ0, },
56 { NULL, IT8712F_GPIO, PNP_IO0 | PNP_IO1 | PNP_IO2 | PNP_IRQ0,
57 0x0fff, 0x0ff8, 0x0ff8, },
58 { NULL, IT8712F_MIDI, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
59 { NULL, IT8712F_GAME, PNP_IO0, 0x0fff, },
60 { NULL, IT8712F_IR, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000061};
62
63static void enable_dev(struct device *dev)
64{
Felix Heldc40275b2017-12-27 22:11:30 +010065 pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000066}
67
Uwe Hermannf28674e2006-11-01 12:52:49 +000068struct chip_operations superio_ite_it8712f_ops = {
Uwe Hermanna7aa29b2006-11-05 18:50:49 +000069 CHIP_NAME("ITE IT8712F Super I/O")
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000070 .enable_dev = enable_dev,
71};