blob: 885d3f7586a4c717296e023286151b742aa484d6 [file] [log] [blame]
Felix Held3f3eca92020-01-23 17:12:32 +01001/* SPDX-License-Identifier: GPL-2.0-or-later */
Nicola Corna2fca86f2017-03-02 08:08:45 +01002
Nicola Corna2fca86f2017-03-02 08:08:45 +01003#include <device/device.h>
4#include <device/pnp.h>
5#include <superio/conf_mode.h>
Nicola Corna2fca86f2017-03-02 08:08:45 +01006#include <pc80/keyboard.h>
7
8#include "f71808a.h"
9#include "fintek_internal.h"
10
11static void f71808a_init(struct device *dev)
12{
13 if (!dev->enabled)
14 return;
15
16 switch (dev->path.pnp.device) {
17 /* TODO: Might potentially need code for UART, GPIO... */
18 case F71808A_KBC:
19 pc_keyboard_init(NO_AUX_DEVICE);
20 break;
21 case F71808A_HWM:
22 f71808a_multifunc_init(dev);
23 f71808a_hwm_init(dev);
24 break;
25 }
26}
27
28static struct device_operations ops = {
29 .read_resources = pnp_read_resources,
30 .set_resources = pnp_set_resources,
31 .enable_resources = pnp_enable_resources,
32 .enable = pnp_alt_enable,
33 .init = f71808a_init,
34 .ops_pnp_mode = &pnp_conf_mode_8787_aa,
35};
36
37static struct pnp_info pnp_dev_info[] = {
38 /* TODO: Some of the 0x07f8 etc. values may not be correct. */
Felix Held8ac8ac62018-07-06 21:43:34 +020039 { NULL, F71808A_SP1, PNP_IO0 | PNP_IRQ0, 0x07f8, },
40 { NULL, F71808A_HWM, PNP_IO0 | PNP_IRQ0, 0x07f8, },
41 { NULL, F71808A_KBC, PNP_IO0 | PNP_IRQ0 | PNP_IRQ1, 0x07ff, },
42 { NULL, F71808A_GPIO, PNP_IRQ0, },
43 { NULL, F71808A_WDT, PNP_IO0, 0x07f8,},
44 { NULL, F71808A_CIR, PNP_IO0 | PNP_IRQ0, 0x07f8, },
45 { NULL, F71808A_PME, },
Nicola Corna2fca86f2017-03-02 08:08:45 +010046};
47
48static void enable_dev(struct device *dev)
49{
50 pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
51}
52
53struct chip_operations superio_fintek_f71808a_ops = {
Nicholas Sudsgaardbfb11be2024-01-30 09:53:46 +090054 .name = "Fintek F71808A Super I/O",
Nicola Corna2fca86f2017-03-02 08:08:45 +010055 .enable_dev = enable_dev
56};