162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// Copyright 2010 Ben Dooks <ben-linux <at> fluff.org>
462306a36Sopenharmony_ci//
562306a36Sopenharmony_ci// Helper for platform data setting
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/kernel.h>
862306a36Sopenharmony_ci#include <linux/slab.h>
962306a36Sopenharmony_ci#include <linux/string.h>
1062306a36Sopenharmony_ci#include <linux/platform_device.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "devs.h"
1362306a36Sopenharmony_ci#include "sdhci.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_civoid __init *s3c_set_platdata(void *pd, size_t pdsize,
1662306a36Sopenharmony_ci			      struct platform_device *pdev)
1762306a36Sopenharmony_ci{
1862306a36Sopenharmony_ci	void *npd;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci	if (!pd) {
2162306a36Sopenharmony_ci		/* too early to use dev_name(), may not be registered */
2262306a36Sopenharmony_ci		printk(KERN_ERR "%s: no platform data supplied\n", pdev->name);
2362306a36Sopenharmony_ci		return NULL;
2462306a36Sopenharmony_ci	}
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	npd = kmemdup(pd, pdsize, GFP_KERNEL);
2762306a36Sopenharmony_ci	if (!npd)
2862306a36Sopenharmony_ci		return NULL;
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	pdev->dev.platform_data = npd;
3162306a36Sopenharmony_ci	return npd;
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_civoid s3c_sdhci_set_platdata(struct s3c_sdhci_platdata *pd,
3562306a36Sopenharmony_ci			     struct s3c_sdhci_platdata *set)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	set->cd_type = pd->cd_type;
3862306a36Sopenharmony_ci	set->ext_cd_init = pd->ext_cd_init;
3962306a36Sopenharmony_ci	set->ext_cd_cleanup = pd->ext_cd_cleanup;
4062306a36Sopenharmony_ci	set->ext_cd_gpio = pd->ext_cd_gpio;
4162306a36Sopenharmony_ci	set->ext_cd_gpio_invert = pd->ext_cd_gpio_invert;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	if (pd->max_width)
4462306a36Sopenharmony_ci		set->max_width = pd->max_width;
4562306a36Sopenharmony_ci	if (pd->cfg_gpio)
4662306a36Sopenharmony_ci		set->cfg_gpio = pd->cfg_gpio;
4762306a36Sopenharmony_ci	if (pd->host_caps)
4862306a36Sopenharmony_ci		set->host_caps |= pd->host_caps;
4962306a36Sopenharmony_ci	if (pd->host_caps2)
5062306a36Sopenharmony_ci		set->host_caps2 |= pd->host_caps2;
5162306a36Sopenharmony_ci	if (pd->pm_caps)
5262306a36Sopenharmony_ci		set->pm_caps |= pd->pm_caps;
5362306a36Sopenharmony_ci}
54