162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/kernel.h> 562306a36Sopenharmony_ci#include <linux/console.h> 662306a36Sopenharmony_ci#include <linux/errno.h> 762306a36Sopenharmony_ci#include <linux/string.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "console_cmdline.h" 1062306a36Sopenharmony_ci#include "braille.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciint _braille_console_setup(char **str, char **brl_options) 1362306a36Sopenharmony_ci{ 1462306a36Sopenharmony_ci size_t len; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci len = str_has_prefix(*str, "brl,"); 1762306a36Sopenharmony_ci if (len) { 1862306a36Sopenharmony_ci *brl_options = ""; 1962306a36Sopenharmony_ci *str += len; 2062306a36Sopenharmony_ci return 0; 2162306a36Sopenharmony_ci } 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci len = str_has_prefix(*str, "brl="); 2462306a36Sopenharmony_ci if (len) { 2562306a36Sopenharmony_ci *brl_options = *str + len; 2662306a36Sopenharmony_ci *str = strchr(*brl_options, ','); 2762306a36Sopenharmony_ci if (!*str) { 2862306a36Sopenharmony_ci pr_err("need port name after brl=\n"); 2962306a36Sopenharmony_ci return -EINVAL; 3062306a36Sopenharmony_ci } 3162306a36Sopenharmony_ci *((*str)++) = 0; 3262306a36Sopenharmony_ci } 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci return 0; 3562306a36Sopenharmony_ci} 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciint 3862306a36Sopenharmony_ci_braille_register_console(struct console *console, struct console_cmdline *c) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci int rtn = 0; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci if (c->brl_options) { 4362306a36Sopenharmony_ci console->flags |= CON_BRL; 4462306a36Sopenharmony_ci rtn = braille_register_console(console, c->index, c->options, 4562306a36Sopenharmony_ci c->brl_options); 4662306a36Sopenharmony_ci } 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci return rtn; 4962306a36Sopenharmony_ci} 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciint 5262306a36Sopenharmony_ci_braille_unregister_console(struct console *console) 5362306a36Sopenharmony_ci{ 5462306a36Sopenharmony_ci if (console->flags & CON_BRL) 5562306a36Sopenharmony_ci return braille_unregister_console(console); 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci return 0; 5862306a36Sopenharmony_ci} 59