tty: Update hypervisor tty drivers to use core stdout parsing code.
The evh_bytechan, hvc_opal and hvc_vio drivers all open code the parsing of the stdout node in the device tree. This patch simplifies the driver by removing the duplicated functionality. Signed-off-by: Grant Likely <grant.likely@linaro.org>
This commit is contained in:
@@ -108,55 +108,23 @@ static void disable_tx_interrupt(struct ehv_bc_data *bc)
|
||||
*
|
||||
* The byte channel to be used for the console is specified via a "stdout"
|
||||
* property in the /chosen node.
|
||||
*
|
||||
* For compatible with legacy device trees, we also look for a "stdout" alias.
|
||||
*/
|
||||
static int find_console_handle(void)
|
||||
{
|
||||
struct device_node *np, *np2;
|
||||
struct device_node *np = of_stdout;
|
||||
const char *sprop = NULL;
|
||||
const uint32_t *iprop;
|
||||
|
||||
np = of_find_node_by_path("/chosen");
|
||||
if (np)
|
||||
sprop = of_get_property(np, "stdout-path", NULL);
|
||||
|
||||
if (!np || !sprop) {
|
||||
of_node_put(np);
|
||||
np = of_find_node_by_name(NULL, "aliases");
|
||||
if (np)
|
||||
sprop = of_get_property(np, "stdout", NULL);
|
||||
}
|
||||
|
||||
if (!sprop) {
|
||||
of_node_put(np);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* We don't care what the aliased node is actually called. We only
|
||||
* care if it's compatible with "epapr,hv-byte-channel", because that
|
||||
* indicates that it's a byte channel node. We use a temporary
|
||||
* variable, 'np2', because we can't release 'np' until we're done with
|
||||
* 'sprop'.
|
||||
* indicates that it's a byte channel node.
|
||||
*/
|
||||
np2 = of_find_node_by_path(sprop);
|
||||
of_node_put(np);
|
||||
np = np2;
|
||||
if (!np) {
|
||||
pr_warning("ehv-bc: stdout node '%s' does not exist\n", sprop);
|
||||
if (!np || !of_device_is_compatible(np, "epapr,hv-byte-channel"))
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Is it a byte channel? */
|
||||
if (!of_device_is_compatible(np, "epapr,hv-byte-channel")) {
|
||||
of_node_put(np);
|
||||
return 0;
|
||||
}
|
||||
|
||||
stdout_irq = irq_of_parse_and_map(np, 0);
|
||||
if (stdout_irq == NO_IRQ) {
|
||||
pr_err("ehv-bc: no 'interrupts' property in %s node\n", sprop);
|
||||
of_node_put(np);
|
||||
pr_err("ehv-bc: no 'interrupts' property in %s node\n", np->full_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -167,12 +135,9 @@ static int find_console_handle(void)
|
||||
if (!iprop) {
|
||||
pr_err("ehv-bc: no 'hv-handle' property in %s node\n",
|
||||
np->name);
|
||||
of_node_put(np);
|
||||
return 0;
|
||||
}
|
||||
stdout_bc = be32_to_cpu(*iprop);
|
||||
|
||||
of_node_put(np);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user