The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/rtwn/rtl8812a/r12a_priv.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24  * SUCH DAMAGE.
   25  *
   26  * $FreeBSD$
   27  */
   28 
   29 #ifndef R12A_PRIV_H
   30 #define R12A_PRIV_H
   31 
   32 /*
   33  * MAC initialization values.
   34  */
   35 #define RTL8812AU_MAC_PROG_START \
   36         { 0x010, 0x0c },
   37 
   38 #define RTL8812AU_MAC_PROG_END \
   39         { 0x025, 0x0f }, { 0x072, 0x00 }, { 0x420, 0x80 }, { 0x428, 0x0a }, \
   40         { 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x00 }, { 0x432, 0x00 }, \
   41         { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, { 0x436, 0x07 }, \
   42         { 0x437, 0x08 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, { 0x43e, 0x07 }, \
   43         { 0x43f, 0x08 }, { 0x440, 0x5d }, { 0x441, 0x01 }, { 0x442, 0x00 }, \
   44         { 0x444, 0x10 }, { 0x445, 0x00 }, { 0x446, 0x00 }, { 0x447, 0x00 }, \
   45         { 0x448, 0x00 }, { 0x449, 0xf0 }, { 0x44a, 0x0f }, { 0x44b, 0x3e }, \
   46         { 0x44c, 0x10 }, { 0x44d, 0x00 }, { 0x44e, 0x00 }, { 0x44f, 0x00 }, \
   47         { 0x450, 0x00 }, { 0x451, 0xf0 }, { 0x452, 0x0f }, { 0x453, 0x00 }, \
   48         { 0x45b, 0x80 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x4c8, 0xff }, \
   49         { 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff }, { 0x4ce, 0x01 }, \
   50         { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f }, { 0x503, 0x00 }, \
   51         { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e }, { 0x507, 0x00 }, \
   52         { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e }, { 0x50b, 0x00 }, \
   53         { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 }, { 0x50f, 0x00 }, \
   54         { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a }, { 0x525, 0x4f }, \
   55         { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55c, 0x50 }, \
   56         { 0x55d, 0xff }, { 0x604, 0x09 }, { 0x605, 0x30 }, { 0x607, 0x03 }, \
   57         { 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff }, { 0x621, 0xff }, \
   58         { 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff }, { 0x625, 0xff }, \
   59         { 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x50 }, { 0x63c, 0x0a }, \
   60         { 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e }, { 0x640, 0x80 }, \
   61         { 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 }, { 0x66e, 0x05 }, \
   62         { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 }, { 0x703, 0x87 }, \
   63         { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 }, { 0x70b, 0x87 }, \
   64         { 0x718, 0x40 }
   65 
   66 static const struct rtwn_mac_prog rtl8812au_mac_no_ext_pa_lna[] = {
   67         RTL8812AU_MAC_PROG_START
   68         { 0x11, 0x66 },
   69         RTL8812AU_MAC_PROG_END
   70 }, rtl8812au_mac[] = {
   71         RTL8812AU_MAC_PROG_START
   72         { 0x11, 0x5a },
   73         RTL8812AU_MAC_PROG_END
   74 };
   75 
   76 /*
   77  * Baseband initialization values.
   78  */
   79 #define R12A_COND_GPA           0x01
   80 #define R12A_COND_APA           0x02
   81 #define R12A_COND_GLNA          0x04
   82 #define R12A_COND_ALNA          0x08
   83 #define R12A_COND_TYPE(t)       ((t) << 4)
   84 
   85 static const uint16_t rtl8812au_bb_regs0[] = {
   86         0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x820, 0x824,
   87         0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844, 0x848,
   88         0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868, 0x86c,
   89         0x870, 0x874, 0x878, 0x87c, 0x8a0, 0x8a4, 0x8a8, 0x8ac, 0x8b0,
   90         0x8b4, 0x8b8, 0x8bc, 0x8c0, 0x8c4, 0x8c8, 0x8cc, 0x8d0, 0x8dc,
   91         0x8d4, 0x8d8, 0x8f8, 0x8fc, 0x900, 0x90c, 0x910, 0x914, 0x918,
   92         0x91c, 0x920, 0x924, 0x928, 0x92c, 0x930, 0x934, 0x960, 0x964,
   93         0x968, 0x96c, 0x970, 0x978, 0x97c, 0x980, 0x984, 0x988, 0x990,
   94         0x994, 0x998, 0x99c, 0x9a0, 0x9a4, 0x9a8, 0x9ac, 0x9b0, 0x9b4,
   95         0x9b8, 0x9bc, 0x9d0, 0x9d4, 0x9d8, 0x9dc, 0x9e4, 0x9e8, 0xa00,
   96         0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24,
   97         0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xa84, 0xb00,
   98         0xb04, 0xb08, 0xb0c, 0xb10, 0xb14, 0xb18, 0xb1c, 0xb20, 0xb24,
   99         0xb28, 0xb2c, 0xb30, 0xb34, 0xb38, 0xb3c, 0xb40, 0xb44, 0xb48,
  100         0xb4c, 0xb50, 0xb54, 0xb58, 0xb5c, 0xc00, 0xc04, 0xc08, 0xc0c,
  101         0xc10, 0xc14, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34,
  102         0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58,
  103         0xc5c, 0xc60, 0xc64
  104 }, rtl8812au_bb_regs1[] = {
  105         0xc68
  106 }, rtl8812au_bb_regs2[] = {
  107         0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc94, 0xc98,
  108         0xc9c, 0xca0, 0xca4, 0xca8, 0xcb0, 0xcb4, 0xcb8, 0xe00, 0xe04,
  109         0xe08, 0xe0c, 0xe10, 0xe14, 0xe1c, 0xe20, 0xe24, 0xe28, 0xe2c,
  110         0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50,
  111         0xe54, 0xe58, 0xe5c, 0xe60, 0xe64, 0xe68, 0xe6c, 0xe70, 0xe74,
  112         0xe78, 0xe7c, 0xe80, 0xe84, 0xe94, 0xe98, 0xe9c, 0xea0, 0xea4,
  113         0xea8, 0xeb0, 0xeb4, 0xeb8
  114 };
  115 
  116 static const uint32_t rtl8812au_bb_vals0[] = {
  117         0x8020d010, 0x080112e0, 0x0e028233, 0x12131113, 0x20101263,
  118         0x020c3d10, 0x03a00385, 0x00000000, 0x00030fe0, 0x00000000,
  119         0x002083dd, 0x2eaaeeb8, 0x0037a706, 0x06c89b44, 0x0000095b,
  120         0xc0000001, 0x40003cde, 0x6210ff8b, 0x6cfdffb8, 0x28874706,
  121         0x0001520c, 0x8060e000, 0x74210168, 0x6929c321, 0x79727432,
  122         0x8ca7a314, 0x338c2878, 0x03333333, 0x31602c2e, 0x00003152,
  123         0x000fc000, 0x00000013, 0x7f7f7f7f, 0xa202033e, 0x0ff0fa0a,
  124         0x00000600, 0x000fc080, 0x6c0057ff, 0x4ca520a3, 0x27f00020,
  125         0x00000000, 0x00012d69, 0x08248492, 0x0000b800, 0x00000000,
  126         0x940008a0, 0x290b5612, 0x400002c0, 0x00000000, 0x00000701,
  127         0x00000000, 0x0000fc00, 0x00000404, 0x1c1028c0, 0x64b11a1c,
  128         0xe0767233, 0x055aa500, 0x00000004, 0xfffe0000, 0xfffffffe,
  129         0x001fffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  130         0x801fffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  131         0x00000000, 0x27100000, 0xffff0100, 0xffffff5c, 0xffffffff,
  132         0x000000ff, 0x00080080, 0x00000000, 0x00000000, 0x81081008,
  133         0x00000000, 0x01081008, 0x01081008, 0x00000000, 0x00000000,
  134         0x00000000, 0x00000000, 0x00000003, 0x000002d5, 0x00d047c8,
  135         0x01ff000c, 0x8c838300, 0x2e7f000f, 0x9500bb78, 0x11144028,
  136         0x00881117, 0x89140f00, 0x1a1b0000, 0x090e1217, 0x00000305,
  137         0x00900000, 0x101fff00, 0x00000008, 0x00000900, 0x225b0606,
  138         0x218075b2, 0x001f8c80, 0x03100000, 0x0000b000, 0xae0201eb,
  139         0x01003207, 0x00009807, 0x01000000, 0x00000002, 0x00000002,
  140         0x0000001f, 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
  141         0x13121110, 0x17161514, 0x0000003a, 0x00000000, 0x00000000,
  142         0x13000032, 0x48080000, 0x00000000, 0x00000000, 0x00000000,
  143         0x00000000, 0x00000007, 0x00042020, 0x80410231, 0x00000000,
  144         0x00000100, 0x01000000, 0x40000003, 0x12121212, 0x12121212,
  145         0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
  146         0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
  147         0x00000020, 0x0008121c, 0x30000c1c, 0x00000058, 0x34344443,
  148         0x07003333
  149 }, rtl8812au_bb_vals1_ext_pa_lna[] = {
  150         0x59791979
  151 }, rtl8812au_bb_vals1[] = {
  152         0x59799979
  153 }, rtl8812au_bb_vals2[] = {
  154         0x59795979, 0x19795979, 0x19795979, 0x19791979, 0x19791979,
  155         0x19791979, 0x19791979, 0x0100005c, 0x00000000, 0x00000000,
  156         0x00000029, 0x08040201, 0x80402010, 0x77547777, 0x00000077,
  157         0x00508242, 0x00000007, 0x00042020, 0x80410231, 0x00000000,
  158         0x00000100, 0x01000000, 0x40000003, 0x12121212, 0x12121212,
  159         0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
  160         0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
  161         0x00000020, 0x0008121c, 0x30000c1c, 0x00000058, 0x34344443,
  162         0x07003333, 0x59791979, 0x59795979, 0x19795979, 0x19795979,
  163         0x19791979, 0x19791979, 0x19791979, 0x19791979, 0x0100005c,
  164         0x00000000, 0x00000000, 0x00000029, 0x08040201, 0x80402010,
  165         0x77547777, 0x00000077, 0x00508242
  166 };
  167 
  168 static const struct rtwn_bb_prog rtl8812au_bb[] = {
  169         {
  170                 nitems(rtl8812au_bb_regs0),
  171                 rtl8812au_bb_regs0,
  172                 rtl8812au_bb_vals0,
  173                 { 0 },
  174                 NULL
  175         },
  176         /*
  177          * Devices with:
  178          * * External 2GHz PA, type 0;
  179          * * External 5GHz PA, type 0 or 5;
  180          * * External 2GHz LNA, type 0 or 5;
  181          * * External 5GHz LNA, type 0;
  182          */
  183         {
  184                 nitems(rtl8812au_bb_regs1),
  185                 rtl8812au_bb_regs1,
  186                 rtl8812au_bb_vals1_ext_pa_lna,
  187                 {
  188                         R12A_COND_GPA | R12A_COND_GLNA |
  189                         R12A_COND_APA | R12A_COND_ALNA |
  190                         R12A_COND_TYPE(0x0),
  191                         R12A_COND_APA | R12A_COND_GLNA |
  192                         R12A_COND_TYPE(0x5), 0
  193                 },
  194                 /*
  195                  * Others.
  196                  */
  197                 &(const struct rtwn_bb_prog){
  198                         nitems(rtl8812au_bb_regs1),
  199                         rtl8812au_bb_regs1,
  200                         rtl8812au_bb_vals1,
  201                         { 0 },
  202                         NULL
  203                 }
  204         },
  205         {
  206                 nitems(rtl8812au_bb_regs2),
  207                 rtl8812au_bb_regs2,
  208                 rtl8812au_bb_vals2,
  209                 { 0 },
  210                 NULL
  211         }
  212 };
  213 
  214 static const uint32_t rtl8812au_agc_vals0_lna_g0[] = {
  215         0xfc000001, 0xfb020001, 0xfa040001, 0xf9060001, 0xf8080001,
  216         0xf70a0001, 0xf60c0001, 0xf50e0001, 0xf4100001, 0xf3120001,
  217         0xf2140001, 0xf1160001, 0xf0180001, 0xef1a0001, 0xee1c0001,
  218         0xed1e0001, 0xec200001, 0xeb220001, 0xea240001, 0xcd260001,
  219         0xcc280001, 0xcb2a0001, 0xca2c0001, 0xc92e0001, 0xc8300001,
  220         0xa6320001, 0xa5340001, 0xa4360001, 0xa3380001, 0xa23a0001,
  221         0x883c0001, 0x873e0001, 0x86400001, 0x85420001, 0x84440001,
  222         0x83460001, 0x82480001, 0x814a0001, 0x484c0001, 0x474e0001,
  223         0x46500001, 0x45520001, 0x44540001, 0x43560001, 0x42580001,
  224         0x415a0001, 0x255c0001, 0x245e0001, 0x23600001, 0x22620001,
  225         0x21640001, 0x21660001, 0x21680001, 0x216a0001, 0x216c0001,
  226         0x216e0001, 0x21700001, 0x21720001, 0x21740001, 0x21760001,
  227         0x21780001, 0x217a0001, 0x217c0001, 0x217e0001
  228 }, rtl8812au_agc_vals0_lna_g5[] = {
  229         0xf9000001, 0xf8020001, 0xf7040001, 0xf6060001, 0xf5080001,
  230         0xf40a0001, 0xf30c0001, 0xf20e0001, 0xf1100001, 0xf0120001,
  231         0xef140001, 0xee160001, 0xed180001, 0xec1a0001, 0xeb1c0001,
  232         0xea1e0001, 0xcd200001, 0xcc220001, 0xcb240001, 0xca260001,
  233         0xc9280001, 0xc82a0001, 0xc72c0001, 0xc62e0001, 0xa5300001,
  234         0xa4320001, 0xa3340001, 0xa2360001, 0x88380001, 0x873a0001,
  235         0x863c0001, 0x853e0001, 0x84400001, 0x83420001, 0x82440001,
  236         0x81460001, 0x48480001, 0x474a0001, 0x464c0001, 0x454e0001,
  237         0x44500001, 0x43520001, 0x42540001, 0x41560001, 0x25580001,
  238         0x245a0001, 0x235c0001, 0x225e0001, 0x21600001, 0x21620001,
  239         0x21640001, 0x21660001, 0x21680001, 0x216a0001, 0x236c0001,
  240         0x226e0001, 0x21700001, 0x21720001, 0x21740001, 0x21760001,
  241         0x21780001, 0x217a0001, 0x217c0001, 0x217e0001
  242 }, rtl8812au_agc_vals0[] = {
  243         0xff000001, 0xff020001, 0xff040001, 0xff060001, 0xff080001,
  244         0xfe0a0001, 0xfd0c0001, 0xfc0e0001, 0xfb100001, 0xfa120001,
  245         0xf9140001, 0xf8160001, 0xf7180001, 0xf61a0001, 0xf51c0001,
  246         0xf41e0001, 0xf3200001, 0xf2220001, 0xf1240001, 0xf0260001,
  247         0xef280001, 0xee2a0001, 0xed2c0001, 0xec2e0001, 0xeb300001,
  248         0xea320001, 0xe9340001, 0xe8360001, 0xe7380001, 0xe63a0001,
  249         0xe53c0001, 0xc73e0001, 0xc6400001, 0xc5420001, 0xc4440001,
  250         0xc3460001, 0xc2480001, 0xc14a0001, 0xa74c0001, 0xa64e0001,
  251         0xa5500001, 0xa4520001, 0xa3540001, 0xa2560001, 0xa1580001,
  252         0x675a0001, 0x665c0001, 0x655e0001, 0x64600001, 0x63620001,
  253         0x48640001, 0x47660001, 0x46680001, 0x456a0001, 0x446c0001,
  254         0x436e0001, 0x42700001, 0x41720001, 0x41740001, 0x41760001,
  255         0x41780001, 0x417a0001, 0x417c0001, 0x417e0001
  256 }, rtl8812au_agc_vals1_lna_a0[] = {
  257         0xfc800001, 0xfb820001, 0xfa840001, 0xf9860001, 0xf8880001,
  258         0xf78a0001, 0xf68c0001, 0xf58e0001, 0xf4900001, 0xf3920001,
  259         0xf2940001, 0xf1960001, 0xf0980001, 0xef9a0001, 0xee9c0001,
  260         0xed9e0001, 0xeca00001, 0xeba20001, 0xeaa40001, 0xe9a60001,
  261         0xe8a80001, 0xe7aa0001, 0xe6ac0001, 0xe5ae0001, 0xe4b00001,
  262         0xe3b20001, 0xa8b40001, 0xa7b60001, 0xa6b80001, 0xa5ba0001,
  263         0xa4bc0001, 0xa3be0001, 0xa2c00001, 0xa1c20001, 0x68c40001,
  264         0x67c60001, 0x66c80001, 0x65ca0001, 0x64cc0001, 0x47ce0001,
  265         0x46d00001, 0x45d20001, 0x44d40001, 0x43d60001, 0x42d80001,
  266         0x08da0001, 0x07dc0001, 0x06de0001, 0x05e00001, 0x04e20001,
  267         0x03e40001, 0x02e60001, 0x01e80001, 0x01ea0001, 0x01ec0001,
  268         0x01ee0001, 0x01f00001, 0x01f20001, 0x01f40001, 0x01f60001,
  269         0x01f80001, 0x01fa0001, 0x01fc0001, 0x01fe0001
  270 }, rtl8812au_agc_vals1[] = {
  271         0xff800001, 0xff820001, 0xff840001, 0xfe860001, 0xfd880001,
  272         0xfc8a0001, 0xfb8c0001, 0xfa8e0001, 0xf9900001, 0xf8920001,
  273         0xf7940001, 0xf6960001, 0xf5980001, 0xf49a0001, 0xf39c0001,
  274         0xf29e0001, 0xf1a00001, 0xf0a20001, 0xefa40001, 0xeea60001,
  275         0xeda80001, 0xecaa0001, 0xebac0001, 0xeaae0001, 0xe9b00001,
  276         0xe8b20001, 0xe7b40001, 0xe6b60001, 0xe5b80001, 0xe4ba0001,
  277         0xe3bc0001, 0xa8be0001, 0xa7c00001, 0xa6c20001, 0xa5c40001,
  278         0xa4c60001, 0xa3c80001, 0xa2ca0001, 0xa1cc0001, 0x68ce0001,
  279         0x67d00001, 0x66d20001, 0x65d40001, 0x64d60001, 0x47d80001,
  280         0x46da0001, 0x45dc0001, 0x44de0001, 0x43e00001, 0x42e20001,
  281         0x08e40001, 0x07e60001, 0x06e80001, 0x05ea0001, 0x04ec0001,
  282         0x03ee0001, 0x02f00001, 0x01f20001, 0x01f40001, 0x01f60001,
  283         0x01f80001, 0x01fa0001, 0x01fc0001, 0x01fe0001
  284 };
  285 
  286 static const struct rtwn_agc_prog rtl8812au_agc[] = {
  287         /*
  288          * External 2GHz LNA (type 0).
  289          */
  290         {
  291                 nitems(rtl8812au_agc_vals0_lna_g0),
  292                 rtl8812au_agc_vals0_lna_g0,
  293                 { R12A_COND_GLNA | R12A_COND_TYPE(0x0), 0 },
  294                 /*
  295                  * External 2GHz LNA (type 5).
  296                  */
  297                 &(const struct rtwn_agc_prog){
  298                         nitems(rtl8812au_agc_vals0_lna_g5),
  299                         rtl8812au_agc_vals0_lna_g5,
  300                         { R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0 },
  301                         /*
  302                          * Others.
  303                          */
  304                         &(const struct rtwn_agc_prog){
  305                                 nitems(rtl8812au_agc_vals0),
  306                                 rtl8812au_agc_vals0,
  307                                 { 0 },
  308                                 NULL
  309                         }
  310                 }
  311         },
  312         /*
  313          * External 5GHz LNA (type 0).
  314          */
  315         {
  316                 nitems(rtl8812au_agc_vals1_lna_a0),
  317                 rtl8812au_agc_vals1_lna_a0,
  318                 { R12A_COND_ALNA | R12A_COND_TYPE(0x0), 0 },
  319                 /*
  320                  * Others.
  321                  */
  322                 &(const struct rtwn_agc_prog){
  323                         nitems(rtl8812au_agc_vals1),
  324                         rtl8812au_agc_vals1,
  325                         { 0 },
  326                         NULL
  327                 }
  328         }
  329 };
  330 
  331 /*
  332  * RF initialization values.
  333  */
  334 static const uint8_t rtl8812au_rf0_regs0[] = {
  335         0x00, 0x18, 0x56, 0x66, 0x1e, 0x89
  336 }, rtl8812au_rf0_regs1[] = {
  337         0x86
  338 }, rtl8812au_rf0_regs2[] = {
  339         0x8b
  340 }, rtl8812au_rf0_regs3[] = {
  341         0xb1, 0xb3, 0xb4, 0xba, 0x18, 0xef
  342 }, rtl8812au_rf0_regs4[] = {
  343         0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b
  344 }, rtl8812au_rf0_regs5[] = {
  345         0xef, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
  346         0x34
  347 }, rtl8812au_rf0_regs6[] = {
  348         0xef, 0xef, 0xdf, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xef,
  349         0x51, 0x52, 0x53, 0x54, 0xef, 0x08, 0x18, 0xef, 0x3a, 0x3b, 0x3c,
  350         0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b,
  351         0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a,
  352         0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c,
  353         0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b,
  354         0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a,
  355         0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c,
  356         0x3a, 0x3b, 0x3c, 0xef
  357 }, rtl8812au_rf0_regs7[] = {
  358         0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
  359         0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
  360         0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34
  361 }, rtl8812au_rf0_regs8[] = {
  362         0xef, 0x18, 0xef, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
  363         0x35, 0xef, 0x18, 0xef, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
  364         0x36, 0x36, 0x36, 0x36, 0x36, 0xef, 0xef, 0x3c, 0x3c, 0x3c,
  365 }, rtl8812au_rf0_regs9[] = {
  366         0xef, 0x18, 0xef, 0xdf, 0x1f
  367 }, rtl8812au_rf0_regs10[] = {
  368         0x61, 0x62, 0x63, 0x64, 0x65
  369 }, rtl8812au_rf0_regs11[] = {
  370         0x08, 0x1c, 0xb4, 0x18, 0xfe, 0xfe, 0xfe, 0xfe, 0xb4, 0x18
  371 }, rtl8812au_rf1_regs0[] = {
  372         0x56, 0x66, 0x89
  373 }, rtl8812au_rf1_regs3[] = {
  374         0xb1, 0xb3, 0xb4, 0xba, 0x18, 0xef
  375 };
  376 
  377 static const uint32_t rtl8812au_rf0_vals0[] = {
  378         0x10000, 0x1712a, 0x51cf2, 0x40000, 0x80000, 0x00080
  379 }, rtl8812au_rf0_vals1_lna_g0_g5[] = {
  380         0x14b3a
  381 }, rtl8812au_rf0_vals1[] = {
  382         0x14b38
  383 }, rtl8812au_rf0_vals2_lna_a0[] = {
  384         0x80180
  385 }, rtl8812au_rf0_vals2[] = {
  386         0x87180
  387 }, rtl8812au_rf0_vals3[] = {
  388         0x1fc1a, 0xf0810, 0x1a78d, 0x86180, 0x00006, 0x02000
  389 }, rtl8812au_rf0_vals4_lna_g0_g5[] = {
  390         0x3f218, 0x30a58, 0x2fa58, 0x22590, 0x1fa50, 0x10248, 0x08240
  391 }, rtl8812au_rf0_vals4[] = {
  392         0x38a58, 0x37a58, 0x2a590, 0x27a50, 0x18248, 0x10240, 0x08240
  393 }, rtl8812au_rf0_vals5_pa_g0[] = {
  394         0x00100, 0x0a4ee, 0x09076, 0x08073, 0x07070, 0x0606d, 0x0506a,
  395         0x04049, 0x03046, 0x02028, 0x01025, 0x00022
  396 }, rtl8812au_rf0_vals5[] = {
  397         0x00100, 0x0adf4, 0x09df1, 0x08dee, 0x07deb, 0x06de8, 0x05de5,
  398         0x04de2, 0x03ce6, 0x024e7, 0x014e4, 0x004e1
  399 }, rtl8812au_rf0_vals6[] = {
  400         0x00000, 0x020a2, 0x00080, 0x00192, 0x08192, 0x10192, 0x00024,
  401         0x08024, 0x10024, 0x18024, 0x00000, 0x00c21, 0x006d9, 0xfc649,
  402         0x0017e, 0x00002, 0x08400, 0x1712a, 0x01000, 0x00080, 0x3a02c,
  403         0x04000, 0x00400, 0x3202c, 0x10000, 0x000a0, 0x2b064, 0x04000,
  404         0x000d8, 0x23070, 0x04000, 0x00468, 0x1b870, 0x10000, 0x00098,
  405         0x12085, 0xe4000, 0x00418, 0x0a080, 0xf0000, 0x00418, 0x02080,
  406         0x10000, 0x00080, 0x7a02c, 0x04000, 0x00400, 0x7202c, 0x10000,
  407         0x000a0, 0x6b064, 0x04000, 0x000d8, 0x63070, 0x04000, 0x00468,
  408         0x5b870, 0x10000, 0x00098, 0x52085, 0xe4000, 0x00418, 0x4a080,
  409         0xf0000, 0x00418, 0x42080, 0x10000, 0x00080, 0xba02c, 0x04000,
  410         0x00400, 0xb202c, 0x10000, 0x000a0, 0xab064, 0x04000, 0x000d8,
  411         0xa3070, 0x04000, 0x00468, 0x9b870, 0x10000, 0x00098, 0x92085,
  412         0xe4000, 0x00418, 0x8a080, 0xf0000, 0x00418, 0x82080, 0x10000,
  413         0x01100
  414 }, rtl8812au_rf0_vals7_pa_a0[] = {
  415         0x4a0b2, 0x490af, 0x48070, 0x4706d, 0x46050, 0x4504d, 0x4404a,
  416         0x43047, 0x4200a, 0x41007, 0x40004, 0x2a0b2, 0x290af, 0x28070,
  417         0x2706d, 0x26050, 0x2504d, 0x2404a, 0x23047, 0x2200a, 0x21007,
  418         0x20004, 0x0a0b2, 0x090af, 0x08070, 0x0706d, 0x06050, 0x0504d,
  419         0x0404a, 0x03047, 0x0200a, 0x01007, 0x00004
  420 }, rtl8812au_rf0_vals7_pa_a5[] = {
  421         0x4a0b2, 0x490af, 0x48070, 0x4706d, 0x4604d, 0x4504a, 0x44047,
  422         0x43044, 0x42007, 0x41004, 0x40001, 0x2a0b4, 0x290b1, 0x28072,
  423         0x2706f, 0x2604f, 0x2504c, 0x24049, 0x23046, 0x22009, 0x21006,
  424         0x20003, 0x0a0b2, 0x090af, 0x08070, 0x0706d, 0x0604d, 0x0504a,
  425         0x04047, 0x03044, 0x02007, 0x01004, 0x00001
  426 }, rtl8812au_rf0_vals7[] = {
  427         0x4adf5, 0x49df2, 0x48def, 0x47dec, 0x46de9, 0x45de6, 0x44de3,
  428         0x438c8, 0x428c5, 0x418c2, 0x408c0, 0x2adf5, 0x29df2, 0x28def,
  429         0x27dec, 0x26de9, 0x25de6, 0x24de3, 0x238c8, 0x228c5, 0x218c2,
  430         0x208c0, 0x0aff7, 0x09df7, 0x08df4, 0x07df1, 0x06dee, 0x05deb,
  431         0x04de8, 0x038cc, 0x028c9, 0x018c6, 0x008c3
  432 }, rtl8812au_rf0_vals8_pa_a0_a5[] = {
  433         0x00000, 0x1712a, 0x00040, 0x001d4, 0x081d4, 0x101d4, 0x201b4,
  434         0x281b4, 0x301b4, 0x401b4, 0x481b4, 0x501b4, 0x00000, 0x1712a,
  435         0x00010, 0x04bfb, 0x0cbfb, 0x14bfb, 0x1cbfb, 0x24f4b, 0x2cf4b,
  436         0x34f4b, 0x3cf4b, 0x44f4b, 0x4cf4b, 0x54f4b, 0x5cf4b, 0x00000,
  437         0x00008, 0x002cc, 0x00522, 0x00902
  438 }, rtl8812au_rf0_vals8[] = {
  439         0x00000, 0x1712a, 0x00040, 0x00188, 0x08147, 0x10147, 0x201d7,
  440         0x281d7, 0x301d7, 0x401d8, 0x481d8, 0x501d8, 0x00000, 0x1712a,
  441         0x00010, 0x84eb4, 0x8cc35, 0x94c35, 0x9cc35, 0xa4c35, 0xacc35,
  442         0xb4c35, 0xbcc35, 0xc4c34, 0xccc35, 0xd4c35, 0xdcc35, 0x00000,
  443         0x00008, 0x002a8, 0x005a2, 0x00880
  444 }, rtl8812au_rf0_vals9[] = {
  445         0x00000, 0x1712a, 0x00002, 0x00080, 0x00064
  446 }, rtl8812au_rf0_vals10_pa_a0[] = {
  447         0xfdd43, 0x38f4b, 0x32117, 0x194ac, 0x931d1
  448 }, rtl8812au_rf0_vals10_pa_a5[] = {
  449         0xfdd43, 0x38f4b, 0x32117, 0x194ac, 0x931d2
  450 }, rtl8812au_rf0_vals10[] = {
  451         0xe5d53, 0x38fcd, 0x114eb, 0x196ac, 0x911d7
  452 }, rtl8812au_rf0_vals11[] = {
  453         0x08400, 0x739d2, 0x1e78d, 0x1f12a, 0x0c350, 0x0c350, 0x0c350,
  454         0x0c350, 0x1a78d, 0x1712a
  455 }, rtl8812au_rf1_vals0[] = {
  456         0x51cf2, 0x40000, 0x00080
  457 }, rtl8812au_rf1_vals3[] = {
  458         0x1fc1a, 0xf0810, 0x1a78d, 0x86180, 0x00006, 0x02000
  459 }, rtl8812au_rf1_vals6[] = {
  460         0x00000, 0x020a2, 0x00080, 0x00192, 0x08192, 0x10192, 0x00024,
  461         0x08024, 0x10024, 0x18024, 0x00000, 0x00c21, 0x006d9, 0xfc649,
  462         0x0017e, 0x00002, 0x08400, 0x1712a, 0x01000, 0x00080, 0x3a02c,
  463         0x04000, 0x00400, 0x3202c, 0x10000, 0x000a0, 0x2b064, 0x04000,
  464         0x000d8, 0x23070, 0x04000, 0x00468, 0x1b870, 0x10000, 0x00098,
  465         0x12085, 0xe4000, 0x00418, 0x0a080, 0xf0000, 0x00418, 0x02080,
  466         0x10000, 0x00080, 0x7a02c, 0x04000, 0x00400, 0x7202c, 0x10000,
  467         0x000a0, 0x6b064, 0x04000, 0x000d8, 0x63070, 0x04000, 0x00468,
  468         0x5b870, 0x10000, 0x00098, 0x52085, 0xe4000, 0x00418, 0x4a080,
  469         0xf0000, 0x00418, 0x42080, 0x10000, 0x00080, 0xba02c, 0x04000,
  470         0x00400, 0xb202c, 0x10000, 0x000a0, 0xab064, 0x04000, 0x000d8,
  471         0xa3070, 0x04000, 0x00468, 0x9b870, 0x10000, 0x00098, 0x92085,
  472         0xe4000, 0x00418, 0x8a080, 0xf0000, 0x00418, 0x82080, 0x10000,
  473         0x01100
  474 }, rtl8812au_rf1_vals7_pa_a5[] = {
  475         0x4a0b1, 0x490ae, 0x4806f, 0x4706c, 0x4604c, 0x45049, 0x44046,
  476         0x43043, 0x42006, 0x41003, 0x40000, 0x2a0b3, 0x290b0, 0x28071,
  477         0x2706e, 0x2604e, 0x2504b, 0x24048, 0x23045, 0x22008, 0x21005,
  478         0x20002, 0x0a0b3, 0x090b0, 0x08070, 0x0706d, 0x0604d, 0x0504a,
  479         0x04047, 0x03044, 0x02007, 0x01004, 0x00001
  480 }, rtl8812au_rf1_vals8_pa_a0_a5[] = {
  481         0x00000, 0x1712a, 0x00040, 0x001c5, 0x081c5, 0x101c5, 0x20174,
  482         0x28174, 0x30174, 0x40185, 0x48185, 0x50185, 0x00000, 0x1712a,
  483         0x00010, 0x05b8b, 0x0db8b, 0x15b8b, 0x1db8b, 0x262db, 0x2e2db,
  484         0x362db, 0x3e2db, 0x4553b, 0x4d53b, 0x5553b, 0x5d53b, 0x00000,
  485         0x00008, 0x002dc, 0x00524, 0x00902
  486 }, rtl8812au_rf1_vals10_pa_g0_a0[] = {
  487         0xeac43, 0x38f47, 0x31157, 0x1c4ac, 0x931d1
  488 }, rtl8812au_rf1_vals10_pa_a5[] = {
  489         0xeac43, 0x38f47, 0x31157, 0x1c4ac, 0x931d2
  490 };
  491 
  492 static const struct rtwn_rf_prog rtl8812au_rf[] = {
  493         /* RF chain 0. */
  494         {
  495                 nitems(rtl8812au_rf0_regs0),
  496                 rtl8812au_rf0_regs0,
  497                 rtl8812au_rf0_vals0,
  498                 { 0 },
  499                 NULL
  500         },
  501         /* External 2GHz LNA, type 0 or 5. */
  502         {
  503                 nitems(rtl8812au_rf0_regs1),
  504                 rtl8812au_rf0_regs1,
  505                 rtl8812au_rf0_vals1_lna_g0_g5,
  506                 {
  507                         R12A_COND_GLNA | R12A_COND_TYPE(0x0),
  508                         R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
  509                 },
  510                 /* Others. */
  511                 &(const struct rtwn_rf_prog){
  512                         nitems(rtl8812au_rf0_regs1),
  513                         rtl8812au_rf0_regs1,
  514                         rtl8812au_rf0_vals1,
  515                         { 0 },
  516                         NULL
  517                 }
  518         },
  519         /* External 5GHz LNA, type 0. */
  520         {
  521                 nitems(rtl8812au_rf0_regs2),
  522                 rtl8812au_rf0_regs2,
  523                 rtl8812au_rf0_vals2_lna_a0,
  524                 { R12A_COND_ALNA | R12A_COND_TYPE(0x0), 0 },
  525                 /* Others. */
  526                 &(const struct rtwn_rf_prog){
  527                         nitems(rtl8812au_rf0_regs2),
  528                         rtl8812au_rf0_regs2,
  529                         rtl8812au_rf0_vals2,
  530                         { 0 },
  531                         NULL
  532                 }
  533         },
  534         {
  535                 nitems(rtl8812au_rf0_regs3),
  536                 rtl8812au_rf0_regs3,
  537                 rtl8812au_rf0_vals3,
  538                 { 0 },
  539                 NULL
  540         },
  541         /* External 2GHz LNA, type 0 or 5. */
  542         {
  543                 nitems(rtl8812au_rf0_regs4),
  544                 rtl8812au_rf0_regs4,
  545                 rtl8812au_rf0_vals4_lna_g0_g5,
  546                 {
  547                         R12A_COND_GLNA | R12A_COND_TYPE(0x0),
  548                         R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
  549                 },
  550                 /* Others */
  551                 &(const struct rtwn_rf_prog){
  552                         nitems(rtl8812au_rf0_regs4),
  553                         rtl8812au_rf0_regs4,
  554                         rtl8812au_rf0_vals4,
  555                         { 0 },
  556                         NULL
  557                 }
  558         },
  559         /* External 2GHz PA, type 0. */
  560         {
  561                 nitems(rtl8812au_rf0_regs5),
  562                 rtl8812au_rf0_regs5,
  563                 rtl8812au_rf0_vals5_pa_g0,
  564                 { R12A_COND_GPA | R12A_COND_TYPE(0x0), 0 },
  565                 /* Others. */
  566                 &(const struct rtwn_rf_prog){
  567                         nitems(rtl8812au_rf0_regs5),
  568                         rtl8812au_rf0_regs5,
  569                         rtl8812au_rf0_vals5,
  570                         { 0 },
  571                         NULL
  572                 }
  573         },
  574         {
  575                 nitems(rtl8812au_rf0_regs6),
  576                 rtl8812au_rf0_regs6,
  577                 rtl8812au_rf0_vals6,
  578                 { 0 },
  579                 NULL
  580         },
  581         /* External 5GHz PA, type 0. */
  582         {
  583                 nitems(rtl8812au_rf0_regs7),
  584                 rtl8812au_rf0_regs7,
  585                 rtl8812au_rf0_vals7_pa_a0,
  586                 { R12A_COND_APA | R12A_COND_TYPE(0x0), 0 },
  587                 /* External 5GHz PA, type 5. */
  588                 &(const struct rtwn_rf_prog){
  589                         nitems(rtl8812au_rf0_regs7),
  590                         rtl8812au_rf0_regs7,
  591                         rtl8812au_rf0_vals7_pa_a5,
  592                         { R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
  593                         /* Others. */
  594                         &(const struct rtwn_rf_prog){
  595                                 nitems(rtl8812au_rf0_regs7),
  596                                 rtl8812au_rf0_regs7,
  597                                 rtl8812au_rf0_vals7,
  598                                 { 0 },
  599                                 NULL
  600                         }
  601                 }
  602         },
  603         /* External 5GHz PA, type 0 or 5. */
  604         {
  605                 nitems(rtl8812au_rf0_regs8),
  606                 rtl8812au_rf0_regs8,
  607                 rtl8812au_rf0_vals8_pa_a0_a5,
  608                 {
  609                         R12A_COND_APA | R12A_COND_TYPE(0x0),
  610                         R12A_COND_APA | R12A_COND_TYPE(0x5), 0
  611                 },
  612                 /* Others. */
  613                 &(const struct rtwn_rf_prog){
  614                         nitems(rtl8812au_rf0_regs8),
  615                         rtl8812au_rf0_regs8,
  616                         rtl8812au_rf0_vals8,
  617                         { 0 },
  618                         NULL
  619                 }
  620         },
  621         {
  622                 nitems(rtl8812au_rf0_regs9),
  623                 rtl8812au_rf0_regs9,
  624                 rtl8812au_rf0_vals9,
  625                 { 0 },
  626                 NULL
  627         },
  628         /* External 5GHz PA, type 0. */
  629         {
  630                 nitems(rtl8812au_rf0_regs10),
  631                 rtl8812au_rf0_regs10,
  632                 rtl8812au_rf0_vals10_pa_a0,
  633                 { R12A_COND_APA | R12A_COND_TYPE(0x0), 0 },
  634                 /* External 5GHz PA, type 5. */
  635                 &(const struct rtwn_rf_prog){
  636                         nitems(rtl8812au_rf0_regs10),
  637                         rtl8812au_rf0_regs10,
  638                         rtl8812au_rf0_vals10_pa_a5,
  639                         { R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
  640                         /* Others. */
  641                         &(const struct rtwn_rf_prog){
  642                                 nitems(rtl8812au_rf0_regs10),
  643                                 rtl8812au_rf0_regs10,
  644                                 rtl8812au_rf0_vals10,
  645                                 { 0 },
  646                                 NULL
  647                         }
  648                 }
  649         },
  650         {
  651                 nitems(rtl8812au_rf0_regs11),
  652                 rtl8812au_rf0_regs11,
  653                 rtl8812au_rf0_vals11,
  654                 { 0 },
  655                 NULL
  656         },
  657         { 0, NULL, NULL, { 0 }, NULL },
  658         /* RF chain 1. */
  659         {
  660                 nitems(rtl8812au_rf1_regs0),
  661                 rtl8812au_rf1_regs0,
  662                 rtl8812au_rf1_vals0,
  663                 { 0 },
  664                 NULL
  665         },
  666         /* rtl8812au_rf[1] */
  667         /* External 2GHz LNA, type 0 or 5. */
  668         {
  669                 nitems(rtl8812au_rf0_regs1),
  670                 rtl8812au_rf0_regs1,
  671                 rtl8812au_rf0_vals1_lna_g0_g5,
  672                 {
  673                         R12A_COND_GLNA | R12A_COND_TYPE(0x0),
  674                         R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
  675                 },
  676                 /* Others. */
  677                 &(const struct rtwn_rf_prog){
  678                         nitems(rtl8812au_rf0_regs1),
  679                         rtl8812au_rf0_regs1,
  680                         rtl8812au_rf0_vals1,
  681                         { 0 },
  682                         NULL
  683                 }
  684         },
  685         /* rtl8812au_rf[2] */
  686         /* External 5GHz LNA, type 0. */
  687         {
  688                 nitems(rtl8812au_rf0_regs2),
  689                 rtl8812au_rf0_regs2,
  690                 rtl8812au_rf0_vals2_lna_a0,
  691                 { R12A_COND_ALNA | R12A_COND_TYPE(0x0), 0 },
  692                 /* Others. */
  693                 &(const struct rtwn_rf_prog){
  694                         nitems(rtl8812au_rf0_regs2),
  695                         rtl8812au_rf0_regs2,
  696                         rtl8812au_rf0_vals2,
  697                         { 0 },
  698                         NULL
  699                 }
  700         },
  701         {
  702                 nitems(rtl8812au_rf1_regs3),
  703                 rtl8812au_rf1_regs3,
  704                 rtl8812au_rf1_vals3,
  705                 { 0 },
  706                 NULL
  707         },
  708         /* rtl8812au_rf[4] */
  709         /* External 2GHz LNA, type 0 or 5. */
  710         {
  711                 nitems(rtl8812au_rf0_regs4),
  712                 rtl8812au_rf0_regs4,
  713                 rtl8812au_rf0_vals4_lna_g0_g5,
  714                 {
  715                         R12A_COND_GLNA | R12A_COND_TYPE(0x0),
  716                         R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
  717                 },
  718                 /* Others */
  719                 &(const struct rtwn_rf_prog){
  720                         nitems(rtl8812au_rf0_regs4),
  721                         rtl8812au_rf0_regs4,
  722                         rtl8812au_rf0_vals4,
  723                         { 0 },
  724                         NULL
  725                 }
  726         },
  727         /* rtl8812au_rf[5] */
  728         /* External 2GHz PA, type 0. */
  729         {
  730                 nitems(rtl8812au_rf0_regs5),
  731                 rtl8812au_rf0_regs5,
  732                 rtl8812au_rf0_vals5_pa_g0,
  733                 { R12A_COND_GPA | R12A_COND_TYPE(0x0), 0 },
  734                 /* Others. */
  735                 &(const struct rtwn_rf_prog){
  736                         nitems(rtl8812au_rf0_regs5),
  737                         rtl8812au_rf0_regs5,
  738                         rtl8812au_rf0_vals5,
  739                         { 0 },
  740                         NULL
  741                 }
  742         },
  743         {
  744                 nitems(rtl8812au_rf0_regs6),
  745                 rtl8812au_rf0_regs6,
  746                 rtl8812au_rf1_vals6,
  747                 { 0 },
  748                 NULL
  749         },
  750         /* External 5GHz PA, type 0. */
  751         {
  752                 nitems(rtl8812au_rf0_regs7),
  753                 rtl8812au_rf0_regs7,
  754                 rtl8812au_rf0_vals7_pa_a0,
  755                 { R12A_COND_APA | R12A_COND_TYPE(0x0), 0 },
  756                 /* External 5GHz PA, type 5. */
  757                 &(const struct rtwn_rf_prog){
  758                         nitems(rtl8812au_rf0_regs7),
  759                         rtl8812au_rf0_regs7,
  760                         rtl8812au_rf1_vals7_pa_a5,
  761                         { R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
  762                         /* Others. */
  763                         &(const struct rtwn_rf_prog){
  764                                 nitems(rtl8812au_rf0_regs7),
  765                                 rtl8812au_rf0_regs7,
  766                                 rtl8812au_rf0_vals7,
  767                                 { 0 },
  768                                 NULL
  769                         }
  770                 }
  771         },
  772         /* External 5GHz PA, type 0 or 5. */
  773         {
  774                 nitems(rtl8812au_rf0_regs8),
  775                 rtl8812au_rf0_regs8,
  776                 rtl8812au_rf1_vals8_pa_a0_a5,
  777                 {
  778                         R12A_COND_APA | R12A_COND_TYPE(0x0),
  779                         R12A_COND_APA | R12A_COND_TYPE(0x5), 0
  780                 },
  781                 /* Others. */
  782                 &(const struct rtwn_rf_prog){
  783                         nitems(rtl8812au_rf0_regs8),
  784                         rtl8812au_rf0_regs8,
  785                         rtl8812au_rf0_vals8,
  786                         { 0 },
  787                         NULL
  788                 }
  789         },
  790         {
  791                 nitems(rtl8812au_rf0_regs9) - 1,
  792                 rtl8812au_rf0_regs9,
  793                 rtl8812au_rf0_vals9,
  794                 { 0 },
  795                 NULL
  796         },
  797 
  798         /* External 2GHz or 5GHz PA, type 0. */
  799         {
  800                 nitems(rtl8812au_rf0_regs10),
  801                 rtl8812au_rf0_regs10,
  802                 rtl8812au_rf1_vals10_pa_g0_a0,
  803                 {
  804                         R12A_COND_GPA | R12A_COND_TYPE(0x0),
  805                         R12A_COND_APA | R12A_COND_TYPE(0x0), 0
  806                 },
  807                 /* External 5GHz PA, type 5. */
  808                 &(const struct rtwn_rf_prog){
  809                         nitems(rtl8812au_rf0_regs10),
  810                         rtl8812au_rf0_regs10,
  811                         rtl8812au_rf1_vals10_pa_a5,
  812                         { R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
  813                         /* Others. */
  814                         &(const struct rtwn_rf_prog){
  815                                 nitems(rtl8812au_rf0_regs10),
  816                                 rtl8812au_rf0_regs10,
  817                                 rtl8812au_rf0_vals10,
  818                                 { 0 },
  819                                 NULL
  820                         }
  821                 }
  822         },
  823         {
  824                 1,
  825                 rtl8812au_rf0_regs11,
  826                 rtl8812au_rf0_vals11,
  827                 { 0 },
  828                 NULL
  829         },
  830         { 0, NULL, NULL, { 0 }, NULL }
  831 };
  832 
  833 /*
  834  * Registers to save before IQ calibration.
  835  */
  836 static const uint16_t r12a_iq_bb_regs[] = {
  837         0x520, 0x550, 0x808, 0xa04, 0x90c, 0xc00, 0xe00, 0x838, 0x82c
  838 };
  839 
  840 static const uint16_t r12a_iq_afe_regs[] = {
  841         0xc5c, 0xc60, 0xc64, 0xc68, 0xcb0, 0xcb4, 0xe5c, 0xe60, 0xe64,
  842         0xe68, 0xeb0, 0xeb4
  843 };
  844 
  845 static const uint8_t r12a_iq_rf_regs[] = {
  846         0x65, 0x8f, 0x0
  847 };
  848 
  849 #endif  /* R12A_PRIV_H */

Cache object: 6aa974b8f6038ee35b278373c563835b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.