Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.
My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
Index: firmware/target/hosted/ypr0/button-ypr0.c =================================================================== --- firmware/target/hosted/ypr0/button-ypr0.c (revision 31581) +++ firmware/target/hosted/ypr0/button-ypr0.c (working copy) @@ -19,69 +19,46 @@ * ****************************************************************************/ -#include <stdio.h> -#include <unistd.h> -#include <fcntl.h> -#include <stdlib.h> /* EXIT_SUCCESS */ #include "config.h" #include "button.h" #include "kernel.h" #include "system.h" #include "button-target.h" -#include <gpio_ypr0.h> /* For headphones sense */ +#include <gpio_ypr0.h> /* For headphones sense and buttons */ -/* R0 physical key codes */ -enum ypr0_buttons { - R0BTN_NONE = BUTTON_NONE, - R0BTN_POWER = 1, - R0BTN_UP, - R0BTN_DOWN, - R0BTN_RIGHT, - R0BTN_LEFT, - R0BTN_CENTRAL, - R0BTN_MENU, - R0BTN_BACK, - R0BTN_3DOTS = 11, -}; - - -static int r0_btn_fd = 0; - -/* Samsung keypad driver doesn't allow multiple key combinations :( */ -static enum ypr0_buttons r0_read_key(void) +int button_read_device(void) { - unsigned char keys; - - if (r0_btn_fd < 0) - return 0; - - if (read(r0_btn_fd, &keys, 1)) - return keys; - - return 0; -} - -/* Conversion from physical keypress code to logic key code */ -static int key_to_button(enum ypr0_buttons keyboard_button) -{ - switch (keyboard_button) - { - default: return BUTTON_NONE; - case R0BTN_POWER: return BUTTON_POWER; - case R0BTN_UP: return BUTTON_UP; - case R0BTN_DOWN: return BUTTON_DOWN; - case R0BTN_RIGHT: return BUTTON_RIGHT; - case R0BTN_LEFT: return BUTTON_LEFT; - case R0BTN_CENTRAL: return BUTTON_SELECT; - case R0BTN_MENU: return BUTTON_MENU; - case R0BTN_BACK: return BUTTON_BACK; - case R0BTN_3DOTS: return BUTTON_USER; + int key = BUTTON_NONE; + /* Check for all the keys */ + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_USER_KEY, 0, 0)) { + key |= BUTTON_USER; } -} + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_CENTRAL_KEY, 0, 0)) { + key |= BUTTON_SELECT; + } + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_UP_KEY, 0, 0)) { + key |= BUTTON_UP; + } + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_DOWN_KEY, 0, 0)) { + key |= BUTTON_DOWN; + } + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_LEFT_KEY, 0, 0)) { + key |= BUTTON_LEFT; + } + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_RIGHT_KEY, 0, 0)) { + key |= BUTTON_RIGHT; + } + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_MENU_KEY, 0, 0)) { + key |= BUTTON_MENU; + } + if (!gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_BACK_KEY, 0, 0)) { + key |= BUTTON_BACK; + } + if (gpio_control(DEV_CTRL_GPIO_IS_HIGH, GPIO_POWER_KEY, 0, 0)) { + key |= BUTTON_POWER; + } -int button_read_device(void) -{ - return key_to_button(r0_read_key()); + return key; } bool headphones_inserted(void) @@ -93,23 +70,21 @@ /* Open the keypad device: it is offered by r0Btn.ko module */ void button_init_device(void) { - r0_btn_fd = open("/dev/r0Btn", O_RDONLY); - if (r0_btn_fd < 0) - printf("/dev/r0Btn open error!"); - /* Setup GPIO pin for headphone sense, copied from OF */ gpio_control(DEV_CTRL_GPIO_SET_MUX, GPIO_HEADPHONE_SENSE, CONFIG_SION, PAD_CTL_47K_PU); gpio_control(DEV_CTRL_GPIO_SET_INPUT, GPIO_HEADPHONE_SENSE, CONFIG_SION, PAD_CTL_47K_PU); + + /* No need to initialize any GPIO pin, since this is done loading the r0Btn module */ + /* initialization of every button */ + //gpio_control(DEV_CTRL_GPIO_SET_MUX, GPIO_USER_KEY , 4, 0); + //gpio_control(DEV_CTRL_GPIO_SET_INPUT, GPIO_USER_KEY, 0x1f0, 0); + } #ifdef BUTTON_DRIVER_CLOSE /* I'm not sure it's called at shutdown...give a check! */ void button_close_device(void) { - if (r0_btn_fd >= 0) { - close(r0_btn_fd); - printf("/dev/r0Btn closed!"); - } /* Don't know the precise meaning, but it's done as in the OF, so copied there */ gpio_control(DEV_CTRL_GPIO_UNSET_MUX, GPIO_HEADPHONE_SENSE, CONFIG_SION, 0); } Index: firmware/target/hosted/ypr0/button-target.h =================================================================== --- firmware/target/hosted/ypr0/button-target.h (revision 31581) +++ firmware/target/hosted/ypr0/button-target.h (working copy) @@ -42,7 +42,7 @@ #define BUTTON_POWER 0x00000080 #define BUTTON_SELECT 0x00000100 -#define BUTTON_MAIN 0x1FF /* all buttons */ +#define BUTTON_MAIN (BUTTON_UP|BUTTON_DOWN|BUTTON_LEFT|BUTTON_RIGHT|BUTTON_USER|BUTTON_MENU|BUTTON_BACK|BUTTON_POWER|BUTTON_SELECT) /* all buttons */ /* No remote */ #define BUTTON_REMOTE 0 Index: firmware/target/hosted/ypr0/gpio_ypr0.h =================================================================== --- firmware/target/hosted/ypr0/gpio_ypr0.h (revision 31581) +++ firmware/target/hosted/ypr0/gpio_ypr0.h (working copy) @@ -5,7 +5,7 @@ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ - * $Id: ascodec-target.h 26116 2010-05-17 20:53:25Z funman $ + * $Id$ * * Module wrapper for GPIO, using /dev/r0GPIO (r0Gpio.ko) of Samsung YP-R0 * @@ -28,12 +28,22 @@ /* Some meaningful pins used in the R0 */ -#define GPIO_HEADPHONE_SENSE GPIO1_5 -//26 -#define GPIO_EXT_PWR_SENSE GPIO1_26 +#define GPIO_HEADPHONE_SENSE GPIO1_5 +#define GPIO_EXT_PWR_SENSE GPIO1_26 //59 -#define GPIO_SD_SENSE GPIO2_24 +#define GPIO_SD_SENSE GPIO2_27 +#define GPIO_USER_KEY GPIO2_30 +#define GPIO_BACK_KEY GPIO2_29 +#define GPIO_MENU_KEY GPIO2_31 +#define GPIO_POWER_KEY GPIO2_16 +#define GPIO_CENTRAL_KEY GPIO3_5 +#define GPIO_UP_KEY GPIO3_9 +#define GPIO_DOWN_KEY GPIO3_8 +#define GPIO_LEFT_KEY GPIO2_28 +#define GPIO_RIGHT_KEY GPIO3_7 + + void gpio_init(void); void gpio_close(void); int gpio_control_struct(int request, R0GPIOInfo pin); |