Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1474049 > unrolled thread
| Started by | "Ji-Ze Hong (Peter Hong)" <hpeter@gmail.com> |
|---|---|
| First post | 2016-09-01 05:50 +0200 |
| Last post | 2016-09-06 04:10 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 5/7] serial: 8250_fintek: Add F81216 Support "Ji-Ze Hong (Peter Hong)" <hpeter@gmail.com> - 2016-09-01 05:50 +0200
Re: [PATCH 5/7] serial: 8250_fintek: Add F81216 Support Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> - 2016-09-01 13:30 +0200
Re: [PATCH 5/7] serial: 8250_fintek: Add F81216 Support "Ji-Ze Hong (Peter Hong)" <hpeter@gmail.com> - 2016-09-06 04:10 +0200
| From | "Ji-Ze Hong (Peter Hong)" <hpeter@gmail.com> |
|---|---|
| Date | 2016-09-01 05:50 +0200 |
| Subject | [PATCH 5/7] serial: 8250_fintek: Add F81216 Support |
| Message-ID | <scraO-2Zr-29@gated-at.bofh.it> |
Fintek F81216 is a LPC to 4 UARTs device. It's the F81216 series but
support less functional than F81216AD/F81216H
The following list is brief descriptions of F81216 series:
F81216H (0105)
9Bit/High baud rate(not implements with mainline)
RS485, 128Bytes FIFO (implemented)
F81216AD (0216)
9Bit(not implements with mainline)
RS485(implemented)
F81216 (0208)
basically 16550A
Signed-off-by: Ji-Ze Hong (Peter Hong) <hpeter+linux_kernel@gmail.com>
---
drivers/tty/serial/8250/8250_fintek.c | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_fintek.c b/drivers/tty/serial/8250/8250_fintek.c
index 921f742..a62cfdd 100644
--- a/drivers/tty/serial/8250/8250_fintek.c
+++ b/drivers/tty/serial/8250/8250_fintek.c
@@ -23,6 +23,7 @@
#define CHIP_ID2 0x21
#define CHIP_ID_F81216AD 0x1602
#define CHIP_ID_F81216H 0x0501
+#define CHIP_ID_F81216 0x0802
#define VENDOR_ID1 0x23
#define VENDOR_ID1_VAL 0x19
#define VENDOR_ID2 0x24
@@ -107,8 +108,14 @@ static int fintek_8250_check_id(struct fintek_8250 *pdata)
chip = sio_read_reg(pdata, CHIP_ID1);
chip |= sio_read_reg(pdata, CHIP_ID2) << 8;
- if (chip != CHIP_ID_F81216AD && chip != CHIP_ID_F81216H)
+ switch (chip) {
+ case CHIP_ID_F81216AD:
+ case CHIP_ID_F81216H:
+ case CHIP_ID_F81216:
+ break;
+ default:
return -ENODEV;
+ }
pdata->pid = chip;
return 0;
@@ -235,6 +242,21 @@ static int find_base_port(struct fintek_8250 *pdata, u16 io_address,
return -ENODEV;
}
+static void fintek_8250_set_rs485_handler(struct uart_8250_port *uart)
+{
+ struct fintek_8250 *pdata = uart->port.private_data;
+
+ switch (pdata->pid) {
+ default: /* No RS485 Auto direction functional */
+ break;
+
+ case CHIP_ID_F81216AD:
+ case CHIP_ID_F81216H:
+ uart->port.rs485_config = fintek_8250_rs485_config;
+ break;
+ }
+}
+
int fintek_8250_probe(struct uart_8250_port *uart)
{
struct fintek_8250 *pdata;
@@ -248,8 +270,8 @@ int fintek_8250_probe(struct uart_8250_port *uart)
return -ENOMEM;
memcpy(pdata, &probe_data, sizeof(probe_data));
- uart->port.rs485_config = fintek_8250_rs485_config;
uart->port.private_data = pdata;
+ fintek_8250_set_rs485_handler(uart);
return 0;
}
--
1.9.1
[toc] | [next] | [standalone]
| From | Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> |
|---|---|
| Date | 2016-09-01 13:30 +0200 |
| Message-ID | <scylY-1an-29@gated-at.bofh.it> |
| In reply to | #1474049 |
Hi Peter
On Thu, Sep 1, 2016 at 5:39 AM, Ji-Ze Hong (Peter Hong)
<hpeter@gmail.com> wrote:
> int fintek_8250_probe(struct uart_8250_port *uart)
> {
> struct fintek_8250 *pdata;
> @@ -248,8 +270,8 @@ int fintek_8250_probe(struct uart_8250_port *uart)
> return -ENOMEM;
>
> memcpy(pdata, &probe_data, sizeof(probe_data));
> - uart->port.rs485_config = fintek_8250_rs485_config;
Maybe just:
if (pdata->id != CHIP_ID_F81216)
uart->port.rs485_config = fintek_8250_rs485_config;
Instead of the whole function
> uart->port.private_data = pdata;
> + fintek_8250_set_rs485_handler(uart);
>
> return 0;
> }
> --
> 1.9.1
>
--
Ricardo Ribalda
[toc] | [prev] | [next] | [standalone]
| From | "Ji-Ze Hong (Peter Hong)" <hpeter@gmail.com> |
|---|---|
| Date | 2016-09-06 04:10 +0200 |
| Message-ID | <sedZL-3RL-5@gated-at.bofh.it> |
| In reply to | #1474310 |
Hi Ricardo, Ricardo Ribalda Delgado 於 2016/9/1 下午 07:22 寫道: >> >> memcpy(pdata, &probe_data, sizeof(probe_data)); >> - uart->port.rs485_config = fintek_8250_rs485_config; > > Maybe just: > > > if (pdata->id != CHIP_ID_F81216) > uart->port.rs485_config = fintek_8250_rs485_config; > > > Instead of the whole function > >> uart->port.private_data = pdata; >> + fintek_8250_set_rs485_handler(uart); >> >> return 0; >> } Your comments is good for this patch. But we'll still try to add more SuperIO with this. So we'll separate it as a function to control individually. -- With Best Regards, Peter Hong
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web