Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/mips/ath79/dev-gpio-buttons.c
10817 views
1
/*
2
* Atheros AR71XX/AR724X/AR913X GPIO button support
3
*
4
* Copyright (C) 2008-2010 Gabor Juhos <[email protected]>
5
* Copyright (C) 2008 Imre Kaloz <[email protected]>
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
18
void __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 = kmalloc(nbuttons * sizeof(*p), GFP_KERNEL);
29
if (!p)
30
return;
31
32
memcpy(p, buttons, nbuttons * sizeof(*p));
33
34
pdev = platform_device_alloc("gpio-keys-polled", id);
35
if (!pdev)
36
goto err_free_buttons;
37
38
memset(&pdata, 0, sizeof(pdata));
39
pdata.poll_interval = poll_interval;
40
pdata.nbuttons = nbuttons;
41
pdata.buttons = p;
42
43
err = platform_device_add_data(pdev, &pdata, sizeof(pdata));
44
if (err)
45
goto err_put_pdev;
46
47
err = platform_device_add(pdev);
48
if (err)
49
goto err_put_pdev;
50
51
return;
52
53
err_put_pdev:
54
platform_device_put(pdev);
55
56
err_free_buttons:
57
kfree(p);
58
}
59
60