@@ -289,6 +289,8 @@ static int phy_mc_vsc8541_init(const struct device *dev)
289
289
290
290
data -> active_page = -1 ;
291
291
292
+ k_mutex_init (& data -> mutex );
293
+
292
294
/* Reset PHY */
293
295
ret = phy_mc_vsc8541_reset (dev );
294
296
if (ret < 0 ) {
@@ -366,8 +368,6 @@ static int phy_mc_vsc8541_link_cb_set(const struct device *dev, phy_callback_t c
366
368
data -> cb = cb ;
367
369
data -> cb_data = user_data ;
368
370
369
- phy_mc_vsc8541_get_link (dev , & data -> state );
370
-
371
371
data -> cb (dev , & data -> state , data -> cb_data );
372
372
373
373
return 0 ;
@@ -427,22 +427,24 @@ static int phy_mc_vsc8541_read(const struct device *dev, uint16_t reg_addr, uint
427
427
/* mask out lower byte */
428
428
reg_addr &= 0x00ff ;
429
429
430
+ k_mutex_lock (& dev_data -> mutex , K_FOREVER );
431
+
430
432
/* select page, given by register upper byte */
431
433
if (dev_data -> active_page != page ) {
432
434
ret = mdio_write (cfg -> mdio_dev , cfg -> addr , PHY_REG_PAGE_SELECTOR , (uint16_t )page );
433
- if (ret ) {
434
- return ret ;
435
+ if (ret < 0 ) {
436
+ goto read_end ;
435
437
}
436
438
dev_data -> active_page = (int )page ;
437
439
}
438
440
439
441
/* select register, given by register lower byte */
440
442
ret = mdio_read (cfg -> mdio_dev , cfg -> addr , reg_addr , (uint16_t * )data );
441
- if (ret ) {
442
- return ret ;
443
- }
444
443
445
- return 0 ;
444
+ read_end :
445
+ k_mutex_unlock (& dev_data -> mutex );
446
+
447
+ return ret ;
446
448
}
447
449
448
450
/**
@@ -465,22 +467,24 @@ static int phy_mc_vsc8541_write(const struct device *dev, uint16_t reg_addr, uin
465
467
/* mask out lower byte */
466
468
reg_addr &= 0x00ff ;
467
469
470
+ k_mutex_lock (& dev_data -> mutex , K_FOREVER );
471
+
468
472
/* select page, given by register upper byte */
469
473
if (dev_data -> active_page != page ) {
470
474
ret = mdio_write (cfg -> mdio_dev , cfg -> addr , PHY_REG_PAGE_SELECTOR , (uint16_t )page );
471
- if (ret ) {
472
- return ret ;
475
+ if (ret < 0 ) {
476
+ goto write_end ;
473
477
}
474
478
dev_data -> active_page = (int )page ;
475
479
}
476
480
477
481
/* write register, given by lower byte */
478
482
ret = mdio_write (cfg -> mdio_dev , cfg -> addr , reg_addr , (uint16_t )data );
479
- if (ret ) {
480
- return ret ;
481
- }
482
483
483
- return 0 ;
484
+ write_end :
485
+ k_mutex_unlock (& dev_data -> mutex );
486
+
487
+ return ret ;
484
488
}
485
489
486
490
static DEVICE_API (ethphy , mc_vsc8541_phy_api ) = {
0 commit comments