blob: e4154132e29c15c1877113726a06cd18d32454e1 [file] [log] [blame]
Felix Held3f3eca92020-01-23 17:12:32 +01001/* SPDX-License-Identifier: GPL-2.0-or-later */
Mondrian nuessle21da0192009-04-22 20:30:42 +00002
Uwe Hermannfff87d32009-06-01 01:38:29 +00003/* PILOT Super I/O is only based on LPC observation done on factory system. */
Mondrian nuessle21da0192009-04-22 20:30:42 +00004
Stefan Reinauer24d1d4b2013-03-21 11:51:41 -07005#include <arch/io.h>
Kyösti Mälkki3855c012019-03-03 08:45:19 +02006#include <device/pnp_ops.h>
Edward O'Callaghanf18abab2014-03-31 21:53:32 +11007#include <device/pnp.h>
Mondrian nuessle21da0192009-04-22 20:30:42 +00008#include "pilot.h"
9
Elyes HAOUASe46a4152019-12-05 10:48:17 +010010/* Pilot uses 0x5A/0xA5 pattern to activate deactivate config access. */
Edward O'Callaghan85836c22014-07-09 20:26:25 +100011void pnp_enter_ext_func_mode(pnp_devfn_t dev)
Mondrian nuessle21da0192009-04-22 20:30:42 +000012{
Uwe Hermann8c023682010-11-06 23:36:49 +000013 u16 port = dev >> 8;
Mondrian nuessle21da0192009-04-22 20:30:42 +000014 outb(0x5A, port);
15}
16
Edward O'Callaghan85836c22014-07-09 20:26:25 +100017void pnp_exit_ext_func_mode(pnp_devfn_t dev)
Mondrian nuessle21da0192009-04-22 20:30:42 +000018{
Uwe Hermann8c023682010-11-06 23:36:49 +000019 u16 port = dev >> 8;
Mondrian nuessle21da0192009-04-22 20:30:42 +000020 outb(0xA5, port);
21}
22
Uwe Hermannfff87d32009-06-01 01:38:29 +000023/* Serial config is a fairly standard procedure. */
Edward O'Callaghan85836c22014-07-09 20:26:25 +100024void pilot_enable_serial(pnp_devfn_t dev, u16 iobase)
Mondrian nuessle21da0192009-04-22 20:30:42 +000025{
26 pnp_enter_ext_func_mode(dev);
27 pnp_set_logical_device(dev);
28 pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
29 pnp_set_enable(dev, 1);
30 pnp_exit_ext_func_mode(dev);
31}
32
Edward O'Callaghan85836c22014-07-09 20:26:25 +100033void pilot_disable_serial(pnp_devfn_t dev)
Mondrian nuessle21da0192009-04-22 20:30:42 +000034{
35 pnp_enter_ext_func_mode(dev);
36 pnp_set_logical_device(dev);
Uwe Hermann8c023682010-11-06 23:36:49 +000037 pnp_set_iobase(dev, PNP_IDX_IO0, 0x0000);
Mondrian nuessle21da0192009-04-22 20:30:42 +000038 pnp_set_enable(dev, 0);
39 pnp_exit_ext_func_mode(dev);
40}