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 
11 #include <rtthread.h>
12 #include "pcf8574.h"
13 
14 //#define DRV_DEBUG
15 #define LOG_TAG             "drv.pcf8574_port"
16 #include <drv_log.h>
17 
18 #define ETH_RESET_IO    7                //PHY RESET PIN
19 #define I2C_BUS_NAME    "i2c2"
20 #define PCF8574_ADDR    0x20
21 
22 /* pcf8574 hardware init */
pcf8574_hw_init(char * dev_name,int addr)23 pcf8574_device_t pcf8574_hw_init(char * dev_name, int addr)
24 {
25     static pcf8574_device_t dev;
26 
27     if (dev == RT_NULL)
28     {
29         dev = pcf8574_init(dev_name, addr);
30         if (dev == RT_NULL)
31         {
32             LOG_E("i2c_bus %s for PCF8574 not found!", dev_name);
33             return RT_NULL;
34         } else {
35             return dev;
36         }
37     } else
38     {
39         return dev;
40     }
41 }
42 
43 /* phy reset */
phy_reset(void)44 void phy_reset(void)
45 {
46     pcf8574_device_t dev = pcf8574_hw_init(I2C_BUS_NAME, PCF8574_ADDR);
47     if (dev == RT_NULL)
48     {
49         LOG_E("can't get pcf8574 device");
50         return;
51     }
52 
53     pcf8574_pin_write(dev, ETH_RESET_IO, 1);
54     rt_thread_mdelay(100);
55     pcf8574_pin_write(dev, ETH_RESET_IO, 0);
56     rt_thread_mdelay(100);
57 }
58 
59