Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/leds/leds-gpio-register.c
15112 views
1
/*
2
* Copyright (C) 2011 Pengutronix
3
* Uwe Kleine-Koenig <[email protected]>
4
*
5
* This program is free software; you can redistribute it and/or modify it under
6
* the terms of the GNU General Public License version 2 as published by the
7
* Free Software Foundation.
8
*/
9
#include <linux/err.h>
10
#include <linux/platform_device.h>
11
#include <linux/slab.h>
12
#include <linux/leds.h>
13
14
/**
15
* gpio_led_register_device - register a gpio-led device
16
* @pdata: the platform data used for the new device
17
*
18
* Makes a copy of pdata and pdata->leds and registers a new leds-gpio device
19
* with the result. This allows to have pdata and pdata-leds in .init.rodata
20
* and so saves some bytes compared to a static struct platform_device with
21
* static platform data.
22
*
23
* Returns the registered device or an error pointer.
24
*/
25
struct platform_device *__init gpio_led_register_device(
26
int id, const struct gpio_led_platform_data *pdata)
27
{
28
struct platform_device *ret;
29
struct gpio_led_platform_data _pdata = *pdata;
30
31
_pdata.leds = kmemdup(pdata->leds,
32
pdata->num_leds * sizeof(*pdata->leds), GFP_KERNEL);
33
if (!_pdata.leds)
34
return ERR_PTR(-ENOMEM);
35
36
ret = platform_device_register_resndata(NULL, "leds-gpio", id,
37
NULL, 0, &_pdata, sizeof(_pdata));
38
if (IS_ERR(ret))
39
kfree(_pdata.leds);
40
41
return ret;
42
}
43
44