diff --git a/cmd_parser.c b/cmd_parser.c index ef06898..a7d03d7 100644 --- a/cmd_parser.c +++ b/cmd_parser.c @@ -428,7 +428,7 @@ void cmd_parser(void) __banked if (cmd_compare(0, "gpio")) { for (uint8_t idx = 0; idx < 3; idx++) { - reg_read(RTL837X_REG_GPIO_A + (idx * 4)); + reg_read(RTL837X_REG_GPIO_32_63_OUTPUT + (idx * 4)); print_string("GPIO "); write_char(idx + 'A'); write_char(':'); diff --git a/rtl837x_port.c b/rtl837x_port.c index f999196..4383bf0 100644 --- a/rtl837x_port.c +++ b/rtl837x_port.c @@ -423,13 +423,13 @@ void port_stats_print(void) __banked break; } } else { // An SFP Module TODO: This is for 1 module devices - reg_read_m(RTL837X_REG_GPIO_B); + reg_read_m(RTL837X_REG_GPIO_00_31_INPUT); if (!(sfr_data[0] & 0x40)) { print_string("SFP OK\t"); } else { print_string("NO SFP\t"); } - reg_read_m(RTL837X_REG_GPIO_C); + reg_read_m(RTL837X_REG_GPIO_32_63_INPUT); if (sfr_data[3] & 0x20) { print_string("Down\t"); } else { diff --git a/rtl837x_regs.h b/rtl837x_regs.h index a07f2be..58b09b7 100644 --- a/rtl837x_regs.h +++ b/rtl837x_regs.h @@ -44,19 +44,24 @@ * Pin configuration (pinmux) */ -#define RTL837X_PIN_MUX_A 0x7f8c -#define RTL837X_PIN_MUX_B 0x7f90 +#define RTL837X_PIN_MUX_0 0x7f8c +#define RTL837X_PIN_MUX_1 0x7f90 -#define RTL837X_REG_GPIO_A 0x40 +// Output Registers +#define RTL837X_REG_GPIO_00_31_OUTPUT 0x3c +#define RTL837X_REG_GPIO_32_63_OUTPUT 0x40 // BIT 4 resets RTL8224 on 9000-9XH -#define RTL837X_REG_GPIO_B 0x44 +// Input Registers +#define RTL837X_REG_GPIO_00_31_INPUT 0x44 +#define RTL837X_REG_GPIO_32_63_INPUT 0x48 // Bit 1e cleared: SFP Module inserted on 9000-6XH (MOD_DEF0 pin) -#define RTL837X_REG_GPIO_C 0x48 // BIT 5 set: SIGNAL LOS of SFP module on 9000-6XH (RX_LOS pin) -#define RTL837X_REG_GPIO_CONF_A 0x50 +// Direction Registers, 0 = input, 1 = output +#define RTL837X_REG_GPIO_00_31_DIRECTION 0x4c +#define RTL837X_REG_GPIO_32_63_DIRECTION 0x50 // Configures IO direction for bank a #define RTL837X_REG_GPIO_EXT 0x63e8 diff --git a/rtlplayground.c b/rtlplayground.c index c140362..dcff1f9 100644 --- a/rtlplayground.c +++ b/rtlplayground.c @@ -873,7 +873,7 @@ void sfp_print_info(uint8_t sfp) void handle_sfp(void) { - reg_read_m(RTL837X_REG_GPIO_B); + reg_read_m(RTL837X_REG_GPIO_00_31_INPUT); if ((sfp_pins_last & 0x1) && (!(sfr_data[0] & 0x40))) { sfp_pins_last &= ~0x01; print_string("\n "); @@ -893,7 +893,7 @@ void handle_sfp(void) print_string("\n\n"); } - reg_read_m(RTL837X_REG_GPIO_C); + reg_read_m(RTL837X_REG_GPIO_32_63_INPUT); if ((sfp_pins_last & 0x2) && (!(sfr_data[3] & 0x20))) { sfp_pins_last &= ~0x02; print_string("\n\n"); @@ -903,7 +903,7 @@ void handle_sfp(void) print_string("\n\n"); } - reg_read_m(RTL837X_REG_GPIO_C); + reg_read_m(RTL837X_REG_GPIO_32_63_INPUT); if ((sfp_pins_last & 0x10) && (!(sfr_data[1] & 0x04))) { sfp_pins_last &= ~0x10; print_string("\n "); @@ -989,7 +989,7 @@ void idle(void) handle_sfp(); /* Button pressed on KL-8xhm-x2: - reg_read(RTL837X_REG_GPIO_C); + reg_read(RTL837X_REG_GPIO_32_63_INPUT); if (!(sfr_data[2] & 0x40)) print_string("Button pressed\n"); */ @@ -1038,12 +1038,12 @@ void setup_external_irqs(void) void rtl8224_enable(void) { // Set Pin 4 low - reg_bit_clear(RTL837X_REG_GPIO_A, 4); + reg_bit_clear(RTL837X_REG_GPIO_32_63_OUTPUT, 4); // Configure Pin as output - reg_bit_set(RTL837X_REG_GPIO_CONF_A, 4); + reg_bit_set(RTL837X_REG_GPIO_32_63_DIRECTION, 4); delay(100); // Set pin 4 high - reg_bit_set(RTL837X_REG_GPIO_A, 4); + reg_bit_set(RTL837X_REG_GPIO_32_63_OUTPUT, 4); delay(500); } @@ -1064,9 +1064,9 @@ void setup_clock(void) reg_write_m(RTL837X_REG_HW_CONF); // Enable serial interface, set bit 0 - reg_read_m(RTL837X_PIN_MUX_B); + reg_read_m(RTL837X_PIN_MUX_1); sfr_mask_data(0, 0x1, 0x1); - reg_write_m(RTL837X_PIN_MUX_B); + reg_write_m(RTL837X_PIN_MUX_1); } @@ -1286,7 +1286,7 @@ void led_config_9xh(void) reg_bit_clear(0x65dc, 0x1b); // r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000 - reg_bit_set(RTL837X_PIN_MUX_A, 0x1b); + reg_bit_set(RTL837X_PIN_MUX_0, 0x1b); // R6548-0041017f REG_SET(0x6548, 0x0041017f); @@ -1338,13 +1338,13 @@ void led_config(void) // Set bits 1b/1d of 0x7f8c: r7f8c:30000000 R7f8c-30000000 r7f8c:30000000 R7f8c-38000000 if (nSFPPorts == 2) { - reg_bit_set(RTL837X_PIN_MUX_A, 0x1b); // R7f8c-28000000 - reg_bit_clear(RTL837X_PIN_MUX_A, 0x1c); // R7f8c-28000000 - reg_bit_set(RTL837X_PIN_MUX_A, 0x1d); // R7f8c-28000000 + reg_bit_set(RTL837X_PIN_MUX_0, 0x1b); // R7f8c-28000000 + reg_bit_clear(RTL837X_PIN_MUX_0, 0x1c); // R7f8c-28000000 + reg_bit_set(RTL837X_PIN_MUX_0, 0x1d); // R7f8c-28000000 } else { - reg_bit_set(RTL837X_PIN_MUX_A, 0x1d); - reg_bit_set(RTL837X_PIN_MUX_A, 0x1c); - reg_bit_set(RTL837X_PIN_MUX_A, 0x1b); + reg_bit_set(RTL837X_PIN_MUX_0, 0x1d); + reg_bit_set(RTL837X_PIN_MUX_0, 0x1c); + reg_bit_set(RTL837X_PIN_MUX_0, 0x1b); } // LED setup // r6520:0021fdb0 R6520-0021e7b0 r6520:0021e7b0 R6520-0021e6b0 r65f8:00000018 R65f8-00000018 R65fc-fffff000 r6600:00000000 R6600-0000000f r65dc:5fffff00 R65dc-7fffff00 r65dc:7fffff00 R65dc-77ffff00 @@ -1620,10 +1620,10 @@ void setup_i2c(void) REG_SET(0x041c, 0); // HW Control register, enable I2C? - reg_read_m(RTL837X_PIN_MUX_B); + reg_read_m(RTL837X_PIN_MUX_1); sfr_mask_data(3, 0x20, 0x00); // Clear bit 29 sfr_mask_data(0, 0x60, 0x40); // Set bits 5-6 to 0b10 - reg_write_m(RTL837X_PIN_MUX_B); + reg_write_m(RTL837X_PIN_MUX_1); }