blob: 119a38c8e7f0d408794aa1f81556d70fec6358a9 [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{
Uwe Hermann5c6bae22010-11-08 15:16:30 +000012 if (!dev->enabled)
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000013 return;
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000014
Stefan Reinauer2b34db82009-02-28 20:10:20 +000015 switch (dev->path.pnp.device) {
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000016 case IT8712F_FDC: /* TODO. */
17 break;
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000018 case IT8712F_PP: /* TODO. */
19 break;
20 case IT8712F_EC: /* TODO. */
21 break;
22 case IT8712F_KBCK:
Marc Jonesecd176f2008-09-26 19:15:38 +000023 set_kbc_ps2_mode();
Timothy Pearson448e3862015-11-24 14:12:01 -060024 pc_keyboard_init(NO_AUX_DEVICE);
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000025 break;
26 case IT8712F_KBCM: /* TODO. */
27 break;
28 case IT8712F_MIDI: /* TODO. */
29 break;
30 case IT8712F_GAME: /* TODO. */
31 break;
32 case IT8712F_IR: /* TODO. */
33 break;
34 }
35}
36
37static struct device_operations ops = {
Nico Huber9cb09412013-06-15 15:30:19 +020038 .read_resources = pnp_read_resources,
Nico Huber0b2ee932013-06-15 19:58:35 +020039 .set_resources = pnp_set_resources,
40 .enable_resources = pnp_enable_resources,
41 .enable = pnp_alt_enable,
Nico Huber9cb09412013-06-15 15:30:19 +020042 .init = it8712f_init,
Edward O'Callaghan0f7ec312014-11-01 12:11:58 +110043 .ops_pnp_mode = &pnp_conf_mode_870155_aa,
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000044};
45
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000046static struct pnp_info pnp_dev_info[] = {
Felix Heldc40275b2017-12-27 22:11:30 +010047 { NULL, IT8712F_FDC, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x0ff8, },
48 { NULL, IT8712F_SP1, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
49 { NULL, IT8712F_SP2, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
50 { NULL, IT8712F_PP, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x0ffc, },
51 { NULL, IT8712F_EC, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x0ff8, 0x0ff8, },
52 { NULL, IT8712F_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x0fff, 0x0fff, },
53 { NULL, IT8712F_KBCM, PNP_IRQ0, },
54 { NULL, IT8712F_GPIO, PNP_IO0 | PNP_IO1 | PNP_IO2 | PNP_IRQ0,
55 0x0fff, 0x0ff8, 0x0ff8, },
56 { NULL, IT8712F_MIDI, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
57 { NULL, IT8712F_GAME, PNP_IO0, 0x0fff, },
58 { NULL, IT8712F_IR, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000059};
60
61static void enable_dev(struct device *dev)
62{
Felix Heldc40275b2017-12-27 22:11:30 +010063 pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000064}
65
Uwe Hermannf28674e2006-11-01 12:52:49 +000066struct chip_operations superio_ite_it8712f_ops = {
Nicholas Sudsgaardbfb11be2024-01-30 09:53:46 +090067 .name = "ITE IT8712F Super I/O",
Stefan Reinauer6af77ae2006-08-25 19:29:57 +000068 .enable_dev = enable_dev,
69};