* [PATCH 1/5] staging: vt6656: Return error code in vnt_rf_write_embedded function
2020-04-14 15:38 [PATCH 0/5] staging: vt6656: Rebase all rejected patches Oscar Carter
@ 2020-04-14 15:38 ` Oscar Carter
2020-04-14 15:38 ` [PATCH 2/5] staging: vt6656: Use BIT() macro instead of bit shift operator Oscar Carter
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Oscar Carter @ 2020-04-14 15:38 UTC (permalink / raw)
To: Forest Bond, Greg Kroah-Hartman
Cc: Oscar Carter, Quentin Deslandes, Malcolm Priestley,
Dan Carpenter, Amir Mahdi Ghorbanian, John B. Wyatt IV,
Colin Ian King, devel, linux-kernel
Use the error code returned by the vnt_control_out function as the
returned value of the vnt_rf_write_embedded function instead of a
boolean value.
Then, fix all vnt_rf_write_embedded calls removing the "and" operations
and replace with a direct assignment to the ret variable and add a check
condition after every call.
Also replace the boolean values true or false in the vnt_rf_set_txpower
function to 0 or error code EINVAL to follow the coding style guide.
The vnt_rf_set_txpower function is called only in the vnt_rf_setpower
function that already returns error codes. The calls to this function
(vnt_rf_set_txpower) not use the returned values, so they not need to be
fixed.
Signed-off-by: Oscar Carter <oscar.carter@gmx.com>
---
drivers/staging/vt6656/rf.c | 99 ++++++++++++++++++++++++-------------
1 file changed, 64 insertions(+), 35 deletions(-)
diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c
index a00179bd4c2e..06fa8867cfa3 100644
--- a/drivers/staging/vt6656/rf.c
+++ b/drivers/staging/vt6656/rf.c
@@ -21,6 +21,7 @@
*
*/
+#include <linux/errno.h>
#include "mac.h"
#include "rf.h"
#include "baseband.h"
@@ -531,10 +532,8 @@ int vnt_rf_write_embedded(struct vnt_private *priv, u32 data)
reg_data[2] = (u8)(data >> 16);
reg_data[3] = (u8)(data >> 24);
- vnt_control_out(priv, MESSAGE_TYPE_WRITE_IFRF,
- 0, 0, ARRAY_SIZE(reg_data), reg_data);
-
- return true;
+ return vnt_control_out(priv, MESSAGE_TYPE_WRITE_IFRF, 0, 0,
+ ARRAY_SIZE(reg_data), reg_data);
}
static u8 vnt_rf_addpower(struct vnt_private *priv)
@@ -568,14 +567,14 @@ static int vnt_rf_set_txpower(struct vnt_private *priv, u8 power,
struct ieee80211_channel *ch)
{
u32 power_setting = 0;
- int ret = true;
+ int ret = 0;
power += vnt_rf_addpower(priv);
if (power > VNT_RF_MAX_POWER)
power = VNT_RF_MAX_POWER;
if (priv->power == power)
- return true;
+ return 0;
priv->power = power;
@@ -583,35 +582,50 @@ static int vnt_rf_set_txpower(struct vnt_private *priv, u8 power,
case RF_AL2230:
power_setting = 0x0404090 | (power << 12);
- ret &= vnt_rf_write_embedded(priv, power_setting);
+ ret = vnt_rf_write_embedded(priv, power_setting);
+ if (ret)
+ return ret;
if (ch->flags & IEEE80211_CHAN_NO_OFDM)
- ret &= vnt_rf_write_embedded(priv, 0x0001b400);
+ ret = vnt_rf_write_embedded(priv, 0x0001b400);
else
- ret &= vnt_rf_write_embedded(priv, 0x0005a400);
+ ret = vnt_rf_write_embedded(priv, 0x0005a400);
+
break;
case RF_AL2230S:
power_setting = 0x0404090 | (power << 12);
- ret &= vnt_rf_write_embedded(priv, power_setting);
+ ret = vnt_rf_write_embedded(priv, power_setting);
+ if (ret)
+ return ret;
if (ch->flags & IEEE80211_CHAN_NO_OFDM) {
- ret &= vnt_rf_write_embedded(priv, 0x040c1400);
- ret &= vnt_rf_write_embedded(priv, 0x00299b00);
+ ret = vnt_rf_write_embedded(priv, 0x040c1400);
+ if (ret)
+ return ret;
+
+ ret = vnt_rf_write_embedded(priv, 0x00299b00);
} else {
- ret &= vnt_rf_write_embedded(priv, 0x0005a400);
- ret &= vnt_rf_write_embedded(priv, 0x00099b00);
+ ret = vnt_rf_write_embedded(priv, 0x0005a400);
+ if (ret)
+ return ret;
+
+ ret = vnt_rf_write_embedded(priv, 0x00099b00);
}
+
break;
case RF_AIROHA7230:
if (ch->flags & IEEE80211_CHAN_NO_OFDM)
- ret &= vnt_rf_write_embedded(priv, 0x111bb900);
+ ret = vnt_rf_write_embedded(priv, 0x111bb900);
else
- ret &= vnt_rf_write_embedded(priv, 0x221bb900);
+ ret = vnt_rf_write_embedded(priv, 0x221bb900);
+
+ if (ret)
+ return ret;
if (power >= AL7230_PWR_IDX_LEN)
- return false;
+ return -EINVAL;
/*
* 0x080F1B00 for 3 wire control TxGain(D10)
@@ -619,61 +633,76 @@ static int vnt_rf_set_txpower(struct vnt_private *priv, u8 power,
*/
power_setting = 0x080c0b00 | (power << 12);
- ret &= vnt_rf_write_embedded(priv, power_setting);
-
+ ret = vnt_rf_write_embedded(priv, power_setting);
break;
case RF_VT3226:
if (power >= VT3226_PWR_IDX_LEN)
- return false;
+ return -EINVAL;
power_setting = ((0x3f - power) << 20) | (0x17 << 8);
- ret &= vnt_rf_write_embedded(priv, power_setting);
-
+ ret = vnt_rf_write_embedded(priv, power_setting);
break;
case RF_VT3226D0:
if (power >= VT3226_PWR_IDX_LEN)
- return false;
+ return -EINVAL;
if (ch->flags & IEEE80211_CHAN_NO_OFDM) {
u16 hw_value = ch->hw_value;
power_setting = ((0x3f - power) << 20) | (0xe07 << 8);
- ret &= vnt_rf_write_embedded(priv, power_setting);
- ret &= vnt_rf_write_embedded(priv, 0x03c6a200);
+ ret = vnt_rf_write_embedded(priv, power_setting);
+ if (ret)
+ return ret;
+
+ ret = vnt_rf_write_embedded(priv, 0x03c6a200);
+ if (ret)
+ return ret;
dev_dbg(&priv->usb->dev,
"%s 11b channel [%d]\n", __func__, hw_value);
hw_value--;
- if (hw_value < ARRAY_SIZE(vt3226d0_lo_current_table))
- ret &= vnt_rf_write_embedded(priv,
+ if (hw_value < ARRAY_SIZE(vt3226d0_lo_current_table)) {
+ ret = vnt_rf_write_embedded(priv,
vt3226d0_lo_current_table[hw_value]);
+ if (ret)
+ return ret;
+ }
- ret &= vnt_rf_write_embedded(priv, 0x015C0800);
+ ret = vnt_rf_write_embedded(priv, 0x015C0800);
} else {
dev_dbg(&priv->usb->dev,
"@@@@ %s> 11G mode\n", __func__);
power_setting = ((0x3f - power) << 20) | (0x7 << 8);
- ret &= vnt_rf_write_embedded(priv, power_setting);
- ret &= vnt_rf_write_embedded(priv, 0x00C6A200);
- ret &= vnt_rf_write_embedded(priv, 0x016BC600);
- ret &= vnt_rf_write_embedded(priv, 0x00900800);
+ ret = vnt_rf_write_embedded(priv, power_setting);
+ if (ret)
+ return ret;
+
+ ret = vnt_rf_write_embedded(priv, 0x00C6A200);
+ if (ret)
+ return ret;
+
+ ret = vnt_rf_write_embedded(priv, 0x016BC600);
+ if (ret)
+ return ret;
+
+ ret = vnt_rf_write_embedded(priv, 0x00900800);
}
+
break;
case RF_VT3342A0:
if (power >= VT3342_PWR_IDX_LEN)
- return false;
+ return -EINVAL;
power_setting = ((0x3f - power) << 20) | (0x27 << 8);
- ret &= vnt_rf_write_embedded(priv, power_setting);
-
+ ret = vnt_rf_write_embedded(priv, power_setting);
break;
default:
break;
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 2/5] staging: vt6656: Use BIT() macro instead of bit shift operator
2020-04-14 15:38 [PATCH 0/5] staging: vt6656: Rebase all rejected patches Oscar Carter
2020-04-14 15:38 ` [PATCH 1/5] staging: vt6656: Return error code in vnt_rf_write_embedded function Oscar Carter
@ 2020-04-14 15:38 ` Oscar Carter
2020-04-14 15:38 ` [PATCH 3/5] staging: vt6656: Use define instead of magic number for tx_rate Oscar Carter
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Oscar Carter @ 2020-04-14 15:38 UTC (permalink / raw)
To: Forest Bond, Greg Kroah-Hartman
Cc: Oscar Carter, Quentin Deslandes, Malcolm Priestley,
Dan Carpenter, Amir Mahdi Ghorbanian, John B. Wyatt IV,
Colin Ian King, devel, linux-kernel
Use the BIT() macro instead of the bit left shift operator. So the code
is more clear.
It's safe to remove the casting to u16 type because the value obtained
never exceeds 16 bits. So the casting is unnecessary.
Signed-off-by: Oscar Carter <oscar.carter@gmx.com>
---
drivers/staging/vt6656/card.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c
index 9bd37e57c727..f8bfadd4b506 100644
--- a/drivers/staging/vt6656/card.c
+++ b/drivers/staging/vt6656/card.c
@@ -228,7 +228,7 @@ void vnt_update_top_rates(struct vnt_private *priv)
/*Determines the highest basic rate.*/
for (i = RATE_54M; i >= RATE_6M; i--) {
- if (priv->basic_rates & (u16)(1 << i)) {
+ if (priv->basic_rates & BIT(i)) {
top_ofdm = i;
break;
}
@@ -237,7 +237,7 @@ void vnt_update_top_rates(struct vnt_private *priv)
priv->top_ofdm_basic_rate = top_ofdm;
for (i = RATE_11M;; i--) {
- if (priv->basic_rates & (u16)(1 << i)) {
+ if (priv->basic_rates & BIT(i)) {
top_cck = i;
break;
}
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 3/5] staging: vt6656: Use define instead of magic number for tx_rate
2020-04-14 15:38 [PATCH 0/5] staging: vt6656: Rebase all rejected patches Oscar Carter
2020-04-14 15:38 ` [PATCH 1/5] staging: vt6656: Return error code in vnt_rf_write_embedded function Oscar Carter
2020-04-14 15:38 ` [PATCH 2/5] staging: vt6656: Use BIT() macro instead of bit shift operator Oscar Carter
@ 2020-04-14 15:38 ` Oscar Carter
2020-04-14 15:38 ` [PATCH 4/5] staging: vt6656: Refactor the assignment of the phy->signal variable Oscar Carter
2020-04-14 15:38 ` [PATCH 5/5] staging: vt6656: Remove duplicate code for the phy->service assignment Oscar Carter
4 siblings, 0 replies; 6+ messages in thread
From: Oscar Carter @ 2020-04-14 15:38 UTC (permalink / raw)
To: Forest Bond, Greg Kroah-Hartman
Cc: Oscar Carter, Quentin Deslandes, Malcolm Priestley,
Dan Carpenter, Amir Mahdi Ghorbanian, John B. Wyatt IV,
Colin Ian King, devel, linux-kernel
Use the define RATE_11M present in the file "device.h" instead of the
magic number 3. So the code is more clear.
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Oscar Carter <oscar.carter@gmx.com>
---
drivers/staging/vt6656/baseband.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
index e0352405e4cf..149c9bba7108 100644
--- a/drivers/staging/vt6656/baseband.c
+++ b/drivers/staging/vt6656/baseband.c
@@ -24,6 +24,7 @@
#include <linux/bits.h>
#include <linux/kernel.h>
+#include "device.h"
#include "mac.h"
#include "baseband.h"
#include "rf.h"
@@ -221,7 +222,7 @@ unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type,
rate = (unsigned int)vnt_frame_time[tx_rate];
- if (tx_rate <= 3) {
+ if (tx_rate <= RATE_11M) {
if (preamble_type == PREAMBLE_SHORT)
preamble = 96;
else
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 4/5] staging: vt6656: Refactor the assignment of the phy->signal variable
2020-04-14 15:38 [PATCH 0/5] staging: vt6656: Rebase all rejected patches Oscar Carter
` (2 preceding siblings ...)
2020-04-14 15:38 ` [PATCH 3/5] staging: vt6656: Use define instead of magic number for tx_rate Oscar Carter
@ 2020-04-14 15:38 ` Oscar Carter
2020-04-14 15:38 ` [PATCH 5/5] staging: vt6656: Remove duplicate code for the phy->service assignment Oscar Carter
4 siblings, 0 replies; 6+ messages in thread
From: Oscar Carter @ 2020-04-14 15:38 UTC (permalink / raw)
To: Forest Bond, Greg Kroah-Hartman
Cc: Oscar Carter, Quentin Deslandes, Malcolm Priestley,
Dan Carpenter, Amir Mahdi Ghorbanian, John B. Wyatt IV,
Colin Ian King, devel, linux-kernel
Create a constant array with the values of the "phy->signal" for every
rate. Remove all "phy->signal" assignments inside the switch statement
and replace these with a single reading from the new vnt_phy_signal
array.
The constant array can be of one dimension because the OR mask with
BIT(3) or BIT(4) allow obtain a second value according to the rate,
the preamble_type and the pkt_type.
Signed-off-by: Oscar Carter <oscar.carter@gmx.com>
---
drivers/staging/vt6656/baseband.c | 105 ++++++++----------------------
1 file changed, 26 insertions(+), 79 deletions(-)
diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
index 149c9bba7108..3b6f2bcf91a7 100644
--- a/drivers/staging/vt6656/baseband.c
+++ b/drivers/staging/vt6656/baseband.c
@@ -196,6 +196,21 @@ static const struct vnt_threshold vt3342_vnt_threshold[] = {
{41, 0xff, 0x00}
};
+static const u8 vnt_phy_signal[] = {
+ 0x00, /* RATE_1M */
+ 0x01, /* RATE_2M */
+ 0x02, /* RATE_5M */
+ 0x03, /* RATE_11M */
+ 0x8b, /* RATE_6M */
+ 0x8f, /* RATE_9M */
+ 0x8a, /* RATE_12M */
+ 0x8e, /* RATE_18M */
+ 0x89, /* RATE_24M */
+ 0x8d, /* RATE_36M */
+ 0x88, /* RATE_48M */
+ 0x8c /* RATE_54M */
+};
+
/*
* Description: Calculate data frame transmitting time
*
@@ -264,6 +279,8 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
u32 count = 0;
u32 tmp;
int ext_bit;
+ int i;
+ u8 mask = 0;
u8 preamble_type = priv->preamble_type;
bit_count = frame_length * 8;
@@ -272,27 +289,12 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
switch (tx_rate) {
case RATE_1M:
count = bit_count;
-
- phy->signal = 0x00;
-
break;
case RATE_2M:
count = bit_count / 2;
-
- if (preamble_type == PREAMBLE_SHORT)
- phy->signal = 0x09;
- else
- phy->signal = 0x01;
-
break;
case RATE_5M:
count = DIV_ROUND_UP(bit_count * 10, 55);
-
- if (preamble_type == PREAMBLE_SHORT)
- phy->signal = 0x0a;
- else
- phy->signal = 0x02;
-
break;
case RATE_11M:
count = bit_count / 11;
@@ -305,75 +307,20 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
ext_bit = true;
}
- if (preamble_type == PREAMBLE_SHORT)
- phy->signal = 0x0b;
- else
- phy->signal = 0x03;
-
- break;
- case RATE_6M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9b;
- else
- phy->signal = 0x8b;
-
- break;
- case RATE_9M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9f;
- else
- phy->signal = 0x8f;
-
- break;
- case RATE_12M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9a;
- else
- phy->signal = 0x8a;
-
break;
- case RATE_18M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9e;
- else
- phy->signal = 0x8e;
-
- break;
- case RATE_24M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x99;
- else
- phy->signal = 0x89;
-
- break;
- case RATE_36M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9d;
- else
- phy->signal = 0x8d;
-
- break;
- case RATE_48M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x98;
- else
- phy->signal = 0x88;
+ }
- break;
- case RATE_54M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9c;
- else
- phy->signal = 0x8c;
- break;
- default:
+ if (tx_rate > RATE_11M) {
if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9c;
- else
- phy->signal = 0x8c;
- break;
+ mask = BIT(4);
+ } else if (tx_rate > RATE_1M) {
+ if (preamble_type == PREAMBLE_SHORT)
+ mask = BIT(3);
}
+ i = tx_rate > RATE_54M ? RATE_54M : tx_rate;
+ phy->signal = vnt_phy_signal[i] | mask;
+
if (pkt_type == PK_TYPE_11B) {
phy->service = 0x00;
if (ext_bit)
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 5/5] staging: vt6656: Remove duplicate code for the phy->service assignment
2020-04-14 15:38 [PATCH 0/5] staging: vt6656: Rebase all rejected patches Oscar Carter
` (3 preceding siblings ...)
2020-04-14 15:38 ` [PATCH 4/5] staging: vt6656: Refactor the assignment of the phy->signal variable Oscar Carter
@ 2020-04-14 15:38 ` Oscar Carter
4 siblings, 0 replies; 6+ messages in thread
From: Oscar Carter @ 2020-04-14 15:38 UTC (permalink / raw)
To: Forest Bond, Greg Kroah-Hartman
Cc: Oscar Carter, Quentin Deslandes, Malcolm Priestley,
Dan Carpenter, Amir Mahdi Ghorbanian, John B. Wyatt IV,
Colin Ian King, devel, linux-kernel
Take out the "phy->service" assignment from the if-else statement due to
it's the same for the two branches.
Signed-off-by: Oscar Carter <oscar.carter@gmx.com>
---
drivers/staging/vt6656/baseband.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
index 3b6f2bcf91a7..13b91d7fc6db 100644
--- a/drivers/staging/vt6656/baseband.c
+++ b/drivers/staging/vt6656/baseband.c
@@ -320,14 +320,13 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
i = tx_rate > RATE_54M ? RATE_54M : tx_rate;
phy->signal = vnt_phy_signal[i] | mask;
+ phy->service = 0x00;
if (pkt_type == PK_TYPE_11B) {
- phy->service = 0x00;
if (ext_bit)
phy->service |= 0x80;
phy->len = cpu_to_le16((u16)count);
} else {
- phy->service = 0x00;
phy->len = cpu_to_le16((u16)frame_length);
}
}
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread