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

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

omap24xx: Add 3.1 patchset.

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 void __init n8x0_bt_init(void) 
    216216                BUG(); 
    217217} 
    218218 
     219struct gpio_switch_input_dev { 
     220        struct input_dev *idev; 
     221        unsigned int swcode; 
     222}; 
     223 
     224static struct gpio_switch_input_dev *slide_input; 
     225static struct gpio_switch_input_dev *kblock_input; 
     226 
     227static void n8x0_gpio_switch_input_notify(struct gpio_switch_input_dev *gdev, 
     228                                          int state) 
     229{ 
     230        if (gdev) { 
     231                input_report_switch(gdev->idev, gdev->swcode, state); 
     232                input_sync(gdev->idev); 
     233        } 
     234} 
     235 
     236static void n8x0_slide_notify(void *data, int state) 
     237{ 
     238        n8x0_gpio_switch_input_notify(slide_input, state); 
     239} 
     240 
     241static void n8x0_kb_lock_notify(void *data, int state) 
     242{ 
     243        n8x0_gpio_switch_input_notify(kblock_input, state); 
     244} 
     245 
     246static struct gpio_switch_input_dev * __init gpioswitch_input_init( 
     247                        const char *name, 
     248                        unsigned int swcode) 
     249{ 
     250        struct gpio_switch_input_dev *gdev; 
     251        int err; 
     252 
     253        gdev = kzalloc(sizeof(*gdev), GFP_KERNEL); 
     254        if (!gdev) 
     255                goto error; 
     256        gdev->swcode = swcode; 
     257 
     258        gdev->idev = input_allocate_device(); 
     259        if (!gdev->idev) 
     260                goto err_free; 
     261 
     262        gdev->idev->evbit[0] = BIT_MASK(EV_SW); 
     263        gdev->idev->swbit[BIT_WORD(swcode)] = BIT_MASK(swcode); 
     264        gdev->idev->name = name; 
     265 
     266        err = input_register_device(gdev->idev); 
     267        if (err) 
     268                goto err_free_idev; 
     269 
     270        return gdev; 
     271 
     272err_free_idev: 
     273        input_free_device(gdev->idev); 
     274err_free: 
     275        kfree(gdev); 
     276error: 
     277        return NULL; 
     278} 
     279 
     280static int __init n8x0_gpio_switches_input_init(void) 
     281{ 
     282        slide_input = gpioswitch_input_init("slide", SW_KEYPAD_SLIDE); 
     283        kblock_input = gpioswitch_input_init("kb_lock", SW_LID); 
     284        if (WARN_ON(!slide_input || !kblock_input)) 
     285                return -ENODEV; 
     286        return 0; 
     287} 
     288late_initcall(n8x0_gpio_switches_input_init); 
     289 
    219290static struct omap_gpio_switch n8x0_gpio_switches[] __initdata = { 
    220291        { 
    221292                .name                   = "headphone", 
    static struct omap_gpio_switch n8x0_gpio 
    237308                .gpio                   = -1, 
    238309                .debounce_rising        = 200, 
    239310                .debounce_falling       = 200, 
     311                .notify                 = n8x0_slide_notify, 
    240312        }, { 
    241313                .name                   = "kb_lock", 
    242314                .gpio                   = -1, 
    243315                .debounce_rising        = 200, 
    244316                .debounce_falling       = 200, 
     317                .notify                 = n8x0_kb_lock_notify, 
    245318        }, 
    246319}; 
    247320 
Note: See TracBrowser for help on using the repository browser.