Skip to content

Commit

Permalink
printk: move braille console support into separate braille.[ch] files
Browse files Browse the repository at this point in the history
Create files with prototypes and static inlines for braille support.  Make
braille_console functions return 1 on success.

Corrected CONFIG_A11Y_BRAILLE_CONSOLE=n _braille_console_setup
return value to NULL.

Signed-off-by: Joe Perches <[email protected]>
Reviewed-by: Samuel Thibault <[email protected]>
Cc: Ming Lei <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
JoePerches authored and torvalds committed Jul 31, 2013
1 parent d197c43 commit bbeddf5
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 33 deletions.
9 changes: 7 additions & 2 deletions drivers/accessibility/braille/braille_console.c
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,9 @@ int braille_register_console(struct console *console, int index,
char *console_options, char *braille_options)
{
int ret;

if (!(console->flags & CON_BRL))
return 0;
if (!console_options)
/* Only support VisioBraille for now */
console_options = "57600o8";
Expand All @@ -374,15 +377,17 @@ int braille_register_console(struct console *console, int index,
braille_co = console;
register_keyboard_notifier(&keyboard_notifier_block);
register_vt_notifier(&vt_notifier_block);
return 0;
return 1;
}

int braille_unregister_console(struct console *console)
{
if (braille_co != console)
return -EINVAL;
if (!(console->flags & CON_BRL))
return 0;
unregister_keyboard_notifier(&keyboard_notifier_block);
unregister_vt_notifier(&vt_notifier_block);
braille_co = NULL;
return 0;
return 1;
}
1 change: 1 addition & 0 deletions kernel/printk/Makefile
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
obj-y = printk.o
obj-$(CONFIG_A11Y_BRAILLE_CONSOLE) += braille.o
48 changes: 48 additions & 0 deletions kernel/printk/braille.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/kernel.h>
#include <linux/console.h>
#include <linux/string.h>

#include "console_cmdline.h"
#include "braille.h"

char *_braille_console_setup(char **str, char **brl_options)
{
if (!memcmp(*str, "brl,", 4)) {
*brl_options = "";
*str += 4;
} else if (!memcmp(str, "brl=", 4)) {
*brl_options = *str + 4;
*str = strchr(*brl_options, ',');
if (!*str)
pr_err("need port name after brl=\n");
else
*((*str)++) = 0;
}

return *str;
}

int
_braille_register_console(struct console *console, struct console_cmdline *c)
{
int rtn = 0;

if (c->brl_options) {
console->flags |= CON_BRL;
rtn = braille_register_console(console, c->index, c->options,
c->brl_options);
}

return rtn;
}

int
_braille_unregister_console(struct console *console)
{
if (console->flags & CON_BRL)
return braille_unregister_console(console);

return 0;
}
48 changes: 48 additions & 0 deletions kernel/printk/braille.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#ifndef _PRINTK_BRAILLE_H
#define _PRINTK_BRAILLE_H

#ifdef CONFIG_A11Y_BRAILLE_CONSOLE

static inline void
braille_set_options(struct console_cmdline *c, char *brl_options)
{
c->brl_options = brl_options;
}

char *
_braille_console_setup(char **str, char **brl_options);

int
_braille_register_console(struct console *console, struct console_cmdline *c);

int
_braille_unregister_console(struct console *console);

#else

static inline void
braille_set_options(struct console_cmdline *c, char *brl_options)
{
}

static inline char *
_braille_console_setup(char **str, char **brl_options)
{
return NULL;
}

static inline int
_braille_register_console(struct console *console, struct console_cmdline *c)
{
return 0;
}

static inline int
_braille_unregister_console(struct console *console)
{
return 0;
}

#endif

#endif
44 changes: 13 additions & 31 deletions kernel/printk/printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#include <trace/events/printk.h>

#include "console_cmdline.h"
#include "braille.h"

/* printk's without a loglevel use this.. */
#define DEFAULT_MESSAGE_LOGLEVEL CONFIG_DEFAULT_MESSAGE_LOGLEVEL
Expand Down Expand Up @@ -1769,9 +1770,8 @@ static int __add_preferred_console(char *name, int idx, char *options,
c = &console_cmdline[i];
strlcpy(c->name, name, sizeof(c->name));
c->options = options;
#ifdef CONFIG_A11Y_BRAILLE_CONSOLE
c->brl_options = brl_options;
#endif
braille_set_options(c, brl_options);

c->index = idx;
return 0;
}
Expand All @@ -1784,20 +1784,8 @@ static int __init console_setup(char *str)
char *s, *options, *brl_options = NULL;
int idx;

#ifdef CONFIG_A11Y_BRAILLE_CONSOLE
if (!memcmp(str, "brl,", 4)) {
brl_options = "";
str += 4;
} else if (!memcmp(str, "brl=", 4)) {
brl_options = str + 4;
str = strchr(brl_options, ',');
if (!str) {
printk(KERN_ERR "need port name after brl=\n");
return 1;
}
*(str++) = 0;
}
#endif
if (_braille_console_setup(&str, &brl_options))
return 1;

/*
* Decode str into name, index, options.
Expand Down Expand Up @@ -2291,16 +2279,10 @@ void register_console(struct console *newcon)
continue;
if (newcon->index < 0)
newcon->index = console_cmdline[i].index;
#ifdef CONFIG_A11Y_BRAILLE_CONSOLE
if (console_cmdline[i].brl_options) {
newcon->flags |= CON_BRL;
braille_register_console(newcon,
console_cmdline[i].index,
console_cmdline[i].options,
console_cmdline[i].brl_options);

if (_braille_register_console(newcon, &console_cmdline[i]))
return;
}
#endif

if (newcon->setup &&
newcon->setup(newcon, console_cmdline[i].options) != 0)
break;
Expand Down Expand Up @@ -2388,13 +2370,13 @@ EXPORT_SYMBOL(register_console);
int unregister_console(struct console *console)
{
struct console *a, *b;
int res = 1;
int res;

#ifdef CONFIG_A11Y_BRAILLE_CONSOLE
if (console->flags & CON_BRL)
return braille_unregister_console(console);
#endif
res = _braille_unregister_console(console);
if (res)
return res;

res = 1;
console_lock();
if (console_drivers == console) {
console_drivers=console->next;
Expand Down

0 comments on commit bbeddf5

Please sign in to comment.