Index: chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/ar9003_paprd.c |
diff --git a/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/ar9003_paprd.c b/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/ar9003_paprd.c |
index 7c38229ba670a28a624ab521a02820eae581c10a..716db414c258f254263a47238f45aa9fd6c2d813 100644 |
--- a/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/ar9003_paprd.c |
+++ b/chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/ar9003_paprd.c |
@@ -347,6 +347,10 @@ static bool create_pa_curve(u32 *data_L, u32 *data_U, u32 *pa_table, u16 *gain) |
(((Y[6] - Y[3]) * 1 << scale_factor) + |
(x_est[6] - x_est[3])) / (x_est[6] - x_est[3]); |
+ /* prevent division by zero */ |
+ if (G_fxp == 0) |
+ return false; |
+ |
Y_intercept = |
(G_fxp * (x_est[0] - x_est[3]) + |
(1 << scale_factor)) / (1 << scale_factor) + Y[3]; |
@@ -356,14 +360,12 @@ static bool create_pa_curve(u32 *data_L, u32 *data_U, u32 *pa_table, u16 *gain) |
for (i = 0; i <= 3; i++) { |
y_est[i] = i * 32; |
- |
- /* prevent division by zero */ |
- if (G_fxp == 0) |
- return false; |
- |
x_est[i] = ((y_est[i] * 1 << scale_factor) + G_fxp) / G_fxp; |
} |
+ if (y_est[max_index] == 0) |
+ return false; |
+ |
x_est_fxp1_nonlin = |
x_est[max_index] - ((1 << scale_factor) * y_est[max_index] + |
G_fxp) / G_fxp; |
@@ -457,6 +459,8 @@ static bool create_pa_curve(u32 *data_L, u32 *data_U, u32 *pa_table, u16 *gain) |
Q_scale_B = find_proper_scale(find_expn(abs(scale_B)), 10); |
scale_B = scale_B / (1 << Q_scale_B); |
+ if (scale_B == 0) |
+ return false; |
Q_beta = find_proper_scale(find_expn(abs(beta_raw)), 10); |
Q_alpha = find_proper_scale(find_expn(abs(alpha_raw)), 10); |
beta_raw = beta_raw / (1 << Q_beta); |