From: Ricardo Ribalda Delgado Date: Tue, 16 Jun 2015 08:59:38 +0000 (+0200) Subject: serial/8250_fintek: Support for chip_ip 0x0501 X-Git-Tag: v5.15~15224^2~87 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dae77f757950c273500cc72262a094f290578bef;p=platform%2Fkernel%2Flinux-starfive.git serial/8250_fintek: Support for chip_ip 0x0501 There are some chips with the same interface but different chip ip. Reported-by: Peter Hong Reviewed-by: Alan Cox Signed-off-by: Ricardo Ribalda Delgado Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/tty/serial/8250/8250_fintek.c b/drivers/tty/serial/8250/8250_fintek.c index 82b055b..2c3228e 100644 --- a/drivers/tty/serial/8250/8250_fintek.c +++ b/drivers/tty/serial/8250/8250_fintek.c @@ -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; }