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 "i2c1"
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