Skip to contentSkip to conversation

tegra: add CONSOLE_MUX support to tegra-kbc

PATCH New Allen Martin 3 participants 3 messages Nov 1, 2012 – Nov 7, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tegra: add CONSOLE_MUX support to tegra-kbc

Add support for CONSOLE_MUX to tegra-kbc driver. This requires adding a flag to struct keyb to know the driver has already been initialized so if we try to initialize it again we can just return success. Also call into iomux_doenv() from drv_keyboard_init to re-evaluate the stdin string.

---
 drivers/input/tegra-kbc.c |   18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
drivers/input/tegra-kbc.c +17 -1
index ab7a9e3..88471d3 100644
@@ -63,6 +63,7 @@ static struct keyb {
 	struct kbc_tegra *kbc;		/* tegra keyboard controller */
 	unsigned char inited;		/* 1 if keyboard has been inited */
 	unsigned char first_scan;	/* 1 if this is our first key scan */
+	unsigned char created;		/* 1 if driver has been created */
 
 	/*
 	 * After init we must wait a short time before polling the keyboard.
@@ -306,6 +307,10 @@ static void tegra_kbc_open(void)
  */
 static int init_tegra_keyboard(void)
 {
+	/* check if already created */
+	if (config.created)
+		return 0;
+
 #ifdef CONFIG_OF_CONTROL
 	int	node;
 
@@ -349,6 +354,7 @@ static int init_tegra_keyboard(void)
 	config_kbc_gpio(config.kbc);
 
 	tegra_kbc_open();
+	config.created = 1;
 	debug("%s: Tegra keyboard ready\n", __func__);
 
 	return 0;
@@ -357,6 +363,8 @@ static int init_tegra_keyboard(void)
 int drv_keyboard_init(void)
 {
 	struct stdio_dev dev;
+	char *stdinname = getenv("stdin");
+	int error;
 
 	if (input_init(&config.input, 0)) {
 		debug("%s: Cannot set up input\n", __func__);
@@ -372,5 +380,13 @@ int drv_keyboard_init(void)
 	dev.start = init_tegra_keyboard;
 
 	/* Register the device. init_tegra_keyboard() will be called soon */
-	return input_stdio_register(&dev);
+	error = input_stdio_register(&dev);
+	if (error)
+		return error;
+#ifdef CONFIG_CONSOLE_MUX
+	error = iomux_doenv(stdin, stdinname);
+	if (error)
+		return error;
+#endif
+	return 0;
 }
Signature · 1 line
1.7.10.4
#1 lore raw

PATCH 1/1 tegra: add CONSOLE_MUX support to tegra-kbc

Dear Allen Martin,

Quoted 5 lines

Add support for CONSOLE_MUX to tegra-kbc driver. This requires adding a flag to struct keyb to know the driver has already been initialized so if we try to initialize it again we can just return success. Also call into iomux_doenv() from drv_keyboard_init to re-evaluate the stdin string.

Thanks ;-)

I'll soon be tearing iomux apart btw., it looks like a bucket of crap :-(

Best regards,
Marek Vasut

#2 lore raw

PATCH 1/1 tegra: add CONSOLE_MUX support to tegra-kbc

In reply to Allen Martin

Hi Allen,

Quoted 24 lines · Allen Martin

Add support for CONSOLE_MUX to tegra-kbc driver. This requires adding a flag to struct keyb to know the driver has already been initialized so if we try to initialize it again we can just return success. Also call into iomux_doenv() from drv_keyboard_init to re-evaluate the stdin string.

---
 drivers/input/tegra-kbc.c |   18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
drivers/input/tegra-kbc.c +1 -0
index ab7a9e3..88471d3 100644
@@ -63,6 +63,7 @@ static struct keyb {
        struct kbc_tegra *kbc;          /* tegra keyboard controller */
        unsigned char inited;           /* 1 if keyboard has been inited */
        unsigned char first_scan;       /* 1 if this is our first key scan */
+       unsigned char created;          /* 1 if driver has been created */
 
        /*
         * After init we must wait a short time before polling the keyboard.

drivers/input/tegra-kbc.c static void tegra_kbc_open(void) · line 313

Quoted 7 lines
drivers/input/tegra-kbc.c +4 -0
@@ -306,6 +307,10 @@ static void tegra_kbc_open(void)
  */
 static int init_tegra_keyboard(void)
 {
+       /* check if already created */
+       if (config.created)
+               return 0;
+

I think this code should go after the 'int node' declaration, shouldn't it?

Quoted 36 lines
drivers/input/tegra-kbc.c +12 -2
 #ifdef CONFIG_OF_CONTROL
        int     node;
 
@@ -349,6 +354,7 @@ static int init_tegra_keyboard(void)
        config_kbc_gpio(config.kbc);
 
        tegra_kbc_open();
+       config.created = 1;
        debug("%s: Tegra keyboard ready\n", __func__);
 
        return 0;
@@ -357,6 +363,8 @@ static int init_tegra_keyboard(void)
 int drv_keyboard_init(void)
 {
        struct stdio_dev dev;
+       char *stdinname = getenv("stdin");
+       int error;
 
        if (input_init(&config.input, 0)) {
                debug("%s: Cannot set up input\n", __func__);
@@ -372,5 +380,13 @@ int drv_keyboard_init(void)
        dev.start = init_tegra_keyboard;
 
        /* Register the device. init_tegra_keyboard() will be called soon */
-       return input_stdio_register(&dev);
+       error = input_stdio_register(&dev);
+       if (error)
+               return error;
+#ifdef CONFIG_CONSOLE_MUX
+       error = iomux_doenv(stdin, stdinname);
+       if (error)
+               return error;
+#endif
+       return 0;
 }
--
Quoted 2 lines

1.7.10.4

Regards,
Simon