diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 0a0627c10f..d266bef6c7 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -1022,6 +1022,8 @@ bool dbg_ports(void) #elif CONFIG_CPU == PP5020 unsigned int gpio_a, gpio_b, gpio_c, gpio_d; + unsigned int gpio_e, gpio_f, gpio_g, gpio_h; + unsigned int gpio_i, gpio_j, gpio_k, gpio_l; char buf[128]; int button; @@ -1049,7 +1051,37 @@ bool dbg_ports(void) lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "GPIO_D: %02x", gpio_d); lcd_puts(0, line++, buf); - + line++; + + gpio_e = GPIOE_INPUT_VAL; + gpio_f = GPIOF_INPUT_VAL; + gpio_g = GPIOG_INPUT_VAL; + gpio_h = GPIOH_INPUT_VAL; + + snprintf(buf, sizeof(buf), "GPIO_E: %02x", gpio_e); + lcd_puts(0, line++, buf); + snprintf(buf, sizeof(buf), "GPIO_F: %02x", gpio_f); + lcd_puts(0, line++, buf); + snprintf(buf, sizeof(buf), "GPIO_G: %02x", gpio_g); + lcd_puts(0, line++, buf); + snprintf(buf, sizeof(buf), "GPIO_H: %02x", gpio_h); + lcd_puts(0, line++, buf); + line++; + + gpio_i = GPIOI_INPUT_VAL; + gpio_j = GPIOJ_INPUT_VAL; + gpio_k = GPIOK_INPUT_VAL; + gpio_l = GPIOL_INPUT_VAL; + + snprintf(buf, sizeof(buf), "GPIO_I: %02x", gpio_i); + lcd_puts(0, line++, buf); + snprintf(buf, sizeof(buf), "GPIO_J: %02x", gpio_j); + lcd_puts(0, line++, buf); + snprintf(buf, sizeof(buf), "GPIO_K: %02x", gpio_k); + lcd_puts(0, line++, buf); + snprintf(buf, sizeof(buf), "GPIO_L: %02x", gpio_l); + lcd_puts(0, line++, buf); + lcd_update(); button = button_get_w_tmo(HZ/10); @@ -1309,9 +1341,40 @@ bool view_battery(void) lcd_puts(0, 6, buf); lcd_puts(0, 7, power_message); #else /* !HAVE_CHARGE_CTRL */ +#if defined IPOD_ARCH +#if defined APPLE_IPODNANO || defined APPLE_IPODVIDEO + int usb_pwr = (GPIOL_INPUT_VAL & 0x10)?true:false; + int ext_pwr = (GPIOL_INPUT_VAL & 0x08)?false:true; + int dock = (GPIOA_INPUT_VAL & 0x10)?true:false; + int charging = (GPIOB_INPUT_VAL & 0x01)?false:true; + int headphone= (GPIOA_INPUT_VAL & 0x80)?true:false; + + snprintf(buf, 30, "USB pwr: %s", + usb_pwr ? "present" : "absent"); + lcd_puts(0, 3, buf); + snprintf(buf, 30, "EXT pwr: %s", + ext_pwr ? "present" : "absent"); + lcd_puts(0, 4, buf); + snprintf(buf, 30, "Battery: %s", + charging ? "charging" : (usb_pwr||ext_pwr) ? "charged" : "discharging"); + lcd_puts(0, 5, buf); + snprintf(buf, 30, "Dock mode: %s", + dock ? "enabled" : "disabled"); + lcd_puts(0, 6, buf); + snprintf(buf, 30, "Headphone: %s", + headphone ? "connected" : "disconnected"); + lcd_puts(0, 7, buf); +#else + /* other ipod devices go here */ snprintf(buf, 30, "Charger: %s", charger_inserted() ? "present" : "absent"); lcd_puts(0, 3, buf); +#endif +#elif + snprintf(buf, 30, "Charger: %s", + charger_inserted() ? "present" : "absent"); + lcd_puts(0, 3, buf); +#endif #endif /* !HAVE_CHARGE_CTRL */ #endif /* HAVE_CHARGING */ break; diff --git a/firmware/export/pp5020.h b/firmware/export/pp5020.h index 9e3097d1e9..cfeb8642b8 100644 --- a/firmware/export/pp5020.h +++ b/firmware/export/pp5020.h @@ -56,6 +56,72 @@ #define GPIOC_INT_CLR (*(volatile unsigned long *)(0x6000d078)) #define GPIOD_INT_CLR (*(volatile unsigned long *)(0x6000d07c)) +#define GPIOE_ENABLE (*(volatile unsigned long *)(0x6000d080)) +#define GPIOF_ENABLE (*(volatile unsigned long *)(0x6000d084)) +#define GPIOG_ENABLE (*(volatile unsigned long *)(0x6000d088)) +#define GPIOH_ENABLE (*(volatile unsigned long *)(0x6000d08c)) +#define GPIOE_OUTPUT_EN (*(volatile unsigned long *)(0x6000d090)) +#define GPIOF_OUTPUT_EN (*(volatile unsigned long *)(0x6000d094)) +#define GPIOG_OUTPUT_EN (*(volatile unsigned long *)(0x6000d098)) +#define GPIOH_OUTPUT_EN (*(volatile unsigned long *)(0x6000d09c)) +#define GPIOE_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d0a0)) +#define GPIOF_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d0a4)) +#define GPIOG_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d0a8)) +#define GPIOH_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d0ac)) +#define GPIOE_INPUT_VAL (*(volatile unsigned long *)(0x6000d0b0)) +#define GPIOF_INPUT_VAL (*(volatile unsigned long *)(0x6000d0b4)) +#define GPIOG_INPUT_VAL (*(volatile unsigned long *)(0x6000d0b8)) +#define GPIOH_INPUT_VAL (*(volatile unsigned long *)(0x6000d0bc)) +#define GPIOE_INT_STAT (*(volatile unsigned long *)(0x6000d0c0)) +#define GPIOF_INT_STAT (*(volatile unsigned long *)(0x6000d0c4)) +#define GPIOG_INT_STAT (*(volatile unsigned long *)(0x6000d0c8)) +#define GPIOH_INT_STAT (*(volatile unsigned long *)(0x6000d0cc)) +#define GPIOE_INT_EN (*(volatile unsigned long *)(0x6000d0d0)) +#define GPIOF_INT_EN (*(volatile unsigned long *)(0x6000d0d4)) +#define GPIOG_INT_EN (*(volatile unsigned long *)(0x6000d0d8)) +#define GPIOH_INT_EN (*(volatile unsigned long *)(0x6000d0dc)) +#define GPIOE_INT_LEV (*(volatile unsigned long *)(0x6000d0e0)) +#define GPIOF_INT_LEV (*(volatile unsigned long *)(0x6000d0e4)) +#define GPIOG_INT_LEV (*(volatile unsigned long *)(0x6000d0e8)) +#define GPIOH_INT_LEV (*(volatile unsigned long *)(0x6000d0ec)) +#define GPIOE_INT_CLR (*(volatile unsigned long *)(0x6000d0f0)) +#define GPIOF_INT_CLR (*(volatile unsigned long *)(0x6000d0f4)) +#define GPIOG_INT_CLR (*(volatile unsigned long *)(0x6000d0f8)) +#define GPIOH_INT_CLR (*(volatile unsigned long *)(0x6000d0fc)) + +#define GPIOI_ENABLE (*(volatile unsigned long *)(0x6000d100)) +#define GPIOJ_ENABLE (*(volatile unsigned long *)(0x6000d104)) +#define GPIOK_ENABLE (*(volatile unsigned long *)(0x6000d108)) +#define GPIOL_ENABLE (*(volatile unsigned long *)(0x6000d10c)) +#define GPIOI_OUTPUT_EN (*(volatile unsigned long *)(0x6000d110)) +#define GPIOJ_OUTPUT_EN (*(volatile unsigned long *)(0x6000d114)) +#define GPIOK_OUTPUT_EN (*(volatile unsigned long *)(0x6000d118)) +#define GPIOL_OUTPUT_EN (*(volatile unsigned long *)(0x6000d11c)) +#define GPIOI_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d120)) +#define GPIOJ_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d124)) +#define GPIOK_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d128)) +#define GPIOL_OUTPUT_VAL (*(volatile unsigned long *)(0x6000d12c)) +#define GPIOI_INPUT_VAL (*(volatile unsigned long *)(0x6000d130)) +#define GPIOJ_INPUT_VAL (*(volatile unsigned long *)(0x6000d134)) +#define GPIOK_INPUT_VAL (*(volatile unsigned long *)(0x6000d138)) +#define GPIOL_INPUT_VAL (*(volatile unsigned long *)(0x6000d13c)) +#define GPIOI_INT_STAT (*(volatile unsigned long *)(0x6000d140)) +#define GPIOJ_INT_STAT (*(volatile unsigned long *)(0x6000d144)) +#define GPIOK_INT_STAT (*(volatile unsigned long *)(0x6000d148)) +#define GPIOL_INT_STAT (*(volatile unsigned long *)(0x6000d14c)) +#define GPIOI_INT_EN (*(volatile unsigned long *)(0x6000d150)) +#define GPIOJ_INT_EN (*(volatile unsigned long *)(0x6000d154)) +#define GPIOK_INT_EN (*(volatile unsigned long *)(0x6000d158)) +#define GPIOL_INT_EN (*(volatile unsigned long *)(0x6000d15c)) +#define GPIOI_INT_LEV (*(volatile unsigned long *)(0x6000d160)) +#define GPIOJ_INT_LEV (*(volatile unsigned long *)(0x6000d164)) +#define GPIOK_INT_LEV (*(volatile unsigned long *)(0x6000d168)) +#define GPIOL_INT_LEV (*(volatile unsigned long *)(0x6000d16c)) +#define GPIOI_INT_CLR (*(volatile unsigned long *)(0x6000d170)) +#define GPIOJ_INT_CLR (*(volatile unsigned long *)(0x6000d174)) +#define GPIOK_INT_CLR (*(volatile unsigned long *)(0x6000d178)) +#define GPIOL_INT_CLR (*(volatile unsigned long *)(0x6000d17c)) + #define DEV_RS (*(volatile unsigned long *)(0x60006004)) #define DEV_EN (*(volatile unsigned long *)(0x6000600c))