linux/arch/mips/ath79/dev-gpio-buttons.c
<<
>>
Prefs
   1/*
   2 *  Atheros AR71XX/AR724X/AR913X GPIO button support
   3 *
   4 *  Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
   5 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
   6 *
   7 *  This program is free software; you can redistribute it and/or modify it
   8 *  under the terms of the GNU General Public License version 2 as published
   9 *  by the Free Software Foundation.
  10 */
  11
  12#include "linux/init.h"
  13#include "linux/slab.h"
  14#include <linux/platform_device.h>
  15
  16#include "dev-gpio-buttons.h"
  17
  18void __init ath79_register_gpio_keys_polled(int id,
  19                                            unsigned poll_interval,
  20                                            unsigned nbuttons,
  21                                            struct gpio_keys_button *buttons)
  22{
  23        struct platform_device *pdev;
  24        struct gpio_keys_platform_data pdata;
  25        struct gpio_keys_button *p;
  26        int err;
  27
  28        p = kmemdup(buttons, nbuttons * sizeof(*p), GFP_KERNEL);
  29        if (!p)
  30                return;
  31
  32        pdev = platform_device_alloc("gpio-keys-polled", id);
  33        if (!pdev)
  34                goto err_free_buttons;
  35
  36        memset(&pdata, 0, sizeof(pdata));
  37        pdata.poll_interval = poll_interval;
  38        pdata.nbuttons = nbuttons;
  39        pdata.buttons = p;
  40
  41        err = platform_device_add_data(pdev, &pdata, sizeof(pdata));
  42        if (err)
  43                goto err_put_pdev;
  44
  45        err = platform_device_add(pdev);
  46        if (err)
  47                goto err_put_pdev;
  48
  49        return;
  50
  51err_put_pdev:
  52        platform_device_put(pdev);
  53
  54err_free_buttons:
  55        kfree(p);
  56}
  57