static void kurobox_pro_power_off(void) { const unsigned char watchdogkill[] = {0x01, 0x35, 0x00}; const unsigned char shutdownwait[] = {0x00, 0x0c}; const unsigned char poweroff[] = {0x00, 0x06}; const unsigned divisor = ((orion5x_tclk + (8 * 38400)) / (16 * 38400)); pr_info("%s: triggering power-off...\n", __func__); writel(0x83, UART1_REG(LCR)); writel(divisor & 0xff, UART1_REG(DLL)); writel((divisor >> 8) & 0xff, UART1_REG(DLM)); writel(0x1b, UART1_REG(LCR)); writel(0x00, UART1_REG(IER)); writel(0x07, UART1_REG(FCR)); writel(0x00, UART1_REG(MCR)); kurobox_pro_miconsend(watchdogkill, sizeof(watchdogkill)) ; kurobox_pro_miconsend(shutdownwait, sizeof(shutdownwait)) ; kurobox_pro_miconsend(poweroff, sizeof(poweroff)); }
static void kurobox_pro_power_off(void) { const unsigned char watchdogkill[] = {0x01, 0x35, 0x00}; const unsigned char shutdownwait[] = {0x00, 0x0c}; const unsigned char poweroff[] = {0x00, 0x06}; /* 38400 baud divisor */ const unsigned divisor = ((orion5x_tclk + (8 * 38400)) / (16 * 38400)); pr_info("%s: triggering power-off...\n", __func__); /* hijack uart1 and reset into sane state (38400,8n1,even parity) */ writel(0x83, UART1_REG(LCR)); writel(divisor & 0xff, UART1_REG(DLL)); writel((divisor >> 8) & 0xff, UART1_REG(DLM)); writel(0x1b, UART1_REG(LCR)); writel(0x00, UART1_REG(IER)); writel(0x07, UART1_REG(FCR)); writel(0x00, UART1_REG(MCR)); /* Send the commands to shutdown the Kurobox Pro */ kurobox_pro_miconsend(watchdogkill, sizeof(watchdogkill)) ; kurobox_pro_miconsend(shutdownwait, sizeof(shutdownwait)) ; kurobox_pro_miconsend(poweroff, sizeof(poweroff)); }