brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · c44a762 Raw
97 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * RDC321x MFD southbridge driver4 *5 * Copyright (C) 2007-2010 Florian Fainelli <florian@openwrt.org>6 * Copyright (C) 2010 Bernhard Loos <bernhardloos@googlemail.com>7 */8#include <linux/module.h>9#include <linux/kernel.h>10#include <linux/platform_device.h>11#include <linux/pci.h>12#include <linux/mfd/core.h>13#include <linux/mfd/rdc321x.h>14 15static struct rdc321x_wdt_pdata rdc321x_wdt_pdata;16 17static const struct resource rdc321x_wdt_resource[] = {18	{19		.name	= "wdt-reg",20		.start	= RDC321X_WDT_CTRL,21		.end	= RDC321X_WDT_CTRL + 0x3,22		.flags	= IORESOURCE_IO,23	}24};25 26static struct rdc321x_gpio_pdata rdc321x_gpio_pdata = {27	.max_gpios	= RDC321X_NUM_GPIO,28};29 30static const struct resource rdc321x_gpio_resources[] = {31	{32		.name	= "gpio-reg1",33		.start	= RDC321X_GPIO_CTRL_REG1,34		.end	= RDC321X_GPIO_CTRL_REG1 + 0x7,35		.flags	= IORESOURCE_IO,36	}, {37		.name	= "gpio-reg2",38		.start	= RDC321X_GPIO_CTRL_REG2,39		.end	= RDC321X_GPIO_CTRL_REG2 + 0x7,40		.flags	= IORESOURCE_IO,41	}42};43 44static const struct mfd_cell rdc321x_sb_cells[] = {45	{46		.name		= "rdc321x-wdt",47		.resources	= rdc321x_wdt_resource,48		.num_resources	= ARRAY_SIZE(rdc321x_wdt_resource),49		.platform_data	= &rdc321x_wdt_pdata,50		.pdata_size	= sizeof(rdc321x_wdt_pdata),51	}, {52		.name		= "rdc321x-gpio",53		.resources	= rdc321x_gpio_resources,54		.num_resources	= ARRAY_SIZE(rdc321x_gpio_resources),55		.platform_data	= &rdc321x_gpio_pdata,56		.pdata_size	= sizeof(rdc321x_gpio_pdata),57	},58};59 60static int rdc321x_sb_probe(struct pci_dev *pdev,61					const struct pci_device_id *ent)62{63	int err;64 65	err = pci_enable_device(pdev);66	if (err) {67		dev_err(&pdev->dev, "failed to enable device\n");68		return err;69	}70 71	rdc321x_gpio_pdata.sb_pdev = pdev;72	rdc321x_wdt_pdata.sb_pdev = pdev;73 74	return devm_mfd_add_devices(&pdev->dev, -1,75				    rdc321x_sb_cells,76				    ARRAY_SIZE(rdc321x_sb_cells),77				    NULL, 0, NULL);78}79 80static const struct pci_device_id rdc321x_sb_table[] = {81	{ PCI_DEVICE(PCI_VENDOR_ID_RDC, PCI_DEVICE_ID_RDC_R6030) },82	{}83};84MODULE_DEVICE_TABLE(pci, rdc321x_sb_table);85 86static struct pci_driver rdc321x_sb_driver = {87	.name		= "RDC321x Southbridge",88	.id_table	= rdc321x_sb_table,89	.probe		= rdc321x_sb_probe,90};91 92module_pci_driver(rdc321x_sb_driver);93 94MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");95MODULE_LICENSE("GPL");96MODULE_DESCRIPTION("RDC R-321x MFD southbridge driver");97