2005-04-17 02:20:36 +04:00
# ifndef _I8042_IO_H
# define _I8042_IO_H
/*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*/
/*
* Names .
*/
# define I8042_KBD_PHYS_DESC "isa0060 / serio0"
# define I8042_AUX_PHYS_DESC "isa0060 / serio1"
# define I8042_MUX_PHYS_DESC "isa0060 / serio%d"
/*
* IRQs .
*/
# ifdef __alpha__
# define I8042_KBD_IRQ 1
# define I8042_AUX_IRQ (RTC_PORT(0) == 0x170 ? 9 : 12) /* Jensen is special */
# elif defined(__arm__)
/* defined in include/asm-arm/arch-xxx/irqs.h */
# include <asm/irq.h>
2008-04-25 11:07:53 +04:00
# elif defined(CONFIG_SH_CAYMAN)
2005-04-17 02:20:36 +04:00
# include <asm/irq.h>
2010-05-25 02:09:16 +04:00
# elif defined(CONFIG_PPC)
extern int of_i8042_kbd_irq ;
extern int of_i8042_aux_irq ;
# define I8042_KBD_IRQ of_i8042_kbd_irq
# define I8042_AUX_IRQ of_i8042_aux_irq
2005-04-17 02:20:36 +04:00
# else
# define I8042_KBD_IRQ 1
# define I8042_AUX_IRQ 12
# endif
/*
* Register numbers .
*/
# define I8042_COMMAND_REG 0x64
# define I8042_STATUS_REG 0x64
# define I8042_DATA_REG 0x60
static inline int i8042_read_data ( void )
{
return inb ( I8042_DATA_REG ) ;
}
static inline int i8042_read_status ( void )
{
return inb ( I8042_STATUS_REG ) ;
}
static inline void i8042_write_data ( int val )
{
outb ( val , I8042_DATA_REG ) ;
}
static inline void i8042_write_command ( int val )
{
outb ( val , I8042_COMMAND_REG ) ;
}
static inline int i8042_platform_init ( void )
{
/*
* On some platforms touching the i8042 data register region can do really
* bad things . Because of this the region is always reserved on such boxes .
*/
2008-09-23 01:41:31 +04:00
# if defined(CONFIG_PPC)
2005-04-17 02:20:36 +04:00
if ( check_legacy_ioport ( I8042_DATA_REG ) )
2006-10-01 10:27:57 +04:00
return - ENODEV ;
# endif
2012-10-18 10:55:34 +04:00
# if !defined(__sh__) && !defined(__alpha__)
2005-04-17 02:20:36 +04:00
if ( ! request_region ( I8042_DATA_REG , 16 , " i8042 " ) )
2005-09-04 10:41:38 +04:00
return - EBUSY ;
2005-04-17 02:20:36 +04:00
# endif
2006-10-01 10:27:57 +04:00
i8042_reset = 1 ;
2005-04-17 02:20:36 +04:00
return 0 ;
}
static inline void i8042_platform_exit ( void )
{
2006-10-01 10:27:57 +04:00
# if !defined(__sh__) && !defined(__alpha__)
2005-04-17 02:20:36 +04:00
release_region ( I8042_DATA_REG , 16 ) ;
# endif
}
# endif /* _I8042_IO_H */