int32 smi_init(uint32 port, uint32 pinSCK, uint32 pinSDA) { gpioID gpioId; int32 res; /* change GPIO pin to Input only */ /* Initialize GPIO port C, pin 0 as SMI SDA0 */ gpioId = GPIO_ID(port, pinSDA); res = _rtl865x_initGpioPin(gpioId, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); if (res != SUCCESS) return res; smi_SDA = gpioId; /* Initialize GPIO port C, pin 1 as SMI SCK0 */ gpioId = GPIO_ID(port, pinSCK); res = _rtl865x_initGpioPin(gpioId, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); if (res != SUCCESS) return res; smi_SCK = gpioId; _rtl865x_setGpioDataBit(smi_SDA, 1); _rtl865x_setGpioDataBit(smi_SCK, 1); return SUCCESS; }
rtk_int32 smi_init(rtk_uint32 port, rtk_uint32 pinSCK, rtk_uint32 pinSDA) { #if defined(MDC_MDIO_OPERATION) || defined(SPI_OPERATION) #else gpioID gpioId; rtk_int32 res; /* change GPIO pin to Input only */ /* Initialize GPIO port C, pin 0 as SMI SDA0 */ gpioId = GPIO_ID(port, pinSDA); res = _rtl865x_initGpioPin(gpioId, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); if (res != RT_ERR_OK) return res; smi_SDA = gpioId; /* Initialize GPIO port C, pin 1 as SMI SCK0 */ gpioId = GPIO_ID(port, pinSCK); res = _rtl865x_initGpioPin(gpioId, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); if (res != RT_ERR_OK) return res; smi_SCK = gpioId; _rtl865x_setGpioDataBit(smi_SDA, 1); _rtl865x_setGpioDataBit(smi_SCK, 1); #endif return RT_ERR_OK; }
rtk_int32 smi_reset(rtk_uint32 port, rtk_uint32 pinRST) { #if defined(MDC_MDIO_OPERATION) || defined(SPI_OPERATION) #else gpioID gpioId; rtk_int32 res; /* Initialize GPIO port A, pin 7 as SMI RESET */ gpioId = GPIO_ID(port, pinRST); res = _rtl865x_initGpioPin(gpioId, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); if (res != RT_ERR_OK) return res; smi_RST = gpioId; _rtl865x_setGpioDataBit(smi_RST, 1); CLK_DURATION(1000000); _rtl865x_setGpioDataBit(smi_RST, 0); CLK_DURATION(1000000); _rtl865x_setGpioDataBit(smi_RST, 1); CLK_DURATION(1000000); /* change GPIO pin to Input only */ _rtl865x_initGpioPin(smi_RST, GPIO_PERI_GPIO, GPIO_DIR_IN, GPIO_INT_DISABLE); #endif return RT_ERR_OK; }
void smi_init_gpio_realtek(void) { _rtl865x_initGpioPin(smi_SDA, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); _rtl865x_initGpioPin(smi_SCK, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); _rtl865x_setGpioDataBit(smi_SDA, 1); _rtl865x_setGpioDataBit(smi_SCK, 1); }
void _smi_start(void) { /* change GPIO pin to Output only */ _rtl865x_initGpioPin(smi_SDA, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); _rtl865x_initGpioPin(smi_SCK, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); /* Initial state: SCK: 0, SDA: 1 */ _rtl865x_setGpioDataBit(smi_SCK, 0); _rtl865x_setGpioDataBit(smi_SDA, 1); CLK_DURATION(DELAY); /* CLK 1: 0 -> 1, 1 -> 0 */ _rtl865x_setGpioDataBit(smi_SCK, 1); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 0); CLK_DURATION(DELAY); /* CLK 2: */ _rtl865x_setGpioDataBit(smi_SCK, 1); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SDA, 0); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 0); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SDA, 1); }
void _smi_stop(void) { CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SDA, 0); _rtl865x_setGpioDataBit(smi_SCK, 1); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SDA, 1); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 1); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 0); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 1); /* add a click */ CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 0); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 1); /* change GPIO pin to Output only */ _rtl865x_initGpioPin(smi_SDA, GPIO_PERI_GPIO, GPIO_DIR_IN, GPIO_INT_DISABLE); _rtl865x_initGpioPin(smi_SCK, GPIO_PERI_GPIO, GPIO_DIR_IN, GPIO_INT_DISABLE); }
void _smi_writeBit(uint16 signal, uint32 bitLen) { for( ; bitLen > 0; bitLen--) { CLK_DURATION(DELAY); /* prepare data */ if ( signal & (1<<(bitLen-1)) ) _rtl865x_setGpioDataBit(smi_SDA, 1); else _rtl865x_setGpioDataBit(smi_SDA, 0); CLK_DURATION(DELAY); /* clocking */ _rtl865x_setGpioDataBit(smi_SCK, 1); CLK_DURATION(DELAY); _rtl865x_setGpioDataBit(smi_SCK, 0); } }
void _smi_readBit(uint32 bitLen, uint32 *rData) { uint32 u; /* change GPIO pin to Input only */ _rtl865x_initGpioPin(smi_SDA, GPIO_PERI_GPIO, GPIO_DIR_IN, GPIO_INT_DISABLE); for (*rData = 0; bitLen > 0; bitLen--) { CLK_DURATION(DELAY); /* clocking */ _rtl865x_setGpioDataBit(smi_SCK, 1); CLK_DURATION(DELAY); _rtl865x_getGpioDataBit(smi_SDA, &u); _rtl865x_setGpioDataBit(smi_SCK, 0); *rData |= (u << (bitLen - 1)); } /* change GPIO pin to Output only */ _rtl865x_initGpioPin(smi_SDA, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); }
int32 smi_reset(uint32 port, uint32 pinRST) { gpioID gpioId; int32 res; /* Initialize GPIO port A, pin 7 as SMI RESET */ gpioId = GPIO_ID(port, pinRST); res = _rtl865x_initGpioPin(gpioId, GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE); if (res != SUCCESS) return res; smi_RST = gpioId; _rtl865x_setGpioDataBit(smi_RST, 1); CLK_DURATION(1000000); _rtl865x_setGpioDataBit(smi_RST, 0); CLK_DURATION(1000000); _rtl865x_setGpioDataBit(smi_RST, 1); CLK_DURATION(1000000); /* change GPIO pin to Input only */ _rtl865x_initGpioPin(smi_RST, GPIO_PERI_GPIO, GPIO_DIR_IN, GPIO_INT_DISABLE); return SUCCESS; }