11802d0beSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2c869f77dSJakub Kicinski /*
3c869f77dSJakub Kicinski  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
4c869f77dSJakub Kicinski  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
5c869f77dSJakub Kicinski  */
6c869f77dSJakub Kicinski 
7c869f77dSJakub Kicinski #ifndef __MT7601U_MCU_H
8c869f77dSJakub Kicinski #define __MT7601U_MCU_H
9c869f77dSJakub Kicinski 
10c869f77dSJakub Kicinski struct mt7601u_dev;
11c869f77dSJakub Kicinski 
12c869f77dSJakub Kicinski /* Register definitions */
13c869f77dSJakub Kicinski #define MT_MCU_RESET_CTL		0x070C
14c869f77dSJakub Kicinski #define MT_MCU_INT_LEVEL		0x0718
15c869f77dSJakub Kicinski #define MT_MCU_COM_REG0			0x0730
16c869f77dSJakub Kicinski #define MT_MCU_COM_REG1			0x0734
17c869f77dSJakub Kicinski #define MT_MCU_COM_REG2			0x0738
18c869f77dSJakub Kicinski #define MT_MCU_COM_REG3			0x073C
19c869f77dSJakub Kicinski 
20c869f77dSJakub Kicinski #define MT_MCU_IVB_SIZE			0x40
21c869f77dSJakub Kicinski #define MT_MCU_DLM_OFFSET		0x80000
22c869f77dSJakub Kicinski 
23c869f77dSJakub Kicinski #define MT_MCU_MEMMAP_WLAN		0x00410000
24c869f77dSJakub Kicinski #define MT_MCU_MEMMAP_BBP		0x40000000
25c869f77dSJakub Kicinski #define MT_MCU_MEMMAP_RF		0x80000000
26c869f77dSJakub Kicinski 
27c869f77dSJakub Kicinski #define INBAND_PACKET_MAX_LEN		192
28c869f77dSJakub Kicinski 
29c869f77dSJakub Kicinski enum mcu_cmd {
30c869f77dSJakub Kicinski 	CMD_FUN_SET_OP = 1,
31c869f77dSJakub Kicinski 	CMD_LOAD_CR = 2,
32c869f77dSJakub Kicinski 	CMD_INIT_GAIN_OP = 3,
33c869f77dSJakub Kicinski 	CMD_DYNC_VGA_OP = 6,
34c869f77dSJakub Kicinski 	CMD_TDLS_CH_SW = 7,
35c869f77dSJakub Kicinski 	CMD_BURST_WRITE = 8,
36c869f77dSJakub Kicinski 	CMD_READ_MODIFY_WRITE = 9,
37c869f77dSJakub Kicinski 	CMD_RANDOM_READ = 10,
38c869f77dSJakub Kicinski 	CMD_BURST_READ = 11,
39c869f77dSJakub Kicinski 	CMD_RANDOM_WRITE = 12,
40c869f77dSJakub Kicinski 	CMD_LED_MODE_OP = 16,
41c869f77dSJakub Kicinski 	CMD_POWER_SAVING_OP = 20,
42c869f77dSJakub Kicinski 	CMD_WOW_CONFIG = 21,
43c869f77dSJakub Kicinski 	CMD_WOW_QUERY = 22,
44c869f77dSJakub Kicinski 	CMD_WOW_FEATURE = 24,
45c869f77dSJakub Kicinski 	CMD_CARRIER_DETECT_OP = 28,
46c869f77dSJakub Kicinski 	CMD_RADOR_DETECT_OP = 29,
47c869f77dSJakub Kicinski 	CMD_SWITCH_CHANNEL_OP = 30,
48c869f77dSJakub Kicinski 	CMD_CALIBRATION_OP = 31,
49c869f77dSJakub Kicinski 	CMD_BEACON_OP = 32,
50c869f77dSJakub Kicinski 	CMD_ANTENNA_OP = 33,
51c869f77dSJakub Kicinski };
52c869f77dSJakub Kicinski 
53c869f77dSJakub Kicinski enum mcu_function {
54c869f77dSJakub Kicinski 	Q_SELECT = 1,
55c869f77dSJakub Kicinski 	ATOMIC_TSSI_SETTING = 5,
56c869f77dSJakub Kicinski };
57c869f77dSJakub Kicinski 
58c869f77dSJakub Kicinski enum mcu_power_mode {
59c869f77dSJakub Kicinski 	RADIO_OFF = 0x30,
60c869f77dSJakub Kicinski 	RADIO_ON = 0x31,
61c869f77dSJakub Kicinski 	RADIO_OFF_AUTO_WAKEUP = 0x32,
62c869f77dSJakub Kicinski 	RADIO_OFF_ADVANCE = 0x33,
63c869f77dSJakub Kicinski 	RADIO_ON_ADVANCE = 0x34,
64c869f77dSJakub Kicinski };
65c869f77dSJakub Kicinski 
66c869f77dSJakub Kicinski enum mcu_calibrate {
67c869f77dSJakub Kicinski 	MCU_CAL_R = 1,
68c869f77dSJakub Kicinski 	MCU_CAL_DCOC,
69c869f77dSJakub Kicinski 	MCU_CAL_LC,
70c869f77dSJakub Kicinski 	MCU_CAL_LOFT,
71c869f77dSJakub Kicinski 	MCU_CAL_TXIQ,
72c869f77dSJakub Kicinski 	MCU_CAL_BW,
73c869f77dSJakub Kicinski 	MCU_CAL_DPD,
74c869f77dSJakub Kicinski 	MCU_CAL_RXIQ,
75c869f77dSJakub Kicinski 	MCU_CAL_TXDCOC,
76c869f77dSJakub Kicinski };
77c869f77dSJakub Kicinski 
78c869f77dSJakub Kicinski int mt7601u_mcu_init(struct mt7601u_dev *dev);
79c869f77dSJakub Kicinski int mt7601u_mcu_cmd_init(struct mt7601u_dev *dev);
80c869f77dSJakub Kicinski void mt7601u_mcu_cmd_deinit(struct mt7601u_dev *dev);
81c869f77dSJakub Kicinski 
82c869f77dSJakub Kicinski int
83c869f77dSJakub Kicinski mt7601u_mcu_calibrate(struct mt7601u_dev *dev, enum mcu_calibrate cal, u32 val);
84c869f77dSJakub Kicinski int mt7601u_mcu_tssi_read_kick(struct mt7601u_dev *dev, int use_hvga);
85c869f77dSJakub Kicinski 
86c869f77dSJakub Kicinski #endif
87