source: trunk/target/linux/omap24xx/patches-3.1/350-n8x0-gpioswitch-input.patch @ 29007

Last change on this file since 29007 was 29007, checked in by jogo, 5 years ago

linux: update 3.1 to 3.1.1

File size: 2.2 KB
  • arch/arm/mach-omap2/board-n8x0.c

    ---
     arch/arm/mach-omap2/board-n8x0.c |   73 +++++++++++++++++++++++++++++++++++++++
     1 file changed, 73 insertions(+)
    
    a b void __init n8x0_bt_init(void) 
    316316                BUG(); 
    317317} 
    318318 
     319struct gpio_switch_input_dev { 
     320        struct input_dev *idev; 
     321        unsigned int swcode; 
     322}; 
     323 
     324static struct gpio_switch_input_dev *slide_input; 
     325static struct gpio_switch_input_dev *kblock_input; 
     326 
     327static void n8x0_gpio_switch_input_notify(struct gpio_switch_input_dev *gdev, 
     328                                          int state) 
     329{ 
     330        if (gdev) { 
     331                input_report_switch(gdev->idev, gdev->swcode, state); 
     332                input_sync(gdev->idev); 
     333        } 
     334} 
     335 
     336static void n8x0_slide_notify(void *data, int state) 
     337{ 
     338        n8x0_gpio_switch_input_notify(slide_input, state); 
     339} 
     340 
     341static void n8x0_kb_lock_notify(void *data, int state) 
     342{ 
     343        n8x0_gpio_switch_input_notify(kblock_input, state); 
     344} 
     345 
     346static struct gpio_switch_input_dev * __init gpioswitch_input_init( 
     347                        const char *name, 
     348                        unsigned int swcode) 
     349{ 
     350        struct gpio_switch_input_dev *gdev; 
     351        int err; 
     352 
     353        gdev = kzalloc(sizeof(*gdev), GFP_KERNEL); 
     354        if (!gdev) 
     355                goto error; 
     356        gdev->swcode = swcode; 
     357 
     358        gdev->idev = input_allocate_device(); 
     359        if (!gdev->idev) 
     360                goto err_free; 
     361 
     362        gdev->idev->evbit[0] = BIT_MASK(EV_SW); 
     363        gdev->idev->swbit[BIT_WORD(swcode)] = BIT_MASK(swcode); 
     364        gdev->idev->name = name; 
     365 
     366        err = input_register_device(gdev->idev); 
     367        if (err) 
     368                goto err_free_idev; 
     369 
     370        return gdev; 
     371 
     372err_free_idev: 
     373        input_free_device(gdev->idev); 
     374err_free: 
     375        kfree(gdev); 
     376error: 
     377        return NULL; 
     378} 
     379 
     380static int __init n8x0_gpio_switches_input_init(void) 
     381{ 
     382        slide_input = gpioswitch_input_init("slide", SW_KEYPAD_SLIDE); 
     383        kblock_input = gpioswitch_input_init("kb_lock", SW_LID); 
     384        if (WARN_ON(!slide_input || !kblock_input)) 
     385                return -ENODEV; 
     386        return 0; 
     387} 
     388late_initcall(n8x0_gpio_switches_input_init); 
     389 
    319390static struct omap_gpio_switch n8x0_gpio_switches[] __initdata = { 
    320391        { 
    321392                .name                   = "headphone", 
    static struct omap_gpio_switch n8x0_gpio 
    337408                .gpio                   = -1, 
    338409                .debounce_rising        = 200, 
    339410                .debounce_falling       = 200, 
     411                .notify                 = n8x0_slide_notify, 
    340412        }, { 
    341413                .name                   = "kb_lock", 
    342414                .gpio                   = -1, 
    343415                .debounce_rising        = 200, 
    344416                .debounce_falling       = 200, 
     417                .notify                 = n8x0_kb_lock_notify, 
    345418        }, 
    346419}; 
    347420 
Note: See TracBrowser for help on using the repository browser.