Re: [PATCH v2] power: reset: add linkstation-reset driver
From: Sebastian Reichel <hidden>
Date: 2016-12-21 15:59:29
Also in:
linux-pm
Hi, On Tue, Dec 20, 2016 at 02:37:39AM +0900, Roger Shimizu wrote:
[...]quoted
quoted
+static void linkstation_reset(void) +{ + const unsigned divisor = ((tclk + (8 * cfg->baud)) / (16 * cfg->baud)); + + pr_err("%s: triggering power-off...\n", __func__); + + /* hijack UART1 and reset into sane state */ + writel(0x83, UART1_REG(LCR)); + writel(divisor & 0xff, UART1_REG(DLL)); + writel((divisor >> 8) & 0xff, UART1_REG(DLM)); + writel(cfg->magic[0], UART1_REG(LCR)); + writel(cfg->magic[1], UART1_REG(IER)); + writel(cfg->magic[2], UART1_REG(FCR)); + writel(cfg->magic[3], UART1_REG(MCR)); + + /* send the power-off command to PIC */ + if(cfg->cmd[0][0] == 1 && cfg->cmd[1][0] == 0) { + /* if it's simply one-byte command, send it directly */ + writel(cfg->cmd[0][1], UART1_REG(TX)); + }I guess this optimization can be dropped and you can directly call the for loop with uart1_micon_send().Same response regarding above two comments. The code is extensible because I want to extend in the future. Current implementation is just for Linkstation Pro / KuroBox Pro to be able to power-off. But for some other model of Linkstation, restart also need similar command via UART1. Just one example, Linkstation Pro is ARM based, but it was PowerPC based before. And the device support still exists in kernel tree: arch/powerpc/platforms/embedded6xx/linkstation.c arch/powerpc/platforms/embedded6xx/ls_uart.c It shows sending "C" to restart and sending "E" to power-off for PowerPC based Linkstation. I'm not actually interested in PowerPC based Linkstation, it's just an example to show the reason to be flexible. If other part is fine, may I send the v3 patch after merging linkstation-common.c into linkstation-reset.c? Thank you!
These models can just be added to qnap-poweroff, which handles exactly this special case as far as I can see. -- Sebastian
Attachments
- signature.asc [application/pgp-signature] 833 bytes