diff options
| author | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-04-28 09:54:16 +0000 | 
|---|---|---|
| committer | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-04-28 09:54:16 +0000 | 
| commit | dac867236df7563d94f533920a95e8370a3a4c74 (patch) | |
| tree | 5ee2e18d289278c7533c9f791f50951f1f66fb86 /target/linux/rdc/patches-2.6.30/001-rdc321x_mfd_southbridge.patch | |
| parent | b94d47a36de418ed22b58d739dd6de907db77a8f (diff) | |
[rdc] use upstream MFD, GPIO patch, put everything in patches.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21219 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/rdc/patches-2.6.30/001-rdc321x_mfd_southbridge.patch')
| -rw-r--r-- | target/linux/rdc/patches-2.6.30/001-rdc321x_mfd_southbridge.patch | 205 | 
1 files changed, 205 insertions, 0 deletions
| diff --git a/target/linux/rdc/patches-2.6.30/001-rdc321x_mfd_southbridge.patch b/target/linux/rdc/patches-2.6.30/001-rdc321x_mfd_southbridge.patch new file mode 100644 index 000000000..a5c673650 --- /dev/null +++ b/target/linux/rdc/patches-2.6.30/001-rdc321x_mfd_southbridge.patch @@ -0,0 +1,205 @@ +This patch adds a new MFD driver for the RDC321x southbridge. This southbridge +is always present in the RDC321x System-on-a-Chip and provides access to some +GPIOs as well as a watchdog. Access to these two functions is done using the +southbridge PCI device configuration space. + +Signed-off-by: Florian Fainelli <florian@openwrt.org> +--- +Changes from v2: +- pass the pci_dev pointer to MFD cell drivers as platform_data +- remove the printk(KERN_ERR and use dev_err instead +- removed pci_dev accessors +- use DEFINE_PCI_DEVICE_TABLE + +Index: linux-2.6.30.10/drivers/mfd/Kconfig +=================================================================== +--- linux-2.6.30.10.orig/drivers/mfd/Kconfig	2010-04-28 10:48:54.000000000 +0200 ++++ linux-2.6.30.10/drivers/mfd/Kconfig	2010-04-28 10:49:44.000000000 +0200 +@@ -241,6 +241,15 @@ + 	 Say yes here if you want to include support GPIO for pins on + 	 the PCF50633 chip. +  ++config MFD_RDC321X ++	tristate "Support for RDC-R321x southbridge" ++	select MFD_CORE ++	depends on PCI ++	help ++	  Say yes here if you want to have support for the RDC R-321x SoC ++	  southbridge which provides access to GPIOs and Watchdog using the ++	  southbridge PCI device configuration space. ++ + endmenu +  + menu "Multimedia Capabilities Port drivers" +Index: linux-2.6.30.10/drivers/mfd/Makefile +=================================================================== +--- linux-2.6.30.10.orig/drivers/mfd/Makefile	2010-04-28 10:48:54.000000000 +0200 ++++ linux-2.6.30.10/drivers/mfd/Makefile	2010-04-28 10:49:02.000000000 +0200 +@@ -40,4 +40,6 @@ +  + obj-$(CONFIG_MFD_PCF50633)	+= pcf50633-core.o + obj-$(CONFIG_PCF50633_ADC)	+= pcf50633-adc.o +-obj-$(CONFIG_PCF50633_GPIO)	+= pcf50633-gpio.o +\ No newline at end of file ++obj-$(CONFIG_PCF50633_GPIO)	+= pcf50633-gpio.o ++ ++obj-$(CONFIG_MFD_RDC321X)	+= rdc321x-southbridge.o +Index: linux-2.6.30.10/drivers/mfd/rdc321x-southbridge.c +=================================================================== +--- /dev/null	1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.30.10/drivers/mfd/rdc321x-southbridge.c	2010-04-28 10:49:02.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* ++ * RDC321x MFD southbrige driver ++ * ++ * Copyright (C) 2007-2010 Florian Fainelli <florian@openwrt.org> ++ * Copyright (C) 2010 Bernhard Loos <bernhardloos@googlemail.com> ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ */ ++#include <linux/init.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/platform_device.h> ++#include <linux/pci.h> ++#include <linux/mfd/core.h> ++#include <linux/mfd/rdc321x.h> ++ ++static struct rdc321x_wdt_pdata rdc321x_wdt_pdata; ++ ++static struct resource rdc321x_wdt_resource[] = { ++	{ ++		.name	= "wdt-reg", ++		.start	= RDC321X_WDT_CTRL, ++		.end	= RDC321X_WDT_CTRL + 0x3, ++		.flags	= IORESOURCE_MEM, ++	} ++}; ++ ++static struct rdc321x_gpio_pdata rdc321x_gpio_pdata = { ++	.max_gpios	= RDC321X_MAX_GPIO, ++}; ++ ++static struct resource rdc321x_gpio_resources[] = { ++	{ ++		.name	= "gpio-reg1", ++		.start	= RDC321X_GPIO_CTRL_REG1, ++		.end	= RDC321X_GPIO_CTRL_REG1 + 0x7, ++		.flags	= IORESOURCE_MEM, ++	}, { ++		.name	= "gpio-reg2", ++		.start	= RDC321X_GPIO_CTRL_REG2, ++		.end	= RDC321X_GPIO_CTRL_REG2 + 0x7, ++		.flags	= IORESOURCE_MEM, ++	} ++}; ++ ++static struct mfd_cell rdc321x_sb_cells[] = { ++	{ ++		.name		= "rdc321x-wdt", ++		.resources	= rdc321x_wdt_resource, ++		.num_resources	= ARRAY_SIZE(rdc321x_wdt_resource), ++		.driver_data	= &rdc321x_wdt_pdata, ++	}, { ++		.name		= "rdc321x-gpio", ++		.resources	= rdc321x_gpio_resources, ++		.num_resources	= ARRAY_SIZE(rdc321x_gpio_resources), ++		.driver_data	= &rdc321x_gpio_pdata, ++	}, ++}; ++ ++static int __devinit rdc321x_sb_probe(struct pci_dev *pdev, ++					const struct pci_device_id *ent) ++{ ++	int err; ++ ++	err = pci_enable_device(pdev); ++	if (err) { ++		dev_err(&pdev->dev, "failed to enable device\n"); ++		return err; ++	} ++ ++	rdc321x_gpio_pdata.sb_pdev = pdev; ++	rdc321x_wdt_pdata.sb_pdev = pdev; ++ ++	return mfd_add_devices(&pdev->dev, -1, ++		rdc321x_sb_cells, ARRAY_SIZE(rdc321x_sb_cells), NULL, 0); ++} ++ ++static void __devexit rdc321x_sb_remove(struct pci_dev *pdev) ++{ ++	mfd_remove_devices(&pdev->dev); ++} ++ ++static DEFINE_PCI_DEVICE_TABLE(rdc321x_sb_table) = { ++	{ PCI_DEVICE(PCI_VENDOR_ID_RDC, PCI_DEVICE_ID_RDC_R6030) }, ++	{} ++}; ++ ++static struct pci_driver rdc321x_sb_driver = { ++	.name		= "RDC321x Southbridge", ++	.id_table	= rdc321x_sb_table, ++	.probe		= rdc321x_sb_probe, ++	.remove		= __devexit_p(rdc321x_sb_remove), ++}; ++ ++static int __init rdc321x_sb_init(void) ++{ ++	return pci_register_driver(&rdc321x_sb_driver); ++} ++ ++static void __exit rdc321x_sb_exit(void) ++{ ++	pci_unregister_driver(&rdc321x_sb_driver); ++} ++ ++module_init(rdc321x_sb_init); ++module_exit(rdc321x_sb_exit); ++ ++MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>"); ++MODULE_LICENSE("GPL"); ++MODULE_DESCRIPTION("RDC R-321x MFD southbridge driver"); +Index: linux-2.6.30.10/include/linux/mfd/rdc321x.h +=================================================================== +--- /dev/null	1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.30.10/include/linux/mfd/rdc321x.h	2010-04-28 10:49:02.000000000 +0200 +@@ -0,0 +1,26 @@ ++#ifndef __RDC321X_MFD_H ++#define __RDC321X_MFD_H ++ ++#include <linux/types.h> ++#include <linux/pci.h> ++ ++/* Offsets to be accessed in the southbridge PCI ++ * device configuration register */ ++#define RDC321X_WDT_CTRL	0x44 ++#define RDC321X_GPIO_CTRL_REG1	0x48 ++#define RDC321X_GPIO_DATA_REG1	0x4c ++#define RDC321X_GPIO_CTRL_REG2	0x84 ++#define RDC321X_GPIO_DATA_REG2	0x88 ++ ++#define RDC321X_MAX_GPIO	58 ++ ++struct rdc321x_gpio_pdata { ++	struct pci_dev *sb_pdev; ++	unsigned max_gpios; ++}; ++ ++struct rdc321x_wdt_pdata { ++	struct pci_dev *sb_pdev; ++}; ++ ++#endif /* __RDC321X_MFD_H */ | 
