Corgi Keyboard: Code tidying
PATCH 3/8 Corgi Keyboard: Code tidying
The input system handles key state tracking so there's no need for the driver to do so as well. Also tidy up some comment formatting and remove a now unneeded function.
Signed-off-by Richard Purdie <[email protected]>
drivers/input/keyboard/corgikbd.c +28 -33
@@ -33,7 +33,6 @@/* zero code, 124 scancodes + 3 hinge combinations */ #define NR_SCANCODES ( SCANCODE(KB_ROWS-1,KB_COLS-1) +1 +1 +3 )#define SCAN_INTERVAL (HZ/10) -#define CORGIKBD_PRESSED 1#define HINGE_SCAN_INTERVAL (HZ/4)
@@ -74,9 +73,7 @@struct input_dev input;char phys[32 ]; -unsigned char state[ARRAY_SIZE (corgikbd_keycode)];spinlock_t lock; -struct timer_list timer;struct timer_list htimer;
@@ -84,22 +81,6 @@unsigned long suspend_jiffies; }; -static void handle_scancode (unsigned int pressed,unsigned int scancode,struct corgikbd *corgikbd_data) -{ -if (pressed && !(corgikbd_data->state[scancode] &CORGIKBD_PRESSED )) { - corgikbd_data->state[scancode] |=CORGIKBD_PRESSED ; -input_report_key (&corgikbd_data->input, corgikbd_data->keycode[scancode],1 ); -if ((corgikbd_data->keycode[scancode] ==CORGI_KEY_OFF ) - &&time_after (jiffies, corgikbd_data->suspend_jiffies +HZ )) { -input_event (&corgikbd_data->input,EV_PWR ,CORGI_KEY_OFF ,1 ); - corgikbd_data->suspend_jiffies=jiffies; - } - }else if (!pressed && corgikbd_data->state[scancode] &CORGIKBD_PRESSED ) { - corgikbd_data->state[scancode] &= ~CORGIKBD_PRESSED ; -input_report_key (&corgikbd_data->input, corgikbd_data->keycode[scancode],0 ); - } -} -#define KB_DISCHARGE_DELAY 10#define KB_ACTIVATE_DELAY 10
@@ -112,36 +93,36 @@*/ static inline void corgikbd_discharge_all (void ) { -// STROBE All HiZ +/* STROBE All HiZ */ GPCR2 =CORGI_GPIO_ALL_STROBE_BIT ;GPDR2 &= ~CORGI_GPIO_ALL_STROBE_BIT ; }static inline void corgikbd_activate_all (void ) { -// STROBE ALL -> High +/* STROBE ALL -> High */ GPSR2 =CORGI_GPIO_ALL_STROBE_BIT ;GPDR2 |=CORGI_GPIO_ALL_STROBE_BIT ;udelay (KB_DISCHARGE_DELAY ); -// Clear any interrupts we may have triggered when altering the GPIO lines +/* Clear any interrupts we may have triggered when altering the GPIO lines */ GEDR1 =CORGI_GPIO_HIGH_SENSE_BIT ;GEDR2 =CORGI_GPIO_LOW_SENSE_BIT ; }static inline void corgikbd_activate_col (int col) { -// STROBE col -> High, not col -> HiZ +/* STROBE col -> High, not col -> HiZ */ GPSR2 =CORGI_GPIO_STROBE_BIT (col);GPDR2 = (GPDR2 & ~CORGI_GPIO_ALL_STROBE_BIT ) |CORGI_GPIO_STROBE_BIT (col); }static inline void corgikbd_reset_col (int col) { -// STROBE col -> Low +/* STROBE col -> Low */ GPCR2 =CORGI_GPIO_STROBE_BIT (col); -// STROBE col -> out, not col -> HiZ +/* STROBE col -> out, not col -> HiZ */ GPDR2 = (GPDR2 & ~CORGI_GPIO_ALL_STROBE_BIT ) |CORGI_GPIO_STROBE_BIT (col); }
@@ -156,7 +137,7 @@/* Scan the hardware keyboard and push any changes up through the input layer */ static void corgikbd_scankeyboard (struct corgikbd *corgikbd_data,struct pt_regs *regs) { -unsigned int row, col, rowd, scancode; +unsigned int row, col, rowd;unsigned long flags;unsigned int num_pressed;
@@ -183,10 +164,21 @@ rowd =GET_ROWS_STATUS (col);for (row =0 ; row <KB_ROWS ; row++) { +unsigned int scancode, pressed; + scancode =SCANCODE (row, col); -handle_scancode ((rowd &KB_ROWMASK (row)), scancode, corgikbd_data); -if (rowd &KB_ROWMASK (row)) + pressed = rowd &KB_ROWMASK (row); + +input_report_key (&corgikbd_data->input, corgikbd_data->keycode[scancode], pressed); + +if (pressed) num_pressed++; + +if (pressed && (corgikbd_data->keycode[scancode] ==CORGI_KEY_OFF ) + &&time_after (jiffies, corgikbd_data->suspend_jiffies +HZ )) { +input_event (&corgikbd_data->input,EV_PWR ,CORGI_KEY_OFF ,1 ); + corgikbd_data->suspend_jiffies=jiffies; + } }corgikbd_reset_col (col); }
@@ -231,8 +223,11 @@* The hinge switches generate no interrupt so they need to be * monitored by a timer. * -* When we detect changes, we debounce it and then pass the three -* positions the system can take as keypresses to the input system. +* We debounce the switches and pass them to the input system. +* +* gprr == 0x00 - Keyboard with Landscape Screen +* 0x08 - No Keyboard with Portrait Screen +* 0x0c - Keyboard and Screen Closed */ #define HINGE_STABLE_COUNT 2
@@ -254,9 +249,9 @@if (hinge_count >=HINGE_STABLE_COUNT ) {spin_lock_irqsave (&corgikbd_data->lock, flags); -handle_scancode ((sharpsl_hinge_state ==0x00 ),125 , corgikbd_data);/* Keyboard with Landscape Screen */ -handle_scancode ((sharpsl_hinge_state ==0x08 ),126 , corgikbd_data);/* No Keyboard with Portrait Screen */ -handle_scancode ((sharpsl_hinge_state ==0x0c ),127 , corgikbd_data);/* Keyboard and Screen Closed */ +input_report_key (&corgikbd_data->input, corgikbd_data->keycode[125 ], (sharpsl_hinge_state ==0x00 )); +input_report_key (&corgikbd_data->input, corgikbd_data->keycode[126 ], (sharpsl_hinge_state ==0x08 )); +input_report_key (&corgikbd_data->input, corgikbd_data->keycode[127 ], (sharpsl_hinge_state ==0x0c ));input_sync (&corgikbd_data->input);spin_unlock_irqrestore (&corgikbd_data->lock, flags);