1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  | /* 
 |   * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> 
 |   * 
 |   * SPDX-License-Identifier:    GPL-2.0+ 
 |   */ 
 |    
 |  #include <common.h> 
 |  #include <asm/io.h> 
 |  #include <asm/pnp_def.h> 
 |    
 |  static void pnp_enter_conf_state(u16 dev) 
 |  { 
 |      u16 port = dev >> 8; 
 |    
 |      outb(0x55, port); 
 |  } 
 |    
 |  static void pnp_exit_conf_state(u16 dev) 
 |  { 
 |      u16 port = dev >> 8; 
 |    
 |      outb(0xaa, port); 
 |  } 
 |    
 |  void lpc47m_enable_serial(uint dev, uint iobase, uint irq) 
 |  { 
 |      pnp_enter_conf_state(dev); 
 |      pnp_set_logical_device(dev); 
 |      pnp_set_enable(dev, 0); 
 |      pnp_set_iobase(dev, PNP_IDX_IO0, iobase); 
 |      pnp_set_irq(dev, PNP_IDX_IRQ0, irq); 
 |      pnp_set_enable(dev, 1); 
 |      pnp_exit_conf_state(dev); 
 |  } 
 |    
 |  void lpc47m_enable_kbc(uint dev, uint irq0, uint irq1) 
 |  { 
 |      pnp_enter_conf_state(dev); 
 |      pnp_set_logical_device(dev); 
 |      pnp_set_enable(dev, 0); 
 |      pnp_set_irq(dev, PNP_IDX_IRQ0, irq0); 
 |      pnp_set_irq(dev, PNP_IDX_IRQ1, irq1); 
 |      pnp_set_enable(dev, 1); 
 |      pnp_exit_conf_state(dev); 
 |  } 
 |  
  |