14adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer/* 24adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer * PLT utility for wireless chip supported by TI's driver wl12xx 34adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer * 44adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer * See README and COPYING for more details. 54adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer */ 64adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 74adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <sys/ioctl.h> 84adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <errno.h> 94adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <stdio.h> 104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <stdlib.h> 114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <string.h> 124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <sys/stat.h> 134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <fcntl.h> 144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <unistd.h> 154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <stdbool.h> 164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <netlink/genl/genl.h> 184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <netlink/genl/family.h> 194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <netlink/genl/ctrl.h> 204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <netlink/msg.h> 214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <netlink/attr.h> 224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include <linux/wireless.h> 234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include "nl80211.h" 244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include "calibrator.h" 264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include "plt.h" 274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include "ini.h" 284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#include "nvs.h" 294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic char *ini_get_line(char *s, int size, FILE *stream, int *line, 314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char **_pos) 324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *pos, *end, *sstart; 344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (fgets(s, size, stream)) { 364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer s[size - 1] = '\0'; 374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer pos = s; 384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* Skip white space from the beginning of line. */ 404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (*pos == ' ' || *pos == '\t' || *pos == '\r') { 414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer pos++; 424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* Skip comment lines and empty lines */ 454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (*pos == '#' || *pos == '\n' || *pos == '\0') { 464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer continue; 474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* 504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer * Remove # comments unless they are within a double quoted 514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer * string. 524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer */ 534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer sstart = strchr(pos, '"'); 544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (sstart) { 554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer sstart = strrchr(sstart + 1, '"'); 564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (!sstart) { 584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer sstart = pos; 594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer end = strchr(sstart, '#'); 614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (end) { 624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *end-- = '\0'; 634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer end = pos + strlen(pos) - 1; 654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* Remove trailing white space. */ 684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (end > pos && 694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer (*end == '\n' || *end == ' ' || *end == '\t' || 704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *end == '\r')) { 714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *end-- = '\0'; 724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (*pos == '\0') { 754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer continue; 764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer (*line)++; 794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (_pos) { 814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *_pos = pos; 824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return pos; 844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (_pos) { 874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *_pos = NULL; 884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return NULL; 914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int split_line(char *line, char **name, char **value) 944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *pos = line; 964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *value = strchr(pos, '='); 984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (!*value) { 994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Wrong format of line\n"); 1004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 1014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *name = *value; 1044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer (*name)--; 1064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (**name == ' ' || **name == '\t' || **name == '\r') { 1074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer (*name)--; 1084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *++(*name) = '\0'; 1114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer (*value)++; 1134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (**value == ' ' || **value == '\t' || **value == '\r') { 1144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer (*value)++; 1154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 1184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 1194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#define COMPARE_N_ADD(temp, str, val, ptr, size) \ 1214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp(temp, str, sizeof(temp)) == 0) { \ 1224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int i; \ 1234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer unsigned char *p = ptr; \ 1244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < size; i++) { \ 1254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *p = strtol(val, NULL, 16); \ 1264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (i != sizeof(ptr)-1) { \ 1274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer val += 3; p++; \ 1284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; \ 1314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#define DBG_COMPARE_N_ADD(temp, str, val, ptr, size) \ 1344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp(temp, str, sizeof(temp)) == 0) { \ 1354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int i; \ 1364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer unsigned char *p = ptr; \ 1374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < size; i++) { \ 1384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *p = strtol(val, NULL, 16); \ 1394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (i != sizeof(ptr)-1) { \ 1404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer val += 3; p++; \ 1414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer p = ptr; \ 1444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("%s ", temp); \ 1454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < size; i++) { \ 1464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("%02X ", *p); \ 1474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer p++; \ 1484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); \ 1504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; \ 1514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#define COMPARE_N_ADD2(temp, str, val, ptr, size) \ 1544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp(temp, str, sizeof(temp)) == 0) { \ 1554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int i; \ 1564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer unsigned short *p = ptr; \ 1574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < size; i++) { \ 1584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *p = strtol(val, NULL, 16); \ 1594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (i != sizeof(ptr)-1) { \ 1604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer val += 5; p++; \ 1614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; \ 1644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#define DBG_COMPARE_N_ADD2(temp, str, val, ptr, size) \ 1674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp(temp, str, sizeof(temp)) == 0) { \ 1684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int i; \ 1694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer unsigned short *p = ptr; \ 1704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < size; i++) { \ 1714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *p = strtol(val, NULL, 16); \ 1724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (i != sizeof(ptr)-1) { \ 1734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer val += 5; p++; \ 1744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer p = ptr; \ 1774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("%s ", temp); \ 1784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < size; i++) { \ 1794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("%04X ", *p); \ 1804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer p++; \ 1814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } \ 1824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); \ 1834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; \ 1844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_general_prms(char *l, struct wl12xx_common *cmn, 1874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl12xx_ini *p) 1884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 1894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 1904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl1271_ini_general_params *gp = &(p->ini1271.general_params); 1914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 1934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 1944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 1954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TXBiPFEMAutoDetect", l, val, 1974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_fem_auto_detect, 1); 1984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 1994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TXBiPFEMManufacturer", l, val, 2004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_fem_manufacturer, 1); 2014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RefClk", l, val, &gp->ref_clock, 1); 2034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SettlingTime", l, val, &gp->settling_time, 1); 2054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("ClockValidOnWakeup", l, val, 2074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->clk_valid_on_wakeup, 1); 2084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("DC2DCMode", l, val, &gp->dc2dc_mode, 1); 2104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("Single_Dual_Band_Solution", l, val, 2124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->dual_mode_select, 1); 2134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (cmn->dual_mode == DUAL_MODE_UNSET) { 2154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->dual_mode = gp->dual_mode_select; 2164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 2174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer else if (cmn->dual_mode != gp->dual_mode_select) { 2184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Error, FEMs with different dual modes\n"); 2194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 2204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 2214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("Settings", l, val, &gp->general_settings, 1); 2234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRState", l, val, &gp->sr_state, 1); 2254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRF1", l, val, 2274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->srf1, WL1271_INI_MAX_SMART_REFLEX_PARAM); 2284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRF2", l, val, 2304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->srf2, WL1271_INI_MAX_SMART_REFLEX_PARAM); 2314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRF3", l, val, 2334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->srf3, WL1271_INI_MAX_SMART_REFLEX_PARAM); 2344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 2364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 2384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 2394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_general_prms_128x(char *l, struct wl12xx_common *cmn, 2414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl12xx_ini *p) 2424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 2434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 2444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini_general_params *gp = 2454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini128x.general_params); 2464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 2484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 2494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 2504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TXBiPFEMAutoDetect", l, val, 2524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_fem_auto_detect, 1); 2534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TXBiPFEMManufacturer", l, val, 2554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_fem_manufacturer, 1); 2564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RefClk", l, val, &gp->ref_clock, 1); 2584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SettlingTime", l, val, &gp->settling_time, 1); 2604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("ClockValidOnWakeup", l, val, 2624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->clk_valid_on_wakeup, 1); 2634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TCXO_Clk", l, val, &gp->tcxo_ref_clock, 1); 2654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TCXO_SettlingTime", l, val, &gp->tcxo_settling_time, 1); 2674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TCXO_ClockValidOnWakeup", l, val, 2694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tcxo_valid_on_wakeup, 1); 2704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TCXO_LDO_Voltage", l, val, 2724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tcxo_ldo_voltage, 1); 2734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("Platform_configuration", l, val, 2754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->platform_conf, 1); 2764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("Single_Dual_Band_Solution", l, val, 2784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->dual_mode_select, 1); 2794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (cmn->dual_mode == DUAL_MODE_UNSET) { 2814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->dual_mode = gp->dual_mode_select; 2824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else if (cmn->dual_mode != gp->dual_mode_select) { 2834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Error, FEMs with diferent dual modes\n"); 2844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 2854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 2864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("Settings", l, val, 2884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->general_settings, WL128X_INI_MAX_SETTINGS_PARAM); 2894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("XTALItrimVal", l, val, &gp->xtal_itrim_val, 1); 2914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRState", l, val, &gp->sr_state, 1); 2934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRF1", l, val, 2954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->srf1, WL1271_INI_MAX_SMART_REFLEX_PARAM); 2964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 2974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRF2", l, val, 2984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->srf2, WL1271_INI_MAX_SMART_REFLEX_PARAM); 2994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("SRF3", l, val, 3014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->srf3, WL1271_INI_MAX_SMART_REFLEX_PARAM); 3024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 3044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 3074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_band2_prms(char *l, struct wl12xx_ini *p) 3094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 3104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 3114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl1271_ini_band_params_2 *gp = 3124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini1271.stat_radio_params_2); 3134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 3154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 3174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RxTraceInsertionLoss_2_4G", l, val, 3194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->rx_trace_insertion_loss, 1); 3204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TXTraceLoss_2_4G", l, val, 3224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_trace_loss, 1); 3234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RxRssiAndProcessCompensation_2_4G", l, val, 3254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->rx_rssi_process_compens, 3264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RSSI_PROCESS_COMPENS_SIZE); 3274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 3294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 3324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_band2_prms_128x(char *l, struct wl12xx_ini *p) 3344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 3354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 3364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini_band_params_2 *gp = &(p->ini128x.stat_radio_params_2); 3374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 3394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 3414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RxTraceInsertionLoss_2_4G", l, val, 3434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->rx_trace_insertion_loss, 1); 3444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TxTraceLoss_2_4G", l, val, 3464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_trace_loss, WL1271_INI_CHANNEL_COUNT_2); 3474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 3494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 3524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_band5_prms(char *l, struct wl12xx_ini *p) 3544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 3554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 3564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl1271_ini_band_params_5 *gp = 3574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini1271.stat_radio_params_5); 3584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 3604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 3624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RxTraceInsertionLoss_5G", l, val, 3644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->rx_trace_insertion_loss, 7); 3654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TXTraceLoss_5G", l, val, 3674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_trace_loss, 7); 3684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RxRssiAndProcessCompensation_5G", l, val, 3704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->rx_rssi_process_compens, 3714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RSSI_PROCESS_COMPENS_SIZE); 3724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 3744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 3774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_band5_prms_128x(char *l, struct wl12xx_ini *p) 3794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 3804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 3814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini_band_params_5 *gp = &(p->ini128x.stat_radio_params_5); 3824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 3844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 3864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("RxTraceInsertionLoss_5G", l, val, 3884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->rx_trace_insertion_loss, 7); 3894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("TxTraceLoss_5G", l, val, 3914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_trace_loss, 7); 3924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 3944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 3964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 3974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 3984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem0_band2_prms(char *l, struct wl12xx_ini *p) 3994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 4004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 4014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl1271_ini_fem_params_2 *gp = 4024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini1271.dyn_radio_params_2[0].params); 4034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 4054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 4064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 4074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD2("FEM0_TXBiPReferencePDvoltage_2_4G", l, val, 4094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_pd_voltage, 1); 4104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxBiPReferencePower_2_4G", l, val, 4124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_power, 1); 4134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxBiPOffsetdB_2_4G", l, val, 4154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_offset, 1); 4164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerRatePowerLimits_2_4G_Normal", l, val, 4184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_normal, 4194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerRatePowerLimits_2_4G_Degraded", l, val, 4224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_degraded, 4234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerRatePowerLimits_2_4G_Extreme", l, val, 4264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_extreme, 4274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_DegradedLowToNormalThr_2_4G", l, val, 4304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->degraded_low_to_normal_thr, 1); 4314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_NormalToDegradedHighThr_2_4G", l, val, 4334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->normal_to_degraded_high_thr, 1); 4344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerChannelPowerLimits_2_4G_11b", l, val, 4364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_11b, 4374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 4384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerChannelPowerLimits_2_4G_OFDM", l, val, 4404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_ofdm, 4414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 4424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPDVsRateOffsets_2_4G", l, val, 4444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_rate_offsets, 4454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxIbiasTable_2_4G", l, val, 4484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_ibias, 4494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_RxFemInsertionLoss_2_4G", l, val, 4524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->rx_fem_insertion_loss, 1); 4534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 4554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 4574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 4584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem0_band2_prms_128x(char *l, struct wl12xx_ini *p) 4604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 4614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 4624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini_fem_params_2 *gp = 4634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini128x.dyn_radio_params_2[0].params); 4644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 4664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 4674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 4684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD2("FEM0_TxBiPReferencePDvoltage_2_4G", l, val, 4704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_pd_voltage, 1); 4714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxBiPReferencePower_2_4G", l, val, 4734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_power, 1); 4744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxBiPOffsetdB_2_4G", l, val, 4764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_offset, 1); 4774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerRatePowerLimits_2_4G_Normal", l, val, 4794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_normal, 4804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerRatePowerLimits_2_4G_Degraded", l, val, 4834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_degraded, 4844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerRatePowerLimits_2_4G_Extreme", l, val, 4874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_extreme, 4884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 4894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_DegradedLowToNormalThr_2_4G", l, val, 4914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->degraded_low_to_normal_thr, 1); 4924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_NormalToDegradedHighThr_2_4G", l, val, 4944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->normal_to_degraded_high_thr, 1); 4954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 4964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerChannelPowerLimits_2_4G_11b", l, val, 4974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_11b, 4984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 4994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPerChannelPowerLimits_2_4G_OFDM", l, val, 5014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_ofdm, 5024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 5034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPDVsRateOffsets_2_4G", l, val, 5054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_rate_offsets, 5064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPDVsChannelOffsets_2_4G", l, val, 5094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_chan_offsets, 5104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 5114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxPDVsTemperature_2_4G", l, val, 5134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_temperature, 5144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_PD_VS_TEMPERATURE_RANGES); 5154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_TxIbiasTable_2_4G", l, val, 5174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_ibias, 5184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM0_RxFemInsertionLoss_2_4G", l, val, 5214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->rx_fem_insertion_loss, 1); 5224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 5244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 5264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 5274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem1_band2_prms(char *l, struct wl12xx_ini *p) 5294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 5304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 5314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl1271_ini_fem_params_2 *gp = 5324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini1271.dyn_radio_params_2[1].params); 5334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 5354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 5364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 5374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD2("FEM1_TXBiPReferencePDvoltage_2_4G", l, val, 5394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_pd_voltage, 1); 5404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPReferencePower_2_4G", l, val, 5424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_power, 1); 5434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPOffsetdB_2_4G", l, val, 5454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_offset, 1); 5464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_2_4G_Normal", l, val, 5484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_normal, 5494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_2_4G_Degraded", l, val, 5524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_degraded, 5534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_2_4G_Extreme", l, val, 5564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_extreme, 5574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_DegradedLowToNormalThr_2_4G", l, val, 5604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->degraded_low_to_normal_thr, 1); 5614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_NormalToDegradedHighThr_2_4G", l, val, 5634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->normal_to_degraded_high_thr, 1); 5644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerChannelPowerLimits_2_4G_11b", l, val, 5664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_11b, 5674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 5684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerChannelPowerLimits_2_4G_OFDM", l, val, 5704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_ofdm, 5714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 5724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsRateOffsets_2_4G", l, val, 5744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_rate_offsets, 5754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxIbiasTable_2_4G", l, val, 5784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_ibias, 5794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 5804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_RxFemInsertionLoss_2_4G", l, val, 5824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->rx_fem_insertion_loss, 1); 5834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 5854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 5874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 5884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem1_band2_prms_128x(char *l, struct wl12xx_ini *p) 5904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 5914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 5924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini_fem_params_2 *gp = 5934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini128x.dyn_radio_params_2[1].params); 5944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 5964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 5974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 5984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 5994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD2("FEM1_TxBiPReferencePDvoltage_2_4G", l, val, 6004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_pd_voltage, 1); 6014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPReferencePower_2_4G", l, val, 6034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_power, 1); 6044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPOffsetdB_2_4G", l, val, 6064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->tx_bip_ref_offset, 1); 6074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_2_4G_Normal", l, val, 6094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_normal, 6104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 6114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_2_4G_Degraded", l, val, 6134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_degraded, 6144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 6154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_2_4G_Extreme", l, val, 6174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_extreme, 6184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 6194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_DegradedLowToNormalThr_2_4G", l, val, 6214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->degraded_low_to_normal_thr, 1); 6224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_NormalToDegradedHighThr_2_4G", l, val, 6244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->normal_to_degraded_high_thr, 1); 6254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerChannelPowerLimits_2_4G_11b", l, val, 6274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_11b, 6284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 6294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerChannelPowerLimits_2_4G_OFDM", l, val, 6314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_ofdm, 6324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 6334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsRateOffsets_2_4G", l, val, 6354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_rate_offsets, 6364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 6374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsChannelOffsets_2_4G", l, val, 6394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_chan_offsets, 6404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_2); 6414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsTemperature_2_4G", l, val, 6434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_temperature, 6444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_PD_VS_TEMPERATURE_RANGES); 6454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxIbiasTable_2_4G", l, val, 6474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_ibias, 6484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 6494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_RxFemInsertionLoss_2_4G", l, val, 6514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->rx_fem_insertion_loss, 1); 6524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 6544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 6564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 6574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem1_band5_prms(char *l, struct wl12xx_ini *p) 6594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 6604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 6614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl1271_ini_fem_params_5 *gp = 6624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini1271.dyn_radio_params_5[1].params); 6634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 6654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 6664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 6674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD2("FEM1_TXBiPReferencePDvoltage_5G", l, val, 6694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_bip_ref_pd_voltage, WL1271_INI_SUB_BAND_COUNT_5); 6704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPReferencePower_5G", l, val, 6724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_bip_ref_power, WL1271_INI_SUB_BAND_COUNT_5); 6734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPOffsetdB_5G", l, val, 6754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_bip_ref_offset, WL1271_INI_SUB_BAND_COUNT_5); 6764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_5G_Normal", l, val, 6784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_normal, 6794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 6804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_5G_Degraded", l, val, 6824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_degraded, 6834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 6844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_5G_Extreme", l, val, 6864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_extreme, 6874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 6884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_DegradedLowToNormalThr_5G", l, val, 6904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->degraded_low_to_normal_thr, 1); 6914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_NormalToDegradedHighThr_5G", l, val, 6934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->normal_to_degraded_high_thr, 1); 6944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerChannelPowerLimits_5G_OFDM", l, val, 6964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_ofdm, 6974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_5); 6984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 6994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsRateOffsets_5G", l, val, 7004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_rate_offsets, 7014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 7024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxIbiasTable_5G", l, val, 7044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_ibias, 7054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_RATE_GROUP_COUNT); 7064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_RxFemInsertionLoss_5G", l, val, 7084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->rx_fem_insertion_loss, WL1271_INI_SUB_BAND_COUNT_5); 7094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 7114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 7134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 7144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem1_band5_prms_128x(char *l, struct wl12xx_ini *p) 7164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 7174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 7184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini_fem_params_5 *gp = 7194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &(p->ini128x.dyn_radio_params_5[1].params); 7204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 7224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 7234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 7244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD2("FEM1_TxBiPReferencePDvoltage_5G", l, val, 7264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_bip_ref_pd_voltage, WL1271_INI_SUB_BAND_COUNT_5); 7274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPReferencePower_5G", l, val, 7294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_bip_ref_power, WL1271_INI_SUB_BAND_COUNT_5); 7304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxBiPOffsetdB_5G", l, val, 7324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_bip_ref_offset, WL1271_INI_SUB_BAND_COUNT_5); 7334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_5G_Normal", l, val, 7354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_normal, 7364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 7374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_5G_Degraded", l, val, 7394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_degraded, 7404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 7414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerRatePowerLimits_5G_Extreme", l, val, 7434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_rate_pwr_limits_extreme, 7444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 7454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_DegradedLowToNormalThr_5G", l, val, 7474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->degraded_low_to_normal_thr, 1); 7484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_NormalToDegradedHighThr_5G", l, val, 7504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->normal_to_degraded_high_thr, 1); 7514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPerChannelPowerLimits_5G_OFDM", l, val, 7534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_per_chan_pwr_limits_ofdm, 7544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_5); 7554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsRateOffsets_5G", l, val, 7574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_rate_offsets, 7584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 7594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsChannelOffsets_5G", l, val, 7614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_chan_offsets, 7624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_CHANNEL_COUNT_5); 7634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxPDVsTemperature_5G", l, val, 7654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_pd_vs_temperature, 7664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL1271_INI_SUB_BAND_COUNT_5 * WL128X_INI_PD_VS_TEMPERATURE_RANGES); 7674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_TxIbiasTable_5G", l, val, 7694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->tx_ibias, 7704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer WL128X_INI_RATE_GROUP_COUNT); 7714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FEM1_RxFemInsertionLoss_5G", l, val, 7734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer gp->rx_fem_insertion_loss, WL1271_INI_SUB_BAND_COUNT_5); 7744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 7764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 7784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 7794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int parse_fem_prms_128x(char *l, struct wl12xx_ini *p) 7814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 7824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char *name, *val; 7834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer struct wl128x_ini *gp = &p->ini128x; 7844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (split_line(l, &name, &val)) { 7864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 7874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 7884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer COMPARE_N_ADD("FemVendorAndOptions", l, val, 7904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer &gp->fem_vendor_and_options, 1); 7914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to parse: (%s)\n", l); 7934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 7954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 7964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 7974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int find_section(const char *l, enum wl1271_ini_section *st, int *cntr, 7984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer enum wl12xx_arch arch) 7994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 8004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("TXBiPFEMAutoDetect", l, 18) == 0) { 8014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = GENERAL_PRMS; 8024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == WL128X_ARCH) { 8034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 17; 8044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 8054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 12; 8064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("RxTraceInsertionLoss_2_4G", l, 25) == 0) { 8124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = BAND2_PRMS; 8134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == WL128X_ARCH){ 8144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 2; 8154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 8164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 3; 8174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("FemVendorAndOptions", l, 19) == 0) { 8234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = FEM_PRMS; 8244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 1; 8254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("RxTraceInsertionLoss_5G", l, 23) == 0) { 8294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = BAND5_PRMS; 8304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == WL128X_ARCH) { 8314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 2; 8324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 8334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 3; 8344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("FEM0_TXBiPReferencePDvoltage_2_4G", l, 33) == 0 || 8404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer strncmp("FEM0_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { 8414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = FEM0_BAND2_PRMS; 8424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == WL128X_ARCH) { 8434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 15; 8444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 8454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 13; 8464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("FEM1_TXBiPReferencePDvoltage_2_4G", l, 33) == 0 || 8524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer strncmp("FEM1_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { 8534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = FEM1_BAND2_PRMS; 8544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == WL128X_ARCH) { 8554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 15; 8564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 8574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 13; 8584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("FEM1_TXBiPReferencePDvoltage_5G", l, 31) == 0 || 8644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer strncmp("FEM1_TxBiPReferencePDvoltage_5G", l, 31) == 0) { 8654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *st = FEM1_BAND5_PRMS; 8664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == WL128X_ARCH) { 8674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 14; 8684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 8694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer *cntr = 12; 8704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 8734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 8764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 8774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int ini_parse_line(char *l, int nbr, struct wl12xx_common *cmn) 8794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 8804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer static enum wl1271_ini_section status; 8814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer static int cntr; 8824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (!cntr && find_section(l, &status, &cntr, cmn->arch)) { 8844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Uknown ini section %s\n", l); 8854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 8864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 8884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer switch (status) { 8894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case GENERAL_PRMS: /* general parameters */ 8904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 8914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return cmn->parse_ops->prs_general_prms(l, cmn, &cmn->ini); 8924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case FEM_PRMS: /* FEM parameters */ 8934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (cmn->arch == WL1271_ARCH) { 8944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "The parameter not from 127x architecture\n"); 8954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 8964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 8974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 8984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return parse_fem_prms_128x(l, &cmn->ini); 8994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case BAND2_PRMS: /* band 2.4GHz parameters */ 9004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 9014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return cmn->parse_ops->prs_band2_prms(l, &cmn->ini); 9024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case BAND5_PRMS: /* band 5GHz parameters */ 9034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 9044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return cmn->parse_ops->prs_band5_prms(l, &cmn->ini); 9054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case FEM0_BAND2_PRMS: /* FEM0 band 2.4GHz parameters */ 9064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 9074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return cmn->parse_ops->prs_fem0_band2_prms(l, &cmn->ini); 9084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case FEM1_BAND2_PRMS: /* FEM1 band 2.4GHz parameters */ 9094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 9104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return cmn->parse_ops->prs_fem1_band2_prms(l, &cmn->ini); 9114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case FEM1_BAND5_PRMS: /* FEM1 band 5GHz parameters */ 9124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cntr--; 9134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return cmn->parse_ops->prs_fem1_band5_prms(l, &cmn->ini); 9144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case UKNOWN_SECTION: 9154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* added because of compilation warning. handeled in find_section() */ 9164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer break; 9174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 9184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 9204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 9214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#if 0 9234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic void ini_dump(struct wl1271_ini *ini) 9244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 9254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int i; 9264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("General params:\n"); 9294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("ref clock: %02X\n", 9304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.ref_clock); 9314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("settling time: %02X\n", 9324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.settling_time); 9334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("clk valid on wakeup: %02X\n", 9344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.clk_valid_on_wakeup); 9354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("dc2dc mode: %02X\n", 9364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.dc2dc_mode); 9374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("dual band mode: %02X\n", 9384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.dual_mode_select); 9394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("tx bip fem auto detect: %02X\n", 9404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.tx_bip_fem_auto_detect); 9414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("tx bip fem manufacturer: %02X\n", 9424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.tx_bip_fem_manufacturer); 9434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("general settings: %02X\n", 9444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.general_settings); 9454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("sr state: %02X\n", 9464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->general_params.sr_state); 9474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("srf1:"); 9494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_MAX_SMART_REFLEX_PARAM; i++) 9504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", ini->general_params.srf1[i]); 9514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("srf2:"); 9544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_MAX_SMART_REFLEX_PARAM; i++) 9554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", ini->general_params.srf2[i]); 9564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("srf3:"); 9594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_MAX_SMART_REFLEX_PARAM; i++) 9604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", ini->general_params.srf3[i]); 9614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("Static 2.4 band params:\n"); 9644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("rx trace insertion loss: %02X\n", 9664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->stat_radio_params_2.rx_trace_insertion_loss); 9674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("rx rssi n process compensation:"); 9694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_RSSI_PROCESS_COMPENS_SIZE; i++) 9704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", 9714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->stat_radio_params_2.rx_rssi_process_compens[i]); 9724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("tx trace: %02X\n", 9754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->stat_radio_params_2.tx_trace_loss); 9764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("Dynamic 2.4 band params for FEM\n"); 9784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("Static 5 band params:\n"); 9804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("rx trace insertion loss:"); 9824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_SUB_BAND_COUNT_5; i++) 9834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", 9844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->stat_radio_params_5.rx_rssi_process_compens[i]); 9854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("rx rssi n process compensation:"); 9884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_RSSI_PROCESS_COMPENS_SIZE; i++) 9894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", 9904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->stat_radio_params_5.rx_rssi_process_compens[i]); 9914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("tx trace:"); 9944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer for (i = 0; i < WL1271_INI_SUB_BAND_COUNT_5; i++) 9954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf(" %02X", 9964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini->stat_radio_params_5.tx_trace_loss[i]); 9974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("\n"); 9984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 9994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer printf("Dynamic 5 band params for FEM\n"); 10004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 10024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#endif 10034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic struct wl12xx_parse_ops wl1271_parse_ops = { 10054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_general_prms = parse_general_prms, 10064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_band2_prms = parse_band2_prms, 10074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_band5_prms = parse_band5_prms, 10084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_fem0_band2_prms = parse_fem0_band2_prms, 10094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_fem1_band2_prms = parse_fem1_band2_prms, 10104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_fem1_band5_prms = parse_fem1_band5_prms, 10114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer}; 10124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic struct wl12xx_parse_ops wl128x_parse_ops = { 10144adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_general_prms = parse_general_prms_128x, 10154adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_band2_prms = parse_band2_prms_128x, 10164adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_band5_prms = parse_band5_prms_128x, 10174adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_fem0_band2_prms = parse_fem0_band2_prms_128x, 10184adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_fem1_band2_prms = parse_fem1_band2_prms_128x, 10194adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer .prs_fem1_band5_prms = parse_fem1_band5_prms_128x, 10204adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer}; 10214adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10224adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerint nvs_get_arch(int file_size, struct wl12xx_common *cmn) 10234adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 10244adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer enum wl12xx_arch arch = UNKNOWN_ARCH; 10254adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10264adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer switch (file_size) { 10274adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case WL127X_NVS_FILE_SZ: 10284adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer arch = WL1271_ARCH; 10294adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->parse_ops = &wl1271_parse_ops; 10304adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer break; 10314adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer case WL128X_NVS_FILE_SZ: 10324adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer arch = WL128X_ARCH; 10334adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->parse_ops = &wl128x_parse_ops; 10344adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer break; 10354adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10364adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10374adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (cmn->arch != UNKNOWN_ARCH && cmn->arch != arch) { 10384adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->parse_ops = NULL; 10394adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 10404adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10414adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10424adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->arch = arch; 10434adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10444adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 10454adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 10464adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10474adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerstatic int ini_get_arch(FILE *f, struct wl12xx_common *cmn) 10484adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 10494adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char buf[1024], *pos; 10504adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int line = 0; 10514adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer enum wl12xx_arch arch = UNKNOWN_ARCH; 10524adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10534adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (ini_get_line(buf, sizeof(buf), f, &line, &pos)) { 10544adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (strncmp("TCXO_Clk", pos, 8) == 0) { 10554adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer arch = WL128X_ARCH; 10564adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer break; 10574adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10584adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10594adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10604adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (arch == UNKNOWN_ARCH) { 10614adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer arch = WL1271_ARCH; 10624adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10634adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10644adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (cmn->arch != UNKNOWN_ARCH && cmn->arch != arch) { 10654adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 10664adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10674adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10684adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->arch = arch; 10694adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10704adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (cmn->arch == WL1271_ARCH) { 10714adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->parse_ops = &wl1271_parse_ops; 10724adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } else { 10734adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer cmn->parse_ops = &wl128x_parse_ops; 10744adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10754adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10764adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fseek(f, 0L, SEEK_SET); 10774adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10784adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 0; 10794adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 10804adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10814adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerint read_ini(const char *filename, struct wl12xx_common *cmn) 10824adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer{ 10834adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer FILE *f; 10844adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer char buf[1024], *pos; 10854adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer int ret = 0, line = 0; 10864adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10874adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer f = fopen(filename, "r"); 10884adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (f == NULL) { 10894adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to open file %s (%s)\n", 10904adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer filename, strerror(errno)); 10914adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return 1; 10924adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 10934adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 10944adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* check if it 127x or 128x */ 10954adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (ini_get_arch(f, cmn)) { 10964adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fprintf(stderr, "Unable to define wireless architecture\n"); 10974adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ret = 1; 10984adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer goto out; 10994adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 11004adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 11014adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer /* start parsing */ 11024adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer while (ini_get_line(buf, sizeof(buf), f, &line, &pos)) { 11034adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ret = ini_parse_line(pos, line, cmn); 11044adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer if (ret) break; 11054adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer } 11064adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer 11074adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveerout: 11084adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer fclose(f); 11094adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#if 0 11104adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer ini_dump(ini); 11114adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer#endif 11124adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer return ret; 11134adf0a82f66de9379c5e37d5dd0831a70cb6f236Vishal Mahaveer} 1114