source: trunk/target/linux/omap24xx/patches-2.6.38/310-n8x0-gpioswitch-input.patch @ 25746

Last change on this file since 25746 was 25746, checked in by mb, 5 years ago

omap24xx: Add 2.6.38 files

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

    ---
     arch/arm/mach-omap2/board-n8x0.c |   73 +++++++++++++++++++++++++++++++++++++++
     1 file changed, 73 insertions(+)
    
    old new  
    225225extern void n8x0_mipid_init(void); 
    226226extern void n8x0_blizzard_init(void); 
    227227 
     228struct gpio_switch_input_dev { 
     229        struct input_dev *idev; 
     230        unsigned int swcode; 
     231}; 
     232 
     233static struct gpio_switch_input_dev *slide_input; 
     234static struct gpio_switch_input_dev *kblock_input; 
     235 
     236static void n8x0_gpio_switch_input_notify(struct gpio_switch_input_dev *gdev, 
     237                                          int state) 
     238{ 
     239        if (gdev) { 
     240                input_report_switch(gdev->idev, gdev->swcode, state); 
     241                input_sync(gdev->idev); 
     242        } 
     243} 
     244 
     245static void n8x0_slide_notify(void *data, int state) 
     246{ 
     247        n8x0_gpio_switch_input_notify(slide_input, state); 
     248} 
     249 
     250static void n8x0_kb_lock_notify(void *data, int state) 
     251{ 
     252        n8x0_gpio_switch_input_notify(kblock_input, state); 
     253} 
     254 
     255static struct gpio_switch_input_dev * __init gpioswitch_input_init( 
     256                        const char *name, 
     257                        unsigned int swcode) 
     258{ 
     259        struct gpio_switch_input_dev *gdev; 
     260        int err; 
     261 
     262        gdev = kzalloc(sizeof(*gdev), GFP_KERNEL); 
     263        if (!gdev) 
     264                goto error; 
     265        gdev->swcode = swcode; 
     266 
     267        gdev->idev = input_allocate_device(); 
     268        if (!gdev->idev) 
     269                goto err_free; 
     270 
     271        gdev->idev->evbit[0] = BIT_MASK(EV_SW); 
     272        gdev->idev->swbit[BIT_WORD(swcode)] = BIT_MASK(swcode); 
     273        gdev->idev->name = name; 
     274 
     275        err = input_register_device(gdev->idev); 
     276        if (err) 
     277                goto err_free_idev; 
     278 
     279        return gdev; 
     280 
     281err_free_idev: 
     282        input_free_device(gdev->idev); 
     283err_free: 
     284        kfree(gdev); 
     285error: 
     286        return NULL; 
     287} 
     288 
     289static int __init n8x0_gpio_switches_input_init(void) 
     290{ 
     291        slide_input = gpioswitch_input_init("slide", SW_KEYPAD_SLIDE); 
     292        kblock_input = gpioswitch_input_init("kb_lock", SW_LID); 
     293        if (WARN_ON(!slide_input || !kblock_input)) 
     294                return -ENODEV; 
     295        return 0; 
     296} 
     297late_initcall(n8x0_gpio_switches_input_init); 
     298 
    228299static struct omap_gpio_switch n8x0_gpio_switches[] __initdata = { 
    229300        { 
    230301                .name                   = "headphone", 
     
    246317                .gpio                   = -1, 
    247318                .debounce_rising        = 200, 
    248319                .debounce_falling       = 200, 
     320                .notify                 = n8x0_slide_notify, 
    249321        }, { 
    250322                .name                   = "kb_lock", 
    251323                .gpio                   = -1, 
    252324                .debounce_rising        = 200, 
    253325                .debounce_falling       = 200, 
     326                .notify                 = n8x0_kb_lock_notify, 
    254327        }, 
    255328}; 
    256329 
Note: See TracBrowser for help on using the repository browser.