mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/arch/arm/mach-omap2/board-n8x0.c
 | 
						|
+++ b/arch/arm/mach-omap2/board-n8x0.c
 | 
						|
@@ -15,8 +15,11 @@
 | 
						|
 #include <linux/delay.h>
 | 
						|
 #include <linux/gpio.h>
 | 
						|
 #include <linux/init.h>
 | 
						|
+#include <linux/irq.h>
 | 
						|
 #include <linux/io.h>
 | 
						|
 #include <linux/stddef.h>
 | 
						|
+#include <linux/platform_device.h>
 | 
						|
+#include <linux/platform_data/cbus.h>
 | 
						|
 #include <linux/i2c.h>
 | 
						|
 #include <linux/spi/spi.h>
 | 
						|
 #include <linux/usb/musb.h>
 | 
						|
@@ -193,6 +196,110 @@ static struct omap_onenand_platform_data
 | 
						|
 };
 | 
						|
 #endif
 | 
						|
 
 | 
						|
+#if defined(CONFIG_CBUS) || defined(CONFIG_CBUS_MODULE)
 | 
						|
+
 | 
						|
+static struct cbus_host_platform_data n8x0_cbus_data = {
 | 
						|
+	.clk_gpio	= 66,
 | 
						|
+	.dat_gpio	= 65,
 | 
						|
+	.sel_gpio	= 64,
 | 
						|
+};
 | 
						|
+
 | 
						|
+static struct platform_device n8x0_cbus_device = {
 | 
						|
+	.name		= "cbus",
 | 
						|
+	.id		= -1,
 | 
						|
+	.dev		= {
 | 
						|
+		.platform_data = &n8x0_cbus_data,
 | 
						|
+	},
 | 
						|
+};
 | 
						|
+
 | 
						|
+static struct resource retu_resource[] = {
 | 
						|
+	{
 | 
						|
+		.start	= -EINVAL, /* set later */
 | 
						|
+		.flags	= IORESOURCE_IRQ,
 | 
						|
+	},
 | 
						|
+};
 | 
						|
+
 | 
						|
+static struct cbus_retu_platform_data n8x0_retu_data = {
 | 
						|
+	.devid		= CBUS_RETU_DEVICE_ID,
 | 
						|
+};
 | 
						|
+
 | 
						|
+static struct platform_device retu_device = {
 | 
						|
+	.name		= "retu",
 | 
						|
+	.id		= -1,
 | 
						|
+	.resource	= retu_resource,
 | 
						|
+	.num_resources	= ARRAY_SIZE(retu_resource),
 | 
						|
+	.dev		= {
 | 
						|
+		.platform_data = &n8x0_retu_data,
 | 
						|
+		.parent = &n8x0_cbus_device.dev,
 | 
						|
+	},
 | 
						|
+};
 | 
						|
+
 | 
						|
+static struct resource tahvo_resource[] = {
 | 
						|
+	{
 | 
						|
+		.start	= -EINVAL, /* set later */
 | 
						|
+		.flags	= IORESOURCE_IRQ,
 | 
						|
+	}
 | 
						|
+};
 | 
						|
+
 | 
						|
+static struct platform_device tahvo_device = {
 | 
						|
+	.name		= "tahvo",
 | 
						|
+	.id		= -1,
 | 
						|
+	.resource	= tahvo_resource,
 | 
						|
+	.num_resources	= ARRAY_SIZE(tahvo_resource),
 | 
						|
+	.dev		= {
 | 
						|
+		.parent = &n8x0_cbus_device.dev,
 | 
						|
+	},
 | 
						|
+};
 | 
						|
+
 | 
						|
+static void __init n8x0_cbus_init(void)
 | 
						|
+{
 | 
						|
+	int		ret;
 | 
						|
+
 | 
						|
+	platform_device_register(&n8x0_cbus_device);
 | 
						|
+
 | 
						|
+	ret = gpio_request(108, "RETU irq");
 | 
						|
+	if (ret < 0) {
 | 
						|
+		pr_err("retu: Unable to reserve IRQ GPIO\n");
 | 
						|
+		return;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	ret = gpio_direction_input(108);
 | 
						|
+	if (ret < 0) {
 | 
						|
+		pr_err("retu: Unable to change gpio direction\n");
 | 
						|
+		gpio_free(108);
 | 
						|
+		return;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	irq_set_irq_type(gpio_to_irq(108), IRQ_TYPE_EDGE_RISING);
 | 
						|
+	retu_resource[0].start = gpio_to_irq(108);
 | 
						|
+	platform_device_register(&retu_device);
 | 
						|
+
 | 
						|
+	ret = gpio_request(111, "TAHVO irq");
 | 
						|
+	if (ret) {
 | 
						|
+		pr_err("tahvo: Unable to reserve IRQ GPIO\n");
 | 
						|
+		gpio_free(108);
 | 
						|
+		return;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	/* Set the pin as input */
 | 
						|
+	ret = gpio_direction_input(111);
 | 
						|
+	if (ret) {
 | 
						|
+		pr_err("tahvo: Unable to change direction\n");
 | 
						|
+		gpio_free(108);
 | 
						|
+		gpio_free(111);
 | 
						|
+		return;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	tahvo_resource[0].start = gpio_to_irq(111);
 | 
						|
+	platform_device_register(&tahvo_device);
 | 
						|
+}
 | 
						|
+
 | 
						|
+#else
 | 
						|
+static inline void __init n8x0_cbus_init(void)
 | 
						|
+{
 | 
						|
+}
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 #if defined(CONFIG_MENELAUS) &&						\
 | 
						|
 	(defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE))
 | 
						|
 
 | 
						|
@@ -671,6 +778,8 @@ static inline void board_serial_init(voi
 | 
						|
 static void __init n8x0_init_machine(void)
 | 
						|
 {
 | 
						|
 	omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC);
 | 
						|
+	n8x0_cbus_init();
 | 
						|
+
 | 
						|
 	/* FIXME: add n810 spi devices */
 | 
						|
 	spi_register_board_info(n800_spi_board_info,
 | 
						|
 				ARRAY_SIZE(n800_spi_board_info));
 | 
						|
--- /dev/null
 | 
						|
+++ b/include/linux/platform_data/cbus.h
 | 
						|
@@ -0,0 +1,38 @@
 | 
						|
+/*
 | 
						|
+ * cbus.h - CBUS platform_data definition
 | 
						|
+ *
 | 
						|
+ * Copyright (C) 2004 - 2009 Nokia Corporation
 | 
						|
+ *
 | 
						|
+ * Written by Felipe Balbi <felipe.balbi@nokia.com>
 | 
						|
+ *
 | 
						|
+ * This file is subject to the terms and conditions of the GNU General
 | 
						|
+ * Public License. See the file "COPYING" in the main directory of this
 | 
						|
+ * archive for more details.
 | 
						|
+ *
 | 
						|
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
						|
+ */
 | 
						|
+
 | 
						|
+#ifndef __INCLUDE_LINUX_CBUS_H
 | 
						|
+#define __INCLUDE_LINUX_CBUS_H
 | 
						|
+
 | 
						|
+#define CBUS_RETU_DEVICE_ID	0x01
 | 
						|
+#define CBUS_TAHVO_DEVICE_ID	0x02
 | 
						|
+
 | 
						|
+struct cbus_host_platform_data {
 | 
						|
+	int	dat_gpio;
 | 
						|
+	int	clk_gpio;
 | 
						|
+	int	sel_gpio;
 | 
						|
+};
 | 
						|
+
 | 
						|
+struct cbus_retu_platform_data {
 | 
						|
+	int	devid;
 | 
						|
+};
 | 
						|
+
 | 
						|
+#endif /* __INCLUDE_LINUX_CBUS_H */
 |