1*717c3dbcSMa Jun /* 2*717c3dbcSMa Jun * Copyright (C) 2015 Hisilicon Limited, All Rights Reserved. 3*717c3dbcSMa Jun * Author: Jun Ma <majun258@huawei.com> 4*717c3dbcSMa Jun * Author: Yun Wu <wuyun.wu@huawei.com> 5*717c3dbcSMa Jun * 6*717c3dbcSMa Jun * This program is free software; you can redistribute it and/or modify 7*717c3dbcSMa Jun * it under the terms of the GNU General Public License version 2 as 8*717c3dbcSMa Jun * published by the Free Software Foundation. 9*717c3dbcSMa Jun * 10*717c3dbcSMa Jun * This program is distributed in the hope that it will be useful, 11*717c3dbcSMa Jun * but WITHOUT ANY WARRANTY; without even the implied warranty of 12*717c3dbcSMa Jun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*717c3dbcSMa Jun * GNU General Public License for more details. 14*717c3dbcSMa Jun * 15*717c3dbcSMa Jun * You should have received a copy of the GNU General Public License 16*717c3dbcSMa Jun * along with this program. If not, see <http://www.gnu.org/licenses/>. 17*717c3dbcSMa Jun */ 18*717c3dbcSMa Jun 19*717c3dbcSMa Jun #include <linux/module.h> 20*717c3dbcSMa Jun #include <linux/of_address.h> 21*717c3dbcSMa Jun #include <linux/of_irq.h> 22*717c3dbcSMa Jun #include <linux/of_platform.h> 23*717c3dbcSMa Jun #include <linux/platform_device.h> 24*717c3dbcSMa Jun #include <linux/slab.h> 25*717c3dbcSMa Jun 26*717c3dbcSMa Jun /** 27*717c3dbcSMa Jun * struct mbigen_device - holds the information of mbigen device. 28*717c3dbcSMa Jun * 29*717c3dbcSMa Jun * @pdev: pointer to the platform device structure of mbigen chip. 30*717c3dbcSMa Jun * @base: mapped address of this mbigen chip. 31*717c3dbcSMa Jun */ 32*717c3dbcSMa Jun struct mbigen_device { 33*717c3dbcSMa Jun struct platform_device *pdev; 34*717c3dbcSMa Jun void __iomem *base; 35*717c3dbcSMa Jun }; 36*717c3dbcSMa Jun 37*717c3dbcSMa Jun static int mbigen_device_probe(struct platform_device *pdev) 38*717c3dbcSMa Jun { 39*717c3dbcSMa Jun struct mbigen_device *mgn_chip; 40*717c3dbcSMa Jun struct resource *res; 41*717c3dbcSMa Jun 42*717c3dbcSMa Jun mgn_chip = devm_kzalloc(&pdev->dev, sizeof(*mgn_chip), GFP_KERNEL); 43*717c3dbcSMa Jun if (!mgn_chip) 44*717c3dbcSMa Jun return -ENOMEM; 45*717c3dbcSMa Jun 46*717c3dbcSMa Jun mgn_chip->pdev = pdev; 47*717c3dbcSMa Jun 48*717c3dbcSMa Jun res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 49*717c3dbcSMa Jun mgn_chip->base = devm_ioremap_resource(&pdev->dev, res); 50*717c3dbcSMa Jun if (IS_ERR(mgn_chip->base)) 51*717c3dbcSMa Jun return PTR_ERR(mgn_chip->base); 52*717c3dbcSMa Jun 53*717c3dbcSMa Jun platform_set_drvdata(pdev, mgn_chip); 54*717c3dbcSMa Jun 55*717c3dbcSMa Jun return 0; 56*717c3dbcSMa Jun } 57*717c3dbcSMa Jun 58*717c3dbcSMa Jun static const struct of_device_id mbigen_of_match[] = { 59*717c3dbcSMa Jun { .compatible = "hisilicon,mbigen-v2" }, 60*717c3dbcSMa Jun { /* END */ } 61*717c3dbcSMa Jun }; 62*717c3dbcSMa Jun MODULE_DEVICE_TABLE(of, mbigen_of_match); 63*717c3dbcSMa Jun 64*717c3dbcSMa Jun static struct platform_driver mbigen_platform_driver = { 65*717c3dbcSMa Jun .driver = { 66*717c3dbcSMa Jun .name = "Hisilicon MBIGEN-V2", 67*717c3dbcSMa Jun .owner = THIS_MODULE, 68*717c3dbcSMa Jun .of_match_table = mbigen_of_match, 69*717c3dbcSMa Jun }, 70*717c3dbcSMa Jun .probe = mbigen_device_probe, 71*717c3dbcSMa Jun }; 72*717c3dbcSMa Jun 73*717c3dbcSMa Jun module_platform_driver(mbigen_platform_driver); 74*717c3dbcSMa Jun 75*717c3dbcSMa Jun MODULE_AUTHOR("Jun Ma <majun258@huawei.com>"); 76*717c3dbcSMa Jun MODULE_AUTHOR("Yun Wu <wuyun.wu@huawei.com>"); 77*717c3dbcSMa Jun MODULE_LICENSE("GPL"); 78*717c3dbcSMa Jun MODULE_DESCRIPTION("Hisilicon MBI Generator driver"); 79