linux/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c
<<
>>
Prefs
   1/******************************************************************************
   2*
   3* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
   4*
   5* This program is free software; you can redistribute it and/or modify it
   6* under the terms of version 2 of the GNU General Public License as
   7* published by the Free Software Foundation.
   8*
   9* This program is distributed in the hope that it will be useful, but WITHOUT
  10* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12* more details.
  13*
  14******************************************************************************/
  15
  16#include <linux/kernel.h>
  17#include "odm_precomp.h"
  18
  19static bool CheckPositive(
  20        PDM_ODM_T pDM_Odm, const u32 Condition1, const u32 Condition2
  21)
  22{
  23        u8 _BoardType =
  24                ((pDM_Odm->BoardType & BIT4) >> 4) << 0 | /*  _GLNA */
  25                ((pDM_Odm->BoardType & BIT3) >> 3) << 1 | /*  _GPA */
  26                ((pDM_Odm->BoardType & BIT7) >> 7) << 2 | /*  _ALNA */
  27                ((pDM_Odm->BoardType & BIT6) >> 6) << 3 | /*  _APA */
  28                ((pDM_Odm->BoardType & BIT2) >> 2) << 4;  /*  _BT */
  29
  30        u32 cond1 = Condition1, cond2 = Condition2;
  31        u32 driver1 =
  32                pDM_Odm->CutVersion << 24 |
  33                pDM_Odm->SupportPlatform << 16 |
  34                pDM_Odm->PackageType << 12 |
  35                pDM_Odm->SupportInterface << 8  |
  36                _BoardType;
  37
  38        u32 driver2 =
  39                pDM_Odm->TypeGLNA << 0 |
  40                pDM_Odm->TypeGPA << 8 |
  41                pDM_Odm->TypeALNA << 16 |
  42                pDM_Odm->TypeAPA << 24;
  43
  44        ODM_RT_TRACE(
  45                pDM_Odm,
  46                ODM_COMP_INIT,
  47                ODM_DBG_TRACE,
  48                (
  49                        "===> [8812A] CheckPositive (cond1, cond2) = (0x%X 0x%X)\n",
  50                        cond1,
  51                        cond2
  52                )
  53        );
  54        ODM_RT_TRACE(
  55                pDM_Odm,
  56                ODM_COMP_INIT,
  57                ODM_DBG_TRACE,
  58                (
  59                        "===> [8812A] CheckPositive (driver1, driver2) = (0x%X 0x%X)\n",
  60                        driver1,
  61                        driver2
  62                )
  63        );
  64
  65        ODM_RT_TRACE(
  66                pDM_Odm,
  67                ODM_COMP_INIT,
  68                ODM_DBG_TRACE,
  69                ("      (Platform, Interface) = (0x%X, 0x%X)\n",
  70                        pDM_Odm->SupportPlatform,
  71                        pDM_Odm->SupportInterface
  72                )
  73        );
  74        ODM_RT_TRACE(
  75                pDM_Odm,
  76                ODM_COMP_INIT,
  77                ODM_DBG_TRACE,
  78                (
  79                        "       (Board, Package) = (0x%X, 0x%X)\n",
  80                        pDM_Odm->BoardType,
  81                        pDM_Odm->PackageType
  82                )
  83        );
  84
  85
  86        /*  Value Defined Check =============== */
  87        /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
  88
  89        if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
  90                return false;
  91        if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
  92                return false;
  93
  94        /*  Bit Defined Check ================ */
  95        /*  We don't care [31:28] and [23:20] */
  96        /*  */
  97        cond1   &= 0x000F0FFF;
  98        driver1 &= 0x000F0FFF;
  99
 100        if ((cond1 & driver1) == cond1) {
 101                u32 bitMask = 0;
 102
 103                if ((cond1 & 0x0F) == 0) /*  BoardType is DONTCARE */
 104                        return true;
 105
 106                if ((cond1 & BIT0) != 0) /* GLNA */
 107                        bitMask |= 0x000000FF;
 108                if ((cond1 & BIT1) != 0) /* GPA */
 109                        bitMask |= 0x0000FF00;
 110                if ((cond1 & BIT2) != 0) /* ALNA */
 111                        bitMask |= 0x00FF0000;
 112                if ((cond1 & BIT3) != 0) /* APA */
 113                        bitMask |= 0xFF000000;
 114
 115                /*  BoardType of each RF path is matched */
 116                if ((cond2 & bitMask) == (driver2 & bitMask))
 117                        return true;
 118        }
 119        return false;
 120}
 121
 122static bool CheckNegative(
 123        PDM_ODM_T pDM_Odm, const u32  Condition1, const u32 Condition2
 124)
 125{
 126        return true;
 127}
 128
 129/******************************************************************************
 130*                           AGC_TAB.TXT
 131******************************************************************************/
 132
 133static u32 Array_MP_8723B_AGC_TAB[] = {
 134                0xC78, 0xFD000001,
 135                0xC78, 0xFC010001,
 136                0xC78, 0xFB020001,
 137                0xC78, 0xFA030001,
 138                0xC78, 0xF9040001,
 139                0xC78, 0xF8050001,
 140                0xC78, 0xF7060001,
 141                0xC78, 0xF6070001,
 142                0xC78, 0xF5080001,
 143                0xC78, 0xF4090001,
 144                0xC78, 0xF30A0001,
 145                0xC78, 0xF20B0001,
 146                0xC78, 0xF10C0001,
 147                0xC78, 0xF00D0001,
 148                0xC78, 0xEF0E0001,
 149                0xC78, 0xEE0F0001,
 150                0xC78, 0xED100001,
 151                0xC78, 0xEC110001,
 152                0xC78, 0xEB120001,
 153                0xC78, 0xEA130001,
 154                0xC78, 0xE9140001,
 155                0xC78, 0xE8150001,
 156                0xC78, 0xE7160001,
 157                0xC78, 0xE6170001,
 158                0xC78, 0xE5180001,
 159                0xC78, 0xE4190001,
 160                0xC78, 0xE31A0001,
 161                0xC78, 0xA51B0001,
 162                0xC78, 0xA41C0001,
 163                0xC78, 0xA31D0001,
 164                0xC78, 0x671E0001,
 165                0xC78, 0x661F0001,
 166                0xC78, 0x65200001,
 167                0xC78, 0x64210001,
 168                0xC78, 0x63220001,
 169                0xC78, 0x4A230001,
 170                0xC78, 0x49240001,
 171                0xC78, 0x48250001,
 172                0xC78, 0x47260001,
 173                0xC78, 0x46270001,
 174                0xC78, 0x45280001,
 175                0xC78, 0x44290001,
 176                0xC78, 0x432A0001,
 177                0xC78, 0x422B0001,
 178                0xC78, 0x292C0001,
 179                0xC78, 0x282D0001,
 180                0xC78, 0x272E0001,
 181                0xC78, 0x262F0001,
 182                0xC78, 0x0A300001,
 183                0xC78, 0x09310001,
 184                0xC78, 0x08320001,
 185                0xC78, 0x07330001,
 186                0xC78, 0x06340001,
 187                0xC78, 0x05350001,
 188                0xC78, 0x04360001,
 189                0xC78, 0x03370001,
 190                0xC78, 0x02380001,
 191                0xC78, 0x01390001,
 192                0xC78, 0x013A0001,
 193                0xC78, 0x013B0001,
 194                0xC78, 0x013C0001,
 195                0xC78, 0x013D0001,
 196                0xC78, 0x013E0001,
 197                0xC78, 0x013F0001,
 198                0xC78, 0xFC400001,
 199                0xC78, 0xFB410001,
 200                0xC78, 0xFA420001,
 201                0xC78, 0xF9430001,
 202                0xC78, 0xF8440001,
 203                0xC78, 0xF7450001,
 204                0xC78, 0xF6460001,
 205                0xC78, 0xF5470001,
 206                0xC78, 0xF4480001,
 207                0xC78, 0xF3490001,
 208                0xC78, 0xF24A0001,
 209                0xC78, 0xF14B0001,
 210                0xC78, 0xF04C0001,
 211                0xC78, 0xEF4D0001,
 212                0xC78, 0xEE4E0001,
 213                0xC78, 0xED4F0001,
 214                0xC78, 0xEC500001,
 215                0xC78, 0xEB510001,
 216                0xC78, 0xEA520001,
 217                0xC78, 0xE9530001,
 218                0xC78, 0xE8540001,
 219                0xC78, 0xE7550001,
 220                0xC78, 0xE6560001,
 221                0xC78, 0xE5570001,
 222                0xC78, 0xE4580001,
 223                0xC78, 0xE3590001,
 224                0xC78, 0xA65A0001,
 225                0xC78, 0xA55B0001,
 226                0xC78, 0xA45C0001,
 227                0xC78, 0xA35D0001,
 228                0xC78, 0x675E0001,
 229                0xC78, 0x665F0001,
 230                0xC78, 0x65600001,
 231                0xC78, 0x64610001,
 232                0xC78, 0x63620001,
 233                0xC78, 0x62630001,
 234                0xC78, 0x61640001,
 235                0xC78, 0x48650001,
 236                0xC78, 0x47660001,
 237                0xC78, 0x46670001,
 238                0xC78, 0x45680001,
 239                0xC78, 0x44690001,
 240                0xC78, 0x436A0001,
 241                0xC78, 0x426B0001,
 242                0xC78, 0x286C0001,
 243                0xC78, 0x276D0001,
 244                0xC78, 0x266E0001,
 245                0xC78, 0x256F0001,
 246                0xC78, 0x24700001,
 247                0xC78, 0x09710001,
 248                0xC78, 0x08720001,
 249                0xC78, 0x07730001,
 250                0xC78, 0x06740001,
 251                0xC78, 0x05750001,
 252                0xC78, 0x04760001,
 253                0xC78, 0x03770001,
 254                0xC78, 0x02780001,
 255                0xC78, 0x01790001,
 256                0xC78, 0x017A0001,
 257                0xC78, 0x017B0001,
 258                0xC78, 0x017C0001,
 259                0xC78, 0x017D0001,
 260                0xC78, 0x017E0001,
 261                0xC78, 0x017F0001,
 262                0xC50, 0x69553422,
 263                0xC50, 0x69553420,
 264                0x824, 0x00390204,
 265
 266};
 267
 268void ODM_ReadAndConfig_MP_8723B_AGC_TAB(PDM_ODM_T pDM_Odm)
 269{
 270        u32 i = 0;
 271        u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_AGC_TAB);
 272        u32 *Array = Array_MP_8723B_AGC_TAB;
 273
 274        ODM_RT_TRACE(
 275                pDM_Odm,
 276                ODM_COMP_INIT,
 277                ODM_DBG_LOUD,
 278                ("===> ODM_ReadAndConfig_MP_8723B_AGC_TAB\n")
 279        );
 280
 281        for (i = 0; i < ArrayLen; i += 2) {
 282                u32 v1 = Array[i];
 283                u32 v2 = Array[i+1];
 284
 285                /*  This (offset, data) pair doesn't care the condition. */
 286                if (v1 < 0x40000000) {
 287                        odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
 288                        continue;
 289                } else {
 290                        /*  This line is the beginning of branch. */
 291                        bool bMatched = true;
 292                        u8  cCond  = (u8)((v1 & (BIT29|BIT28)) >> 28);
 293
 294                        if (cCond == COND_ELSE) { /*  ELSE, ENDIF */
 295                                bMatched = true;
 296                                READ_NEXT_PAIR(v1, v2, i);
 297                        } else if (!CheckPositive(pDM_Odm, v1, v2)) {
 298                                bMatched = false;
 299                                READ_NEXT_PAIR(v1, v2, i);
 300                                READ_NEXT_PAIR(v1, v2, i);
 301                        } else {
 302                                READ_NEXT_PAIR(v1, v2, i);
 303                                if (!CheckNegative(pDM_Odm, v1, v2))
 304                                        bMatched = false;
 305                                else
 306                                        bMatched = true;
 307                                READ_NEXT_PAIR(v1, v2, i);
 308                        }
 309
 310                        if (bMatched == false) {
 311                                /*  Condition isn't matched.
 312                                *   Discard the following (offset, data) pairs.
 313                                */
 314                                while (v1 < 0x40000000 && i < ArrayLen-2)
 315                                        READ_NEXT_PAIR(v1, v2, i);
 316
 317                                i -= 2; /*  prevent from for-loop += 2 */
 318                        } else {
 319                                /*  Configure matched pairs and skip to end of if-else. */
 320                                while (v1 < 0x40000000 && i < ArrayLen-2) {
 321                                        odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
 322                                        READ_NEXT_PAIR(v1, v2, i);
 323                                }
 324
 325                                /*  Keeps reading until ENDIF. */
 326                                cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
 327                                while (cCond != COND_ENDIF && i < ArrayLen-2) {
 328                                        READ_NEXT_PAIR(v1, v2, i);
 329                                        cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
 330                                }
 331                        }
 332                }
 333        }
 334}
 335
 336/******************************************************************************
 337*                           PHY_REG.TXT
 338******************************************************************************/
 339
 340static u32 Array_MP_8723B_PHY_REG[] = {
 341                0x800, 0x80040000,
 342                0x804, 0x00000003,
 343                0x808, 0x0000FC00,
 344                0x80C, 0x0000000A,
 345                0x810, 0x10001331,
 346                0x814, 0x020C3D10,
 347                0x818, 0x02200385,
 348                0x81C, 0x00000000,
 349                0x820, 0x01000100,
 350                0x824, 0x00190204,
 351                0x828, 0x00000000,
 352                0x82C, 0x00000000,
 353                0x830, 0x00000000,
 354                0x834, 0x00000000,
 355                0x838, 0x00000000,
 356                0x83C, 0x00000000,
 357                0x840, 0x00010000,
 358                0x844, 0x00000000,
 359                0x848, 0x00000000,
 360                0x84C, 0x00000000,
 361                0x850, 0x00000000,
 362                0x854, 0x00000000,
 363                0x858, 0x569A11A9,
 364                0x85C, 0x01000014,
 365                0x860, 0x66F60110,
 366                0x864, 0x061F0649,
 367                0x868, 0x00000000,
 368                0x86C, 0x27272700,
 369                0x870, 0x07000760,
 370                0x874, 0x25004000,
 371                0x878, 0x00000808,
 372                0x87C, 0x00000000,
 373                0x880, 0xB0000C1C,
 374                0x884, 0x00000001,
 375                0x888, 0x00000000,
 376                0x88C, 0xCCC000C0,
 377                0x890, 0x00000800,
 378                0x894, 0xFFFFFFFE,
 379                0x898, 0x40302010,
 380                0x89C, 0x00706050,
 381                0x900, 0x00000000,
 382                0x904, 0x00000023,
 383                0x908, 0x00000000,
 384                0x90C, 0x81121111,
 385                0x910, 0x00000002,
 386                0x914, 0x00000201,
 387                0xA00, 0x00D047C8,
 388                0xA04, 0x80FF800C,
 389                0xA08, 0x8C838300,
 390                0xA0C, 0x2E7F120F,
 391                0xA10, 0x9500BB78,
 392                0xA14, 0x1114D028,
 393                0xA18, 0x00881117,
 394                0xA1C, 0x89140F00,
 395                0xA20, 0x1A1B0000,
 396                0xA24, 0x090E1317,
 397                0xA28, 0x00000204,
 398                0xA2C, 0x00D30000,
 399                0xA70, 0x101FBF00,
 400                0xA74, 0x00000007,
 401                0xA78, 0x00000900,
 402                0xA7C, 0x225B0606,
 403                0xA80, 0x21806490,
 404                0xB2C, 0x00000000,
 405                0xC00, 0x48071D40,
 406                0xC04, 0x03A05611,
 407                0xC08, 0x000000E4,
 408                0xC0C, 0x6C6C6C6C,
 409                0xC10, 0x08800000,
 410                0xC14, 0x40000100,
 411                0xC18, 0x08800000,
 412                0xC1C, 0x40000100,
 413                0xC20, 0x00000000,
 414                0xC24, 0x00000000,
 415                0xC28, 0x00000000,
 416                0xC2C, 0x00000000,
 417                0xC30, 0x69E9AC44,
 418                0xC34, 0x469652AF,
 419                0xC38, 0x49795994,
 420                0xC3C, 0x0A97971C,
 421                0xC40, 0x1F7C403F,
 422                0xC44, 0x000100B7,
 423                0xC48, 0xEC020107,
 424                0xC4C, 0x007F037F,
 425                0xC50, 0x69553420,
 426                0xC54, 0x43BC0094,
 427                0xC58, 0x00013149,
 428                0xC5C, 0x00250492,
 429                0xC60, 0x00000000,
 430                0xC64, 0x7112848B,
 431                0xC68, 0x47C00BFF,
 432                0xC6C, 0x00000036,
 433                0xC70, 0x2C7F000D,
 434                0xC74, 0x020610DB,
 435                0xC78, 0x0000001F,
 436                0xC7C, 0x00B91612,
 437                0xC80, 0x390000E4,
 438                0xC84, 0x20F60000,
 439                0xC88, 0x40000100,
 440                0xC8C, 0x20200000,
 441                0xC90, 0x00020E1A,
 442                0xC94, 0x00000000,
 443                0xC98, 0x00020E1A,
 444                0xC9C, 0x00007F7F,
 445                0xCA0, 0x00000000,
 446                0xCA4, 0x000300A0,
 447                0xCA8, 0x00000000,
 448                0xCAC, 0x00000000,
 449                0xCB0, 0x00000000,
 450                0xCB4, 0x00000000,
 451                0xCB8, 0x00000000,
 452                0xCBC, 0x28000000,
 453                0xCC0, 0x00000000,
 454                0xCC4, 0x00000000,
 455                0xCC8, 0x00000000,
 456                0xCCC, 0x00000000,
 457                0xCD0, 0x00000000,
 458                0xCD4, 0x00000000,
 459                0xCD8, 0x64B22427,
 460                0xCDC, 0x00766932,
 461                0xCE0, 0x00222222,
 462                0xCE4, 0x00000000,
 463                0xCE8, 0x37644302,
 464                0xCEC, 0x2F97D40C,
 465                0xD00, 0x00000740,
 466                0xD04, 0x40020401,
 467                0xD08, 0x0000907F,
 468                0xD0C, 0x20010201,
 469                0xD10, 0xA0633333,
 470                0xD14, 0x3333BC53,
 471                0xD18, 0x7A8F5B6F,
 472                0xD2C, 0xCC979975,
 473                0xD30, 0x00000000,
 474                0xD34, 0x80608000,
 475                0xD38, 0x00000000,
 476                0xD3C, 0x00127353,
 477                0xD40, 0x00000000,
 478                0xD44, 0x00000000,
 479                0xD48, 0x00000000,
 480                0xD4C, 0x00000000,
 481                0xD50, 0x6437140A,
 482                0xD54, 0x00000000,
 483                0xD58, 0x00000282,
 484                0xD5C, 0x30032064,
 485                0xD60, 0x4653DE68,
 486                0xD64, 0x04518A3C,
 487                0xD68, 0x00002101,
 488                0xD6C, 0x2A201C16,
 489                0xD70, 0x1812362E,
 490                0xD74, 0x322C2220,
 491                0xD78, 0x000E3C24,
 492                0xE00, 0x2D2D2D2D,
 493                0xE04, 0x2D2D2D2D,
 494                0xE08, 0x0390272D,
 495                0xE10, 0x2D2D2D2D,
 496                0xE14, 0x2D2D2D2D,
 497                0xE18, 0x2D2D2D2D,
 498                0xE1C, 0x2D2D2D2D,
 499                0xE28, 0x00000000,
 500                0xE30, 0x1000DC1F,
 501                0xE34, 0x10008C1F,
 502                0xE38, 0x02140102,
 503                0xE3C, 0x681604C2,
 504                0xE40, 0x01007C00,
 505                0xE44, 0x01004800,
 506                0xE48, 0xFB000000,
 507                0xE4C, 0x000028D1,
 508                0xE50, 0x1000DC1F,
 509                0xE54, 0x10008C1F,
 510                0xE58, 0x02140102,
 511                0xE5C, 0x28160D05,
 512                0xE60, 0x00000008,
 513                0xE68, 0x001B2556,
 514                0xE6C, 0x00C00096,
 515                0xE70, 0x00C00096,
 516                0xE74, 0x01000056,
 517                0xE78, 0x01000014,
 518                0xE7C, 0x01000056,
 519                0xE80, 0x01000014,
 520                0xE84, 0x00C00096,
 521                0xE88, 0x01000056,
 522                0xE8C, 0x00C00096,
 523                0xED0, 0x00C00096,
 524                0xED4, 0x00C00096,
 525                0xED8, 0x00C00096,
 526                0xEDC, 0x000000D6,
 527                0xEE0, 0x000000D6,
 528                0xEEC, 0x01C00016,
 529                0xF14, 0x00000003,
 530                0xF4C, 0x00000000,
 531                0xF00, 0x00000300,
 532                0x820, 0x01000100,
 533                0x800, 0x83040000,
 534
 535};
 536
 537void ODM_ReadAndConfig_MP_8723B_PHY_REG(PDM_ODM_T pDM_Odm)
 538{
 539        u32 i = 0;
 540        u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_PHY_REG);
 541        u32 *Array = Array_MP_8723B_PHY_REG;
 542
 543        ODM_RT_TRACE(
 544                pDM_Odm,
 545                ODM_COMP_INIT,
 546                ODM_DBG_LOUD,
 547                ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG\n")
 548        );
 549
 550        for (i = 0; i < ArrayLen; i += 2) {
 551                u32 v1 = Array[i];
 552                u32 v2 = Array[i+1];
 553
 554                /*  This (offset, data) pair doesn't care the condition. */
 555                if (v1 < 0x40000000) {
 556                        odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
 557                        continue;
 558                } else {
 559                        /*  This line is the beginning of branch. */
 560                        bool bMatched = true;
 561                        u8  cCond  = (u8)((v1 & (BIT29|BIT28)) >> 28);
 562
 563                        if (cCond == COND_ELSE) { /*  ELSE, ENDIF */
 564                                bMatched = true;
 565                                READ_NEXT_PAIR(v1, v2, i);
 566                        } else if (!CheckPositive(pDM_Odm, v1, v2)) {
 567                                bMatched = false;
 568                                READ_NEXT_PAIR(v1, v2, i);
 569                                READ_NEXT_PAIR(v1, v2, i);
 570                        } else {
 571                                READ_NEXT_PAIR(v1, v2, i);
 572                                if (!CheckNegative(pDM_Odm, v1, v2))
 573                                        bMatched = false;
 574                                else
 575                                        bMatched = true;
 576                                READ_NEXT_PAIR(v1, v2, i);
 577                        }
 578
 579                        if (bMatched == false) {
 580                                /*  Condition isn't matched.
 581                                *   Discard the following (offset, data) pairs.
 582                                */
 583                                while (v1 < 0x40000000 && i < ArrayLen-2)
 584                                        READ_NEXT_PAIR(v1, v2, i);
 585
 586                                i -= 2; /*  prevent from for-loop += 2 */
 587                        } else { /*  Configure matched pairs and skip to end of if-else. */
 588                                while (v1 < 0x40000000 && i < ArrayLen-2) {
 589                                        odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
 590                                        READ_NEXT_PAIR(v1, v2, i);
 591                                }
 592
 593                                /*  Keeps reading until ENDIF. */
 594                                cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
 595                                while (cCond != COND_ENDIF && i < ArrayLen-2) {
 596                                        READ_NEXT_PAIR(v1, v2, i);
 597                                        cCond = (u8)((v1 & (BIT29|BIT28)) >> 28);
 598                                }
 599                        }
 600                }
 601        }
 602}
 603
 604/******************************************************************************
 605*                           PHY_REG_PG.TXT
 606******************************************************************************/
 607
 608static u32 Array_MP_8723B_PHY_REG_PG[] = {
 609        0, 0, 0, 0x00000e08, 0x0000ff00, 0x00003800,
 610        0, 0, 0, 0x0000086c, 0xffffff00, 0x32343600,
 611        0, 0, 0, 0x00000e00, 0xffffffff, 0x40424444,
 612        0, 0, 0, 0x00000e04, 0xffffffff, 0x28323638,
 613        0, 0, 0, 0x00000e10, 0xffffffff, 0x38404244,
 614        0, 0, 0, 0x00000e14, 0xffffffff, 0x26303436
 615};
 616
 617void ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(PDM_ODM_T pDM_Odm)
 618{
 619        u32 i = 0;
 620        u32 *Array = Array_MP_8723B_PHY_REG_PG;
 621
 622        ODM_RT_TRACE(
 623                pDM_Odm,
 624                ODM_COMP_INIT,
 625                ODM_DBG_LOUD,
 626                ("===> ODM_ReadAndConfig_MP_8723B_PHY_REG_PG\n")
 627        );
 628
 629        pDM_Odm->PhyRegPgVersion = 1;
 630        pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;
 631
 632        for (i = 0; i < ARRAY_SIZE(Array_MP_8723B_PHY_REG_PG); i += 6) {
 633                u32 v1 = Array[i];
 634                u32 v2 = Array[i+1];
 635                u32 v3 = Array[i+2];
 636                u32 v4 = Array[i+3];
 637                u32 v5 = Array[i+4];
 638                u32 v6 = Array[i+5];
 639
 640                odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4, v5, v6);
 641        }
 642}
 643