summaryrefslogtreecommitdiff
path: root/sys/dev/usb/uslhcomreg.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb/uslhcomreg.h')
-rw-r--r--sys/dev/usb/uslhcomreg.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/sys/dev/usb/uslhcomreg.h b/sys/dev/usb/uslhcomreg.h
new file mode 100644
index 00000000000..286cde277e7
--- /dev/null
+++ b/sys/dev/usb/uslhcomreg.h
@@ -0,0 +1,103 @@
+/* $OpenBSD: */
+
+/*
+ * Copyright (c) 2015 SASANO Takayoshi <uaa@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#define USLHCOM_TX_HEADER_SIZE sizeof(u_char)
+
+#define SET_TRANSMIT_DATA(x) (x)
+#define GET_RECEIVE_DATA(x) (x)
+
+#define SET_DEVICE_RESET 0x40
+#define GET_SET_UART_ENABLE 0x41
+#define GET_UART_STATUS 0x42
+#define SET_CLEAR_FIFOS 0x43
+#define GET_GPIO_STATE 0x44
+#define SET_GPIO_STATE 0x45
+#define GET_VERSION 0x46
+#define GET_SET_OTP_LOCK_BYTE 0x47
+
+#define GET_SET_UART_CONFIG 0x50
+#define SET_TRANSMIT_LINE_BREAK 0x51
+#define SET_STOP_LINE_BREAK 0x52
+
+
+/* SET_DEVICE_RESET */
+#define DEVICE_RESET_VALUE 0x00
+
+/* GET_SET_UART_ENABLE */
+#define UART_DISABLE 0x00
+#define UART_ENABLE 0x01
+
+/* GET_UART_STATUS */
+struct uslhcom_uart_status {
+ u_char tx_fifo[2]; /* (big endian) */
+ u_char rx_fifo[2]; /* (big endian) */
+ u_char error_status;
+ u_char break_status;
+} __packed;
+
+#define ERROR_STATUS_PARITY 0x01
+#define ERROR_STATUS_OVERRUN 0x02
+#define BREAK_STATUS 0x01
+
+/* SET_CLEAR_FIFO */
+#define CLEAR_TX_FIFO 0x01
+#define CLEAR_RX_FIFO 0x02
+
+/* GET_VERSION */
+struct uslhcom_version_info {
+ u_char product_id;
+ u_char product_revision;
+} __packed;
+
+/* GET_SET_UART_CONFIG */
+struct uslhcom_uart_config {
+ u_char baud_rate[4]; /* (big endian) */
+ u_char parity;
+ u_char data_control;
+ u_char data_bits;
+ u_char stop_bits;
+} __packed;
+
+/*
+ * Silicon Labs CP2110/4 Application Note (AN434) Rev 0.4 says that
+ * valid baud rate is 300bps to 500,000bps.
+ * But HidUartSample of CP2110 SDK accepts 50bps to 2,000,000bps.
+ */
+#define UART_CONFIG_BAUD_RATE_MIN 50
+#define UART_CONFIG_BAUD_RATE_MAX 2000000
+
+#define UART_CONFIG_PARITY_NONE 0x00
+#define UART_CONFIG_PARITY_EVEN 0x01
+#define UART_CONFIG_PARITY_ODD 0x02
+#define UART_CONFIG_PARITY_MARK 0x03
+#define UART_CONFIG_PARITY_SPACE 0x04
+
+#define UART_CONFIG_DATA_CONTROL_NONE 0x00
+#define UART_CONFIG_DATA_CONTROL_HARD 0x01
+
+/*
+ * AN434 Rev 0.4 describes setting 0x05 ... 0x08 to configure data bits.
+ * But actually it requires different values.
+ */
+#define UART_CONFIG_DATA_BITS_5 0x00
+#define UART_CONFIG_DATA_BITS_6 0x01
+#define UART_CONFIG_DATA_BITS_7 0x02
+#define UART_CONFIG_DATA_BITS_8 0x03
+
+#define UART_CONFIG_STOP_BITS_1 0x00
+#define UART_CONFIG_STOP_BITS_2 0x01