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