altos: Add cc115l driver (untested)
[fw/altos] / src / drivers / ao_cc115l.h
diff --git a/src/drivers/ao_cc115l.h b/src/drivers/ao_cc115l.h
new file mode 100644 (file)
index 0000000..34e3f0b
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * Copyright © 2013 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#ifndef _AO_CC115L_H_
+#define _AO_CC115L_H_
+
+#define CC115L_BURST           6
+#define CC115L_READ            7
+
+/* Register space */
+#define CC115L_IOCFG2          0x00    /* GDO2 Output Pin Configuration */
+#define CC115L_IOCFG1          0x01    /* GDO1 Output Pin Configuration */
+#define CC115L_IOCFG0          0x02    /* GDO0 Output Pin Configuration */
+
+#define  CC115L_IOCFG_GPIO1_DS         7
+#define  CC115L_IOCFG_GPIO_INV         6
+
+#define  CC115L_IOCFG_GPIO_CFG         0
+#define  CC115L_IOCFG_GPIO_CFG_TXFIFO_THR      2
+#define  CC115L_IOCFG_GPIO_CFG_TXFIFO_THR_PKT  3
+#define  CC115L_IOCFG_GPIO_CFG_TXFIFO_UNDERFLOW        5
+#define  CC115L_IOCFG_GPIO_CFG_PKT_SYNC_TX     6
+#define  CC115L_IOCFG_GPIO_CFG_PLL_LOCKED      10
+#define  CC115L_IOCFG_GPIO_CFG_SERIAL_CLK      11
+#define  CC115L_IOCFG_GPIO_CFG_SYNC_DATA       12
+#define  CC115L_IOCFG_GPIO_CFG_ASYNC_DATA      13
+#define  CC115L_IOCFG_GPIO_CFG_PA_PD           27
+#define  CC115L_IOCFG_GPIO_CFG_CHIP_RDYn       41
+#define  CC115L_IOCFG_GPIO_CFG_XOSC_STABLE     43
+#define  CC115L_IOCFG_GPIO_CFG_HIGHZ           46
+#define  CC115L_IOCFG_GPIO_CFG_HW_0            47
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_1      48
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_1_5    49
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_2      50
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_3      51
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_4      52
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_6      53
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_8      54
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_12     55
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_16     56
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_24     57
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_32     58
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_48     59
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_64     60
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_96     61
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_128    62
+#define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_192    63
+#define  CC115L_IOCFG_GPIO_CFG_MASK    0x3f
+
+#define CC115L_FIFOTHR                 0x03    /* TX FIFO Thresholds */
+#define  CC115L_FIFOTHR_THR_MASK       0x0f
+#define  CC115L_FIFOTHR_THR_61         0
+#define  CC115L_FIFOTHR_THR_57         1
+#define  CC115L_FIFOTHR_THR_53         2
+#define  CC115L_FIFOTHR_THR_49         3
+#define  CC115L_FIFOTHR_THR_45         4
+#define  CC115L_FIFOTHR_THR_41         5
+#define  CC115L_FIFOTHR_THR_37         6
+#define  CC115L_FIFOTHR_THR_33         7
+#define  CC115L_FIFOTHR_THR_29         8
+#define  CC115L_FIFOTHR_THR_25         9
+#define  CC115L_FIFOTHR_THR_21         10
+#define  CC115L_FIFOTHR_THR_17         11
+#define  CC115L_FIFOTHR_THR_13         12
+#define  CC115L_FIFOTHR_THR_9          13
+#define  CC115L_FIFOTHR_THR_5          14
+#define  CC115L_FIFOTHR_THR_1          15
+
+#define CC115L_SYNC1           0x04    /* Sync Word, High Byte */
+#define CC115L_SYNC0           0x05    /* Sync Word, Low Byte */
+#define CC115L_PKTLEN          0x06    /* Packet Length */
+#define CC115L_PKTCTRL0                0x08    /* Packet Automation Control */
+#define  CC115L_PKTCTRL0_PKT_FORMAT            4
+#define  CC115L_PKTCTRL0_PKT_FORMAT_NORMAL             0
+#define  CC115L_PKTCTRL0_PKT_FORMAT_SYNC_SERIAL                1
+#define  CC115L_PKTCTRL0_PKT_FORMAT_RANDOM             2
+#define  CC115L_PKTCTRL0_PKT_FORMAT_ASYNC_SERIAL       3
+#define  CC115L_PKTCTRL0_PKT_FORMAT_MASK               3
+#define  CC115L_PKTCTRL0_PKT_CRC_EN            2
+#define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG     0
+#define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_FIXED       0
+#define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_VARIABLE    1
+#define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_INFINITE    2
+#define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_MASK                3
+#define CC115L_CHANNR          0x0a    /* Channel Number */
+#define CC115L_FSCTRL0         0x0c    /* Frequency Synthesizer Control */
+#define CC115L_FREQ2           0x0d    /* Frequency Control Word, High Byte */
+#define CC115L_FREQ1           0x0e    /* Frequency Control Word, Middle Byte */
+#define CC115L_FREQ0           0x0f    /* Frequency Control Word, Low Byte */
+#define CC115L_MDMCFG4                 0x10    /* Modem Configuration */
+#define  CC115L_MDMCFG4_DRATE_E                        0
+#define CC115L_MDMCFG3         0x11    /* Modem Configuration */
+#define CC115L_MDMCFG2         0x12    /* Modem Configuration */
+#define  CC115L_MDMCFG2_MOD_FORMAT             4
+#define  CC115L_MDMCFG2_MOD_FORMAT_2FSK                        0
+#define  CC115L_MDMCFG2_MOD_FORMAT_GFSK                        1
+#define  CC115L_MDMCFG2_MOD_FORMAT_OOK                 3
+#define  CC115L_MDMCFG2_MOD_FORMAT_4FSK                        4
+#define  CC115L_MDMCFG2_MOD_FORMAT_MASK                        7
+#define  CC115L_MDMCFG2_MANCHESTER_EN          3
+#define  CC115L_MDMCFG2_SYNC_MODE              0
+#define  CC115L_MDMCFG2_SYNC_MODE_NONE                 0
+#define  CC115L_MDMCFG2_SYNC_MODE_16BITS               1
+#define  CC115L_MDMCFG2_SYNC_MODE_32BITS               3
+#define  CC115L_MDMCFG2_SYNC_MODE_MASK                 3
+#define CC115L_MDMCFG1         0x13    /* Modem Configuration */
+#define  CC115L_MDMCFG1_NUM_PREAMBLE           4
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_2                 0
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_3                 1
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_4                 2
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_6                 3
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_8                 4
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_12                        5
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_16                        6
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_24                        7
+#define  CC115L_MDMCFG1_NUM_PREAMBLE_MASK              7
+#define  CC115L_MDMCFG1_CHANSPC_E              0
+#define CC115L_MDMCFG0         0x14    /* Modem Configuration */
+#define CC115L_DEVIATN         0x15    /* Modem Deviation Setting */
+#define  CC115L_DEVIATN_DEVIATION_E            4
+#define  CC115L_DEVIATN_DEVIATION_E_MASK       7
+#define  CC115L_DEVIATN_DEVIATION_M            0
+#define  CC115L_DEVIATN_DEVIATION_M_MASK       7
+#define CC115L_MCSM1           0x17    /* Main Radio Control State Machine Configuration */
+#define  CC115L_MCSM1_TXOFF_MODE               0
+#define  CC115L_MCSM1_TXOFF_MODE_IDLE                  0
+#define  CC115L_MCSM1_TXOFF_MODE_FSTXON                        1
+#define  CC115L_MCSM1_TXOFF_MODE_TX                    2
+#define  CC115L_MCSM1_TXOFF_MODE_MASK                  3
+#define CC115L_MCSM0           0x18    /* Main Radio Control State Machine Configuration */
+#define  CC115L_MCSM0_FS_AUTOCAL               4
+#define  CC115L_MCSM0_FS_AUTOCAL_NEVER                 0
+#define  CC115L_MCSM0_FS_AUTOCAL_IDLE_TO_TX            1
+#define  CC115L_MCSM0_FS_AUTOCAL_TX_TO_IDLE            2
+#define  CC115L_MCSM0_FS_AUTOCAL_4TH_TX_TO_IDLE                3
+#define  CC115L_MCSM0_FS_AUTOCAL_MASK                  3
+#define  CC115L_MCSM0_PO_TIMEOUT               2
+#define  CC115L_MCSM0_PO_TIMEOUT_1                     0
+#define  CC115L_MCSM0_PO_TIMEOUT_16                    1
+#define  CC115L_MCSM0_PO_TIMEOUT_64                    2
+#define  CC115L_MCSM0_PO_TIMEOUT_256                   3
+#define  CC115L_MCSM0_PO_TIMEOUT_MASK                  3
+#define  CC115L_MCSM0_XOSC_FORCE_ON            0
+#define CC115L_RESERVED_0X20   0x20    /* Use setting from SmartRF Studio */
+#define CC115L_FREND0          0x22    /* Front End TX Configuration */
+#define CC115L_FSCAL3          0x23    /* Frequency Synthesizer Calibration */
+#define CC115L_FSCAL2          0x24    /* Frequency Synthesizer Calibration */
+#define CC115L_FSCAL1          0x25    /* Frequency Synthesizer Calibration */
+#define CC115L_FSCAL0          0x26    /* Frequency Synthesizer Calibration */
+#define CC115L_RESERVED_0X29   0x29    /* Use setting from SmartRF Studio */
+#define CC115L_RESERVED_0X2A    0x2a           /* Use setting from SmartRF Studio */
+#define CC115L_RESERVED_0X2B    0x2b    /* Use setting from SmartRF Studio */
+#define CC115L_TEST2           0x2c    /* Various Test Settings */
+#define CC115L_TEST1           0x2d    /* Various Test Settings */
+#define CC115L_TEST0           0x2e    /* Various Test Settings */
+
+/* Status registers (use BURST bit to select these) */
+#define CC115L_PARTNUM         (0x30|(1<<CC115L_BURST))        /* Part number for CC115L */
+#define CC115L_VERSION         (0x31|(1<<CC115L_BURST))        /* Current version number */
+#define CC115L_MARCSTATE       (0x35|(1<<CC115L_BURST))        /* Control state machine state */
+#define  CC115L_MARCSTATE_MASK         0x1f
+#define  CC115L_MARCSTATE_SLEEP                0x00
+#define  CC115L_MARCSTATE_IDLE         0x01
+#define  CC115L_MARCSTATE_XOFF         0x02
+#define  CC115L_MARCSTATE_VCOON_MC     0x03
+#define  CC115L_MARCSTATE_REGON_MC     0x04
+#define  CC115L_MARCSTATE_MANCAL       0x05
+#define  CC115L_MARCSTATE_VCOON                0x06
+#define  CC115L_MARCSTATE_REGON                0x07
+#define  CC115L_MARCSTATE_STARTCAL     0x08
+#define  CC115L_MARCSTATE_BWBOOST      0x09
+#define  CC115L_MARCSTATE_FS_LOCK      0x0a
+#define  CC115L_MARCSTATE_ENDCAL       0x0c
+#define  CC115L_MARCSTATE_FSTXON       0x12
+#define  CC115L_MARCSTATE_TX           0x13
+#define  CC115L_MARCSTATE_TX_END       0x14
+#define  CC115L_MARCSTATE_TX_UNDERFLOW 0x16
+#define CC115L_PKTSTATUS       (0x38|(1<<CC115L_BURST))        /* Current GDOx status and packet status */
+#define CC115L_TXBYTES         (0x3a|(1<<CC115L_BURST))        /* Underflow and number of bytes in the TX FIFO */
+#define  CC115L_TXBYTES_TXFIFO_UNDERFLOW       7
+#define  CC115L_TXBYTES_NUM_TX_BYTES           0
+#define  CC115L_TXBYTES_NUM_TX_BYTES_MASK              0x7f
+
+/* Command strobes (no BURST bit for these) */
+#define CC115L_SRES            0x30
+#define CC115L_SFSTXON         0x31
+#define CC115L_SXOFF           0x32
+#define CC115L_SCAL            0x33
+#define CC115L_STX             0x35
+#define CC115L_SIDLE           0x36
+#define CC115L_SPWD            0x39
+#define CC115L_SFTX            0x3b
+#define CC115L_SNOP            0x3d
+
+#define CC115L_FIFO            0x3f
+
+#define CC115L_FIFO_SIZE       64
+
+/* Status byte */
+#define CC115L_STATUS_CHIP_RDY 7
+#define CC115L_STATUS_STATE    4
+#define  CC115L_STATUS_STATE_IDLE              0
+#define  CC115L_STATUS_STATE_TX                        2
+#define  CC115L_STATUS_STATE_FSTXON            3
+#define  CC115L_STATUS_STATE_CALIBRATE         4
+#define  CC115L_STATUS_STATE_SETTLING          5
+#define  CC115L_STATUS_STATE_TX_FIFO_UNDERFLOW 7
+#define  CC115L_STATUS_STATE_MASK              7
+
+#define CC115L_STATUS_FIFO_BYTES_AVAILABLE     0
+#endif /* _AO_CC115L_H_ */