Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0a14369 authored by Gabor Juhos's avatar Gabor Juhos Committed by John W. Linville
Browse files

rt2x00: rt2800lib: add default_power3 field for three-chain devices



The actual code uses two default TX power values.
This is enough for 1T and for 2T devices however
on 3T devices another value is needed for the third
chain.

Add a new field to struct channel_info and initialize
it from the 'rt2800_probe_hw_mode' function. Also modify
the 'rt2800_config_channel' to handle the new field as
well.

Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
Acked-by: default avatarStanislaw Gruszka <stf_xl@wp.pl>
Acked-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f36bb0ca
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -2768,6 +2768,10 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
						     info->default_power1);
	info->default_power2 = rt2800_txpower_to_dev(rt2x00dev, rf->channel,
						     info->default_power2);
	if (rt2x00dev->default_ant.tx_chain_num > 2)
		info->default_power3 =
			rt2800_txpower_to_dev(rt2x00dev, rf->channel,
					      info->default_power3);

	switch (rt2x00dev->chip.rf) {
	case RF2020:
@@ -6963,6 +6967,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
	struct channel_info *info;
	char *default_power1;
	char *default_power2;
	char *default_power3;
	unsigned int i;
	u16 eeprom;
	u32 reg;
@@ -7115,9 +7120,17 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
	default_power1 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
	default_power2 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);

	if (rt2x00dev->default_ant.tx_chain_num > 2)
		default_power3 = rt2800_eeprom_addr(rt2x00dev,
						    EEPROM_EXT_TXPOWER_BG3);
	else
		default_power3 = NULL;

	for (i = 0; i < 14; i++) {
		info[i].default_power1 = default_power1[i];
		info[i].default_power2 = default_power2[i];
		if (default_power3)
			info[i].default_power3 = default_power3[i];
	}

	if (spec->num_channels > 14) {
@@ -7126,9 +7139,18 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
		default_power2 = rt2800_eeprom_addr(rt2x00dev,
						    EEPROM_TXPOWER_A2);

		if (rt2x00dev->default_ant.tx_chain_num > 2)
			default_power3 =
				rt2800_eeprom_addr(rt2x00dev,
						   EEPROM_EXT_TXPOWER_A3);
		else
			default_power3 = NULL;

		for (i = 14; i < spec->num_channels; i++) {
			info[i].default_power1 = default_power1[i - 14];
			info[i].default_power2 = default_power2[i - 14];
			if (default_power3)
				info[i].default_power3 = default_power3[i - 14];
		}
	}

+1 −0
Original line number Diff line number Diff line
@@ -211,6 +211,7 @@ struct channel_info {
	short max_power;
	short default_power1;
	short default_power2;
	short default_power3;
};

/*