@@ -185,9 +185,21 @@ bool siwx91x_param_changed(struct wifi_iface_status *prev_params,
185
185
return false;
186
186
}
187
187
188
+ static int siwx91x_set_max_tx_power (const struct siwx91x_config * siwx91x_cfg )
189
+ {
190
+ sl_wifi_interface_t interface = sl_wifi_get_default_interface ();
191
+ sl_wifi_max_tx_power_t max_tx_power = {
192
+ .scan_tx_power = siwx91x_cfg -> scan_tx_power ,
193
+ .join_tx_power = siwx91x_cfg -> join_tx_power ,
194
+ };
195
+
196
+ return sl_wifi_set_max_tx_power (interface , max_tx_power );
197
+ }
198
+
188
199
static int siwx91x_mode (const struct device * dev , struct wifi_mode_info * mode )
189
200
{
190
201
sl_wifi_interface_t interface = sl_wifi_get_default_interface ();
202
+ const struct siwx91x_config * siwx91x_cfg = dev -> config ;
191
203
struct siwx91x_dev * sidev = dev -> data ;
192
204
int cur_mode ;
193
205
int ret = 0 ;
@@ -207,6 +219,12 @@ static int siwx91x_mode(const struct device *dev, struct wifi_mode_info *mode)
207
219
if (ret < 0 ) {
208
220
return ret ;
209
221
}
222
+
223
+ ret = siwx91x_set_max_tx_power (siwx91x_cfg );
224
+ if (ret != SL_STATUS_OK ) {
225
+ LOG_ERR ("Failed to set max tx power:%x" , ret );
226
+ return - EINVAL ;
227
+ }
210
228
}
211
229
sidev -> state = WIFI_STATE_INACTIVE ;
212
230
}
@@ -353,6 +371,7 @@ static int siwx91x_get_version(const struct device *dev, struct wifi_version *pa
353
371
354
372
static void siwx91x_iface_init (struct net_if * iface )
355
373
{
374
+ const struct siwx91x_config * siwx91x_cfg = iface -> if_dev -> dev -> config ;
356
375
struct siwx91x_dev * sidev = iface -> if_dev -> dev -> data ;
357
376
int ret ;
358
377
@@ -369,6 +388,12 @@ static void siwx91x_iface_init(struct net_if *iface)
369
388
sl_wifi_set_callback (SL_WIFI_STATS_RESPONSE_EVENTS , siwx91x_wifi_module_stats_event_handler ,
370
389
sidev );
371
390
391
+ ret = siwx91x_set_max_tx_power (siwx91x_cfg );
392
+ if (ret != SL_STATUS_OK ) {
393
+ LOG_ERR ("Failed to set max tx power:%x" , ret );
394
+ return ;
395
+ }
396
+
372
397
ret = sl_wifi_get_mac_address (SL_WIFI_CLIENT_INTERFACE , & sidev -> macaddr );
373
398
if (ret ) {
374
399
LOG_ERR ("sl_wifi_get_mac_address(): %#04x" , ret );
@@ -419,6 +444,11 @@ static const struct net_wifi_mgmt_offload siwx91x_api = {
419
444
.wifi_mgmt_api = & siwx91x_mgmt ,
420
445
};
421
446
447
+ static const struct siwx91x_config siwx91x_cfg = {
448
+ .scan_tx_power = DT_INST_PROP (0 , wifi_max_tx_pwr_scan ),
449
+ .join_tx_power = DT_INST_PROP (0 , wifi_max_tx_pwr_join ),
450
+ };
451
+
422
452
static struct siwx91x_dev sidev = {
423
453
.ps_params .enabled = WIFI_PS_DISABLED ,
424
454
.ps_params .exit_strategy = WIFI_PS_EXIT_EVERY_TIM ,
@@ -427,9 +457,9 @@ static struct siwx91x_dev sidev = {
427
457
};
428
458
429
459
#ifdef CONFIG_WIFI_SILABS_SIWX91X_NET_STACK_NATIVE
430
- ETH_NET_DEVICE_DT_INST_DEFINE (0 , siwx91x_dev_init , NULL , & sidev , NULL ,
460
+ ETH_NET_DEVICE_DT_INST_DEFINE (0 , siwx91x_dev_init , NULL , & sidev , & siwx91x_cfg ,
431
461
CONFIG_WIFI_INIT_PRIORITY , & siwx91x_api , NET_ETH_MTU );
432
462
#else
433
- NET_DEVICE_DT_INST_OFFLOAD_DEFINE (0 , siwx91x_dev_init , NULL , & sidev , NULL ,
463
+ NET_DEVICE_DT_INST_OFFLOAD_DEFINE (0 , siwx91x_dev_init , NULL , & sidev , & siwx91x_cfg ,
434
464
CONFIG_WIFI_INIT_PRIORITY , & siwx91x_api , NET_ETH_MTU );
435
465
#endif
0 commit comments