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