112bd3c8bSSascha Wildner /* $FreeBSD$ */ 212bd3c8bSSascha Wildner /*- 312bd3c8bSSascha Wildner * Copyright (c) 2010 Lev Serebryakov <lev@FreeBSD.org>. 412bd3c8bSSascha Wildner * All rights reserved. 512bd3c8bSSascha Wildner * 612bd3c8bSSascha Wildner * Redistribution and use in source and binary forms, with or without 712bd3c8bSSascha Wildner * modification, are permitted provided that the following conditions 812bd3c8bSSascha Wildner * are met: 912bd3c8bSSascha Wildner * 1. Redistributions of source code must retain the above copyright 1012bd3c8bSSascha Wildner * notice, this list of conditions and the following disclaimer. 1112bd3c8bSSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 1212bd3c8bSSascha Wildner * notice, this list of conditions and the following disclaimer in the 1312bd3c8bSSascha Wildner * documentation and/or other materials provided with the distribution. 1412bd3c8bSSascha Wildner * 1512bd3c8bSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1612bd3c8bSSascha Wildner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1712bd3c8bSSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1812bd3c8bSSascha Wildner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1912bd3c8bSSascha Wildner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2012bd3c8bSSascha Wildner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2112bd3c8bSSascha Wildner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2212bd3c8bSSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2312bd3c8bSSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2412bd3c8bSSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2512bd3c8bSSascha Wildner * SUCH DAMAGE. 2612bd3c8bSSascha Wildner */ 2712bd3c8bSSascha Wildner #ifndef _UMCS7840_H_ 2812bd3c8bSSascha Wildner #define _UMCS7840_H_ 2912bd3c8bSSascha Wildner 3012bd3c8bSSascha Wildner #define UMCS7840_MAX_PORTS 4 3112bd3c8bSSascha Wildner 3212bd3c8bSSascha Wildner #define UMCS7840_READ_LENGTH 1 /* bytes */ 3312bd3c8bSSascha Wildner #define UMCS7840_CTRL_TIMEOUT 500 /* ms */ 3412bd3c8bSSascha Wildner 3512bd3c8bSSascha Wildner /* Read/Wrtire registers vendor commands */ 3612bd3c8bSSascha Wildner #define MCS7840_RDREQ 0x0d 3712bd3c8bSSascha Wildner #define MCS7840_WRREQ 0x0e 3812bd3c8bSSascha Wildner 3912bd3c8bSSascha Wildner /* Read/Wrtie EEPROM values */ 4012bd3c8bSSascha Wildner #define MCS7840_EEPROM_RW_WVALUE 0x0900 4112bd3c8bSSascha Wildner 4212bd3c8bSSascha Wildner /* 4312bd3c8bSSascha Wildner * All these registers are documented only in full datasheet, 4412bd3c8bSSascha Wildner * which can be requested from MosChip tech support. 4512bd3c8bSSascha Wildner */ 4612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP1 0x00 /* Options for for UART 1, R/W */ 4712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CONTROL1 0x01 /* Control bits for UART 1, 4812bd3c8bSSascha Wildner * R/W */ 4912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_PINPONGHIGH 0x02 /* High bits of ping-pong 5012bd3c8bSSascha Wildner * register, R/W */ 5112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_PINPONGLOW 0x03 /* Low bits of ping-pong 5212bd3c8bSSascha Wildner * register, R/W */ 5312bd3c8bSSascha Wildner /* DCRx_1 Registers goes here (see below, they are documented) */ 5412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_GPIO 0x07 /* GPIO_0 and GPIO_1 bits, 5512bd3c8bSSascha Wildner * undocumented, see notes 5612bd3c8bSSascha Wildner * below R/W */ 5712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP2 0x08 /* Options for for UART 2, R/W */ 5812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CONTROL2 0x09 /* Control bits for UART 2, 5912bd3c8bSSascha Wildner * R/W */ 6012bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP3 0x0a /* Options for for UART 3, R/W */ 6112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CONTROL3 0x0b /* Control bits for UART 3, 6212bd3c8bSSascha Wildner * R/W */ 6312bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP4 0x0c /* Options for for UART 4, R/W */ 6412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CONTROL4 0x0d /* Control bits for UART 4, 6512bd3c8bSSascha Wildner * R/W */ 6612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_PLL_DIV_M 0x0e /* Pre-diviedr for PLL, R/W */ 6712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN1 0x0f /* NOT MENTIONED AND NOT USED */ 6812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_PLL_DIV_N 0x10 /* Loop divider for PLL, R/W */ 6912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CLOCK_MUX 0x12 /* PLL input clock & Interrupt 7012bd3c8bSSascha Wildner * endpoint control, R/W */ 7112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN2 0x11 /* NOT MENTIONED AND NOT USED */ 7212bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CLOCK_SELECT12 0x13 /* Clock source for ports 1 & 7312bd3c8bSSascha Wildner * 2, R/W */ 7412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_CLOCK_SELECT34 0x14 /* Clock source for ports 3 & 7512bd3c8bSSascha Wildner * 4, R/W */ 7612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN3 0x15 /* NOT MENTIONED AND NOT USED */ 7712bd3c8bSSascha Wildner /* DCRx_2-DCRx_4 Registers goes here (see below, they are documented) */ 7812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN4 0x1f /* NOT MENTIONED AND NOT USED */ 7912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN5 0x20 /* NOT MENTIONED AND NOT USED */ 8012bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN6 0x21 /* NOT MENTIONED AND NOT USED */ 8112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN7 0x22 /* NOT MENTIONED AND NOT USED */ 8212bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN8 0x23 /* NOT MENTIONED AND NOT USED */ 8312bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWN9 0x24 /* NOT MENTIONED AND NOT USED */ 8412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWNA 0x25 /* NOT MENTIONED AND NOT USED */ 8512bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWNB 0x26 /* NOT MENTIONED AND NOT USED */ 8612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWNC 0x27 /* NOT MENTIONED AND NOT USED */ 8712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWND 0x28 /* NOT MENTIONED AND NOT USED */ 8812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWNE 0x29 /* NOT MENTIONED AND NOT USED */ 8912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_UNKNOWNF 0x2a /* NOT MENTIONED AND NOT USED */ 9012bd3c8bSSascha Wildner #define MCS7840_DEV_REG_MODE 0x2b /* Hardware configuration, 9112bd3c8bSSascha Wildner * R/Only */ 9212bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP1_ICG 0x2c /* Inter character gap 9312bd3c8bSSascha Wildner * configuration for Port 1, 9412bd3c8bSSascha Wildner * R/W */ 9512bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP2_ICG 0x2d /* Inter character gap 9612bd3c8bSSascha Wildner * configuration for Port 2, 9712bd3c8bSSascha Wildner * R/W */ 9812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP3_ICG 0x2e /* Inter character gap 9912bd3c8bSSascha Wildner * configuration for Port 3, 10012bd3c8bSSascha Wildner * R/W */ 10112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_SP4_ICG 0x2f /* Inter character gap 10212bd3c8bSSascha Wildner * configuration for Port 4, 10312bd3c8bSSascha Wildner * R/W */ 10412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_RX_SAMPLING12 0x30 /* RX sampling for ports 1 & 10512bd3c8bSSascha Wildner * 2, R/W */ 10612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_RX_SAMPLING34 0x31 /* RX sampling for ports 3 & 10712bd3c8bSSascha Wildner * 4, R/W */ 10812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BI_FIFO_STAT1 0x32 /* Bulk-In FIFO Stat for Port 10912bd3c8bSSascha Wildner * 1, contains number of 11012bd3c8bSSascha Wildner * availiable bytes, R/Only */ 11112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BO_FIFO_STAT1 0x33 /* Bulk-out FIFO Stat for Port 11212bd3c8bSSascha Wildner * 1, contains number of 11312bd3c8bSSascha Wildner * availiable bytes, R/Only */ 11412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BI_FIFO_STAT2 0x34 /* Bulk-In FIFO Stat for Port 11512bd3c8bSSascha Wildner * 2, contains number of 11612bd3c8bSSascha Wildner * availiable bytes, R/Only */ 11712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BO_FIFO_STAT2 0x35 /* Bulk-out FIFO Stat for Port 11812bd3c8bSSascha Wildner * 2, contains number of 11912bd3c8bSSascha Wildner * availiable bytes, R/Only */ 12012bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BI_FIFO_STAT3 0x36 /* Bulk-In FIFO Stat for Port 12112bd3c8bSSascha Wildner * 3, contains number of 12212bd3c8bSSascha Wildner * availiable bytes, R/Only */ 12312bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BO_FIFO_STAT3 0x37 /* Bulk-out FIFO Stat for Port 12412bd3c8bSSascha Wildner * 3, contains number of 12512bd3c8bSSascha Wildner * availiable bytes, R/Only */ 12612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BI_FIFO_STAT4 0x38 /* Bulk-In FIFO Stat for Port 12712bd3c8bSSascha Wildner * 4, contains number of 12812bd3c8bSSascha Wildner * availiable bytes, R/Only */ 12912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_BO_FIFO_STAT4 0x39 /* Bulk-out FIFO Stat for Port 13012bd3c8bSSascha Wildner * 4, contains number of 13112bd3c8bSSascha Wildner * availiable bytes, R/Only */ 13212bd3c8bSSascha Wildner #define MCS7840_DEV_REG_ZERO_PERIOD1 0x3a /* Period between zero out 13312bd3c8bSSascha Wildner * frames for Port 1, R/W */ 13412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_ZERO_PERIOD2 0x3b /* Period between zero out 13512bd3c8bSSascha Wildner * frames for Port 1, R/W */ 13612bd3c8bSSascha Wildner #define MCS7840_DEV_REG_ZERO_PERIOD3 0x3c /* Period between zero out 13712bd3c8bSSascha Wildner * frames for Port 1, R/W */ 13812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_ZERO_PERIOD4 0x3d /* Period between zero out 13912bd3c8bSSascha Wildner * frames for Port 1, R/W */ 14012bd3c8bSSascha Wildner #define MCS7840_DEV_REG_ZERO_ENABLE 0x3e /* Enable/disable of zero out 14112bd3c8bSSascha Wildner * frames, R/W */ 14212bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_LOW1 0x3f /* Low 8 bits of threshhold 14312bd3c8bSSascha Wildner * value for Bulk-Out for Port 14412bd3c8bSSascha Wildner * 1, R/W */ 14512bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_HIGH1 0x40 /* High 1 bit of threshhold 14612bd3c8bSSascha Wildner * value for Bulk-Out and 14712bd3c8bSSascha Wildner * enable flag for Port 1, R/W */ 14812bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_LOW2 0x41 /* Low 8 bits of threshhold 14912bd3c8bSSascha Wildner * value for Bulk-Out for Port 15012bd3c8bSSascha Wildner * 2, R/W */ 15112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_HIGH2 0x42 /* High 1 bit of threshhold 15212bd3c8bSSascha Wildner * value for Bulk-Out and 15312bd3c8bSSascha Wildner * enable flag for Port 2, R/W */ 15412bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_LOW3 0x43 /* Low 8 bits of threshhold 15512bd3c8bSSascha Wildner * value for Bulk-Out for Port 15612bd3c8bSSascha Wildner * 3, R/W */ 15712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_HIGH3 0x44 /* High 1 bit of threshhold 15812bd3c8bSSascha Wildner * value for Bulk-Out and 15912bd3c8bSSascha Wildner * enable flag for Port 3, R/W */ 16012bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_LOW4 0x45 /* Low 8 bits of threshhold 16112bd3c8bSSascha Wildner * value for Bulk-Out for Port 16212bd3c8bSSascha Wildner * 4, R/W */ 16312bd3c8bSSascha Wildner #define MCS7840_DEV_REG_THR_VAL_HIGH4 0x46 /* High 1 bit of threshhold 16412bd3c8bSSascha Wildner * value for Bulk-Out and 16512bd3c8bSSascha Wildner * enable flag for Port 4, R/W */ 16612bd3c8bSSascha Wildner 16712bd3c8bSSascha Wildner /* Bits for SPx registers */ 16812bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_LOOP_PIPES 0x01 /* Loop Bulk-Out FIFO to the 16912bd3c8bSSascha Wildner * Bulk-In FIFO, default = 0 */ 17012bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_SKIP_ERR_DATA 0x02 /* Drop data bytes from UART, 17112bd3c8bSSascha Wildner * which were recevied with 17212bd3c8bSSascha Wildner * errors, default = 0 */ 17312bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_RESET_OUT_FIFO 0x04 /* Reset Bulk-Out FIFO */ 17412bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_RESET_IN_FIFO 0x08 /* Reset Bulk-In FIFO */ 17512bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_MASK 0x70 /* Mask to extract Baud CLK 17612bd3c8bSSascha Wildner * source */ 17712bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_X1 0x00 /* CLK = 1.8432Mhz, max speed 17812bd3c8bSSascha Wildner * = 115200 bps, default */ 17912bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_X2 0x10 /* CLK = 3.6864Mhz, max speed 18012bd3c8bSSascha Wildner * = 230400 bps */ 18112bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_X35 0x20 /* CLK = 6.4512Mhz, max speed 18212bd3c8bSSascha Wildner * = 403200 bps */ 18312bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_X4 0x30 /* CLK = 7.3728Mhz, max speed 18412bd3c8bSSascha Wildner * = 460800 bps */ 18512bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_X7 0x40 /* CLK = 12.9024Mhz, max speed 18612bd3c8bSSascha Wildner * = 806400 bps */ 18712bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_X8 0x50 /* CLK = 14.7456Mhz, max speed 18812bd3c8bSSascha Wildner * = 921600 bps */ 18912bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_24MHZ 0x60 /* CLK = 24.0000Mhz, max speed 19012bd3c8bSSascha Wildner * = 1.5 Mbps */ 19112bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_48MHZ 0x70 /* CLK = 48.0000Mhz, max speed 19212bd3c8bSSascha Wildner * = 3.0 Mbps */ 19312bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_CLOCK_SHIFT 4 /* Value 0..7 can be shifted 19412bd3c8bSSascha Wildner * to get clock value */ 19512bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_UART_RESET 0x80 /* Reset UART */ 19612bd3c8bSSascha Wildner 19712bd3c8bSSascha Wildner /* Bits for CONTROLx registers */ 19812bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_HWFC 0x01 /* Enable hardware flow 19912bd3c8bSSascha Wildner * control (when power 20012bd3c8bSSascha Wildner * down? It is unclear 20112bd3c8bSSascha Wildner * in documents), 20212bd3c8bSSascha Wildner * default = 0 */ 20312bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_UNUNSED1 0x02 /* Reserved */ 20412bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_CTS_ENABLE 0x04 /* CTS changes are 20512bd3c8bSSascha Wildner * translated to MSR, 20612bd3c8bSSascha Wildner * default = 0 */ 20712bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_UNUSED2 0x08 /* Reserved for ports 20812bd3c8bSSascha Wildner * 2,3,4 */ 20912bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROL1_DRIVER_DONE 0x08 /* USB enumerating is 21012bd3c8bSSascha Wildner * finished, USB 21112bd3c8bSSascha Wildner * enumeration memory 21212bd3c8bSSascha Wildner * can be used as FIFOs */ 21312bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_RX_NEGATE 0x10 /* Negate RX input, 21412bd3c8bSSascha Wildner * works for IrDA mode 21512bd3c8bSSascha Wildner * only, default = 0 */ 21612bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_RX_DISABLE 0x20 /* Disable RX logic, 21712bd3c8bSSascha Wildner * works only for 21812bd3c8bSSascha Wildner * RS-232/RS-485 mode, 21912bd3c8bSSascha Wildner * default = 0 */ 22012bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_FSM_CONTROL 0x40 /* Disable RX FSM when 22112bd3c8bSSascha Wildner * TX is in progress, 22212bd3c8bSSascha Wildner * works for IrDA mode 22312bd3c8bSSascha Wildner * only, default = 0 */ 22412bd3c8bSSascha Wildner #define MCS7840_DEV_CONTROLx_UNUSED3 0x80 /* Reserved */ 22512bd3c8bSSascha Wildner 22612bd3c8bSSascha Wildner /* 22712bd3c8bSSascha Wildner * Bits for PINPONGx registers 22812bd3c8bSSascha Wildner * These registers control how often two input buffers 22912bd3c8bSSascha Wildner * for Bulk-In FIFOs are swapped. One of buffers is used 23012bd3c8bSSascha Wildner * for USB trnasfer, other for receiving data from UART. 23112bd3c8bSSascha Wildner * Exact meaning of 15 bit value in these registers is unknown 23212bd3c8bSSascha Wildner */ 23312bd3c8bSSascha Wildner #define MCS7840_DEV_PINPONGHIGH_MULT 128 /* Only 7 bits in PINPONGLOW 23412bd3c8bSSascha Wildner * register */ 23512bd3c8bSSascha Wildner #define MCS7840_DEV_PINPONGLOW_BITS 7 /* Only 7 bits in PINPONGLOW 23612bd3c8bSSascha Wildner * register */ 23712bd3c8bSSascha Wildner 23812bd3c8bSSascha Wildner /* 23912bd3c8bSSascha Wildner * THIS ONE IS UNDOCUMENTED IN FULL DATASHEET, but e-mail from tech support 24012bd3c8bSSascha Wildner * confirms, that it is register for GPIO_0 and GPIO_1 data input/output. 24112bd3c8bSSascha Wildner * Chips has 2 GPIO, but first one (lower bit) MUST be used by device 24212bd3c8bSSascha Wildner * authors as "number of port" indicator, grounded (0) for two-port 24312bd3c8bSSascha Wildner * devices and pulled-up to 1 for 4-port devices. 24412bd3c8bSSascha Wildner */ 24512bd3c8bSSascha Wildner #define MCS7840_DEV_GPIO_4PORTS 0x01 /* Device has 4 ports 24612bd3c8bSSascha Wildner * configured */ 24712bd3c8bSSascha Wildner #define MCS7840_DEV_GPIO_GPIO_0 0x01 /* The same as above */ 24812bd3c8bSSascha Wildner #define MCS7840_DEV_GPIO_GPIO_1 0x02 /* GPIO_1 data */ 24912bd3c8bSSascha Wildner 25012bd3c8bSSascha Wildner /* 25112bd3c8bSSascha Wildner * Constants for PLL dividers 25212bd3c8bSSascha Wildner * Ouptut frequency of PLL is: 25312bd3c8bSSascha Wildner * Fout = (N/M) * Fin. 25412bd3c8bSSascha Wildner * Default PLL input frequency Fin is 12Mhz (on-chip). 25512bd3c8bSSascha Wildner */ 25612bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_M_BITS 6 /* Number of useful bits for M 25712bd3c8bSSascha Wildner * divider */ 25812bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_M_MASK 0x3f /* Mask for M divider */ 25912bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_M_MIN 1 /* Minimum value for M, 0 is 26012bd3c8bSSascha Wildner * forbidden */ 26112bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_M_DEF 1 /* Default value for M */ 26212bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_M_MAX 63 /* Maximum value for M */ 26312bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_N_BITS 6 /* Number of useful bits for N 26412bd3c8bSSascha Wildner * divider */ 26512bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_N_MASK 0x3f /* Mask for N divider */ 26612bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_N_MIN 1 /* Minimum value for N, 0 is 26712bd3c8bSSascha Wildner * forbidden */ 26812bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_N_DEF 8 /* Default value for N */ 26912bd3c8bSSascha Wildner #define MCS7840_DEV_PLL_DIV_N_MAX 63 /* Maximum value for N */ 27012bd3c8bSSascha Wildner 27112bd3c8bSSascha Wildner /* Bits for CLOCK_MUX register */ 27212bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_INPUTMASK 0x03 /* Mask to extract PLL clock 27312bd3c8bSSascha Wildner * input */ 27412bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_IN12MHZ 0x00 /* 12Mhz PLL input, default */ 27512bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_INEXTRN 0x01 /* External (device-depended) 27612bd3c8bSSascha Wildner * PLL input */ 27712bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_INRSV1 0x02 /* Reserved */ 27812bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_INRSV2 0x03 /* Reserved */ 27912bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_PLLHIGH 0x04 /* 0 = PLL Output is 28012bd3c8bSSascha Wildner * 20MHz-100MHz (default), 1 = 28112bd3c8bSSascha Wildner * 100MHz-300MHz range */ 28212bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_INTRFIFOS 0x08 /* Enable additional 8 bytes 28312bd3c8bSSascha Wildner * fro Interrupt USB pipe with 28412bd3c8bSSascha Wildner * USB FIFOs statuses, default 28512bd3c8bSSascha Wildner * = 0 */ 28612bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_RESERVED1 0x10 /* Unused */ 28712bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_RESERVED2 0x20 /* Unused */ 28812bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_RESERVED3 0x40 /* Unused */ 28912bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_MUX_RESERVED4 0x80 /* Unused */ 29012bd3c8bSSascha Wildner 29112bd3c8bSSascha Wildner /* Bits for CLOCK_SELECTxx registers */ 29212bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT1_MASK 0x07 /* Bits for port 1 in 29312bd3c8bSSascha Wildner * CLOCK_SELECT12 */ 29412bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT1_SHIFT 0 /* Shift for port 1in 29512bd3c8bSSascha Wildner * CLOCK_SELECT12 */ 29612bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT2_MASK 0x38 /* Bits for port 2 in 29712bd3c8bSSascha Wildner * CLOCK_SELECT12 */ 29812bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT2_SHIFT 3 /* Shift for port 2 in 29912bd3c8bSSascha Wildner * CLOCK_SELECT12 */ 30012bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT3_MASK 0x07 /* Bits for port 3 in 30112bd3c8bSSascha Wildner * CLOCK_SELECT23 */ 30212bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT3_SHIFT 0 /* Shift for port 3 in 30312bd3c8bSSascha Wildner * CLOCK_SELECT23 */ 30412bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT4_MASK 0x38 /* Bits for port 4 in 30512bd3c8bSSascha Wildner * CLOCK_SELECT23 */ 30612bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT4_SHIFT 3 /* Shift for port 4 in 30712bd3c8bSSascha Wildner * CLOCK_SELECT23 */ 30812bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_STD 0x00 /* STANDARD baudrate derived 30912bd3c8bSSascha Wildner * from 96Mhz, default for all 31012bd3c8bSSascha Wildner * ports */ 31112bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_30MHZ 0x01 /* 30Mhz */ 31212bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_96MHZ 0x02 /* 96Mhz direct */ 31312bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_120MHZ 0x03 /* 120Mhz */ 31412bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_PLL 0x04 /* PLL output (see for M and N 31512bd3c8bSSascha Wildner * dividers) */ 31612bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_EXT 0x05 /* External clock input 31712bd3c8bSSascha Wildner * (device-dependend) */ 31812bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_RES1 0x06 /* Unused */ 31912bd3c8bSSascha Wildner #define MCS7840_DEV_CLOCK_SELECT_RES2 0x07 /* Unused */ 32012bd3c8bSSascha Wildner 32112bd3c8bSSascha Wildner /* Bits for MODE register */ 32212bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_RESERVED1 0x01 /* Unused */ 32312bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_RESET 0x02 /* 0: RESET = Active High 32412bd3c8bSSascha Wildner * (default), 1: Reserved (?) */ 32512bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_SER_PRSNT 0x04 /* 0: Reserved, 1: Do not use 32612bd3c8bSSascha Wildner * hardocded values (default) 32712bd3c8bSSascha Wildner * (?) */ 32812bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_PLLBYPASS 0x08 /* 1: PLL output is bypassed, 32912bd3c8bSSascha Wildner * default = 0 */ 33012bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_PORBYPASS 0x10 /* 1: Power-On Reset is 33112bd3c8bSSascha Wildner * bypassed, default = 0 */ 33212bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_SELECT24S 0x20 /* 0: 4 Serial Ports / IrDA 33312bd3c8bSSascha Wildner * active, 1: 2 Serial Ports / 33412bd3c8bSSascha Wildner * IrDA active */ 33512bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_EEPROMWR 0x40 /* EEPROM write is enabled, 33612bd3c8bSSascha Wildner * default */ 33712bd3c8bSSascha Wildner #define MCS7840_DEV_MODE_IRDA 0x80 /* IrDA mode is activated 33812bd3c8bSSascha Wildner * (could be turned on), 33912bd3c8bSSascha Wildner * default */ 34012bd3c8bSSascha Wildner 34112bd3c8bSSascha Wildner /* Bits for SPx ICG */ 34212bd3c8bSSascha Wildner #define MCS7840_DEV_SPx_ICG_DEF 0x24 /* All 8 bits is used as 34312bd3c8bSSascha Wildner * number of BAUD clocks of 34412bd3c8bSSascha Wildner * pause */ 34512bd3c8bSSascha Wildner 34612bd3c8bSSascha Wildner /* 34712bd3c8bSSascha Wildner * Bits for RX_SAMPLINGxx registers 34812bd3c8bSSascha Wildner * These registers control when bit value will be sampled within 34912bd3c8bSSascha Wildner * the baud period. 35012bd3c8bSSascha Wildner * 0 is very beginning of period, 15 is very end, 7 is the middle. 35112bd3c8bSSascha Wildner */ 35212bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING1_MASK 0x0f /* Bits for port 1 in 35312bd3c8bSSascha Wildner * RX_SAMPLING12 */ 35412bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING1_SHIFT 0 /* Shift for port 1in 35512bd3c8bSSascha Wildner * RX_SAMPLING12 */ 35612bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING2_MASK 0xf0 /* Bits for port 2 in 35712bd3c8bSSascha Wildner * RX_SAMPLING12 */ 35812bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING2_SHIFT 4 /* Shift for port 2 in 35912bd3c8bSSascha Wildner * RX_SAMPLING12 */ 36012bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING3_MASK 0x0f /* Bits for port 3 in 36112bd3c8bSSascha Wildner * RX_SAMPLING23 */ 36212bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING3_SHIFT 0 /* Shift for port 3 in 36312bd3c8bSSascha Wildner * RX_SAMPLING23 */ 36412bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING4_MASK 0xf0 /* Bits for port 4 in 36512bd3c8bSSascha Wildner * RX_SAMPLING23 */ 36612bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLING4_SHIFT 4 /* Shift for port 4 in 36712bd3c8bSSascha Wildner * RX_SAMPLING23 */ 36812bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLINGx_MIN 0 /* Max for any RX Sampling */ 36912bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLINGx_DEF 7 /* Default for any RX 37012bd3c8bSSascha Wildner * Sampling, center of period */ 37112bd3c8bSSascha Wildner #define MCS7840_DEV_RX_SAMPLINGx_MAX 15 /* Min for any RX Sampling */ 37212bd3c8bSSascha Wildner 37312bd3c8bSSascha Wildner /* Bits for ZERO_PERIODx */ 37412bd3c8bSSascha Wildner #define MCS7840_DEV_ZERO_PERIODx_DEF 20 /* Number of Bulk-in requests 37512bd3c8bSSascha Wildner * befor sending zero-sized 37612bd3c8bSSascha Wildner * reply */ 37712bd3c8bSSascha Wildner 37812bd3c8bSSascha Wildner /* Bits for ZERO_ENABLE */ 37912bd3c8bSSascha Wildner #define MCS7840_DEV_ZERO_ENABLE_PORT1 0x01 /* Enable of sending 38012bd3c8bSSascha Wildner * zero-sized replies for port 38112bd3c8bSSascha Wildner * 1, default */ 38212bd3c8bSSascha Wildner #define MCS7840_DEV_ZERO_ENABLE_PORT2 0x02 /* Enable of sending 38312bd3c8bSSascha Wildner * zero-sized replies for port 38412bd3c8bSSascha Wildner * 2, default */ 38512bd3c8bSSascha Wildner #define MCS7840_DEV_ZERO_ENABLE_PORT3 0x04 /* Enable of sending 38612bd3c8bSSascha Wildner * zero-sized replies for port 38712bd3c8bSSascha Wildner * 3, default */ 38812bd3c8bSSascha Wildner #define MCS7840_DEV_ZERO_ENABLE_PORT4 0x08 /* Enable of sending 38912bd3c8bSSascha Wildner * zero-sized replies for port 39012bd3c8bSSascha Wildner * 4, default */ 39112bd3c8bSSascha Wildner 39212bd3c8bSSascha Wildner /* Bits for THR_VAL_HIGHx */ 39312bd3c8bSSascha Wildner #define MCS7840_DEV_THR_VAL_HIGH_MASK 0x01 /* Only one bit is used */ 39412bd3c8bSSascha Wildner #define MCS7840_DEV_THR_VAL_HIGH_MUL 256 /* This one bit is means "256" */ 39512bd3c8bSSascha Wildner #define MCS7840_DEV_THR_VAL_HIGH_SHIFT 8 /* This one bit is means "256" */ 39612bd3c8bSSascha Wildner #define MCS7840_DEV_THR_VAL_HIGH_ENABLE 0x80 /* Enable threshold */ 39712bd3c8bSSascha Wildner 39812bd3c8bSSascha Wildner /* These are documented in "public" datasheet */ 39912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR0_1 0x04 /* Device contol register 0 for Port 40012bd3c8bSSascha Wildner * 1, R/W */ 40112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR1_1 0x05 /* Device contol register 1 for Port 40212bd3c8bSSascha Wildner * 1, R/W */ 40312bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR2_1 0x06 /* Device contol register 2 for Port 40412bd3c8bSSascha Wildner * 1, R/W */ 40512bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR0_2 0x16 /* Device contol register 0 for Port 40612bd3c8bSSascha Wildner * 2, R/W */ 40712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR1_2 0x17 /* Device contol register 1 for Port 40812bd3c8bSSascha Wildner * 2, R/W */ 40912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR2_2 0x18 /* Device contol register 2 for Port 41012bd3c8bSSascha Wildner * 2, R/W */ 41112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR0_3 0x19 /* Device contol register 0 for Port 41212bd3c8bSSascha Wildner * 3, R/W */ 41312bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR1_3 0x1a /* Device contol register 1 for Port 41412bd3c8bSSascha Wildner * 3, R/W */ 41512bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR2_3 0x1b /* Device contol register 2 for Port 41612bd3c8bSSascha Wildner * 3, R/W */ 41712bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR0_4 0x1c /* Device contol register 0 for Port 41812bd3c8bSSascha Wildner * 4, R/W */ 41912bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR1_4 0x1d /* Device contol register 1 for Port 42012bd3c8bSSascha Wildner * 4, R/W */ 42112bd3c8bSSascha Wildner #define MCS7840_DEV_REG_DCR2_4 0x1e /* Device contol register 2 for Port 42212bd3c8bSSascha Wildner * 4, R/W */ 42312bd3c8bSSascha Wildner 42412bd3c8bSSascha Wildner /* Bits of DCR0 registers, documented in datasheet */ 42512bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_PWRSAVE 0x01 /* Shutdown transiver 42612bd3c8bSSascha Wildner * when USB Suspend is 42712bd3c8bSSascha Wildner * engaged, default = 1 */ 42812bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_RESERVED1 0x02 /* Unused */ 42912bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_GPIO_MODE_MASK 0x0c /* GPIO Mode bits, WORKS 43012bd3c8bSSascha Wildner * ONLY FOR PORT 1 */ 43112bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_GPIO_MODE_IN 0x00 /* GPIO Mode - Input 43212bd3c8bSSascha Wildner * (0b00), WORKS ONLY 43312bd3c8bSSascha Wildner * FOR PORT 1 */ 43412bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_GPIO_MODE_OUT 0x08 /* GPIO Mode - Input 43512bd3c8bSSascha Wildner * (0b10), WORKS ONLY 43612bd3c8bSSascha Wildner * FOR PORT 1 */ 43712bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_RTS_ACTIVE_HIGH 0x10 /* RTS Active is HIGH, 43812bd3c8bSSascha Wildner * default = 0 (low) */ 43912bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_RTS_AUTO 0x20 /* RTS is controlled by 44012bd3c8bSSascha Wildner * state of TX buffer, 44112bd3c8bSSascha Wildner * default = 0 44212bd3c8bSSascha Wildner * (controlled by MCR) */ 44312bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_IRDA 0x40 /* IrDA mode */ 44412bd3c8bSSascha Wildner #define MCS7840_DEV_DCR0_RESERVED2 0x80 /* Unused */ 44512bd3c8bSSascha Wildner 44612bd3c8bSSascha Wildner /* Bits of DCR1 registers, documented in datasheet */ 44712bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_GPIO_CURRENT_MASK 0x03 /* Mask to extract GPIO 44812bd3c8bSSascha Wildner * current value, WORKS 44912bd3c8bSSascha Wildner * ONLY FOR PORT 1 */ 45012bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_GPIO_CURRENT_6MA 0x00 /* GPIO output current 45112bd3c8bSSascha Wildner * 6mA, WORKS ONLY FOR 45212bd3c8bSSascha Wildner * PORT 1 */ 45312bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_GPIO_CURRENT_8MA 0x01 /* GPIO output current 45412bd3c8bSSascha Wildner * 8mA, defauilt, WORKS 45512bd3c8bSSascha Wildner * ONLY FOR PORT 1 */ 45612bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_GPIO_CURRENT_10MA 0x02 /* GPIO output current 45712bd3c8bSSascha Wildner * 10mA, WORKS ONLY FOR 45812bd3c8bSSascha Wildner * PORT 1 */ 45912bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_GPIO_CURRENT_12MA 0x03 /* GPIO output current 46012bd3c8bSSascha Wildner * 12mA, WORKS ONLY FOR 46112bd3c8bSSascha Wildner * PORT 1 */ 46212bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_UART_CURRENT_MASK 0x0c /* Mask to extract UART 46312bd3c8bSSascha Wildner * signals current value */ 46412bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_UART_CURRENT_6MA 0x00 /* UART output current 46512bd3c8bSSascha Wildner * 6mA */ 46612bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_UART_CURRENT_8MA 0x04 /* UART output current 46712bd3c8bSSascha Wildner * 8mA, defauilt */ 46812bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_UART_CURRENT_10MA 0x08 /* UART output current 46912bd3c8bSSascha Wildner * 10mA */ 47012bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_UART_CURRENT_12MA 0x0c /* UART output current 47112bd3c8bSSascha Wildner * 12mA */ 47212bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_WAKEUP_DISABLE 0x10 /* Disable Remote USB 47312bd3c8bSSascha Wildner * Wakeup */ 47412bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_PLLPWRDOWN_DISABLE 0x20 /* Disable PLL power 47512bd3c8bSSascha Wildner * down when not needed, 47612bd3c8bSSascha Wildner * WORKS ONLY FOR PORT 1 */ 47712bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_LONG_INTERRUPT 0x40 /* Enable 13 bytes of 47812bd3c8bSSascha Wildner * interrupt data, with 47912bd3c8bSSascha Wildner * FIFO statistics, 48012bd3c8bSSascha Wildner * WORKS ONLY FOR PORT 1 */ 48112bd3c8bSSascha Wildner #define MCS7840_DEV_DCR1_RESERVED1 0x80 /* Unused */ 48212bd3c8bSSascha Wildner 48312bd3c8bSSascha Wildner /* 48412bd3c8bSSascha Wildner * Bits of DCR2 registers, documented in datasheet 48512bd3c8bSSascha Wildner * Wakeup will work only if DCR0_IRDA = 0 (RS-xxx mode) and 48612bd3c8bSSascha Wildner * DCR1_WAKEUP_DISABLE = 0 (wakeup enabled). 48712bd3c8bSSascha Wildner */ 48812bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_WAKEUP_CTS 0x01 /* Wakeup on CTS change, 48912bd3c8bSSascha Wildner * default = 0 */ 49012bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_WAKEUP_DCD 0x02 /* Wakeup on DCD change, 49112bd3c8bSSascha Wildner * default = 0 */ 49212bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_WAKEUP_RI 0x04 /* Wakeup on RI change, 49312bd3c8bSSascha Wildner * default = 1 */ 49412bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_WAKEUP_DSR 0x08 /* Wakeup on DSR change, 49512bd3c8bSSascha Wildner * default = 0 */ 49612bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_WAKEUP_RXD 0x10 /* Wakeup on RX Data change, 49712bd3c8bSSascha Wildner * default = 0 */ 49812bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_WAKEUP_RESUME 0x20 /* Wakeup issues RESUME 49912bd3c8bSSascha Wildner * signal, DISCONNECT 50012bd3c8bSSascha Wildner * otherwise, default = 1 */ 50112bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_RESERVED1 0x40 /* Unused */ 50212bd3c8bSSascha Wildner #define MCS7840_DEV_DCR2_SHDN_POLARITY 0x80 /* 0: Pin 12 Active Low, 1: 50312bd3c8bSSascha Wildner * Pin 12 Active High, default 50412bd3c8bSSascha Wildner * = 0 */ 50512bd3c8bSSascha Wildner 50612bd3c8bSSascha Wildner /* Interrupt endpoint bytes & bits */ 50712bd3c8bSSascha Wildner #define MCS7840_IEP_FIFO_STATUS_INDEX 5 50812bd3c8bSSascha Wildner /* 50912bd3c8bSSascha Wildner * Thesse can be calculated as "1 << portnumber" for Bulk-out and 51012bd3c8bSSascha Wildner * "1 << (portnumber+1)" for Bulk-in 51112bd3c8bSSascha Wildner */ 51212bd3c8bSSascha Wildner #define MCS7840_IEP_BO_PORT1_HASDATA 0x01 51312bd3c8bSSascha Wildner #define MCS7840_IEP_BI_PORT1_HASDATA 0x02 51412bd3c8bSSascha Wildner #define MCS7840_IEP_BO_PORT2_HASDATA 0x04 51512bd3c8bSSascha Wildner #define MCS7840_IEP_BI_PORT2_HASDATA 0x08 51612bd3c8bSSascha Wildner #define MCS7840_IEP_BO_PORT3_HASDATA 0x10 51712bd3c8bSSascha Wildner #define MCS7840_IEP_BI_PORT3_HASDATA 0x20 51812bd3c8bSSascha Wildner #define MCS7840_IEP_BO_PORT4_HASDATA 0x40 51912bd3c8bSSascha Wildner #define MCS7840_IEP_BI_PORT4_HASDATA 0x80 52012bd3c8bSSascha Wildner 52112bd3c8bSSascha Wildner /* Documented UART registers (fully compatible with 16550 UART) */ 52212bd3c8bSSascha Wildner #define MCS7840_UART_REG_THR 0x00 /* Transmitter Holding 52312bd3c8bSSascha Wildner * Register W/Only */ 52412bd3c8bSSascha Wildner #define MCS7840_UART_REG_RHR 0x00 /* Receiver Holding Register 52512bd3c8bSSascha Wildner * R/Only */ 52612bd3c8bSSascha Wildner #define MCS7840_UART_REG_IER 0x01 /* Interrupt enable register - 52712bd3c8bSSascha Wildner * R/W */ 52812bd3c8bSSascha Wildner #define MCS7840_UART_REG_FCR 0x02 /* FIFO Control register - 52912bd3c8bSSascha Wildner * W/Only */ 53012bd3c8bSSascha Wildner #define MCS7840_UART_REG_ISR 0x02 /* Interrupt Status Registter 53112bd3c8bSSascha Wildner * R/Only */ 53212bd3c8bSSascha Wildner #define MCS7840_UART_REG_LCR 0x03 /* Line control register R/W */ 53312bd3c8bSSascha Wildner #define MCS7840_UART_REG_MCR 0x04 /* Modem control register R/W */ 53412bd3c8bSSascha Wildner #define MCS7840_UART_REG_LSR 0x05 /* Line status register R/Only */ 53512bd3c8bSSascha Wildner #define MCS7840_UART_REG_MSR 0x06 /* Modem status register 53612bd3c8bSSascha Wildner * R/Only */ 53712bd3c8bSSascha Wildner #define MCS7840_UART_REG_SCRATCHPAD 0x07 /* Scratch pad register */ 53812bd3c8bSSascha Wildner 53912bd3c8bSSascha Wildner #define MCS7840_UART_REG_DLL 0x00 /* Low bits of BAUD divider */ 54012bd3c8bSSascha Wildner #define MCS7840_UART_REG_DLM 0x01 /* High bits of BAUD divider */ 54112bd3c8bSSascha Wildner 54212bd3c8bSSascha Wildner /* IER bits */ 54312bd3c8bSSascha Wildner #define MCS7840_UART_IER_RXREADY 0x01 /* RX Ready interrumpt mask */ 54412bd3c8bSSascha Wildner #define MCS7840_UART_IER_TXREADY 0x02 /* TX Ready interrumpt mask */ 54512bd3c8bSSascha Wildner #define MCS7840_UART_IER_RXSTAT 0x04 /* RX Status interrumpt mask */ 54612bd3c8bSSascha Wildner #define MCS7840_UART_IER_MODEM 0x08 /* Modem status change 54712bd3c8bSSascha Wildner * interrumpt mask */ 54812bd3c8bSSascha Wildner #define MCS7840_UART_IER_SLEEP 0x10 /* SLEEP enable */ 54912bd3c8bSSascha Wildner 55012bd3c8bSSascha Wildner /* FCR bits */ 55112bd3c8bSSascha Wildner #define MCS7840_UART_FCR_ENABLE 0x01 /* Enable FIFO */ 55212bd3c8bSSascha Wildner #define MCS7840_UART_FCR_FLUSHRHR 0x02 /* Flush RHR and FIFO */ 55312bd3c8bSSascha Wildner #define MCS7840_UART_FCR_FLUSHTHR 0x04 /* Flush THR and FIFO */ 55412bd3c8bSSascha Wildner #define MCS7840_UART_FCR_RTLMASK 0xa0 /* Mask to select RHR 55512bd3c8bSSascha Wildner * Interrupt Trigger level */ 55612bd3c8bSSascha Wildner #define MCS7840_UART_FCR_RTL_1_1 0x00 /* L1 = 1, L2 = 1 */ 55712bd3c8bSSascha Wildner #define MCS7840_UART_FCR_RTL_1_4 0x40 /* L1 = 1, L2 = 4 */ 55812bd3c8bSSascha Wildner #define MCS7840_UART_FCR_RTL_1_8 0x80 /* L1 = 1, L2 = 8 */ 55912bd3c8bSSascha Wildner #define MCS7840_UART_FCR_RTL_1_14 0xa0 /* L1 = 1, L2 = 14 */ 56012bd3c8bSSascha Wildner 56112bd3c8bSSascha Wildner /* ISR bits */ 56212bd3c8bSSascha Wildner #define MCS7840_UART_ISR_NOPENDING 0x01 /* No interrupt pending */ 56312bd3c8bSSascha Wildner #define MCS7840_UART_ISR_INTMASK 0x3f /* Mask to select interrupt 56412bd3c8bSSascha Wildner * source */ 56512bd3c8bSSascha Wildner #define MCS7840_UART_ISR_RXERR 0x06 /* Recevir error */ 56612bd3c8bSSascha Wildner #define MCS7840_UART_ISR_RXHASDATA 0x04 /* Recevier has data */ 56712bd3c8bSSascha Wildner #define MCS7840_UART_ISR_RXTIMEOUT 0x0c /* Recevier timeout */ 56812bd3c8bSSascha Wildner #define MCS7840_UART_ISR_TXEMPTY 0x02 /* Transmitter empty */ 56912bd3c8bSSascha Wildner #define MCS7840_UART_ISR_MSCHANGE 0x00 /* Modem status change */ 57012bd3c8bSSascha Wildner 57112bd3c8bSSascha Wildner /* LCR bits */ 57212bd3c8bSSascha Wildner #define MCS7840_UART_LCR_DATALENMASK 0x03 /* Mask for data length */ 57312bd3c8bSSascha Wildner #define MCS7840_UART_LCR_DATALEN5 0x00 /* 5 data bits */ 57412bd3c8bSSascha Wildner #define MCS7840_UART_LCR_DATALEN6 0x01 /* 6 data bits */ 57512bd3c8bSSascha Wildner #define MCS7840_UART_LCR_DATALEN7 0x02 /* 7 data bits */ 57612bd3c8bSSascha Wildner #define MCS7840_UART_LCR_DATALEN8 0x03 /* 8 data bits */ 57712bd3c8bSSascha Wildner 57812bd3c8bSSascha Wildner #define MCS7840_UART_LCR_STOPBMASK 0x04 /* Mask for stop bits */ 57912bd3c8bSSascha Wildner #define MCS7840_UART_LCR_STOPB1 0x00 /* 1 stop bit in any case */ 58012bd3c8bSSascha Wildner #define MCS7840_UART_LCR_STOPB2 0x04 /* 1.5-2 stop bits depends on 58112bd3c8bSSascha Wildner * data length */ 58212bd3c8bSSascha Wildner 58312bd3c8bSSascha Wildner #define MCS7840_UART_LCR_PARITYMASK 0x38 /* Mask for all parity data */ 58412bd3c8bSSascha Wildner #define MCS7840_UART_LCR_PARITYON 0x08 /* Parity ON/OFF - ON */ 58512bd3c8bSSascha Wildner #define MCS7840_UART_LCR_PARITYODD 0x00 /* Parity Odd */ 58612bd3c8bSSascha Wildner #define MCS7840_UART_LCR_PARITYEVEN 0x10 /* Parity Even */ 58712bd3c8bSSascha Wildner #define MCS7840_UART_LCR_PARITYODD 0x00 /* Parity Odd */ 58812bd3c8bSSascha Wildner #define MCS7840_UART_LCR_PARITYFORCE 0x20 /* Force parity odd/even */ 58912bd3c8bSSascha Wildner 59012bd3c8bSSascha Wildner #define MCS7840_UART_LCR_BREAK 0x40 /* Send BREAK */ 59112bd3c8bSSascha Wildner #define MCS7840_UART_LCR_DIVISORS 0x80 /* Map DLL/DLM instead of 59212bd3c8bSSascha Wildner * xHR/IER */ 59312bd3c8bSSascha Wildner 59412bd3c8bSSascha Wildner /* LSR bits */ 59512bd3c8bSSascha Wildner #define MCS7840_UART_LSR_RHRAVAIL 0x01 /* Data available for read */ 59612bd3c8bSSascha Wildner #define MCS7840_UART_LSR_RHROVERRUN 0x02 /* Data FIFO/register overflow */ 59712bd3c8bSSascha Wildner #define MCS7840_UART_LSR_PARITYERR 0x04 /* Parity error */ 59812bd3c8bSSascha Wildner #define MCS7840_UART_LSR_FRAMEERR 0x10 /* Framing error */ 599*3b964699Szrj #define MCS7840_UART_LSR_BREAKERR 0x20 /* BREAK signal received */ 60012bd3c8bSSascha Wildner #define MCS7840_UART_LSR_THREMPTY 0x40 /* THR register is empty, 60112bd3c8bSSascha Wildner * ready for transmit */ 60212bd3c8bSSascha Wildner #define MCS7840_UART_LSR_HASERR 0x80 /* Has error in receiver FIFO */ 60312bd3c8bSSascha Wildner 60412bd3c8bSSascha Wildner /* MCR bits */ 60512bd3c8bSSascha Wildner #define MCS7840_UART_MCR_DTR 0x01 /* Force DTR to be active 60612bd3c8bSSascha Wildner * (low) */ 60712bd3c8bSSascha Wildner #define MCS7840_UART_MCR_RTS 0x02 /* Force RTS to be active 60812bd3c8bSSascha Wildner * (low) */ 60912bd3c8bSSascha Wildner #define MCS7840_UART_MCR_IE 0x04 /* Enable interrupts (from 61012bd3c8bSSascha Wildner * code, not documented) */ 61112bd3c8bSSascha Wildner #define MCS7840_UART_MCR_LOOPBACK 0x10 /* Enable local loopback test 61212bd3c8bSSascha Wildner * mode */ 61312bd3c8bSSascha Wildner #define MCS7840_UART_MCR_CTSRTS 0x20 /* Enable CTS/RTS flow control 61412bd3c8bSSascha Wildner * in 550 (FIFO) mode */ 61512bd3c8bSSascha Wildner #define MCS7840_UART_MCR_DTRDSR 0x40 /* Enable DTR/DSR flow control 61612bd3c8bSSascha Wildner * in 550 (FIFO) mode */ 61712bd3c8bSSascha Wildner #define MCS7840_UART_MCR_DCD 0x80 /* Enable DCD flow control in 61812bd3c8bSSascha Wildner * 550 (FIFO) mode */ 61912bd3c8bSSascha Wildner 62012bd3c8bSSascha Wildner /* MSR bits */ 62112bd3c8bSSascha Wildner #define MCS7840_UART_MSR_DELTACTS 0x01 /* CTS was changed since last 62212bd3c8bSSascha Wildner * read */ 62312bd3c8bSSascha Wildner #define MCS7840_UART_MSR_DELTADSR 0x02 /* DSR was changed since last 62412bd3c8bSSascha Wildner * read */ 62512bd3c8bSSascha Wildner #define MCS7840_UART_MSR_DELTARI 0x04 /* RI was changed from low to 62612bd3c8bSSascha Wildner * high since last read */ 62712bd3c8bSSascha Wildner #define MCS7840_UART_MSR_DELTADCD 0x08 /* DCD was changed since last 62812bd3c8bSSascha Wildner * read */ 62912bd3c8bSSascha Wildner #define MCS7840_UART_MSR_NEGCTS 0x10 /* Negated CTS signal */ 63012bd3c8bSSascha Wildner #define MCS7840_UART_MSR_NEGDSR 0x20 /* Negated DSR signal */ 63112bd3c8bSSascha Wildner #define MCS7840_UART_MSR_NEGRI 0x40 /* Negated RI signal */ 63212bd3c8bSSascha Wildner #define MCS7840_UART_MSR_NEGDCD 0x80 /* Negated DCD signal */ 63312bd3c8bSSascha Wildner 63412bd3c8bSSascha Wildner /* SCRATCHPAD bits */ 63512bd3c8bSSascha Wildner #define MCS7840_UART_SCRATCHPAD_RS232 0x00 /* RS-485 disabled */ 63612bd3c8bSSascha Wildner #define MCS7840_UART_SCRATCHPAD_RS485_DTRRX 0x80 /* RS-485 mode, DTR High 63712bd3c8bSSascha Wildner * = RX */ 63812bd3c8bSSascha Wildner #define MCS7840_UART_SCRATCHPAD_RS485_DTRTX 0xc0 /* RS-485 mode, DTR High 63912bd3c8bSSascha Wildner * = TX */ 64012bd3c8bSSascha Wildner 64112bd3c8bSSascha Wildner #define MCS7840_CONFIG_INDEX 0 64212bd3c8bSSascha Wildner #define MCS7840_IFACE_INDEX 0 64312bd3c8bSSascha Wildner 64412bd3c8bSSascha Wildner #endif 645