xref: /OK3568_Linux_fs/kernel/arch/arm/mach-s3c/platformdata.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun //
3*4882a593Smuzhiyun // Copyright 2010 Ben Dooks <ben-linux <at> fluff.org>
4*4882a593Smuzhiyun //
5*4882a593Smuzhiyun // Helper for platform data setting
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <linux/kernel.h>
8*4882a593Smuzhiyun #include <linux/slab.h>
9*4882a593Smuzhiyun #include <linux/string.h>
10*4882a593Smuzhiyun #include <linux/platform_device.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "devs.h"
13*4882a593Smuzhiyun #include "sdhci.h"
14*4882a593Smuzhiyun 
s3c_set_platdata(void * pd,size_t pdsize,struct platform_device * pdev)15*4882a593Smuzhiyun void __init *s3c_set_platdata(void *pd, size_t pdsize,
16*4882a593Smuzhiyun 			      struct platform_device *pdev)
17*4882a593Smuzhiyun {
18*4882a593Smuzhiyun 	void *npd;
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun 	if (!pd) {
21*4882a593Smuzhiyun 		/* too early to use dev_name(), may not be registered */
22*4882a593Smuzhiyun 		printk(KERN_ERR "%s: no platform data supplied\n", pdev->name);
23*4882a593Smuzhiyun 		return NULL;
24*4882a593Smuzhiyun 	}
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun 	npd = kmemdup(pd, pdsize, GFP_KERNEL);
27*4882a593Smuzhiyun 	if (!npd)
28*4882a593Smuzhiyun 		return NULL;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	pdev->dev.platform_data = npd;
31*4882a593Smuzhiyun 	return npd;
32*4882a593Smuzhiyun }
33*4882a593Smuzhiyun 
s3c_sdhci_set_platdata(struct s3c_sdhci_platdata * pd,struct s3c_sdhci_platdata * set)34*4882a593Smuzhiyun void s3c_sdhci_set_platdata(struct s3c_sdhci_platdata *pd,
35*4882a593Smuzhiyun 			     struct s3c_sdhci_platdata *set)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun 	set->cd_type = pd->cd_type;
38*4882a593Smuzhiyun 	set->ext_cd_init = pd->ext_cd_init;
39*4882a593Smuzhiyun 	set->ext_cd_cleanup = pd->ext_cd_cleanup;
40*4882a593Smuzhiyun 	set->ext_cd_gpio = pd->ext_cd_gpio;
41*4882a593Smuzhiyun 	set->ext_cd_gpio_invert = pd->ext_cd_gpio_invert;
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun 	if (pd->max_width)
44*4882a593Smuzhiyun 		set->max_width = pd->max_width;
45*4882a593Smuzhiyun 	if (pd->cfg_gpio)
46*4882a593Smuzhiyun 		set->cfg_gpio = pd->cfg_gpio;
47*4882a593Smuzhiyun 	if (pd->host_caps)
48*4882a593Smuzhiyun 		set->host_caps |= pd->host_caps;
49*4882a593Smuzhiyun 	if (pd->host_caps2)
50*4882a593Smuzhiyun 		set->host_caps2 |= pd->host_caps2;
51*4882a593Smuzhiyun 	if (pd->pm_caps)
52*4882a593Smuzhiyun 		set->pm_caps |= pd->pm_caps;
53*4882a593Smuzhiyun }
54