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