serial/8250_fintek: Support for chip_ip 0x0501

There are some chips with the same interface but different chip ip.

Reported-by: Peter Hong <peter_hong@fintek.com.tw>
Reviewed-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Ricardo Ribalda Delgado 2015-06-16 10:59:38 +02:00 committed by Greg Kroah-Hartman
parent 017bec38c0
commit dae77f7579

View File

@ -22,9 +22,9 @@
#define ENTRY_KEY 0x77
#define EXIT_KEY 0xAA
#define CHIP_ID1 0x20
#define CHIP_ID1_VAL 0x02
#define CHIP_ID2 0x21
#define CHIP_ID2_VAL 0x16
#define CHIP_ID_0 0x1602
#define CHIP_ID_1 0x0501
#define VENDOR_ID1 0x23
#define VENDOR_ID1_VAL 0x19
#define VENDOR_ID2 0x24
@ -77,14 +77,7 @@ static int fintek_8250_get_index(resource_size_t base_addr)
static int fintek_8250_check_id(u16 base_port)
{
outb(CHIP_ID1, base_port + ADDR_PORT);
if (inb(base_port + DATA_PORT) != CHIP_ID1_VAL)
return -ENODEV;
outb(CHIP_ID2, base_port + ADDR_PORT);
if (inb(base_port + DATA_PORT) != CHIP_ID2_VAL)
return -ENODEV;
u16 chip;
outb(VENDOR_ID1, base_port + ADDR_PORT);
if (inb(base_port + DATA_PORT) != VENDOR_ID1_VAL)
@ -94,6 +87,14 @@ static int fintek_8250_check_id(u16 base_port)
if (inb(base_port + DATA_PORT) != VENDOR_ID2_VAL)
return -ENODEV;
outb(CHIP_ID1, base_port + ADDR_PORT);
chip = inb(base_port + DATA_PORT);
outb(CHIP_ID2, base_port + ADDR_PORT);
chip |= inb(base_port + DATA_PORT) << 8;
if (chip != CHIP_ID_0 && chip != CHIP_ID_1)
return -ENODEV;
return 0;
}