switch (chip) { case CHIP_ID_F81865: case CHIP_ID_F81866: case CHIP_ID_F81966: case CHIP_ID_F81216AD: case CHIP_ID_F81216E: case CHIP_ID_F81216H: case CHIP_ID_F81216: break; default: return -ENODEV;
}
pdata->pid = chip; return 0;
}
staticint fintek_8250_get_ldn_range(struct fintek_8250 *pdata, int *min, int *max)
{ switch (pdata->pid) { case CHIP_ID_F81966: case CHIP_ID_F81865: case CHIP_ID_F81866:
*min = F81866_LDN_LOW;
*max = F81866_LDN_HIGH; return 0;
case CHIP_ID_F81216AD: case CHIP_ID_F81216E: case CHIP_ID_F81216H: case CHIP_ID_F81216:
*min = F81216_LDN_LOW;
*max = F81216_LDN_HIGH; return 0;
}
if (rs485->flags & SER_RS485_ENABLED) { /* Hardware do not support same RTS level on send and receive */ if (!(rs485->flags & SER_RS485_RTS_ON_SEND) ==
!(rs485->flags & SER_RS485_RTS_AFTER_SEND)) return -EINVAL;
config |= RS485_URA;
}
if (rs485->delay_rts_before_send) {
rs485->delay_rts_before_send = 1;
config |= TXW4C_IRA;
}
if (rs485->delay_rts_after_send) {
rs485->delay_rts_after_send = 1;
config |= RXW4C_IRA;
}
if (rs485->flags & SER_RS485_RTS_ON_SEND)
config |= RTS_INVERT;
if (fintek_8250_enter_key(pdata->base_port, pdata->key)) return -EBUSY;
/* * We'll use serial8250_do_set_termios() for baud = 0, otherwise It'll * crash on baudrate_table[i] % baud with "division by zero".
*/ if (!baud) gotoexit;
switch (pdata->pid) { case CHIP_ID_F81216E: case CHIP_ID_F81216H:
reg = RS485; break; case CHIP_ID_F81966: case CHIP_ID_F81866:
reg = F81866_UART_CLK; break; default: /* Don't change clocksource with unknown PID */
dev_warn(port->dev, "%s: pid: %x Not support. use default set_termios.\n",
__func__, pdata->pid); gotoexit;
}
for (i = 0; i < ARRAY_SIZE(baudrate_table); ++i) { if (baud > baudrate_table[i] || baudrate_table[i] % baud != 0) continue;
if (port->uartclk == baudrate_table[i] * 16) break;
if (fintek_8250_enter_key(pdata->base_port, pdata->key)) continue;
switch (pdata->pid) { case CHIP_ID_F81216E: case CHIP_ID_F81216H: case CHIP_ID_F81966: case CHIP_ID_F81866:
uart->port.set_termios = fintek_8250_set_termios; break;
switch (pdata->pid) { case CHIP_ID_F81216AD: case CHIP_ID_F81216H: case CHIP_ID_F81966: case CHIP_ID_F81866: case CHIP_ID_F81865:
uart->port.rs485_config = fintek_8250_rs485_config; if (!pdata->index)
uart->port.rs485_supported = fintek_8250_rs485_supported_port0; else
uart->port.rs485_supported = fintek_8250_rs485_supported; break;
case CHIP_ID_F81216E: /* F81216E does not support RS485 delays */
uart->port.rs485_config = fintek_8250_rs485_config;
uart->port.rs485_supported = fintek_8250_rs485_supported; break;
default: /* No RS485 Auto direction functional */ break;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.