2  * Provide kernel console on headphone jack 
   4  * Copyright (C) 2011 Michael Gernoth <michael@gernoth.net> 
   6  * This file is subject to the terms and conditions of the GNU General Public 
   7  * License. See the file "COPYING" in the main directory of this archive 
  11 #include <linux/module.h> 
  12 #include <linux/gpio_mapping.h> 
  13 #include <linux/gpio.h> 
  14 #include <linux/platform_device.h> 
  15 #include <linux/serial_reg.h> 
  16 #include <linux/clk.h> 
  18 #include <plat/board.h> 
  19 #include <plat/control.h> 
  20 #include <asm/mach/serial_omap.h> 
  23 #include "prm-regbits-34xx.h" 
  25 static int hs_switch 
= -1; 
  28  * int add_preferred_console(char *name, int idx, char *options) 
  29  * c0069208 T add_preferred_console 
  32 static int (*add_preferred_console
)(char *, int, char*) = (int (*)(char*, int, char*))0xc0069208; 
  34 void my_omap_serial_init(int wake_gpio_strobe
, unsigned int wake_strobe_enable_mask
); 
  35 int my_omap_hs_init(void); 
  36 int my_serial_omap_init(void); 
  37 void activate_emu_uart(void); 
  39 #define MAPPHONE_BPWAKE_STROBE_GPIO     157 
  41 static int __init 
headphone_cons_init(void) 
  43         /* Get the headset switch gpio number from devtree */ 
  44         hs_switch 
= get_gpio_by_name("headset_uart_switch"); 
  48         printk(KERN_INFO 
"headset_uart_switch: %d, value: %d\n", hs_switch
, gpio_get_value(hs_switch
)); 
  50         if (!gpio_get_value(hs_switch
)) 
  53         printk(KERN_INFO 
"Loading slightly modified omap serial driver...\n"); 
  54         my_serial_omap_init(); 
  56         printk(KERN_INFO 
"Enabling UART3...\n"); 
  57         my_omap_serial_init(MAPPHONE_BPWAKE_STROBE_GPIO
, 0x01); 
  60         /* route kernel uart out headset jack */ 
  61         gpio_set_value(hs_switch
, 0); 
  62         printk(KERN_INFO 
"headset_uart_switch: %d, value: %d\n", hs_switch
, gpio_get_value(hs_switch
)); 
  66         //add_preferred_console("ttyS", 2, "115200"); 
  71 static void __exit 
headphone_cons_exit(void) 
  76         printk(KERN_INFO 
"value: %d\n", gpio_get_value(hs_switch
)); 
  77         gpio_direction_output(hs_switch
, 1); 
  78         printk(KERN_INFO 
"value: %d\n", gpio_get_value(hs_switch
)); 
  83 module_init(headphone_cons_init
); 
  85 module_exit(headphone_cons_exit
); 
  88 MODULE_LICENSE("GPL"); 
  89 MODULE_AUTHOR("Michael Gernoth <michael@gernoth.net>");