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