phy_reset.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-11-21 SummerGift add port file
  9. */
  10. #include <rtthread.h>
  11. #include "pcf8574.h"
  12. //#define DRV_DEBUG
  13. #define LOG_TAG "drv.pcf8574_port"
  14. #include <drv_log.h>
  15. #define ETH_RESET_IO 7 //PHY RESET PIN
  16. #define I2C_BUS_NAME "i2c2"
  17. #define PCF8574_ADDR 0x20
  18. /* pcf8574 hardware init */
  19. pcf8574_device_t pcf8574_hw_init(char * dev_name, int addr)
  20. {
  21. static pcf8574_device_t dev;
  22. if (dev == RT_NULL)
  23. {
  24. dev = pcf8574_init(dev_name, addr);
  25. if (dev == RT_NULL)
  26. {
  27. LOG_E("i2c_bus %s for PCF8574 not found!", dev_name);
  28. return RT_NULL;
  29. } else {
  30. return dev;
  31. }
  32. } else
  33. {
  34. return dev;
  35. }
  36. }
  37. /* phy reset */
  38. void phy_reset(void)
  39. {
  40. pcf8574_device_t dev = pcf8574_hw_init(I2C_BUS_NAME, PCF8574_ADDR);
  41. if (dev == RT_NULL)
  42. {
  43. LOG_E("can't get pcf8574 device");
  44. return;
  45. }
  46. pcf8574_pin_write(dev, ETH_RESET_IO, 1);
  47. rt_thread_mdelay(100);
  48. pcf8574_pin_write(dev, ETH_RESET_IO, 0);
  49. rt_thread_mdelay(100);
  50. }